定义Staff(员工)类,由Staff分别派生出Saleman(销售员)类和Manager(经理)类,再由Saleman(销售员)类和Manager(经理)类采用多重继承方式派生出新类SaleMana

#include<iostream>
#include<string.h>
using namespace std;

//Staff(员工)类
class Staff
{
public:
    Staff(int nu,char na[],double rf,int bs,int pr)//编号(num)、姓名(name)、出勤率(rateOfAttend)、基本工资(basicSal)、奖金(prize)
    {
        num=nu;
        strcpy(name,na);
        rateOfattend=rf;
        basicSal=bs;
        prize=pr;
    }
    void Output()//输出基本数据
    {
        cout <<"编号:"<<num<<"    "<<"姓名:"<<name<<"   "<<"出勤率:"<<rateOfattend<<"   "<<"基本工资:"<<basicSal<<"    "<<"奖金:"<<prize<<"   ";
    }
    
    double OutputWage()//输出员工实发工资
    {
    //    cout <<"实发工资:";
        return (basicSal+prize*rateOfattend);
    }
private:
    int num;
    char name[20];
    double rateOfattend;
    int basicSal;
    int prize;
};

//Saleman(销售员)类
class Salemen:virtual public Staff
{
public:
    Salemen(int nu,char na[],double rf,int bs,int pr,double de,double pe):Staff(nu,na,rf,bs,pr)
    {
        deductRate=de;//提成比例(deductRate)
        personAmount=pe;//个人销售额(personAmount)
    }
    void Output()
    {
        Staff::Output();
        cout<<"销售员提成比例:"<<deductRate<< "  "<<"个人销售额:"<<personAmount<<"  ";
    }
    void display()
    {
        cout<<"销售员提成比例:"<<deductRate<< "  "<<"个人销售额:"<<personAmount<<"  ";
    }
    double OutputWage()
    {
            return (Staff::OutputWage()+deductRate*personAmount);
    }
private:
    double deductRate;
    double personAmount;
};

//Manager(经理)类
class Manager:virtual public Staff
{
public:
    Manager(int nu,char na[],double rf,int bs,int pr,double td,double ta):Staff(nu,na,rf,bs,pr)
    {
        totalDeductRate=td;//提成比例(totalDeductRate)
        totalAmount=ta;//总销售额(totalAmount)
    }
    void Output()
    {
        Staff::Output();
        cout<<"经理提成比例:"<<totalDeductRate <<"   "<<"总销售额:"<<totalAmount<<"  ";
    }
    void display()
    {
        cout<<"经理提成比例:"<<totalDeductRate <<"   "<<"总销售额:"<<totalAmount<<"  ";
    }
    double OutputWage()
    {
        return (Staff::OutputWage()+totalDeductRate*totalAmount);
    }
private:
    double totalDeductRate;
    double totalAmount;
};

//SaleManager(销售经理)类
class SaleManager:public Salemen,public Manager
{
public:
    SaleManager(int nu,char na[],double rf,int bs,int pr,double de,double pe,double td,double ta):Salemen(nu,na,rf,bs,pr,de,pe),Manager(nu,na,rf,bs,pr,td,ta),Staff(nu,na,rf,bs,pr){}
    void Output()
    {
        Staff::Output();
        
        Salemen::display();
        
        Manager::display();
    }
    double OutputWage()
    {
        return (Salemen::OutputWage()+Manager::OutputWage()-Staff::OutputWage());
    }
};

//主函数
int main()
{
    Staff S1(1,"小红",0.9,3000,2000);//编号、姓名、出勤率、基本工资、奖金
    S1.Output();
    cout <<"实发工资:";
    cout<<S1.OutputWage();
    cout << endl ;
    Salemen S2(2,"小橙",0.9,3000,3000,0.1,10000);//编号、姓名、出勤率、基本工资、奖金、销售员提成比例、个人销售额
    S2.Output();
    cout <<"实发工资:";
    cout<<S2.OutputWage();
    cout << endl ;
    Manager S3(3,"小黄",0.9,4000,5000,0.1,20000);//编号、姓名、出勤率、基本工资、奖金、 经理提成比例、总销售额
    S3.Output();
    cout <<"实发工资:";
    cout<<S3.OutputWage();
    cout << endl ;
    SaleManager S4(4,"小绿",0.8,5000,6000,0.1,10000,0.2,30000);//编号、姓名、出勤率、基本工资、奖金、销售员提成比例、个人销售额 、经理提成比例、总销售额
    S4.Output();
    cout <<"实发工资:";
    cout<<S4.OutputWage();

}

20210622185233359.png

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谭你一个脑瓜崩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值