老师留了个C++的考题,秋知道,救命!

#ifndef员工_H

#定义员工_H

//员工. h

员工类别

{

受保护:

char name[20];//名称

int individualEmpNo//个人号码

int等级;//级别

双倍累积工资;//月薪总额

int标签;

静态int employeeNo//本公司当前最大员工人数。

公共:

员工();//构造函数

~ employee();//析构函数

虚拟void pay();//计算月薪函数(虚函数)

虚拟void提升(int increment = 0);//升级功能(虚拟功能)

void set name(char *);//设置名称函数

char * GetName();//提取名称函数

int GetindividualEmpNo();//选择编号功能

int Getgrade();//提取级别函数

double GetaccumPay();//提取月薪函数

void Tg();

int Gettag();

void add(char *na,int code,int gr,double p);

};

类技师:公职人员//兼职技师。

{

私人:

双hourlyRate//每小时费用

int workHours//当月工作时间

公共:

技术员();//构造函数

void setwork hours(int wh);//设置工作时间功能

void pay();//计算月薪功能

void promote(int);//升级功能

};

销售员类:虚拟公职人员//兼职销售员类

{

受保护:

双倍CommRate//按销售额提取提成酬金。

双倍销售;//当月销售额

公共:

销售员();//构造函数

void set sales(double s 1);//设置销售功能

void pay();//计算月薪功能

void promote(int);//升级功能

};

Classmanager:虚拟公共雇员//经理类

{

受保护:

双月付款;

公共:

manager();//构造函数

void pay();//计算月薪功能

void promote(int);//升级功能

};

类销售经理:公共经理、公共销售员//销售经理

{

公共:

sales manager();//构造函数

void pay();//计算月薪功能

void promote(int);//升级功能

};

类数据库//雇员数据类

{

私人:

int top

员工阅读[100];

公共:

database();//从employee.txt读取员工信息,读取[]。

int addemp (char *na,int code,int gr,double p);//增加人员

员工*查询(int empid);

employee * query 1(char empna[20]);

void disp();//员工信息显示

void clear();

~ Database();//像在employee.txt中一样读取read[]中的信息

};

#endif

//员工. cpp

# include & ltiostream & gt

# include & ltcstring & gt

#包含“employee.h”

# include & ltfstream & gt

使用命名空间std

int employee::employee no = 1000;//员工人数基数为1000。

//成员函数的类外定义

员工::员工()

{

individual empno = employee no++;//新输入的员工编号是当前最大编号加上1。

等级= 1;//级别的初始值是1。

accumPay = 0.0//月薪总额的初始值为0

}

void employee::add(char *na,int code,int gr,double pay)

{

tag = 0;

set name(na);individualEmpNo = codegrade = graccumPay = pay

}

void雇员::pay(){ };

员工::~员工()

{}

作废员工::提升(整数递增)

{等级+=增量;}//升级,升级级别由增量指定。

void员工::集合名称(char * names)

{ strcpy(姓名,姓名);}//设置名称

char * employee::GetName()

{返回姓名;}//选择成员名称

int employee::GetindividualEmpNo()

{ return individualEmpNo}

int employee::Getgrade()

{返回等级;}//选择成员级别

双重雇员::GetaccumPay()

{ return accumPay}//提取月薪

技术员::技术员()

{ hourly rate = 100;}//每小时奖励100。

void technician::setwork hours(int wh)

{ workHours = wh}//设置工作时间

作废技术人员::支付()

{ accum pay = hourly rate *(double)work hours;}//算月薪,按小时发工资。

作废技术员::提升(整数)

{员工::晋升(2);}//调用基类升级函数升级到二级。

推销员:推销员

{ CommRate = 0.04}//销售佣金比例为4%

void sales::set sales(double s 1)

{ sales = s 1;}//设置销售金额

void salesman::pay()

{ accumPay = sales * CommRate}//月薪=销售提成

void salesman::promote(int)

{ employee::promote(0);}//调用基类升级函数升级到0级。

经理::经理()

{ monthlyPay = 8000}//固定月薪8000元。

void manager::pay()

{ accumPay = monthlyPay}//月薪总额为固定月薪。

void manager::promote(int)

{员工::晋升(3);}//调用基类升级函数升级到三级。

销售经理::销售经理()

{

monthlyPay = 5000

CommRate = 0.005

}

void salesmanager::pay()

{

accum pay =(double)monthly pay+CommRate * sales;

}

void salesmanager::promote(int)

{ employee::promote(1);}//调用基类升级函数升级到1级别。

int employee::Gettag()

{返回标签;}

void员工::Tg()

{

tag = 1;

}

Database::Database()//从employee.txt读取员工信息以读取[]。

{

员工的;

top =-1;

fstream文件(“employee.txt”,IOs::in);

while (1)

{

file . read((char *)& amp;s,sizeof(s));

如果(!文件)中断;

top++;

read[top]= s;

}

file . close();

}

Int database:: add EMP (char * na,int code,int gr,double p)//增加雇员。

{

employee * EMP = query 1(na);

if(emp==NULL)

{

top++;

阅读【顶部】。add(na,code,gr,p);

返回1;

}返回0;

}

雇员*数据库::查询(int empid)

{

for(int I = 0;我& lt= topi++)

如果(读[我]。GetindividualEmpNo()= = empid & amp;& amp读[我]。Gettag()==0)

返回& amp改为[I];

返回NULL

}

雇员*数据库::query1(char empna[20])

{

for(int I = 0;我& lt= topi++)

if (strcmp(读作[i].GetName(),empna)= = 0 & amp;& amp读[我]。Gettag()==0)

返回& amp改为[I];

返回NULL

}

void base::disp()//员工信息显示

{

for(int I = 0;我& lt= topi++)

{

cout & lt& lt"名称:"

如果(读[我]。get grade()= = 1)cout & lt;& lt"标题:"

else if(读[i]。get grade()= = 2)cout & lt;& lt"标题:"

else if(读[i]。get grade()= = 3)cout & lt;& lt"标题:"

else cout & lt& lt"标题:"

cout & lt& lt"薪水:"

}

}

void数据库::clear()

{ top =-1;

}

数据库::~Database() //像在employee.txt中一样读取read[]中的信息

{

fstream文件(“employee.txt”,IOs::out);

for(int I = 0;我& lt= topi++)

如果(读[我]。Gettag()==0)

file . write((char *)& amp;read[i],sizeof(read[I]);

file . close();

}

//rygl.cpp

# include & ltiostream.h & gt

# include & ltcstring & gt

#包含“employee.h”

# include & ltfstream & gt

void main()

{

经理m;

技术员t;

销售经理sm;

销售员s;

字符名[20],键[20];

int码,wh;

双am;

员工* emp

数据库数据;

int i,k,j=0,kk = 3;

while(kk)

{

cout & lt& lt“请输入密码(您还有”

CIN & gt;& gt关键;kk-;

if(strcmp(key," sm 0903410 ")= = 0)break;

else cout & lt& lt" O (︶ ︶)唉,密码错了!"& lt& ltendl

if(kk = = 0){ cout & lt;& lt“你不能再进入这个系统了!(_)/~ ~拜拜”;退出(0);}

}

do { system(" cls ");

cout & lt& lt“**************欢迎使用人事管理系统* * * * * * * * * * * * * * * * * *”& lt;& ltendl

cout & lt& lt"!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!"& lt& ltendl

cout & lt& lt"!*!*!*!*!*!1.进入!*!*!*!*!*!"& lt& ltendl

cout & lt& lt"!*!*!*!*!*!2.增加!*!*!*!*!*!"& lt& ltendl

cout & lt& lt"!*!*!*!*!*!3.找到它!*!*!*!*!*!"& lt& ltendl

cout & lt& lt"!*!*!*!*!*!4.删除!*!*!*!*!*!"& lt& ltendl

cout & lt& lt"!*!*!*!*!*!5输出!*!*!*!*!*!"& lt& ltendl

cout & lt& lt"!*!*!*!*!*!6.不干了!*!*!*!*!*!"& lt& ltendl

cout & lt& lt"!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!"& lt& ltendl

cout & lt& lt”请选择您的操作:“;CIN & gt;& gt我;

开关(一)

{

案例1:data . clear();

do { system(" cls ");

cout & lt& lt"!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!"& lt& ltendl

cout & lt& lt"!*!*!*!*!*!1.经理!*!*!*!*!*!"& lt& ltendl

cout & lt& lt"!*!*!*!*!*!2.兼职技师!*!*!*!*!*!"& lt& ltendl

cout & lt& lt"!*!*!*!*!*!3.销售经理!*!*!*!*!*!"& lt& ltendl

cout & lt& lt"!*!*!*!*!*!4.兼职促销!*!*!*!*!*!"& lt& ltendl

cout & lt& lt"!*!*!*!*!*!5.返回上一级菜单!*!*!*!*!*!"& lt& ltendl

cout & lt& lt"!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!"& lt& ltendl

cout & lt& lt”请选择您的操作:“;CIN & gt;& gtk;

开关(k)

{

案例1:cout & lt;& lt"请输入名字:";CIN & gt;& gt姓名;m .集合名称(名称);m . promote(0);m . pay();data.addemp(m.GetName()、m.GetindividualEmpNo()、m.Getgrade()、m . GetaccumPay());打破;

案例2:cout & lt;& lt"请输入名字:";CIN & gt;& gt姓名;cout & lt& lt“请输入他这个月的工作时间:“;CIN & gt;& gtwh;t . setwork hours(wh);t .集合名称(名称);t . promote(0);t . pay();data.addemp(t.GetName()、t.GetindividualEmpNo()、t.Getgrade()、t . GetaccumPay());打破;

案例三:cout & lt& lt"请输入名字:";CIN & gt;& gt姓名;cout & lt& lt“请输入他所在部门本月的总销售额”:CIN & gt;& gtam;sm。set sales(am);sm。SetName(名称);sm . promote(0);sm . pay();data.addemp(sm。GetName(),sm。GetindividualEmpNo(),sm。Getgrade(),sm。GetaccumPay());打破;

案例4:cout & lt;& lt"请输入名字:";CIN & gt;& gt姓名;cout & lt& lt"请输入他这个月的总销售额:";CIN & gt;& gtam;美国set sales(am);s .集合名称(名称);s . promote(0);s . pay();data.addemp(s.GetName()、s . GetindividualEmpNo()、s.Getgrade()、s . GetaccumPay());打破;

默认值:cout & lt& lt" ~ ~ o(& gt;_ & lt)o~~错了!”& lt& ltendl打破;

案例五:破;

}

}while(k!=5);打破;

案例二:

do { system(" cls ");

cout & lt& lt"!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!"& lt& ltendl

cout & lt& lt"!*!*!*!*!*!1.经理!*!*!*!*!*!"& lt& ltendl

cout & lt& lt"!*!*!*!*!*!2.兼职技师!*!*!*!*!*!"& lt& ltendl

cout & lt& lt"!*!*!*!*!*!3.销售经理!*!*!*!*!*!"& lt& ltendl

cout & lt& lt"!*!*!*!*!*!4.兼职促销!*!*!*!*!*!"& lt& ltendl

cout & lt& lt"!*!*!*!*!*!5.返回上一级菜单!*!*!*!*!*!"& lt& ltendl

cout & lt& lt"!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!"& lt& ltendl

cout & lt& lt请选择要添加的类型:“;CIN & gt;& gtk;

开关(k)

{

案例1:cout & lt;& lt"请输入名字:";CIN & gt;& gt姓名;m .集合名称(名称);m . promote(0);m . pay();data.addemp(m.GetName()、m.GetindividualEmpNo()、m.Getgrade()、m . GetaccumPay());打破;

案例2:cout & lt;& lt"请输入名字:";CIN & gt;& gt姓名;cout & lt& lt“请输入他这个月的工作时间:“;CIN & gt;& gtwh;t . setwork hours(wh);t .集合名称(名称);t . promote(0);t . pay();data.addemp(t.GetName()、t.GetindividualEmpNo()、t.Getgrade()、t . GetaccumPay());打破;

案例三:cout & lt& lt"请输入名字:";CIN & gt;& gt姓名;cout & lt& lt“请输入他所在部门本月的总销售额”:CIN & gt;& gtam;sm。set sales(am);sm。SetName(名称);sm . promote(0);sm . pay();data.addemp(sm。GetName(),sm。GetindividualEmpNo(),sm。Getgrade(),sm。GetaccumPay());打破;

案例4:cout & lt;& lt"请输入名字:";CIN & gt;& gt姓名;cout & lt& lt"请输入他这个月的总销售额:";CIN & gt;& gtam;美国set sales(am);s .集合名称(名称);s . promote(0);s . pay();data.addemp(s.GetName()、s . GetindividualEmpNo()、s.Getgrade()、s . GetaccumPay());打破;

案例五:破;

默认值:cout & lt& lt" ~ ~ o(& gt;_ & lt)o~~错了!”& lt& ltendl打破;

}

}while(k!=5);打破;

案例三:

做{

cout & lt& lt"!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!"& lt& ltendl

cout & lt& lt"!*!*!*!*!*!1.名字!*!*!*!*!*!"& lt& ltendl

cout & lt& lt"!*!*!*!*!*!2.号!*!*!*!*!*!"& lt& ltendl

cout & lt& lt"!*!*!*!*!*!3返回上一级菜单!*!*!*!*!*!"& lt& ltendl

cout & lt& lt"!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!"& lt& ltendl

cout & lt& lt请选择您的搜索方法:;CIN & gt;& gtk;

开关(k)

{

案例1:cout & lt;& lt"请输入您要查找的名称:";CIN & gt;& gt姓名;

emp=data.query1(姓名);

if(EMP = = NULL){ cout & lt;& lt" ~ ~ o(& gt;_ & lt)o~~没有这个人”< & ltendl打破;}

else cout & lt& lt"名称:"

案例2:cout & lt;& lt"请输入您要查找的号码:";CIN & gt;& gt代码;

emp=data.query(代码);

if(EMP = = NULL){ cout & lt;& lt" ~ ~ o(& gt;_ & lt)o~~没有这个人”< & ltendl打破;}

else cout & lt& lt"名称:"

案例三:破;

默认值:cout & lt& lt" ~ ~ o(& gt;_ & lt)o~~错了!”& lt& ltendl打破;

}

}while(k!=3);打破;

案例4:

do { system(" cls ");

cout & lt& lt"!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!"& lt& ltendl

cout & lt& lt"!*!*!*!*!*!1.名字!*!*!*!*!*!"& lt& ltendl

cout & lt& lt"!*!*!*!*!*!2.号!*!*!*!*!*!"& lt& ltendl

cout & lt& lt"!*!*!*!*!*!3返回上一级菜单!*!*!*!*!*!"& lt& ltendl

cout & lt& lt"!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!"& lt& ltendl

cout & lt& lt请选择删除方法:;CIN & gt;& gtk;

开关(k)

{

案例1:cout & lt;& lt"请输入您要删除的名称:";CIN & gt;& gt姓名;

emp=data.query1(姓名);

if(EMP = = NULL){ cout & lt;& lt" ~ ~ o(& gt;_ & lt)o~~没有这个人”< & ltendl打破;}

EMP->;TG();打破;

案例2:cout & lt;& lt"请输入您要删除的号码:";CIN & gt;& gt代码;

emp=data.query(代码);

if(EMP = = NULL){ cout & lt;& lt" ~ ~ o(& gt;_ & lt)o~~没有这个人”< & ltendl打破;}

EMP->;TG();

打破;

案例三:破;

默认值:cout & lt& lt" ~ ~ o(& gt;_ & lt)o~~错了!”& lt& ltendl打破;

}

}while(k!=3);打破;

案例五:data . disp();系统(“暂停”);打破;

案例6:cout & lt;& lt"(_)/~ ~拜拜" < & ltendl打破;

默认值:cout & lt& lt" ~ ~ o(& gt;_ & lt)o~~错了!”& lt& ltendl打破;

}

}而(我!=6);

}

和你们差不多,我们去年的课程,改改就行了。