资源预览内容
第1页 / 共13页
第2页 / 共13页
第3页 / 共13页
第4页 / 共13页
第5页 / 共13页
第6页 / 共13页
第7页 / 共13页
第8页 / 共13页
第9页 / 共13页
第10页 / 共13页
亲,该文档总共13页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
#include #include #include #include /全局数据,对象double ManagerSalary=6000; /经理固定月薪double SalesManagerSalary=4000; /销售经理固定月薪double SalesManagerPercent=5; /销售经理提成double SalesPercent=0.5; /销售人员提成double WagePerHour=50; /技术人员小时工资int ID; /员工标识class Person /员工类protected: int No; /编号 char Name20; /姓名 int Duty; /岗位 double Earning; /收入 Person *next; / 指向员工类的指针public: Person(char ID,char *Name,int Duty) this-Duty=Duty; strcpy(this-Name,Name); this-No=ID; virtual void CalcSalary()=0; /计算员工工资的方法 virtual void Output()=0; /输出员工信息函数 friend class Company; /定义公司类为友元类;class Manager:public Person /经理类public: Manager(char ID,char *Name,int Duty):Person(ID,Name,Duty) void CalcSalary()Earning=ManagerSalary; void Output() CalcSalary(); coutNotNamet经理tEarningAmounts=Amounts;double GetAmounts()return Amounts; void SetAmounts(double s) Amounts=s; void CalcSalary() Earning=SalesManagerSalary+Amounts*SalesManagerPercent/100; void Output() CalcSalary(); coutNotNamet销售经理tEarningt=T; double GetT() return t; void SetT(double T) this-t=T; void CalcSalary() Earning=WagePerHour*t; void Output() CalcSalary(); coutNotNamet技术员tttEarningAmount=Amount; double GetAmount() return Amount; void SetAmount(double Amount) this-Amount=Amount; void CalcSalary() Earning=SalesPercent/100*Amount; void Output() CalcSalary(); coutNotNamet销售员tAmounttEarningnext; delete Worker; Worker=p; Worker=0; void Add(); /增加人员 void Delete(); /删除人员 void Modify(); /修改人员 void Query(); /查询人员 void Set(); /基础数据设置 void Save(); /数据存盘(包括基础数据,人员数据) void Load(); /数据装入(包括基础数据,人员数据); void Company:Clear() /清除内存中人员数据 Person* p=Worker; while(p) Worker=p-next; delete p; p=Worker; void Company:Add() Person *p; /新结点指针 int Duty; char Name20; double Amount,Amounts,T; coutn* 新增员工 *n; /输入员工信息 ID+; coutDuty; coutName; if(Duty=2) coutAmounts; if(Duty=3) coutAmount; else if(Duty=4) coutT; /创建新员工结点 switch(Duty) case 1:p=new Manager(ID,Name,Duty); break; case 2:p=new SalesManager(ID,Name,Duty, Amounts); break; case 3:p=new Sales(ID,Name,Duty,Amount); break; case 4:p=new Technician(ID,Name,Duty,T); break; p-next=0; /员工结点加入链表 if(Worker) /若已经存在结点 Person *p2; p2=Worker; while(p2-next) /查找尾结点 p2=p2-next; p2-next=p; /连接 else /若不存在结点(表空) Worker=p; /连接 coutttt *添加成功*n;void Company:Delete() /删除人员 int No; coutn* 删除员工 *n; coutNo; /查找要删除的结点 Person *p1,*p2; p1=Worker; while(p1) if(p1-No=No) break; else p2=p1; p1=p1-next; /删除结点 if(p1!=NULL)/若找到结点,则删除 if(p1=Worker) /若要删除的结点是第一个结点 Worker=p1-next; delete p1; else /若要删除的结点是后续结点 p2-next=p1-next; delete p1; cout找到并删除n; else /未找到结点 cout人员未找到!n;void Company:Modify() int No,Duty; char Name20; double Amounts,Amount,T; coutn* 修改员工 *n; coutNo; /查找要修改的结点 Person *p1,*p2; p1=Worker; while(p1) if(p1-No=No) break; else p2=p1; p1=p1-next;
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号