C++课程设计高校职工工资管理系统.doc
课 程 设 计 报 告课程名称 面向对象程序设计 课题名称 高校工资管理系统 专 业 通信工程 班 级 1302 学 号 2 姓 名 王树材 指导教师 乔汇东 胡瑛 2015年 1月 3日湖南工程学院课 程 设 计 任 务 书课程名称 面向对象程序设计 课 题 高校工资管理系统 专业班级 通信1302 学生姓名 王树材 学 号 2 指导老师 乔汇东、胡瑛、黄哲 审 批 任务书下达日期 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.系统需求分析12.总体设计13.详细设计34.系统调试115.结果分析216.总结211. 系统需求分析我的课题为高校职工工资管理系统,随着高等学校教学实验行政管理的分工不同而实行的不同的工资分配方式,为对工资发放实现智能化管理,特设计此系统来实现。本系统可以对职工的信息(工号,名字,基本工资,课时,实验补助,行政补助等)进行录入,显示,查找修改,删除,保存和读取,可以根据工号和名字来查找相对应的职工信息,并实现拓展功能,即根据查找进行修改功能,如果职工进行调动,则可根据工号或名字进行删除,录入的相关数据以文件的方式存放在硬盘上,可以继续录入和读取。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语句根据输入的代码调用对应的功能函数。返回值:无流程如下:显示主菜单输入功能代码c switch(c) 1 2 3 4 5 6 退出信息保存录入信息显示信息查找与修改信息删除3.录入函数 void luru()根据不同的功能代码调用不同类里面的set()函数,以达到对这五类职工的录入。返回值:无流程如下:显示录入各个职位的代码c switch(c) 1 2 3 4 5 6 录入退出行政人员兼教师录入教师录入实验员录入行政人员录入教师兼实验员录入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则说明在行政人员兼教师中找着符合寻找条件的数据。流程如下:开始输入要查找的工号或名字从第一个开始比较工号或名字 对象.num=number&&Strcmp(对象.name,name)=0查无此人 N Y输出找着数据的类型和内容及返回值结束5.显示函数 void display()在程序中用t1,s1,x1,ts1,xt1来记录教师,实验员,行政人员,教师兼实验员,行政人员兼教师的五个类对象各自的总数,用switch()来确定输出显示的对象的类型,在显示函数中分别用for循环来输出每种类的对象,输出显示用调用每个对象的show()函数来实现。返回值:无流程如下:开始选择显示功能代码c switch(c) 1 2 3 4 5 行政人员兼教师显示教师兼实验员显示行政人员显示实验员显示教师显示i=0对象i.show()i+ i<t1|i<s1|i<x1|i<<ts1|i<xt1 Y N结束6.查找与修改函数 void change()查找可根据工号和名字进行查找,首先选择查询方式,然后输入查询方式所要求的内容,然后根据内容分别调用重载寻找函数,找着后进行显示,提示是否修改,如需修改则重新调用一次此对象的set()函数一次,则可重新输入新的数据。返回值:无流程如下:开始选择查找方式按名字search(char *name1,int &i)search(char *name1,int &i)search(char *name1,int &i)按工号search(int number,int &i)符合查找要求的对象.show()修改 对象i.set Y N结束7.删除函数 void shanchu()首先输入要删除的工号或名字,找着后进行显示确认,删除方式采用让要删除的编号的后面的收据前移一个位置使要删除的编号被前一个数据所覆盖,之后的数据对前一个进行覆盖则达到删除要求。返回值:无流程如下:开始选择查找方式按名字search(char *name1,int &i)search(char *name1,int &i)search(char *name1,int &i)按工号search(int number,int &i)符合查找要求的对象.show()For(i=j;j<总数;j+)对象j =对象j+1删除 Y N结束8.文件读取和保存函数 void fileload() void filesave()保存时用到ios:out若文件为空则创建文件,若文件不为空则覆盖,读取时用到ios:in从第一个数据开始读取,不能改变数据,返回值:无Open.f(“”,ios:in|out)读取保存f>>对象各个属性f<<数据f.close() 4. 系统调试信息录入时,系统根据录入的数据进行处理,安照不同的工资分配方案计算出总工资并显示出来,所以总工资是不需要输入的。教师录入实验员录入行政人员录入教师兼实验员录入行政人员兼教师录入教师 实验员 行政人员 教师实验员 行政人员兼教师的显示:根据工号和名字进行查找与修改根据工号查找进行修改修改结果根据名字进行查找进行修改修改结果显示删除功能根据工号进行删除删除结果根据名字进行删除删除结果进行一系列操作后内存保存数据显示5. 结果分析独到之处:工号不用手动输入,自动根据录入的对象生成,能够在一个文件里面存放不同类的数据,并能一一对号读取出来,删除模块采用后者覆盖前者的方法用得恰当。不足之处:还是定义一个数组来存放对象,没能用链表进行编程。编程水平有待提高。6. 总结在这次课程设计中我编写了两个程序,这是第二个,第一个因为不能使编号唯一而放弃,在老师指导下终于知道怎样让编号不会重复,然后在这个程序里集合了第一个程序里的优点,再加以改善,使得这个程序更加简洁实用,在编写的过程中,虽然遇到了各种各样的问题,但我都一一化解,把一个个错误解决后心情都是非常畅快的,通过这次课程设计,让我真正地把学到的知识应用于实践,从而使得自己对知识的掌握程度得以加深加固,另外也增强了自己的逻辑思维能力,在写程序的过程中,通过解决一个个小问题使得自己对C+这门课程的兴趣得以大大的加强,因为我发现C+其实非常有趣。总而言之,这次课程设计使我受益匪浅,同时也非常感谢老师的耐心细致的解疑。源代码:#include <iostream>#include <fstream>using namespace std; class employeepublic:int num;char name10;int salay;virtual void show() cout<<"编号:"<<num<<endl;cout<<"姓名:"<<name<<endl;cout<<"基本工资:"<<salay<<endl;virtual void set(int n)num=n;cout<<"请输入姓名:"<<endl;cin>>name;cout<<"请输入基本工资:"<<endl;cin>>salay;virtual void save(fstream &f)f<<num<<" "<<name<<" "<<salay<<" "virtual void load(fstream &f)f>>num>>name>>salay;class teacher:public employeepublic:int less;void show()if(num!=0)employee:show();cout<<"课时:"<<less<<endl;cout<<"总工资=n基本工资+(课时-120)*20="<<salay+(less-120)*20<<endl<<endl;void set(int n)employee:set(n);cout<<"请输入课时"<<endl;cin>>less;cout<<"总工资=n基本工资+(课时-120)*20="<<salay+(less-120)*20<<endl<<endl;void save(fstream &f) employee:save(f); f<<less<<endl;void load(fstream &f) employee:load(f); f>>less;class shiyanyuan:public employeepublic:int buzhu;void show()if(num!=0) employee:show();cout<<"实验室补助:"<<buzhu<<endl;cout<<"总工资=n基本工资+实验室补助="<<salay+buzhu<<endl<<endl;void set(int n)employee:set(n);cout<<"请输入实验室补助:"<<endl;cin>>buzhu;cout<<"总工资=n基本工资+实验室补助="<<salay+buzhu<<endl<<endl;void save(fstream &f) employee:save(f); f<<buzhu<<endl;void load(fstream &f) employee:load(f); f>>buzhu;class xingzhengrenyuan:public employeepublic:int buzhu;void show()if(num!=0)employee:show();cout<<"行政补助:"<<buzhu<<endl;cout<<"总工资=n基本工资+行政补助="<<salay+buzhu<<endl<<endl;void set(int n)employee:set(n);cout<<"请输入行政补助:"<<endl;cin>>buzhu;cout<<"总工资=n基本工资+行政补助="<<salay+buzhu<<endl<<endl;void save(fstream &f) employee:save(f); f<<buzhu<<endl;void load(fstream &f) employee:load(f); f>>buzhu;class tshiyanyuan:public employeepublic:int buzhu;int less;void show()if(num!=0)employee:show();cout<<"课时:"<<less<<endl;cout<<"实验室补助:"<<buzhu<<endl;cout<<"总工资=n基本工资+(课时-120)*20+实验室补助="<<salay+(less-120)*20+buzhu<<endl<<endl;void set(int n)employee:set(n);cout<<"请输入课时:"<<endl;cin>>less;cout<<"请输入实验室补助:"<<endl;cin>>buzhu;cout<<"总工资=n基本工资+(课时-120)*20+实验室补助="<<salay+(less-120)*20+buzhu<<endl<<endl;void save(fstream &f) employee:save(f); f<<less<<" "<<buzhu<<endl;void load(fstream &f) employee:load(f); f>>less>>buzhu;class xteacher:public employeepublic:int buzhu;int less;void show()if(num!=0)employee:show(); cout<<"课时:"<<less<<endl;cout<<"行政补助:"<<buzhu<<endl;cout<<"总工资=n基本工资+(课时-120)*20+行政补助="<<salay+(less-120)*20+buzhu<<endl<<endl;void set(int n)employee:set(n);cout<<"请输入课时:"<<endl;cin>>less;cout<<"请输入行政补贴:"<<endl;cin>>buzhu;cout<<"总工资=n基本工资+(课时-120)*20+行政补助="<<salay+(less-120)*20+buzhu<<endl<<endl;void save(fstream &f) employee:save(f); f<<less<<" "<<buzhu<<endl;void load(fstream &f) employee:load(f); f>>less>>buzhu;teacher t100;shiyanyuan s100;xingzhengrenyuan x100; tshiyanyuan ts100;xteacher xt100;void filesave();void run();void fileload();int t1=0,s1=0,x1=0,ts1=0,xt1=0,num=1;/*查询*int search(int number,int &i) for(i=0;i<t1;i+) if(ti.num=number) return 1; for(i=0;i<s1;i+) if(si.num=number) return 2; for(i=0;i<x1;i+) if(xi.num=number) return 3; for(i=0;i<ts1;i+) if(tsi.num=number) return 4; for(i=0;i<xt1;i+) if(xti.num=number) return 5; return 0;int search(char *name1,int &i) for(i=0;i<t1;i+) if(strcmp(ti.name,name1)=0) return 1; for(i=0;i<s1;i+) if(strcmp(si.name,name1)=0) return 2; for(i=0;i<x1;i+) if(strcmp(xi.name,name1)=0) return 3; for(i=0;i<ts1;i+) if(strcmp(tsi.name,name1)=0) return 4; for(i=0;i<xt1;i+) if(strcmp(xti.name,name1)=0) return 5; return 0;/*显示*void display()int i;while(1) system("cls"); cout<<endl; cout<<"*职工信息显示*"<<endl; cout<<endl; cout<<" 1:教师信息显示 "<<endl; cout<<endl; cout<<" 2:实验员信息显示 "<<endl; cout<<endl; cout<<" 3:行政人员信息显示 "<<endl; cout<<endl; cout<<" 4:教师兼职实验员信息显示 "<<endl; cout<<endl; cout<<" 5:行政人员兼职教师信息显示"<<endl; cout<<endl; cout<<" 6:退出信息信息显示 "<<endl; cout<<endl; cout<<"* "<<endl; cout<<"请选择功能代码:" int c; cin>>c; switch(c) case 1:for(i=0;i<t1;i+)ti.show();system("pause");break; case 2:for(i=0;i<s1;i+)si.show();system("pause");break; case 3:for(i=0;i<x1;i+)xi.show();system("pause");break; case 4:for(i=0;i<ts1;i+)tsi.show();system("pause");break; case 5:for(i=0;i<xt1;i+)xti.show();system("pause");break;case 6:run();break; default:cout<<"输入错误!"<<endl;system("pause");break; /*录入*void luru() while(1) system("cls"); cout<<endl; cout<<"*职工信息录入*"<<endl; cout<<endl; cout<<" 1:教师录入 "<<endl; cout<<endl; cout<<" 2:实验员录入 "<<endl; cout<<endl; cout<<" 3:行政人员录入 "<<endl; cout<<endl; cout<<" 4:教师兼职实验员录入 "<<end