C++ 继承Employee类

题目描述

定义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;   // 返回值, 返回操作系统
}

  • 9
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
员工管理系统】 问题描述:每个员工的信息包括:编号、姓名、性别、生年月、学历、职务、电话、住址等。系统能够完成员工信息的查询、更新、插入、删除、排序等功能。 基本要求:排序:按不同关键字,对所有员工的信息进行排序;查询:按特定条件查找员工;更新,按编号对某个员工的某项信息进行修改;插入,加入新员工的信息;删除,按编号删除已离职的员工的信息。 选作内容:实现图形用户界面。 通过链表实现 数据结构: #include #include #include #include #include using namespace std; typedef struct workers{ char name[15];//姓名 char department[18];//单位 char gender;//性别 unsigned int age;//年龄 unsigned long long telephone;//电话 unsigned long wage;//工资 unsigned long num;//职工号 struct workers *next; }*Linklist,Lnode; void frist_print() { printf("\t\t⊙▽⊙ ⊙▽⊙ ⊙▽⊙ ⊙▽⊙ ⊙▽⊙ ⊙▽⊙ \n\n"); printf("\t\t\t欢迎进入员工管理系统\n"); } void menu() { printf("\n\t\t^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n"); printf("\t\t \t ◎1.创建员工信息\t \n"); printf("\t\t \t ◎2.插入员工信息\t \n"); printf("\t\t \t ◎3.修改员工信息\t \n"); printf("\t\t \t ◎4.删除员工信息\t \n"); printf("\t\t \t ◎5.查询员工信息\t \n"); printf("\t\t \t ◎6.员工信息排序\t \n"); printf("\t\t \t ◎7.显示员工信息\t \n"); printf("\t\t \t ◎8.员工工资情况\t \n"); printf("\n\t\t^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n"); printf("注意:输入均以回车作为结束\n"); printf("please choise 1--8:\t "); //putchar(12); } void Inset(Linklist Head){ Linklist s,L; unsigned int agee; unsigned long wagee,numm;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值