|
发表于 2025-2-18 16:09:46
|
显示全部楼层
你的代码有多个问题,比如未初始化的变量、逻辑错误等。下面是主要问题和修正建议:
1. 在类 `Manage` 的构造函数中,`self.joblist` 没有正确初始化。
2. `self.members` 的赋值过程中,会覆盖之前存储的成员信息。
3. 在方法 `get_member` 中,存在 `self.joblist ==` 这样的语法错误。
4. `upgrade_member` 和 `downgrade_member` 中对级别和职位的更新没有同步薪资。
5. `get_member` 中无法正确访问 `self.members` 的成员信息。
这里是一个修正后的版本:
- class Member:
- def __init__(self, name, job, grade, year, uid, asalary):
- self.name = name
- self.job = job
- self.grade = grade
- self.year = year
- self.uid = uid
- self.asalary = asalary
- class Mixin:
- def confirm_grade(self, job, grade):
- max_grade = {"E": 10, "T": 6, "M": 3}
- while int(grade) > max_grade.get(job, 10):
- grade = input(f"该职位最高级别为{max_grade[job]},请重新录入级别:")
- return grade
- def salary(self, job, grade, year):
- if job == 'E':
- return 3000 + 500 * int(grade) + 50 * int(year)
- elif job == 'T':
- return 4000 + 800 * int(grade) + 100 * int(year)
- elif job == 'M':
- return 5000 + 1000 * (int(grade) + int(year))
- return 0
- class Manage(Mixin):
- def __init__(self):
- self.members = {}
- self.uid = 10000
- def welcome(self):
- while True:
- ins = input("\n1.录入;2.查询;3.升级;4.降级;5.退出:")
- if ins == '1':
- self.add_member()
- elif ins == '2':
- self.get_member()
- elif ins == '3':
- self.upgrade_member()
- elif ins == '4':
- self.downgrade_member()
- elif ins == '5':
- break
- def add_member(self):
- name = input("姓名:")
- job = input("职位(E.普通员工;T.组长;M.经理):")
- year = input("工龄:")
- grade = input("级别:")
- grade = self.confirm_grade(job, grade)
- uid = self.uid
- self.uid += 1
- asalary = self.salary(job, grade, year)
- self.members[uid] = Member(name, job, grade, year, uid, asalary)
- print(f"录入成功!姓名:{name},工号:{uid},薪资:{asalary}")
- def get_member(self):
- type_ = int(input("1.员工查询;2.职位查询:"))
- if type_ == 1:
- uid = int(input("请输入员工号:"))
- member = self.members.get(uid)
- if not member:
- print("该工号不存在!")
- else:
- print(f"姓名:{member.name}")
- print(f"职位:{member.job}")
- print(f"级别:{member.grade}")
- print(f"工龄:{member.year}")
- print(f"薪资:{member.asalary}")
- elif type_ == 2:
- jobins = input("职位(E.普通员工;T.组长;M.经理):")
- joblist = [member for member in self.members.values() if member.job == jobins]
- if not joblist:
- print(f"目前公司没有{jobins}职位的人!")
- else:
- print(f"{jobins}职位共有{len(joblist)}人:")
- for member in joblist:
- print(f"{member.uid}-{member.name}")
- def upgrade_member(self):
- uid = int(input("请输入工号:"))
- member = self.members.get(uid)
- if not member:
- print("该工号不存在!")
- return
- up = int(input("请输入需要增加的级数:"))
- member.grade += up
- if member.job == 'E' and member.grade > 10:
- member.job, member.grade = 'T', 1
- elif member.job == 'T' and member.grade > 6:
- member.job, member.grade = 'M', 1
- member.asalary = self.salary(member.job, member.grade, member.year)
- print("升级成功!")
- print(f"{member.name}, 工号:{member.uid},升级后职位{member.job}{member.grade},升级后薪资:{member.asalary}")
- def downgrade_member(self):
- uid = int(input("请输入工号:"))
- member = self.members.get(uid)
- if not member:
- print("该工号不存在!")
- return
- down = int(input("请输入需要减少的级数:"))
- member.grade -= down
- if member.job == 'M' and member.grade <= 0:
- member.job, member.grade = 'T', 6
- elif member.job == 'T' and member.grade <= 0:
- member.job, member.grade = 'E', 10
- member.asalary = self.salary(member.job, member.grade, member.year)
- print("降级成功!")
- print(f"{member.name}, 工号:{member.uid},降级后职位{member.job}{member.grade},降级后薪资:{member.asalary}")
- manage = Manage()
- manage.welcome()
复制代码
修复后的代码更安全,并解决了逻辑问题,你可以测试看看是否符合预期需求!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|