C++实验代码二

2.定义Staff(员工)类,由Staff分别派生出Saleman(销售员)类和Manager(经理)类,再由Saleman(销售员)类和Manager(经理)类采用多重继承方式派生出新类SaleManager(销售经理)类,各类之间的继承关系如图1.2所示。
(1)在Staff类中包含的数据成员有编号(num)、姓名(name)、出勤率(rateOfAttend)、基本工资(basicSal)和奖金(prize)。在Saleman类中还包含数据成员销售员提成比例(deductRate)和个人销售额(personAmount),在Manager类中还包含数据成员经理提成比例(totalDeductRate)和总销售额(totalAmount)。在SaleManager类中不包含其它数据成员。
(2)各类人员的实发工资公式如下:
员工实发工资 = 基本工资 + 奖金 * 出勤率
销售员实发工资 = 基本工资 + 奖金 * 出勤率 + 个人销售额 * 销售员提成比例
经理实发工资 = 基本工资 + 奖金 * 出勤率 + 总销售额 * 经理提成比例
销售经理实发工资 =基本工资 + 奖金 * 出勤率 + 个人销售额 * 销售员提成比例+ 总销售额 * 经理提成比例
(3)每个类都有构造函数、输出基本信息函数(Output)和输出实发工资函数(OutputWage)。
在这里插入图片描述
在这里插入图片描述

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

class Staff
{
public:
	Staff(int nu,char *na,double rf,int bs,int pr)
	{
		strcpy(name,na);
		num=nu;
		rateOfattend=rf;
		basicSal=bs;
		prize=pr;
	}
	void Output()
	{
		cout << num << "    " << name << "   " << rateOfattend << "   " << basicSal << "    " << prize <<"   "; 
	}
	double OutputWage()
	{
		return (basicSal+prize*rateOfattend);
	}
private:
	int num;
	char name[18];
	double rateOfattend;
	int basicSal;
	int prize;
};
 
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;
		personAmount=pe;
	}
	void Output()
	{
		Staff::Output();
		cout << deductRate << "  " << personAmount << "  " ; 
	}
	void display()
	{
		cout << deductRate << "  " << personAmount << "  " ;
	}
	double OutputWage()
	{
			return (Staff::OutputWage()+deductRate*personAmount);
	}
private:
	double deductRate;
	double personAmount;
};
 
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;
		totalAmount=ta;
	}
	void Output()
	{
		Staff::Output();
		cout << totalDeductRate << "  " << totalAmount << "  " ;
	}
	void display()
	{
		cout << totalDeductRate << "  " << totalAmount << "  " ;
	}
	double OutputWage()
	{
			return (Staff::OutputWage()+totalDeductRate*totalAmount);
	}
private:
	double totalDeductRate;
	double totalAmount;
};
 
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());
	}
};
 
void main()
{
	Staff S1(1,"李梅",0.9,2000,3000);
	S1.Output();
	cout<<S1.OutputWage();
	cout << endl ;
	Salemen S2(2,"蓝帆",0.9,3000,4000,0.1,10000);
	S2.Output();
	cout<<S2.OutputWage();
	cout << endl ;
	Manager S3(3,"罗岚",0.9,4000,5000,0.1,20000);
	S3.Output();
	cout<<S3.OutputWage();
	cout << endl ;
	SaleManager S4(4,"杨澜",1.0,5000,6000,0.1,10000,0.05,40000);
	S4.Output();
	cout<<S4.OutputWage();
	cout << endl ;
}

某公司雇员(Employee)包括经理(Manager),技术人员(Technician)和销售员(Salesman)。开发部经理(DeveloperManger),既是经理也是技术人员。销售部经理(SalesManager),既是经理也是销售员。 以Employee类为虚基类派生出Manager,Technician和Salesman类;再进一步派生出Developermanager和Salesmanager类。 Employee类的属性包括姓名、职工号、工资级别,月薪(实发基本工资加业绩工资)。操作包括月薪计算函数(pay()),该函数要求输入请假天数,扣去应扣工资后,得出实发基本工资。 Technician类派生的属性有每小时附加酬金和当月工作时数,及研究完成进度系数。业绩工资为三者之积。也包括同名的pay()函数,工资总额为基本工资加业绩工资。 Salesman类派生的属性有当月销售额和酬金提取百分比,业绩工资为两者之积。也包括同名的pay()函数,工资总额为基本工资加业绩工资。 Manager类派生属性有固定奖金额和业绩系数,业绩工资为两者之积。工资总额也为基本工资加业绩工资。 而DeveloperManager类,pay()函数是将作为经理和作为技术人员业绩工资之和的一半作为业绩工资。 SalesManager类,pay()函数则是经理的固定奖金额的一半,加上部门总销售额与提成比例之积,这是业绩工资。 编程实现工资管理。特别注意pay()的定义和调用方法:先用同名覆盖,再用运行时多态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

紫荆鱼

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

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

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

打赏作者

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

抵扣说明:

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

余额充值