首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++ 職工工資管理系統的設計與實現

     編輯:關於C++

C++ 職工工資管理系統的設計與實現

本文記錄一個基於 C++ 的職工工資管理系統的設計思路與核心代碼實現。系統採用面向對象方式,封裝職工數據與操作,實現資料的增、刪、改、查、統計及持久化存儲。

功能需求分析

  1. 輸入記錄:錄入職工姓名、工號、基本工資、職務工資、崗位津貼、醫療保險、公積金等字段,支援建立新數據文件或向現有文件追加記錄。
  2. 顯示記錄:依工號或姓名查詢並顯示單筆或多筆職工的各項工資明細與平均工資。
  3. 修改記錄:允許修改任意記錄的任意字段,並對比修改前後的數據。
  4. 查找記錄:支援按條件檢索,檢索前後均顯示記錄內容。
  5. 刪除記錄:可刪除數據文件中的任意記錄。
  6. 統計分析:
    • (A) 計算各項工資的平均值與總額;
    • (B) 統計「前三項工資之和」落在不同區間(≥3000、2000~3000、1000~2000)的職工人數及佔比;
    • (C) 以字符表格形式輸出全體職工工資明細表及各項平均工資。
  7. 數據持久化:提供將內存數據保存至文件的功能。

數據結構設計

定義 staff 類封裝單個職工信息:

class staff {
public:
    staff() { id[0] = name[0] = '\0'; mon1 = mon2 = mon3 = mon4 = mon5 = 0.0; }
    void setstaff(const char* ID, const char* Name,
                  double m1, double m2, double m3, double m4, double m5);
    void print() const;               // 顯示職工信息
    double summoney() const;          // 總工資
    double avgmoney() const;          // 平均工資
private:
    char id[5];
    char name[10];
    double mon1, mon2, mon3, mon4, mon5; // 基本、職務、津貼、醫保、公積金
};

核心功能實現要點

文件讀寫

使用 fstream 以二進制模式讀寫 staff 對象數組,實現 Infile(讀取)、Outfile(寫入/保存)操作。

記錄增刪改查

  • 新增:Insert 在數組尾部追加,並更新計數器。
  • 刪除:Delete 將目標記錄後移覆蓋,計數器遞減。
  • 修改:Modify 先顯示原記錄,再接收新數據覆寫。
  • 查找:Search 支援按工號或姓名匹配,找到則顯示詳細信息。

統計功能

  • Avgsum:累加各字段求平均、總工資。
  • Statistics:遍歷統計前三項工資之和落在指定區間的職工數與百分比。
  • PrintAll:格式化輸出完整工資表,含表頭、各職工明細、各項平均值底行。

代碼審視與改進方向

原始實現使用固定大小數組 staff sta[100000000],佔用大量靜態內存且極易溢出。後續重構建議:

  • 改用 std::vector<staff> 或鏈表動態管理記錄,按需分配內存。
  • 引入 RAII 機制管理文件流,避免資源洩漏。
  • 將 C 風格字符串升級為 std::string,提升安全性與便利性。
  • 分離界面邏輯與數據邏輯,便於單元測試與維護。

示例輸出格式

ID號 姓名 基本工資 職務工資 津貼 醫療保險 公積金 總工資 平均工資
01  張望  1286    794     198   109       135    2034   406.8
02  李明  1185    628     135    94       114    1740   348.0
...
各項平均工資 1092.2 625.2 145 88.8 108
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved