|
|
发表于 2025-8-10 21:32:11
|
显示全部楼层
请回复您的答案^_^
-------- 问答题 --------
第 0 题的答案是:不在乎对象的具体类型,直接执行对象中存在的同名方法
第 1 题的答案是:能够保持接口不变的情况下,针对不同的入参执行不同的方法输出类似的结果
第 2 题的答案是:可以,这是运算符多态的一种形式
第 3 题的答案是:When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck.
第 4 题的答案是:同时实现了高内聚和低耦合
第 5 题的答案是:不属于
-------- 动动手 --------
请将第 0 题的代码写在下方:
class Employee:
MAX_GRADE = 10
JOB_CODE = "E"
def __init__(self, name, grade, year, uid):
self.name = name
self.grade = grade
self.year = year
self.uid = uid
self.job = "普通员工"
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
def promote(self, levels):
new_grade = self.grade + levels
if new_grade > self.MAX_GRADE:
return Teamleader(self.name, 1, self.year, self.uid)
self.grade = new_grade
return self
def demote(self, levels):
new_grade = self.grade - levels
# 不能降级到0级以下
if new_grade < 1:
return None
self.grade = new_grade
return self
class Teamleader(Employee):
MAX_GRADE = 6
JOB_CODE = "T"
def __init__(self, name, grade, year, uid):
super().__init__(name, grade, year, uid)
self.job = "组长"
def salary(self):
return 4000 + 800 * self.grade + 100 * self.year
def promote(self, levels):
new_grade = self.grade + levels
if new_grade > self.MAX_GRADE:
return Manager(self.name, 1, self.year, self.uid)
self.grade = new_grade
return self
def demote(self, levels):
new_grade = self.grade - levels
if new_grade < 1:
return Employee(self.name, Employee.MAX_GRADE, self.year, self.uid)
self.grade = new_grade
return self
class Manager(Employee):
MAX_GRADE = 3
JOB_CODE = "M"
def __init__(self, name, grade, year, uid):
super().__init__(name, grade, year, uid)
self.job = "经理"
def salary(self):
return 5000 + 1000 * (self.grade + self.year)
def promote(self, levels):
new_grade = self.grade + levels
# 已经是最高职位
if new_grade > self.MAX_GRADE:
return self
self.grade = new_grade
return self
def demote(self, levels):
new_grade = self.grade - levels
if new_grade < 1:
return Teamleader(self.name, Teamleader.MAX_GRADE, self.year, self.uid)
self.grade = new_grade
return self
class EmployeeSystem:
def __init__(self):
self.employees = {}
self.next_uid = 10000
def add_employee(self):
name = input("姓名:")
while True:
job = input("职位(E.普通员工;T.组长;M.经理):").upper()
if job in ['E', 'T', 'M']:
break
print("无效职位,请重新输入!")
while True:
try:
year = int(input("工龄:"))
break
except:
print("错误:请输入正常年龄数字")
if job == 'E':
max_grade = Employee.MAX_GRADE
elif job == 'T':
max_grade = Teamleader.MAX_GRADE
else:
max_grade = Manager.MAX_GRADE
while True:
try:
grade = int(input("级别:"))
except:
print("错误:请输入正常级别数字")
continue
if 1 <= grade <= max_grade:
break
print(f"该职位最高级别为 {max_grade} ,请重新录入级别!")
uid = self.next_uid
self.next_uid += 1
if job == 'E':
employee = Employee(name, grade, year, uid)
elif job == 'T':
employee = Teamleader(name, grade, year, uid)
else:
employee = Manager(name, grade, year, uid)
self.employees[uid] = employee
print(f"录入成功!姓名:{name},工号:{uid},薪资:{employee.salary()}")
def query_employee(self):
while True:
try:
uid = int(input("请输入工号:"))
break
except:
print("错误:请输入正常工号数字")
if uid in self.employees:
e = self.employees[uid]
print(f"姓名:{e.get_name()}")
print(f"职位:{e.get_job()}")
print(f"级别:{e.get_grade()}")
print(f"工龄:{e.get_year()}")
print(f"薪资:{e.salary()}")
else:
print("该工号不存在!")
def query_job(self):
while True:
job = input("职位(E.普通员工;T.组长;M.经理):").upper()
if job in ['E', 'T', 'M']:
break
print("无效职位,请重新输入!")
job_name = {'E': '普通员工', 'T': '组长', 'M': '经理'}[job]
employees = [e for e in self.employees.values() if e.JOB_CODE == job]
print(f"目前{job_name}共有{len(employees)}人:")
for e in employees:
print(f"{e.get_uid()} - {e.get_name()}")
def promote_employee(self):
while True:
try:
uid = int(input("请输入工号:"))
break
except:
print("错误:请输入正常工号数字")
if uid not in self.employees:
print("该工号不存在!")
return
employee = self.employees[uid]
print(f"{employee.get_name()},工号:{employee.get_uid()},当前职位:{employee.JOB_CODE}{employee.get_grade()},当前薪资:{employee.salary()}")
while True:
try:
levels = int(input("请输入需要增加的级数:"))
break
except:
print("错误:请输入正常等级数字")
continue
old_salary = employee.salary()
new_employee = employee.promote(levels)
if new_employee != employee:
self.employees[uid] = new_employee
print(f"升职成功!")
else:
print(f"升级成功!")
print(f"{new_employee.get_name()},工号:{new_employee.get_uid()},升级后职位:{new_employee.JOB_CODE}{new_employee.get_grade()},升级后薪资:{new_employee.salary()}(+{new_employee.salary() - old_salary})")
def demote_employee(self):
while True:
try:
uid = int(input("请输入工号:"))
break
except:
print("错误:请输入正常工号数字")
if uid not in self.employees:
print("该工号不存在!")
return
employee = self.employees[uid]
print(f"{employee.get_name()},工号:{employee.get_uid()},当前职位:{employee.JOB_CODE}{employee.get_grade()},当前薪资:{employee.salary()}")
while True:
try:
levels = int(input("请输入需要减少的级数:"))
break
except:
print("错误:请输入正常等级数字")
continue
old_salary = employee.salary()
new_employee = employee.demote(levels)
if new_employee is None:
print("不能降级到0级以下!")
return
if new_employee != employee:
self.employees[uid] = new_employee
print(f"降职成功!")
else:
print(f"降级成功!")
print(f"{new_employee.get_name()},工号:{new_employee.get_uid()},降级后职位:{new_employee.JOB_CODE}{new_employee.get_grade()},降级后薪资:{new_employee.salary()}(-{old_salary - new_employee.salary()})")
def run(self):
while True:
print("\n1.录入;2.查询;3.升级;4.降级;5.退出:", end="")
choice = input().strip()
if choice == '1':
self.add_employee()
elif choice == '2':
print("1.员工查询;2.职位查询:", end="")
sub_choice = input().strip()
if sub_choice == '1':
self.query_employee()
elif sub_choice == '2':
self.query_job()
else:
print("无效选择!")
elif choice == '3':
self.promote_employee()
elif choice == '4':
self.demote_employee()
elif choice == '5':
print("感谢使用员工管理系统!")
break
else:
print("无效选择,请重新输入!")
if __name__ == "__main__":
system = EmployeeSystem()
system.run() |
|