职工信息管理系统源代码Word下载.docx
《职工信息管理系统源代码Word下载.docx》由会员分享,可在线阅读,更多相关《职工信息管理系统源代码Word下载.docx(25页珍藏版)》请在冰豆网上搜索。
strcpy(this->
Sex,Esex);
this->
Borntime=Eborntime;
Duty=Eduty;
}
//获取职工年龄
voidGetage()
{
Age=2014-Borntime;
}
virtualvoidCalcwage()=0;
virtualvoidOutput()=0;
friendclassCompany;
};
classClerks:
publicEmployees//文员类
private:
doubleWorkload;
//上个月完成工作量
Clerks(charID,char*Ename,char*Esex,intEborntime,intEduty,doubleEworkload):
Employees(ID,Ename,Esex,Eborntime,Eduty)
Workload=Eworkload;
doubleGetWorkload()
returnWorkload;
voidSetWorkload(doubleAmount)
Workload=Amount;
//文员的总工资
voidCalcwage()
Salary=Cwage+Workload*20;
voidOutput()
Getage();
Calcwage();
cout<
<
Num<
"
\t"
Name<
Sex<
Borntime<
年\t"
Age<
岁\t"
文员\t"
Salary<
endl;
classSalesman:
publicEmployees//销售员类
Salesman(charID,char*Ename,char*Esex,intEborntime,intEduty,doubleEworkload):
Salary=Swage+Workload*20+100;
//100为业务补贴
cout<
销售员\t"
classSManager:
publicEmployees//销售经理类
SManager(charID,char*Ename,char*Esex,intEborntime,intEduty,doubleEworkload):
voidSetWorkload(doubles)
Workload=s;
Salary=Mwage+Workload*10+100;
//100为行政补贴
销售经理\t"
classGManager:
publicEmployees//总经理类
GManager(charID,char*Ename,char*Esex,intEborntime,intEduty):
Employees(ID,Ename,Esex,Eborntime,Eduty){}
Salary=Mwage+1000;
//1000为行政补贴
总经理\t"
classCompany//公司类
Employees*Worker;
//创建一个职工的链表
voidClear();
//清除内存中数据
Company()
Worker=0;
Load();
~Company()
Employees*p;
p=Worker;
while(p)
{
p=p->
next;
deleteWorker;
Worker=p;
}
doubleAwage();
//计算平均工资
doubleAage();
//计算平均年龄
voidAdd();
//增加职工信息
voidModify();
//修改职工信息
voidDelete();
//删除职工信息
voidQuery();
//查询职工信息
voidSet();
//基础数据设置
voidCount();
//简单统计信息
voidSave();
//数据存入磁盘(包括基础数据,职工数据)
voidLoad();
//数据载入内存(包括基础数据,职工数据)
voidCompany:
:
Clear()//清除内存中职工数据(内部使用)
Employees*p=Worker;
while(p)
Worker=p->
deletep;
}
Add()
Employees*p;
//新结点指针
//名字
//上个月工作量
\n**新增职工**\n"
;
//输入职工信息
输入编号:
cin>
>
ID;
输入姓名:
Name;
输入性别:
Sex;
输入出生年份:
cin>
Borntime;
输入职位(1:
文员2:
销售员3:
销售经理4:
总经理):
Duty;
while(Duty!
=1&
&
Duty!
=2&
=3&
=4)
输入有误,请重新输入:
**1:
总经理**"
cin>
if(Duty!
上个月完成工作量:
Workload;
//创建新职工结点
switch(Duty)
case1:
p=newClerks(ID,Name,Sex,Borntime,Duty,Workload);
break;
case2:
p=newSalesman(ID,Name,Sex,Borntime,Duty,Workload);
case3:
p=newSManager(ID,Name,Sex,Borntime,Duty,Workload);
case4:
p=newGManager(ID,Name,Sex,Borntime,Duty);
p->
next=0;
//员工结点加入链表
if(Worker)//若已经存在结点
Employees*p2;
p2=Worker;
while(p2->
next)//查找尾结点
p2=p2->
p2->
next=p;
//连接
else//若不存在结点(链表为空)
Worker=p;
新增职工成功!
Modify()
//编号
\n**修改职工信息**\n"
ID:
Num;
//查找要修改的结点
Employees*p1,*p2;
p1=Worker;
while(p1)
if(p1->
Num==Num)
break;
else
p2=p1;
p1=p1->
//修改结点
if(p1!
=NULL)//若找到结点
p1->
Output();
调整职位(1-文员2-销售员3-销售经理4-总经理):
Duty!
=Duty)//若职位发生变动
//修改其它数据
cout<
输入出生时间:
if(Duty!
{
cout<
}
//创建新员工结点
Employees*p3;
switch(Duty)
case1:
p3=newClerks(p1->
Num,Name,Sex,Borntime,Duty,Workload);
case2:
p3=newSalesman(p1->
case3:
p3=newSManager(p1->
case4:
p3=newGManager(p1->
Num,Name,Sex,Borntime,Duty);
//员工结点替换到链表
p3->
next=p1->
if(p1==Worker)//若要替换的结点是第一个结点
Worker=p3;
else//若要删除的结点是后续结点
p2->
next=p3;
//删除原来的员工结点
deletep1;
else//若职位没有变动
p1->
if(Duty==1)
((Clerks*)p1)->
SetWorkload(Workload);
elseif(Duty==2)
((Salesman*)p1)->
elseif(Duty==3)
((SManager*)p1)->
修改职工信息成功!
\n"
else//未找到结点
错误:
未找到该职工信息!
Delete()//删除职工信息
\n**删除职工**\n"
//查找要删除的结点
//删除结点
=NULL)//若找到结点,则删除
if(p1==Worker)//若要删除的结点是第一个结点
Worker=p1->
else//若要删除的结点是后续结点
p2->
找到并删除\n"
Query()
intcheck,count(0);
\n**查询职工信息**\n"
编号\t"
姓名\t"
性别\t"
出生时间"
"
年龄\t"
职位\t"
工资(元/月)"
//doublesum1=0;
//工资总和
//intTotalnum=0;
//职工总数
//sum1+=p->
Salary;
//Totalnum++;
p=p->
//cout<
本月实发工资总数:
sum1<
元"
请输入你要查询职工的编号:
check;
Employees*p4=Worker;
while(p4)
if(p4->
Num==check)
if(p4->
Duty==1)
((Clerks*)p4)->
count++;
break;
elseif(p4->
Duty==2)
((Salesman*)p4)->
Duty==3)
((SManager*)p4)->
Duty==4)
((GManager*)p4)->
p4=p4->
if(count==0)cout<
Set()
\n**设置基础数据**\n"
文员基本工资("
Cwage<
元):
Cwage;
销售员基本工资("
Mwage<
Mwage;
经理基本工资("
Swage<
Swage;
基础数据已设置!
doubleCompany:
Awage()//计算平均工资函数
{
doublesum1=0;
//工资总和
doubleAverwage;
//平均工资
intTotalnum=0;
p->
sum1+=p->
Totalnum++;
p=p->
Averwage=sum1/Totalnum;
//计算平均工资
returnAverwage;
}
Aage()//计算平均年龄函数
doublesum2=0;
//年龄总和
doubleAverage;
//平均年龄
sum2+=p->
Age;
Average=sum2/Totalnum;
//计算平均年龄
returnAverage;
Count()
intch;
\n**简单统计信息**\n"
1:
计算职工平均年龄\n"
2:
计算职工工资排行\n"
请选择操作(1/2):
ch;
switch(ch)
Aage();
break;
Awage();
default:
cout<
命令有误!
Save()//数据存盘(包括基础数据,人员数据),均采用文本文件
ofstreamfEmployees,fBase;
charc;
\n保存职工和基础数据,是否继续?
[Y/N]:
c;
if(toupper(c)!
='
Y'
||toupper(c)!
y'
)return;
//保存职工编号、姓名、性别、出生时间、年龄、职位、工资(元/月)
fEmployees.open("
Employees.txt"
ios:
out);
fEmployees<
p->
Duty<
if(p->
fEmployees<
((Clerks*)p)->
GetWorkload()<
elseif(p->
((Salesman*)p)->
((SManager*)p)->
fEmployees.close();