课程设计报告课程名称面向对象程序设计课题名称高校工资管理系统专业通信工程班级1302学号201303020222姓名王树材指导教师乔汇东胡瑛2015年1月3日湖南工程学院课程设计任务书课程名称面向对象程序设计课题高校工资管理系统专业班级通信1302学生姓名王树材学号201303020222指导老师乔汇东、胡瑛、黄哲审批任务书下达日期2014年12月26日任务完成日期2015 年 1 月3日一、设计内容与设计要求1.课程设计目的:面向对象程序设计课程设计是集中实践性环节之一,是学习完《面向对象程序设计》课程后进行的一次全面的综合练习。
要求学生达到熟练掌握C++语言的基本知识和技能;基本掌握面向对象程序设计的思想和方法;能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题,从而提高动手编程解决实际问题的能力。
2.课题题目⑴公司考勤管理系统⑵高校学籍管理系统⑶高校工资管理系统⑷高校人事管理系统⑸文件加密管理系统3.设计要求:⑴设计课题题目:第5个课题是扩展课题,有能力完成的同学可以选择。
其余每位同学根据自己学号除以4所得的余数加一选择相应题号的课题。
换题者不记成绩。
⑵根据自己对应的课题完成以下主要工作:①完成系统需求分析:包括系统设计目的与意义;系统功能需求(系统流程图);输入输出的要求。
②完成系统总体设计:包括系统功能分析;系统功能模块划分与设计(系统功能模块图)。
③完成系统详细设计:包括数据库需求分析;类层次图;界面设计与各功能模块实现。
④系统调试:调试出现的主要问题,编译语法错误及修改,重点是运行逻辑问题修改和调整。
⑤使用说明书及编程体会:说明如何使用你编写的程序,详细列出每一步的操作步骤。
⑥关键源程序(带注释)⑶按规定格式完成课程设计报告,将其打印稿(A4纸)上交给老师存档。
⑷不得抄袭他人程序、课程设计报告,每个人应体现自己的个性设计。
二、进度安排第周星期时:分——时:分星期时:分——时:分星期时:分——时:分星期时:分——时:分课题3:高校工资管理系统(一)、课程设计题目:高校工资管理系统(二)、目的与要求:1、目的:(1)要求学生达到熟练掌握C++语言的基本知识和技能;(2)基本掌握面向对象程序设计的基本思路和方法;(3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。
2、基本要求:(1)要求利用面向对象的方法以及C++的编程思想来完成系统的设计;(2)要求在设计的过程中,建立清晰的类层次;(3)在系统中至少要定义四个类,每个类中要有各自的属性和方法;(4)在系统的设计中,至少要用到面向对象的一种机制。
3、创新要求:在基本要求达到后,可进行创新设计,如根据查找结果进行修改的功能。
4、写出设计说明书(三)、设计方法和基本原理:1、问题描述(功能要求):现一高校有五类职工:教师,实验员,行政人员,教师兼职实验员,行政人员兼职教师。
为了实现工资发放的自动功能,现要求编写程序来自动完成此功能。
同时注意生成的相关数据结果以文件方式存放在硬盘中。
程序应具备从键盘录入,文件的可继续录入,任意职工的工资查询(可由职工编号和职工姓名来实现),如若有职工由于工作调动,则可进行相对应的删除动作。
相关信息:每一学期将学校职工的本学期任职情况及上学期工作的相关情况输入计算机,则本学期职工的月工资按程序处理后的结果发放,其中职工的工资计算方法如下:其中工资的基本构成如下:教师:基本工资+课时费;实验员:基本工资+实验室补助;行政人员:基本工资+行政补贴;教师兼职实验员:基本工资+课时费+实验室补助;行政人员兼职教师:基本工资+行政补贴+课时费;其中课时费计算:教师每一学期的基本工作量为120,教师兼职实验员每学期基本工作量为70,行政人员没有基本工作量,若每节课时费为20元;课时费=(上学期工作量-基本工作量)*20;注意:如果上学期基本工作量没完成,则其(上学期工作量-基本工作量)*20为负值。
2、问题的解决方案:根据系统功能要求,可以将问题解决分为以下步骤:(1)写出需求分析(做什么);(2)分析系统中的各个实体之间的关系及其属性和行为;(3)根据问题描述,设计系统的类层次;(4)完成类层次中各个类的描述(包括属性和方法);(5)完成类中各个成员函数的定义;(6)用户界面的设计;(7)分析系统功能模块(系统流程图);(8)代码编写,功能调试;(9)完成系统总结报告以及系统使用说明书。
目录1.系统需求分析 (1)2.总体设计 (1)3.详细设计 (3)4.系统调试 (10)5.结果分析 (21)6.总结 (21)1.系统需求分析我的课题为高校职工工资管理系统,随着高等学校教学实验行政管理的分工不同而实行的不同的工资分配方式,为对工资发放实现智能化管理,特设计此系统来实现。
本系统可以对职工的信息(工号,名字,基本工资,课时,实验补助,行政补助等)进行录入,显示,查找修改,删除,保存和读取,可以根据工号和名字来查找相对应的职工信息,并实现拓展功能,即根据查找进行修改功能,如果职工进行调动,则可根据工号或名字进行删除,录入的相关数据以文件的方式存放在硬盘上,可以继续录入和读取。
2.总体设计该程序采用类,继承,多态和文件来处理职工所有信息,具体如下:包含的库函数有:#include<iostream> iostream是输入输出流头文件;#include<fstream> fstream是文件流头文件;包含的类有:class employee(员工)class teacher (教师)class shiyanyuan (实验员)class xingzhengrenyuan(行政人员)class tshiyanyuan (教师兼职实验员)class xteacher(行政人员兼职教师包含的函数有:主函数int main()运行函数void run()录入函数void luru()寻找函数int search(int number,int &i)int search(char *name1,int &i)显示函数void display()查找与修改函数void change()删除函数void shanchu()文件读取和保存函数void fileload() void filesave()系统功能模块图3.详细设计(1)class employee(员工)基类包含工号num,名字name,基本工资信息salay等基本信息,同时带有virtual void set(int n)n用来接收每一次调用此函数时总人数自加前的值,然后赋给此对象的工号。
virtual void save(fstream &f)&f此处为引用,将对此f的操作和在外对f操作保存一致性。
virtual void load(fstream &f)&f此处也为引用,将对此f的操作和在外对f操作保存一致性。
virtual 的使用方便于子类的相关函数的使用,此为多态带给程序的方便之处。
(2)class teacher (教师)子类继承employee类增有属性课时。
继承基类的属性,并且有自己的函数对课时等的输入和保存。
(3)class shiyanyuan (实验员)子类继承employee类增有属性实验补助。
继承基类的属性,并且有自己的函数对实验补助等的输入和保存。
(4)class xingzhengrenyuan(行政人员)子类继承employee类增有属性行政补助。
继承基类的属性,并且有自己的函数对行政补助等的输入和保存。
(5)class tshiyanyuan (教师兼职实验员)子类继承employee类增有属性课时和实验补助。
继承基类的属性,并且有自己的函数对课时和实验补助等的输入和保存。
(6)class xteacher(行政人员兼职教师子类继承employee类增有属性课时和行政补助。
继承基类的属性,并且有自己的函数对课时和行政补助等的输入和保存。
包含的函数有:1.主函数int main()进入主函数后首先打开fileload()函数,将以前保存好的数据读取出来,若以前未保存数据则读取全部为初始值。
然后运行run()函数进入系统,进行信息录入,显示,查询修改,删除等的操作。
返回值:无2.运行函数void run()显示一个主菜单界面,可根据提示选择相应的功能代码,然后用一个switch 语句根据输入的代码调用对应的功能函数。
返回值:无 流程如下:3.录入函数 void luru()根据不同的功能代码调用不同类里面的set()函数,以达到对这五类职工的录入。
返回值:无 流程如下:4.寻找函数(两个,运用函数重载分别实现按工号和名字寻找功能)int search(int number,int &i) int search(char *name1,int &i)形参number ,name 为要查找的工号和名字,int &i ,此处用到了引用,将在另一个函数的i 与在此i 进行等同,方便于在外函数中也能读出在此寻找函数中找着的数据。
根据search()不同的返回值来判断找到的数据的对象属于哪种职工。
返回值:0,1,2,3,4,5返回0则表示没找着任何数据符合寻找条件, 返回1则说明在教师中找着符合寻找条件的数据, 返回2则说明在实验员中找着符合寻找条件的数据, 返回3则说明在行政人员中找着符合寻找条件的数据, 返回4则说明在教师兼实验员中找着符合寻找条件的数据, 返回5则说明在行政人员兼教师中找着符合寻找条件的数据。
流程如下:5.显示函数void display()在程序中用t1,s1,x1,ts1,xt1来记录教师,实验员,行政人员,教师兼实验员,行政人员兼教师的五个类对象各自的总数,用switch()来确定输出显示的对象的类型,在显示函数中分别用for循环来输出每种类的对象,输出显示用调用每个对象的show()函数来实现。
返回值:无流程如下:6.查找与修改函数void change()查找可根据工号和名字进行查找,首先选择查询方式,然后输入查询方式所要求的内容,然后根据内容分别调用重载寻找函数,找着后进行显示,提示是否修改,如需修改则重新调用一次此对象的set()函数一次,则可重新输入新的数据。
返回值:无流程如下:7.删除函数void shanchu()首先输入要删除的工号或名字,找着后进行显示确认,删除方式采用让要删除的编号的后面的收据前移一个位置使要删除的编号被前一个数据所覆盖,之后的数据对前一个进行覆盖则达到删除要求。
返回值:无流程如下:8.文件读取和保存函数void fileload() void filesave()保存时用到ios::out若文件为空则创建文件,若文件不为空则覆盖,读取时用到ios::in从第一个数据开始读取,不能改变数据,返回值:无4.系统调试信息录入时,系统根据录入的数据进行处理,安照不同的工资分配方案计算出总工资并显示出来,所以总工资是不需要输入的。