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