C++程序设计 人事管理.docx
- 文档编号:11236338
- 上传时间:2023-02-26
- 格式:DOCX
- 页数:29
- 大小:19.54KB
C++程序设计 人事管理.docx
《C++程序设计 人事管理.docx》由会员分享,可在线阅读,更多相关《C++程序设计 人事管理.docx(29页珍藏版)》请在冰豆网上搜索。
C++程序设计人事管理
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
//全局数据
doubleManagerSalary;//经理固定月薪
doubleSecretarySalary;//文秘固定月薪
doubleSalesManagerSalary;//销售经理固定月薪
doubleSalesManagerPercent;//销售经理提成%
doubleSalesPercent;//销售人员提成%
doubleWagePerHour;//技术人员小时工资
intID;//员工标识要保证唯一
classPerson//员工类
{
protected:
intNo;//编号
charName[20];//姓名
intDuty;//岗位
doubleEarning;//收入
Person*next;
public:
Person(charID,char*Name,intDuty)
{
this->Duty=Duty;
strcpy(this->Name,Name);
this->No=ID;
}
virtualvoidCalcSalary()=0;
virtualvoidOutput()=0;
virtualvoidSetAmount(double){}
friendclassCompany;
};
classManager:
publicPerson//经理类
{
public:
Manager(charID,char*Name,intDuty):
Person(ID,Name,Duty){}
voidCalcSalary(){Earning=ManagerSalary;}
voidOutput()
{
CalcSalary();
cout< } }; classSecretary: publicPerson//文秘类 { public: Secretary(charID,char*Name,intDuty): Person(ID,Name,Duty){} voidCalcSalary() {Earning=SecretarySalary;} voidOutput() { CalcSalary(); cout< } }; classSalesManager: publicPerson//业务经理类 { private: doubleAmount; public: SalesManager(charID,char*Name,intDuty): Person(ID,Name,Duty){} voidSetAmount(doubles) { Amount=s; } voidCalcSalary() { Earning=SalesManagerSalary+Amount*SalesManagerPercent/100; } voidOutput() { CalcSalary(); cout< } }; classTechnician: publicPerson//技术员类 { private: doublet; public: Technician(charID,char*Name,intDuty,doubleT): Person(ID,Name,Duty) { this->t=T; } doubleGetT() { returnt; } voidSetT(doubleT) { this->t=T; } voidCalcSalary() { Earning=WagePerHour*t; } voidOutput() { CalcSalary(); cout< } }; classSales: publicPerson//销售员类 { private: doubleAmount; public: Sales(charID,char*Name,intDuty,doubleAmount): Person(ID,Name,Duty) { this->Amount=Amount; } doubleGetAmount() { returnAmount; } voidSetAmount(doubleAmount) { this->Amount=Amount; } voidCalcSalary() { Earning=SalesPercent/100*Amount; } voidOutput() { CalcSalary(); cout< } }; classCompany//老板类 { private: Person*Worker;//员工表 voidClear();//清除内存中数据 public: Company() { Worker=0; Load(); } ~Company() { Person*p; p=Worker; while(p) { p=p->next; deleteWorker; Worker=p;// } Worker=0; } voidAdd();//增加人员 voidDisPlay();//显示人员信息 voidDelete();//删除人员 voidModify();//修改人员 voidQuery();//查询人员 voidSet();//基础数据设置 voidSave();//数据存盘(包括基础数据,人员数据) voidLoad();//数据装入(包括基础数据,人员数据) voidDelAll();//清空信息 }; voidCompany: : Clear()//清除内存中人员数据 { Person*p=Worker; while(p) { Worker=p->next; deletep; p=Worker; } }// voidCompany: : Add() { Person*p;//新结点指针 intDuty; charName[20]; doubleAmount,T; system("cls"); cout<<"\n\n\n\n"; cout<<"为确保信息安全,请再次输入密码: "< voidmima(); mima(); system("cls"); cout<<"\n\n\n"; cout< //输入员工信息 ID++; cout< "< cin>>Duty; cout< "; cin>>Name; if(Duty==3) { cout< "; cin>>Amount; } elseif(Duty==4) { cout< "; cin>>T; } system("cls"); //创建新员工结点 switch(Duty) { case1: p=newManager(ID,Name,Duty);break; case2: p=newSalesManager(ID,Name,Duty);break; case3: p=newSales(ID,Name,Duty,Amount);break; case4: p=newTechnician(ID,Name,Duty,T);break; case5: p=newSecretary(ID,Name,Duty);break; } p->next=0;// //员工结点加入链表 if(Worker)//若已经存在结点 { Person*p2; p2=Worker; while(p2->next)//查找尾结点 { p2=p2->next; } p2->next=p;//连接 } else//若不存在结点(表空) { Worker=p;//连接 } Save(); Load(); } voidCompany: : DisPlay()//数据装入(包括基础数据,人员数据) { intd; Person*p3; p3=Worker; system("cls"); if(p3! =NULL) { cout<<"工号"<<"\t"<<"姓名"<<"\t"<<"职位"<<"\t\t"<<"销售额"<<"\t\t"<<"技术人员工资/小时"< while(p3! =NULL) { d=p3->Duty; if(d==1) { cout< } if(d==2) { cout< } if(d==3) { cout< Sales*s=(Sales*)p3;//runtimetypeinformation->RTTI cout< } if(d==4) { cout< Technician*t=(Technician*)p3; cout< } if(d==5) { cout< } p3=p3->next; } cout<<"显示完成! "< } elsecout<<"人员信息为空,请先添加! "< getch(); } voidCompany: : Delete()//删除人员 { intNo; system("cls"); cout<<"\n\n\n\n"; cout<<"为确保信息安全,请再次输入密码: "< voidmima(); mima(); system("cls"); cout<<"\n**删除员工**\n"; cout<<"ID: "; cin>>No; //查找要删除的结点 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; deletep1; } else//若要删除的结点是后续结点 { p2->next=p1->next; deletep1; } cout<<"找到并删除\n"; } else//未找到结点 cout<<"未找到! \n"; Save(); Load(); } voidCompany: : Modify() { intNo,Duty; charName[20]; doubleAmount,T; system("cls"); cout<<"\n\n\n\n"; cout<<"为确保信息安全,请再次输入密码: "< voidmima(); mima(); system("cls"); cout<<"\n**修改员工**\n"; cout<<"ID: "; cin>>No; //查找要修改的结点 Person*p1,*p2; p1=Worker; while(p1) { if(p1->No==No) break; else { p2=p1; p1=p1->next; } } //修改结点 if(p1! =NULL)//若找到结点 { p1->Output(); cout<<"调整岗位(1-经理2-业务经理3-销售员4-技术员5-文秘): "; cin>>Duty; if(p1->Duty! =Duty)//若岗位发生变动 { //修改其它数据 cout<<"输入姓名: "; cin>>Name; if(Duty==3) { cout<<"本月销售额: "; cin>>Amount; } elseif(Duty==4) { cout<<"本月工作小时数(0-168): "; cin>>T; } //创建新员工结点 Person*p3; switch(Duty) { case1: p3=newManager(p1->No,Name,Duty);break; case2: p3=newSalesManager(p1->No,Name,Duty);break; case3: p3=newSales(p1->No,Name,Duty,Amount);break; case4: p3=newTechnician(p1->No,Name,Duty,T);break; case5: p3=newSecretary(p1->No,Name,Duty);break; } //员工结点替换到链表 p3->next=p1->next; if(p1==Worker)//若要替换的结点是第一个结点 Worker=p3; else//若要删除的结点是后续结点 p2->next=p3; //删除原来的员工结点 deletep1; } else//若岗位没有变动 { cout<<"输入姓名: ";cin>>p1->Name; if(Duty==3) { cout<<"本月销售额: "; cin>>Amount; ((Sales*)p1)->SetAmount(Amount); } elseif(Duty==4) { cout<<"本月工作小时数(0-168): "; cin>>T; ((Technician*)p1)->SetT(T); } } cout<<"修改成功! \n"; } else//未找到结点 cout<<"未找到! \n"; Save(); Load(); } voidCompany: : Query() { system("cls"); cout<<"\n**查询人员本月销售信息**\n"; doublesum=0;//销售额总和 Person*p=Worker; while(p) { if(p->Duty==3)sum+=((Sales*)p)->GetAmount(); p=p->next; } p=Worker; doublesum2=0;//工资总和 while(p) { //if(p->Duty==2) //{ /*((SalesManager*)p)*/p->SetAmount(sum); //} p->Output(); sum2+=p->Earning; p=p->next; } cout<<"本月盈利: "< cout<<"(按照20%利润计算)"< getch(); } voidCompany: : Set() { system("cls"); cout<<"\n**设置基础数据**\n"; cout<<"经理固定月薪["< "; cin>>ManagerSalary; cout<<"文秘固定月薪["< "; cin>>SecretarySalary; cout<<"销售经理固定月薪["< "; cin>>SalesManagerSalary; cout<<"业务经理提成["< "; cin>>SalesManagerPercent; cout<<"销售人员提成["< "; cin>>SalesPercent; cout<<"技术人员小时工资["< "; cin>>WagePerHour; cout<<"员工标识[>="< "; cin>>ID; } voidCompany: : Save()//数据存盘(包括基础数据,人员数据),均采用文本文件 { ofstreamfPerson,fBase; charc; cout<<"\n保存人员和基础数据,是否继续? [Y/N]: ";cin>>c; if(toupper(c)! ='Y')return; //保存人员编号、姓名、岗位 fPerson.open("person.txt",ios: : binary); Person*p=Worker; while(p) { fPerson< if(p->Duty==3) fPerson<<((Sales*)p)->GetAmount()<<"\t"; elseif(p->Duty==4) fPerson<<((Technician*)p)->GetT()<<"\t"; fPerson< p=p->next; } fPerson.close(); //保存基础数据 fBase.open("base.txt",ios: : binary); fBase<<"经理固定月薪\t"< fBase<<"文秘固定月薪\t"< fBase<<"业务经理固定月薪\t"< fBase<<"业务经理提成%\t"< fBase<<"销售人员提成%\t"< fBase<<"技术人员小时工资\t"< fBase<<"ID\t"< fPerson.close(); cout<<"\n保存人员和基础数据已经完成...\n"; } voidCompany: : Load()//数据装入(包括基础数据,人员数据) { //基础数据装入 ifstreamfBase; charbuf[80];//buf用于保存数据文件 fBase.open("base.txt",ios: : in); fBase>>buf>>ManagerSalary;//经理固定月薪 fBase>>buf>>SecretarySalary;//文秘固定月薪 fBase>>buf>>SalesManagerSalary;//业务经理固定月薪 fBase>>buf>>SalesManagerPercent;//业务经理提成% fBase>>buf>>SalesPercent;//销售人员提成% fBase>>buf>>WagePerHour;//技术人员小时工资 fBase>>buf>>ID;//员工标识 fBase.close(); //清除内存人员数据 //Clear(); Person*p=Worker; while(p) { Worker=p->next; deletep; p=Worker; } //人员数据数据装入 ifstreamfPerson; //Person*p=Worker; intNo;charName[20];intDuty; doubleAmount,T; fPerson.open("person.txt",ios: : in); while(/*! fPerson.eof()*/1) { No=-1; //读下一条记录 fPerson>>No>>Name>>Duty; if(Duty==3) fPerson>>Amount; elseif (Duty==4)fPerson>>T; //创建员工结点 if(No==-1) break; switch(Duty) { case1: p=newManager(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+程序设计 人事管理 C+ 程序设计