# 基于C++的小型公司工资管理系统
# 一、要求
## 1.1 问题描述
某公司需要存储雇员的编号、姓名、性别、所在部门,级别,并进行工资的计算。其中,雇员分为经理、技术人员、销售人员和销售经理。四类人员的月薪计算方法如下:经理拿固定月薪;技术人员按小时领取月薪;销售人员按其当月销售额的提成领取工资;销售经理既拿固定月薪也领取销售提成。
设计一程序能够对公司人员进行管理,应用到继承、抽象类、虚函数、虚基类、多态和文件的输入/输出等内容。
## 1.2 功能要求
- **添加功能**:程序能够任意添加上述四类人员的记录,可提供选择界面供用户选择所要添加的 人员类别,要求员工的编号要唯一,如果添加了重复编号的记录时,则提示数据添加重复并取消添加
- **查询功能**:可根据编号、姓名等信息对已添加的记录进行查询,如果未找到,给出相应的提 示信息,如果找到,则显示相应的记录信息
- **显示功能**:可显示当前系统中所有记录,每条记录占据一行
- **编辑功能**:可根据查询结果对相应的记录进行修改,修改时注意编号的唯一性
- **删除功能**:主要实现对已添加的人员记录进行删除。如果当前系统中没有相应的人员记录, 则提示“记录为空!”并返回操作;否则,输入要删除的人员的编号或姓名,根据所输入的信息删除该人员记录,如果没有找到该人员信息,则提示相应的记录不存
- **统计功能**:能根据多种参数进行人员的统计。例如,统计四类人员数量以及总数, 或者统计男、女员工的数量,或者统计平均工资、最高工资、最低工资等信息
- **保存功能**:可将当前系统中各类人员记录存入文件中,存入方式任意
- **读取功能**:可将保存在文件中的人员信息读入到当前系统中,供用户进行使用
## 1.3 问题的解决方案
根据系统功能要求,可以将问题解决分为以下步骤:
- 应用系统分析,建立该系统的功能模块框图以及界面的组织和设计
- 分析系统中的各个实体及它们之间的关系
- 根据问题描述,设计系统的类层次
- 完成类层次中各个类的描述
- 完成类中各个成员函数的定义
- 完成系统的应用模块
- 功能调试
- 完成系统总结报告
# 二、题目分析
首先需要用到面向对象编程的知识,题目中明确可以看出需要定义职员基类,包含编号、姓名、性别、所在部门,级别的基本属性,派生出经理和销售人员以及技术人员,销售经理兼有销售人员和经理的性质,即销售经理继承于销售人员和技术人员,派生类除基本属性还有其他工资计算所需要的数据,数据的存储可以采取链表的形式,方便查找和储存,其他功能的实现都是基于链表节点的查找、修改、删除。最后的保存和读取采取文件流。
**程序流程图**
![](http://www.writebug.com/myres/static/uploads/2021/10/19/72b110f16e95a9a53088bf5f52d1fd29.writebug)
# 三、类结构设计
**类之间的继承关系**
![](http://www.writebug.com/myres/static/uploads/2021/10/19/133c44a060adfa1c1a375c7cff419cbd.writebug)
![](http://www.writebug.com/myres/static/uploads/2021/10/19/84f8d6268be7c043f6555cf66e41bf3a.writebug)
其中,employee类为基类,定义了的编号、姓名、性别、所在部门,级别提供了基类指针,基本信息输入输出的接口。
technician类采用公有继承方式继承自employee类,增加了工作时间和每小时工资数,基本工资计算,以及工作时间的输入。
manager采取虚继承方式继承自employee类,增加了基本工资数,基本工资计算,以及基本工资的输入。
salesman采取虚继承方式继承自employee类,增加了销售额数和销售额提成,基本工资计算,以及销售额的输入。
Salesmanager多重继承方式继承自manager和salesman,公有继承manager和salesman的输入,增加基本工资计算。
# 四、工程结构组织
本项目使用Dev-CPP实现,工程文件结构图如图2所示。
![](http://www.writebug.com/myres/static/uploads/2021/10/19/9f8807e02ee2cff93a6a87baf4ae4375.writebug)
本项目一共由28个文件组成,各文件的功能如下表(表1)所示。
| 序号 | 文件名 | 说明 |
| ---- | --------------------- | ------------------------ |
| 1 | Face.h | Face类定义头文件,其他界面函数声明,界面声明 |
| 2 | Face.cpp | Face类实现文件,标题,进度条及界面实现 |
| 3 | employee.h | 职员类定义头文件 |
| 4 | employee.cpp | 职员类实现文件 |
| 5 | manager.h | 经理类定义头文件 |
| 6 | manager.cpp | 经理类实现文件 |
| 7 | salesman.h | 销售人员类定义头文件 |
| 8 | salesman.cpp | 销售人员实现文件 |
| 9 | technician.h | 技术人员类定义头文件 |
| 10 | technician.cpp | 技术人员类实现文件 |
| 11 | salesmanager.h | 销售经理类定义头文件 |
| 12 | salesmanager.cpp | 销售经理类实现文件 |
| 13 | control.h | 控制类定义头文件 |
| 14 | controldestory.cpp | 控制类析构函数实现文件 |
| 15 | addinformation.cpp | 控制类添加信息函数实现文件 |
| 16 | cancelinformation.cpp | 控制类删除信息函数实现文件 |
| 17 | changeinformation.cpp | 控制类修改信息函数实现文件 |
| 18 | countinformation.cpp | 控制类统计信息函数实现文件 |
| 19 | errorjudge.cpp | 输入整数时其他字符处理函数实现文件 |
| 20 | gotoxy.cpp | 光标跳转到xy函数实现文件 |
| 21 | keepinformation.cpp | 控制类保存信息函数实现文件 |
| 22 | readinformation.cpp | 控制类读取信息函数实现文件 |
| 23 | searchinformation.cpp | 控制类查询信息函数实现文件 |
| 24 | showface.cpp | 控制类界面函数实现文件 |
| 25 | showinformation.cpp | 控制类显示信息函数实现文件 |
| 26 | tongjiformation.cpp | 控制类统计信息函数实现文件 |
| 27 | main.cpp | 主函数文件 |
| 28 | myheader.h | 头文件文件 |
# 五、运行主要界面
**载入程序进度条**
![](http://www.writebug.com/myres/static/uploads/2021/10/19/71bfba899826380285b112798d02b66b.writebug)
**程序主界面**
![](http://www.writebug.com/myres/static/uploads/2021/10/19/d28b7d412d011d0eef54fa95c6e09d79.writebug)
**添加信息界面**
![](http://www.writebug.com/myres/static/uploads/2021/10/19/cf002349f7bc660ca8c67088540a1693.writebug)
**查询信息界面**
![](http://www.writebug.com/myres/static/uploads/2021/10/19/1f55d45addafefaad80a8d912ffa8356.writebug)
**删除信息界面**
![](http://www.writebug.com/myres/static/uploads/2021/10/19/64d2b9f8f838c93179edb3227ee0bd8b.writebug)
**修改信息界面**
![](http://www.writebug.com/myres/static/uploads/2021/10/19/c9fd81677d7c791cd9e932a49e97d435.writebug)
**显示信息界面**
![](http://www.writebug.com/myres/static/uploads/2021/10/19/ee4f57c42ce354aa6cb0b65db20c4b50.writebug)
**计算工资界面**
![](http://www.writebug.com/myres/static/uploads/2021/10/19/23890d6fc22c20d5ceda9ccce67f7a91.w