
(提醒:本人并非计算机专业学生,程序设计能力也不算强,此程序仅供参考学习,有缺点或问题可提出。)
大一下学期高级程序设计期末作业:使用C++设计一个高校职工工资管理系统。
问题背景:
大学主要有4类人员:教师、行政人员、后勤人员、学院院长。现需使用C++设计一个高校职工工资管理系统,以管理各职工的工资分配。
题目要求:
整个系统在设计过程中要充分体现出面向对象的三个基本特征(封装,继承,多态)。
要求职工类基本信息有职工号、姓名、月基本工资、年龄、性别、类别等(根据需要添加或删除)。
教师:职称,课酬标准(每课时),本月上课数(课时)
行政人员:职级,月奖金
后勤人员:岗位,月补贴
院长:学院名称,课酬和月奖金(继承父类),额外奖励
月工资的计算方法:
A、教师:基本月薪讲师为5000元,副教授乘以1.5系数,正教授乘以2系数;加上课酬(课酬标准*月上课数)
B、行政人员:基本月薪普通科员4000,处级干部7000;加上月度奖金
C、后勤人员:基本月薪3000;加上月度补贴
D、院长:基本月薪+课酬+月底奖金+月底额外奖励
菜单模块设置:
① 职工数据录入建档:
教师:职工号,姓名,职称
行政人员:职工号,姓名,职级(科员,处长)
后勤人员:职工号,姓名,岗位
院长:职工号,姓名,学院名称
② 月度工资发放
教师:输入本月上课课时
行政人员:输入本月月度奖金
后勤人员:输入本月月度补贴
院长:输入本月课时数,月度奖金,月度额外奖励
③ 查找职工基本情况和月工资:输入职工号查找
(增加职工,删除职工)
④ 数据统计:输出月度高校员工工资表
⑤ 退出本系统;
(其他功能根据自己能力可以添加)
C++代码:
/*高级程序设计期末项目设计
程序功能:
基本功能有输入职工的课时、奖金、补贴等数据,可按照职工号查找其基本资料,按照职工号增加或删除职工数据,最终输出月度工资表。
运行结果示例:

程序特点:
程序很好地体现了封装、继承和多态的面向对象的三个基本特征。
封装性体现在对各对象中的数据成员使用了protected声明,避免类外访问或修改数据成员;此外,运行过程中所需的函数(方法)如Counting、Reading等封装在外,确保封装性的同时提高易读性。
继承性首先体现在Teacher、Official、Logistical和Principal类继承Person类中,Person类有职工的基本信息,而各派生类中有此类型职工的独有数据;其次,由于院长同时作为教师和行政人员,因此Teacher类和Official类均是Principal类的虚基类,避免了多重继承时对内存空间的盲目分配。
多态性则体现在Teacher、Official、Logistical和Principal类中有一对同名但形参表不同的函数实现了函数重载(enteringt函数、enteringo函数、enteringl函数、enteringp函数),他们能被分别正确调用,是因为面向对象的多态性这个特征允许以不同的形参表来调用函数名相同的函数,体现了静态多态性。
除了能完成要求的基本功能外,根据我个人的程序设计能力和运行程序时的实际情况,我额外为之添加了储存职工数据的功能:将数据储存在同目录下的一个txt文件中。首先我思考了储存职工数据的必要性:可以避免每次运行程序时都要重新输入每个职工的数据,大大提升实际的工作效率和可持续性。而选择txt文件的原因有二:一是数据存放在txt文件中可在程序外查看数据,并可清晰明了地显示出来,不必运行程序才可以看到数据,方便平时的调查;二是可在程序外手动增删数据,不必留在程序中操作,提高了程序运行时的效率。
遇到的困难及解决方法:
首先是读取txt文件数据和写入数据到txt文件中。我先是学习了文件读写的方法,然后将职工中通用的数据设为6个,在txt文件中体现为每个一行。读取时按行读取,写入时按行写入即可。
然后就是增删职工数据的问题。我先是想用delete删除指针对应数组元素的方法,但是动态内存分配中不清楚指针的操作,并且delete和new必须一一对应,若要删除只能删除整个对象数组。经历几次失败后,我决定使用平移数组的方法。这样不仅不会影响到数组后面的元素,程序编写和阅读起来也很直观。
其他的各种小问题也很多,篇幅有限,解决过程也不再提及。
Thanks for your reading.