一个研究院有多名研究人员,每个研究人员都有职称,并可以发表多篇不同类型的论文,研究人员都是年薪制,每个人的年薪由两部分构成,基本工资部分和奖金部分:不同职称人员的基本工资不同,而奖金部分即和职称有关,也和发表的论文类型和论文 篇数有关;研究院现在有内种职称类型,分别是高级职称 和中级职称,发表的论文也有内种类型,分别为A类论文和B类论文:奖金计算公式为: A类论文奖金系数:0.3 B类论文奖金系数:0.2 21220523 21220523 21220523 台千在 21220523 高级职称人员,每发表一篇论文奖金为:基本工资x论文奖金系数×0.6 中级职称人员,每发表一篇论文奖金为:基本工资x论文奖金系数x0.5 高级职称人员的基本工资为:12760 中级职称人员的基本工资为:9850 现在研究院需要开发工资计算系统。主要计算每个人的基本工资,每个人发表多篇论文的奖金,每个人的年薪;请根据上面描述及你的理解,采用面向对家的恩想和参文件结物,给出工益计算系统的买现代码,假没研究份的究人员最多不超过1000人,每不人发表的论文最多不超520篇:,没计一要考應:行来会323 有更多的职称神类和论文种类,不用修改已有代码,只增加新的子类,就可以适应交化。
时间: 2024-02-24 07:54:59 浏览: 86
以下是一个基本的C++代码示例,实现了研究院工资计算系统的基本功能。这里假设有三种职称和两种论文类型,可以根据需要添加更多的职称和论文类型。同时,我们使用了类的继承,以便在增加新的职称或论文类型时能够轻松扩展代码。
```
#include <iostream>
#include <string>
#include <vector>
using namespace std;
// 职称基类
class Title {
public:
virtual double getBonus() = 0; // 计算奖金
};
// 高级职称
class SeniorTitle : public Title {
public:
double getBonus() { return 0.3; }
};
// 中级职称
class JuniorTitle : public Title {
public:
double getBonus() { return 0.2; }
};
// 论文类型基类
class Paper {
public:
virtual double getBonus() = 0; // 计算奖金
};
// A类论文
class TypeAPaper : public Paper {
public:
double getBonus() { return 0.6; }
};
// B类论文
class TypeBPaper : public Paper {
public:
double getBonus() { return 0.5; }
};
// 研究人员类
class Researcher {
private:
string name;
Title* title; // 职称
int numPapers; // 论文篇数
Paper* paperType; // 论文类型
public:
Researcher(string name, Title* title, int numPapers, Paper* paperType) {
this->name = name;
this->title = title;
this->numPapers = numPapers;
this->paperType = paperType;
}
double getBaseSalary() {
if (title->getBonus() == 0.3) {
return 12760.0; // 高级职称的基本工资
} else if (title->getBonus() == 0.2) {
return 9850.0; // 中级职称的基本工资
} else {
return 0.0; // 其他职称的基本工资
}
}
double getBonus() {
return getBaseSalary() * paperType->getBonus() * title->getBonus() * numPapers;
}
double getSalary() {
return getBaseSalary() + getBonus();
}
string getName() {
return name;
}
};
// 研究院类
class ResearchInstitute {
private:
vector<Researcher*> researchers;
public:
void addResearcher(Researcher* researcher) {
researchers.push_back(researcher);
}
void printSalary() {
for (int i = 0; i < researchers.size(); i++) {
cout << researchers[i]->getName() << " 的年薪为:" << researchers[i]->getSalary() << endl;
}
}
};
int main() {
// 创建研究人员
Researcher* researcher1 = new Researcher("张三", new SeniorTitle(), 3, new TypeAPaper());
Researcher* researcher2 = new Researcher("李四", new JuniorTitle(), 2, new TypeBPaper());
// 创建研究院并添加研究人员
ResearchInstitute* institute = new ResearchInstitute();
institute->addResearcher(researcher1);
institute->addResearcher(researcher2);
// 打印研究人员的年薪
institute->printSalary();
return 0;
}
```
在上面的代码中,我们定义了职称基类 `Title` 和两个派生类 `SeniorTitle` 和 `JuniorTitle`,以及论文类型基类 `Paper` 和两个派生类 `TypeAPaper` 和 `TypeBPaper`。然后我们定义了研究人员类 `Researcher`,其中包括了职称、论文类型、论文篇数等信息,并定义了计算基本工资、奖金、年薪的函数。最后,我们定义了研究院类 `ResearchInstitute`,其中包括了多个研究人员,并定义了打印所有研究人员年薪的函数。
阅读全文