C++实验---薪酬计算 之二

薪酬计算 之二

Description

某公司有经理(Manager)、销售(Sales)、销售经理(SalesManager)四类雇员(Employee),他们的薪酬计算方法各不一样:
每个雇员(Employee)都有每月的基本工资;
经理(Manager)除了基本工资之外还有年终分红;
销售(Sales)除了基本工资之外,每月还有营销提成;
销售经理(SalesManager)既是销售(Sales)人员也是经理(Manager),因此他既有每月的营销提成,也有年终分红。

每类雇员的年薪计算方式不一样,因此使用多态来实现。

请仔细阅读append.cc代码,并设计并实现这个员工类的派生体系,使main()函数能够运行并得到正确的输出。

Input

输入第一个整数n,表示后面有n个雇员。每个雇员占用一行输入。分别是员工类型、姓名、月基本工资、月营销提成(销售)、年终分红(经理),如果是销售经理则两者都有。

Output

从输入的第二行开始,每行对应输出一个雇员的类型、姓名和年薪。

Sample Input

6
Sales Zhangsan 2500 1500
Manager Zhaosi 2500 10000
Manager Liuwu 10000 35000
Sales Sunliu 5000 10000
SalesManager Zhengqi 2500 1500 10000
SalesManager Wangba 10000 25000 10000

Sample Output

Sales Zhangsan : 48000
Manager Zhaosi : 40000
Manager Liuwu : 155000
Sales Sunliu : 180000
SalesManager Zhengqi : 58000
SalesManager Wangba : 430000

题目给定代码

int main()
{
    
    
    string label, name;
    Employee* p[100];
    int n;
    int base, royalty, bonus;
    cin >> n;
    for(int i = 0; i < n; i++)
    {
    
    
        cin >> label >> name;
        if(label == "Sales")
        {
    
    
            cin >> base >> royalty;
            p[i] = new Sales(name, base, royalty);
        }
        if(label == "Manager")
        {
    
    
            cin >> base >> bonus;
            p[i] = new Manager(name, base, bonus);
        }
        if(label == "SalesManager")
        {
    
    
            cin >> base >> royalty >> bonus;
            p[i] = new SalesManager(name, base, royalty, bonus);
        }
    }
    for(int i = 0; i < n; i++)
        p[i]->print();
    for(int i = 0; i < n; i++)
        delete p[i];
}

code:

v#include<iostream>

using namespace std;

class Employee{
    
    
protected:
	string name;
	int base;
public:
	Employee(string n,int b){
    
    
		name=n;
		base=b;
	}
	
	virtual void print()=0;
};

class Sales:virtual public Employee{
    
    
protected:
	int add_month;
public:
	Sales(string name,int b,int add):Employee(name,b){
    
    
		add_month=add;
	}
	
	void print(){
    
    
		int ans=12*(base+add_month);
		cout<<"Sales "<<name<<" : "<<ans<<endl;
	}
};

class Manager:virtual public Employee{
    
    
protected:
	int add_year;
public:
	Manager(string name,int b,int add):Employee(name,b){
    
    
		add_year=add;
	}
	
	void print(){
    
    
		int ans=12*base+add_year;
		cout<<"Manager "<<name<<" : "<<ans<<endl;
	}
};

class SalesManager:virtual public Sales,virtual public Manager{
    
    
public:
	SalesManager(string name,int b,int add_m,int add_y):Sales(name,b,add_m),Manager(name,b,add_y),Employee(name,b){
    
    	}
	
	void print(){
    
    
		int ans=12*(base+add_month)+add_year;
		cout<<"SalesManager "<<name<<" : "<<ans<<endl;
	}
};

int main()
{
    
    
    string label, name;
    Employee* p[100];
    int n;
    int base, royalty, bonus;
    cin >> n;
    for(int i = 0; i < n; i++)
    {
    
    
        cin >> label >> name;
        if(label == "Sales")
        {
    
    
            cin >> base >> royalty;
            p[i] = new Sales(name, base, royalty);
        }
        if(label == "Manager")
        {
    
    
            cin >> base >> bonus;
            p[i] = new Manager(name, base, bonus);
        }
        if(label == "SalesManager")
        {
    
    
            cin >> base >> royalty >> bonus;
            p[i] = new SalesManager(name, base, royalty, bonus);
        }
    }
    for(int i = 0; i < n; i++)
        p[i]->print();
    for(int i = 0; i < n; i++)
        delete p[i];
}

猜你喜欢

转载自blog.csdn.net/timelessx_x/article/details/115383723