1478: 多重继承派生(2)--雇员,技术人员,销售人员,经理,销售经理,开发部经理
Description
某公司雇员(employee)包括经理(manager),技术人员(technician)和销售员(salesman)。开发部经理(developermanger),既是经理也是技术人员。销售部经理(salesmanager),既是经理也是销售员。
以Employ类为虚基类派生出Manager,Technician和Salesman类;再进一步派生出DeveloperManager和SalesManager类。
Employee类的属性包括姓名、职工号、工资级别,月薪(实发基本工资加业绩工资)。操作包括月薪计算函数pay()。
Technician类派生的属性有每小时附加酬金和当月工作时数,及研究完成进度系数。业绩工资为三者之积。也包括同名的pay()函数,工资总额为基本工资加业绩工资。
Salesman类派生的属性有当月销售额和酬金提取百分比,业绩工资为两者之积。也包括同名的pay()函数,工资总额为基本工资加业绩工资。
Manager类派生属性有固定奖金额和业绩系数,业绩工资为两者之积。工资总额也为基本工资加业绩工资。
DeveloperManager类,pay()函数是将作为经理和作为技术人员业绩工资之和的一半作为业绩工资。
SalesaManager类,pay()函数则是经理的固定奖金额的一半,加上部门总销售额与提成比例之积,这是业绩工资。
完成上述各类的设计。main函数已给定(如下所示),提交时只需要提交main函数外的代码部分。
int main()
{
int Id,cas=0;
string name;
double base_pay,payperhour,hours,amount,coefficient,Fixed_pay,rate;
while(cin>>Id>>name>>base_pay>>payperhour>>hours)
{
cas++;
cout<<"case #"<<cas<<":"<<endl;
Technician technicial(name,Id,base_pay,payperhour,hours);
cin>>Id>>name>>base_pay>>amount>>coefficient;
Salesman salesman(name,Id,base_pay,amount,coefficient);
cin>>Id>>name>>base_pay>>Fixed_pay>>rate;
Manger manger(name,Id,base_pay,Fixed_pay,rate);
cin>>Id>>name>>base_pay>>amount>>coefficient>>Fixed_pay>>rate;
SalesManager salesmanager(name,Id,base_pay,amount,coefficient,Fixed_pay,rate);
cin>>Id>>name>>base_pay>>payperhour>>hours>>Fixed_pay>>rate;
DeveloperManger developermanger(name,Id,base_pay,payperhour,hours,Fixed_pay,rate);
technicial.Show();
salesman.Show();
manger.Show();
salesmanager.Show();
developermanger.Show();
}
}