抽象类

2121: 工资管理程序

Time Limit: 1 Sec   Memory Limit: 128 MB
Submit: 98   Solved: 55
[ Submit][ Status][ Web Board]

Description

某公司的员工及月收入规定如下:

l     经理(Manager类):工号1001,姓名manager_zhang,固定月薪为8000元;

l     销售员(Saleman类):工号2001,姓名saleman_li,月薪为销售利润X10%;

l     销售经理(ManagerSaleman类):工号3001,姓名managerSaleman_wang,固定月薪5000元+销售利润X2%

为设计程序实现该公司的工资管理,将其类结构设计如下:

请按以下要求设计程序:

(1)       Employee类为虚基类和抽象类

(2)       成员函数pay()为虚函数,用来计算并显示输出各类员工的工资;

在main()函数中要定义基类指针,在给定销售利润的情况下(多次输入销售利润,分别计算工资),用动态联编的方式来计算各类员工的工资,并输出其工资单(包括工号在顶格输出、姓名在工号右边setw(20)右对齐、月收入在姓名右边setw(16)对右对齐)。

Input

输入销售利润。(要求支持多级输入)

Output

输出三种职位的工资单。

Sample Input

50000500000500055000

Sample Output

1001 manager_zhang 80002001 saleman_li 50003001 managerSaleman_wang 60001001 manager_zhang 80002001 saleman_li 500003001 managerSaleman_wang 150001001 manager_zhang 80002001 saleman_li 5003001 managerSaleman_wang 51001001 manager_zhang 80002001 saleman_li 55003001 managerSaleman_wang 6100


#include<iostream>
#include<cstring>
#include<iomanip>
#include<algorithm>
using namespace std;
#define pi 3.14159
class employee
{
protected:
	char num[10];
	char name[50];
	long long profit;
	int salary;
public:
	employee(int a):profit(a){}
	virtual int pay()=0;
	virtual char*getname()=0;
	virtual char*getnum()=0;
};
class manager:virtual public employee
{
public:
	manager(int a):employee(a)
	{
		strcpy(num,"1001");
		strcpy(name,"manager_zhang");
		salary=8000;
	}
	int pay()
	{
		return salary;
	}
	char*getname()
	{
		return name;
	}
	char*getnum()
	{
		return num;
	}
};
class saleman:virtual public employee
{
public:
	saleman(int a):employee(a)
	{
		strcpy(num,"2001");
		strcpy(name,"saleman_li");
		salary=profit*0.1;
	}
	int pay()
	{
		return salary;
	}
	char*getname()
	{
		return name;
	}
	char*getnum()
	{
		return num;
	}
};
class ManagerSaleman:virtual public employee
{
public:
	ManagerSaleman(int a):employee(a)
	{
		strcpy(num,"3001");
		strcpy(name,"managerSaleman_wang");
		salary=profit*0.02+5000;
	}
	char*getname()
	{
		return name;
	}
	char*getnum()
	{
		return num;
	}
	int pay()
	{
		return salary;
	}
};
int main()
{
	long long a;
	employee* people[5];
	while(cin>>a)
	{
			people[1]=new manager(a);
			people[2]=new saleman(a);
			people[3]=new ManagerSaleman(a);
			for(int i=1;i<=3;i++)
				cout<<people[i]->getnum()<<setw(20)<<setiosflags(ios::right)<<people[i]->getname()<<setw(16)<<setiosflags(ios::right)<<people[i]->pay()<<endl;
	}
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值