高校工资管理系统课程设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计报告课程设计题目:高校工资管理系统
学号:
姓名:
专业:
班级:
指导教师:王志波
2011年12月 1 日
目录
一、设计要求 (3)
二、设计目的和设计思路 (4)
三、类的层次关系 (5)
四、部分程序源代码 (11)
五、课程设计总结 (16)
一、设计要求
1.高校职工工资信息有:教师编号、姓名、职工类别、月基本工作量、当月实际工作量、月基本工资、当月补助、当月课时费、实际总工资。
职工类别有五类:教师,实验员,行政人员,教师兼职实验员,行政人员兼职教师。
为了实现工资发放的自动功能,现要求编写程序来自动完成此功能。同时注意生成的相关数据结果以文件方式存放在硬盘中。
程序应具备从键盘录入,文件的可继续录入,任意职工的工资查询(可由职工编号和职工姓名来实现),如若有职工由于工作调动,则可进行相对应的删除动作。相关信息:每个月将学校职工的上个月任职情况及上个月工作的相关情况输入计算机,则本月职工的月工资按程序处理后的结果发放,其中职工的工资计算方法如下:
其中工资的基本构成如下:
教师:基本工资+课时费;实验员:基本工资+实验室补助;行政人员:基本工资+行政补贴;教师兼职实验员:基本工资+课时费+实验室补助;行政人员兼职教师:基本工资+行政补贴+课时费;
其中:
(1)课时费:教师每一个月的基本工作量为20,实验员每学期基本工作量为15,行政人员没有基本工作量,每节课时费为20元;课时费=(每月实际工作量-基本工作量)*20;
(2)每月基本工资:教师800元,实验员650元,行政人员750元。
(3)每月补助:行政补贴:250元。实验室补助:150元。
2.要求:
添加删除功能:能根据学院人事的变动情况,添加删除记录;
查询功能:能根据编号、姓名、类别等进行查询;
编辑功能(高级):根据查询对相应的记录进行修改,并存储;
统计功能:能根据多种参数进行统计(如基本工资、补助、课时费、总工资等);保存功能:能对输入的数据进行相应的存储。
二、设计目的和设计思路
1.程序设计目的:
通过设计一个较为简单的《高校工资管理系统》,进一步熟悉C++中类的概念,类的封装,继承的实现方式。了解系统开发的需求分析,类层次设计,模块分析,编码测试,模块组装与整体调试的全过程,加深对C++的理解与Visual C++环境的使用;逐步熟悉程序设计的方法,并养成良好的编程习惯。
2.程序设计目标:
高校主要有五类人员:教师,行政人员,实验员,教师兼职实验员,教师兼职行政员。
(1)要求应用链表以文件的形式将这些人的编号,姓名,职位,完成的课时,工资,性别等信息存储到硬盘上。
(2)添加的编号不能重复,姓名可以重复。
(3)打开文件,添加对象的时候实现自动排序。
(4)编号和姓名的查询,输入三次以上查询不到的时候自动跳回主菜单。
(5)统计功能:
a.输出在工资范围内的人员信息。
b.统计所有人的人数。
c.工资的总支出统计。
3.设计思路:
(1)类结构:建立一个抽象类Person 再进行两层派生。数据成员是protect;成员函数是public。Person 派生出三个类:{ teacher ,manager ,assistant } teacher 与manager 再派生出teacher-manager teacher 与assistant 再派生出teacher-assistant Function 是Person 类的一个友元类,Function 的私有成员是Person 类的一个对象(计算收入的功能的实现是在Person 的个个派生类中的成员函数中实现) Person 派生的每一个类都定义了”重载〃输入输出input,output 函数屏幕显示的数据通过调用无参的输入输出函数保存文件save()调用的是有参的输入输出函数Function 的成员函数实现菜单中的各个功能。
(2)系统功能模块:
1.查询功能的实现:调用Find(int ID,Person **p1,Person **p2)进行一一比对编号和姓名。再通P1 是否为空来判断是否查找到。
2.Find:遍历链表,如果符合条件可以通过P1 是否为空来判断是否查找到,也可以通过返回值是1 和0 来判断。
3.删除:同样删除中的关键也是通过调用Find来判断要删除的人,然后删除对象。调用save()自动保存。
5.统计:遍历链表找出符合条件的进行输出。
6.修改:调用Find找到节点进行重新赋值。调用save()自动保存。
7.添加:先插入到最后,再进行排序。
8.构造函数:读文件的实现:在读文件的时候利用构造函数读取文件里的所有内容,并且一一付给对象。再利用选择排序的方法将链表进行从小到大的顺序进行排序。
9.析构函数:遍历链表,释放内存空间。
三、类的层次关系
1.Person类(人员类)
class Person //人员抽象类
{
protected:
int No;
char Name[20];
int Duty; //0-教师,1-实验员,2-行政人员,3-教师兼实验员,4-行政兼教师double Salary; //基本工资
Person *next; //链表指针域
public:
Person()
{
next=0;
}
virtual ~Person()
{}
virtual void Input()=0;
virtual void Input(ifstream& ifs)=0; //从文件输入数据
virtual void Output()=0;
virtual void Output(ofstream& ofs)=0; //向文件输出数据
virtual double Incoming()=0;
friend class College;
};
2.Teacher类(教师类)
class Teacher:virtual public Person
{
protected:
int Hours;
public:
Teacher()
{
Duty=0;
Salary=800;
}