工资管理系统.docx
- 文档编号:30745239
- 上传时间:2023-08-20
- 格式:DOCX
- 页数:21
- 大小:77.02KB
工资管理系统.docx
《工资管理系统.docx》由会员分享,可在线阅读,更多相关《工资管理系统.docx(21页珍藏版)》请在冰豆网上搜索。
工资管理系统
一.需求和规格说明
此次课程设计的目的是以程序设计语言II为基础,通过完成一些具有一定难度的课程设计题目的编写、调试、运行工作,进一步掌握面向过程和面向对象程序设计的基本方法和编程技巧,巩固所学理论知识,使理论与实际相结合。
从而提高自我分析问题、解决问题的能力。
通过课程设计,学生在下述各方面的能力应该得到锻炼:
(1)进一步巩固、加深学生所学专业课程《程序设计语言II》的基本理论知识,理论联系实际,进一步培养学生综合分析问题,解决问题的能力。
(2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。
(3)利用所学知识,开发小型应用系统,掌握运用C++语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。
(4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。
(5)掌握面向对象的程序设计方法。
(6)进一步掌握在集成环境下如何调试程序(单步调试,设置断点、观察表达式,分块调试)、修改程序和程序的测试。
二.课程设计名称及其内容
课程设计名称:
工资管理系统
设计内容:
设计一个工资管理系统,能够对企业职工的工资进行管理,公司主要有4类人员:
经理、技术员、销售员、销售经理。
要求存储这些人的职工号、姓名、月工资、岗位、年龄、性别等信息。
系统主要包括工资数据录入、数据统计、数据备份等功能。
在设计时要考虑到对不同级别的职工工资的计算方法。
一、任务和要求
运用面向对象的程序设计方法,要求选择动态数组类模板或链表类模板,任务中要运用I/O流对象对文件进行读写操作。
本题总体设计,要有一个菜单,用于选择各项功能,其中
1)数据录入:
输入各种数据;
输入数据要求每类人员不能少于4人,并按以下格式输出:
职工号
姓名
性别
年龄
岗位
工资
2)数据统计:
各销售经理的工资计算及最终按工资进行的冒泡排序;
3)数据备份:
把相关数据写入文件;
4)退出:
退出本系统;
注:
各项菜单都调用一个函数来实现。
二、设计方案提示
1、工资的计算办法:
1)经理:
固定月薪为8000;
2)技术员:
工作时间*小时工资(100元每小时);
3)销售员:
销售额*4%提成;
4)销售经理:
底薪(5000)+所辖部门销售额总额*0.5%;
2、类的层次结构大体如下:
3、在实现的时候考虑继承和多态技术的合理使用
三.设计
1.设计思想
由于有四类人——经理,销售经理,技术员和销售员,所以先设计四个类——经理类,销售经理类,技术人员类和销售员类,又由于每类人的基本信息的类型都一样,所以可以设计一个共同的基类来定义信息的种类以及完成基本信息的录入和提起,然后以plublic的类型来继承就可以完成各类人员的各项信息的录入和读取。
要求有四大项功能——各类人员信息的录入和显示,销售经理工资的冒泡排序,文件的读取和提取和退出整个系统。
这样一来可以用四个函数来实现个功能,然后用switch来选择各项功能。
2.功能设计
各类人员信息的录入和显示,销售经理工资的冒泡排序,文件的读取和提取和退出整个系统。
这样一来可以用四个函数来实现各个功能分别是voidinputnumber();voidoutputnumber(double*m);voiddoublenumber();和break来实现。
然后一一来完成各个函数的功能实现过程。
3.详细设计
共同的基类employee包括如下信息:
classemployee//基类
private:
charnumber[20],name[20],sex[10],job[40];
intage;
public:
voidgetnumber();//职工号的输入
voidgetname();//姓名的输入
voidgetsex();//性别的输入
voidgetjob();//职位的输入
voidgetage();//年龄的输入
char*outnumber();//职工号的输出
char*outname();//姓名的输出
char*outsex();//性别的输出
char*outjob();//职位的输出
intoutage();//年龄的输出
经理类manage的信息如下:
classmanage:
publicemployee/*派生经理类*/
private:
doublemanagesalary;//定义销售经理的工资
public:
manage();//构造函数
doubleoutsalary();//获取工资
技术类technology的信息如下:
template
classtechnology:
publicemployee
private:
intworktime,moneyh;//定义工作时间和每小时的工作额
public:
technology(){moneyh=20;}//构造函数
voidgetworktime();//输入工作时间
Toutsalary();//提取工资
销售经理类sellmanage类的信息如下:
template
classsellmanage:
publicemployees
private:
Tsellmanagesalary,s,sum;//定义其下的销售总额,T型s和工资
public:
voidgetsalary();//工资的获取
Toutsalary();//输出工资
销售员类employees的信息如下:
template
classemployees:
publicemployee
private:
Tsellnumber,employeesalary,extra;//定义销售额,工资和提成
public:
voidgetsellnumber();//输入销售额
voidgetextra();//输入提成
Toutsellnumber();//获取销售额
Toutsalary();//获取工资
以及三个大函数——输入的录入和现实,冒泡排序销售经理的工资和文件的存储和读取。
/*数据录入和输出函数*/
voidinputnumber()
/*输出冒泡工资函数*/
voidoutputnumber(double*m)
/*存入文件函数*/
voiddoublenumber()
这三个函数来实现功能。
四.调试及测试
1、调试过程中遇到的主要问题及解决方法
在调试过程中主要的问题就是输入人员的信息时由于人员比较多且信息的数量和种类都不相同,导致输入的信息我定义的不吻合,而出现结束的现象。
解决方法我用的是静下心来看清提示后再录入对应的信息。
2、对设计和编码的回顾讨论和分析;
回顾设计:
总的来说,刚开始看到题目和要求时感觉自己编不出来,于是就有一点害怕的心理。
但由于还要答辩,结果还是根据要求开始下笔,说也奇怪很快就写完了,但不幸的是编译时有好多的错误,这可是一个很大的麻烦啊,写程序不难,难的就是改程序啊,又由于我的电脑上的VC++软件不能显示错误的个数和在哪个地方,只能显示有错误并且有多少错误都只显示一个错误,导致我无法改动,于是开学后我28就到校了,然后从同学那里重新装了个VC++软件,后来我就开始修改我的程序了,可是到了31号要答辩了,我仍没有修改完毕。
我带着有错误的程序到了实验室,问问老师,在下午的时候我终于修改完毕了。
讨论和分析:
首先我问了我的同学关于我的程序的错误,可是由于错误好像很难改,我问了好几个同学都没能帮上我的忙,然后我就自己根据自己的思路开始慢慢一点一点分析自己的程序,在我好几天的奋斗下算是有了点成绩,修改了一些错误,但是有好几个错误我实在是看不懂,就在31号上午,在老师的提示下我才完成程序错误的修改。
3、程序运行的时空效率分析
总体看来,程序基本上完成了任务书的要求,但是我感觉程序的可读性不是很好,并且输出后的格式也有点挤(完成的比较匆忙)。
4、测试数据集
数据的录入:
数据的显示:
工资的冒泡排序:
存入文件与读取:
五、经验和体会。
通过本次的程序设计让我学到了很多我原先没有学到的知识点,并且以前上课学习的知识点也得到了很大的巩固。
我设计本次的最大体会就是凡事还是自己做的才是最好的,自己写出来的才叫会,有时说着知道这个知识点,甚至说得是头头是道,也不可能写出来的程序完全正确。
即使想着会,或者自己觉得会这个知识点,但是在自己写某个程序的时候就会发现很多问题,然后自己就会重新看书或者问问同学和老师帮自己结束掉问题,经过很长时间的付出才会完成一个完全正确的程序,就是完成这个程序的过程中自己已经不知不觉的学到了比在课程上多得多的知识点,俗话说得好“自己动手,才能丰衣足食”,在这里道理一样,自己真正的思考了,才会把知识真的学到手,成为自己的一部分。
还有就是学程序重要的不是我看了多少书,而是我写了几个能完成的程序,即使不能完成也要尽力的去思考。
思考是一切根源,动手时思考的实践。
实践是知识的积累。
附录:
主要源程序
#include
#include
usingnamespacestd;
/*类的定义*/
//employee.h
classemployee/*基类*/
{
private:
charnumber[20],name[20],sex[10],job[40];
intage;
public:
voidgetnumber();
voidgetname();
voidgetsex();
voidgetjob();
voidgetage();
char*outnumber();
char*outname();
char*outsex();
char*outjob();
intoutage();
};
classmanage:
publicemployee/*派生经理类*/
{
private:
doublemanagesalary;
public:
manage();
doubleoutsalary();
};
template
classtechnology:
publicemployee
{
private:
intworktime,moneyh;
public:
technology(){moneyh=20;}
voidgetworktime();
Toutsalary();
};
template
classemployees:
publicemployee
{
private:
Tsellnumber,employeesalary,extra;
public:
voidgetsellnumber();
voidgetextra();
Toutsellnumber();
Toutsalary();
};
template
classsellmanage:
publicemployees
{
private:
Tsellmanagesalary,s,sum;
public:
voidgetsalary();
Toutsalary();
};
/*类的实现*/
voidemployee:
:
getnumber()
{cin>>number;}
voidemployee:
:
getname()
{cin>>name;}
voidemployee:
:
getsex()
{cin>>sex;}
voidemployee:
:
getjob()
{cin>>job;}
voidemployee:
:
getage()
{cin>>age;}
char*employee:
:
outnumber()
{returnnumber;}
char*employee:
:
outname()
{returnname;}
char*employee:
:
outsex()
{returnsex;}
char*employee:
:
outjob()
{returnjob;}
intemployee:
:
outage()
{returnage;}
manage:
:
manage()
{managesalary=8000;}
doublemanage:
:
outsalary()
{returnmanagesalary;}
template
voidtechnology
:
getworktime()
{cin>>worktime;}
template
Ttechnology
:
outsalary()
{returnworktime*moneyh;}
template
voidsellmanage
:
getsalary()
{
employees
sum=0;
cout<<"输入其部下4个销售员的销售额"< for(inti=0;i<4;i++) { em[i].getsellnumber(); s=em[i].outsellnumber(); sum+=s; } sellmanagesalary=(5000+sum*0.005); } template Tsellmanage : outsalary() { returnsellmanagesalary; } template voidemployees : getsellnumber() { cin>>sellnumber; } template Temployees : outsellnumber() {returnsellnumber;} template voidemployees : getextra() {cin>>extra;} template Temployees : outsalary() { returnsellnumber*extra*0.04; } /*主函数*/ voidmain() { intchoice,i,flag=0; voidinputnumber();//数据录入与显示 voiddoublenumber();//文件保存与读取 for(i=0;i<4;i++) { cout<<"数据录入请按1备份请按2结束请按0"< cin>>choice; switch(choice) { case1: inputnumber();break; case2: doublenumber();break; case0: flag=1;break; } if(flag==1) break; } } /*数据录入和输出函数*/ voidinputnumber() { managem[4]; sellmanage technology employees inti;doublea[28]; cout<<"录入4个经理信息"< for(i=0;i<4;i++) { cout<<"职工号姓名性别职务年龄"< m[i].getnumber();m[i].getname();m[i].getsex();m[i].getjob();m[i].getage(); cout< } cout<<"录入4个技工的信息"< for(i=0;i<4;i++) { cout<<"职工号姓名性别职务年龄工作时间/月"< t[i].getnumber();t[i].getname();t[i].getsex();t[i].getjob();t[i].getage();t[i].getworktime(); cout< } cout<<"录入4个销售经理的信息"< for(i=0;i<4;i++) { cout<<"职工号姓名性别职务年龄"< s[i].getnumber();s[i].getname();s[i].getsex();s[i].getjob();s[i].getage();s[i].getsalary(); cout< } cout<<"录入16个销售员的信息"< for(i=0;i<16;i++) { cout<<"职工号姓名性别职务年龄销售额提成"< e[i].getnumber();e[i].getname();e[i].getsex();e[i].getjob();e[i].getage();e[i].getsellnumber();e[i].getextra(); cout< } cout<<"职工号姓名性别职务年龄工资"< for(i=0;i<4;i++) cout<<"\t"< m[i].outjob()<<""< for(i=0;i<4;i++) cout<<"\t"< s[i].outjob()<<""< for(i=0;i<4;i++) cout<<"\t"< t[i].outjob()<<""< for(i=0;i<16;i++) cout<<"\t"< e[i].outjob()<<""< for(i=0;i<4;i++) a[i]=s[i].outsalary(); intchoice; cout<<"工资冒泡请按1不排工资请按0"< voidoutputnumber(double*m);//销售经理工资冒泡排序 cin>>choice; switch(choice) { case1: outputnumber(a);break; case0: break; } } /*输出冒泡工资函数*/ voidoutputnumber(double*m) { doublet; inti,j,index; for(i=0;i<4;i++) { index=i; for(j=i+1;j<4;j++) if(m[index]>m[j]) index=j; t=m[index]; m[index]=m[i]; m[i]=t; } cout<<"销售员工资冒泡排序"< for(i=0;i<4;i++) cout<<"\t"< } /*存入文件函数*/ voiddoublenumber() { inti; managem[4]; sellmanage technology employees cout<<"录入4个经理信息"< for(i=0;i<4;i++) { cout<<"职工号姓名性别职务年龄"< m[i].getnumber();m[i].getname();m[i].getsex();m[i].getjob();m[i].getage(); cout< } cout<<"录入4个技工的信息"< for(i=0;i<4;i++) { cout<<"职工号姓名性别职务年龄工作时间/月"< t[i].getnumber();t[i].getname();t[i].getsex();t[i].getjob();t[i].getage();t[i].getworktime(); cout< } cout<<"录入4个销售经理的信息"< for(i=0;i<4;i++) { cout<<"职工号姓名性别职务年龄"< s[i].getnumber();s[i].getname();s[i].getsex();s[i].getjob();s[i].getage();s[i].getsalary(); cout< } cout<<"录入16个销售员的信息"< for(i=0;i<16;i++) { cout<<"职工号姓名性别职务年龄销售额提成"< e[i].getnumber();e[i].getname();e[i].getsex();e[i].getjob();e[i].getage();e[i].getsellnumber();e[i].getextra(); cout< } ofstreamofile("employee.txt",ios_base: : out); for(i=0;i<4;i++) { ofile<<"职工号"< "性别
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 工资管理 系统