1478: 多重继承派生(2)--雇员,技术人员,销售人员,经理,销售经理,开发部经理

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();
    }
}

Input

包含多组数据(数据均正确合法)
每组测试数据5行,第一行为某技术人员的相关信息,第二行某销售人员的相关信息,第三行为某经理的相关信息,第四行为某开发部经理的相关信息,第五行为某销售部经理的相关信息。

Output

每组测试数据输出具体格式详见Sample Output。

Sample Input 

1001 张三 3000 80 100
1002 李四 1000 50000 0.1
1003 王五 5000 5000 1.25
1004 陈留 5000 106000 0.15 5000 0.5
1005 刘奇 5000 80 200 5120 0.5
1011 流动性 3500 50 150
1012 威尔 1090 59000 0.15
1013 阿萨德 5100 5006 1.1
1014 高蕊饭店 5050 130000 0.18 5000 0.5
1015 后援团 5000 80 200 5100 0.55

Sample Output

case #1:
1001/张三/技术人员/工资合计:11000[基本工资3000+业绩工资8000(每小时附加酬金80*工作时数100小时)]
1002/李四/销售人员/工资合计:6000[基本工资1000+业绩工资5000(销售额50000*提成比例0.1)]
1003/王五/经理/工资合计:11250[基本工资5000+业绩工资6250(固定奖金额5000*业绩系数1.25)]
1004/陈留/销售部经理/工资合计:23400(基本工资5000+业绩工资18400[固定奖金额5000*0.5+销售额106000*提成比例0.15)]
1005/刘奇/开发部经理/工资合计:14280[基本工资5000+业绩工资9280((固定奖金额5120*业绩系数0.5+每小时附加酬金80*工作时数200小时)/2)]
case #2:
1011/流动性/技术人员/工资合计:11000[基本工资3500+业绩工资7500(每小时附加酬金50*工作时数150小时)]
1012/威尔/销售人员/工资合计:9940[基本工资1090+业绩工资8850(销售额59000*提成比例0.15)]
1013/阿萨德/经理/工资合计:10606.6[基本工资5100+业绩工资5506.6(固定奖金额5006*业绩系数1.1)]
1014/高蕊饭店/销售部经理/工资合计:30950(基本工资5050+业绩工资25900[固定奖金额5000*0.5+销售额130000*提成比例0.18)]
1015/后援团/开发部经理/工资合计:14402.5[基本工资5000+业绩工资9402.5((固定奖金额5100*业绩系数0.55+每小时附加酬金80*工作时数200小时)/2)]

代码:
#include <iostream>
#include <string>
using namespace std;


class Employ
{
public:
Employ(string name,int Id,double base_pay):name(name),Id(Id),base_pay(base_pay)
{
}
string GetName()
{
return name;
}
int GetId()
{
return Id;
}
double GetBase_pay()
{
return base_pay;
}
private:
string name;
int Id;
double base_pay;
};


//Technician类派生的属性有每小时附加酬金和当月工作时数,及研究完成进度系数。业绩工资为三者之积。也包括同名的pay()函数,工资总额为基本工资加业绩工资。
class Technician:virtual public Employ
{
public:
Technician(string name,int Id,double base_pay,double payperhour,double hours):Employ(name,Id,base_pay),payperhour(payperhour),hours(hours)
{
}
void Show()
{
//1001 张三 3000 80 100
//1001/张三/技术人员/工资合计:11000[基本工资3000+业绩工资8000(每小时附加酬金80*工作时数100小时)]
cout<<GetId()<<"/"<<GetName()<<"/"<<"技术人员"<<"/工资合计:"<<(GetBase_pay()+Pay())<<"[基本工资"<<GetBase_pay()<<"+"<<"业绩工资"<<Pay()<<"(每小时附加酬金"<<payperhour<<"*"<<"工作时数"<<hours<<"小时)]"<<endl;
}
double Pay()
{
return payperhour*hours;
}
double GetPayperhour()
{
return payperhour;
}
double GetHours()
{
return hours;
}
private:
double payperhour;//每小时附加酬金80
double hours;//当月工作时数100
};
//Salesman类派生的属性有当月销售额和酬金提取百分比,业绩工资为两者之积。也包括同名的pay()函数,工资总额为基本工资加业绩工资。
class Salesman:virtual public Employ
{
public:
Salesman(string name,int Id,double base_pay,double amount,double coefficient):Employ(name,Id,base_pay),amount(amount),coefficient(coefficient)
{
}
void Show()
{
//1002 李四 1000 50000 0.1
//1002/李四/销售人员/工资合计:6000[基本工资1000+业绩工资5000(销售额50000*提成比例0.1)]
cout<<GetId()<<"/"<<GetName()<<"/销售人员/工资合计:"<<(GetBase_pay()+Pay())<<"[基本工资"<<GetBase_pay()<<"+业绩工资"<<Pay()<<"(销售额"<<amount<<"*提成比例"<<coefficient<<")]"<<endl;
}
double Pay()
{
return amount*coefficient;
}
double GetAmount()
{
return amount;
}
double GetCoefficient()
{
return coefficient;
}
private:
double amount;  //当月销售额50000
double coefficient;//酬金提取百分比0.1
};


//Manager类派生属性有固定奖金额和业绩系数,业绩工资为两者之积。工资总额也为基本工资加业绩工资。
class Manger:virtual public Employ
{
public:
Manger(string name,int Id,double base_pay,double Fixed_pay,double rate):Employ(name,Id,base_pay),Fixed_pay(Fixed_pay),rate(rate)
{
}
void Show()
{
//1003 王五 5000 5000 1.25
//1003/王五/经理/工资合计:11250[基本工资5000+业绩工资6250(固定奖金额5000*业绩系数1.25)]
cout<<GetId()<<"/"<<GetName()<<"/经理/工资合计:"<<(GetBase_pay()+Pay())<<"[基本工资"<<GetBase_pay()<<"+业绩工资"<<Pay()<<"(固定奖金额"<<Fixed_pay<<"*业绩系数"<<rate<<")]"<<endl;
}
double Pay()
{
return Fixed_pay*rate;
}
double GetFixed_pay()
{
return Fixed_pay;
}
double GetRate()
{
return rate;
}
private:
double Fixed_pay;//固定奖金额5000
double rate; //业绩系数1.25
};








//DeveloperManager类,pay()函数是将作为经理和作为技术人员业绩工资之和作为业绩工资。
class SalesManager:public Salesman,public Manger
{
public:
SalesManager(string name,int Id,double base_pay,double amount,double coefficient,double Fixed_pay,double rate):Employ(name,Id,base_pay),Salesman(name,Id,base_pay,amount,coefficient),Manger(name,Id,base_pay,Fixed_pay,rate)
{
}
void Show()
{
//1004 陈留 5000 (106000 0.15) (5000 0.5)
//1004/陈留/销售部经理/工资合计:23400(基本工资5000+业绩工资18400[固定奖金额5000*0.5+销售额106000*提成比例0.15)]
cout<<GetId()<<"/"<<GetName()<<"/销售部经理/工资合计:"<<(GetBase_pay()+Manger::Pay()+Salesman::Pay())<<"(基本工资"<<GetBase_pay()<<"+业绩工资"<<(Manger::Pay()+Salesman::Pay())<<"[固定奖金额"<<Manger::GetFixed_pay()<<"*"<<GetRate()<<"+销售额"<<GetAmount()<<"*提成比例"<<GetCoefficient()<<")]"<<endl;
}
private:
};


//SalesaManager类,pay()函数则是经理的固定奖金额的一半,加上部门总销售额与提成比例之积,这是业绩工资。
class DeveloperManger:public Technician,public Manger
{
public:
DeveloperManger(string name,int Id,double base_pay,double payperhour,double hours,double Fixed_pay,double rate):Employ(name,Id,base_pay),Technician(name,Id,base_pay,payperhour,hours),Manger(name,Id,base_pay,Fixed_pay,rate)
{
}
void Show()
{
//1005 刘奇 5000 (80 200) (5120 0.5)
//1005/刘奇/开发部经理/工资合计:14280[基本工资5000+业绩工资9280((固定奖金额5120*业绩系数0.5+每小时附加酬金80*工作时数200小时)/2)]
cout<<GetId()<<"/"<<GetName()<<"/开发部经理/工资合计:"<<(GetBase_pay()+(Manger::Pay()+Technician::Pay())/2)<<"[基本工资"<<GetBase_pay()<<"+业绩工资"<<((Manger::Pay()+Technician::Pay())/2)<<"((固定奖金额"<<Manger::GetFixed_pay()<<"*业绩系数"<<GetRate()<<"+每小时附加酬金"<<GetPayperhour()<<"*工作时数"<<GetHours()<<"小时)/2)]"<<endl;
}
private:


};


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();
    }
}

猜你喜欢

转载自blog.csdn.net/qq_40333952/article/details/80411847
今日推荐