【东华大学oj】28 发工资(面向对象)

#include 
#include 
#include 

using namespace std;

// 基类Employee
class employee
{
protected:
    string name;
    string role;
    double salary;

public:
    // 构造函数
    employee(string n, string r) : name(n), role(r), salary(0) {} // 虚函数,计算工资
    virtual void calcSalary() = 0;

    // 显示信息
    void showInformation()
    {
        cout << name << " " << role << " " << salary << endl;
    }

    // 获取工资
    double getSalary()
    {
        return salary;
    }
};

// 派生类Boss
class boss : public employee
{
public:
    boss(string name) : employee(name, "boss") {}
    void calcSalary() override
    {
        salary = 5000;
    }
};

// 派生类Salesman
class salesman : public employee
{
    int salesCount;
public:
    salesman(string name, int sales) : employee(name, "salesman"), salesCount(sales){}
        void calcSalary() override
    {
        salary = 2000 + salesCount * 0.1;
    }
};

// 派生类Intern
class intern : public employee
{
    int workHours;
public:
    intern(string name, int hours) : employee(name, "intern"), workHours(hours){}
       void calcSalary() override
    {
        salary = workHours * 30;
    }
};

int main()
{
    vector empList;
    int op, salesCount, workHours;
    string name;

    while (cin >> op)
    {
        switch (op)
        {
        case 1:
        {
            cin >> name;
            employee *pe = new boss(name);
            empList.push_back(pe);
            break;
        }
        case 2:
        {
            cin >> name >> salesCount;
            employee *pe = new salesman(name, salesCount);
            empList.push_back(pe);
            break;
        }
        case 3:
        {
            cin >> name >> workHours;
            employee *pe = new intern(name, workHours);
            empList.push_back(pe);
            break;
        }
        default:
            // Handle invalid option if necessary
            break;
        }
    }

    double totalSalary = 0;
    for (employee* emp : empList)
    {
        emp->calcSalary(); // 计算工资
        totalSalary += emp->getSalary();
        emp->showInformation(); // 显示信息
    }

    cout << "total salary:" << totalSalary << endl;

    // 清理分配的内存
    for (employee* emp : empList)
    {
        delete emp;
    }

    return 0;
}

作者: Turbo时间限制: 1S章节: 多态 

问题描述 :

实验目的:多态的应用

实验内容:

  公司有三类雇员:老板、销售员、实习生。

  老板每月固定5000元;销售员每月2000元底薪加提成,提成的计算方式为销售额的10%;实习生的工资按实习时间计算,每小时30元。

  现输入若干雇员的信息,请输出一个月该发多少工资。

  要求:

  首先声明类employee,包含:

  数据成员:

  string name;

  string role;

  double salary;

 以及

  •  构造函数:employee(string name, string role),并且仅声明这一个构造函数,无默认构造函数。

  •  虚函数calcSalary

  •  普通成员函数showInformation(该输出雇员的姓名、角色、工资信息)

  •  普通成员函数getSalary(返回salary的值)

  再声明三个employee的派生类:boss、salesman、intern,类中需要实现虚函数calcSalary。

  在main函数中,首先输入若干雇员的信息,放入empList中,然后遍历empList,计算各雇员的工资,输出其信息,最后输出总工资。

  main函数代码如下:

  int main()

  {

    vector empList;

    int op, salesCount, workHours;

    string name;

    while (cin >> op)

     {

        switch (op)

        {

            case 1:

            {

                cin>>name;

                employee *pe = new boss(name);

                empList.push_back(pe);

                break;

            }

            case 2:

            {

                cin>>name>>salesCount;

                employee *pe=new salesman(name, salesCount);

                empList.push_back(pe);

                break;

            }

            case 3:

            {

                cin>>name>>workHours;

                employee *pe=new intern(name, workHours);

                empList.push_back(pe);

                break;

            }

        }

     }

    double totalSalary = 0;

    for(int i=0; i

    {

        empList.at(i)->calcSalary();//先利用各派生类的多态性计算出工资

        totalSalary += empList.at(i)->getSalary();

        empList.at(i)->showInformation();

    }

    cout<<"total salary:"<

    return 0;

 }

输入说明 :

输入若干行,每行输入一个雇员的信息。

每一行的输入形式为:

首先输入一个整数,表示雇员的种类,1为老板,2为销售员,3为实习生。

如果输入1,后面紧接着输入老板的姓名。

如果输入2,后面紧接着输入销售员的姓名及销售额。

如果输入3,后面紧接着输入实习生的姓名及实习小时数。

输入的姓名中无空格,销售额及实习小时数均为整数。

输出说明 :

如果共有n个雇员,则共输出n+1行,

前n行输出雇员的姓名、角色及工资,以空格分隔。角色为:boss、salesman、intern。

第n+1行输出工资总额。

n个雇员的输出顺序按照输入的顺序。

你可能感兴趣的:(东华oj,算法,java,数据结构)