工资管理系统计算机C++编程实验报告.docx
《工资管理系统计算机C++编程实验报告.docx》由会员分享,可在线阅读,更多相关《工资管理系统计算机C++编程实验报告.docx(28页珍藏版)》请在冰豆网上搜索。
工资管理系统计算机C++编程实验报告
——
《C++程序设计》课程综合实习
实习题目:
工资管理系统
系别:
计算机系___
专业:
计算机与科学
班级:
姓名:
学号:
指导教师:
日期:
2015年12月27日_
一、课程实习的题目、任务与要求
1.课程实习的题目
工资管理系统
2.课程实习内容
(1)存储的数据包括:
员工号,姓名,基本工资,补贴金额,奖励金额,扣除金额、实发工资等)。
实发工资=基本工资+补贴金额+奖励金额-扣除金额。
(2)按职工号增加、删除、修改记录功能;
(3)查询功能,包括按姓名、职工号查询;
(4)排序功能,按指定的关键字(如职工号、姓名、实发工资)排序。
3.课程实习的要求
根据C++课程所学的概念、理论和方法,按照C++程序设计的基本步骤,设计出一个适当规模的程序来实现设计课程内容中的全部功能;设计主控模块程序,对给出的程序源代码要给出各部分的详细注释.自己根据能力及需要添加相应功能模块,增强模拟系统功能。
包括系统的功能分析、系统的功能模块设计、程序流程图或结构框图、逻辑结构设计等。
二、系统分析
1.需求分析
a.能对员工工资信息进行录入。
b.能对员工工资信息进行增加。
c.能对员工工资进行删除。
d.能对员工工资进行修改。
e.能对员工按实发工资,姓名,进行查询。
f.能输出员工工资的所有数据。
g.能对员工工资信息按实发工资、员工号进行排序。
2.系统性能要求
a.系统安全、可靠;
b.功能齐全;
c.操作方便、界面友好;
d易于维护和扩充。
3.系统的功能分析
资料维护:
系统维护包括对员工工资信息的录入操作及数据表中的信息进行浏览。
系统功能:
可以对数据表中的信息进行浏览。
系统查询:
可以对员工工资信息进行查询。
4.系统功能模块
员工查询系统有:
工资信息录入、增加、删除、修改,数据查询,排序显示构成。
5.模块框架图
三、系统设计与实现
1.界面设计
程序运行后会出现一个简捷的窗口,便于用户查询数据。
通过cout语句排列而成。
2.功能设计与实现
应用系统主控界面主要包括三大模块:
记录编辑、记录查询、排序。
(一)记录编辑
(1)数据录入
数据录入是通过cin输入数据,然后用文件“工资表.txt”来作以储存。
(2)增加员工数据
增加员工数据是通过cin输入数据,然后用文件“工资表.txt”来作以储存。
(3)删除员工数据
删除员工数据是通过cin语句输入要删除的员工信息,然后使用if语句在“工作表1.txt”中寻找名字判断是否相等,最后在文件中删除。
(4)修改员工数据
修改员工数据是通过cin语句输入要修改的员工信息,然后使用if语句在“工作表1.txt”中寻找名字判断是否相等,再使用cin输入修改的信息,最后储存在文件中。
如果寻找不到则输出“对不起,您要修改的学生不存在!
请查证后输入!
”。
(二)查询
(1)按员工实发工资查询
通过输入员工实发工资,在for循环语句中用if语句在“工作表1.txt”中寻找实发工资是否与输入的实发工资相等,如果相等就输出该员工信息,如果寻找不到就输出“对不起!
您要查询的员工不存在!
”。
(2)按员工姓名查询
通过输入员工姓名,在for循环语句中用if语句在“工作表1.txt”中寻找姓名是否与输入的员工姓名相等,如果相等就输出该员工的信息,如果寻找不到就输出“对不起!
您要查询的员工不存在!
”。
(3)浏览所有员工工资信息
直接输出“工作表1.txt”中的数据。
(三)排序
(1)按实发工资排序
先让实发工资数组赋给a[100],再通过双重for语句依次将a[n]小的调到前面,排序完后再通过双重for循环输出排序后的相关信息。
(2)按员工号排序
先让员工号数组赋给a[100],再通过双重for语句依次将a[n]小的调到前面,排序完后再通过双重for循环输出排序后的相关信息。
在每个case中都有一个判断是否继续运行次case和一个是否进行其他操作。
在case4/5/6/8/9开头都有一个判断语句,判断系统中是否有数据,没有数据则结束此case,有则继续执行下一条语句。
四、运行及测试结果
每一个case都能执行,但是有些的地方还都不够完善,例如:
删除数据中,本来没有该员工信息,它也依然显示删除成功。
五、总结
此次C++程序设计课程综合实习,让我们学会了如何用C++编写一个简单的应用程序。
首先要对程序的设计要求有一个比较明确的认识,然后系统分析与系统设计,最后是代码设计与调试。
程序实现上,设计了简单的查询界面,将各个功能集中出来按照程序编写原则,便于查询。
根据C++课程所学的概念、理论和方法,按照C++程序设计的基本步骤,设计出一个适当规模的程序;进一步加深对C++语言的理解和掌握。
理论联系实际,加深和巩固所学的理论知识,提高实践能力和计算机的综合运用能力。
我们编写程序的过程是辛苦与快乐的,程序的编写原则很重要,只要我们在编程,就必须不断改进,才能更好提高编程能力。
六、参考资料
龚静李娟芳.C++语言程序设计.西安:
西北工业大学出版社,2013.
附录:
源程序
#include
#include
#include
#include
#include
usingnamespacestd;
classMoney
{
stringname;
floatWage,Subsidy,Reward,Deduct,SumWage;
intnumber;
public:
Money(){};
Money(intnum,stringn,floatW,floatS,floatR,floatD);
floatgetSumWage();//实发工资
friendvoidmain();
};
Money:
:
Money(intnum,stringn,floatW,floatS,floatR,floatD)
{
number=num;
name=n;
Wage=W;//基本工资
Subsidy=S;//补贴工资
Reward=R;//奖励工资
Deduct=D;//扣除工资
}
floatMoney:
:
getSumWage()
{
SumWage=Wage+Subsidy+Reward-Deduct;
returnSumWage;
}
voidmain()
{
system("color0a");
cout<<"*******************************************************************************"<cout<<"*******************************************************************************"<cout<<"*******************************************************************************"<cout<<"*******███████***-----欢迎来到工资管理系统--------***█████████*"<cout<<"*****█*****************------请选择您需要的操作!
-------***********█*********"<cout<<"***█*******************-操作:
--------------------------***********█*********"<cout<<"***█*******************-----
(1)数据录入-----------------***********█*********"<cout<<"***█*******************-----
(2)增加员工数据-------------***********█*********"<cout<<"***█*******************-----(3)删除员工数据-------------***********█*********"<cout<<"***█*******************-----(4)修改员工数据-------------***********█*********"<cout<<"***█*******************-查询:
--------------------------***********█*********"<cout<<"***█*******************-----(5)按员工号查询-------------***********█*********"<cout<<"***█*******************-----(6)按姓名查询---------------***********█*********"<cout<<"***█*******************-----(7)浏览所有学生的数据-------***********█*********"<cout<<"***█*******************-排序:
--------------------------***********█*********"<cout<<"*****█*****************-----(8)按实发工资排序-----------*****█****█*********"<cout<<"*******███████***-----(9)按员工号排序-------------*******██***********"<cout<<"************************-----(0)退出---------------------**********************"<cout<<"*******************************************************************************"<cout<<"*******************************************************************************"<cout<<"请输入:
";
intp=0;//全局变量,用于选择菜单时的输入
charw;//用于是否继续操作
Money*s[100];
ofstream*file[100];
inti=0;//用于录入的下标
intj=0;
intchris1=0;//用于do-while语句
do
{
cin>>p;
if(p>=0&&p<=9)
{
chris1=1;
}
else
{
cout<<"输入指令无效!
请重新输入:
"<}
}while(chris1==0);
do
{
switch(p)
{
case1:
//录入员工数据
{
charc;//用于判断是否
intnumber;
stringname;
floatWage,Subsidy,Reward,Deduct,SumWage;
do
{
cout<<"请输入员工号:
";
cin>>number;
cout<<"请输入员工姓名:
";
cin>>name;
cout<<"请输入员工基本工资:
";
cin>>Wage;
cout<<"请输入员工补贴工资:
";
cin>>Subsidy;
cout<<"请输入员工奖励工资:
";
cin>>Reward;
cout<<"请输入员工扣除工资:
";
cin>>Deduct;
SumWage=Wage+Subsidy+Reward-Deduct;
fstreamoutfile,infile;
outfile.open("工资表.txt",ios:
:
out|ios:
:
app);//用于显示录入的数据
if(!
file)
{
cout<<"工资表.txtcannotopen.\n";
return;
}
outfile<<"员工号:
"<"<"<"<"<"<"<outfile.close();
infile.open("工资表.txt",ios:
:
in);
if(!
file)
{
cout<<"工资表.txtcannotopen.\n";
return;
}
charch;
while(infile.get(ch))
cout<cout<infile.close();
j++;
s[i]=newMoney(number,name,Wage,Subsidy,Reward,Deduct);
i++;
cout<<"员工数据录入成功,想继续录入吗?
(y/n)"<cin>>c;
chris1=0;
do
{
if(c!
='y'&&c!
='n')
{
cout<<"输入的指令无效!
请重新输入!
"<cin>>c;
}
else
{
chris1=1;
}
}while(chris1==0);
}while(c=='y');
break;
}
case2:
//增加员工工资信息
{
charc;//用于判断是否
intnumber;
stringname;
floatWage,Subsidy,Reward,Deduct,SumWage;
do
{
cout<<"请输入增加的员工号:
";
cin>>number;
cout<<"请输入增加的员工姓名:
";
cin>>name;
cout<<"请输入增加的员工基本工资:
";
cin>>Wage;
cout<<"请输入增加的员工补贴工资:
";
cin>>Subsidy;
cout<<"请输入增加的员工奖励工资:
";
cin>>Reward;
cout<<"请输入增加的员工扣除工资:
";
cin>>Deduct;
SumWage=Wage+Subsidy+Reward-Deduct;
fstreamoutfile,infile;
outfile.open("工资表.txt",ios:
:
out|ios:
:
app);
if(!
file)
{
cout<<"工资表.txtcannotopen.\n";
return;
}
outfile<<"员工号:
"<"<"<"<"<"<"<outfile.close();
infile.open("工资表.txt",ios:
:
in);
if(!
file)
{
cout<<"工资表.txtcannotopen.\n";
return;
}
charh;
while(infile.get(h))
{
cout<}
cout<infile.close();
j++;
s[i]=newMoney(number,name,Wage,Subsidy,Reward,Deduct);
i++;
cout<<"员工数据增加成功,想继续录入吗(y/n)"<cin>>c;
if(c!
='y'&&c!
='n')
{
cout<<"输入的指令无效!
请重新输入!
"<cin>>c;
}
}while(c=='y');
break;
}
case3:
//删除员工资料
{
charc;
stringxingming,line,str,name;
do
{ifstreamfin("工资表.txt");
fstreamoutfile("工资表.txt",ios:
:
trunc|ios:
:
out);//作一个文本文档在文件夹中用于显示所录入的数据
cout<<"请输入您要删除的员工的姓名:
";
cin>>xingming;
while(!
fin.eof())
{
getline(fin,line);
istringstreamstream(line);
name=line.substr(0,line.find("",0));//找到名字,判断是否相等
if(name!
=xingming)
{
outfile<}
}
outfile.close();
fin.close();
fstreamf("工资表.txt",ios:
:
trunc|ios:
:
out);
ifstreamoutf("工资表.txt");
f<outf.close();
f.close();
if(name!
=xingming)
{
cout<<"该员工数据删除成功,想继续删除吗?
(y/n)"<cin>>c;
}
if(c!
='y'&&c!
='n')
{
cout<<"指令错误!
请重新输入!
"<cin>>c;
}
}while(c=='y');
break;
}
case4:
//修改员工工资数据
{
stringsname,line,str,name;
intn;
floatW,S,R,D,SW;
intflag;
charc;
if(i==0)
{
cout<<"系统中没有输入数据,请先输入数据!
"<}
do
{
flag=0;
cout<<"请输入您要修改的员工的姓名:
";
cin>>name;
fstreamfin("工资表.txt",ios:
:
in);
ofstreamoutfile("工资表.txt",ios:
:
trunc|ios:
:
out);
cout<while(!
fin.eof())//在文件中查找
{
getline(fin,line);
istringstreamstream(line);
sname=line.substr(0,line.find("",0));
if(name!
=sname)
{
outfile<}
elseflag=1;
}
fin.close();
if(flag=1)
{
cout<<"请输入修改的员工号:
";
cin>>n;
cout<<"请输入修改的员工姓名:
";
cin>>name;
cout<<"请输入修改的员工基本工资:
";
cin>>W;
cout<<"请输入修改的员工补贴工资:
";
cin>>S;
cout<<"请输入修改的员工奖励工资:
";
cin>>R;
cout<<"请输入修改的员工扣除工资:
";
cin>>D;
SW=W+S+R-D;
cout<outfile<<"员工号:
"<"<"<"<
"<"<"<outfile.close();
fstreamoutf("工资表.txt",ios:
:
trunc|ios:
:
out);
fstreaminf("工资表.txt",ios:
:
in);
outf<outf.close();
inf.close();
}
if(flag=0)
{
cout<<"对不起,您要修改的