本文記錄一個基於 C++ 的職工工資管理系統的設計思路與核心代碼實現。系統採用面向對象方式,封裝職工數據與操作,實現資料的增、刪、改、查、統計及持久化存儲。
定義 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> 或鏈表動態管理記錄,按需分配內存。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