高校工资管理系统课程设计报告.doc_第1页
高校工资管理系统课程设计报告.doc_第2页
高校工资管理系统课程设计报告.doc_第3页
高校工资管理系统课程设计报告.doc_第4页
高校工资管理系统课程设计报告.doc_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程设计报告课程设计题目:高校工资管理系统 学 号:姓 名: 专 业: 班 级:指导教师:王 志 波 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 是否为空来判断是否查找到。2Find:遍历链表 ,如果符合条件可以通过 P1 是否为空来判 断是否查找到,也可以通过返回值是 1 和 0 来判断。 3.删除:同样删除中的关键也是通过调用Find来判断要删除的人, 然后删除对象。调用 save()自动保存。 5统计:遍历链表找出符合条件的进行输出。 6修改:调用Find找到节点进行重新赋值。调用 save()自动保 存。 7添加:先插入到最后,再进行排序。 8构造函数:读文件的实现:在读文件的时候利用构造函数读取文件里的所有内容,并 且一一付给对象。再利用选择排序的方法将链表进行从小到大的顺序进行排序。 9析构函数:遍历链表,释放内存空间。 三、类的层次关系1.Person类(人员类)class Person /人员抽象类protected: int No; char Name20; 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; void Input() coutNo; coutName; coutHours; void Input(ifstream& ifs) ifsNoNameDutyHours; void Output() coutNotNametDutytHourstIncoming()endl; void Output(ofstream& ofs) ofsNotNametDutytHourstendl; double Incoming() return Salary+(Hours-20)*20; ;3. Assistan类(实验员类)class Assistant:virtual public Person /实验员类protected: int Allowance; int Hours;public: Assistant() Duty=1; Salary=650; Allowance=150; void Input() coutNo; coutName; coutHours; void Input(ifstream& ifs) ifsNoNameDutyHours; void Output() coutNotNametDutytHourstIncoming()endl; void Output(ofstream& ofs) ofsNotNametDutytHourstendl; double Incoming() return Salary+Allowance+(Hours-15)*20; ;4. Manager类(行政人员类)class Manager:virtual public Person /行政人员protected: int Allowance;public: Manager() Duty=2; Salary=750; Allowance=250; void Input() coutNo; coutName; void Input(ifstream& ifs) ifsNoNameDuty; void Output() coutNotNametDutytIncoming()endl; void Output(ofstream& ofs) ofsNotNametDutytendl; double Incoming() return Salary+Allowance; ;5.教师兼实验员类 class Teacher_Assistant:public Teacher,public Assistant /教师兼实验员public: Teacher_Assistant() Duty=3; Teacher:Salary=800; void Input() coutNo; coutName;coutTeacher:Hours; coutAssistant:Hours; void Input(ifstream& ifs) ifsNoNameDutyTeacher:HoursAssistant:Hours; void Output() coutNotNametDutytTeacher:Hourst Assistant:HourstIncoming()endl; void Output(ofstream& ofs) ofsNotNametDutytTeacher:Hourst Assistant:Hourstendl; double Incoming() return Salary+(Teacher:Hours-20)*20 +Allowance+(Assistant:Hours-15)*20; ;6.行政人员兼教师类 class Manager_Teacher:public Manager,public Teacher /行政人员兼教师public: Manager_Teacher() Duty=4; Manager:Salary=750; void Input() coutNo; coutName; coutHours; void Input(ifstream& ifs) ifsNoNameDutyHours; void Output() coutNotNametDutytHourstIncoming()endl; void Output(ofstream& ofs) ofsNotNametDutytHourstendl; double Incoming() return Salary+Allowance+Hours*20; ;7. College类(程序界面构造)class Collegeprivate: Person *PL; void Clear(); int College:Find(int ID,Person *p1,Person *p2);public: College(); College(); void Add(); void Delete(); void Modify(); /修改职工 void Print(); /输出职工信息 void Save(); void Load(); ;College:College() /构造函数(创建1个头结点的链表) Person *p=new Teacher; PL=p; coutnext; delete p; p=PL; PL=0;void College:Add() coutnext)p=p-next; int ch; coutch; /创建新结点,录入数据,连接到链表 Teacher *pt; Assistant *pa; Manager *pm; Teacher_Assistant *pta; Manager_Teacher *pmt; switch(ch) case 0: pt=new Teacher; pt-Input(); p-next=pt; break; case 1: pa=new Assistant; pa-Input(); p-next=pa; break; case 2: pm=new Manager; pm-Input(); p-next=pm; break; case 3: pta=new Teacher_Assistant; pta-Input(); p-next=pta; break; case 4: pmt=new Manager_Teacher; pmt-Input(); p-next=pmt; break; default: return; void College:Clear() /清除所有的职工结点(仅保留头结点) Person *p=PL-next; while(p) PL-next=p-next; delete p; p=PL-next; /查找职工结点(返回1-找到,0-未找到.结点指针由p1返回,p2为前看指针)int College:Find(int ID,Person *p1,Person *p2) *p1=PL-next; *p2=PL; while(*p1) if(*p1)-No=ID) break; /找到 else *p2=*p1; /继续查找 *p1=(*p1)-next; return *p1?1:0;void College:Delete() coutn* 删除职工 *n; int No; Person *p1,*p2; coutNo; if(!Find(No,&p1,&p2) coutnext=p1-next; /连接 delete p1; cout正确删除!n; void College:Modify() /修改 coutn* 修改职工 *n; int No; Person *p1,*p2; coutNo; if(!Find(No,&p1,&p2) coutOutput(); /输出原来的职工信息(做提示) p1-Input(); /输入新的职工信息(更新) cout修改完成!n; void College:Print() /输出职工信息 coutn* 职工信息表 *n; coutnext; if(!p) coutOutput(); p=p-next; void College:Save() ofstream f(Person.dat,ios:out); /打开文件 /遍历输出至文件 Person *p=PL-next; while(p) p-Output(f); p=p-next; f.close(); /关闭文件 coutbufbufDuty; if(f) switch(Duty) case 0: p2=new Teacher; break; case 1: p2=new Assistant; break; case 2: p2=new Manager; break; case 3: p2=new Teacher_Assistant; break; case 4: p2=new Manager_Teacher; break; default: f.close(); return; p-next=p2; p=p-next; f.seekg(t); p-Input(f); else break; f.close();void ma

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论