1、课 程 设 计 报 告课程名称 面向对象程序设计 课题名称 高校工资管理系统 专 业 计算机科学与技术 班 级 计算机1181班 学 号 姓 名 宋思达 指导教师 李珍辉 谭小兰 2023年 12 月 15 日湖南工程学院课 程 设 计 任 务 书课程名称 面向对象程序设计 课 题 高校工资管理系统 专业班级 计算机1181班 学生姓名 宋思达 学 号 指导老师 李珍辉 谭小兰 审 批 任务书下达日期 2023 年 12 月 15 日任务完毕日期 2023 年 01 月 05 日一、设计内容与设计规定1.课程设计目的:面向对象程序设计课程设计是集中实践性环节之一,是学习完面向对象程序设计课程后
2、进行的一次全面的综合练习。规定学生达成纯熟掌握C+语言的基本知识和技能;基本掌握面向对象程序设计的思想和方法;可以运用所学的基本知识和技能,解决简朴的面向对象程序设计问题,从而提高动手编程解决实际问题的能力。2.课题题目 高校工资管理系统3设计规定: (1)根据自己相应的课题完毕以下重要工作:完毕系统需求分析:涉及系统设计目的与意义;系统功能需求(系统流程图);输入输出的规定。完毕系统总体设计:涉及系统功能分析;系统功能模块划分与设计(系统功能模块图)。完毕系统具体设计:涉及数据库需求分析;数据库概念结构设计(ER图);数据库逻辑结构设计;类层次图;界面设计与各功能模块实现。系统调试:调试出现
3、的重要问题,编译语法错误及修改,重点是运营逻辑问题修改和调整。使用说明书及编程体会:说明如何使用你编写的程序,具体列出每一步的操作环节。关键源程序(带注释)(2) 按规定格式完毕课程设计报告,将其打印稿(A4纸)上交给老师存档。(3)不得抄袭别人程序、课程设计报告,每个人应体现自己的个性设计。二、进度安排第 17 周 星期二 8:0012:00 星期三 8:0012:00 星期四 8:0012:00 星期五 8:0012:00 星期六 8:0012:00第 18 周 星期五 8:0012:00 三、参考书籍1.C程序设计课程设计 刘振安编著 TP312C5632.C+ Builder和Delp
4、hi课程设计与系统开发案例 伍俊良 清华大学出版社 7-302-06072-X 3.Visual C+课程设计案例精编 严华峰 中国水利水电出版社 7-5084-2023-1 2023 4.Visual C+课程设计与系统开发案例 伍俊良 清华大学出版社 7-302-05968-3 20235.Visual C+语言课程设计 : 案例精选与编程指导 陈清华朱红 东南大学出版社 7-81089-275-4 2023 6.VisualC+课程设计案例精编 中国水利水电出版社 7-5084-1004-1 2023 7.数据结构课程设计案例精编 : 用C/C+描述 李建学李光元吴春芳 清华大学出版社
5、7-302-14536-9 2023 (编程平台不限,vc+, c+ Builder等等。)高校工资管理系统 (一)、课程设计题目:高校工资管理系统(二)、目的与规定: 1、目的: (1)规定学生达成纯熟掌握C+语言的基本知识和技能; (2)基本掌握面向对象程序设计的基本思绪和方法; (3)可以运用所学的基本知识和技能,解决简朴的面向对象程序设计问题。 2、基本规定: (1)规定运用面向对象的方法以及C+的编程思想来完毕系统的设计; (2)规定在设计的过程中,建立清楚的类层次; (3)在系统中至少要定义四个类,每个类中要有各自的属性和方法; (4)在系统的设计中,至少要用到面向对象的一种机制。
6、 3、创新规定: 在基本规定达成后,可进行创新设计,如根据查找结果进行修改的功能。 4、写出设计说明书 (三)、设计方法和基本原理: 1、问题描述(功能规定): 现一高校有五类职工:教师,实验员,行政人员,教师兼职实验员,行政人员兼职教师。为了实现工资发放的自动功能,现规定编写程序来自动完毕此功能。同时注意生成的相关数据结果以文献方式存放在硬盘中。程序应具有从键盘录入,文献的可继续录入,任意职工的工资查询(可由职工编号和职工姓名来实现),如若有职工由于工作调动,则可进行相相应的删除动作。相关信息:每一学期将学校职工的本学期任职情况及上学期工作的相关情况输入计算机,则本学期职工的月工资按程序解决
7、后的结果发放,其中职工的工资计算方法如下:其中工资的基本构成如下: 教师: 基本工资+课时费; 实验员: 基本工资+实验室补贴; 行政人员: 基本工资+行政补贴; 教师兼职实验员: 基本工资+课时费+实验室补贴; 行政人员兼职教师:基本工资+行政补贴+课时费;(其中:(1)课时费:教师每一学期的基本工作量为120,实验员每学期基本工作量为70,行政人员没有基本工作量,每节课时费为20元;课时费=(上学期工作量-基本工作量)*20; 注意:假如上学期基本工作量没完毕,则其(上学期工作量-基本工作量)*20为负值。 (2)基本工资:教师800元,实验员650元,行政人员750元。 (3)行政补贴:
8、250元。 (4)实验室补贴:150元。2、问题的解决方案: 根据系统功能规定,可以将问题解决分为以下环节: (1)写出需求分析(做什么);(2)分析系统中的各个实体之间的关系及其属性和行为; (3)根据问题描述,设计系统的类层次; (4)完毕类层次中各个类的描述(涉及属性和方法); (5)完毕类中各个成员函数的定义; (6)用户界面的设计; (7)分析系统功能模块(系统流程图);(8)代码编写 ,功能调试;(9)完毕系统总结报告以及系统使用说明书。 目 录 1.系统需求分析32.总体设计83.具体设计124.系统调试165.结果分析196.总结201.系统化需求分析 随着计算机技术的飞速发展
9、计算机在高校管理中应用的普及运用计算机实现高校人事管理势在必行。对于高校来说运用计算机支持高校高效率完毕人事管理的平常事务是适应现代高校制度的规定推动高校人事管理走向科学化、规范化的必要条件计算机管理所无法比拟的优点检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点可以极大的提高人事管理的效率也是高校科学化、正规化的管理与世界接轨的重要条件,学校有对职工具体信息操作,对职工信息的查询,修改,增长和删除,工资的计算和发放需求.这个系统可以保存员工信息,根据输入的数据自动实现工资发放功能,也可以查询该职工所有信息,也可以按职工在编号或姓名来实现职工在修改,增长和删除功能,
10、实现了任意职工的工资查询。职工信息保存在文献里,实现文献保存功能主菜单2.总体设计退出程序职工的增长和删除职工信息查询和修改职工工资查询职工工资放记录和发放职工信息录入增长职工新学期工资记录工资发放信息查询信息修改删除职工3.具体设计 GUANLI-name: string-sex: string-address: string-id: string-job: string-number: int-classhour: int-newclsshour: int-pay: int-year: int-month: int -day: int-laoshiji: int-shiyanji: int
11、-xingzhengji: int-shiyanbu: int-xingzhengbu: int-classpay: int+GUANLI()+outname(): string+outsex(): string+outaddress(): string+outid(): string+outjob(): string+outnumber(): int+outclasshour(): int+outnewclasshour(): int+outpay(): int+outyear(): int+outmonth(): int+outday(): int+changejob(): void+pa
12、y(): void+display(): void+newpay(): void+shanpay(): void 4. 系统调试1.图:进入主菜单: 2.图:职工信息录入: 3.图:输入“N”回到主菜单: 3. 图:查询职工信息: 5.图:修改职工信息: 6.图:增长职工信息: 7.图:浏览职工信息: 8.图:删除职工信息: 8. 返回主菜单,退出程序。5.结果分析这个设计的独到指出就是,操作简朴,实现方便,基本实现了员工基本资料的查询和修改,对工资的操作也很简洁方便。局限性之处是挺多的功能都未实现,比如整个系统,职工资料对外都是所有开放的,任何人都可对系统进行操作,员工的资料还没进行保密和封
13、锁工作,系统尚有很多需要完善的地方,系统的实用性和灵活性都还很缺少,不完善之处还需继续努力的修改6. 总结这次的程序设计相对于上学期还是有了进步的,这次的课设中,我碰到了很多的问题,有的通过思考或查看书本解决了,有的还留在脑子里,只有通过孜孜不倦的求索我们才会有进步,不懂得思考就不能真正的掌握一门知识。这次的实验给以了我警示,它让我明白我所掌握的知识还很欠缺,对于继承与派生这一章的知识,我认为自己勉强掌握了,这次实验后我发现我掌握得还不够。基类的保护成员公有继承到派生类,类外是否可以通过对象来访问呢,原先我认为是可以的,通过这次程序设计,我知道我错了。 总之,我觉得做学问不应当马虎,对于所学一
14、定要有进一步的理解,这也是我这次课设得到的启示。课程设计总体感觉就是有点小麻烦,也终于知道到当初李珍辉老师讲的C+比上学期学的C语言要难要深奥很多也难了狠多,由于C+的知识面和深度都比C大很多,学起来相对也比较吃力。而这次的课设,把我在学这门课程存在的弊端所有暴露出来了,本来对于这门课,我学到的仅仅是一些皮毛而已,在做程序的过程中,发现好多功能我都无法用我脑中的知识去实现它,必须翻开课本依葫芦画瓢才干把程序写出来,尚有碰到的一些规定主线没碰到过,比如用文献保存的方式保存,这就得用到c+里的文献流来输入输出,并保存到指定的文献里,这些知识点诚实虽然没讲,但是作为一个大学生,并不是老师不讲就不看的
15、,应当自己去看,由于后边的只是点反而是最重要的,在我们班,有了好几个同学都已经把后边的知识看了几遍了,所以他们用起来就得心应手了,而我,也来不及去好好看书了,只能厚着脸皮去问他们,让他们列个模版给我,然后再由自己去想程序的具体实行部分,这直接导致的结果就是浪费了好多时间,所以我决定以后一定认真听课,坚决不旷课早退,要把这么只是彻彻底底的学好,学扎实。附:源程序#include #include class Person /人员类(抽象类)protected: double num; /编号 char Name20; /姓名 int Duty; /人员类别标志(1-教师,2-实验员,3-行政人员
16、,4-教师兼实验员,5-行政兼教师) 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 Inc
17、oming()=0; /计算收入 friend class College;class Teacher:virtual public Person /教师类protected: int Hours; /教师课时public: /为对象设立数据分为两种途径,通过1)构造函数,2)一般成员函数 /分开可以使得程序中应用更加灵活 /本程序采用:缺省构造+Input() Teacher() /构造函数,初始化部分数据 Duty=1; Salary=800; void Input() /键盘补充输入其它数据 coutnum; coutName; coutHours; Salary=Incoming();
18、 void Input(ifstream& ifs) ifsnumNameDutyHoursSalary; void Output() coutnumtNametDutytHourstSalarytendl; void Output(ofstream& ofs) ofsnumtNametDutytHourstSalaryt120) return Salary+(Hours-120)*20; else return Salary; ;class Assistant:virtual public Person /实验员protected: int Allowance; int Hours; pub
19、lic: Assistant() Duty=2; Salary=650; Allowance=150; void Input() coutnum; coutName; coutHours; Salary=Incoming(); void Input(ifstream& ifs) ifsnumNameDutyHoursSalary; void Output() coutnumtNametDutytHourstSalarytendl; void Output(ofstream& ofs) ofsnumtNametDutytHourstSalaryt70) return Salary+Allowan
20、ce+(Hours-70)*20; else return Salary+Allowance; ;class Manager:virtual public Person /行政人员protected: int Allowance;public: Manager() Duty=3; Salary=750; Allowance=250; void Input() coutnum; coutName; Salary=Incoming(); void Input(ifstream& ifs) ifsnumNameDutySalary; void Output() coutnumtNametDutytt
21、Salarytendl; void Output(ofstream& ofs) ofsnumtNametDutytSalarytendl; double Incoming() return Salary+Allowance; ;class Teacher_Assistant:public Teacher,public Assistant /教师兼实验员public: Teacher_Assistant() Duty=4; Teacher:Salary=800; Assistant:Allowance=150; void Input() coutnum; coutName; coutTeache
22、r:Hours; Salary=Incoming(); void Input(ifstream& ifs) ifsnumNameDutyTeacher:HoursSalary; void Output() coutnumtNametDutytTeacher:Hours tSalaryendl; void Output(ofstream& ofs) ofsnumtNametDutytTeacher:Hourst Salaryt120) return Salary+(Teacher:Hours-120)*20 +Allowance; else return Salary+Allowance; ;c
23、lass Manager_Teacher:public Manager,public Teacher /行政人员兼教师public: Manager_Teacher() Duty=5; Manager:Salary=750; void Input() coutnum; coutName; coutHours; Salary=Incoming(); void Input(ifstream& ifs) ifsnumNameDutyHoursSalary; void Output() coutnumtNametDutytHourstSalarytendl; void Output(ofstream&
24、 ofs) ofsnumtNametDutytHourstSalarytendl; double Incoming() return Manager:Salary+Allowance+Hours*20; ;class Collegeprivate: Person *PL; void Clear(); int College:Cfind(int ID,Person *p1,Person *p2);public: College(); /构造 College(); /析构 void Add(); /增长职工 void Delete(); /删除职工 void Modify(); /修改职工 voi
25、d Print(); /输出职工信息 void Save(); /职工信息存盘 void Load(); /职工信息装入 void Find(); /查找 void Build(); /导引 void Stat(); /记录 ;College:College() /构造函数(创建1个头结点的链表) Person *p=new Teacher; PL=p; coutnext; delete p; p=PL; PL=0; void College:Add() /增长职工 char c; do coutnext)p=p-next; int ch; coutch; /创建新结点,录入数据,连接到链表
26、Teacher *pt; Assistant *pa; Manager *pm; Teacher_Assistant *pta; Manager_Teacher *pmt; switch(ch) case 1: pt=new Teacher; pt-Input(); p-next=pt; break; case 2: pa=new Assistant; pa-Input(); p-next=pa; break; case 3: pm=new Manager; pm-Input(); p-next=pm; break; case 4: pta=new Teacher_Assistant; pta
27、-Input(); p-next=pta; break; case 5: pmt=new Manager_Teacher; pmt-Input(); p-next=pmt; break; default: return; coutc; while(c=y|c=Y); Save();void College:Clear() /清除所有的职工结点(仅保存头结点) Person *p=PL-next; while(p) PL-next=p-next; delete p; p=PL-next; /查找void College:Find() double ID; Person *p1; Person *
28、p2; coutID; p1=PL-next; p2=PL; while(p1) if(p1-num=ID) break; /找到 else p2=p1; /继续查找 p1=p1-next; if(!p1) cout找不到你所查询的人!n请确认你所查询的编号是否犯错!n;return; else coutn* 职工信息表 *n; coutOutput();/查找职工结点(返回1-找到,0-未找到.结点指针由p1返回,p2为前看指针)int College:Cfind(int ID,Person *p1,Person *p2) *p1=PL-next; *p2=PL; while(*p1) if
29、(*p1)-num=ID) break; /找到 else *p2=*p1; /继续查找 *p1=(*p1)-next; return *p1?1:0;void College:Delete() /删除职工 coutn* 删除职工 *n; int num; Person *p1,*p2; coutnum; if(!Cfind(num,&p1,&p2) coutnext=p1-next; /连接 delete p1; cout对的删除!n; Save(); void College:Modify() /修改职工 coutn* 修改职工 *n; int num; Person *p1,*p2; c
30、outnum; if(!Cfind(num,&p1,&p2) coutOutput(); /输出本来的职工信息(做提醒) p1-Input(); /输入新的职工信息(更新) cout修改完毕!n; Save(); 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-
31、Output(f); p=p-next; f.close(); /关闭文献 coutbufbufDuty; if(f) /根据人员类型创建新结点 switch(Duty) case 1: p2=new Teacher; break; case 2: p2=new Assistant; break; case 3: p2=new Manager; break; case 4: p2=new Teacher_Assistant; break; case 5: 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 College:Load() /职工信息录入 char ah; int c; coutn* 职工信息录入 *n; do coutc; for(int i=1;inext)p=p-next; int ch; coutch; /创建新结点,录入数据,连接到链表 Teacher *pt; Assistant *pa; Manager *pm; Teacher_Assistant *pta; Manager_Te