#include "client.h"
int create_socket(const char *address, int port);
int login(int socket, MSG *msg, int flag);
int add(int sockfd, MSG *msg);
int delete(int sockfd, MSG *msg);
int change(int sockfd, MSG *msg);
int search(int sockfd, MSG *msg);
int history(int sockfd, MSG *msg);
char name[20];
int main(int argc, const char *argv[])
{
int clientfd, n;
struct sockaddr_in sin;
MSG msg;
if (argc != 3)
{
fprintf(stderr, "Usage: %s [server IP address] [server port]\n", argv[0]);
exit(1);
}
// 创建套接字
clientfd = create_socket(argv[1], atoi(argv[2]));
MAIN:
while (1)
{
system("clear");
printf("=====================员工管理系统==========================\n");
printf("------------------------主界面-----------------------------\n");
printf("\t\t\t1.管理员登录\n");
printf("\t\t\t2.员工登录\n");
printf("\t\t\t3.退出\n");
printf("-----------------------------------------------------------\n");
scanf("%d", &n);
getchar();
switch (n)
{
case 1:
msg.info.usertype = ADMIN;
if (login(clientfd, &msg, n))
goto ROOT;
break;
case 2:
msg.info.usertype = USER;
if (login(clientfd, &msg, n))
goto STAFF;
break;
case 3:
close(clientfd);
return 0;
break;
default:
printf("选择错误\n");
break;
}
}
ROOT:
while (1)
{
system("clear");
printf("=====================员工管理系统==========================\n");
printf("------------------------ROOT-----------------------------\n");
printf("\t\t\t1.添加员工信息\n");
printf("\t\t\t2.删除员工信息\n");
printf("\t\t\t3.修改员工信息\n");
printf("\t\t\t4.查询员工信息\n");
printf("\t\t\t5.查询历史记录\n");
printf("\t\t\t6.返回主界面\n");
printf("\t\t\t0.退出系统\n");
printf("-----------------------------------------------------------\n");
scanf("%d", &n);
getchar();
switch (n)
{
case 1:
// 添加员工信息处理函数
add(clientfd, &msg);
break;
case 2:
// 删除员工信息处理函数
delete (clientfd, &msg);
break;
case 3:
// 修改员工信息处理函数
change(clientfd, &msg);
break;
case 4:
// 查询员工信息处理函数
search(clientfd, &msg);
break;
case 5:
// 查询历史记录处理函数
history(clientfd, &msg);
break;
case 6:
goto MAIN;
case 0:
close(clientfd);
return 0;
break;
default:
printf("选择错误\n");
break;
}
}
STAFF:
while (1)
{
system("clear");
printf("=====================员工管理系统==========================\n");
printf("------------------------Staff-----------------------------\n");
printf("\t\t\t1.查询员工信息\n");
printf("\t\t\t2.修改员工信息\n");
printf("\t\t\t3.返回主界面\n");
printf("\t\t\t0.退出系统\n");
printf("-----------------------------------------------------------\n");
scanf("%d", &n);
getchar();
switch (n)
{
case 1:
// 查询员工信息处理函数
search(clientfd, &msg);
break;
case 2:
change(clientfd, &msg);
// 修改员工信息处理函数
break;
case 3:
goto MAIN;
break;
case 0:
close(clientfd);
return 0;
break;
default:
printf("选择错误\n");
break;
}
}
return 0;
}
int create_socket(const char *address, int port)
{
int clientfd;
struct sockaddr_in sin;
// 创建套接字
clientfd = socket(AF_INET, SOCK_STREAM, 0);
if (clientfd == -1)
{
perror("socket() error");
exit(1);
}
// 初始化地址结构体
memset(&sin, 0, sizeof(sin));
sin.sin_family = AF_INET;
sin.sin_addr.s_addr = inet_addr(address);
sin.sin_port = htons(port);
if (connect(clientfd, (struct sockaddr *)&sin, sizeof(sin)) == -1)
{
perror("connect() error");
exit(1);
}
printf("连接成功!\n");
return clientfd;
}
int login(int sockfd, MSG *msg, int flag)
{
msg->msgtype = LOGIN;
if (1 == flag) // 管理员登录
{
msg->info.usertype = 0;
}
else if (2 == flag) // 员工登录
{
msg->info.usertype = 1;
}
printf("请输入用户名:\n");
scanf("%s", msg->info.name);
printf("请输入密码:\n");
scanf("%s", msg->info.passwd);
if (send(sockfd, msg, sizeof(MSG), 0) < 0)
{
printf("login send err \n");
return -1;
}
// 接收用户等级
if (recv(sockfd, msg, sizeof(MSG), 0) < 0)
{
printf("login recv err \n");
return -1;
}
if (msg->flags == 0)
{
printf("%s\n2秒后重新登录...\n", msg->recvmsg);
sleep(2);
return 0;
}
if (msg->flags == 1)
{
strcpy(name, msg->info.name);
printf("%s\n2秒后进入界面...\n", msg->recvmsg);
sleep(2);
return 1;
}
}
int add(int sockfd, MSG *msg)
{
msg->msgtype = ADD;
printf("请输入要添加的员工编号\n");
scanf("%d", &msg->info.id);
printf("请输入要添加的员工用户名\n");
scanf("%s", msg->info.name);
printf("请输入要添加的员工密码\n");
scanf("%s", msg->info.passwd);
printf("请输入要添加的员工年龄\n");
scanf("%d", &msg->info.age);
printf("请输入要添加的员工电话\n");
scanf("%s", msg->info.phone);
printf("请输入要添加的员工地址\n");
scanf("%s", msg->info.addr);
printf("请输入要添加的员工工作部门\n");
scanf("%s", msg->info.work);
printf("请输入要添加的员工入职时间\n");
scanf("%s", msg->info.date);
printf("请输入要添加的员工等级\n");
scanf("%d", &msg->info.level);
printf("请输入要添加的员工薪水\n");
scanf("%lf", &msg->info.salary);
if (send(sockfd, msg, sizeof(MSG), 0) < 0)
{
printf("send err\n");
return -1;
}
// 接收成功与否
if (recv(sockfd, msg, sizeof(MSG), 0) < 0)
{
printf("recv err\n");
return -1;
}
// 判断是否添加成功
if (msg->flags == 1)
{
printf("添加信息成功!!\n2秒刷新页面\n");
sleep(2);
}
// 操作成功打印成功信息
else
{
printf("添加信息失败!!%s\n2秒刷新页面\n", msg->recvmsg);
sleep(2);
}
return 0;
}
int delete(int sockfd, MSG *msg)
{
msg->msgtype = DELETE;
printf("请输入要删除员工的用户名:\n");
scanf("%s", msg->info.name);
if (send(sockfd, msg, sizeof(MSG), 0) < 0)
{
printf("send err\n");
return -1;
}
// 接收成功与否
if (recv(sockfd, msg, sizeof(MSG), 0) < 0)
{
printf("recv err\n");
return -1;
}
// 本次操作如果失败直接返回
if (msg->flags == 0)
{
printf("%s\n2秒刷新页面\n", msg->recvmsg);
sleep(2);
return -1;
}
// 操作成功打印成功信息
printf("%s\n两秒刷新页面\n", msg->recvmsg);
sleep(2);
return 0;
}
int change(int sockfd, MSG *msg)
{
int n;
msg->msgtype = MODIFY;
printf("请输入要修改的用户名:\n");
scanf("%s", msg->info.name
C语言 TCP并发服务器 员工管理系统
需积分: 0 53 浏览量
2023-02-27
15:20:34
上传
评论
收藏 7KB ZIP 举报
Holymeat
- 粉丝: 4265
- 资源: 1