1.分析流程图:
服务器:
客户端:
2.实现过程
本项目基于TCP通信协议,搭建服务器和客户端,使用epoll实现多客户端的连接,借助sqlite数据库存储数据,实现用户的注册登录与查找。
epoll 的使用:
有客户端连接时连接成功并加入epfd中,其他套接字通信时判断标志位,执行相应代码
通信结构体:
typedef struct staff_info
{
int no; // 员工编号
char usertype[6]; // ADMIN USER
char name[128]; // 姓名
int age; // 年龄
char phone[128]; // 电话
char addr[512]; // 地址
char work[256]; // 职位
char date[128]; // 入职年月
int level; // 等级
double salary; // 工资
} staff_info_t;
// 定义双方通信的结构体信息
typedef struct
{
int msgtype; // 请求的消息类型
char usertype[6]; // ADMIN 1 USER 2
char username[128]; // 姓名
char passwd[8]; // 登陆密码
char recvmsg[258]; // 通信的消息
int flags; // 成功标志位
staff_info_t info; // 员工信息
} MSG;
登录
选择登录选项之后输入用户名和密码,根据登录选项和用户名和密码,填充通信结构体,登录标志位为1,填充成功之后发送给服务器并等待回复,服务器接收到判断标志位,执行登录代码,判断user表是否存在该用户名,密码是否正确
管理员登录成功后,可以进行如图操作:
普通用户登录成功后,可以进行如图操作:
查询
普通用户查询:
管理员用户查询:
修改
普通用户修改
管理员用户修改
普通用户只能修改自己的个别信息,管理员可以修改所有用户的全部信息,服务器通过通信结构体中的usertype判断用户类型,给出对应的回应
管理员的添加和删除
管理员添加和删除用户时,需要判断工号,添加时工号已经存在则添加失败,删除时工号不存在则删除失败
历史记录
服务器要创建一个history表格存储每次操作的记录,查询时全部发送给客户端