VC++课程设计报告.docx
《VC++课程设计报告.docx》由会员分享,可在线阅读,更多相关《VC++课程设计报告.docx(21页珍藏版)》请在冰豆网上搜索。
![VC++课程设计报告.docx](https://file1.bdocx.com/fileroot1/2023-2/2/e18bf716-ae6c-44ce-b421-cfe49efefa90/e18bf716-ae6c-44ce-b421-cfe49efefa901.gif)
VC++课程设计报告
课程设计报告
学院、系:
专业名称:
计算机科学与技术
课程设计科目
VC++程序课程设计
学生姓名:
指导教师:
完成时间:
2013年12月
题目小型公司工资管理系统
一、设计任务与目标
1.完成对于冒泡排序的程序掌握,C++基本输入输出流和其他基本语句、函数等完全掌握;
2.C++的数据读写入文本当中的函数应用;
3.类的继承要熟练掌握。
4.小型公司工资管理系统题目要求:
(1)公司主要有4类人员:
经理、技术员、销售员、销售经理。
要求存储这些人的职工号、姓名、月工资、岗位、年龄、性别等信息。
(2)工资的计算方法:
A.经理:
固定月薪为8000;
B.技术员:
工作时间*小时工资(100元每小时);
C.销售员:
销售额*4%提成;
D.销售经理:
底薪(5000)+所辖部门销售额总额*0.5%;
(3)输入数据要求每类人员不能少于4人,并按以下格式输出:
职工号姓名性别年龄岗位工资排名
(4)菜单要求:
要有一个菜单,用于选择各项功能,其中
1)数据录入:
输入各种数据;
2)数据统计:
各销售经理的工资计算及最终按工资进行的冒泡排序;
3)数据打印:
打印上述表格;
4)数据备份:
把相关数据写入文件;
5)退出:
退出本系统;
二、方案设计与论证
1.先定义了一个雇员类Employee,由雇员类公有派生出技术员类Technician,销售员类Salesman,经理类Manager。
2.由销售员类Salesman,经理类Manager公有派生出销售经理类Salesmanager。
通过基类去写的派生类就可以调基类的公有成员。
3.利用for循环把经理数据,技术员数据,销售员数据,销售经理数据输入。
4.利用冒泡排序法,建立一个“擂台”,用“擂台”上的数的前一个数与之比较,小的那个数放到最后,把各销售经理的工资按升序排列。
5.利用switch进行选择系统进行的工作。
在主菜单中进行调用各函数,从而实现系统各功能的运行。
三、程序框图或流程图,程序清单与调用关系
四、全部源程序清单
//main.cpp
#include
#include
#include//存放数据的头文件
#include//调整距离
#include"Employee.h"
#include"Manager.h"
#include"Salesman.h"
#include"Salesmanager.h"
#include"Technician.h"
usingnamespacestd;
voidMIF()
{
cout<<" 输入:
1 "<cout<<"技术人员输入4个,经理4个,销售人员8个,销售经理4个"<cout<<" 统计:
2 "<cout<<" 打印:
3 "<cout<<" 备份:
4 "<cout<<" 退出:
5 "<}
intmain()
{
inti,j;
MIF();
Techniciant[4];
Managerm[4];
Salesmans[8];
Salesmanagersm[4];
cin>>j;
while(j==1||j==2||j==3||j==4||j==5)//选择步骤1或2或3或4或5
{
switch(j)
{
case1:
{
for(i=0;i<4;i++)//重复输入4个技术人员
t[i].display1();
for(i=0;i<4;i++)//4个经理
m[i].display2();
for(i=0;i<8;i++)//8个销售人员
s[i].display3();
for(i=0;i<4;i++)//4个销售经理,平均每人管理2个销售人员
sm[i].display4();
MIF();//输入完毕回到界面管理
cin>>j;//重新操作
}
doublemo[4],mone[4];//mo为销售人员薪酬,mone为销售经理薪酬
intx;break;
case2:
{
for(i=0;i<4;i++)//重复显示4个销售经理及其下销售人员
{
cout<<"职工号为"<"<cout<<"职工号姓名销售额"<doublemoney=0;
for(x=0;x<8;x++)//8个销售人员
{
if(s[x].numb()==sm[i].n())//1号销售人员属于201号销售经理
{
money=money+s[x].sa();//销售额+销售业绩
mone[i]=money*0.005+5000;//销售经理薪酬
mo[i]=money*0.005+5000;//销售人员薪酬
cout<<""<}
}
cout<<"销售额总计"<}
cout<<"销售经理按工资排序为"<doublemon;//销售经理薪酬
for(i=0;i<3;i++)//冒泡
for(x=0;x<3-i;x++)//4个,递减排序
if(mo[x]前一个
{
mon=mo[x];mo[x]=mo[x+1];mo[x+1]=mon;
}//利用中间变量,交换变量,改变2个变量间的大小排序
cout<<"职工号姓名性别年龄工资"<for(intk=0;k<4;k++)
for(inty=0;y<4;y++)
if(mone[y]==mo[k])
{
cout<<""<}//ID,姓名,性别,年龄,薪酬
MIF();
cin>>j;break;
}
case3:
{
cout<<"职工基本情况一览表如下"<cout<<"技术员"<cout<<" 职工号 姓名 性别 年龄 工资 "<for(x=0;x<4;x++)//把4个技术员输出
{
cout<<""<}
cout<<"经理"<cout<<" 职工号 姓名 性别 年龄 工资 "<for(x=0;x<4;x++)
{
cout<<""<}
cout<<"销售经理"<cout<<" 职工号 姓名 性别 年龄 工资 "<for(x=0;x<4;x++)
{
cout<<""<}
cout<<"销售员"<cout<<" 职工号 姓名 性别 年龄 工资 "<for(x=0;x<8;x++)
{
cout<<""<}
}
MIF();
cin>>j;break;
case4:
{
ofstreamoutfile("beifen.txt",ios:
:
out);//创建文件
if(!
outfile)//不成功显示error提示
{
cerr<<"openerror!
"<exit
(1);
}
outfile<<"职工基本情况一览表如下:
"<outfile<<"技术员的资料统计"<for(i=0;i<4;i++)//t——>Technician
{
outfile<<"职工号:
"<"<"<"<"<"<}
outfile<<"经理的资料统计"<for(i=0;i<4;i++)//m——>Manager
{
outfile<<"职工号:
"<"<"<"<"<}
outfile<<"销售员的资料统计"<for(i=0;i<8;i++)//s——Salesman
{
outfile<<"职工号:
"<
"<
"<
"<
"<
"<
"<
}
outfile<<"销售经理的资料统计"<for(i=0;i<4;i++)//sm——>Salesmanager
{
outfile<<"职工号:
"<"<"<"<"<}
outfile.close();//输入完毕,关闭文件
cout<MIF();//回到界面
cin>>j;break;//重新操作
}
case5:
{
cout<<"是否确定退出系统:
是1;否0:
"<intz;
cin>>z;
if(z==1)
exit(0);
if(z==0)
{
MIF();
cin>>j;
}
}
default:
cout<<"输入有误,请重新输入:
"<>j;break;
}
}
return0;
}
//Employee.h
#include
#include
#include
#include
usingnamespacestd;
classEmployee
{
public:
Employee();
virtual~Employee();
protected:
intnum,age;
doublewages;
charsex;
stringname;
public:
intn();//ID
stringna();//姓名
chars();//性别
inta();//年龄
};
//Employee.cpp
#include
#include
#include
#include
usingnamespacestd;
Employee:
:
Employee()
{}
Employee:
:
~Employee()
{}
intEmployee:
:
n()
{returnnum;}
stringEmployee:
:
na()
{returnname;}
charEmployee:
:
s()
{returnsex;}
intEmployee:
:
a()
{returnage;}
//Manager.h
#include
#include
#include
#include
#include"Employee.h"
usingnamespacestd;
classManager:
publicEmployee
{
public:
Manager();
virtual~Manager();
public:
voiddisplay2()
{
cout<<"经理的编号:
";cin>>num;
cout<<"其姓名:
";cin>>name;
cout<<"性别(m/w):
";cin>>sex;
cout<<"年龄:
";cin>>age;
}
doublew()
{
wages=8000;//固定工资8000
returnwages;
}
};
//Manager.cpp
Manager:
:
Manager()
{}
Manager:
:
~Manager()
{}
//Salesman.h
#include"Employee.h"
#include
#include
#include
#include
usingnamespacestd;
classSalesman:
publicEmployee
{
public:
Salesman();
virtual~Salesman();
protected:
intnumber;
doublesales_volume;
public:
voiddisplay3()
{
cout<<"销售员的编号:
";cin>>num;
cout<<"其姓名:
";cin>>name;
cout<<"性别(m/w):
";cin>>sex;
cout<<"年龄:
";cin>>age;
cout<<"销售额:
";cin>>sales_volume;
cout<<"所属销售经理的编号:
";cin>>number;
}
intnumb()
{returnnumber;}
doublesa()
{returnsales_volume;}
doublew()
{returnsales_volume*0.04;}
};
//Salesman.cpp
Salesman:
:
Salesman()
{}
Salesman:
:
~Salesman()
{}
//Salesmanager.h
#include"Manager.h"
#include
#include
#include
#include
usingnamespacestd;
classSalesmanager:
publicManager
{
public:
Salesmanager();
virtual~Salesmanager();
voiddisplay4()
{
cout<<"销售经理的编号:
";cin>>num;
cout<<"其姓名:
";cin>>name;
cout<<"性别(m/w):
";cin>>sex;
cout<<"年龄:
";cin>>age;
}
};
//Salesmanager.cpp
Salesmanager:
:
Salesmanager()
{}
Salesmanager:
:
~Salesmanager()
{}
//Technician.h
#include
#include
#include
#include
#include"Employee.h"
usingnamespacestd;
classTechnician:
publicEmployee
{
public:
Technician();
virtual~Technician();
protected:
inthour;
public:
voiddisplay1()
{
cout<<"技术员的编号:
";cin>>num;
cout<<"其姓名:
";cin>>name;
cout<<"性别(m/w):
";cin>>sex;
cout<<"年龄:
";cin>>age;
cout<<"工作时间:
";cin>>hour;
}
doublew();
intti();
};
//Technician.cpp
#include
#include
#include
#include
usingnamespacestd;
Technician:
:
Technician()
{}
Technician:
:
~Technician()
{}
doubleTechnician:
:
w()
{
doublewa;
wa=100*hour;
returnwa;
}
intTechnician:
:
ti()
{returnhour;}
五、程序运行的测试与分析
六、结论与心得
1.对于问题,一开始分析问题的时候并没有十分认真审题,直接把录入、统计、备份功能作为类分析,但实际上题目要求的是将员工职业用类区别;
2.C++中关于冒泡排序中并不一定需要程序员本身去编码,C++中本身有一个自带的快速排序的函数qsort(),其原理利用了折半查找的原理,但在尝试使用该函数时,总会出错,期望今后能够掌握该函数的应用;
3.关于数据写入文件,做的时候习惯了C语言的文本读写应用,后查询,C++文本读写有所不同,并且更为方便快捷;
4.程序中并没有能实现在录入一个数据后能自动返回到操作界面,只能把所有数据一次过录入完毕后,才能自动返回操作界面,而且录入时候,程序容错性不大好,容易出现bug,期望今后能更加改进。
七、参考资料
1.《面向对象程序设计VisualC++》刘斌王忠编著,清华大学出版社;
2.《c++语言程序设计教程(本科)》吕凤翥 编著,人民邮电出版社;
3.《算法与数据结构C语言版第二版》陈守孔孟佳娜武秀川等编著,机械工业出版社;
八、致谢
感谢刘斌、王忠、吕凤翥、陈守孔等作者及其编著书籍,以及XX;
课程设计成绩评定表
对课程设计工作过程的简短介绍和自我评价
经过努力查询和编码,最终完成了程序的基本功能实现。
其中不断有大量问题伴随着工作而产生,巨量的问题让我从中体会到自己对于C++语言的不熟练和学习到的东西并没有掌握,通过互联网和图书馆中的资料反复查找,以及同学间的学习交流得到自己所要的知识后,重复练习使用,在程序中能简单应用。
自身在工作过程中作用最大,感觉已尽力完成任务要求。
学生签名:
2013年12月26日
(以下由评定小组教师填写)
质量评价指标(在相应栏目打√)
评价项目
评价质量
优秀
良好
一般
及格
不及格
工作量和态度
实验、计算可靠性
文字和图表质量
总体评价
评定成绩(百分制)
评定小组成员签名
2013年月日
制定人:
审定人: