【大一下程序设计基础作业】P266Ex2

某学校教职工的工资计算方法为:

·所有教职工都有基本工资

·教师月工资等于固定工资+课时补贴,课时补贴根据职称和课时数计算。例如,每课时教授补贴50元,副教授补贴30元,讲师补贴20元

·管理人员月薪等于基本工资+职务工资

·实验室人员月薪等于基本工资+工作日补贴,工作日补贴等于日补贴*月工作日数

定义教职工抽象类,派生教师类、管理人员类和实验室人员类,编写程序测试这个类体系

这题其实是下一题的前置,为下一题做铺垫,打基础。

读题可知,教职工为抽象基类派生出另外三个类,所以很自然地想到虚函数。

为方便测试类体系,所以需要有输入输出两种成员函数,此外,计算工资还需要一个成员函数。

这题没有什么难点,直接上代码

// P266Ex2.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
using namespace std;
class Tworker
{
protected:
    double baseSalary;
    string name, number;
public:
    Tworker(){
        baseSalary = 3000;
        cout << "请输入姓名:\n";
        cin >> name;
        cout << "请输入教职工编号\n";
        cin >> number;
    }
    virtual double Salary() = 0;
    virtual void input() = 0;
    virtual void print() = 0;
};
class Teacher:public Tworker 
{
protected:
    double lsubsidy;
    int lessennum;
    int jobnum;
    double* p;
public:
    void print()
    {
        if(jobnum==1)
        cout <<"job:教授\n" << "name:" << name << "\nnumber:" << number << "\nsalary:" << Salary();
        else if(jobnum==2)cout << "job:副教授\n" << "name:" << name << "\nnumber:" << number << "\nsalary:" << Salary();
        else if(jobnum==3)cout << "job:讲师\n" << "name:" << name << "\nnumber:" << number << "\nsalary:" << Salary();
    }
    void input()
    {
        p = &lsubsidy;
        cout << "请输入课时数:\n";
        cin >> lessennum;
        IN:cout << "请输入职称代码:(教授为1,副教授为2,讲师为3)\n";
        cin >> jobnum;
        if (jobnum == 1)*p = 50;
        else if (jobnum == 2) *p = 30;
        else if (jobnum == 3)*p = 20;
        else { cout << "职称代码有误,请重新输入\n"; goto IN; }
    }
    double Salary()
    {
        return lsubsidy * lessennum + baseSalary;
    }
};
class Manager:public Tworker
{
protected:double jobSalary;
public:void print()
{
    cout << "job:管理人员\n" << "name:" << name << "\nnumber:" << number << "\nsalary:" << Salary();
}
    Manager()
    {
        jobSalary = 2500;
    }
    void input() { jobSalary = 2500; }
    double Salary()
{
    return jobSalary + baseSalary;
}
};
class Laber :public Tworker {
protected:double dsubsidy; int days;
public:
    void print()
    {
        cout << "job:实验室人员\n" << "name:" << name << "\nnumber:" << number << "\nsalary:" << Salary();
    }double Salary() { return dsubsidy * days + baseSalary; }
      Laber()
      {
          dsubsidy = 100;
      }
      void input()
      {
          cout << "请输入工作天数:\n";
          cin >> days;
      }
};
void Input(Tworker& tc)
{
    tc.input();
}
void Print(Tworker& t)
{
    cout << endl;
    t.print();
    cout << endl;
}
int main()
{
    Teacher t;
    t.input();
    Manager m;
    m.input();
    Laber l;
    l.input();
    Print(t);
    Print(m);
    Print(l);
}

有前面的纯虚函数,重载的input函数和print函数通过形参表来决定在哪个对象上进行操作,简单快捷清晰明了

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值