C/C++實現員工工資管理系統【面向對象 文件讀寫】
課程學期作業,c/c++分別實現員工工資管理系統,c++包含面向對象操作以及文件讀寫,有詳細的word文檔描述,代碼、測試數據以及運行截圖。適合剛接觸過c/c++面向對象的大一大二學生。
博主大一時分別用c和c++以面向過程和麪向對象的方式實現了員工工資管理系統,二者的功能需求差不多,主要是實現方式不同,這裏是c++介紹,文末附上了c++實現的打包文件。
1.系統功能需求描述
2.系統設計
2.1 系統數據分析
該軟件用於管理某公司的銷售員、技術員、經理和銷售經理4類人員信息,人員信息包括:工號、姓名、性別、入職日期(計算工齡)、崗位、部門、當月工資等,各數據項含義如下:
- 工號:表示員工的工號,需要能區分4類不同的人員。
- 姓名:表示員工的姓名。
- 性別:表示員工的性別。
- 入職日期:表示員工的入職日期,包括年、月、日3個數據分量,是一個類,用於計算工齡。
- 崗位:表示員工所負責的崗位,枚舉型。
- 部門編號:表示員工所屬的部門。
- 底薪:表示員工每月的固定底薪,只有經理和銷售經理有該項。
- 工時:表示技術員每月的工作時長。
- 每小時工資:表示技術員工作一小時的報酬。
- 銷售額:表示銷售員的銷售額,或銷售經理所轄部門的銷售總額。
- 當月工資:表示員工的月工資。
2.2 系統功能模塊設計
“員工工資管理”系統模塊結構圖:
2.3 類的抽象與類間關係
3.類代碼的設計
日期類Date
class Date
{
private:
int year;
int month;
int day;
public:
int GetWorkAge();
int GetYear(); //獲取入職的年
int GetMonth(); //獲取入職的月
int GetDay(); //獲取入職的日
void SetDate(int y, int m, int d); //設置年月日
Date(); //三個構造函數
Date(int y, int m, int d);
Date(const Date & another);
void operator=(const Date & another); //重載等號運算符
friend istream & operator>>(istream & in, Date another); //重載輸入運算符
};
員工類Employee
class Employee
{
protected:
Date date; //入職日期
int ID; //工號
string name; //姓名
string gender; //性別
enum workpost job; //崗位
int section_ID; //部門編號
double salary; //當月工資
public:
static int EmpID; //靜態成員變量記錄ID的最大編號
Employee();
Employee(int id); //用工號來初始化臨時對象
Employee(string n, string g, enum workpost j, int S_ID, int y, int m, int d); //增加一個員工
Employee(int id, string n, string g, enum workpost j, int S_ID, int y, int m, int d, double sal); //初始化一個員工
void ReviseData(string n, string g, enum workpost j, int S_ID, int y, int m, int d); //修改員工基本資料
void ShowBasicData(); //顯示員工基本資料
void ShowData();
int GetSecID(); //獲取員工部門編號
int GetID(); //獲取員工工號
double GetSalary(); //獲取員工工資
string GetName(); //獲取員工姓名
string GetGender(); //獲取員工性別
Date GetDate(); //獲取入職日期
void SetID(int id); //重新更換崗位後設置id不變
void SetName(string na);
void SetGender(string ge);
void SetJob(enum workpost j);
void SetSectionID(int sec_id);
void SetDate(Date date);
bool operator==(const Employee& another); //用於比較工號是否相同的員工
virtual void CalculateSalary(); //計算當月工資
經理類Manager
class Manager :
virtual public Employee
{
protected:
double basic_salary; //底薪
public:
Manager(string n, string g, enum workpost j, int S_ID, int y, int m, int d);
Manager(int id, string n, string g, enum workpost j, int S_ID, int y, int m, int d, double BS, double sal);
void AddData(double b_s);
void ReviseData(double b_s);
void DeleteData();
void ShowData();
void SetBaseSalary(double BS);
double GetBaseSalary();
virtual void CalculateSalary(); //計算當月工資
};
技術員類Date
class Technician :
public Employee
{
private:
double work_hour; //工時
double payment_perhour; //每小時工資
public:
Technician(string n, string g, enum workpost j, int S_ID, int y, int m, int d);
Technician(int id, string n, string g, enum workpost j, int S_ID, int y, int m, int d, double WH, double PP, double sal);
void AddData(double w_h, double p_p);
void ReviseData(double w_h, double p_p);
void DeleteData();
void ShowData();
void SetHoursPay(double WH, double PP);
double GetWorkHour();
double GetPaymentPerhour();
virtual void CalculateSalary(); //計算當月工資
};
銷售員類Salesman
class Salesman :
virtual public Employee
{
protected:
double sales;
public:
Salesman(string n, string g, enum workpost j, int S_ID, int y, int m, int d);
Salesman(int id, string n, string g, enum workpost j, int S_ID, int y, int m, int d, double sales, double sal);
void AddData(double sales);
void ReviseData(double sales);
void DeleteData();
void ShowData();
void SetSales(double sales);
double GetSales();
virtual void CalculateSalary(); //計算當月工資
};
銷售經理類Salesmanager
class SalesManager :
public Salesman, public Manager
{
public:
SalesManager(string n, string g, enum workpost j, int S_ID, int y, int m, int d);
SalesManager(int id, string n, string g, enum workpost j, int S_ID, int y, int m, int d, double BS, double sales, double sal);
void AddData(double b_s);
void ReviseData(double b_s);
void DeleteData();
void ShowData();
virtual void CalculateSalary(); //計算當月工資
};
部門類Section
class Section
{
private:
int section_ID; //部門編號
string name; //部門名稱
bool is_possession; //判斷部門是否有銷售經理
public:
static int current_num; //靜態成員變量表示當前的最高的部門編號
Section();
Section(string name);
Section(int sec_id, string na, bool b);
Section(const Section & another);
void SetSecName(string na); //設置部門名稱
int GetSecID(); //獲得部門編號
string GetSecName(); //獲得部門名稱
bool IsPossession(); //判斷部門有無銷售經理
void IsPossession(bool b); //設置部門銷售經理空與否
};
4.系統實現
4.1 程序文件模塊
“員工工資管理”系統的程序文件模塊的劃分。
MyClass.h: 實體類定義文件,定義Date、Employee、Technician、Salesman、Manager、Salesmanager、Section七個類的結構。
MyClass.cpp: 實體類實現文件,定義Date、Employee、Technician、Salesman、Manager、Salesmanager、Section七個類的成員函數。
Interface.h: 界面類定義文件,定義interface類的結構。
Interface.cpp: 界面類實現文件,定義interface類的成員函數。
main.cpp: 主控模塊,程序入口,用於調用interface類的相關功能。
4.2 系統運行界面
主控模塊運行界面
部門管理模塊運行界面
基本資料數據維護運行界面
基本工資數據運行界面
查詢數據運行界面
分頁顯示運行界面
排序模塊運行界面:
統計模塊運行界面
測試數據和代碼以及詳細的報告說明已經打包好了
鏈接稍後附上