员工管理系统(C 语言)——服务器解析

源码下载地址:https://download.csdn.net/download/wenfei11471/10477504
服务器功能:
1、运行时主界面(服务器启动后,只有管理员下线,服务器不会关闭):
2、登录失败后,进入登录界面:
3、登录成功后,显示下图所示功能:
4、查询功能如下(需要输入查看的用户名):
5、修改的具体功能如下:
6、修改的具体操作如下:
7、添加功能如下:
8、删除功能如下:

服务器逻辑函数详解:
1、main 函数:
1] 全局定义 Usr、Root、Hist 后面函数都能直接使用,但不能修改;
2] 利用 create_struct 函数设置 Usr、Root、Hist 属性关联;
3] 根据 Usr 中的信息利用 create_db 函数创建用户数据库;
4] usr_state_init 函数初始化用户状态;
5] 创建线程,利用 manager_fun 函数实现管理员登录操作;
6] 服务器绑定 IP 和 Port;
7] 接收用户登录请求
8] check_usr_fun 函数检查用户登录的账号;
9] 用户登录成功利用 create_db 函数创建用户历史记录数据库;
10] add_hist 函数将本次登录 IP 和时间记录在用户历史记录数据库中;
11] 用户登录成功开辟线程函数 login_usr_fun 用于处理客户端请求;
12] 用户登录失败或者处理完用户请求后关闭连接套接字。
2、login_usr_fun 函数:
1] 参数:void * p (保存连接套接字和用户名)
2] 返回值:void * 类型
3] 功能:
1) 数据接收错误、用户掉线、用户发送 CLI_REQ_QUIT 时,线程退出;
2) search_info_fun 函数处理用户查询个人信息请求;
3) modify_psw 函数处理用户修改登录密码请求;
4) modify_tel 函数处理用户修改联系方式请求;
5) modify_mail 函数处理用户修改 E_mail 请求;
6) modify_addr 函数处理用户修改家庭住址请求;
7) search_hist_fun 函数处理用户查询历史记录请求;
8) 用户退出 usr_state_fun 函数将用户状态设为 0。
3、search_info_fun 函数:
1] 参数:PRO *command(传输结构体指针), DataBase *data(指定的数据库)
2] 返回值:无
3] 功能:
1) 打开数据库 sqlite3_open;
2) 执行查询语句:select * from table where column="context";;
3) 数据库查询函数 sqlite3_get_table 会将查询结果放在 result[][] 中;
4) 查询结果一一赋值给传输结构体的对应项;
5) sqlite3_free_table 函数释放 result 指向的空间;
6) 关闭已打开的数据库 sqlite3_close。
4、search_hist_fun 函数:
1] 参数:char (*record)[30](数组指针), DataBase *data(指定的数据库)
2] 返回值:无
3] 功能:
1) 打开数据库 sqlite3_open;
2) 执行查询语句:select * from table;;
3) 数据库查询函数 sqlite3_get_table 会将查询结果放在 result[][] 中;
4) 将 result[][] 值一一赋给 record[][];
5) sqlite3_free_table 函数释放 result 指向的空间;
6) 关闭已打开的数据库 sqlite3_close。
5、modify_psw/modify_name/modify_posi/modify_mail/modify_addr 函数:
1] 参数:char *name(用户名),char *(修改内容) DataBase *data(指定的数据库)
2] 返回值:无
3] 功能:
1) 打开数据库 sqlite3_open;
2) 执行查询语句:update table set column="context" where column="context";;
3) 数据库语句执行函数 sqlite3_exec;
4) 关闭已打开的数据库 sqlite3_close。
6、modify_salary/modify_tel 函数:
1] 参数:char *name(用户名),double(修改内容) DataBase *data(指定的数据库)
2] 返回值:无
3] 功能:
1) 打开数据库 sqlite3_open;
2) 执行查询语句:update table set column=value where column="context";;
3) 数据库语句执行函数 sqlite3_exec;
4) 关闭已打开的数据库 sqlite3_close。
7、manager_fun 函数:
1] 参数:void * arg (保留参数,无意义)
2] 返回值:void * 类型
3] 功能:
1) 管理登录函数;
2) 通过函数 name_fun 获取用户名,函数 password_fun 获取密码;
3) check_usr_fun 函数检查用户登录的账号;
4) 用户登录成功利用 manager_handler_fun 函数进入管理员操作界面;
5) 不论管理员登录成功与否,服务器开启后是不会关闭的。
8、manager_handler_fun 函数:
1] 参数:无
2] 返回值:无
3] 功能:
1) 利用函数 read_file 函数显示客户端用户的功能主界面;
2) show_info 函数打印用户信息;
3) 修改用户信息利用 modify_info_fun 函数操作;
4) 添加新的用户利用 add_usr 函数操作。
9、add_usr 函数:
1] 参数:无
2] 返回值:无
3] 功能:
1) 获取新用户的所有信息;
2) add_db 函数是添加新用户到用户数据库。
10、add_db 函数:
1] 参数:无
2] 返回值:无
3] 功能:
1) 打开数据库 sqlite3_open;
2) 执行查询语句:insert into table (column1, column2...) values ("context1", "context2"...);;
3) 数据库语句执行函数 sqlite3_exec;
4) 关闭已打开的数据库 sqlite3_close;
11、modify_info_fun 函数:
1] 参数:无
2] 返回值:无
3] 功能:
1) check_usr_fun 函数检查用户登录的账号是否存在;
2) 利用函数 read_file 函数显示管理员可修改的选项;
3) 修改登录密码利用函数 modify_psw 操作;
4) 修改用户姓名利用函数 modify_name 操作;
5) 修改用户工资利用函数 modify_salary 操作;
6) 修改用户职位利用函数 modify_posi 操作;
7) 修改联系方式利用函数 modify_tel 操作;
8) 修改 E_mail 利用函数 modify_mail 操作;
9) 修改家庭住址利用函数 modify_addr 操作;
10) 非命令输入,提示输入错误,重新选择。

客户端功能函数详解:
1、add_hist 函数:
1] 参数:无
2] 返回值:无
3] 功能:
1) 打开数据库 sqlite3_open;
2) 执行查询语句:insert into table (column1, column2...) values ("context1", "context2"...);;
3) 数据库语句执行函数 sqlite3_exec;
4) 关闭已打开的数据库 sqlite3_close;
5) 本函数中时间和日期添加需要修改。
2、creat_db 函数:
1] 参数:DataBase *data 包含数据库信息
2] 返回值:无
3] 功能:
1) 打开/创建数据库 sqlite3_open;
2) 执行查询语句:create table if not exists tablename (column1, column2...) ;;
3) 数据库语句执行函数 sqlite3_exec;
4) 关闭已打开的数据库 sqlite3_close;
5) 本函数创建普通用户数据库、管理员数据库和历史记录数据库分开了;
6) 创建管理员数据库时会直接将管理员账号和密码一起添加了。
3、create_struct 函数:
1] 参数:const char *pathfile, const char *tablename,const char *col[10]
2] 返回值:DataBase *db
3] 功能:
1) 将 pathfile 指向的字符串给 db->path;
2) 将 tablename 指向的字符串给 db->table;
3) 将 col[10] 指向的字符串给 db->column[i];
4) 将 db 指向的结构体作为返回值返回,因此用户记得 free。
4、illegal_string_fun 函数:
1] 参数:char *str 字符串
2] 返回值:int 类型
3] 功能:
1) 检查字符串中除了大小写字母和数字外是否含有其他字符;
2) 如果字符串中全是大小写字母或数字则返回 0,否则返回 1。
5、failed 函数:
1] 参数:int ret,char *message
2] 返回值:无
3] 功能:
1) 基本错误检查,出错会打印错误信息。
6、name_fun 函数:
1] 参数:char *str 字符串
2] 返回值:无
3] 功能:
1) 从输入端获取用户名;
2) 判断用户名是否为 0;
3) 判断用户名不能超过 19 个字符;
4) 利用 illegal_string_fun 判断是否有非法字符;
5) 用户名符合要求后将其赋值到 username 中;
6) 不能用 username = name,那样在函数结束后 name 会被释放;
7) 可以使用 strcpy 和 strcat 两个函数。
7、password_fun 函数:
1] 参数:char *str 字符串
2] 返回值:无
3] 功能:
1) 从输入端获取密码;
2) 判断密码不能少于 4 个字符;
3) 判断密码不能大于 19 个字符;
4) 利用 illegal_string_fun 判断是否有非法字符;
5) 密码符合要求后将其赋值到 usrpsw 中;
6) 不能用 usrpsw = psw,那样在函数结束后 psw 会被释放;
7) 可以使用 strcpy 和 strcat 两个函数。
8、read_file 函数:
1] 参数:const char *file 文件路径
2] 返回值:无
3] 功能:
1) 按照路径打开文件;
2) 读取文件;
3) 输出到标准输出;
4) 关闭文件。
9、usr_state_fun 函数:
1] 参数:char *name, DataBase *data, int state
2] 返回值:无
3] 功能:
根据用户名将其状态修改为对应的状态值
9、usr_state_init 函数:
1] 参数:DataBase *data, int state
2] 返回值:无
3] 功能:
1) 将所有用户的状态改为 0,一般为服务器启动和关闭时调用;
2) 必须保证状态为 column[3].

客户端头文件详解:
1、mydef.h 头文件:
1] 定义客户端的所有请求指令
2] 服务器的所有回复指令
3] 各类可能使用到的路径名
4] 各类常用的字符串汇总
5] 类型常量值定义
2、myfunction.h 头文件:
1] 对客户端所有使用到的函数进行申明
3、myinclude.h 头文件:
1] 定义函数中所有要使用到的头文件
4、mystruct.h 头文件:
1] 定义传输协议和数据类型结构体以及数据库信息的结构体

客户端目录介绍:
1、app 目录: 存放 Makefile 后产生的可执行文件
2、function 目录: 存放客户端功能函数
3、include 目录: 存放客户端相关的头文件
4、main 目录: 存放客户端主函数
5、obj 目录: 存放 Makefile 后产生的目标文件
6、step 目录: 存放客户端逻辑函数
7、text 目录: 存放客户端可能使用到的文档以及数据库

猜你喜欢

转载自blog.csdn.net/wenfei11471/article/details/80687740