2121: 工资管理程序
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 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;
}
}