代码求助
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
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 get_salary(self):
return self.asalary
class Mixin:
def confirm_grade(self,job,grade):
if job == 'E':
while int(grade)>10:
grade=input('该职位最高级别为10,请重新录入级别:')
if job == 'T':
while int(grade)>6:
grade=input('该职位最高级别为6,请重新录入级别:')
if job == 'M':
while int(grade)>3:
grade=input('该职位最高级别为3,请重新录入级别:')
return grade
def salary(self,job,grade,year):
if job == 'E':
asalary=3000+500*int(grade)+50*int(year)
if job == 'T':
asalary=4000+800*int(grade)+100*int(year)
if job == 'M':
asalary=5000+1000*(int(grade)+int(year))
return asalary
class Manage(Mixin):
def __init__(self):
self.members={}
self.uid=10000
self.joblist=[]
def welcome(self):
ins=0
condition=1
while condition:
ins=input("\n1.录入;2.查询;3.升级;4.降级;5.退出:")
if ins=='1':
self.add_member()
if ins=='2':
self.get_member()
if ins=='3':
self.upgrade_member()
if ins=='4':
self.downgrade_member()
if ins=='5':
condition=0
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=Member(uid,name,job,year,grade,asalary)
print(f'录入成功!姓名:{name},工号:{uid},薪资:{asalary}')
def get_member(self):
type=int(input('1.员工查询;2.职位查询:'))
if type == 1:
uid=int(input('请输入员工号:'))
print(self.members.values())
if uid not in list(self.members.values()):
print('该工号不存在!')
else:
name=self.members.get(uid).name
job=self.members.get(uid).job
year=self.members.get(uid).year
grade=self.members.get(uid).grade
asalary=self.members.get(uid).asalary
print(f'姓名:{name}')
print(f'职位:{job}')
print(f'级别:{grade}')
print(f'工龄:{year}')
print(f'薪资:{asalary}')
if type == 2:
jobins=input('职位(E.普通员工;T.组长;M.经理):')
if jobins=='E':
for each in self.members:
if each.job == jobins:
self.joblist.append(each)
if self.joblist ==[]:
print('目前公司没有普通员工!')
else:
print(f'目前普通员工共有{len(self.joblist)}人:')
for each in self.joblist:
print(f'{each}-{each.name}')
if jobins=='T':
for each in self.members:
if each.job == jobins:
self.joblist.append(each)
if self.joblist ==[]:
print('目前公司没有组长!')
else:
print(f'目前组长共有{len(self.joblist)}人:')
for each in self.joblist:
print(f'{each}-{each.name}')
if jobins=='M':
for each in self.members:
if each.job == jobins:
self.joblist.append(each)
if self.joblist ==[]:
print('目前公司没有经理!')
else:
print(f'目前经理共有{len(self.joblist)}人:')
for each in self.joblist:
print(f'{each}-{each.name}')
def upgrade_member(self):
uidins=input('请输入工号:')
print(f'{self.members.get(uidins).name},工号:{self.members.get(uidins).uid},当前职位{self.members.get(uidins).job}{self.members.get(uidins).grade},当前薪资:{self.members.get(uidins).asalary}')
up=int(input('请输入需要增加的级数:'))
self.members.get(uidins).grade+=up
if self.members.get(uidins).job=='E' and self.members.get(uidins).grade >10:
self.members.get(uidins).job='T'
self.members.get(uidins).grade=1
if self.members.get(uidins).job=='T' and self.members.get(uidins).grade >6:
self.members.get(uidins).job='M'
self.members.get(uidins).grade=1
print('升级成功!')
print(f'{self.members.get(uidins).name},工号:{self.members.get(uidins).uid},升级后职位{self.members.get(uidins).job}{self.members.get(uidins).grade},升级后薪资:{self.members.get(uidins).asalary}')
def downgrade_member(self):
uidins=input('请输入工号:')
print(f'{self.members.get(uidins).name},工号:{self.members.get(uidins).uid},当前职位{self.members.get(uidins).job}{self.members.get(uidins).grade},当前薪资:{self.members.get(uidins).asalary}')
down=int(input('请输入需要减少的级数:'))
self.members.get(uidins).grade-=down
if self.members.get(uidins).job=='M' and self.members.get(uidins).grade <0:
self.members.get(uidins).job='T'
self.members.get(uidins).grade=6
if self.members.get(uidins).job=='T' and self.members.get(uidins).grade <0:
self.members.get(uidins).job='E'
self.members.get(uidins).grade=10
print('降级成功!')
print(f'{self.members.get(uidins).name},工号:{self.members.get(uidins).uid},降级后职位{self.members.get(uidins).job}{self.members.get(uidins).grade},降级后薪资:{self.members.get(uidins).asalary}')
def main():
m=Manage()
m.welcome()
以上这段代码中,get_member函数部分的代码是否可实现,或有什么问题吗? 你的代码有多个问题,比如未初始化的变量、逻辑错误等。下面是主要问题和修正建议:
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},请重新录入级别:")
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 = 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 =
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 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2025-2-18 16:09
你的代码有多个问题,比如未初始化的变量、逻辑错误等。下面是主要问题和修正建议:
1. 在类 `Manage`...
回复中的第5个问题请具体展开说说,并说说应该如何修改 andreahhhhhh 发表于 2025-02-18 16:10
FishC 发表于 2025-2-18 16:09
你的代码有多个问题, ...
好的,第5个问题提及的是 **`get_member` 方法中无法正确访问 `self.members` 的成员信息**,下面具体展开说明问题的原因及修复方案。
问题分析:
1. **成员存储错误:**
在 `add_member` 方法中,你将每个新添加的员工对象直接赋值给了 self.members:
self.members = Member(name, job, grade, year, uid, asalary)
这样,每次添加新员工时,都会覆盖之前存储的员工数据,导致后续查询不到已添加的其他员工。
正确的做法是: self.members 应该是一个字典,键为员工的工号(uid),值为对应的 Member 对象。这样才能保存多个员工的数据。
2. **查询时访问方式有误:**
在 `get_member` 方法中,检查员工是否存在的代码如下:
if uid not in list(self.members.values()):
print('该工号不存在!')
这个逻辑是错误的,self.members.values() 返回的是员工对象,而不是工号 (uid),所以这个判断永远不会生效。
正确的做法是: 使用 if uid not in self.members: 来判断键(工号)是否存在。
3. **字典访问和打印的问题:**
即使员工存在,代码如下:
name = self.members.get(uid).name
访问成员对象的属性时没有问题,但后续逻辑中,需要更清晰地构造输出内容,并确保所有属性被正确访问和打印。
---
解决方法:
以下是修复后的代码:
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)
# 将新成员加入字典,键为工号,值为Member对象
self.members = 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("请输入员工号:"))
if uid not in self.members:# 判断工号是否存在
print("该工号不存在!")
else:
# 获取员工对象并打印详情
member = self.members
print(f"姓名:{member.name}")
print(f"职位:{member.job}")
print(f"级别:{member.grade}")
print(f"工龄:{member.year}")
print(f"薪资:{member.asalary}")
改动的部分总结如下:
[*]将 self.members 设置为一个字典,键为员工工号,值为 Member 对象。
[*]在 add_member 中,通过 self.members = Member(...) 的方式存储多个员工数据。
[*]在 get_member 中,正确地通过工号检查员工是否存在:if uid not in self.members:。
[*]根据工号检索对应的员工对象 self.members,然后访问其属性(如 member.name)。
---
验证效果:
按照上述修改后,系统可以正确录入多名员工,并支持通过工号查询员工信息。例如:
输入示例:
1.录入;2.查询;3.升级;4.降级;5.退出:1
姓名:张三
职位(E.普通员工;T.组长;M.经理):E
工龄:3
级别:5
录入成功!姓名:张三,工号:10000,薪资:5750
1.录入;2.查询;3.升级;4.降级;5.退出:2
1.员工查询;2.职位查询:1
请输入员工号:10000
姓名:张三
职位:E
级别:5
工龄:3
薪资:5750
希望这些修改对你有帮助!如果还有其他问题,欢迎随时提问!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]