C++课设.docx
《C++课设.docx》由会员分享,可在线阅读,更多相关《C++课设.docx(48页珍藏版)》请在冰豆网上搜索。
C++课设
课程设计报告
一、需求分析
二、概要设计
三、详细设计
四、调试分析
五、用户手册
六、测试数据
七、附录
设计题目:
企业人事管理系统:
人事工资管理
职工主要属性如下:
基本工资,岗位工资,奖金,应发工资,医疗住房基金,税金,实发工资;应发工资=基本工资+岗位工资,实发工资=应发工资-税金-住房医疗基金!
利用文本文件存储职工工资信息;实现工资的录入,统计(统计整个工资的平均工资,最高和最低工资,工资均方差等信息;各部门的平均工资,最高最低工资,工资均方差等信息),查询(根据员工的姓名查询),修改,删除等功能。
要求:
1.源文件采用多文件的工程结构2.数据存储采用文件形式3.标准的C++输入和输出4.功能完善,适当的注视5.关于文件的内容需要自学6.原则上不允许只涉及一个类,应有多个类7.应用面向对象的封装,继承,多态技术)
一.需求分析
(1)任务:
使员工可以查到自己的工资信息;
(2)规定:
程序必须用C++,不能只用一个类
(3)输入和输出范围:
字符和双精度数字;
(4)输出形式:
双精度型数字型输出;
(5)程序所能达到的功能:
录入,查询,修改,统计以及删除员工的工资信息;
(6)测试数据:
二.设计概要
见图
Class3设备处
Public:
继承worker类,
主要的统计功能
Class4人事处
Public:
继承worker类,
主要的统计功能
Clss5学工处
Public:
继承worker类,
主要的统计功能
Class6软件学院
Public:
继承worker类,
主要的统计功能
Class1xinxi
public:
doublejiben;(基本工资)
doublegangwei;(岗位工资
doubleshuijin;(税金)
doubleyiliao;(医疗住房基金)
doublejiangjin;(奖金)
doublesum;(实发工资)
doublesum1;(应发工资)
doubleavarage;(平均工资)
classxinxi*next(定义链表,主要实现信息查询,统计,修改,删除,等功能!
Class2worker:
public:
calssxinxi
Public:
stringname;(员工姓名)
stringID;(员工工号)
doublesum;(实发工资)
doubleavarage;(平均工资)
xinxisc1;(定义一个广义对象)
classworker*next;(定义头指针)
voidluru(worker*head);(录入功能)
voidsearch1(worker*head);(按姓名查找功能)
voidsearch2(worker*head);(按工号查找)
voidxianshi(worker*head);(信息显示)
voidxiugai(worker*head);(修改)
voidchazhao(worker*head);(查找)
voidshanchu(worker*head);(删除)
voidtianjia(worker*head);(添加)
voidtongji(worker*head);(统计)
voiddisplay();(界面显示)
voidread(worker*head);(读取)
voiddakai(worker*head);(打开员工信息)
三.详细设计
1.头文件使用:
#include
#include
#include:
此为利用文本文档存信息时所需头文件!
#include:
控制输入输出流的头文件
2.主函数:
实现系统界面设计
intmain()
{
system("colorff");
intx;
worker*head=newworker;运用链表
head->next=NULL;
while
(1)
{
display();
cin>>x;
if(x==1)
{
cout<<"***************现在进行职工数据的录入*****************\n";
luru(head);
cout<<"输入的职工信息为:
\n";
xianshi(head);
display();//break;
}
elseif(x==2)
{
cout<<"***************现在进行职工数据的修改******************\n";
xiugai(head);
display();
//break;//按姓名修改
}
elseif(x==3)
{
cout<<"***************现在进行所有职工信息的显示*****************\n";
xianshi(head);
display();
//break;//显示数据
}
elseif(x==4)
{
charz;
cout<<"*****************现在进行所有职工信息查找**************\n";
cout<<"请选择查询方式\n";
cout<<"
(1).姓名查询方式
(2).ID查询方式\n";
cin>>z;
while(z!
='1'&&z!
='2')
{
cout<<"**************指令错误********************\n";
cout<<"
(1).姓名查询方式
(2).ID查询方式\n";
cin>>z;
}
switch(z)
{
case'1':
search1(head);break;//按姓名查询
case'2':
search2(head);break;//按学号查询
}
display();
//break;
}
elseif(x==5)
{
cout<<"***************现在进行指定的职工信息的删除*****************\n";
shanchu(head);
xianshi(head);
display();
//break;//删除
}
elseif(x==6)
{
cout<<"****************现在进行指定的职工信息的添加******************\n";
tianjia(head);
xianshi(head);
display();
break;//添加
}
elseif(x==7)
{
cout<<"**********************现在进行指定的职工信息的统计***************\n";
tongji(head);
display();
//break;
}
elseif(x==8)
{
cout<<"**********************现在进行指定的职工信息的保存************\n";
read(head);
display();
//break;
}
elseif(x==9)
{
cout<<"************************现在进行指定的职工信息的打开****************\n";
dakai(head);
display();
//break;
}
else
{
cout<<"╔═══════════════════════════╗\n";
cout<<"║您已退出职工管理系统,谢谢您的使用!
║\n";
cout<<"╚═══════════════════════════╝\n";
cout<exit(0);
break;
}
}
return0;
}
剩余自定义函数,函数功能:
(1).显示功能:
voidxianshi(worker*head)
{
worker*work=head->next;
cout<<"|name|ID|基本工资|岗位工资|税金|医疗保险|奖金金|应发工资|实发工资|平均工资|"<while(work!
=NULL)
{
cout<<"|"<cout<<"|"<cout<<"|"<cout<<"|"<cout<<"|"<cout<<"|"<cout<<"|"<cout<<"|"<cout<<"|"<cout<<"|"<cout<<"|"<work=work->next;
}
system("pause");运用的头文件(ioainp.h)中可调用的函数
}
2.利用文本文档存储信息
voidread(worker*head)
{
chara;
worker*work=head->next;
cout<<"现在保存输入职工数据,是否继续操作?
(y/n)";
cin>>a;
ofstreamoutfile("D:
\\职工管理系统\\职工信息.txt",ios:
:
out);
if(!
outfile)
{
cout<<"!
!
!
!
!
!
!
!
打开文件错误!
!
!
!
!
!
!
\n";
cout<<"!
!
!
要保存数据请先建立好指定文件:
D:
\\职工管理系统\\职工信息.txt!
!
!
\n";
exit(0);
}
while(a!
='n')
{
while(work!
=NULL)
{
outfile<<"****************第"<***************\n";
outfile<<"|name|ID|基本工资|岗位工资|税金|医疗保险|奖金|应发工资|实发工资|平均工资|"<outfile<<"职工信息:
\n"<<"|"<amount++;
work=work->next;
}
break;
}
cout<<"......成功将学生数据保存到<职工信息.txt>中!
";
outfile.close();
}
3.打开存储信息函数
voiddakai(worker*head)
{
worker*work=head->next;
ofstreamofile("D:
\\职工管理系统\\职工信息.txt",ios:
:
out);
work=work->next;
}
voidluru(worker*head)
{
charc;
intj=0;
worker*p=head;
file[j]=newofstream("D:
\\职工管理系统\\职工信息.txt",ios:
:
app);
do
{
worker*work=newworker;
cout<<"请输入姓名:
"<cin>>(*work).name;
cout<<"请输入ID:
"<cin>>(*work).ID;
cout<<"请输入基本工资:
"<(2);
cin>>(*work).sc1.jiben;
cout<<"请输入岗位工资:
"<(2);
cin>>(*work).sc1.gangwei;
cout<<"请输入税金:
"<(2);
cin>>(*work).sc1.shuijin;
cout<<"请输入医疗保险:
"<(2);
cin>>(*work).sc1.yiliao;
cout<<"请输入奖金:
"<(2);
cin>>(*work).sc1.jiangjin;
(*work).sc1.sum=(*work).sc1.gangwei+(*work).sc1.jiben;
(*work).sc1.avarage=((*work).sc1.gangwei+(*work).sc1.jiangjin+(*work).sc1.yiliao+(*work).sc1.shuijin+(*work).sc1.jiben)/5;
(*work).sc1.sum1=(*work).sc1.gangwei+(*work).sc1.jiben-(*work).sc1.shuijin-(*work).sc1.yiliao;
if((*work).sc1.sum>=2000)ab++;
if((*work).sc1.sum>=1500&&(*work).sc1.sum<2000)cd++;
if((*work).sc1.sum>=1000&&(*work).sc1.sum<1500)ef++;
work->next=p->next;
p->next=work;
amount++;
cout<<"数据录入成功,想继续录入吗(y/n)";cin>>c;
p=p->next;
while(c!
='y'&&c!
='n')
{
cout<<"!
!
!
!
!
!
!
!
!
!
指令错误<请输入y/n!
>!
!
!
!
!
!
!
!
!
!
"<cout<<"数据录入成功,想继续录入吗(y/n)";
cin>>c;
}
}while(c=='y');
j++;
cout<<"输入了"<}
4.两种方式的查找
voidsearch1(worker*head)
{
charc;
stringname;
do{
worker*work=head->next;
boolflag=0;
cout<<"请输入要查找的职工的姓名:
";
cin>>name;
do{
if(work!
=NULL&&name==(*work).name)
{
flag=1;
cout<<"|name|ID|基本工资|岗位工资|税金|医疗保险|奖金|应发工资|实发工资|平均工资|"<cout<<"|"<cout<<"|"<cout<<"|"<cout<<"|"<cout<<"|"<cout<<"|"<cout<<"|"<cout<<"|"<cout<<"|"<cout<<"|"<cout<<"|"<}
work=work->next;
}while(work!
=NULL);
if(flag==0)
cout<<"!
!
!
!
!
!
!
!
!
!
!
!
!
对不起!
您要查询的职工不存在!
!
!
!
!
!
!
!
!
!
!
"<cout<<"您想继续查询吗?
(y/n)";cin>>c;
while(c!
='y'&&c!
='n')
{
cout<<"!
!
!
!
!
!
!
!
!
!
!
!
!
!
指令错误<请输入y/n!
>!
!
!
!
!
!
!
!
!
!
!
"<cout<<"您想继续查询吗?
(y/n)";cin>>c;
}
}while(c=='y');
}
voidsearch2(worker*head)
{
charc;
stringID;
do{
worker*work=head->next;
intflag=0;
cout<<"请输入要查找职工的ID";
cin>>ID;
do{
if(work!
=NULL&&ID==(*work).ID)
{
flag=1;
cout<<"你要查询的学生是"<name<cout<<"|name|ID|基本工资|岗位工资|税金|医疗保险|奖金|应发工资|实发工资|平均工资|"<cout<<"|"<cout<<"|"<cout<<"|"<cout<<"|"<cout<<"|"<cout<<"|"<cout<<"|"<cout<<"|"<cout<<"|"<cout<<"|"<cout<<"|"<}
work=work->next;
}while(work!
=NULL);
if(flag==0)
cout<<"!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
对不起!
您要查询的职工不存在!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
"<cout<<"您想继续查询吗?
(y/n)";
cin>>c;
while(c!
='y'&&c!
='n')
{
cout<<"!
!
!
!
!
!
!
!
!
!
!
!
指令错误<请输入y/n!
>!
!
!
!
!
!
!
!
!
!
"<cout<<"您想继续查询吗?
(y/n)"<cin>>c;
}
}while(c=='y');
}
5.修改信息
voidxiugai(worker*head)
{
stringname;
charc;
do
{
boolflag2=0;
worker*work=head->next;
xinxisc1;
cout<<"请输入你要修改的职工的姓名:
";
cin>>name;
do{
if(name==(*work).name)
{
flag2=1;
cout<<"请输入新的基本工资:
";
cin>>sc1.jiben;
cout<<"请输入新的岗位工资:
";
cin>>sc1.gangwei;
cout<<"请输入新的税金:
";
cin>>sc1.shuijin;
cout<<"请输入新的医疗保险:
";
cin>>sc1.yiliao;
cout<<"请输入新的奖金:
";
cin>>sc1.jiangjin;
(*work).sc1.jiben=sc1.jiben;
(*work).sc1.gangwei=sc1.gangwei;
(*work).sc1.shuijin=sc1.shuijin;
(*work).sc1.sum=(*work).sc1.gangwei+(*work).sc1.jiben-(*work).sc1.yiliao-(*work).sc1.shuijin;
(*work).sc1.avarage=((*work).sc1.gangwei+(*work).sc1.jiangjin+(*work).sc1.jiben+(*work).sc1.yiliao+(*work).sc1.shuijin)/5;
cout<<"|name|ID|基本工资|岗位工资|税金|医疗保险|奖金|应发工资|实发工资|平均工资|"<cout<<"|"<cout<<"|"<cout<<"|"<cout<<"|"<cout<<"|"<cout<<"|"<cout<<"|"<cout<<"|"<cout<<"|"<cout<<"|"<