|
|
发表于 2025-7-18 10:46:17
|
显示全部楼层
请回复您的答案^_^
-------- 问答题 --------
第 0 题的答案是:
子类重写父类的方法
第 1 题的答案是:
简化代码,提高代码灵活性和扩展性,减少耦合
第 2 题的答案是:
可以
第 3 题的答案是:
如果它像鸭子一样行走和鸣叫,那么它就是鸭子
第 4 题的答案是:
降低了耦合度
第 5 题的答案是:
不是
-------- 动动手 --------
请将第 0 题的代码写在下方:
class Staff:
"""员工类"""
def __init__(self, uid, name, job, grade, year):
self.uid = uid
self.name = name
self.job = job
self.grade = grade
self.year = year
def get_uid(self):
return self.uid
def get_name(self):
return self.name
def get_job(self):
return self.job
def get_grade(self):
return self.grade
def get_year(self):
return year
class Employee(Staff):
"""普通员工类"""
def __init__(self, uid, name, job, grade, year):
super().__init__(uid, name, job, grade, year)
def salary(self):
return 3000 + 500 * self.grade + 50 * self.year
def promotion(self, num):
"""升职"""
if self.grade + num > 10:
return Teamleader(self.uid, self.name, "T", 1, self.year)
else:
return Employee(self.uid, self.name, self.job, self.grade + num, self.year)
def demotion(self, num):
"""降职"""
return Employee(self.uid, self.name, self.job, max(self.grade - num, 1), self.year)
class Teamleader(Staff):
"""组长类"""
def __init__(self, uid, name, job, grade, year):
super().__init__(uid, name, job, grade, year)
def salary(self):
return 4000 + 800 * self.grade + 100 * self.year
def promotion(self, num):
"""升职"""
if self.grade + num > 6:
return Manager(self.uid, self.name, "M", 1, self.year)
else:
return Teamleader(self.uid, self.name, self.job, self.grade + num, self.year)
def demotion(self, num):
"""降职"""
if self.grade - num <= 0:
return Employee(self.uid, self.name, "E", 10, self.year)
else:
return Teamleader(self.uid, self.name, self.job, self.grade - num, self.year)
class Manager(Staff):
"""经理类"""
def __init__(self, uid, name, job, grade, year):
super().__init__(uid, name, job, grade, year)
def salary(self):
return 5000 + 1000 * (self.grade + self.year)
def promotion(self, num):
"""升职"""
return Manager(self.uid, self.name, self.job, min(self.grade + num, 3), self.year)
def demotion(self, num):
"""降职"""
if self.grade - num <= 0:
return Teamleader(self.uid, self.name, "T", 6, self.year)
else:
return Manager(self.uid, self.name, self.job, self.grade - num, self.year)
class GradeMixin:
"""Mixin类:级别判断相关的组件"""
def check_grade(self, job, grade):
if job == 'E':
while grade > 10:
grade = int(input("该职位最高级别为10,请重新录入级别:"))
elif job == 'T':
while grade > 6:
grade = int(input("该职位最高级别为6,请重新录入级别:"))
elif job == 'M':
while grade > 3:
grade = int(input("该职位最高级别为3,请重新录入级别:"))
return grade
class ManagementSystem(GradeMixin):
"""管理系统类"""
def __init__(self):
self.staffs = {}
self.uid = 10000
self.jobs = {'E':'普通员工', 'T':'组长', 'M':'经理'}
def regist_staff(self):
"""注册新员工"""
name = input("姓名:")
job = input("职位(E.普通员工;T.组长;M.经理):")
year = int(input("工龄:"))
grade = int(input("级别:"))
grade = self.check_grade(job, grade)
if job == 'E':
self.staffs[self.uid] = Employee(self.uid, name, job, grade, year)
elif job == 'T':
self.staffs[self.uid] = Teamleader(self.uid, name, job, grade, year)
elif job == 'M':
self.staffs[self.uid] = Manager(self.uid, name, job, grade, year)
print(f"录入成功!姓名:{name},工号:{self.uid},薪资:{self.staffs[self.uid].salary()}")
self.uid += 1
def query_staff(self):
"""员工查询"""
uid = self.confirm_uid()
if uid:
print(f"姓名:{self.staffs[uid].name}")
print(f"职位:{self.staffs[uid].job}")
print(f"级别:{self.staffs[uid].grade}")
print(f"工龄:{self.staffs[uid].year}")
print(f"薪资:{self.staffs[uid].salary()}")
else:
print("该工号不存在!")
def query_job(self):
"""职位查询"""
ins = input("职位(E.普通员工;T.组长;M.经理):")
count = 0
res = []
for value in self.staffs.values():
if value.job == ins:
res.append(value)
count += 1
if count:
print(f"目前{self.jobs[ins]}共有 {count} 人:")
for each in res:
print(f"{each.uid} - {each.name}")
else:
print(f"目前公司没有{self.jobs[ins]}!")
def promotion(self):
"""升职"""
uid = self.confirm_uid()
if uid:
current_salary = self.staffs[uid].salary()
print(f"{self.staffs[uid].name},工号:{uid},当前职位:{self.staffs[uid].job}{self.staffs[uid].grade},当前薪资:{current_salary}")
num = int(input("请输入需要增加的级数:"))
self.staffs[uid] = self.staffs[uid].promotion(num)
print("升级成功!")
new_salary = self.staffs[uid].salary()
print(f"{self.staffs[uid].name},工号:{uid},升级后职位:{self.staffs[uid].job}{self.staffs[uid].grade},升级后薪资:{new_salary}({new_salary - current_salary:+})")
else:
print("该工号不存在!")
def demotion(self):
"""降职"""
uid = self.confirm_uid()
if uid:
current_salary = self.staffs[uid].salary()
print(f"{self.staffs[uid].name},工号:{uid},当前职位:{self.staffs[uid].job}{self.staffs[uid].grade},当前薪资:{current_salary}")
num = int(input("请输入需要减少的级数:"))
self.staffs[uid] = self.staffs[uid].demotion(num)
print("降级成功!")
new_salary = self.staffs[uid].salary()
print(f"{self.staffs[uid].name},工号:{uid},降级后职位:{self.staffs[uid].job}{self.staffs[uid].grade},降级后薪资:{new_salary}({new_salary - current_salary:+})")
else:
print("该工号不存在!")
def confirm_uid(self):
"""确认工号是否存在"""
uid = int(input("请输入工号:"))
if self.staffs.get(uid):
return uid
return False
def query(self):
"""查询界面"""
ins = input("1.员工查询;2.职位查询:")
if ins == '1':
self.query_staff()
elif ins == '2':
self.query_job()
def display(self):
"""显示主界面"""
while True:
ins = input("\n1.录入;2.查询;3.升级;4.降级;5.退出:")
if ins == '1':
self.regist_staff()
elif ins == '2':
self.query()
elif ins == '3':
self.promotion()
elif ins == '4':
self.demotion()
elif ins == '5':
break
def main():
m = ManagementSystem()
m.display()
main()
|
|