C++课程设计高校职工工资管理系统.docx
《C++课程设计高校职工工资管理系统.docx》由会员分享,可在线阅读,更多相关《C++课程设计高校职工工资管理系统.docx(45页珍藏版)》请在冰豆网上搜索。
C++课程设计高校职工工资管理系统
课程设计报告
课程名称面向对象程序设计
课题名称高校工资管理系统
专业通信工程
班级1302
学号************
姓名王树材
指导教师乔汇东胡瑛
2015年1月3日
湖南工程学院
课程设计任务书
课程名称面向对象程序设计
课题高校工资管理系统
专业班级通信1302
学生姓名王树材
学号************
指导老师乔汇东、胡瑛、黄哲
审批
任务书下达日期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.系统需求分析
我的课题为高校职工工资管理系统,随着高等学校教学实验行政管理的分工不同而实行的不同的工资分配方式,为对工资发放实现智能化管理,特设计此系统来实现。
本系统可以对职工的信息(工号,名字,基本工资,课时,实验补助,行政补助等)进行录入,显示,查找修改,删除,保存和读取,可以根据工号和名字来查找相对应的职工信息,并实现拓展功能,即根据查找进行修改功能,如果职工进行调动,则可根据工号或名字进行删除,录入的相关数据以文件的方式存放在硬盘上,可以继续录入和读取。
2.总体设计
该程序采用类,继承,多态和文件来处理职工所有信息,具体如下:
包含的库函数有:
#includeiostream是输入输出流头文件;
#includefstream是文件流头文件;
包含的类有:
classemployee(员工)classteacher(教师)
classshiyanyuan(实验员)classxingzhengrenyuan(行政人员)
classtshiyanyuan(教师兼职实验员)classxteacher(行政人员兼职教师
包含的函数有:
主函数intmain()
运行函数voidrun()
录入函数voidluru()
寻找函数intsearch(intnumber,int&i)
intsearch(char*name1,int&i)
显示函数voiddisplay()
查找与修改函数voidchange()
删除函数voidshanchu()
文件读取和保存函数voidfileload()voidfilesave()
系统功能模块图
3.详细设计
(1)classemployee(员工)
基类包含工号num,名字name,基本工资信息salay等基本信息,同时带有
virtualvoidset(intn)
n用来接收每一次调用此函数时总人数自加前的值,然后赋给此对象的工号。
virtualvoidsave(fstream&f)
&f此处为引用,将对此f的操作和在外对f操作保存一致性。
virtualvoidload(fstream&f)
&f此处也为引用,将对此f的操作和在外对f操作保存一致性。
virtual的使用方便于子类的相关函数的使用,此为多态带给程序的方便之处。
(2)classteacher(教师)
子类继承employee类增有属性课时。
继承基类的属性,并且有自己的函数对课时等的输入和保存。
(3)classshiyanyuan(实验员)
子类继承employee类增有属性实验补助。
继承基类的属性,并且有自己的函数对实验补助等的输入和保存。
(4)classxingzhengrenyuan(行政人员)
子类继承employee类增有属性行政补助。
继承基类的属性,并且有自己的函数对行政补助等的输入和保存。
(5)classtshiyanyuan(教师兼职实验员)
子类继承employee类增有属性课时和实验补助。
继承基类的属性,并且有自己的函数对课时和实验补助等的输入和保存。
(6)classxteacher(行政人员兼职教师
子类继承employee类增有属性课时和行政补助。
继承基类的属性,并且有自己的函数对课时和行政补助等的输入和保存。
包含的函数有:
1.主函数intmain()
进入主函数后首先打开fileload()函数,将以前保存好的数据读取出来,若以前未保存数据则读取全部为初始值。
然后运行run()函数进入系统,进行信息录入,显示,查询修改,删除等的操作。
返回值:
无
2.运行函数voidrun()
显示一个主菜单界面,可根据提示选择相应的功能代码,然后用一个switch语句根据输入的代码调用对应的功能函数。
返回值:
无
流程如下:
switch(c)
123456
3.录入函数voidluru()
根据不同的功能代码调用不同类里面的set()函数,以达到对这五类职工的录入。
返回值:
无
流程如下:
switch(c)
123456
4.寻找函数(两个,运用函数重载分别实现按工号和名字寻找功能)
intsearch(intnumber,int&i)intsearch(char*name1,int&i)
形参number,name为要查找的工号和名字,int&i,此处用到了引用,将在另一个函数的i与在此i进行等同,方便于在外函数中也能读出在此寻找函数中找着的数据。
根据search()不同的返回值来判断找到的数据的对象属于哪种职工。
返回值:
0,1,2,3,4,5
返回0则表示没找着任何数据符合寻找条件,
返回1则说明在教师中找着符合寻找条件的数据,
返回2则说明在实验员中找着符合寻找条件的数据,
返回3则说明在行政人员中找着符合寻找条件的数据,
返回4则说明在教师兼实验员中找着符合寻找条件的数据,
返回5则说明在行政人员兼教师中找着符合寻找条件的数据。
流程如下:
N
Y
5.显示函数voiddisplay()
在程序中用t1,s1,x1,ts1,xt1来记录教师,实验员,行政人员,教师兼实验员,行政人员兼教师的五个类对象各自的总数,用switch()来确定输出显示的对象的类型,在显示函数中分别用for循环来输出每种类的对象,输出显示用调用每个对象的show()函数来实现。
返回值:
无
流程如下:
switch(c)
12345
Y
N
6.查找与修改函数voidchange()
查找可根据工号和名字进行查找,首先选择查询方式,然后输入查询方式所要求的内容,然后根据内容分别调用重载寻找函数,找着后进行显示,提示是否修改,如需修改则重新调用一次此对象的set()函数一次,则可重新输入新的数据。
返回值:
无
流程如下:
Y
N
7.删除函数voidshanchu()
首先输入要删除的工号或名字,找着后进行显示确认,删除方式采用让要删除的编号的后面的收据前移一个位置使要删除的编号被前一个数据所覆盖,之后的数据对前一个进行覆盖则达到删除要求。
返回值:
无
流程如下:
Y
N
8.文件读取和保存函数voidfileload()voidfilesave()
保存时用到ios:
:
out若文件为空则创建文件,若文件不为空则覆盖,读取时用到ios:
:
in从第一个数据开始读取,不能改变数据,
返回值:
无
4.系统调试
信息录入时,系统根据录入的数据进行处理,安照不同的工资分配方案计算出总工资并显示出来,所以总工资是不需要输入的。
教师录入
实验员录入
行政人员录入
教师兼实验员录入
行政人员兼教师录入
教师实验员行政人员教师实验员行政人员兼教师的显示:
根据工号和名字进行查找与修改
根据工号查找
进行修改
修改结果
根据名字进行查找
进行修改
修改结果显示
删除功能
根据工号进行删除
删除结果
根据名字进行删除
删除结果
进行一系列操作后内存保存数据显示
5.结果分析
独到之处:
工号不用手动输入,自动根据录入的对象生成,能够在一个文件里面存放不同类的数据,并能一一对号读取出来,删除模块采用后者覆盖前者的方法用得恰当。
不足之处:
还是定义一个数组来存放对象,没能用链表进行编程。
编程水平有待提高。
6.总结
在这次课程设计中我编写了两个程序,这是第二个,第一个因为不能使编号唯一而放弃,在老师指导下终于知道怎样让编号不会重复,然后在这个程序里集合了第一个程序里的优点,再加以改善,使得这个程序更加简洁实用,在编写的过程中,虽然遇到了各种各样的问题,但我都一一化解,把一个个错误解决后心情都是非常畅快的,通过这次课程设计,让我真正地把学到的知识应用于实践,从而使得自己对知识的掌握程度得以加深加固,另外也增强了自己的逻辑思维能力,在写程序的过程中,通过解决一个个小问题使得自己对C++这门课程的兴趣得以大大的加强,因为我发现C++其实非常有趣。
总而言之,这次课程设计使我受益匪浅,同时也非常感谢老师的耐心细致的解疑。
源代码:
#include
#include
usingnamespacestd;
classemployee
{
public:
intnum;
charname[10];
intsalay;
virtualvoidshow()
{
cout<<"编号:
"<cout<<"姓名:
"<cout<<"基本工资:
"<}
virtualvoidset(intn)
{
num=n;
cout<<"请输入姓名:
"<cin>>name;
cout<<"请输入基本工资:
"<cin>>salay;
}
virtualvoidsave(fstream&f)
{
f<}
virtualvoidload(fstream&f)
{
f>>num>>name>>salay;
}
};
classteacher:
publicemployee
{
public:
intless;
voidshow()
{
if(num!
=0)
{
employee:
:
show();
cout<<"课时:
"<cout<<"总工资=\n基本工资+(课时-120)*20="<}
}
voidset(intn)
{
employee:
:
set(n);
cout<<"请输入课时"<cin>>less;
cout<<"总工资=\n基本工资+(课时-120)*20="<}
voidsave(fstream&f)
{
employee:
:
save(f);
f<}
voidload(fstream&f)
{
employee:
:
load(f);
f>>less;
}
};
classshiyanyuan:
publicemployee
{
public:
intbuzhu;
voidshow()
{
if(num!
=0)
{
employee:
:
show();
cout<<"实验室补助:
"<cout<<"总工资=\n基本工资+实验室补助="<}
}
voidset(intn)
{
employee:
:
set(n);
cout<<"请输入实验室补助:
"<cin>>buzhu;
cout<<"总工资=\n基本工资+实验室补助="<}
voidsave(fstream&f)
{
employee:
:
save(f);
f<}
voidload(fstream&f)
{
employee:
:
load(f);
f>>buzhu;
}
};
classxingzhengrenyuan:
publicemployee
{
public:
intbuzhu;
voidshow()
{
if(num!
=0)
{
employee:
:
show();
cout<<"行政补助:
"<cout<<"总工资=\n基本工资+行政补助="<}
}
voidset(intn)
{
employee:
:
set(n);
cout<<"请输入行政补助:
"<cin>>buzhu;
cout<<"总工资=\n基本工资+行政补助="<}
voidsave(fstream&f)
{
employee:
:
save(f);
f<}
voidload(fstream&f)
{
employee:
:
load(f);
f>>buzhu;
}
};
classtshiyanyuan:
publicemployee
{
public:
intbuzhu;
intless;
voidshow()
{
if(num!
=0)
{
employee:
:
show();
cout<<"课时:
"<cout<<"实验室补助:
"<cout<<"总工资=\n基本工资+(课时-120)*20+实验室补助="<}
}
voidset(intn)
{
employee:
:
set(n);
cout<<"请输入课时:
"<cin>>less;
cout<<"请输入实验室补助:
"<cin>>buzhu;
cout<<"总工资=\n基本工资+(课时-120)*20+实验室补助="<}
voidsave(fstream&f)
{
employee:
:
save(f);
f<}
voidload(fstream&f)
{
employee:
:
load(f);
f>>less>>buzhu;
}
};
classxteacher:
publicemployee
{
public:
intbuzhu;
intless;
voidshow()
{
if(num!
=0)
{
employee:
:
show();
cout<<"课时:
"<cout<<"行政补助:
"<cout<<"总工资=\n基本工资+(课时-120)*20+行政补助="<}
}
voidset(intn)
{
employee:
:
set(n);
cout<<"请输入课时:
"<cin>>less;
cout<<"请输入行政补贴:
"<cin>>buzhu;
cout<<"总工资=\n基本工资+(课时-120)*20+行政补助="<}
voidsave(fstream&f)
{
employee:
:
save(f);
f<}
voidload(fstream&f)
{
employee:
:
load(f);
f>>less>>buzhu;
}
};
teachert[100];
shiyanyuans[100];
xingzhengrenyuanx[100];
tshiyanyuants[100];
xteacherxt[100];
voidfilesave();
voidrun();
voidfileload();
intt1=0,s1=0,x1=0,ts1=0,xt1=0,num=1;
//*********************查询***************************
intsearch(intnumber,int&i)
{
for(i=0;i{
if(t[i].num==number)
return1;
}
for(i=0;i{
if(s[i].num==number)
return2;
}
for(i=0;i{
if(x[i].num==number)
return3;
}
for(i=0;i{
if(ts[i].num==number)
return4;
}
for(i=0;i{
if(xt[i].num==number)
return5;
}
return0;
}
intsearch(char*name1,int&i)
{
for(i=0;i{
if(strcmp(t[i].name,name1)==0)
return1;
}
for(i=0;i{
if(strcmp(s[i].name,name1)==0)
return2;
}
for(i=0;i{
if(strcmp(x[i].name,name1)==0)
return3;