资源描述
-—
《C++程序设计》课程综合实习
实习题目: 工资管理系统
系 别: 计算机系 ___
专业: 计算机与科学
班级:
姓 名:
学号:
指导教师:
日 期: 2015年12月27日_
目录
一、课程实习的题目、任务与要求2
1。课程实习的题目2
2.课程实习内容2
3.课程实习的要求2
二、系统分析2
1.需求分析2
2。系统性能要求3
3。系统的功能分析3
4.系统功能模块3
5。模块框架图3
三、系统设计与实现4
1。界面设计4
2。功能设计与实现4
四、运行及测试结果5
五、总结5
六、参考资料5
附录:源程序6
一、课程实习的题目、任务与要求
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〈iostream〉
#include<fstream>
#include〈string〉
#include<sstream〉
#include〈iomanip>
usingnamespace std;
class Money
{
string name;
float Wage,Subsidy,Reward,Deduct,SumWage;
int number;
public:
Money(){};
Money(int num,string n,float W,float S,float R,float D);
float getSumWage();//实发工资
friendvoid main();
};
Money::Money(int num, string n, float W, float S, float R, float D)
{
number=num;
name=n;
Wage=W;//基本工资
Subsidy=S;//补贴工资
Reward=R;//奖励工资
Deduct=D;//扣除工资
}
float Money::getSumWage()
{
SumWage=Wage+Subsidy+Reward—Deduct;
return SumWage;
}
void main()
{
system("color 0a”);
cout〈<”*******************************************************************************"〈〈endl;
cout<〈”*******************************************************************************”<<endl;
cout〈<”*******************************************************************************”〈〈endl;
cout〈〈”*******███████***-—-—-欢迎来到工资管理系统-——————-***█████████*”<<endl;
cout〈〈”*****█*****************-—————请选择您需要的操作!——————-***********█*********”<<endl;
cout<<”***█*******************-操作:———-———————————--——-——--——***********█*********”〈<endl;
cout<<”***█*******************-—-——(1)数据录入———-———-—--—-—-——***********█*********”〈〈endl;
cout〈〈”***█*******************—————(2)增加员工数据——-—-———---——***********█*********”〈<endl;
cout<〈”***█*******************——-—-(3)删除员工数据-——-—--———--—***********█*********”〈〈endl;
cout〈〈”***█*******************——--—(4)修改员工数据—--————-—————***********█*********”<<endl;
cout〈〈”***█*******************—查询:————-————-—--——-—-—-—-——-—***********█*********”<〈endl;
cout〈<”***█*******************--———(5)按员工号查询-—-—-————----***********█*********”〈<endl;
cout<〈”***█*******************—---—(6)按姓名查询——————-—---———-***********█*********”<〈endl;
cout<〈”***█*******************——-——(7)浏览所有学生的数据-—-—-——***********█*********”〈〈endl;
cout〈〈”***█*******************—排序:——-——--—-—————-——-—-——————***********█*********”<〈endl;
cout<〈”*****█*****************-----(8)按实发工资排序—-———-—————*****█****█*********”〈<endl;
cout<〈"*******███████***—————(9)按员工号排序————-————-———*******██***********"<<endl;
cout〈〈"************************—-——-(0)退出--—--——--—---—-———--—**********************"<<endl;
cout<<"*******************************************************************************"〈〈endl;
cout<〈”*******************************************************************************”〈<endl;
cout〈〈”请输入:";
int p=0;//全局变量,用于选择菜单时的输入
char w;//用于是否继续操作
Money *s[100];
ofstream *file[100];
int i=0;//用于录入的下标
int j=0;
int chris1=0;//用于do—while语句
do
{
cin〉>p;
if(p〉=0&&p〈=9)
{
chris1=1;
}
else
{
cout〈〈"输入指令无效!请重新输入:”〈〈endl;
}
}while(chris1==0);
do
{
switch(p)
{
case 1://录入员工数据
{
char c;//用于判断是否
int number;
string name;
float Wage,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;
fstream outfile,infile;
outfile。open("工资表.txt”,ios::out|ios::app);//用于显示录入的数据
if(!file)
{
cout<<”工资表。txt can not open.\n";
return;
}
outfile〈〈”员工号:”〈<number<〈" 姓名:"〈〈name<<endl<<"基本工资:"〈〈Wage〈〈” 补贴工资:”<<Subsidy〈<” 奖励工资:”〈<Reward〈〈” 扣除工资:"〈〈Deduct〈〈" 实发工资:"<<SumWage〈<endl;
outfile。close();
infile.open("工资表。txt”,ios::in);
if(!file)
{
cout<〈”工资表。txt can not open。\n”;
return;
}
char ch;
while(infile。get(ch))
cout<〈ch; //?
cout〈〈endl;
infile。close();
j++;
s[i]=new Money(number,name,Wage,Subsidy,Reward,Deduct);
i++;
cout<〈"员工数据录入成功,想继续录入吗?(y/n)”〈<endl;
cin〉>c;
chris1=0;
do
{
if(c!='y’&&c!='n')
{
cout<〈"输入的指令无效!请重新输入!”〈<endl;
cin〉>c;
}
else
{
chris1=1;
}
}while(chris1==0);
}while(c==’y');
break;
}
case 2://增加员工工资信息
{
char c;//用于判断是否
int number;
string name;
float Wage,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;
fstream outfile,infile;
outfile。open("工资表.txt”,ios::out|ios::app);
if(!file)
{
cout<<"工资表.txt can not open。\n”;
return;
}
outfile〈<”员工号:”〈〈number〈〈” 姓名:”<〈name<〈endl<〈”基本工资:"〈〈Wage〈<" 补贴工资:"〈〈Subsidy〈〈” 奖励工资:"〈〈Reward〈<” 扣除工资:"<〈Deduct〈<" 实发工资:”<<SumWage〈<endl;
outfile。close();
infile。open("工资表。txt”,ios::in);
if(!file)
{
cout〈<"工资表.txt can not open。\n”;
return;
}
char h;
while(infile。get(h))
{
cout〈〈h;
}
cout<<endl;
infile。close();
j++;
s[i]=new Money(number,name,Wage,Subsidy,Reward,Deduct);
i++;
cout〈〈"员工数据增加成功,想继续录入吗(y/n)”<<endl;
cin>>c;
if(c!='y'&&c!='n’)
{
cout<〈”输入的指令无效!请重新输入!”〈〈endl;
cin〉〉c;
}
}while(c=='y’);
break;
}
case 3://删除员工资料
{
char c;
string xingming,line,str,name;
do
{ ifstream fin("工资表.txt”);
fstream outfile(”工资表.txt",ios::trunc|ios::out); //作一个文本文档在文件夹中用于显示所录入的数据
cout〈<”请输入您要删除的员工的姓名:";
cin>〉xingming;
while(!fin。eof() )
{
getline(fin,line);
istringstream stream(line);
name = line。substr(0,line.find(” ”,0));//找到名字,判断是否相等
if(name != xingming)
{
outfile<〈line〈〈endl;
}
}
outfile。close();
fin。close();
fstream f(”工资表。txt",ios::trunc|ios::out);
ifstream outf("工资表.txt”);
f〈<outf.rdbuf();
outf。close();
f.close();
if(name!=xingming)
{
cout〈〈”该员工数据删除成功,想继续删除吗?(y/n)"〈〈endl;
cin〉>c;
}
if(c!=’y'&&c!=’n')
{
cout〈〈”指令错误!请重新输入!”〈〈endl;
cin>>c;
}
}while(c==’y’);
break;
}
case 4://修改员工工资数据
{
string sname,line,str,name;
int n;
float W,S,R,D,SW;
int flag;
char c;
if(i==0)
{
cout〈〈"系统中没有输入数据,请先输入数据!”〈〈endl;break;
}
do
{
flag=0;
cout<〈”请输入您要修改的员工的姓名:”;
cin〉>name;
fstream fin(”工资表.txt”,ios::in);
ofstream outfile(”工资表。txt”,ios::trunc|ios::out);
cout〈<endl;
while(!fin。eof()) //在文件中查找
{
getline(fin,line);
istringstream stream(line);
sname = line。substr(0,line。find(" ",0));
if(name!=sname)
{
outfile〈<line<〈endl;
}
else flag=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<〈endl;
outfile〈〈”员工号:"〈〈n<〈” 姓名:”<<name<〈endl〈〈"基本工资:”〈〈W〈〈” 补贴工资:"<〈S〈〈” 奖励工资:”〈<R〈<" 扣除工资:”〈〈D〈〈" 实发工资:"〈〈SW〈<endl;
outfile。close();
fstream outf(”工资表.txt",ios::trunc|ios::out);
fstream inf(”工资表.txt",ios::in);
outf〈〈inf。rdbuf()〈<endl;
outf。close();
inf。close();
}
if(flag=0)
{
cout〈〈”对不起,您要修改的学生不存在!请查证后输入!"〈<endl;
}
cout〈<”想继续修改吗(y/n):”;
cin〉〉c;
cout<〈endl;
if(c!=’y’&&c!=’n’)
{
cout<〈” 输入的指令无效!请重新输入!"<〈endl〈<” ”;
cin>>c;
}
}while(c=='y');
break;
}
case 5://按员工号查询
{
int j=0;
float num;
char c;
int flag;
if(i==0)
{
cout〈<"系统中没有输入数据,请先输入数据!"<〈endl;
break;
}
do
{
flag=0;
cout<〈"请输入您要查询的员工的员工号:”〈〈endl;
cin〉〉num;
for(int j=0;j<i;j++)
{
if(s[j]—〉number==num)
{
flag=1;
cout〈〈"您要查询的员工是:"〈〈(*s[j])。name〈〈endl;
cout〈<"该员工的工资信息为:”<<endl;
cout<〈”员工号:”〈<(*s[j])。number<〈" 姓名:"<<(*s[j]).name〈<endl〈<”基本工资:”<〈(*s[j])。Wage<〈" 补贴工资:”<<(*s[j])。Subsidy〈〈" 奖励工资:"〈<(*s[j])。Reward〈〈” 扣除工资:"<〈(*s[j])。Deduct〈<” 实发工资:”〈<(*s[j])。SumWage<〈endl;
}
}
if(flag==0)cout〈<”对不起!您要查询的员工不存在!”<〈endl;
cout<〈”是否继续查?(y/n):”;
cin〉>c;
if(c!='y'&&c!=’n’)
{
cout〈〈”输入的指令无效!请重新输入!"〈<endl;
cin〉〉c;
}
}while(c==’y’);
break;
}
case 6://按姓名查询
{
string n;
char c;
int j=0;
int flag;
if(i==0)
{
cout〈<”系统中没有输入数据,请先输入数据!"<〈endl;
break;
}
do
{
flag=0;
cout<〈"请输入要查询员工的名字: ”<〈endl;
cin〉〉n;
for(int j=0;j〈i;j++)
{
if(s[j]—>name==n)
{
flag=1;
cout<<”您要查询的员工是:"〈<(*s[j])。name<<endl;
cout〈〈"该生的工资信息是:\n员工号:”〈<(*s[j])。number<<endl〈〈”基本工资:"〈〈(*s[j])。Wage〈〈" 补贴工资:"〈<(*s[j]).Subsidy<〈” 奖励工资:"<〈(*s[j])。Reward<<” 扣除工资:”〈<(*s[j])。Deduct〈<" 实发工资:”<〈(*s[j]).SumWage〈<endl;
}
}
if(flag==0)
{
cout〈〈”对不起您要查询的员工不存在,请查证后再输入!"〈〈endl;
}
cout<〈”您想继续查询吗?(y/n):";
cin>>c;
if(c!=’y'&&c!='n’)
{
cout〈<"输入的指令无效!请重新输入:"〈<endl;
cin>>c;
}
}while(c==’y’);
break;
}
case 7://浏览所有员工工资信息
{
cout<〈"所有员工数据如下:”〈〈endl;
ifstream file;
file。open(”工资表。txt",ios::in);
cout〈<file.rdbuf();
file。close();
break;
}
case 8://按实发工资排序
{
if(i==0)
{
cout<〈”系统中没有输入数据,请先输入数据!"<<endl;
break;
}
int h,g,n;
int j=0;
float a[100],temp;
for(g=0;g〈i;g++)
{
a[j]=(*s[g])。getSumWage();
j++;
}
for(h=0;h〈i;h++)
{
for(n=0;n<i—h;n++)
if(a[n]>a[n+1])
{
temp=a[n];
a[n]=a[n+1];
a[n+1]=temp;
}
}
for(n=1;n〈=i;n++)
{
for(int j=0;j〈i;j++)
{
if(s[j]—>getSumWage()==a[n])
{
cout<<"实发工资排第"〈〈n<<”的员工是:”〈<(*s[j])。name〈<" 实发工资:"<<(*s[j])。SumWage〈〈endl;
}
}
}
break;
}
case 9://按员工号排序
{
if(i==0)
{
cout〈<"系统中没有输入数据,请先输入数据!”〈〈endl;
break;
}
int h,g,n;
int j=0;
int a[100],temp;
for(g=0;g〈i;g++)
{
a[j]=(*s[g])。number;
j++;
}
for(h=0;h〈i;h++)
{
for(n=0;n〈i-h;n++)
if(a[n]>a[n+1])
{
temp=a[n];
a[n]=a[n+1];
a[n+1]=temp;
}
}
for(n=1;n<=i;n++)
{
for(int j=0;j〈i;j++)
{
if(s[j]—〉number==a[n])
{
cout〈<"第"〈<n<〈"位员工是:”〈<(*s[j])。name〈<” 员工号:”<<(*s[j])。number〈〈” 实发工资:”<<(*s[j])。getSumWage()<<endl;
}
}
}
break;
}
case 0:
{
exit(0);
}
}
cout〈〈” 您想继续进行其他操作吗?(y/n):”;
int flag=0;
do
{
cin>〉w;
cout〈<endl;
if(w!=’y’&&w!=’n’)
cout〈〈"输入的指令无效!请重新输入!”〈〈endl;
else
flag=1;
}while(flag==0);
if(w==’y')
{
cout〈〈”*******************************************************************************”<〈endl;
cout〈〈”*******************************************************************************"〈〈endl;
cout〈〈”*******************************************************************************”<<endl;
cout〈<”
展开阅读全文