课程设计.docx
《课程设计.docx》由会员分享,可在线阅读,更多相关《课程设计.docx(57页珍藏版)》请在冰点文库上搜索。
![课程设计.docx](https://file1.bingdoc.com/fileroot1/2023-6/24/757aa698-c475-4208-97e3-28ed3c09055e/757aa698-c475-4208-97e3-28ed3c09055e1.gif)
课程设计
C++程序设计课程设计报告
课题:
小型公司工资管理系统
专业班级:
信管12101
学号:
201217020116
姓名:
刘玲
指导教师:
雷红艳
评阅意见:
评定成绩:
指导老师签名:
年月日
1.设计系统的目的意义…………………………………………第1页
2.系统需求、功能分析…………………………………………第2页
3.数据结构表……………………………………………………第3页
4.数据测试表……………………………………………………第5页
5.运行和调试……………………………………………………第7页
6.课程心得体会…………………………………………………第16页
参考书目…………………………………………………………第17页
附录………………………………………………………………第18页
课程设计报告内容:
1、设计系统的目的意义
本次课程设计所编辑的C++程序是为了建立“小型公司工资管理系统”。
通过对该系统的建立进一步掌握面向过程和面面相对象程序的设计的几本方法和编程技巧,巩固所学理论知识,是理论与实践相结合,提高分析问题、解决问题的能力。
具体一点主要是为了进一步熟悉C++中类的概念、类的继承、抽象类、虚函数、虚基类、多态和文件的输入/输出等内容的实现方式。
了解系统开发的需求分析、类层次设计、模块分析、编码测试、模块组装与整体调试的全过程;逐步熟悉程序设计的方法,并养成良好的编程习惯。
2、系统需求、功能分析
A、公司主要有四类雇员:
经理、技术人员、销售人员、销售经理。
要求储存雇员的编号、姓名、性别、所在部门、级别等信息,并进行工资计算。
B、工资的计算方法
(1)经理:
领取固定月薪,固定月薪5000元;
(2)技术人员:
按小时领取月薪,工作时间*小时工资(80元/小时);(3)销售人员:
按巩固销售额领取月薪,0.33*销售额;
(4)销售经理:
既拿固定月薪也领取销售提成,0.33*销售额+固定月薪(5000元)。
C、功能分析
(1)添加功能:
程序能够任意添加上述四类人员的记录,可提供选择界面供用户选择所要添加的人员类别,要求员工的编号要唯一,如果添加了重复编号的记录时,则提示数据添加重复并取消添加。
(2)查询功能:
可根据编号、姓名等信息对已添加的记录进行查询,如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息;
(3)显示功能:
可显示当前系统中所有记录,每条记录占据一行。
(4)编辑功能:
可根据查询结果对相应的记录进行修改,修改时注意编号的唯一性。
(5)删除功能:
主要实现对已添加的人员记录进行删除。
如果当前系统中没有相应的人员记录,则提示“记录为空!
”并返回操作;否则,输入要删除的人员的编号或姓名,根据所输入的信息删除该人员记录,如果没有找到该人员信息,则提示相应的记录不存。
(6)统计功能:
能根据多种参数进行人员的统计。
例如,统计四类人员数量以及总数,或者统计男、女员工的数量,或者统计平均工资、最高工资、最低工资等信息。
(7)读取功能:
可将保存在文件中的人员信息读入到当前系统中,供用户进行使用。
(8)退出功能:
退出程序。
3、数据结构表
4、数据测试表
添加后的数据:
编号
姓名
性别
部门
等级
工资
1
张三
男
经理
A
5000元
2
李四
男
经理
A
5000元
3
王五
男
经理
A
5000元
4
李白
男
技术
B
4320元
5
杜甫
男
技术
B
3440元
6
洋洋
女
销售
C
2525元
7
丽丽
女
销售
C
2159元
8
武凯旋
男
销售
D
7525元
9
刘玲
女
销售
D
7159元
编辑后的数据:
编号
姓名
性别
部门
等级
工资
1
张三
男
经理
A
5000元
2
李四
男
经理
A
5000元
3
王五
男
经理
A
5000元
4
李白
男
技术
B
4320元
5
杜甫
男
技术
B
3440元
6
洋洋
女
销售
C
2525元
7
丽丽
女
销售
C
2159元
8
武凯旋
男
销售
D
7525元
9
李平
男
销售
D
7159元
按编号删除后的数据:
编号
姓名
性别
部门
等级
工资
2
李四
男
经理
A
5000元
3
王五
男
经理
A
5000元
4
李白
男
技术
B
4320元
5
杜甫
男
技术
B
3440元
6
洋洋
女
销售
C
2525元
7
丽丽
女
销售
C
2159元
8
武凯旋
男
销售
D
7525元
9
李平
男
销售
D
7159元
按姓名删除后的数据:
编号
姓名
性别
部门
等级
工资
2
李四
男
经理
A
5000元
3
王五
男
经理
A
5000元
5
杜甫
男
技术
B
3440元
6
洋洋
女
销售
C
2525元
7
丽丽
女
销售
C
2159元
8
武凯旋
男
销售
D
7525元
9
李平
男
销售
D
7159元
5、运行和调试
(1)添加功能
说明:
输入1,选择添加功能
说明:
输入1,选择添加经理
说明:
输入2,添加技术人员
说明:
输入3,添加销售人员
说明:
输入4,添加销售经理
(2)查询功能
说明:
输入2,选择查询功能
说明:
输入1,编号查询
说明:
输入2,姓名查询
(3)显示功能
说明:
输入3,选择显示功能
(4)编辑功能
说明:
输入4,选择编辑功能
说明:
编辑后读取数据
(5)删除功能
说明:
输入5,选择删除功能
说明:
输入1,编号删除
说明:
输入2,姓名删除
(6)统计功能
说明:
输入6,选择统计功能
(7)读取功能
说明:
输入7,选择读取功能
(8)退出功能
说明:
输入8,选择退出功能
6、课程设计的心得
通过这次课程设计,加深了对类与派生的理解。
类与派生类之间的关系,通过上机实践得到了进一步的深化。
从数据成员的继承到派生类对象对基类成员函数的调用。
对于类的保护成员只能被本身的成员函数使用,而不能直接从类外通过对象直接调用,所以如果想单独调用对象内的被保护的数据成员或私有的数据成员时,应该通过友元函数来实现。
在编辑程序是应该多敲回车将花括号单列一行,一行只写一条语句如此可使程序看起来非常有层次感,检查错误的时候也会非常方便,最大可能的减轻了单个花括号不易检查的问题的难度。
解决花括号不配对问题更好的方法是将程序分装打包成函数,放于主函数外,不过要注意定义在调用前的话,可以直接进行函数的调用,否则要先声明该函数,然后才能调用该函数。
虽然有了一年的上机课,但在课程设计这一段时间,使我收获了很多在上机课上无法学习到的知识,尤其是C++的流类库与输入输出。
因为这一部分知识的不熟练,在程序设计过程中遇到了不少困难,但通过老师的指导和一次又一次的改写、调试,将这些困难都解决了,心中的喜悦感油然而生。
为了能使程序更加的完善,我也利用了不少的课余时间,查找了各方面的资料,当看到程序从一个头文件名到一个900多行的程序,到最后的成功运行,感觉自己这段时间的付出是非常值得的,也使我对C++产生了更浓厚的兴趣,对自己的学习以及将来的工作都是有很大的帮助的。
整个实习过程让我的C++知识得到了应用,体验了程序员编程时的喜怒哀乐,知识、心智,得到全方位提升,收获颇丰。
参考书目
[1]林小茶、陈维兴,《C++面向对象课程设计教程》,清华大学出版社,2009年
[2]谭浩强,《C语言程序设计》,清华大学出版社,2008年
附录
#include
#include
#include
#include
usingnamespacestd;
classemployee//雇员类
{
protected:
intnumber;//编号
charname[10];//姓名
charsex[3];//性别
chardepartment[20];//部门
chargrade;//级别
intpay;//工资
employee*next;
public:
friendistream&operator>>(istream&input,employee&ob)//运算符">>"重载为友元函数
{
input>>ob.name>>ob.sex>>ob.department;
returninput;
}
friendostream&operator<<(ostream&output,employee&ob)//运算符"<<"重载为友元函数
{
output<returnoutput;
}
friendvoidtianjia();//添加功能
friendvoidchaxun_number();
friendvoidchaxun_name();
friendvoidchaxun();//查询功能
friendvoidxianshi();//显示功能
friendvoidbianji();//编辑功能
friendvoidshanchu_number();
friendvoidshanchu_name();
friendvoidshanchu();//删除功能
friendvoidtongji();//统计功能
friendvoidduqu();//读取功能
friendintgetnumber();//获取编号
};
classmanager:
virtualpublicemployee//经理类固定工资
{
public:
voidget()
{
grade='A';
pay=5000;
number=getnumber();
}
};
voidtianjia_manager()//经理数据添加
{
while
(1)
{
ofstreamofs("d:
\\file1.txt",ios:
:
app);
managerma;
chargra,ch;
cout<<"请根据提示依次输入该经理的姓名,性别,部门,并按下回车确认完成输入:
"<cin>>ma;
ma.get();
gra='A';
ofs.write((char*)&gra,sizeof(char));
ofs.write((char*)&ma,sizeof(manager));
ofs.close();
cout<<"是否还要添加数据:
?
YORN:
\n";
cin>>ch;
if(ch=='Y')
continue;
else
cout<<"添加成功!
"<system("pause");
break;
}
}
classartisan:
publicemployee//技术人员类按小时领月薪
{
public:
voidget()
{
intper,hour;
cout<<"请输入工作时间,按回车键完成输入:
"<cin>>hour;
per=80;//每小时工资80
grade='B';
pay=per*hour;
number=getnumber();
}
};
voidtianjia_artisan()//技术人员数据添加
{
while
(1)
{
ofstreamofs("d:
\\file1.txt",ios:
:
app);
artisanar;
chargra,ch;
cout<<"请根据提示依次输入该技术人员的姓名,性别,部门,并按下回车确认完成输入:
"<cin>>ar;
ar.get();
gra='B';
ofs.write((char*)&gra,sizeof(char));
ofs.write((char*)&ar,sizeof(artisan));
ofs.close();
cout<<"是否还要添加数据:
?
YORN:
\n";
cin>>ch;
if(ch=='Y')
continue;
else
cout<<"添加成功!
"<system("pause");
break;
}
}
classsalesman:
virtualpublicemployee//销售人员类当月销售提成
{
public:
voidget()
{
intscore;
cout<<"请输入员工当月销售额,按回车键完成输入:
";
cin>>score;
grade='C';
pay=0.33*score;
number=getnumber();
}
};
voidtianjia_salesman()//销售人员数据添加
{
while
(1)
{
ofstreamofs("d:
\\file1.txt",ios:
:
app);
salesmansa;
chargra,ch;
cout<<"请根据提示依次输入该销售人员的姓名,性别,部门,并按下回车确认完成输入:
"<cin>>sa;
sa.get();
gra='C';
ofs.write((char*)&gra,sizeof(char));
ofs.write((char*)&sa,sizeof(salesman));
ofs.close();
cout<<"是否还要添加数据:
?
YORN:
\n";
cin>>ch;
if(ch=='Y')
continue;
else
cout<<"添加成功!
"<system("pause");
break;
}
}
classsales_manager:
publicmanager,publicsalesman//销售经理类当月销售提成+固定工资
{
public:
voidget()
{
intscore;
cout<<"请输入员工当月销售额,按回车键完成输入:
";
cin>>score;
grade='D';
pay=0.33*score+5000;
number=getnumber();
}
};
voidtianjia_sales_manager()//销售经理数据添加
{
while
(1)
{
ofstreamofs("d:
\\file1.txt",ios:
:
app);
sales_managersam;
chargra,ch;
cout<<"请根据提示依次输入该销售经理的姓名,性别,部门,并按下回车确认完成输入:
"<cin>>sam;
sam.get();
gra='D';
ofs.write((char*)&gra,sizeof(char));
ofs.write((char*)&sam,sizeof(sales_manager));
ofs.close();
cout<<"是否还要添加数据:
?
YORN:
\n";
cin>>ch;
if(ch=='Y')
continue;
else
cout<<"添加成功!
"<system("pause");
break;
}
}
intgetnumber()
{
ifstreamifs("d:
\\file1.txt");
chargra;
intn,max=0;
ifs.read((char*)&gra,1);
while(!
ifs.eof())
{
if(gra=='A')
{
managerma;
ifs.read((char*)&ma,sizeof(manager));
n=ma.number;
}
elseif(gra=='B')
{
artisanar;
ifs.read((char*)&ar,sizeof(artisan));
n=ar.number;
}
elseif(gra=='C')
{
salesmansa;
ifs.read((char*)&sa,sizeof(salesman));
n=sa.number;}
elseif(gra=='D')
{
sales_managersam;
ifs.read((char*)&sam,sizeof(sales_manager));
n=sam.number;
}
if(maxifs.read((char*)&gra,1);
}
ifs.close();
returnmax+1;
}
voidtianjia()//添加功能函数定义
{
system("cls");
cout<<"\t\t--------------------------------------------------------"<cout<<"\t\t|-----------------小型公司工资管理系统-----------------|"<cout<<"\t\t|--------------------1.经理数据添加--------------------|"<cout<<"\t\t|--------------------2.技术人员添加--------------------|"<cout<<"\t\t|--------------------3.销售人员添加--------------------|"<cout<<"\t\t|--------------------4.销售经理添加--------------------|"<cout<<"\t\t|--------------------5.返回上一层----------------------|"<cout<<"\t\t--------------------------------------------------------"<cout<<"请输入1-5选择相应添加:
";
intse;
cin>>se;
switch(se)
{
case1:
tianjia_manager();break;
case2:
tianjia_artisan();break;
case3:
tianjia_salesman();break;
case4:
tianjia_sales_manager();break;
case5:
return;
}
}
voidchaxun_number()
{
intnu;
cout<<"请输入编号:
"<cin>>nu;
ifstreamifs("d:
\\file1.txt");
if(!
ifs)
{
cout<<"文件打开失败!
";
system("pause");
return;
}
chargra;
intflag=0;
ifs.read((char*)&gra,1);
while(!
ifs.eof())
{
if(gra=='A')
{
managerma;
ifs.read((char*)&ma,sizeof(manager));
if(ma.number==nu)
{
cout<<"编号"<<'\t'<<"姓名"<<'\t'<<"性别"<<'\t'<<"部门"<<'\t'<<"级别"<<'\t'<<"工资"<cout<flag=1;
}
}
elseif(gra=='B')
{
artisanar;
ifs.read((char*)&ar,sizeof(artisan));
if(ar.number==nu)
{
cout<<"编号"<<'\t'<<"姓名"<<'\t'<<"性别"<<'\t'<<"部门"<<'\t'<<"级别"<<'\t'<<"工资"<cout<flag=1;
}
}
elseif(gra=='C')
{
salesmansa;
ifs.read((char*)&sa,sizeof(salesman));
if(sa.number==nu)
{
cout<<"编号"<<'\t'<<"姓名"<<'\t'<<"性别"<<'\t'<<"部门"<<'\t'<<"级别"<<'\t'<<"工资"<cout<flag=1;
}
}
elseif(gra=='D')
{
sales_managersam;
ifs.read((char*)&sam,sizeof(sales_manager));
if(sam.number==nu)
{
cout<<"编号"<<'\t'<<"姓名"<<'\t'<<"性别"<<'\t'<<"部门"<<'\t'<<"级别"<<'\t'<<"工资"<cout<flag=1;
}
}
ifs.read((char*)&gra,1);
}
if(!
flag)
cout<<"没有找