|
|
发表于 2025-12-11 16:51:28
|
显示全部楼层
请回复您的答案^_^
-------- 问答题 --------
第 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:
employee_beginsno = 10000
employee_lastsno = 0
def __init__(self, name, job, year, grade, uid=0):
self.name = name
self.job = job
self.grade = grade
self.year = year
if uid != 0:
self.uid = uid
else:
if Employee.employee_lastsno == 0:
self.uid = Employee.employee_beginsno
else:
self.uid = Employee.employee_lastsno + 1
Employee.employee_lastsno = self.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 + self.grade * 500 + self.year * 50
class Teamleader(Employee):
def __init__(self, name, job, year, grade, uid=0):
super().__init__(name, job, year, grade, uid)
def salary(self):
return 4000 + self.grade * 800 + self.year * 100
class Manager(Employee):
def __init__(self, name, job, year, grade, uid=0):
super().__init__(name, job, year, grade, uid)
def salary(self):
return 5000 + self.grade * 1000 + self.year * 1000
class EmployeeManage:
employee_list = []
teamleader_list = []
manager_list = []
max_try_times = 3
# 职位级别,E-普通员工:10个级别;T-组长:6个级别;M-经理:3个级别
job_grade = {"E": 10, "T": 6, "M": 3}
def welcome(self):
print("欢迎使用鱼C企业员工管理系统")
while True:
oper_type = input("1.录入;2.查询;3.升级;4.降级;5.退出:").strip()
if oper_type == "1":
self.employee_lr()
elif oper_type == "2":
self.employee_cx()
elif oper_type == "3":
self.employee_sj()
elif oper_type == "4":
self.employee_jj()
elif oper_type == "5":
print("感谢使用鱼C企业员工管理系统")
break
else:
print("请输入正确的操作类型")
def employee_lr(self):
error_times = 0
name = input("姓名:").strip()
job = ""
while error_times < self.max_try_times:
job = input("职位(E.普通员工;T.组长;M.经理):").strip()
if job not in ["E", "T", "M"]:
error_times += 1
print("请输入正确的职位类型")
else:
break
else:
print("输入错误次数过多,请重新输入")
return
error_times = 0
year = 0
while error_times < self.max_try_times:
v_year = input("工龄:").strip()
if v_year.isdigit() == False or int(v_year) < 0 or int(v_year) > 100:
error_times += 1
print("请输入正确的工龄")
else:
year = int(v_year)
break
else:
print("输入错误次数过多,请重新输入")
return
error_times = 0
grade = 0
while error_times < self.max_try_times:
v_grade = input("级别:").strip()
if (
v_grade.isdigit() == False
or int(v_grade) < 0
or int(v_grade) > self.job_grade[job]
):
error_times += 1
print(f"该职位最高级别为{self.job_grade[job]},请重新输入")
else:
grade = int(v_grade)
break
else:
print("输入错误次数过多,请重新输入")
return
employee = None
if job == "E":
employee = Employee(name, job, year, grade)
self.employee_list.append(employee)
elif job == "T":
employee = Teamleader(name, job, year, grade)
self.teamleader_list.append(employee)
elif job == "M":
employee = Manager(name, job, year, grade)
self.manager_list.append(employee)
if employee:
print(
f"录入成功!姓名:{name},工号:{employee.get_uid()},薪资:{employee.salary()}"
)
def employee_cx(self):
error_times = 0
while error_times < self.max_try_times:
cx_type = input("1.员工查询;2.职位查询:").strip()
if cx_type == "1":
id = input("员工编号:").strip()
employee = self.exist_employee(id)
if employee:
self.print_employee(employee)
break
else:
print("该工号不存在!")
elif cx_type == "2":
job = input("职位(E.普通员工;T.组长;M.经理):").strip()
self.job_employee(job)
break
else:
error_times += 1
print("请输入正确的查询类型")
def employee_sj(self):
id = input("请输入工号:").strip()
employee = self.exist_employee(id)
if not employee:
print("该工号不存在!")
return
print(
f"姓名:{employee.get_name()},工号:{employee.get_uid()},职位:{employee.get_job()}{employee.get_grade()},当前薪资:{employee.salary()}"
)
job = employee.get_job()
grade = employee.get_grade()
add_grade = input("请输入要增加的级数:").strip()
if (
add_grade.isdigit() == False
or int(add_grade) < 0
or int(add_grade) + employee.get_grade() > 19
):
print("请输入正确的级别")
return
# 主要超过当前职位级别,则升级为下一个职位,并且级别设置为当前职位级别1
new_employee = None
old_salary = employee.salary()
sj_flag = True
if job == "E":
if grade + int(add_grade) > self.job_grade["E"]:
new_job = "T"
new_grade = 1
new_employee = Teamleader(
employee.get_name(),
new_job,
employee.get_year(),
new_grade,
employee.get_uid(),
)
self.teamleader_list.append(new_employee)
self.employee_list.remove(employee)
else:
employee.grade += int(add_grade)
elif job == "T":
if grade + int(add_grade) > self.job_grade["T"]:
new_job = "M"
new_grade = 1
new_employee = Manager(
employee.get_name(),
new_job,
employee.get_year(),
new_grade,
employee.get_uid(),
)
self.manager_list.append(new_employee)
self.teamleader_list.remove(employee)
else:
employee.grade += int(add_grade)
elif job == "M":
if grade + int(add_grade) > self.job_grade["M"]:
sj_flag = False
print("无法升级")
else:
employee.grade += int(add_grade)
if sj_flag:
print("升级成功!")
add_salary = new_employee.salary() - old_salary
print(
f"姓名:{new_employee.get_name()},工号:{new_employee.get_uid()},职位:{new_employee.get_job()}{new_employee.get_grade()},当前薪资:{new_employee.salary()}(+{add_salary})"
)
def employee_jj(self):
id = input("请输入工号:").strip()
employee = self.exist_employee(id)
if not employee:
print("该工号不存在!")
return
print(
f"姓名:{employee.get_name()},工号:{employee.get_uid()},职位:{employee.get_job()}{employee.get_grade()},当前薪资:{employee.salary()}"
)
job = employee.get_job()
grade = employee.get_grade()
add_grade = input("请输入要减少的级数:").strip()
if add_grade.isdigit() == False or int(add_grade) < 0:
print("请输入正确的级别")
return
# 主要小于当前职位的最低级别,则降级为下一个职位的最高级别
new_employee = None
old_salary = employee.salary()
jj_flag = True
if job == "E":
if grade - int(add_grade) <= 0:
employee.grade = 1
else:
employee.grade = grade - int(add_grade)
elif job == "T":
if grade - int(add_grade) <= 0:
new_job = "E"
new_grade = 10
new_employee = Employee(
employee.get_name(),
new_job,
employee.get_year(),
new_grade,
employee.get_uid(),
)
self.employee_list.append(new_employee)
self.teamleader_list.remove(employee)
else:
employee.grade -= int(add_grade)
elif job == "M":
if grade - int(add_grade) <= 0:
new_job = "T"
new_grade = 6
new_employee = Teamleader(
employee.get_name(),
new_job,
employee.get_year(),
new_grade,
employee.get_uid(),
)
self.teamleader_list.append(new_employee)
self.manager_list.remove(employee)
else:
employee.grade -= int(add_grade)
if jj_flag:
print("降级成功!")
add_salary = new_employee.salary() - old_salary
print(
f"姓名:{new_employee.get_name()},工号:{new_employee.get_uid()},职位:{new_employee.get_job()}{new_employee.get_grade()},当前薪资:{new_employee.salary()}({add_salary})"
)
def exist_employee(self, id):
if id.isdigit() == False:
return None
for employee in self.employee_list:
if employee.get_uid() == int(id):
return employee
for employee in self.teamleader_list:
if employee.get_uid() == int(id):
return employee
for employee in self.manager_list:
if employee.get_uid() == int(id):
return employee
return None
def print_employee(self, employee):
print(
f"姓名:{employee.get_name()}",
f"职位:{employee.get_job()}",
f"级别:{employee.get_grade()}",
f"工龄:{employee.get_year()}",
f"薪资:{employee.salary()}",
sep="\n",
)
def job_employee(self, job):
if job == "E":
if len(self.employee_list) == 0:
print("目前公司没有普通员工")
return
print(f"目前普通员工有 {len(self.employee_list)} 人:")
for employee in self.employee_list:
print(f"{employee.get_uid()} - {employee.get_name()}")
elif job == "T":
if len(self.teamleader_list) == 0:
print("目前公司没有组长")
return
print(f"目前组长有 {len(self.teamleader_list)} 人:")
for employee in self.teamleader_list:
print(f"{employee.get_uid()} - {employee.get_name()}")
elif job == "M":
if len(self.manager_list) == 0:
print("目前公司没有经理")
return
print(f"目前经理有 {len(self.manager_list)} 人:")
for employee in self.manager_list:
print(f"{employee.get_uid()} - {employee.get_name()}")
else:
print("请输入正确的职位")
def main():
manage = EmployeeManage()
manage.welcome()
main()
|
|