4.13

时长:

三个小时

问题:

8-3 【Python0016】设计并实现计算不同职称的教师工资
分数 10
作者 doublebest
单位 石家庄铁道大学

【题目描述】设计教师接口,该接口包含教师工资计算方法。应用(一)中的高校人员信息包,设计不同职称的教师类:教授,副教授,讲师,教师的基本信息包括姓名、性别、出生年月、职称、课时工作量等属性。注意学校对教师每月工资的计算规定如下:固定工资+课时补贴;教授的固定工资为5000元,每个课时补贴50元;副教授的固定工资为3000元,每个课时补贴30元;讲师的固定工资为2000元,每个课时补贴20元。

程序中定义各种教师类的对象,并编写程序求这些教师的月工资。
【练习要求】请给出源代码程序和运行测试结果,源代码程序要求添加必要的注释。

代码:

from abc import ABC, abstractmethod

class Teacher(ABC):
def __init__(self, name, gender, birth_date, title, hours_worked):
self.name = name
self.gender = gender
self.birth_date = birth_date
self.title = title
self.hours_worked = hours_worked

@abstractmethod
def calculate_monthly_salary(self):
pass

class Professor(Teacher):
def __init__(self, name, gender, birth_date, hours_worked):
super().__init__(name, gender, birth_date, '教授', hours_worked)

def calculate_monthly_salary(self):
base_salary = 5000
hourly_rate = 50
return base_salary + (self.hours_worked * hourly_rate)

class AssociateProfessor(Teacher):
def __init__(self, name, gender, birth_date, hours_worked):
super().__init__(name, gender, birth_date, '副教授', hours_worked)

def calculate_monthly_salary(self):
base_salary = 3000
hourly_rate = 30
return base_salary + (self.hours_worked * hourly_rate)

class Lecturer(Teacher):
def __init__(self, name, gender, birth_date, hours_worked):
super().__init__(name, gender, birth_date, '讲师', hours_worked)

def calculate_monthly_salary(self):
base_salary = 2000
hourly_rate = 20
return base_salary + (self.hours_worked * hourly_rate)

def main():
prof_li = Professor('詹姆斯—摩根—麦吉尔', '男', '1970-01-01', 120)
assoc_prof_wang = AssociateProfessor('杰西—平克曼', '女', '1975-05-10', 100)
lect_zhang = Lecturer('索尔—古德曼', '男', '1980-08-20', 150)

print(f"{prof_li.name} 的月工资为:{prof_li.calculate_monthly_salary()}元")
print(f"{assoc_prof_wang.name} 的月工资为:{assoc_prof_wang.calculate_monthly_salary()}元")
print(f"{lect_zhang.name} 的月工资为:{lect_zhang.calculate_monthly_salary()}元")

if __name__ == "__main__":
main()
posted @ 2024-06-19 17:53  孙锺鸣  阅读(5)  评论(0编辑  收藏  举报