Heather_zero 发表于 2024-2-26 17:35:17

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()

liuupc919 发表于 2024-2-25 23:28:47

{:5_95:}

hobby3432r 发表于 2024-2-23 19:52:46

课后作业
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()

15034304191 发表于 2024-2-22 18:15:58



1

江湖大虾 发表于 2024-2-18 11:13:31

1

2604450208 发表于 2024-2-16 10:50:37

1

a826176425 发表于 2024-2-14 21:26:06

答案

王凯壮 发表于 2024-2-13 18:53:49

问答题
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()
      

chicken_roll 发表于 2024-2-13 14:03:36

*

rohde 发表于 2024-2-10 11:26:21

1

lcho201314 发表于 2024-2-9 09:07:22

{:5_109:}

我爱萝12138 发表于 2024-2-5 14:58:51

1

QAQ54520 发表于 2024-2-5 10:35:44

0.不同参数不同对待
1.简洁
2.可以
3.不知道
4.降低了炸耦合
5.不属于

无梦想的咸鱼 发表于 2024-2-3 23:52:18

.

小儿无赖 发表于 2024-1-31 13:26:33

问答题:
0.什么参数都可以传入,根据传入的不同做出不同的反应
1.好使
2.可以
3.不知道
4.增强内聚
5.应该不算吧

尹玄睿 发表于 2024-1-31 10:28:39

看看

鱼中霸王 发表于 2024-1-28 16:55:07

1

wenruo.96 发表于 2024-1-26 14:21:28

1

YOK 发表于 2024-1-26 10:58:33

查看解析

蜡笔写代码 发表于 2024-1-25 16:40:14

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()
               
页: 15 16 17 18 19 20 21 22 23 24 [25] 26 27 28 29 30 31 32 33 34
查看完整版本: 第063讲:类和对象(VI)| 课后测试题及答案