高校工资管理系统设计C_第1页
高校工资管理系统设计C_第2页
高校工资管理系统设计C_第3页
高校工资管理系统设计C_第4页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

1、课程设计任务书课程名称面向对象程序设计课题高校工资管理系统专业班级学生姓名学号指导老师审批任务书下达日期2015年 12月 25日任务完成日期2016 年 1月 4日1/18目录1.课程设计题目12进度安排23.系统需求分析44.总体设计55.详细设计66.系统调试107结果分析148.总结159.计算机科学与技术系课程设计评分表162/18一、课题3:高校工资管理系统(一)、课程设计题目:高校工资管理系统(二)、目的与要求:1、目的:( 1)要求学生达到熟练掌握 C+语言的基本知识和技能;( 2)基本掌握面向对象程序设计的基本思路和方法;( 3)能够利用所学的基本知识和技能,解决简单的面向对

2、象程序设计问题。2、基本要求:( 1)要求利用面向对象的方法以及 C+的编程思想来完成系统的设计;( 2)要求在设计的过程中,建立清晰的类层次;( 3)在系统中至少要定义四个类,每个类中要有各自的属性和方法;( 4)在系统的设计中,至少要用到面向对象的一种机制。3、创新要求:在基本要求达到后, 可进行创新设计, 如根据查找结果进行修改的功能。4、写出设计说明书(三)、设计方法和基本原理:1、问题描述(功能要求):现一高校有五类职工:教师,实验员,行政人员,教师兼职实验员,行政人员兼职教师。为了实现工资发放的自动功能,现要求编写程序来自动完成此功能。(1) 各类人员的工作信息录入(2) 可查询任

3、意人员的工资信息(3) 可修改任意人员的信息(4) 可删除人员人员的信息(5) 可显示工资超过或低于某个数值的全部人员信息(6) 可统计按工资多少顺序显示人员信息(7) 可按人员类型显示人员信息所有职员的基本信息包括,姓名、工号、岗位类型、基本工资,另外每类人员又有特殊信息,如教师有课时工作量。相关信息:每一学期将学校职工的本学期任职情况及上学期工作的相关情况输入计算机,则本学期职工的月工资按程序处理后的结果发放,其中职工的工资计算方法如下:其中工资的基本构成如下:教师:基本工资 +课时费;实验员:基本工资 +实验室补助;行政人员:基本工资 +行政补贴;教师兼职实验员:基本工资 +课时费 +实

4、验室补助;1/18行政人员兼职教师:基本工资+行政补贴 +课时费;其中课时费计算:教师每月的基本工作量为 100,教师兼职实验员每月基本工作量为 70,行政人员没有基本工作量;课时费 =( 课时工作量 - 基本工作量 )*20+ 基本工作量× 25;注意:如果基本工作量没完成,则其课时费=课时工作量 *20*0.8 。2、问题的解决方案:根据系统功能要求,可以将问题解决分为以下步骤:(1)写出需求分析(做什么);(2)分析系统中的各个实体之间的关系及其属性和行为;(3)根据问题描述,设计系统的类层次;(4)完成类层次中各个类的描述(包括属性和方法);(5)完成类中各个成员函数的定义;

5、(6)用户界面的设计;(7)分析系统功能模块(系统流程图);(8)代码编写,功能调试;(9)完成系统总结报告以及系统使用说明书。3/18二、进度安排第 17 周 星期一 9 时: 00 分 12 时:00 分星期二 9 时: 00 分 12 时: 00 分星期三 9 时: 00 分 12 时: 00 分星期四 9 时: 00 分 12 时: 00 分3/18三、系统需求分析:1. 用户需求:现一高校有五类职工: 教师,实验员,行政人员,教师兼职实验员,行政人员兼职教师。现需要通过管理系统实现工资自动发放的功能。2. 设计目标:通过编写程序来实现以下7 个功能以及实现工资自动发放的功能。(1)各

6、类人员的工作信息录入(2)可查询任意人员的工资信息(3)可修改任意人员的信息(4)可删除人员人员的信息(5)可显示工资超过或低于某个数值的全部人员信息(6)可统计按工资多少顺序显示人员信息(7)可按人员类型显示人员信息所有职员的基本信息包括,姓名、工号、岗位类型、基本工资,另外每类人员又有特殊信息,如教师有课时工作量。相关信息:每一学期将学校职工的本学期任职情况及上学期工作的相关情况输入计算机,则本学期职工的月工资按程序处理后的结果发放,其中职工的工资计算方法如下:其中工资的基本构成如下:教师:基本工资 +课时费;实验员:基本工资 +实验室补助;行政人员:基本工资 +行政补贴;教师兼职实验员:

7、基本工资 +课时费 +实验室补助;行政人员兼职教师:基本工资+行政补贴 +课时费;其中课时费计算:教师每月的基本工作量为 100,教师兼职实验员每月基本工作量为 70,行政人员没有基本工作量;课时费 =( 课时工作量 - 基本工作量 )*20+ 基本工作量× 25;注意:如果基本工作量没完成, 则其课时费 =课时工作量 *20*0.8 。4/18四、总体设计:首先定义一个基类class Person和 class Ex_tester(实验员、行政人员)、class Teacher(老师)、class Part_job (老师兼实验员) 、class Ex_teacher(行政兼老师)

8、这四个类来包含五类职位。建立一个主函数,开辟一个职位类型的数组,用来存放从磁盘中读取的各类人员信息,然后通过调用void search(Part_job *p)函数实现各类员工的信息查询,void Addata(Part_job*p) 函数实现各类员工的录入功能,voidupdate(Part_job*p) 函数 实 现员 工信 息 的 实 时更 新 修 改 , voidDelete(Part_job*p) 函 数 实 现 对 离 职 员 工 信 息 的 删 除 , voidfunction1(Part_job *p)函数实现对低于或高于某个工资标准的人员进行查询, void searchfo

9、r(Part_job *p) 函数完成对所有员工工资进行统计,按从高到低的顺序进行排列并显示在屏幕上,最后当选择退出选项后,主函数调用 void save(Part_job *p) 函数将所有的员工信息进行存盘处理,之后整个程序执行完毕。高校工资管理系统1. 按指2. 录入3. 员工4. 删除5.可显6.对所有定类 型各类新信息的各类员示 工 资员 工 工查询 函的员工实时更工信息超 过 或资 进 行低 于 某数信息新修改统计,按个 数 值从 高 到的 全 部低 的 顺人 员 信序 排 列息并显示5/18五、详细设计:1.基类 class Person 和 class Ex_tester (实

10、验员、行政人员)、 class Teacher(老师)、 class Part_job (老师兼实验员)、 class Ex_teacher (行政兼老师)这四个类中都包含了工号、 姓名、职位、基本工资数据成员,其中 class Ex_tester (实验员、行政人员)中的 supplement 工资补助是起总工资的重要数据之一, class Teacher(老师)类中包含了 workload 基本工作课时量, class Part_job (老师兼实验员) 类中有 supplement 、workload(基本课时工作量) ,class Ex_teacher(行政兼老师)类中的 supple

11、ment 、 workload (课时量)都是计算其总工资的重要数据。主函数把磁盘中的信息读取并放入Part_job数组中,其中的各类函数运用指针来访问 Part_job数组。2.(1)按指定类型查询函数函数原型: void search(Part_job *p)输入参数: *p ,函数通过这个指针访问Part_job数组,对其进行操作。返回值:无。void search(Part_job *p)的主要流程如下:程序会提示用户需要按哪种查询方式查询,然后根据用户从键盘输入的数字进行相应的操作,如果是 1,则按照员工的工号进行查询,用户从键盘输入员工工号 k,指针遍历整个数组, 找到工号为 k

12、的员工,如果员工存在,则判定他的职位类型,根据他的职位所对应的类,调用其类的成员函数来显示他的个人信息, 如果不存在的话则显示 “查询失败, 没有此工号的信息 . ” 如果输入的是 2,则按照职位类型进行查询,系统提示用户输入职位类型,用户从键盘输入 job ,同样指针遍历整个数组,找到与 job 相同的所有存在的员工,并调用该 job 所属类的成员函数来显示所有找到的员工个人信息,如果用户输入的 job ,经过查找在数组中没有该 job 类的员工,系统则提示“查询失败,没有此工号的信息 . ”紧接着会继续提示“是否继续查询?”此时需要用户从键盘输入操作符“y/n ” , 如果是 y的话继续查

13、询, n则退出查询。如果输入错误,系统会提示“请重新输入?y/n :”,用户需重新输入,直到正确为止。6/18(2)录入各类新的员工信息函数原型: void Addata(Part_job *p)输入参数: *p ,函数通过这个指针访问Part_job数组,对其进行操作。返回值:无。void Addata(Part_job *p)的主要流程如下:系统会提示用户逐个输入各类员工的姓名(name)、工号( number)、工作(job )、基本工资( salary ),然后根据输入的工作进行下一步操作,如果是工作是老师,则需要输入基本课时工作量(workload ),如果是实验员或者行政人员,则需

14、要输入工资补贴(supplement ),如果是老师兼实验员或者是行政兼老师,则需要输入课时工作量(workload )、工资补贴(supplement )。当输入完毕后系统会提示“是否继续添加?( y/n )”用户需要从键盘输入 y或 n,是 y则继续添加, n则退出添加系统。如果输入错误,系统会提示“请重新输入? y/n :”,用户需重新输入,直到正确为止。(3)员工信息的实时更新修改函数原型: void update(Part_job *p)输入参数: *p ,函数通过这个指针访问Part_job数组,对其进行操作。返回值:无。void update(Part_job *p)的主要流程如

15、下:用户输入需要修改的员工的工号 n, 函数通过指针遍历数组, 查找与 n 相同的员工工号,如果找到,则提示用户对该员工信息进行修改,包括对工号的姓名 (name)、工作( job )、基本工资( bassicalsalary )的变更,系统会根据用户输入的工作类型,进行下一步操作,如果 job 是老师,则用户需要输入基本课时工作量,如果是实验员或者行政人员,则需要输入工资补贴( supplement ),如果是老师兼实验员或者是行政兼老师,则需要输入课时工作量( workload )、工资补贴( supplement )。如果数组中没有该工号员工的话,系统会提示“修改失败,没有此工号信息。”

16、退出该程序。(4)删除各类员工信息7/18函数原型: void Delete(Part_job *p)输入参数: *p ,函数通过这个指针访问 Part_job数组,对其进行操作。返回值:无。void Delete(Part_job *p)的主要流程如下:开始输入要删除的员工编号 S从第一个员工开始查找N比较员工工号是N是否到最后否与 S相同一名员工?YY显示员工信息显示“删除失败,N没有此员工信息”是否删除?Y执行删除操作, 并显示“删除成功”结束(5) 可显示工资超过或低于某个数值的全部人员信息函数原型: void function1(Part_job *p)输入参数: *p ,函数通过这

17、个指针访问Part_job数组,对其进行操作。8/18返回值:无。void function1(Part_job *p)的主要流程如下:系统会提示用户选择,是需要查询高于某个工资标准还是低于某个工资标准,输入相对应的数字,如果是输入数字是 1,则选择高于某个标准,用户继续输入标准值 h,然后函数通过指针 *p 遍历整个数组,查找并计算每个员工的总工资是否大于标准值 h, 如果大于则判断该员工的职位类型, 调用该员工所属类的成员函数对该员工的信息进行显示, 如果小于则继续查找下一个,直到最后一个员工,该程序结束退出。如果输入数字是 2,则选择低于某个工资标准,此时系统会提示用户输入标准工资, 用

18、户输入标准值 h 后,函数函数通过指针 *p 遍历整个数组, 查找并计算每个员工的总工资是否小于标准值 h, 如果小于标准值 h,则判断该员工的职位类型,调用该员工所属类的成员函数对该员工的信息进行显示,如果大于标准值 h,则继续下一个,直到最后一个员工,该程序结束退出。如果输入的不是数字1、 2,系统会提示重新输入,直到正确为止。(6)对所有员工工资进行统计,按从高到低的顺序排列并显示函数原型: void searchfor(Part_job *p)输入参数: *p ,函数通过这个指针访问Part_job数组,对其进行操作。返回值:无。void searchfor(Part_job *p)的

19、主要流程如下:函数通过指针 *p 遍历整个数组,通过调用void compare(Part_job*p1,Part_job *p2)函数把数组元素按照从大到小的顺序进行排序,即当前员工与后一员工的工资进行比较,如果前者大于后者,交换两个员工所对应的指针地址(即 p1 与 p2 的地址进行交换),直到最后一个员工,该比较函数结束,紧接着调用void showresult(Part_job *p)对已经排好序的数组,通过指针遍历数组,把所有的员工信息显示出来,直到最后一个员工,整个程序结束。3.当整个程序执行完毕之后,主函数会调用void save(Part_job *p)函数自动对所有的员工信息

20、进行存盘处理,执行完之后,整个系统结束退出。9/18六、系统调试:1. 查询功能:调试此功能时基本没有什么逻辑上的错误,编译运行一次通过,只是在查询时,调试这功能的时候,当用户输入一个不存在的员工时,系统总是不能显示“查询失败,没有此工号的信息”,后经过仔细思考,原来在系统循环查找完毕之后,只显示存在的员工信息,对不存在的不做任何提示,于 是 我 添 加 了 一 个 标 记 符 n , 如 果 存 在 n=1 , 不 存 在 n=0 , 此时输出“查询失败,没有此工号的信息”,这样一来,就实现了系统的该项提示功能,如图 3。分别调试方式一,方式二的查询功能如图 1,图 2.图1按工号查询员工信

21、息图2按职工类型查询图 3查询失败10/182. 信息录入功能程序调试过程中发现一次只能添加一个员信息,不能连续添 加 ,于 是 在 员 程 序 基 础 之 上 添 加 了 一 个 dowhile(),语 句来实现连续添加的功能,如图 4。(1)(2)成功添加图 4录入各类员工信息3. 修改员工信息功能调试过程中出现用户输入要修改的员工信息,用户修改完毕后,又重复提示修改,检查一遍程序,原来是当用户修改完员 工 信 息 后 , 没 有 跳 出 跳 出 循 环 , 在 循 环 中 增 加 一 句 break ;语句后,系统正常执行下一步操作,如图 5(1)。(1)(2)图 5 员工信息修改(成功

22、修改)4. 删除员工信息在执行删除操作时,一开始总是编译能通过,但是一运行11/18就出现系统崩溃的现象,经仔细思考查找,原来是循环时定义的数据不对,超过了已有的界限,必须把原定界限 100 改成 99 , 因 为 for(int j=i;j<99;j+,i+)pi=pi+1; t=1;中 i 的 人 界 限 是 100 , 所 以 i+1>100 , 已 经 超 出 范 围 , 此 时 指针的地址是不可预测的,所以出现系统崩溃的现象,把数据更改之后,一切运行正常,如图 6所示。图6删除员工信息图 7成功删除员工信息查询失败5. 可显示工资超过或低于某个数值的全部人员信息调试这个功

23、能时,按照理论上是可行的,没有什么逻辑上的错误,编译时也没有报错,但实际执行情况跟第四个功能初调时一样,系统直接崩溃,一时半会儿,真的不知道该怎么办,索性直接把各个判断语句操作分开来写,单独作为一部分来处理,再次编译运行,正常运行,如图 8。原来是循环语句里执行判断的语句太多,造成了程序的崩溃。运行时发现老师兼实验员这个职位的总工资没有计算出来如图 8(1),仔细查看程 序 原 来 问 题 出 在 这 里 Part_job c(pi);虽 然 是 同 类 , 但 不能直接赋值,因为只有在对应的类中定义有赋值构造函数,才能直接赋值,所以应改为 Part_jobc(pi.NamE,pi.num,pi.12/18job,pi.basicsalary,pi.workload,pi.supplement);运行结果如图 8(2)。按低于某个工资标准输出所有员工信息的功能调试如图 9,正确显示所有员工的信息。(1)(2)图 8 按高于工资标准 6000 元显示员工信息图 9按低于工资标准 6200 显示员工信息6. 对所有员工工资进行统计,按从高到低的顺序排列并显示调 试 此 功 能 时 , 编 译 总 是 在compare(pi,p

温馨提示

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

评论

0/150

提交评论