#include<iomanip.h>#include<iostream.h>#include<fstream.h>#include<stdlib.h> class Employ// 基类- 雇员类{ protected:int num;char name[10];char sex;int age;int wage;public:virtual void set()=0;virtual void print()=0;virtual void reserved()=0;};class Manager:public Employ// 经理类{public:void set();void print();void reserved();};class Salesman:public Employ// 销售员类{protected:int salesvolume;int snum;public:void set();void print();void reserved();void printinfor();int getsales(){return salesvolume;}int getsnum(){return snum;}};class MarketMan:public Manager// 销售经理类{ protected: int salesvolume; public:void set();void print();void reserved();int resetwage();int getnum(){return num;} char*getname() {return name;} int getamount(Salesman s[],int n){ salesvolume=0; for(int i=0;i<n;i++) {if(s[i].getsnum()==num) salesvolume+=s[i].getsales();} return salesvolume;}};class Technician:public Employ// 技术员类{ protected: int worktime; public:void set();void print();void reserved();};void Manager::set(){ wage=8000;cout<<" 经理的编号:"; cin>>num;cout<<" 其姓名:"; cin>>name;cout<<" 性别(m/w):"; cin>>sex;cout<<" 年龄:";cin>>age;}void Manager::print()// 经理类成员函数{cout<<" | ------------------ 1 ---------------- 1---------------- 1 ---- "<<endl;cout<<" I "<<setw(12)<<num<<" | "<<setw(12)<<name<<" cout<<" | "<<setw(12)<<age<<" I "<<setw(12)<<wage<<" I }void Manager::reserved(){ofstream employf("E:\\05-29\\gzglxt.txt",ios::app);employf<<" 经理的编号:"<<num<<endl<<"其姓名:"<<name<<endl<<" 性别(m/w):"<<sex<<endl<<" 年龄:"<<age<<endl;}void MarketMan::set(){wage=resetwage();cout<<" 销售经理的编号:";cin>>num;cout<<" 其姓名:";cin>>name;cout<<" 性别(m/w):";cin>>sex;cout<<" 年龄:";cin>>age;}void MarketMan::print(){resetwage();cout<<" | ------------------ 1 ---------------- 1---------------- 1 ----"<<endl;cout<<" I "<<setw(12)<<num<<" I "<<setw(12)<<name<<" cout<<" I "<<setw(12)<<age<<" I "<<setw(12)<<wage<<" I }void MarketMan::reserved(){ofstream employf("E:\\05-29\\gzglxt.txt",ios::app);employf<<" 销售经理的编号:"<<num<<endl<<"其姓名:"<<name<<endl"<<setw(12)<<sex; "<<endl;"<<setw(12)<<sex; "<<endl;<<" 年龄:"<<age<<endl; }int MarketMan::resetwage(){wage=5000+int(salesvolume*0.005); return wage;}void Salesma n::set()〃销售员类定义{cout<<" 销售员的编号:";cin>>num;cout<<" 其姓名:";cin>>name;cout<<" 性别(m/w):";cin>>sex;cout<<" 年龄:";cin>>age;cout<<" 销售额:";cin>>salesvolume;cout<<" 所属销售经理的编号:"; cin>>snum;wage=int(salesvolume*0.04);}void Salesman::printinfor(){cout<<" | --------------------- 1------------------- 1 ----------------- cout<<" | "<<setw(14)<<num<<" | "<<setw(14)<<name<<" "<<endl;}void Salesman::print(){cout<<" | ------------- 1-------------- 1-------------- 1------------------------ H------ 1 "<<endl;cout<<" | "<<setw(8)<<num<<" | "<<setw(10)<<name<<" | cout<<" | "<<setw(10)<<age<<" | "<<setw(10)<<wage<<" "<<endl;}void Salesman::reserved(){ofstream employf("E:\\05-29\\gzglxt.txt",ios::app);employf<<" 销售员的编号:"<<num<<endl<<"其姓名:"<<name<<endl"<<endl;"<<setw(14)<<salesvolume<<" |"<<setw(10)<<sex;| "<<setw(16)<<getsnum()<<"<<" 年龄:"<<age<<endl<<" 销售额:"<<salesvolume<<endl<<" 所属销售经理的编号"<<snum<<endl;}void Technician::set()// 技术员类定义{cout<<" 技术员的编号:";cin>>num;cout<<" 其姓名:";cin>>name;cout<<" 性别(m/w):";cin>>sex;cout<<" 年龄:";cin>>age;cout<<" 工作时间:";cin>>worktime; wage=worktime*100;}void Technician::print(){cout<<" | --------------------- 1------------------ 1 ------------------ 1 ----- "<<endl;cout<<" | "<<setw(12)<<num<<" | "<<setw(12)<<name<<" cout<<" | "<<setw(12)<<age<<" | "<<setw(12)<<wage<<" | } void Technician::reserved(){ofstream employf("E:\\05-29\\gzglxt.txt",ios::app); employf<<" 技术员的编号:"<<num<<endl <<"其姓名:"<<name<<endl<<" 性别(m/w):"<<sex<<endl<<" 年龄:"<<age<<endl<<"工作时间:"<<worktime<<endl;}//主函数int t,m,s,mm;Technician*pt;Manager*pm;Salesman*ps;MarketMan*pmm;void setin();"<<setw(12)<<sex; "<<endl;void count();void printdata(); void reservedall(); void single();void main(){cout<<" 请分别输入技术员,经理,销售员,销售经理人数cin>>t>>m>>s>>mm;pt=new Technician[t]; pm=new Manager[m]; ps=new Salesman[s]; pmm=new MarketMan[mm];if((!pt)||(!pm)||(!ps)||(!pmm)){cout<<" 堆内存分配失败!"<<endl;exit(1);} single();}void single(){cout<<" ★★小型公司工资管理系统★★"<<endl; COUt<<" I ---------------------------------cout<<" | 请选择所需的操作cout<<" |cout<<" |数据输入:1,并按回车键cout<<" |cout<<" | 数据统计:2,并按回车键cout<<" |cout<<" | 数据打印:3,并按回车键 |"<<endl; cout<<" | | "<<endl; cout<<" | 数据备份:4,并按回车键 | "<<endl;cout<<" | | "<<endl; cout<<" | 退出系统:5,并按回车键 | "<<endl;cout<<" | | "<<endl; cout<<" 1 ---------------------------------------- 1"<<e ndl;int choice;cin>>choice;:"<<endl;"<<endl;| "<<endl;| "<<endl;"<<endl;| "<<endl;"<<endl;| "<<endl;cout<<" 请选择一个操作:"<<endl;switch(choice){case 1:setin();case 2:count();case 3:printdata();case 4:reservedall();case 5:exit(0);}}void setin(){Menu1:cout<<" ★★小型公司工资管理系统★★"<<endl;cout<<" | --------------------------------------------- 1"<<endl; cout<<" | 请选择所需的操作丨"<<endl; cout<<" | | "<<endl; cout<<" |技术员数据输入: 1, 并按回车键| "<<endl; cout<<" ||"<<endl;cout<<" |经理数据输入: 2, 并按回车键| "<<endl; cout<<" ||"<<endl;cout<<" |销售员数据输入: 3, 并按回车键| "<<endl; cout<<" ||"<<endl;cout<<" |销售经理数据输入: 4, 并按回车键| "<<endl; cout<<" ||"<<endl;cout<<" |返回上一级菜单: 5, 并按回车键| "<<endl; cout<<" 11"<<endl; cout<<" 请选择一个操作";int ch1,i; cin>>ch1; switch(ch1) { case 1:{for(i=0;i<t;i++) pt[i].set();cout<<" -------------------------------- "<<endl;goto Menu1;} case 2:{for(i=0;i<m;i++)pm[i].set();cout<<" --------------------------------"<<endl;goto Menu1;}case 3:{for(i=0;i<s;i++) ps[i].set(); cout<<" - "<<endl;goto Menu1;}case 4:{for(i=0;i<mm;i++) pmm[i].set(); cout<<" "<<endl;goto Menu1;} case5:single();}}void count() { Menu2:cout<<" ★★小型公司工资管理系统★★"<<endl;cout<<" 1 ---------------------------------------------- -------------------- 1"<<endl;cout<<" | 请选择所需的操作| "<<endl;cout<<" || "<<endl;cout<<" |各销售经理下属销售员业绩统计: 1,并按回车键 | "<<endl;cout<<" || "<<endl;cout<<" |销售经理按工资排序: 2,并按回车键 | "<<endl;cout<<" || "<<endl;cout<<" |返回上一级菜单: 3,并按回车键 | "<<endl;cout<<" 1 ---------------------------------------------- -------------------- 1"<<endl;cout<<" 请选择一个操作";int ch2,i,j;cin>>ch2;switch(ch2){case 1:{for(i=0;i<mm;i++){cout<<" 职工号为:"<<pmm[i].getnum()<<" 销售经理:"<<pmm[i].getname()<<" 下属销售员的业绩为:"<<endl;cout<<" | -------------------- 1 ------------------- 1------------------- 1"<<endl;cout<<" |职工号|姓名|销售额| "<<endl;for(j=0;j<s;j++)if(pmm[i].getnum()= =ps[j].getsnum())ps[j].printinfor();cout<<" | -------- 11 -------------------- 1"<<endl;cout<<" | 销售额总计:| "<<setw(22)<<pmm[i].getamount(ps,s)<<" |"<<endl;}cout<<""<<endl;goto Menu2;}case 2:{cout<<" 销售经理按工资排序为:"<<endl;MarketMan pmmm; for(i=1;i<mm;i++) for(j=0;j<mm-i;j++)if(pmm[j].getamount(ps,s)<pmm[j+1].getamount(ps,s)){pmmm=pmm[j]; pmm[j]=pmm[j+1]; pmm[j+1]=pmmm;}cout<<" I ------------------ 1---------------- 1 ---------------- 1 ----------------- r-------- 1"<<endl;cout<<" | 职工号丨姓名丨性别丨年龄工资I "<<endl;for(i=0;i<mm;i++) pmm[i].print();cout<<" 1-------------------- 1------------------- 1------------------- 1------------------- L---------- 1 "<<e ndl;cout<<" ------------------------------------------ "<<endl;goto Menu2;}case 3:single();}}void printdata(){Menu3:cout<<" ★★小型公司工资管理系统★★"<<endl;cout<<" i --------------------------------------------- 1"<<endl;cout<<" | 请选择所需的操作| "<<endl;cout<<" | | "<<endl;cout<<" |技术员数据输出: 1, 并按回车键| "<<endl;cout<<" ||"<<endl;cout<<" |经理数据输出: 2, 并按回车键| "<<endl;cout<<" ||"<<endl;cout<<" |销售员数据输出: 3, 并按回车键| "<<endl;cout<<" ||"<<endl;cout<<" |销售经理数据输出: 4, 并按回车键| "<<endl;cout<<" ||"<<endl;cout<<" |返回上一级: 5, 并按回车键| "<<endl;cout<<" 11"<<endl;cout<<" 请选择一个操作";int ch3,i;cin>>ch3;switch(ch3) {case 1:{cout<<" 技术员"<<endl<<endl;cout<<" I ----------------- 1 ---------------- 1 ----------------- 1---------------- 1------------- 1"<<endl;cout<<" | 职工号丨姓名丨性别丨年龄资 | "<<endl;for(i=0;i<t;i++) pt[i].print();cout<<" 1-------------------- 1------------------- 1------------------- 1------------------ 1---------------- 1 "<<e ndl;cout<<" ----------------------------------------- "<<endl;goto Menu3;}case 2:{ cout<<" 经理"<<endl<<endl;cout<<" i ------------------ 1---------------- 1 ---------------- 1---------------- 1 ------------- 1 "<<endl;cout<<" | 职工号 | 姓名| 性别| 年龄资 | "<<endl;for(i=0;i<m;i++) pm[i].print();cout<<" 1-------------------- 1------------------- 1------------------- 1------------------ 1---------------- 1 "<<e ndl;cout<<" ----------------------------------------- "<<endl;goto Menu3;}case 4:{cout<<" 销售经理"<<endl<<endl;cout<<" i ------------------ 1--------------- 1 ------------------ 1 --------------- 1 ----------——I "<<endl;cout<<" | 职工号 | 姓名| 性别| 年龄资 | "<<endl;for(i=0;i<mm;i++) pmm[i].print();cout<<" 1-------------------- 1------------------- 1------------------- 1------------------ 1---------------- 1 "<<e ndl;cout<<" ----------------------------------------- "<<endl;goto Menu3;}case 3:{cout<<" 销售员"<<endl<<endl;cout<<" i ------------- 1-------------- 1 -------------- 1------------- 1-------------- 1------- ——————————I "<<endl;cout<<" | 职工号 | 姓名 | 性别 | 年龄 | 工资部门经理编号| "<<endl;所属for(i=0;i<s;i++)ps[i].print();cout<<" 1-------------- 1 ----------- 1---------- 1 ---------- 1--------- 1"——------------------- 1"<<e ndl;cout<<" ----------------------------------------- "<<endl;goto Menu3;} case 5:single();}}void reservedall() {Menu4:cout<<" ★★小型公司工资管理系统★★"<<endl;cout<<" | --------------------------------------------- 1"<<endl;cout<<" | 请选择所需的操作丨"<<endl;cout<<" ||cout<<" |技术员数据备份: 1,并按回车键| "<<endl; cout<<" ||"<<endl; cout<<" |经理数据备份: 2,并按回车键| "<<endl;cout<<" ||"<<endl; cout<<" |销售员数据备份: 3,并按回车键| "<<endl; cout<<" ||"<<endl; cout<<" |销售经理数据备份: 4,并按回车键| "<<endl;cout<<" ||"<<endl; cout<<" |返回上一级: 5,并按回车键| "<<endl;cout<<" 1 ------------------------------------------------- 1"<<e ndl; cout<<" 请选择一个操作"int ch4,i;cin>>ch4;switch(ch4){case 1:{for(i=0;i<t;i++) pt[i].reserved();goto Menu4;}case 2:{for(i=0;i<m;i++) pm[i].reserved();goto Menu4;}case 3:{for(i=0;i<s;i++) ps[i].reserved();goto Menu4;}case 4:{for(i=0;i<mm;i++)pmm[i].reserved();goto Menu4;}case 5:single();。