|
|
发表于 2026-9-8 22:27:02
|
显示全部楼层
请回复您的答案^_^
-------- 问答题 --------
第 0 题的答案是:比如加号,比如len函数,比如类
第 1 题的答案是:可以统一处理一批对象,只要有相同的方法名字
第 2 题的答案是:可以
第 3 题的答案是:看起来像鸭子,叫起来像鸭子,尝起来像鸭子,此物就是鸭子
第 4 题的答案是:降低了耦合?
第 5 题的答案是:是吧,有重写
-------- 动动手 --------
请将第 0 题的代码写在下方:
class Employee:
def __init__(self, name, job, grade, year, uid):
self.name = name
self.job = job
self.grade = grade
self.year = year
self.uid = uid
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 self.year
def salary(self):
return 3000 + 500 * self.grade + 50 * self.year
max_grade = 10
class Teamleader(Employee):
# 与父类构造相同,只重写工资和最高级别即可
def salary(self):
return 4000 + 800 * self.grade + 100 * self.year
max_grade = 6
class Manager(Employee):
def salary(self):
return 5000 + 1000 * (self.grade + self.year)
max_grade = 3
class ManageSystem:
def __init__(self):
self.employees = {} # {工号: Employee对象}
self.next_uid = 10000 # 下一张待发放的工号
job_map = {
'E': "普通员工",
'T': "组长",
'M': "经理"
}
class_map = {
'E': Employee,
'T': Teamleader,
'M': Manager,
}
def enter_system(self):
while True:
ins = input("1.录入;2.查询;3.升级;4.降级;5.退出:")
if ins == '1':
self.add_employee()
elif ins == '2':
self.query_employee()
elif ins == '3':
self.upgrade_employee()
elif ins == '4':
self.downgrade_employee()
elif ins == '5':
break
else:
print("输入不合法,请重新输入")
def add_employee(self):
name = input("姓名:")
job = input("职位(E.普通员工,T.组长,M.经理):")
if job not in self.class_map:
print("职位输入有误!")
return
year = int(input("工龄:"))
grade = int(input("级别:"))
cls = self.class_map[job]
while grade < 1 or grade > cls.max_grade:
grade = int(input(f"该职位最高级别为{cls.max_grade},请重新录入级别:"))
employee = cls(name, job, grade, year, self.next_uid)
self.employees[self.next_uid] = employee
print(f"录入成功!姓名:{name},工号:{self.next_uid},薪资:{employee.salary()}")
self.next_uid += 1
def query_employee(self):
ins = input("1.员工查询;2.职位查询:")
if ins == '1':
uid = int(input("请输入工号:"))
if uid in self.employees:
e = self.employees[uid]
print(e.get_name())
print(e.get_job())
print(e.get_grade())
print(e.get_year())
print(e.salary())
else:
print("该工号不存在!")
elif ins == '2':
job = input("职位(E.普通员工;T.组长;M.经理):")
if job not in self.job_map:
print("职位输入有误!")
return
matched = [(uid, emp) for uid, emp in self.employees.items()
if emp.get_job() == job]
if not matched:
print(f"目前公司没有{self.job_map[job]}!")
else:
print(f"目前{self.job_map[job]}共有{len(matched)}人")
for uid, emp in matched:
print(f"{uid} - {emp.get_name()}")
def upgrade_employee(self):
uid = int(input("请输入工号:"))
if uid not in self.employees:
print("该工号不存在!")
return
e = self.employees[uid]
old_salary = e.salary()
print(f"{e.get_name()},工号:{uid},当前职位:{e.get_job()}{e.get_grade()},当前薪资:{old_salary}")
up = int(input("请输入需要增加的级数:"))
new_grade = e.get_grade() + up
if new_grade <= e.max_grade:
e.grade = new_grade
else:
if e.get_job() == 'M':
print("经理无法再升职!")
return
elif e.get_job() == 'T':
self.employees[uid] = Manager(e.get_name(), 'M', 1, e.get_year(), uid)
elif e.get_job() == 'E':
self.employees[uid] = Teamleader(e.get_name(), 'T', 1, e.get_year(), uid)
e = self.employees[uid] # 升职换类后重新取对象
new_salary = e.salary()
print("升级成功!")
print(f"{e.get_name()},工号:{uid},升级后职位:{e.get_job()}{e.get_grade()},升级后薪资:{new_salary}(+{new_salary - old_salary})")
def downgrade_employee(self):
uid = int(input("请输入工号:"))
if uid not in self.employees:
print("该工号不存在!")
return
e = self.employees[uid]
old_salary = e.salary()
print(f"{e.get_name()},工号:{uid},当前职位:{e.get_job()}{e.get_grade()},当前薪资:{old_salary}")
down = int(input("请输入需要减少的级数:"))
new_grade = e.get_grade() - down
if new_grade >= 1:
e.grade = new_grade
else:
if e.get_job() == 'E':
print("普通员工无法再降职!")
return
elif e.get_job() == 'T':
self.employees[uid] = Employee(e.get_name(), 'E', Employee.max_grade, e.get_year(), uid)
elif e.get_job() == 'M':
self.employees[uid] = Teamleader(e.get_name(), 'T', Teamleader.max_grade, e.get_year(), uid)
e = self.employees[uid] # 降职换类后重新取对象
new_salary = e.salary()
delta = new_salary - old_salary # 自带正负号,避免写成 (-{负数}) 变成 --
print("降级成功!")
print(f"{e.get_name()},工号:{uid},降级后职位:{e.get_job()}{e.get_grade()},降级后薪资:{new_salary}({delta})")
def main():
manage = ManageSystem()
manage.enter_system()
main() |
|