//employee.h 类的定义
class employee
{
protected:
char name[20];
int individualEmpNo; //个人编号
int grade; //级别
float accumPay; //月薪
static int employeeNo; //本公司职员编号目前最大值
public:
employee();
~employee();
void pay(); //计算月薪函数
void SetName(char *); //设置姓名函数
char * GetName(); //提取姓名函数
void promote(int); //升级函数
int GetindividualEmpNo(); //提取编号函数
int Getgrade(); //提取级别函数
float GetaccumPay(); //提取月薪函数
};
class technician:public employee //兼职技术人员
{
private:
float hourlyRate; //每小时酬金
int workHours; //当月工作时数
public:
technician();
void SetworkHours(int wh); //设置工作时数
void pay(); //计算月薪函数
};
class salesman:virtual public employee //兼职推销员类
{
protected:
float CommonRate; //按销售额提取酬金的百分比
float sales; //当月销售额
public:
salesman();
void Setsales(float); //设置销售额
void pay(); //计算月薪函数
};
class manager:virtual public employee //经理类
{
protected:
float monthlyPay; //固定月薪数
public:
manager();
void pay(); //计算月薪函数
};
class salesmanager:public manager,public salesman
{
public:
salesmanager();
void pay();
};
//employee.cpp 类的实现
int employee::employeeNo=1000; //员工编号级数为1000
employee::employee()
{
individualEmpNo=employeeNo++; //员工编号目前最大编号为1000
grade=1; //级别初值为1
accumPay=0.0; //月薪总额初值为0
}
employee::~employee()
{}
void employee::pay()
{}
void employee::SetName(char * names) //设置姓名
{
strcpy(name,names);
}
char* employee::GetName() //提取姓名
{
return name;
}
void employee::promote(int increment)
{
grade+=increment; //升级,提升的级数由increment指定
}
int employee::GetindividualEmpNo()
{
return individualEmpNo; //获取成员编号
}
int employee::Getgrade()
{
return grade; //获取级别
}
float employee::GetaccumPay()
{
return accumPay; //获取月薪
}
technician::technician()
{
hourlyRate=1000;
}
void technician::SetworkHours(int wh)
{
workHours=wh;
}
void technician::pay()
{
accumPay=hourlyRate*workHours;
}
salesman::salesman()
{
CommonRate=0.04;
}
void salesman::Setsales(float sl)
{
sales=sl;
}
void salesman::pay()
{
accumPay=sales*CommonRate;
}
manager::manager()
{
monthlyPay=8000;
}
void manager::pay()
{
accumPay=monthlyPay;
}
salesmanager::salesmanager()
{
monthlyPay=5000;
CommonRate=0.005;
}
void salesmanager::pay()
{
accumPay=monthlyPay+CommonRate*sales;
}
//main
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
manager m1;
technician t1;
salesmanager sm1;
salesman ss1;
char namestr[20];
cout<<"请输入下一个雇员姓名:";
cin>>namestr;
m1.SetName(namestr);
cout<<"请输入下一个雇员姓名:";
cin>>namestr;
t1.SetName(namestr);
cout<<"请输入下一个雇员姓名:";
cin>>namestr;
sm1.SetName(namestr);
cout<<"请输入下一个雇员姓名:";
cin>>namestr;
ss1.SetName(namestr);
m1.promote(3);
m1.pay();
cout<<"请输入兼职技术人员"<<t1.GetName()<<"本月的工作时数:";
int ww;
cin>>ww;
t1.SetworkHours(ww);
t1.promote(2);
t1.pay();
cout<<"请输入销售经理"<<sm1.GetName()<<"所管辖部门本月的销售总额:";
float s1;
cin>>s1;
sm1.Setsales(s1);
sm1.pay();
sm1.promote(2);
cout<<"请输入推销员"<<ss1.GetName()<<"本月的销售额:";
cin>>s1;
ss1.Setsales(s1);
ss1.pay();
//显示m1信息
cout<<m1.GetName()<<"编号"<<m1.GetindividualEmpNo()<<"级别为"<<m1.Getgrade()
<<"级,本月工资"<<m1.GetaccumPay()<<endl;
//显示t1信息
cout<<t1.GetName()<<"编号"<<t1.GetindividualEmpNo()<<"级别为"<<t1.Getgrade()
<<"级,本月工资"<<t1.GetaccumPay()<<endl;
//显示sm1信息
cout<<sm1.GetName()<<"编号"<<sm1.GetindividualEmpNo()<<"级别为"<<sm1.Getgrade()
<<"级,本月工资"<<sm1.GetaccumPay()<<endl;
//显示s1信息
cout<<ss1.GetName()<<"编号"<<ss1.GetindividualEmpNo()<<"级别为"<<ss1.Getgrade()
<<"级,本月工资"<<ss1.GetaccumPay()<<endl;
}