晓悠懒懒 发表于 2023-4-17 17:18:51

0.定义不同名的类,类里面的方法名一样;生成不同的对象,用一个函数统一调用
1、不关心具体的类型,只关心方法是否符合要求
2、可以
3、
4、降低了耦合
5、不属于

cai001 发表于 2023-4-17 16:24:12

ok

宋加零 发表于 2023-4-17 10:47:36

1

fmyzyz 发表于 2023-4-16 15:22:15

0.通过定义不同的类,类具有相同的方法

1.可以使同一个方法在对不同的类进行操作时达到不同的效果

2.可以

3.当你看到一只鸟走起来像鸭子,游泳起来鸭子,叫起来也像鸭子,那么这只鸟就被称为鸭子

4.降低了耦合

5.不是

0.#定义员工大类
class Staff:
    def __init__(self, name, job, grade, year, uid):
      self.name = name
      self.job = job
      self.grade = grade
      self.year = year
      self.uid = uid
      self.salary = 0
    def get_uid(self):
      print(f'工号:{self.uid}')
      
    def get_name(self):
      print(f'姓名:{self.name}')
      
    def get_job(self):
      print(f'职位:{self.job}')

    def get_grade(self):
      print(f'级别:{self.grade}')

    def get_year(self):
      print(f'工龄:{self.year}')

    def get_salary(self):
      print(f'薪资:{self.salary}')


#定义普通员工类
class Employee(Staff):
    def __init__(self, name, job, grade, year, uid):
      super().__init__(name, 'E', grade, year, uid)
      self.salary = 3000 + 500 * self.grade + 50 * self.year

#定义组长类
class Teamleader(Staff):
    def __init__(self, name, job, grade, year, uid):
      super().__init__(name, 'T', grade, year, uid)
      self.salary = 4000 + (800 * self.grade) + (100 * self.year)

#定义经理类
class Manager(Staff):
    def __init__(self, name, job, grade, year, uid):
      super().__init__(name, 'M', grade, year, uid)
      self.salary = 5000 + 1000 * (self.grade + self.year)

#定义管理类
class Manage:
    def __init__(self):
      self.staffs = {}
      self.uid = 10000

    #程序功能入口
    def welcome(self):
      ins = 0
      while ins != '5':
            ins = input('\n1.录入;2.查询;3.升级;4.降级;5.退出:')
            if ins == '1':
                self.creat_staff()
            if ins == '2':
                self.view()
            if ins == '3':
                self.upgrade()
            if ins == '4':
                self.downgrade()
            if ins == '5':
                print('再见~')

    #程序功能:创建新员工
    def creat_staff(self):
      name = input('姓名:')
      job = input('职位(E.普通员工;T.组长;M.经理):')
      year = int(input('工龄:'))
      grade = int(input('级别:'))
      while grade < 1:
            grade = int(input('最低级别为1,请重新输入:'))
      if job == 'E':
            while grade > 10:
                grade = int(input('该职位最高级别为10,请重新输入:'))
                while grade < 1:
                  grade = int(input('最低级别为1,请重新输入:'))
            staff = Employee(name, 'E', grade, year, self.uid)
      if job == 'T':
            while grade > 6:
                grade = int(input('该职位最高级别为6,请重新输入:'))
                while grade < 1:
                  grade = int(input('最低级别为1,请重新输入:'))
            staff = Teamleader(name, 'T', grade, year, self.uid)
      if job == 'M':
            while grade > 3:
                grade = int(input('该职位最高级别为3,请重新输入:'))
                while grade < 1:
                  grade = int(input('最低级别为1,请重新输入:'))
            staff = Manager(name, 'M', grade, year, self.uid)
      self.staffs = staff
      print(f'录入成功!姓名:{name},工号:{self.uid},薪资:{self.staffs.salary}')
      self.uid += 1

    #程序功能:查询
    def view(self):
      _ = input('1.员工查询;2.职位查询:')
      if _ == '1':
            ins = int(input('请输入工号:'))
            if ins in self.staffs:
                print(f'姓名:{self.staffs.name}')
                print(f'职位:{self.staffs.job}')
                print(f'级别:{self.staffs.grade}')
                print(f'工龄:{self.staffs.year}')
                print(f'薪资:{self.staffs.salary}')
            else:
                print('该工号不存在!')
      if _ == '2':
            ins = input('职位(E.普通员工;T.组长;M.经理):')
            while ins != 'E' and ins != 'T' and ins != 'M':
                ins = input('请重新输入:')
            if ins == 'E':
                count = 0
                for i in self.staffs.values():
                  if i.job == 'E':
                        count += 1
                if count == 0:
                  print('目前公司没有普通员工!')
                else:
                  print(f'目前普通员工共有{count}人')
                  for j in self.staffs.items():
                        if j.job == 'E':
                            print(f'{j} - {j.name}')
            
            if ins == 'T':
                count = 0
                for i in self.staffs.values():
                  if i.job == 'T':
                        count += 1
                if count == 0:
                  print('目前公司没有组长!')
                else:
                  print(f'目前组长共有{count}人')
                  for j in self.staffs.items():
                        if j.job == 'T':
                            print(f'{j} - {j.name}')

            if ins == 'M':
                count = 0
                for i in self.staffs.values():
                  if i.job == 'M':
                        count += 1
                if count == 0:
                  print('目前公司没有经理!')
                else:
                  print(f'目前普通员工共有{count}人')
                  for j in self.staffs.items():
                        if j.job == 'M':
                            print(f'{j} - {j.name}')

    #程序功能:升级
    def upgrade(self):
      ins = int(input('请输入工号:'))
      if ins in self.staffs:
            print(f'{self.staffs.name},工号:{self.staffs.uid},当前职位:{self.staffs.job}{self.staffs.grade},当前薪资:{self.staffs.salary}')
            up = int(input('请输入需要增加的级数:'))
            while up < 1:
                up = int(input('请输入正确的级数:'))
            oldsalary = self.staffs.salary
            if self.staffs.job == 'E':
                self.staffs.grade += up
                if self.staffs.grade > 10:
                  self.staffs = Teamleader(self.staffs.name, 'T', 1, self.staffs.year, ins)
               

            elif self.staffs.job == 'T':
                self.staffs.grade += up
                if self.staffs.grade > 6:
                  self.staffs = Manager(self.staffs.name, 'M', 1, self.staffs.year, ins)
               

            elif self.staffs.job == 'M':
                self.staffs.grade += up
                if self.staffs.grade > 3:
                  print("升至最高级!")
                  self.staffs.grade = 3
                  
            print('升级成功!')
            print(f'{self.staffs.name},工号:{self.staffs.uid},升级后职位:{self.staffs.job}{self.staffs.grade},升级后薪资:{self.staffs.salary}({(self.staffs.salary - oldsalary):+})')
      else:
            print('该工号不存在!')

    #程序功能:降级
    def downgrade(self):
      ins = int(input('请输入工号:'))
      if ins in self.staffs:
            print(f'{self.staffs.name},工号:{self.staffs.uid},当前职位:{self.staffs.job}{self.staffs.grade},当前薪资:{self.staffs.salary}')
            down = int(input('请输入需要减少的级数:'))
            while down < 1:
                down = int(input('请输入正确的级数:'))
            oldsalary = self.staffs.salary
            if self.staffs.job == 'M':
                self.staffs.grade -= down
                if self.staffs.grade < 1:
                  self.staffs = Teamleader(self.staffs.name, 'T', 6, self.staffs.year, ins)
               
            elif self.staffs.job == 'T':
                self.staffs.grade -= down
                if self.staffs.grade < 1:
                  self.staffs = Employee(self.staffs.name, 'E', 10, self.staffs.year, ins)
               
            elif self.staffs.job == 'E':
                self.staffs.grade -= down
                if self.staffs.grade < 1:
                  print("降至最低级!")
                  self.staffs.grade = 1
               
            print('降级成功!')
            print(f'{self.staffs.name},工号:{self.staffs.uid},降级后职位:{self.staffs.job}{self.staffs.grade},降级后薪资:{self.staffs.salary}({(self.staffs.salary - oldsalary):+})')
      else:
            print('该工号不存在!')

def main():
    m = Manage()
    m.welcome()

main()
            

lrq51678 发表于 2023-4-14 15:28:12

1

sme123 发表于 2023-4-10 15:15:20

good

失败且常态 发表于 2023-4-10 14:59:31

hhh

KI_ 发表于 2023-4-10 12:32:08

ID不存在 发表于 2023-4-7 20:06:55

1

youyou521 发表于 2023-4-7 19:06:02

{:5_90:}

littleblk 发表于 2023-4-6 15:42:30

1

hzlzayn 发表于 2023-4-5 14:56:06

1

mingmei123 发表于 2023-4-4 16:45:42

123

Greenn 发表于 2023-4-3 17:32:57

加油!

huxxx 发表于 2023-4-3 14:39:07

feverdream123 发表于 2023-4-3 11:06:44

{:5_109:}

changsong 发表于 2023-4-3 10:23:09

查看答案

fengbao00 发表于 2023-3-30 12:34:38

1

2271040868 发表于 2023-3-29 23:17:43

1

小白rog 发表于 2023-3-29 23:02:36

打卡
页: 28 29 30 31 32 33 34 35 36 37 [38] 39 40 41 42 43
查看完整版本: 第063讲:类和对象(VI)| 课后测试题及答案