員工管理系統(C 語言)——客戶端解析

源碼下載地址:https://download.csdn.net/download/wenfei11471/10477504
客戶端功能:
1、運行時先測試是否能連通服務器(不暢通如下圖所示):
2、登錄時需要正確輸入賬號和密碼(如下圖所示):

3、成功登錄後,具有下圖所示功能:
4、查詢功能如下:
5、修改的具體功能如下:
6、修改的具體操作如下:
7、查歷史記錄功能如下:

客戶端邏輯函數詳解:
1、main 函數:
1] 與服務器建立連接,通過函數 net_init 產生連接套接字 connfd;
2] 通過函數 name_fun 獲取用戶名,函數 password_fun 獲取密碼;
3] 請求服務器驗證是否登錄成功;
4] 登錄成功,進入登錄處理函數 login_handle_fun 進行相關操作;
5] 登錄不成功,根據服務器返回信息判斷已有用戶登錄還是賬號密碼錯誤;
6] 登錄不成功會提示繼續登錄還是退出客戶端。
2、login_handle_fun 函數:
1] 參數:PRO * command (傳輸內容的結構體指針),int connfd (連接套接字)
2] 返回值:無
3] 功能:
1) 利用函數 read_file 函數顯示客戶端用戶的功能主界面;
2) 獲取並判斷用戶的需求;
3) 請求服務器驗證是否登錄成功;
4) 查看個人信息利用函數 show_info_fun 操作;
5) 修改個人信息利用函數 modify_info_fun 操作;
6) 查看歷史記錄利用函數 show_hist_fun 操作;
7) 退出登錄步驟:先向服務器發送退出信號,然後進入登錄用戶界面;
8) 退出客戶端:先向服務器發送退出信號,然後結束進程;
9) 非命令輸入,提示輸入錯誤,重新選擇。
3、show_info_fun 函數:
1] 參數:PRO * command (傳輸內容的結構體指針),int connfd (連接套接字)
2] 返回值:無
3] 功能:
1) 封裝查看個人信息協議 LOG_SER_INFO 併發送服務器;
2) 接收服務器數據並打印信息(用戶已登錄必有信息);
3) 工資打印方式可修改爲只保留 2 位有效數字。
4、show_hist_fun 函數:
1] 參數:PRO * command (傳輸內容的結構體指針),int connfd (連接套接字)
2] 返回值:無
3] 功能:
1) 封裝查看個人信息協議 LOG_SER_HIST 併發送服務器;
2) 接收服務器數據並打印信息(用戶已登錄必有信息);
3) 打印歷史記錄必須事先知道歷史記錄數據庫的 Column 數目。
5、modify_info_fun 函數:
1] 參數:PRO * command (傳輸內容的結構體指針),int connfd (連接套接字)
2] 返回值:無
3] 功能:
1) 利用函數 read_file 函數顯示用戶可修改的選項;
2) 獲取並判斷用戶的需求;
3) 修改登錄密碼利用函數 modify_pswd_fun 操作;
4) 修改聯繫方式利用函數 modify_tele_fun 操作;
5) 修改 E_mail 利用函數 modify_mail_fun 操作;
6) 修改家庭住址利用函數 modify_addr_fun 操作;
7) 非命令輸入,提示輸入錯誤,重新選擇;
8) 客戶端用戶不具備修改職位和工資權限。
6、modify_pswd_fun 函數:
1] 參數:PRO * command (傳輸內容的結構體指針),int connfd (連接套接字)
2] 返回值:無
3] 功能:
1) 封裝查看個人信息協議 LOG_MOD_PSWD;
2) 利用函數 password_fun 獲取合法的密碼發送服務器;
3) 接收服務器數據並打印登錄密碼是否修改成功。
7、modify_tele_fun 函數:
1] 參數:PRO * command (傳輸內容的結構體指針),int connfd (連接套接字)
2] 返回值:無
3] 功能:
1) 封裝查看個人信息協議 LOG_MOD_TELE 併發送服務器;
2) 接收服務器數據並打印聯繫方式是否修改成功;
3) 手機號碼爲 1 開頭的 11 位數,需要判斷;
4) scanf 賦值會留下 \n 在緩存區,需要用 getchar() 清除;
5) 本項目中使用的是 double 類型,最佳數據類型爲 long long int 類型。
8、modify_mail_fun 函數:
1] 參數:PRO * command (傳輸內容的結構體指針),int connfd (連接套接字)
2] 返回值:無
3] 功能:
1) 封裝查看個人信息協議 LOG_MOD_MAIL 併發送服務器;
2) 接收服務器數據並打印 E_mail 是否修改成功。
9、modify_addr_fun 函數:
1] 參數:PRO * command (傳輸內容的結構體指針),int connfd (連接套接字)
2] 返回值:無
3] 功能:
1) 封裝查看個人信息協議 LOG_MOD_ADDR 併發送服務器;
2) 接收服務器數據並打印家庭住址是否修改成功。

客戶端功能函數詳解:
1、illegal_string_fun 函數:
1] 參數:char *str 字符串
2] 返回值:int 類型
3] 功能:
1) 檢查字符串中除了大小寫字母和數字外是否含有其他字符;
2) 如果字符串中全是大小寫字母或數字則返回 0,否則返回 1。
2、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 兩個函數。
3、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 兩個函數。
4、net_init 函數:
1] 參數:無
2] 返回值:int connfd
3] 功能:
1) 客戶端與服務器建立連接並返回連接套接字 connfd。
5、failed 函數:
1] 參數:int ret,char *message
2] 返回值:無
3] 功能:
1) 基本錯誤檢查,出錯會打印錯誤信息。
6、read_file 函數:
1] 參數:const char *file 文件路徑
2] 返回值:無
3] 功能:
1) 按照路徑打開文件;
2) 讀取文件;
3) 輸出到標準輸出;
4) 關閉文件。

客戶端頭文件詳解:
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 目錄:存放客戶端可能使用到的文檔,如界面文檔

發佈了79 篇原創文章 · 獲贊 56 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章