用c++写某学校有3类员工:教师、行政人员、教师兼行政人员,共有的信息包括编号、姓名、性别和职工类别。工资计算方法如下。 教师:基本工资+课时数×课时补贴。 行政人员:基本工资+行政补贴。 教师兼行政人员:基本工资+课时数×课时补贴+行政补贴。 分析以上信息,定义人员抽象类,派生不同类型的员工,并完成工资的计算。
时间: 2023-05-27 08:06:52 浏览: 194
教师工资管理系统(c++)
以下是一个可能的实现:
```c
#include <stdio.h>
#include <string.h>
// 人员抽象类
typedef struct {
int id; // 编号
char name[20]; // 姓名
char gender; // 性别
char type[20]; // 职工类别
} Person;
// 教师类
typedef struct {
Person base; // 继承自Person
int hours; // 课时数
int allowance; // 课时补贴
} Teacher;
// 行政人员类
typedef struct {
Person base; // 继承自Person
int subsidy; // 行政补贴
} Administrator;
// 教师兼行政人员类
typedef struct {
Person base; // 继承自Person
int hours; // 课时数
int allowance; // 课时补贴
int subsidy; // 行政补贴
} TeacherAdmin;
// 计算教师工资
int calcTeacherSalary(Teacher *teacher) {
return teacher->hours * teacher->allowance;
}
// 计算行政人员工资
int calcAdminSalary(Administrator *admin) {
return admin->subsidy;
}
// 计算教师兼行政人员工资
int calcTeacherAdminSalary(TeacherAdmin *teacherAdmin) {
return teacherAdmin->hours * teacherAdmin->allowance + teacherAdmin->subsidy;
}
int main() {
// 创建教师对象
Teacher teacher;
teacher.base.id = 1;
strcpy(teacher.base.name, "张三");
teacher.base.gender = 'M';
strcpy(teacher.base.type, "教师");
teacher.hours = 20;
teacher.allowance = 100;
// 创建行政人员对象
Administrator admin;
admin.base.id = 2;
strcpy(admin.base.name, "李四");
admin.base.gender = 'F';
strcpy(admin.base.type, "行政人员");
admin.subsidy = 500;
// 创建教师兼行政人员对象
TeacherAdmin teacherAdmin;
teacherAdmin.base.id = 3;
strcpy(teacherAdmin.base.name, "王五");
teacherAdmin.base.gender = 'M';
strcpy(teacherAdmin.base.type, "教师兼行政人员");
teacherAdmin.hours = 30;
teacherAdmin.allowance = 80;
teacherAdmin.subsidy = 800;
// 计算工资并输出
printf("%s的工资为%d元\n", teacher.base.name, calcTeacherSalary(&teacher));
printf("%s的工资为%d元\n", admin.base.name, calcAdminSalary(&admin));
printf("%s的工资为%d元\n", teacherAdmin.base.name, calcTeacherAdminSalary(&teacherAdmin));
return 0;
}
```
输出结果:
```
张三的工资为2000元
李四的工资为500元
王五的工资为3200元
```
阅读全文