题目描述
定义Employee(员工)类,由Employee分别派生出Saleman(销售员)类和Manager(经理)类,采用虚继承方式。再由Saleman(销售员)类和Manager(经理)类采用多重继承方式派生出新类SaleManager(销售经理)类。
要求:
(1)在Employee类中包含的数据成员有编号(num)、姓名(name)、基本工资(basicSalary)和奖金(prize)。在Saleman类中还包含数据成员销售员提成比例(deductRate)和个人销售额(personAmount),在Manager类中还包含数据成员经理提成比例(totalDeductRate)和总销售额(totalAmount)。在SaleManager类中不包含其它数据成员。
(2)各类人员的实发工资公式如下:
员工实发工资=基本工资+奖金;
销售员实发工资=基本工资+奖金+个人销售额销售员提成比例;
经理实发工资=基本工资+奖金+总销售额经理提成比例;
销售经理实发工资=基本工资+奖金+个人销售额销售员提成比例+总销售额经理提成比例;
(3)每个类都有构造函数、输出基本信息(Show)函数和输出实发工资(ShowSalary)函数。
输入样例
//本题没有输入,主函数按照如下编写
int main()
{
Employee e(106, "李明", 1680, 1080); // 定义对象
cout << "员工信息:" << endl; // 输出提示
e.Show(); // 输出基本信息
e.ShowSalary(); // 输出实发工资
Saleman s(108, "李杰明", 2680, 1680, 0.15, 23000); // 定义对象
cout << endl << "销售员信息:" << endl; // 输出提示
s.Show(); // 输出基本信息
s.ShowSalary(); // 输出实发工资
Manager m(116, "吴倩", 3680, 2680, 0.1, 83000); // 定义对象
cout << endl << "经理信息:" << endl; // 输出提示
m.Show(); // 输出基本信息
m.ShowSalary(); // 输出实发工资
SaleManager sm(118, "吴杰", 3680, 2680, 0.15, 28000, 0.1, 88000);
cout << endl << "销售经理信息:" << endl; // 输出提示
sm.Show(); // 输出基本信息
sm.ShowSalary(); // 输出实发工资
return 0; // 返回值, 返回操作系统
}
输出样例
员工信息:
编号:106
姓名:李明
基本工资:1680元
奖金:1080元
实发工资:2760元
销售员信息:
编号:108
姓名:李杰明
基本工资:2680元
奖金:1680元
销售员提成比例:0.15
个人销售额:23000元
实发工资:7810元
经理信息:
编号:116
姓名:吴倩
基本工资:3680元
奖金:2680元
经理提成比例:0.1
总销售额:83000元
实发工资:14660元
销售经理信息:
编号:118
姓名:吴杰
基本工资:3680元
奖金:2680元
销售员提成比例:0.15
个人销售额:28000元
经理提成比例:0.1
总销售额:88000元
实发工资:19360元
程序代码
#include<iostream>
#include<cstring>
using namespace std;
//员工类
class Employee {
public:
Employee(int new_num, char* new_name, double new_basicSal, double new_prize); //员工类构造函数声明
void Show(); //输出员工类基本信息
double OutputWage1(); //返回员工薪水
void ShowSalary(); // 打印员工薪水
private:
int num; //编号
char name[18]; //姓名
double basicSal; //基本工资
double prize; //奖金
};
//员工类构造函数初始化
Employee::Employee(int new_num, char* new_name, double new_basicSal, double new_prize){
num = new_num;
strcpy(name, new_name);
basicSal = new_basicSal;
prize = new_prize;
}
// 输出员工类基本信息
void Employee::Show() {
cout << "编号:" << num << endl;
cout << "姓名:" << name << endl;
cout << "基本工资:" << basicSal << "元" << endl;
cout << "奖金:" << prize << "元" << endl;
}
//返回员工实发工资
double Employee::OutputWage1(){
double salary;
//员工实发工资 = 基本工资 + 奖金
salary = basicSal + prize;
return salary;
}
void Employee::ShowSalary(){
cout << "实发工资:" << OutputWage1() << "元" << endl;
}
//销售员类
class Saleman :virtual public Employee {
public:
Saleman(int a, char* b, double d, double e, double f, double g);
void Output2();//输出 Employee+Saleman 基本信息
void output2(); // 只输出 Saleman 基本信息
double OutputWage2();
void ShowSalary();
private:
double daductRatr; //成员销售额提成比例
double personAmount;//个人销售额
};
Saleman::Saleman(int new_num, char* new_name, double new_basicSal, double new_prize, double new_daductRatr, double new_personAmount) :Employee(new_num, new_name, new_basicSal, new_prize){
daductRatr = new_daductRatr;
personAmount = new_personAmount;
}
//输出 Employee+Saleman 基本信息
void Saleman::Output2() {
Show();
cout << "销售员提成比例:" << daductRatr << endl;
cout << "个人销售额:" << personAmount << "元" << endl;
}
// 只输出 Saleman 基本信息
void Saleman::output2() {
cout << "销售员提成比例:" << daductRatr << endl;
cout << "个人销售额:" << personAmount << "元" << endl;
}
//返回销售员实发工资
double Saleman::OutputWage2() {
double salary;
//销售员实发工资 = 基本工资 + 奖金 * 出勤率 + 个人销售额 * 销售员提成比例
salary = Employee::OutputWage1() + personAmount * daductRatr;
return salary;
}
void Saleman::ShowSalary(){
cout << "实发工资:" << OutputWage2() << "元" << endl;
}
//经理类
class Manager :virtual public Employee {
public:
Manager(int new_num, char* new_name, double new_basicSal, double new_prize, double new_totalDeductRate, double new_totalAmount);
void Output3();//输出 Employee+Manager 基本信息
void output3();//只输出 Manager 基本信息
double OutputWage3();//返回经理实发工资
void ShowSalary();
private:
double totalDeductRate;
double totalAmount;
};
Manager::Manager(int new_num, char* new_name, double new_basicSal, double new_prize, double new_totalDeductRate, double new_totalAmount) :Employee(new_num, new_name, new_basicSal, new_prize){
totalDeductRate = new_totalDeductRate; //经理提成比例
totalAmount = new_totalAmount;//总销售额
}
//输出 Employee+Manager 基本信息
void Manager::Output3() {
Show();
cout << "经理提成比例:" << totalDeductRate << endl;
cout << "总销售额:" << totalAmount << "元" << endl;
}
//只输出 Manager 基本信息
void Manager::output3() {
cout << "经理提成比例:" << totalDeductRate << endl;
cout << "总销售额:" << totalAmount << "元" << endl;
}
//返回经理实发工资
double Manager::OutputWage3() {
double salary;
//经理实发工资 = 基本工资 + 奖金 + 总销售额 * 经理提成比例
salary = Employee::OutputWage1() + totalAmount * totalDeductRate;
return salary;
}
void Manager::ShowSalary(){
cout << "实发工资:" << OutputWage3() << "元" << endl;
}
//销售经理类
class SaleManager :public Saleman, public Manager {
public:
SaleManager(int new_num, char* new_name, int new_basicSal, int new_prize, double f, double g, double h, double i);
void Output4();//输出销售经理基本信息
double OutputWage4();//返回销售经理实发工资
void ShowSalary();
};
SaleManager::SaleManager(int new_num, char* new_name, int new_basicSal, int new_prize, double new_daductRatr, double new_personAmount, double new_totalDeductRate, double new_totalAmount) :
Saleman(new_num, new_name, new_basicSal, new_prize, new_daductRatr, new_personAmount), Manager(new_num, new_name, new_basicSal, new_prize, new_totalDeductRate, new_totalAmount), Employee(new_num, new_name, new_basicSal, new_prize) {
}
void SaleManager::Output4() {
Employee::Show();
Saleman::output2();
Manager::output3();
}
//返回销售经理实发工资
double SaleManager::OutputWage4() {
double salary;
//销售经理实发工资 = 基本工资 + 奖金 + 个人销售额 * 销售员提成比例 + 总销售额 * 经理提成比例
salary = Saleman::OutputWage2() + Manager::OutputWage3() - Employee::OutputWage1();
return salary;
}
void SaleManager::ShowSalary(){
cout << "实发工资:" << OutputWage4() << "元" << endl;
}
int main() {
//员工
Employee e(106, "李明", 1680, 1080); // 定义对象
cout << "员工信息:" << endl; // 输出提示
e.Show(); // 输出基本信息
e.ShowSalary(); // 输出实发工资
cout << "" << endl;
//销售员
Saleman s(108, "李杰明", 2680, 1680, 0.15, 23000); // 定义对象
cout << "销售员信息:" << endl; // 输出提示
s.Output2(); // 输出基本信息
s.ShowSalary(); // 输出实发工资
cout << "" << endl;
//经理
Manager m(116, "吴倩", 3680, 2680, 0.1, 83000); // 定义对象
cout << "经理信息:" << endl; // 输出提示
m.Output3(); // 输出基本信息
m.ShowSalary(); // 输出实发工资
cout << "" << endl;
//销售经理s4
SaleManager sm(118, "吴杰", 3680, 2680, 0.15, 28000, 0.1, 88000); // 定义对象
cout << "销售经理信息:" << endl; // 输出提示
sm.Output4(); // 输出基本信息
sm.ShowSalary(); // 输出实发工资
return 0; // 返回值, 返回操作系统
}