




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
#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; /修改结点 if(p1!=NULL)/若找到结点 p1-Output();coutDuty; if(p1-Duty!=Duty) /若岗位发生变动 /修改其它数据 coutName; if(Duty=2) coutAmounts; if(Duty=3) coutAmount; else if(Duty=4) coutT; /创建新员工结点 Person *p3; switch(Duty) case 1:p3=new Manager(p1-No,Name,Duty); break; case 2:p3=new SalesManager(p1-No,Name,Duty, Amounts); break; case 3:p3=new Sales(p1-No,Name,Duty,Amount); break; case 4:p3=new Technician(p1-No,Name,Duty,T); break; /员工结点替换到链表 p3-next=p1-next; if(p1=Worker) /若要替换的结点是第一个结点 Worker=p3; else /若要删除的结点是后续结点 p2-next=p3; /删除原来的员工结点 delete p1; else /若岗位没有变动 coutp1-Name; if(Duty=2) coutAmounts; (SalesManager *)p1)-SetAmounts(Amounts); if(Duty=3) coutAmount; (Sales *)p1)-SetAmount(Amount); else if(Duty=4) coutT; (Technician *)p1)-SetT(T); coutt *修改成功*n; else /未找到结点 cout未找到要查询的人员!n;void Company:Query()int i;Person *p1,*p2;p1=Worker;if(p1)couti;while(p1)if(p1-No=i)break;elsep2=p1;p1=p1-next;if(p1!=NULL)p1-Output();elsechar ch;coutch;if(ch!=0)return ;void Company:Set() coutn 设置基础数据 n; cout经理固定月薪ManagerSalaryManagerSalary; cout销售经理固定月薪SalesManagerSalarySalesManagerSalary; cout销售经理提成SalesManagerPercentSalesManagerPercent; cout销售人员提成SalesPercentSalesPercent; cout技术人员小时工资WagePerHourWagePerHour; cout=IDID;void Company:Save() /数据存盘(包括基础数据,人员数据),均采用文本文件 ofstream fPerson,fBase; char c; coutc; if(toupper(c)!=Y)return; /保存人员编号、姓名、岗位 fPerson.open(person.txt,ios:out); Person *p=Worker; while(p) fPersonNotNametDutyDuty=2) fPersonGetAmounts()Duty=3) fPersonGetAmount()Duty=4) fPersonGetT()t; fPersonnext; fPerson.close(); /保存基础数据 fBase.open(base.txt,ios:out); fBase经理固定月薪tManagerSalaryendl; fBase销售经理固定月薪tSalesManagerSalaryendl; fBase销售经理提成tSalesManagerPercentendl; fBase销售人员提成tSalesPercentendl; fBase技术人员小时工资tWagePerHourendl; fBaseIDtIDendl; fPerson.close(); coutbufManagerSalary; /经理固定月薪 fBasebufSalesManagerSalary; /销售经理固定月薪 fBasebufSalesManagerPercent; /销售经理提成 fBasebufSalesPercent; /销售人员提成 fBasebufWagePerHour; /技术人员小时工资 fBasebufID; /员工标识 fBase.close(); /清除内存人员数据 Clear(); /人员数据数据装入 ifstream fPerson; Person *p=Worker; int No; char Name20; int Duty; double Amounts,Amount,T; fPerson.open(person.txt,ios:in); /读一条记录 fPersonNoNameDuty; if(Duty=3)fPersonAmount; else if(Duty=4)fPersonT;while(fPerson.good() /创建员工结点 switch(Duty) case 1:p=new Manager(No,Name,Duty); break; case 2:p=new SalesManager(No,Name,Duty,Amounts); break; case 3:p=new Sales(No,Name,Duty,Amount); break; case 4:p=new Technician(No,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; /连接 /读下一条记录fPersonNoNameDuty;if(Duty=2)fPersonAmounts; else if(Duty=3)fPersonAmount; else if(Duty=4)fPersonT; fPerson.close(); coutn人员和基础数据已经装入.n;void main() char c; Company a; do coutn* 公司人员管理系统 *n; cout1增加人
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 乐理音程考试题库及答案
- 森林防护巡护知识培训课件
- 森林家庭防火知识培训课件
- 棋王课件中职
- 海南省养老护理员职业资格技师考试题(含答案)
- 2025年精细化工作业面试宝典涵盖各类工艺作业预测题
- 2025年裁判台球考试题及答案
- 2025年公路水运安全员(交安abc)考试考核题库答案
- 2025年项目经理从业资格认证考试模拟试题集及答题技巧
- 2025年软件工程师职称评定预测试题及答案参考
- 2025年秋季学期(统编版)二年级上册语文教学工作计划及教学进度表
- 2025年福建省厦门市【辅警协警】笔试真题(含答案)
- (2025年标准)委托他人要账协议书
- 2025-2030中国青少年无人机教育课程体系构建与创新能力培养研究
- 2025年金融消费者权益保护考试题与答案
- 煤矿安全规程新旧版本对照表格版
- 2025山东“才聚齐鲁成就未来”水发集团高校毕业招聘241人笔试参考题库附带答案详解(10套)
- 中学2025年秋季第一学期开学工作方案
- 儿童急救流程
- 《跨越百年的美丽》课件 中职语文上册
- GB 11122-2025柴油机油
评论
0/150
提交评论