用c++实现某学校有3类员工:教师、行政人员、教师兼行政人员,共有的信息包括编号、姓名、性别和职工类别。工资计算方法如下。 教师:基本工资+课时数×课时补贴。 行政人员:基本工资+行政补贴。 教师兼行政人员:基本工资+课时数×课时补贴+行政补贴。 分析以上信息,定义人员抽象类,派生不同类型的员工,并完成工资的计算。
时间: 2023-05-27 18:06:53 浏览: 126
```c
#include <stdio.h>
#include <stdlib.h>
// 定义人员抽象类
typedef struct {
int id; // 编号
char name[20]; // 姓名
char sex; // 性别
char type; // 职工类别:T - 教师,A - 行政人员,B - 教师兼行政人员
} Employee;
// 定义教师类
typedef struct {
Employee emp; // 继承自人员类
int hours; // 课时数
float allowance; // 课时补贴
} Teacher;
// 定义行政人员类
typedef struct {
Employee emp; // 继承自人员类
float allowance; // 行政补贴
} Administrator;
// 定义教师兼行政人员类
typedef struct {
Employee emp; // 继承自人员类
int hours; // 课时数
float allowance; // 课时补贴
float admin_allowance; // 行政补贴
} TeacherAndAdmin;
// 定义计算工资的函数
float calculate_salary(Employee *emp) {
float salary = 0;
switch(emp->type) {
case 'T': { // 教师
Teacher *t = (Teacher*)emp;
salary = t->hours * t->allowance;
break;
}
case 'A': { // 行政人员
Administrator *a = (Administrator*)emp;
salary = a->allowance;
break;
}
case 'B': { // 教师兼行政人员
TeacherAndAdmin *ta = (TeacherAndAdmin*)emp;
salary = ta->hours * ta->allowance + ta->admin_allowance;
break;
}
default: {
printf("无效的职工类别!\n");
break;
}
}
return salary;
}
int main() {
// 创建教师对象
Teacher t1 = {
.emp = {1001, "张三", 'M', 'T'},
.hours = 80,
.allowance = 50.5
};
// 创建行政人员对象
Administrator a1 = {
.emp = {2001, "李四", 'F', 'A'},
.allowance = 1000.0
};
// 创建教师兼行政人员对象
TeacherAndAdmin ta1 = {
.emp = {3001, "王五", 'M', 'B'},
.hours = 60,
.allowance = 48.0,
.admin_allowance = 1500.0
};
// 计算并输出工资
printf("教师 %s 的工资为 %.2f\n", t1.emp.name, calculate_salary((Employee*)&t1));
printf("行政人员 %s 的工资为 %.2f\n", a1.emp.name, calculate_salary((Employee*)&a1));
printf("教师兼行政人员 %s 的工资为 %.2f\n", ta1.emp.name, calculate_salary((Employee*)&ta1));
return 0;
}
```