一、需求分析
1.从要求上来看是要对各个员工的各种情况(名字、年龄、性别、职位、工资状况)进行输
入。然后可以输出.
2.可以对于员工数据进行修改,可以查询.
3.对于员工的各种情况系统还可以进行统计排名.
二、概要设计
首先,创建了一个employee类.然后派生出四个类:manager、technician、salesman、sales manager.在派生类中定义了三个构造函数,分别是:数据输入函数(Input),表格输出函数(Print),排序函数(Pay).
其次,在总体结构上,建立以各根菜单,用于选择各种功能.
1.Input(数据输入):输入员工的各种数据.
2.Total(数据统计):将员工的总数据进行对比排序,然后输出.
3.Output(数据显示):显示输入的各种数据.
4.Save(数据保存):对输入的数据进行保存备份.
5.Eixt(退出程序):执行退出程序命令.
三、详细设计
1.Input(数据输入):定义了各个岗位的人员的类,并把每个类的人员的属性设为类中
的保护成员,其中技术工的工作时间和每小时的所得为私有成员,而销售员的销售额、经理的工资和销售经理的所辖部门的销售额和其底薪设为公有成员,再依次录入。
2.Total(数据统计): 根据所有类的工资算法在其所属类中定义一个函数void pay()来
根据各个职位的具体情况来计算工资,并且算出的工资经过冒泡法排序.
void printtotal()
{
cout<<"├─────┴──┬──┴─────┤"< cout<<"│Total │"< cout<<"└────────┴────────┘"< } 3.Output(数据显示): 通过do-while循环以及制表格和setw的使用将输入的数据和统计并 排序的数据以表格的形式打印出来,销售额合计一栏宽度要大些。 void saleprint() { cout<<"│"< cout<<"├─────┼─────┼─────┤"< cout<<"│"< cout<<"├─────┼─────┼─────┤"< cout<<"│"< cout<<"├─────┼─────┼─────┤"< cout<<"│"< } void print() { cout<<"├─────┼─────┼─────┼─────┼─────┤"< cout<<"│"< < } 4.Save(数据保存):通过函数save()来将输入的数据和统计并排序的数据进行保存. 例如: void save() { fstream outfile; outfile.open("f:flsdfj.txt",ios::app); if(!outfile) { cout<<"f can't open.\n"; abort(); } outfile<<"Sales manger"< outfile<<"ID"< } 5.Eixt(退出):利用exit来完成退出系统功能。 四、设计和调试分析 程序清单: #include #include #include #include #include class employee { public: employee() { salary=0; } void pay(){} void print(){} void input() { cout<<"ID:"; cin>>no; cout<<" NAME:"; cin>>name; cout<<" SEX(m/w):"; cin>>sex; cout<<" AGE:"; cin>>age; } protected: int no; char name[8]; float salary; char sex; int age; }; class manager:virtual public employee { protected: float monthlypay,sale; public: manager(){monthlypay=8000;} void input(){cout<<"Manger";employee::input();} void save() { fstream outfile; outfile.open("f:flsdfj.txt",ios::app); if(!outfile) { cout<<"f can't open.\n"; abort(); } outfile<<"Manger"< outfile<<"ID"< } void pay(){salary=monthlypay;} void print() { cout<<"├─────┼─────┼─────┼─────┼─────┤"< cout<<"│"< } }; class technician:virtual public employee { private: float hourlyrate; int workhours; public: technician(){hourlyrate=100;} void pay() { cout< cin>>workhours; salary=hourlyrate*workhours; } void input(){cout<<"TECHNICIAN"< void save() { fstream outfile; outfile.open("f:flsdfj.txt",ios::app); if(!outfile) { cout<<"f can't open.\n"; abort(); } outfile<<"TECHNICIAN"< outfile<<"ID"< } void print() { cout<<"├─────┼─────┼─────┼─────┼─────┤"< cout<<"│"< } }; class salesman:virtual public employee { protected: float commrate; float sales; public: salesman(){commrate=0.04;} void input(){cout<<"SALEMAN";employee::input();} void save() { fstream outfile; outfile.open("f:flsdfj.txt",ios::app); if(!outfile) { cout<<"f can't open.\n"; abort(); } outfile<<"TECHNICIAN"< outfile<<"ID"< } void pay() { cout< cin>>sales; salary=sales*commrate; } void print() { cout<<"├─────┼─────┼─────┼─────┼─────┤"< cout<<"│"< < } }; class salesmanager:virtual public manager,virtual public salesman { private: float total;int no1,no2,no3,no4;char name1[8],name2[8],name3[8],name4[8]; float sale1,sale2,sale3,sale4; public: void salemanager() { monthlypay=5000; commrate=0.005; } void input(){cout<<"Sales manger";employee::input();} void save() { fstream outfile; outfile.open("f:flsdfj.txt",ios::app); if(!outfile) { cout<<"f can't open.\n"; abort(); } outfile<<"Sales manger"< outfile<<"ID"< } void savesale() { fstream outfile; outfile.open("f:flsdfj.txt",ios::app); if(!outfile) { cout<<"f can't open.\n"; abort(); } outfile<<"The salary of saleman of sales manger and themselves"< outfile<<"ID"< outfile<<"ID"< outfile<<"ID"< outfile<<"ID"< } void pay() { cout< salary=monthlypay+commrate*total; } float totalsale(){total=sale1+sale2+sale3+sale4;return total;} void printtotal() { cout<<"├─────┴──┬──┴─────┤"< cout<<"│Total │ "< cout<<"└────────┴────────┘"< } void sort(salesmanager p) { int tmp,i,j; for(j=0;j<2;j++) for(i=0;i<2;i++) if(total { tmp=salary; total=p.salary; p.salary=tmp; tmp=no; no=p.no; p.no=tmp; } } void saler() { cout<<"Staff ID:"; cin>>no1; cout<<" Staff NAME:"; cin>>name1; cout<<" Sales volume:"; cin>>sale1; cout<<"Staff ID:"; cin>>no2; cout<<" Staff NAME:"; cin>>name2; cout<<" Sales volume:"; cin>>sale2; cout<<"Staff ID:"; cin>>no3; cout<<" Staff NAME:"; cin>>name3; cout<<" Sales volume:"; cin>>sale3; cout<<"Staff ID:"; cin>>no4; cout<<" Staff NAME:"; cin>>name4; cout<<" Sales volume:"; cin>>sale4; } void saleprint() { cout<<"│"< cout<<"├─────┼─────┼─────┤"< cout<<"│"< cout<<"├─────┼─────┼─────┤"< cout<<"│"< cout<<"├─────┼─────┼─────┤"< cout<<"│"< } void print() { cout<<"├─────┼─────┼─────┼─────┼─────┤"< cout<<"│"< < } }; void main() { manager m[4]; technician t[4]; salesman s[4]; salesmanager sm[4]; t[1].save(); int flag=1,operate; do{ cout<<" #### The system of salary manger ####\n"; cout<<" ┌─────────────┐\n"; cout<<" │ Chose your actions │\n"; cout<<" │ Input:1,Enter │\n"; cout<<" │ Total:2,Enter │\n"; cout<<" │ Output:3,Enter │\n"; cout<<" │ Save:4,Enter │\n"; cout<<" │ Exit:5,Enter │\n"; cout<<" └─────────────┘\n"; cout<<" Please chose one action: "; cin>>operate; switch(operate) { case 1: cout<<"Waiting for a minute!"< { for(int i=0;i<4;i++) {m[i].input();} for(int j=0;j<4;j++) {t[j].input();} for(int k=0;k<4;k++) {s[k].input();} for(int l=0;l<4;l++) {sm[l].input();} }; { for(int i=0;i<4;i++) {m[i].pay();} for(int j=0;j<4;j++) {t[j].pay();} for(int k=0;k<4;k++) {s[k].pay();} for(int l=0;l<4;l++) {sm[l].pay();sm[l].saler();} };break; case 2: cout<<"Waiting for a minute!"< { { for(int l=0;l<4;l++) sm[l].totalsale(); for(int i=0;i<4;i++) for(int j=0;j<2;j++) sm[j].sort(sm[j+1]); }; cout<<"The saleman of the first sales manger"< cout<<"┌─────┬─────┬─────┐"< cout<<"│ID │ NAME │ SALARY │"< sm[0].saleprint(); sm[0].printtotal(); cout<<" The order is complete"< cout<<"List names of every sales manger"< cout<<"┌─────┬─────┬─────┬─────┬─────┐"< cout<<"│ID │ NAME │SEX │AGE │ SALARY │"< for(int k=0;k<4;k++) sm[k].print(); cout<<"└─────┴─────┴─────┴─────┴─────┘"< };break; case 3: cout<<"Waiting for a minute!"< { cout<<" The blank of the :"< cout<<"┌─────┬─────┬─────┬─────┬─────┐"< cout<<"│ID │ NAME │SEX │AGE │ SALARY │"< for(int i=0;i<4;i++) {m[i].print();} cout<<"└─────┴─────┴─────┴─────┴─────┘"< cout<<"┌─────┬─────┬─────┬─────┬─────┐"< cout<<"└─────┴─────┴─────┴─────┴─────┘"< cout<<"┌─────┬─────┬─────┬─────┬─────┐"< cout<<"│ID │ NAME │SEX │AGE │ SALARY │"< for(int k=0;k<4;k++) {s[k].print();} cout<<"└─────┴─────┴─────┴─────┴─────┘"< cout<<"┌─────┬─────┬─────┬─────┬─────┐"< cout<<"└─────┴─────┴─────┴─────┴─────┘"< };break; case 4: cout<<"Waiting for a minute!"< { for(int i=0;i<4;i++) {m[i].save();} for(int j=0;j<4;j++) {t[j].save();} for(int k=0;k<4;k++) {s[k].save();} for(int l=0;l<4;l++) {sm[l].save();} };cout<<" Information save! "< case 5:exit(0);break; default:cout<<"Error!Repeat again!"< } }while(flag=1); } } 五、用户手册 1)运行程序.会出现如下画面,按照提示进行选择. 2)首先选择1,然后按Enter键.按照提示对员工个人情况进行输入.如图: 3)然后选择4,然后按Enter键.对刚才输入的数据进行保存. 4)选择2, 然后按Enter键.对数据进行统计.如图: 六、测试结果 对各个部分功能进行测试后,各部分功能都很好.但是此程序也有的它的缺点在.那就是它不能按照个人的意愿,职能按照固定的人数对数据进行输入,既不能多也不能少.很麻烦.一但格式输入的不正确会立即进入死循环.不理想. 本程序综合性非常强,由于我们对使用C++设计程序的能力还不是很熟练,所以在设计时非常吃力。在整个程序中,我们通过使用while循环,switch语句,冒泡排序法,表格设计中的setw()以及类的定义及使用来完成程序设计,使我提高了对C++中语句的使用能力和组合能力,进一步加强了我对使用C++编程的能力。 通过此次程序设计实习,我发现自己在学习C++方面还有很多不足,在此程序中可能还有一些不足和错误,我们将在以后的学习过程中不断努力并强化对C++的练习 七、参考文献 [1]苏金明,周建斌.用https://www.doczj.com/doc/c96362603.html,和VC#.NET开发交互式CAD系统[M]. 北京:电子工业出版社,2004 [2]普悠玛https://www.doczj.com/doc/c96362603.html,程序设计示例导学[M]. 北京:科海电子出版社,2003