import easygui as g
# 员工及其方法类定义
class Worker:
def __init__(self, uid, name, job, grade, year):
self.uid = uid # 工号
self.name = name# 姓名
self.job = job #岗位:普通员工(E)、组长(T)、经理(M)
self.grade = grade # 级别:1级、2级....
self.year = year # 工龄:1,2,3,4,5.....
self.salary = self.salary()
def get_uid(self):
return self.uid
def get_name(self):
return self.name
def get_grade(self):
return self.grade
def get_year(self):
return self.get_year
def salary(self):
if self.job =='E':
salary = 3000 + 500 * self.grade + 50 * self.year
elif self.job == 'T':
salary = 4000 + 800 * self.grade + 100 * self.year
else:
salary = 5000 + 1000 * (self.grade + self.year)
return salary
class Employee(Worker):
def __init__(self, uid, name, job, grade, year):
super().__init__(uid, name, job, grade, year)
self.max_grade = 10
class Teamleader(Worker):
def __init__(self, uid, name, job, grade, year):
super().__init__(uid, name, job, grade, year)
self.max_grade = 6
class Manager(Worker):
def __init__(self, uid, name, job, grade, year):
super().__init__(uid, name, job, grade, year)
self.max_grade = 3
# 管理类及方法定义
class Manage:
def __init__(self):
self.workers = {}
self.uid = 10000
def job_check(self, job):
if job not in 'ETM':
return False
else:
return True
def is_num_check(self, strNum):
try:
strTonum = int(strNum)
return True
except:
return False
def grade_check(self,job, grade):
if job == 'E' and (0 <= int(grade) <= 10):
return True
elif job == 'T' and (0 <= int(grade) <= 6):
return True
elif job == 'M' and (0 <= int(grade) <= 3):
return True
else:
return False
def worker_create(self, uid, name, job, grade, year):
if job == 'E':
return Employee(uid, name, job, grade, year)
elif job == 'T':
return Teamleader(uid, name, job, grade, year)
else:
return Manager(uid, name, job, grade, year)
def worker_regist(self):
msg = '请录入员工信息'
title= 'FishC员工管理系统'
fields = ['*姓名','*职位(E-普通员工,T-组长, M-经理)', '*请输入级别(数值):','*请输入工龄(数值):']
values = []
while True:
worker_msg = g.multenterbox(msg = msg
, title = title
, fields = fields
, values = values
, callback=None
, run=True)
err_msg = ''
for each in worker_msg:
if len(each) == 0:
err_msg += '信息填写不完整,请填写准确的员工信息'
break
if len(err_msg) == 0:
if self.job_check(worker_msg):
if self.is_num_check(worker_msg) and self.is_num_check(worker_msg):
if self.grade_check(worker_msg,worker_msg):
worker = self.worker_create(self.uid,worker_msg,worker_msg, int(worker_msg), int(worker_msg))
self.workers = worker
self.uid += 1
break
else:
err_msg += '级别超出职位范围:请填写准确的债职位范围内的信息\r\n'
else:
err_msg += '数值信息录入不合法:请填写整型数值\r\n'
else:
err_msg = '职位信息不合法:必须为英文大写字母E/T/M中的一个\r\n'
if len(err_msg) == 0:
right_msg = f'录入成功!姓名:{worker.name},工号:{worker.uid},薪资:{worker.salary}'
g.msgbox(msg= right_msg,
title = title)
else:
g.msgbox(msg = err_msg
, title = title)
values = worker_msg
def worker_search(self):
cnt = 0
search_msg = ''
search_result = False
choice = g.indexbox(msg = '请选择你的查询模式:'
,title = 'FishC员工管理系统'
, choices = ('员工查询','职位查询'))
if choice == 0:
search_uid = g.integerbox(msg='请输入你要查询的工号'
, title='FishC员工管理系统'
, lowerbound=10000
, upperbound=99999)
for key,each in self.workers.items():
if each.uid == search_uid:
search_msg = f'姓名:{each.name}\r\n职位:{each.job}\r\n级别:{each.grade}\r\n工龄:{each.year}\r\n薪资:{each.salary}'
search_result = True
break
if not search_result:
search_msg = '该工号不存在'
else:
search_job = g.choicebox(msg='请输入你要查询的岗位:E-普通员工;T-组长;M-经理'
, title='FishC员工管理系统'
,choices = ['E','T','M']
)
for key,each in self.workers.items():
if each.job == search_job:
search_msg += f'{each.uid} - {each.name}\r\n'
cnt += 1
search_result = True
if search_result:
search_msg = f'目前有{search_job}共{cnt}人:\r\n{search_msg}'
else:
search_msg = '该岗位暂无员工!'
g.msgbox(msg= search_msg
, title='FishC员工管理系统')
return
def grade_up(self):
uid_get = g.integerbox(msg='请输入员工工号'
, title='FishC员工管理系统'
, lowerbound=10000
, upperbound=99999)
worker = self.workers
worker_msg = f'{worker.name};工号:{worker.uid};当前职位:{worker.job}{worker.grade};当前薪资:{worker.salary}'
g.msgbox(msg = worker_msg
, title='FishC员工管理系统')
up_grade = g.integerbox(msg='请输入需要增加的级数'
, title='FishC员工管理系统'
, lowerbound=0
, upperbound=20)
if (worker.grade + up_grade) <= worker.max_grade:
worker.grade = worker.grade + up_grade
up_msg = f'升级成功!\r\n{worker.name};工号:{worker.uid};升职后职位:{worker.job}{worker.grade};升职后薪资:{worker.salary}'
elif worker.job == 'M':
worker.grade= worker.max_grade
up_msg = f'升级成功!\r\n{worker.name};工号:{worker.uid};升职后职位:{worker.job}{worker.grade};升职后薪资:{worker.salary}'
elif worker.job =='E':
new_worker = Teamleader(worker.uid, worker.name, 'T', 1, worker.year)
self.workers = new_worker
up_msg = f'升级成功!\r\n{new_worker.name};工号:{new_worker.uid};升职后职位:{new_worker.job}{new_worker.grade};升职后薪资:{new_worker.salary}'
else:
new_worker = Teamleader(worker.uid, worker.name, 'M', 1, worker.year)
self.workers = new_worker
up_msg = f'升级成功!\r\n{new_worker.name};工号:{new_worker.uid};升职后职位:{new_worker.job}{new_worker.grade};升职后薪资:{new_worker.salary}'
g.msgbox(msg = up_msg
, title='FishC员工管理系统')
def degrade(self):
uid_get = g.integerbox(msg='请输入员工工号'
, title='FishC员工管理系统'
, lowerbound=10000
, upperbound=99999)
worker = self.workers
worker_msg = f'{worker.name};工号:{worker.uid};当前职位:{worker.job}{worker.grade};当前薪资:{worker.salary}'
g.msgbox(msg = worker_msg
, title='FishC员工管理系统')
degrade = g.integerbox(msg='请输入需要降低的级数'
, title='FishC员工管理系统'
, lowerbound=0
, upperbound=20)
if (worker.grade - degrade) > 0:
worker.grade = worker.grade - degrade
demsg = f'降级成功!\r\n{worker.name};工号:{worker.uid};升职后职位:{worker.job}{worker.grade};升职后薪资:{worker.salary}'
elif worker.job == 'E':
worker.grade= 1
up_msg = f'降级成功!\r\n{worker.name};工号:{worker.uid};升职后职位:{worker.job}.{worker.grade};升职后薪资:{worker.salary}'
elif worker.job =='T':
new_worker = Teamleader(worker.uid, worker.name, 'E',10 , worker.year)
self.workers = new_worker
demsg = f'降级成功!\r\n{new_worker.name};工号:{new_worker.uid};升职后职位:{new_worker.job}{new_worker.grade};升职后薪资:{new_worker.salary}'
else:
new_worker = Teamleader(worker.uid, worker.name, 'T', 6 , worker.year)
self.workers = new_worker
demsg = f'降级成功!\r\n{new_worker.name};工号:{new_worker.uid};升职后职位:{new_worker.job}{new_worker.grade};升职后薪资:{new_worker.salary}'
g.msgbox(msg = demsg
, title='FishC员工管理系统')
# 主程序
def main():
manage = Manage()
while True:
choice = g.indexbox(msg = '请选择你要进行的操作',
title = '欢迎使用FishC员工管理系统',
choices = ('1. 员工录入','2. 信息查询','3. 员工升级','4. 员工降级','5. 退出程序'),
)
#调试使用
#for each in manage.members:
# print(f'{each.card_no};{each.user_name};{each.psw};{each.score}')
if choice == 0:
manage.worker_regist()
elif choice == 1:
manage.worker_search()
elif choice == 2:
manage.grade_up()
elif choice == 3:
manage.degrade()
else:
break
main()
{:5_95:}
课后作业
0.不同的类的方法相同
1.减少代码量的同时,增加代码的功能
2.可以
3.看他的方法是鸭子,他就是鸭子
4.增加了内聚
5.不是
动动手
0.没有做出来,太多不想写了
My_namelist = []
def get_name():
My_name = input('姓名:')
while My_name in My_namelist:
My_name = input('姓名已存在, 请从新输入姓名: ')
My_namelist.append(My_name)
return My_name
def get_job():
returninput('职位 (E.普通员工;T.组长;M.经理) :')
Job_dict = {'E':['普通员工', 10],'T':['组长', 6],'M':['经理', 3]}
def get_grade():
return int(input('级别: '))
def get_year():
return input('工龄:')
def get_uid():
return My_namelist.index() + 1000
def salary(self):
if self.My_job == 'E':
self.My_salary = 3000 + 500 * self.My_grade + 50 * self.My_year
elif self.My_job == 'T':
self.My_salary = 4000 + 800 * self.My_grade + 100 * self.My_year
elif self.My_job == 'M':
self.My_salary = 5000 + 1000 * (self.My_grade + self.My_year)
print(f'录入成功! 姓名: {self.My_name}, 工号:{self.My_uid}, 薪资:{self.My_salary} ')
class Company:#类字典
def __init__(self):
self.My_job = get_job()
self.My_grade = get_grade()
self.My_year = get_year()
self.My_uid = get_uid()
def main():
while True:
My_choose = input('1.录入;2.查询;3.升级;4.降级;5.退出:')
if My_choose == '1':
My_name = get_name()
globals() = Company()
elif My_choose == '2':
My_choose2 = input('1.员工查询;2.职位查询: ')
if My_choose2 == '1':
My_uid = int(input('请输入工号:'))
if (My_uid -1000 ) >= len(My_namelist):
print('该工号不存在!')
else:
My_name = My_namelist
print(f'姓名: {My_name}')
print(f'职位:{globals().My_job}')
print(f'级别:{globals().My_grade}')
print(f'工龄:{globals().My_year}')
print(f'薪资: {salary(globals())}')
else:
My_job = get_job()
counts = 0
dict1 = {}
for each in My_namelist:
ifglobals().My_job == My_job:
counts += 1
dict1.My_uid] = each
if counts == 0:
print('目前公司没有组长')
print(f'目前{Job_dict}共有 {counts} 人:')
for each in dict1:
print(f'{each} - {dict1}')
elif My_choose == '3':
My_uid = int(input('请输入工号:'))
if (My_uid -1000 ) >= len(My_namelist):
print('该工号不存在!')
else:
x = globals()]
print(f'{My_namelist}, 工号: {My_uid}, 当前职位:{x.My_job}{x.My_grade}, 当前薪资{salary(x)}')
Up_grade = int(input('请输入需要增加的级数: '))
if x.My_grade + Up_grade
elif My_choose == '4':
Downgrade()
elif My_choose == '5':
break
main()
1
1
1
答案
问答题
0. 面对不同的对象,同样的方法接口可以实现不同的功能
1. 增加程序的灵活性和可扩展性
2. 可以
3. 如果它走起来像鸭子,叫起来像鸭子,那么它就是鸭子
4. 低耦合
5. 不是
动动手
class Member:
def __init__(self, name, job, grade, year, uid):
self.name = name
self.job = job
self.grade = grade
self.year = year
self.uid = uid
self.wage = 0
def wages(self):
if self.job == 'E':
self.wage = 3000 + 500*int(self.grade) + 50*int(self.year)
if self.job == 'T':
self.wage = 4000 + 800*int(self.grade) + 100*int(self.year)
if self.job =='M':
self.wage = 5000 + 1000*(int(self.grade )+ int(self.year))
return self.wage
class EIM(Member):
def __init__(self):
self.members = {}
self.uid = 10000
# 程序功能入口
def welcome(self):
ins = 0
#print("欢迎使用员工管理系统")
while ins != '5':
ins = input("1.录入;2.查询;3.升级;4.降级;5.退出:")
if ins == '1':
self.enter()
if ins == '2':
self.query()
if ins == '3':
self.upgradation()
if ins == '4':
self.downgrading()
if ins == '5':
pass
#print("感谢使用,再见!")
# 程序功能:创建新卡
def enter(self):
name = input("姓名:")
job = input("职位(E.普通员工;T.组长;M.经理):")
year = int(input('工龄:'))
grade = int(input('级别:'))
member = Member(name, job, grade, year,self.uid)
wage = member.wages()
print(wage)
self.members = member
print(f"录入成功!姓名:{name},工号:{self.uid},薪资:{wage}")
self.uid += 1
#查询
def query(self):
n = int(input('1.员工查询;2.职位查询:'))
if n == 1:
uid = int(input('请输入工号:'))
a = uid in self.members.keys()
if a == False:
print('该工号不存在!')
else:
name = self.members.get(uid).name
job = self.members.get(uid).job
grade = self.members.get(uid).grade
year = self.members.get(uid).year
wage = self.members.get(uid).wage
print(f"姓名:{name} \n 职位:{job} \n 级别:{grade} \n 工龄:{year} \n薪资:{wage}")
if n == 2:
job = input("职位(E.普通员工;T.组长;M.经理):")
number = 0
people = {}
for h in range(10000,self.uid,1):
jobb = self.members.get(h).job
if jobb == job:
people = self.members.get(h).name
number += 1
print(f'目前{job}共有{number}人:')
for key in people:
print(f'{key}-{people}\n')
def upgradation(self):
pass
def downgrading(self):
pass
n=EIM()
n.welcome()
*
1
{:5_109:}
1
0.不同参数不同对待
1.简洁
2.可以
3.不知道
4.降低了炸耦合
5.不属于
.
问答题:
0.什么参数都可以传入,根据传入的不同做出不同的反应
1.好使
2.可以
3.不知道
4.增强内聚
5.应该不算吧
看看
1
1
查看解析
0.通过类的定义区分作用
1.可以根据参数执行不同的方法
2.是多态
3.丑小鸭装白天鹅?
4.降低耦合?
5.不是
动动手:
class Members:
def __init__(self,name,job,grade,year,uid,salary,jobname):
self.name=name
self.job=job
self.grade=grade
self.year=year
self.uid=uid
self.salary=self.get_salary()
self.jobname=self.get_jobname()
def get_salary(self):
if self.job=='E':
self.salary=3000+500*self.grade+50*self.year
elif self.job=='T':
self.salary=4000+800*self.grade+100*self.year
self.jobname="组长"
elif self.job=='M':
self.salary=5000+1000*self.grade+1000*self.year
return self.salary
def get_jobname(self):
if self.job=='E':
self.jobname="普通员工"
elif self.job=='T':
self.jobname="组长"
elif self.job=='M':
self.jobname="经理"
return self.jobname
class Employee(Members):
def __init__(self,name,job,grade,year,uid,salary=None):
super().__init__(name,job,grade,year,uid,salary=None)
self.job="E"
self.jobname="普通员工"
def salary(self):
super().salary()
class Manage():
def __init__(self):
self.memebers={}
self.uid=10000
self.Job=['E','T','M']
def manage(self):
a='0'
while a!="5":
print()
a=input("1.录入;2.查询;3.升级;4.降级;5.退出:")
if a=="1":
self.getin()
elif a=="2":
self.find()
elif a=="3":
self.up()
elif a=='4':
self.down()
def creategrade(self,job,grade):
if job=='E':
if grade>10:
return
elif grade<1:
return
else:
return
elif job=='T':
if grade>6:
return
elif grade<1:
return
else:
return
elif job=='M':
if grade>3:
return
elif grade<1:
return
else:
return
def getin(self):
name=input("姓名:")
job=input("职位(E.普通员工;T.组长;M.经理)")
while job!="E" and job!="T" and job!="M":
job=input("请按照对应字母录入职位(E.普通员工;T.组长;M.经理)")
year=int(input("工龄:"))
grade=int(input("级别:"))
gg=self.creategrade(job,grade)
while not gg:
grade=int(input(f"该职位最高级别为{gg},请重新录入级别:"))
gg=self.creategrade(job,grade)
self.memebers=Members(name,job,grade,year,self.uid,0,"无")
print(f"录入成功!姓名:{name},工号:{self.uid},薪资:{self.memebers.salary}")
self.uid+=1
def find(self):
tt=input("1.员工查询;2.职位查询:")
if tt=='1':
uid=int(input("请输入工号:"))
if uid>self.uid:
print("该工号不存在")
else:
print(f"姓名:{self.memebers.name}")
print(f"职位:{self.memebers.job}")
print(f"级别:{self.memebers.grade}")
print(f"工龄:{self.memebers.year}")
print(f"薪资:{self.memebers.salary}")
elif tt=="2":
job=input("职位(E.普通员工;T.组长;M.经理)")
count=0
x=[]
for i in range(10000,10000+len(self.memebers)):
if self.memebers.job==job:
jobname=self.memebers.jobname
count+=1
x.append(i)
print(x)
if count==0:
print("公司目前没有")
else:
print(f"目前{jobname}有{count}人:")
for each in x:
print(f"{each}-{self.memebers.name}")
else:
print("输入错误!")
def up(self):
uid=int(input("请输入工号:"))
sign=0
if uid>self.uid:
print("该工号不存在")
else:
print(f"{self.memebers.name},工号:{uid},当前职位:{self.memebers.job}{self.memebers.grade},当前薪资:{self.memebers.salary}")
salarybef=self.memebers.salary
change=int(input("请输入需要增加的级数:"))
grade=self.memebers.grade+change
job=self.memebers.job
while not self.creategrade(job,grade):
if self.Job.index(job)+1<len(self.Job):
grade=grade-self.creategrade(job,grade)
job=self.Job
sign=1
else:
print("超出职级上限!")
break
else:
if sign==1:
grade=1
self.memebers=Members(self.memebers.name,job,grade,self.memebers.year,uid,0,"无")
salaryafter=self.memebers.salary
print("升级成功!")
print(f"{self.memebers.name},工号:{uid},升级后职位:{self.memebers.job}{self.memebers.grade},升级后薪资:{salaryafter}({salaryafter-salarybef:+})")
def down(self):
uid=int(input("请输入工号:"))
sign=0
if uid>self.uid:
print("该工号不存在")
else:
print(f"{self.memebers.name},工号:{uid},当前职位:{self.memebers.job}{self.memebers.grade},当前薪资:{self.memebers.salary}")
salarybef=self.memebers.salary
change=int(input("请输入需要降低的级数:"))
grade=self.memebers.grade-change
job=self.memebers.job
while not self.creategrade(job,grade):
if self.Job.index(job)>0:
grade=grade+self.creategrade(job,grade)-change
job=self.Job
sign=1
else:
print("超出职级下限!")
break
else:
if sign==1:
grade=self.creategrade(job,100)
self.memebers=Members(self.memebers.name,job,grade,self.memebers.year,uid,0,"无")
salaryafter=self.memebers.salary
print("降级成功!")
print(f"{self.memebers.name},工号:{uid},升级后职位:{self.memebers.job}{self.memebers.grade},降级后薪资:{salaryafter}({salaryafter-salarybef:+})")
def main():
mm=Manage()
mm.manage()