职工信息管理系统源码C++1.docx
- 文档编号:8744946
- 上传时间:2023-05-14
- 格式:DOCX
- 页数:22
- 大小:18.42KB
职工信息管理系统源码C++1.docx
《职工信息管理系统源码C++1.docx》由会员分享,可在线阅读,更多相关《职工信息管理系统源码C++1.docx(22页珍藏版)》请在冰点文库上搜索。
职工信息管理系统源码C++1
//职工信息管理系统源码(C++)
#include
#include
#include
#include
usingnamespacestd;
//全局数据,对象
doubleCSalary;//文员的基本工资
doubleSSalary;//业务员的基本工资
doubleAPSalary;//行政人员的基本工资
intID;//员工工号(要保证唯一)
classPerson//员工类
{
protected:
intNo;//编号
charName[20];//姓名
charSex[10];//性别
charTel[20];//联系方式
charNation[30];//国籍
intDuty;//职位
doubleEarning;//收入
Person*next;
public:
Person(charID,char*Name,intDuty)
{
this->Duty=Duty;
strcpy(this->Name,Name);
this->No=ID;
}
virtualvoidCalcSalary()=0;
virtualvoidOutput()=0;
friendclassCompany;
};
classCservant:
publicPerson//文员类
{
private:
doubleWorkload;//上个月完成工作量
public:
Cservant(charID,char*Name,intDuty,doubleWorkload):
Person(ID,Name,Duty)
{
this->Workload=Workload;
}
doubleGetWorkload()
{
returnWorkload;
}
voidSetWorkload(doubleAmount)
{
this->Workload=Amount;
}
voidCalcSalary()
{
Earning=CSalary+(Workload-20)*20;
}
voidOutput()
{
CalcSalary();
cout< } }; classSalesman: publicPerson//业务员类 { private: doubleWorkload;//上个月完成工作量 public: Salesman(charID,char*Name,intDuty,doubleWorkload): Person(ID,Name,Duty) { this->Workload=Workload; } doubleGetWorkload() { returnWorkload; } voidSetWorkload(doubleAmount) { this->Workload=Amount; } voidCalcSalary() { Earning=SSalary+(Workload-15)*20+150;//150为业务补贴 } voidOutput() { CalcSalary(); cout< } }; classACman: publicPerson//行政人员兼职文员类 { private: doubleWorkload;//上个月完成工作量 public: ACman(charID,char*Name,intDuty,doubleWorkload): Person(ID,Name,Duty) { this->Workload=Workload; } doubleGetWorkload() { returnWorkload; } voidSetWorkload(doubles) { Workload=s; } voidCalcSalary() { Earning=250+APSalary+CSalary+(Workload-15)*20; } voidOutput() { CalcSalary(); cout< } }; classAPman: publicPerson//行政人员类 { public: APman(charID,char*Name,intDuty): Person(ID,Name,Duty){} voidCalcSalary() { Earning=APSalary+250;//250为行政补贴 } voidOutput() { CalcSalary(); cout< } }; classCSman: publicPerson//文员兼职业务人员 { private: doubleWorkload;//文员兼职业务人员上个月完成工作量 public: CSman(charID,char*Name,intDuty,doubleWorkload): Person(ID,Name,Duty) { this->Workload=Workload; } doubleGetWorkload() { returnWorkload; } voidSetWorkload(doubleAmount) { this->Workload=Amount; } voidCalcSalary() { Earning=(Workload-25)*20+CSalary+150+SSalary;//150为业务补贴 } 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; } voidFind(charName[20]);//按姓名查找 voidFind(intID);//按编号查找 voidAdd();//增加人员 voidDelete();//删除人员 voidModify();//修改人员 voidQuery();//查询人员 voidSet();//基础数据设置 voidSave();//数据存盘(包括基础数据,人员数据) voidLoad();//数据装入(包括基础数据,人员数据) }; voidCompany: : Clear()//清除内存中人员数据(内部使用) { Person*p=Worker; while(p) { Worker=p->next; deletep; p=Worker; } } voidCompany: : Find(charName[20]) { } voidCompany: : Add() { Person*p;//新结点指针 intDuty; charName[20]; charSex[10];//性别 charTel[20];//联系方式 charNation[30];//国籍 doubleWorkload; cout<<"\n**新增员工**\n"; //输入员工信息 cout<<"输入工号: ";cin>>ID; cout<<"输入职位(1-文员2-行政人员兼职文员3-文员兼职业务员4-行政人员5-业务员): ";cin>>Duty; cout<<"输入姓名: ";cin>>Name; cout<<"输入性别: ";cin>>Sex; cout<<"输入联系方式: ";cin>>Tel; cout<<"输入国籍: ";cin>>Nation; if(Duty! =4) { cout<<"上个月完成工作量: ";cin>>Workload; } //创建新员工结点 switch(Duty) { case1: p=newCservant(ID,Name,Duty,Workload);break; case2: p=newACman(ID,Name,Duty,Workload);break; case3: p=newCSman(ID,Name,Duty,Workload);break; case4: p=newAPman(ID,Name,Duty);break; case5: p=newSalesman(ID,Name,Duty,Workload);break; } p->next=0; //员工结点加入链表 if(Worker)//若已经存在结点 { Person*p2; p2=Worker; while(p2->next)//查找尾结点 { p2=p2->next; } p2->next=p;//连接 } else//若不存在结点(表空) { Worker=p;//连接 } } voidCompany: : Delete()//删除人员 { intNo; 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"; } voidCompany: : Modify() { intNo,Duty; charName[20]; doubleWorkload; 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! =4) { cout<<"上个月完成工作量: ";cin>>Workload; } //创建新员工结点 Person*p3; switch(Duty) { case1: p3=newCservant(p1->No,Name,Duty,Workload);break; case2: p3=newACman(p1->No,Name,Duty,Workload);break; case3: p3=newCSman(p1->No,Name,Duty,Workload);break; case4: p3=newAPman(p1->No,Name,Duty);break; case5: p3=newSalesman(p1->No,Name,Duty,Workload);break; } //员工结点替换到链表 p3->next=p1->next; if(p1==Worker)//若要替换的结点是第一个结点 Worker=p3; else//若要删除的结点是后续结点 p2->next=p3; //删除原来的员工结点 deletep1; } else//若职位没有变动 { cout<<"输入姓名: ";cin>>p1->Name; if(Duty==1) { cout<<"上个月完成工作量: ";cin>>Workload;((Cservant*)p1)->SetWorkload(Workload); } elseif(Duty==2) { cout<<"上个月完成工作量: ";cin>>Workload;((ACman*)p1)->SetWorkload(Workload); } elseif(Duty==3) { cout<<"上个月完成工作量: ";cin>>Workload;((CSman*)p1)->SetWorkload(Workload); } elseif(Duty==5) { cout<<"上个月完成工作量: ";cin>>Workload;((Salesman*)p1)->SetWorkload(Workload); } } cout<<"修改成功! \n"; } else//未找到结点 cout<<"未找到! \n"; } voidCompany: : Query() { intchet,count(0); cout<<"\n**查询职工信息以及本月销售信息**\n"; cout<<"编号"<<"\t"<<"姓名"<<"\t"<<"职位"<<"\t\t\t"<<"工资(元/月)"< Person*p=Worker; doublesum2=0;//工资总和 while(p) { p->Output(); sum2+=p->Earning; p=p->next; } cout<<"本月实发工资总数: "< cout<<"请输入你要查询人员的编号: ";cin>>chet; Person*p4=Worker; while(p4) { if(p4->No==chet) { if(p4->Duty==1) { ((Cservant*)p4)->Output(); count++; break; } elseif(p4->Duty==2) { ((ACman*)p4)->Output(); count++; break; } elseif(p4->Duty==3) { ((CSman*)p4)->Output(); count++; break; } elseif(p4->Duty==4) { ((APman*)p4)->Output(); count++; break; } elseif(p4->Duty==5) { ((Salesman*)p4)->Output(); count++; break; } } else { p4=p4->next; } } if(count==0)cout<<"未找到! "< } voidCompany: : Set() { cout<<"\n**设置基础数据**\n"; cout<<"文员基本工资["< ";cin>>CSalary; cout<<"行政人员基本工资["< ";cin>>APSalary; cout<<"业务人员基本工资["< ";cin>>SSalary; cout<<"员工工号[>="< ";cin>>ID; } voidCompany: : Save()//数据存盘(包括基础数据,人员数据),均采用文本文件 { ofstreamfPerson,fBase; charc; cout<<"\n保存人员和基础数据,是否继续? [Y/N]: ";cin>>c; if(toupper(c)! ='Y')return; //保存人员编号、姓名、职位 fPerson.open("person.txt",ios: : out); Person*p=Worker; while(p) { fPerson< if(p->Duty==1) fPerson<<((Cservant*)p)->GetWorkload()<<"\t"; elseif(p->Duty==2) fPerson<<((ACman*)p)->GetWorkload()<<"\t"; elseif(p->Duty==3) fPerson<<((CSman*)p)->GetWorkload()<<"\t"; elseif(p->Duty==5) fPerson<<((Salesman*)p)->GetWorkload()<<"\t"; fPerson< p=p->next; } fPerson.close(); //保存基础数据 fBase.open("base.txt",ios: : out); 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>>CSalary;//文员基本工资 fBase>>buf>>APSalary;//行政人员基本工资 fBase>>buf>>SSalary;//业务人员基本工资 fBase>>buf>>ID;//员工工号 fBase.close(); //清除内存人员数据 Clear(); //人员数据数据装入 ifstreamfPerson; Person*p=Worker; intNo;charName[20];intDuty; doubleWorkload; fPerson.open("person.txt",ios: : in); //读一条记录 fPerson>>No>>Name>>Duty; if(Duty! =4)fPerson>>Workload; while(fPerson.good()) { //创建员工结点 switch(Duty) { case1: p=newCservant(No,Name,Duty,Workload);break; case2: p=newACman(No,Name,Duty,Workload);break; case3: p=newCSman(No,Name,Duty,Workload);break; case4: p=newAPman(No,Name,Duty);break; case5: p=newSalesman(No,Name,Duty,Workload);break; } p->next=0; //员工结点加入链表 if(Worker)//若已经存在结点 { Person*p2; p2=Worker; while(p2->next)//查找尾结点 { p2=p2->next; } p2->next=p;//连接 } else//若不存在结点(表空) { Worker=p;//连接 } //读下一条记录 fPerson>>No>>Name>>Duty; if(Duty! =4)fPerson>>Workload; } fPerson.close(); cout<<"\n人员和基础数据已经装入...\n"; } voidmain() { charc; Companya; do { cout<<"\n***职工信息管理系统***\n"; cout<<"1-增加人员\n"; cout<<"2-删除人员\n"; cout<<"3-修改人员\n"; cout<<"4-查询职工信息\n"; cout<<"5-基础数据设置\n"; cout<<"6-数据存盘\n"; cout<<"7-数据装入\n"; cout<<"8-退出\t请选择(1-8): "; cin>>c; switch(c) { case'1': a.Add();break; case'2': a.Delete();break; case'3': a.Modify();break; case'4': a.Query();break
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 职工 信息管理 系统 源码 C+