員工管理系統(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 目錄:存放客戶端可能使用到的文檔以及數據庫

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章