小型公司工资管理系统
- 格式:doc
- 大小:309.50 KB
- 文档页数:20
信息与控制工程学院《程序设计实习》报告小型公司工资管理系统的设计专业班级:自动化10-4班学号:姓名:asdf时间:2011.7.14~2011.7.172011年7月16日目录一、实习内容 (1)1.1、课程设计的目的 (1)1.2、设计题目及要求 (1)二、设计思路 (2)三、程序清单 (3)3.1、程序源代码 (4)四、运行结果 (14)4.1、程序运行 (14)4.2、备份文本信息 (16)五、程序使用说明 (17)六、总结及心得体会 (17)一:实习内容1.1、课程设计的目的此次课程设计的目的是以《程序设计语言(C/C++)》为基础,针对具有一定难度的综合性题目,进行分析、编程、调试和运行,进一步掌握面向对象和面向过程程序设计的基本方法和编程技巧,巩固所学理论知识,使理论与实践相结合,提高分析问题、解决问题的能力。
通过设计一个简单的《小型公司工资管理系统》,进一步熟悉C++中类的概念、类的封装、继承和多态的实现方式。
了解系统开发的需要分析,类层次设计,模块分析,编码测试,模块组装与整体调试的全过程,逐步熟悉程序设计的方法,并养成良好的编程习惯。
1.2、设计题目及要求1 题目:《小型公司工资关系系统》设计2 设计说明与要求(1)公司主要有4类人员:经理、技术员、销售员、销售经理。
要求储存这些人的职工号姓名、月工资、年龄、性别等信息。
(2)工资的计算方法A、经理:固定月薪为8000元;B、技术员:工作时间×小时工资(100元每小时);C、销售员:销售额×4%提成;D、销售经理:底薪(5000元)+所辖部门销售额总额×0.5%;(3)类的层次结构大体如下:(4)输入员工基本数据,要求每类人员不能少于4人,员工信息输出格式参考运行效果。
(5)实现功能应用程序中要有菜单,用于选择各种功能,其中①数据输入:输入各种数据;②数据统计:统计各种销售经理下属销售员的销售额及限售额之和;销售经理按工资进行的冒泡排序;③数据打印:打印各类员工的数据信息;④数据备份:把各类员工的数据星系写入文件中保存;⑤推出本系统;(6)菜单说明①数据录入指通过键盘输入各类员工的各项数据;②数据统计指统计各销售经理下属销售员的销售额及销售额之和;销售经理按工资进行冒泡法排序;③数据打印指按照表格的格式在屏幕上输出个员工的信息;④数据备份指将所有员工的信息保存到文件;⑤退出:结束程序的运行。
(7)注意一个销售经理管辖多个销售员。
(8)其他功能可以自己扩充(扩充的功能若比较合理可适当加分)。
(9)要求在控制台下完成(显示内容都在黑屏下显示)。
二、设计思路1、整体考虑程序应该实现的功能,有数据输入,数据统计,数据打印,数据备份和退出系统5个。
2、首先定义一个Employee的雇员基类,然后由此派生出Tech,Manager,Salesman三个分别为技术员类,经理类,销售员类;再由Manager派生出销售经理类Salesmanager。
每个类中的成员都是protected型的,所有的继承都是公有继承,基类中定义有数据输入函数。
3、主函数里定义了四个对象数组,Tech T[A];Manager M[B];Salesman S[C];Salesmanager SM[D],其中A/B/C/D都是全局常变量,代表各类成员人数,便于程序修改。
4、整个程序由主函数的一个for循环控制,根据输入的操作选项通过一个switch语句判断该进行什么操作,每一个case后面对应一个函数,每个函数对应一个操作,1对应数据输入,2对应数据统计,3对应数据打印,4对应数据备份,5对应退出系统。
5、数据统计、打印以及备份都以表格形式输出。
表格通过制表符进行设计。
表头表尾表中、菜单还有分隔符均单独定义成void 型的函数。
如:void tou(){cout<<"┌─────┬─────┬─────┬─────┬─────┐"<<endl; cout<<"│职工号│姓名│性别│年龄│工资│"<<endl;} 6、case 中调用四个带参的函数fun3(T,M,S,SM)、data_tongji(T,M,S,SM)、data_print(T,M,S,SM)、data_beifen(T,M,S,SM)。
四个函数均用了四个循环语句分别进行输入、统计、打印、备份。
如输入中的一个:for(i=0;i<A;i++){T[i].data_cin();cout<<endl;}data_cin()这类函数在各个类中定义,并且同名,这样能简化程序。
7、在进行销售经理的数据输出时,考虑其与销售员之间所属关系,定义若干全局数组double wage[D]单独存放销售经理的工资,排序时通过if语句先判断所属关系,再进行冒泡法排序,这是要用到双重循环。
8、考虑各种数据类型还有所需的C++内的函数,要引用<iostream> <string> <fstream> <iomanip>这四个头文件。
<fstream>用于数据备份,使用时,先用ofstream outfile;outfile.open("工资管理系统.txt",ios::out);打开磁盘流文件,并且对备份文件进行命名,同时确定存储位置。
<iomanip>用其setw()设置输出数据的宽度,便于表格的制作9、因为类中成员都是保护类型的,所以要定义属于各类的返回成员值的函数,如turn_belong()、turn_num()……10、整体构思比较简单,基本能够实现各项功能三、程序清单#include<iostream>#include<string>#include<fstream>#include<iomanip>using namespace std;void fun1();void fun2();void tou();void wei();void zhong();const int A=2,B=2,C=4,D=2;const int a=8000;const int b=5000;const double c=0.005;const int d=100;const double e=0.04;int n=0;int m[2]={0,0};int t[2];class Employee{public:void data_cin(){ cout<<"其姓名:";cin>>name;cout<<"性别(m/w):";cin>>sex;cout<<"年龄:";cin>>age;}int turn_num(){return num;}string turn_name(){return name;}char turn_sex(){return sex;}int turn_age(){return age;}protected:int num;string name;int age;char sex;int gz;};class Tech:public Employee{public:void data_cin(){cout<<"技术员的编号:";cin>>num;Employee::data_cin();cout<<"工作时间:";cin>>time;}int turn_gz1(){return d*time;}protected:int time;};class Salesman:public Employee {public:Salesman(){sales_money=0;}void data_cin(){cout<<"销售员的编号:";cin>>num;Employee::data_cin();cout<<"销售额:";cin>>sales_money;cout<<"所属销售经理的编号:";cin>>belong;gz=sales_money*e;}int turn_sales_money(){return sales_money;}int turn_belong(){return belong;}int turn_gz2(){return sales_money*e;}protected:int sales_money;int belong;};class Manager:public Employee{public:void data_cin(){cout<<"经理的编号:";cin>>num; Employee::data_cin();gz=a;}int turn_gz3(){return a;}};class Salesmanager:public Manager{public:int turn_num(){return num;}void data_cin(){cout<<"销售经理的编号:";cin>>num;Employee::data_cin();}};double wage[D];double SM_wage(Salesman S[],Salesmanager SM[]) {int i,j,k;double p;Salesmanager q;for(k=0;k<D;k++)wage[k]=0;for(i=0;i<D;i++){double sum=0;for(j=0;j<C;j++)if(SM[i].turn_num()==S[j].turn_belong()){sum+=S[j].turn_sales_money();wage[i]=sum*c+b;}}for(i=0;i<D-1;i++) //冒泡法for(j=0;j<D-1-i;j++)if(wage[j]<wage[j+1]){p=wage[j+1];wage[j+1]=wage[j];wage[j]=p;q=SM[j+1];SM[j+1]=SM[j];SM[j]=q;}return 0;}void fun1(){cout<<"----------------------------------------"<<endl;} void fun2(){cout<<" ★★小型公司工资管理系统★★"<<endl; cout<<"┌──────────────┐"<<endl; cout<<"│请选择您所需的操作│"<<endl; cout<<"│数据输入:1,并按回车键;│"<<endl;cout<<"│数据统计:2,并按回车键;│"<<endl;cout<<"│数据打印:3,并按回车键;│"<<endl;cout<<"│数据备份:4,并按回车键;│"<<endl;cout<<"│退出系统:5,并按回车键;│"<<endl;cout<<"└──────────────┘"<<endl;cout<<"请输入一个操作:";}void tou(){cout<<"┌─────┬─────┬─────┬─────┬─────┐"<<endl; cout<<"│职工号│姓名│性别│年龄│工资│"<<endl; }void zhong(){cout<<"├─────┼─────┼─────┼─────┼─────┤"<<endl; }void wei(){cout<<"└─────┴─────┴─────┴─────┴─────┘"<<endl; }void fun3(Tech T[],Manager M[],Salesman S[],Salesmanager SM[]){fun1();int i;for(i=0;i<A;i++){T[i].data_cin();cout<<endl;}fun1();for(i=0;i<B;i++){M[i].data_cin();cout<<endl;}fun1();for(i=0;i<C;i++){S[i].data_cin();cout<<endl;}fun1();for(i=0;i<D;i++){SM[i].data_cin();cout<<endl;}fun1();}void data_tongji(Tech T[],Manager M[],Salesman S[],Salesmanager SM[]){int i,j;for(i=0;i<D;i++){cout<<"职工号为"<<SM[i].turn_num()<<"销售经理"<<SM[i].turn_name()<<"下属销售员的业绩为:"<<endl;cout<<"┌──────┬──────┬──────┐"<<endl;cout<<"│职工号│姓名│销售额│"<<endl;for(j=0;j<C;j++)if(S[j].turn_belong()==SM[i].turn_num()){cout<<"├──────┼──────┼──────┤"<<endl;cout<<"│"<<setw(12)<<S[j].turn_num()<<"│"<<setw(12)<<S[j].turn_name()<<"│"<<setw(12)<<S[j].turn_sales_money()<<"│"<<endl;m[i]+=S[j].turn_sales_money();}cout<<"├──────┼──────┴──────┤"<<endl;cout<<"│销售额总计│"<<setw(20)<<m[i]<<" │"<<endl;cout<<"└──────┴─────────────┘"<<endl;}cout<<"销售经理排序为:"<<endl; tou();SM_wage(S,SM);for(i=0;i<D;i++){zhong();cout<<"│"<<setw(6)<<SM[i].turn_num()<<" │"<<setw(6)<<SM[i].turn_name()<<" │"<<setw(6)<<SM[i].turn_sex()<<" │"<<setw(6)<<SM[i].turn_age()<<" │"<<setw(6)<<wage[i]<<" │"<<endl;}wei();}void data_print(Tech T[],Manager M[],Salesman S[],Salesmanager SM[]){SM_wage(S,SM);int i;cout<<"请稍等……"<<endl;cout<<"职工基本情况一览表如下:"<<endl;cout<<"技术员"<<endl;tou();for(i=0;i<A;i++){zhong();cout<<"│"<<setw(6)<<T[i].turn_num()<<" │"<<setw(6)<<T[i].turn_name()<<" │"<<setw(6)<<T[i].turn_sex()<<" │"<<setw(6)<<T[i].turn_age()<<" │"<<setw(6)<<T[i].turn_gz1()<<" │"<<endl;}wei();fun1();cout<<"经理"<<endl;tou();for(i=0;i<B;i++){zhong();cout<<"│"<<setw(6)<<M[i].turn_num()<<" │"<<setw(6)<<M[i].turn_name()<<" │"<<setw(6)<<M[i].turn_sex()<<" │"<<setw(6)<<M[i].turn_age()<<" │"<<setw(6)<<M[i].turn_gz3()<<" │"<<endl;}wei();fun1();cout<<"销售经理"<<endl;tou();for(i=0;i<D;i++){zhong();cout<<"│"<<setw(6)<<SM[i].turn_num()<<" │"<<setw(6)<<SM[i].turn_name()<<" │"<<setw(6)<<SM[i].turn_sex()<<" │"<<setw(6)<<SM[i].turn_age()<<" │"<<setw(6)<<wage[i]<<" │"<<endl;}wei();fun1();cout<<"销售员"<<endl;cout<<"┌────┬────┬────┬────┬────┬────────┐"<<endl;cout<<"│职工号│姓名│性别│年龄│工资│所属部门经理编号│"<<endl;for(i=0;i<C;i++){cout<<"├────┼────┼────┼────┼────┼────────┤"<<endl;cout<<"│"<<setw(6)<<S[i].turn_num()<<" │"<<setw(6)<<S[i].turn_name()<<" │"<<setw(6)<<S[i].turn_sex()<<" │"<<setw(6)<<S[i].turn_age()<<" │"<<setw(6)<<S[i].turn_gz2()<<" │"<<setw(10)<<S[i].turn_belong()<<" │"<<endl;}cout<<"└────┴────┴────┴────┴────┴────────┘"<<endl;fun1();}void data_beifen(Tech T[],Manager M[],Salesman S[],Salesmanager SM[]){SM_wage(S,SM); int i;cout<<"数据备份中,请稍等……"<<endl;cout<<endl<<"数据备份完成!"<<endl;ofstream outfile;outfile.open("工资管理系统.txt",ios::out);outfile<<"职工基本情况一览表如下:"<<'\n'<<endl;outfile<<"技术员"<<endl;outfile<<"┌─────┬─────┬─────┬─────┬─────┐"<<endl; outfile<<"│职工号│姓名│性别│年龄│工资│"<<endl; for(i=0;i<A;i++){outfile<<"├─────┼─────┼─────┼─────┼─────┤"<<endl; outfile<<"│"<<setw(6)<<T[i].turn_num()<<" │"<<setw(6)<<T[i].turn_name()<<" │"<<setw(6)<<T[i].turn_sex()<<" │"<<setw(6)<<T[i].turn_age()<<" │"<<setw(6)<<T[i].turn_gz1()<<" │"<<endl;}outfile<<"└─────┴─────┴─────┴─────┴─────┘"<<endl; outfile<<"-------------------------------------------------------"<<endl;outfile<<"经理"<<endl;outfile<<"┌─────┬─────┬─────┬─────┬─────┐"<<endl;outfile<<"│职工号│姓名│性别│年龄│工资│"<<endl; for(i=0;i<B;i++){outfile<<"├─────┼─────┼─────┼─────┼─────┤"<<endl; outfile<<"│"<<setw(6)<<M[i].turn_num()<<" │"<<setw(6)<<M[i].turn_name()<<" │"<<setw(6)<<M[i].turn_sex()<<" │"<<setw(6)<<M[i].turn_age()<<" │"<<setw(6)<<M[i].turn_gz3()<<" │"<<endl;}outfile<<"└─────┴─────┴─────┴─────┴─────┘"<<endl; outfile<<"-------------------------------------------------------"<<endl;outfile<<"销售经理"<<endl;outfile<<"┌─────┬─────┬─────┬─────┬─────┐"<<endl; outfile<<"│职工号│姓名│性别│年龄│工资│"<<endl; for(i=0;i<D;i++){outfile<<"├─────┼─────┼─────┼─────┼─────┤"<<endl; outfile<<"│"<<setw(6)<<SM[i].turn_num()<<" │"<<setw(6)<<SM[i].turn_name()<<" │"<<setw(6)<<SM[i].turn_sex()<<" │"<<setw(6)<<SM[i].turn_age()<<" │"<<setw(6)<<wage[i]<<" │"<<endl;}outfile<<"└─────┴─────┴─────┴─────┴─────┘"<<endl; outfile<<"-------------------------------------------------------"<<endl;outfile<<"销售员"<<endl;outfile<<"┌────┬────┬────┬────┬────┬────────┐"<<endl;outfile<<"│职工号│姓名│性别│年龄│工资│所属部门经理编号│"<<endl;for(i=0;i<C;i++){outfile<<"├────┼────┼────┼────┼────┼────────┤"<<endl;outfile<<"│"<<setw(6)<<S[i].turn_num()<<" │"<<setw(6)<<S[i].turn_name()<<" │"<<setw(6)<<S[i].turn_sex()<<" │"<<setw(6)<<S[i].turn_age()<<" │"<<setw(6)<<S[i].turn_gz2()<<" │"<<setw(10)<<S[i].turn_belong()<<" │"<<endl;} outfile<<"└────┴────┴────┴────┴────┴────────┘"<<endl;outfile<<"-------------------------------------------------------"<<endl;}int main(){void display(Tech T[],Manager M[],Salesman S[],Salesmanager SM[],int n);Tech T[A];Manager M[B];Salesman S[C];Salesmanager SM[D];int i;for(i=1;i<=50;i++){ fun2();cin>>n;display(T,M,S,SM,n);if(n==5)break;}return 0;}void display(Tech T[],Manager M[],Salesman S[],Salesmanager SM[],int n) {switch(n){case 1:fun3(T,M,S,SM);break;case 2:data_tongji(T,M,S,SM);break;case 3:data_print(T,M,S,SM);break;case 4:data_beifen(T,M,S,SM);break;case 5:cout<<endl;break;default:cout<<"请重新选择操作"<<endl;break;}}四、运行结果五、程序的使用说明1、看到菜单后,屏幕上有提示“请选择一个操作:”,用户首先输入1进行数据输入;2、输入1后,会逐项显示所要输入的成员信息,只要按顺序输入即可;3、数据输入完以后,会返回菜单由用户重新选择其他操作,包括数据统计,数据打印和数据备份,最后还有退出系统的选项;4、如果输入2,则进行数据统计,会在屏幕显示各个销售经理下属销售员的业绩,还有对销售经理按工资从高到低进行排序;5、如果输入3,则进行数据打印,屏幕会显示各类成员的基本信息,包括编号、姓名、性别、年龄、工资等;6、如果输入4,则进行数据备份,将打印出来的信息备份到系统指定的文件夹中;7、输入5就是退出系统,退出前可以循环操作,但有一定的次数限制,最好不要超过50次,一般情况够用;8、由于人数固定,所以数据输入时只能输入确定人数的信息,两名技术员,两名经理,四名销售员,两名销售经理;六、总结及心得体会通过对小型公司工资管理系统的C++程序编写,加强了我对C++功能的了解,对象与类之间关系的理解,同时也提高了上机实践能力,自主学习能力,错误分析能力……从实习前开始对实习进行构思,如老师所言,要全局考虑,而我也正因为编写前考虑不周全,在定义完类以后,很快把输入数据的函数编写出来了,上机操作也很成功。