鱼C论坛

 找回密码
 立即注册
楼主: 小甲鱼

[课后作业] 第063讲:类和对象(VI)| 课后测试题及答案

  [复制链接]
发表于 2023-2-17 17:03:02 | 显示全部楼层
零基础入门学习Python封面
《零基础入门学习Python》
(最新版)
小甲鱼 著
立即购买
留位,晚点答
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-17 07:58:28 | 显示全部楼层
答案
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-2-16 14:47:23 | 显示全部楼层
0.多态

1.同一个函数实现不同功能

2.可以

3.When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck.

4.增强

5.属于
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-16 11:09:44 | 显示全部楼层
class Mumber:
    def __int__(self , uid , name , job , age , grade):
        self.uid = uid
        self.name = name
        self.job = job
        self.age = age
        self.grade = grade

class Menu:
    def __int__(self):
        self.mumbers = {}
        self.uid = 10000

    def welcome(self):
        while True:
            option = input(" 1. 录入 2. 查询 3. 升级 4. 降级 5. 退出")
            if option == "1":
                pass

    def create_info(self):
        name = input("请输入姓名:")
        while True:
            job = input("请输入职位")
            if job != "E" and job != "T" and job != "M":
                print("输入错误")
                continue
            break
        age = input("请输入级别")
        while True:
            grade = int(input("请输入等级:"))
            if grade >= 7 :
                print("等级最高是六级,请重新输入")
                continue
            break
        mumber = Mumber(self.uid, name ,job ,age ,grade)
        self.mumbers[self.uid] = mumber
        self.uid += 1


小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-15 21:37:09 | 显示全部楼层
看看
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-2-15 11:54:15 | 显示全部楼层
本帖最后由 2360620558 于 2023-2-16 23:30 编辑

0.
1.符合条件可以输出不同的结果
2.是的
3.When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck.
4.降低了耦合度
5.属于
0.
  1. class Staff:
  2.     def __init__(self, name, job, grade, year, uid):
  3.         self.name = name
  4.         self.job = job
  5.         self.grade = grade
  6.         self.year = year
  7.         self.uid = uid

  8.     def get_uid(self):
  9.         return self.uid
  10.     def get_name(self):
  11.         return self.name
  12.     def get_job(self):
  13.         return self.job
  14.     def get_grade(self):
  15.         return self.grade
  16.     def get_year(self):
  17.         return self.year
  18.    
  19.     def salary(self, job):
  20.         if job == "E":
  21.             return 3000 + 500 * self.grade + 50 * self.year
  22.         if job == "T":
  23.             return 4000 + 800 * self.grade + 100 * self.year
  24.         if job == "M":
  25.             return 5000 + 1000 * (self.grade + self.year)
  26.         
  27.     def set_job(self, job):
  28.         self.job = job
  29.     def set_grade(self, grade):
  30.         self.grade = grade   

  31. def main():
  32.     uid = 10000
  33.     mans = {}
  34.     jobs = {"E":[], "T":[], "M":[]}
  35.     Emax_grade = 10
  36.     Tmax_grade = 6
  37.     Mmax_grade = 3

  38.     while True:
  39.         ins = input("\n1.录入;2.查询;3.升级;4.降级;5退出:")

  40.         if ins == "1":
  41.             name = input("姓名:")
  42.             job = input("职位(E.普通员工;T.组长;M.经理):")
  43.             while job != "E" and job != "T" and job != "M":
  44.                 job = input("职位不正确,请重新输入职位(E.普通员工;T.组长;M.经理):")
  45.             year = int(input("工龄:"))
  46.             grade = int(input("级别:"))

  47.             if job == "E":
  48.                 while grade > Emax_grade:
  49.                     grade = int(input(f"该职位最高级别是{Emax_grade},请重新录入级别:"))
  50.                 e = Staff(name, job, grade, year, uid)
  51.                 mans[uid] = e
  52.                 jobs[job].append(e)
  53.             
  54.             if job == "T":
  55.                 while grade > Tmax_grade:
  56.                     grade = int(input(f"该职位最高级别是{Tmax_grade},请重新录入级别:"))
  57.                 e = Staff(name, job, grade, year, uid)
  58.                 mans[uid] = e
  59.                 jobs[job].append(e)

  60.             if job == "M":
  61.                 while grade > Mmax_grade:
  62.                     grade = int(input(f"该职位最高级别是{Mmax_grade},请重新录入级别:"))
  63.                 e = Staff(name, job, grade, year, uid)
  64.                 mans[uid] = e
  65.                 jobs[job].append(e)

  66.             print(f"录入成功!姓名:{name},工号:{uid},薪资:{e.salary(job)}")
  67.             uid += 1
  68.         
  69.         if ins == "2":
  70.             in_ins = input("1.员工查询;2.职位查询:")
  71.             
  72.             if in_ins == "1":
  73.                 inp_uid = int(input("请输入工号:"))
  74.                 if mans.get(inp_uid):
  75.                     e = mans[inp_uid]
  76.                     print(f"姓名:{e.get_name()}")
  77.                     print(f"职位:{e.get_job()}")
  78.                     print(f"级别:{e.get_grade()}")
  79.                     print(f"工龄:{e.get_year()}")
  80.                     print(f"薪资:{e.salary(e.get_job())}")
  81.                 else:
  82.                     print("该工号不存在!")

  83.             if in_ins == "2":
  84.                 job = input("职位(E.普通员工;T.组长;M.经理):")
  85.                 while job != "E" and job != "T" and job != "M":
  86.                     job = input("职位不正确,请重新输入职位(E.普通员工;T.组长;M.经理):")
  87.                 if job == "E":
  88.                     if len(jobs[job]):
  89.                         print(f"目前公司普通员工共有 {len(jobs[job])} 人:)")
  90.                         for each in jobs[job]:
  91.                             print(f"工号:{each.get_uid()} -> 姓名:{each.get_name()},职位:{each.get_grade()}级,薪资:{each.salary(job)}")
  92.                     else:
  93.                         print("目前公司没有普通员工!")

  94.                 if job == "T":
  95.                     if len(jobs[job]):
  96.                         print(f"目前公司组长共有 {len(jobs[job])} 人:)")
  97.                         for each in jobs[job]:
  98.                             print(f"工号:{each.get_uid()} -> 姓名:{each.get_name()},职位:{each.get_grade()}级,薪资:{each.salary(job)}")
  99.                     else:
  100.                         print("目前公司没有组长!")

  101.                 if job == "M":
  102.                     if len(jobs[job]):
  103.                         print(f"目前公司经理共有 {len(jobs[job])} 人:)")
  104.                         for each in jobs[job]:
  105.                             print(f"工号:{each.get_uid()} -> 姓名:{each.get_name()},职位:{each.get_grade()}级,薪资:{each.salary(job)}")
  106.                     else:
  107.                         print("目前公司没有经理!")

  108.         if ins == "3":
  109.             q_uid = int(input("请输入工号:"))
  110.             
  111.             if mans.get(q_uid):
  112.                     e = mans[q_uid]
  113.                     print(f"{e.get_name()},工号:{e.get_uid()},当前职位:{e.get_job()}{e.get_grade()},当前薪资:{e.salary(e.get_job())}")
  114.                     ord_salary = e.salary(e.get_job())
  115.                     up_grade = int(input("请输入需要增加的级数:"))
  116.                     grade = e.get_grade() + up_grade

  117.                     if e.get_job() == "E" and grade > Emax_grade:
  118.                         job = "T"
  119.                         grade = 1
  120.                         jobs["E"].remove(e)
  121.                         e.set_job(job)
  122.                         e.set_grade(grade)
  123.                         jobs["T"].append(e)
  124.                            
  125.                     elif e.get_job() == "T" and grade > Tmax_grade:
  126.                         job = "M"
  127.                         grade = 1
  128.                         jobs["T"].remove(e)
  129.                         e.set_job(job)
  130.                         e.set_grade(grade)
  131.                         jobs["M"].append(e)

  132.                     elif e.get_job() == "M" and grade > Mmax_grade:
  133.                         print("该职位最高级别是 3 级!")
  134.                         e.set_grade(Mmax_grade)
  135.                     
  136.                     else:
  137.                         e.set_grade(grade)
  138.                     print("升级成功!")
  139.                     print(f"{e.get_name()},工号:{q_uid},升级后的职位:{e.get_job()}{e.get_grade()},升级后的薪资:{e.salary(e.get_job())}(+{e.salary(e.get_job()) - ord_salary})")
  140.             else:
  141.                 print("该工号不存在!")


  142.         if ins == "4":
  143.             q_uid = int(input("请输入工号:"))

  144.             if mans.get(q_uid):
  145.                 e = mans.get(q_uid)
  146.                 print(f"{e.get_name()},工号:{e.get_uid()},当前职位:{e.get_job()}{e.get_grade()},当前薪资:{e.salary(e.get_job())}")
  147.                 ord_salary = e.salary(e.get_job())
  148.                 dm_grade = int(input("请输入需要降低的级数:"))
  149.                 grade = e.get_grade() - dm_grade

  150.                 if e.get_job() == "E" and grade < 1:
  151.                     print("该职位最低级别是 1 级!")
  152.                     grade = 1
  153.                     e.set_grade(grade)

  154.                 if e.get_job() == "T" and grade < 1:
  155.                     job = "E"
  156.                     grade = Emax_grade
  157.                     jobs["T"].remove(e)
  158.                     e.set_job(job)
  159.                     e.set_grade(grade)
  160.                     jobs["E"].append(e)
  161.                
  162.                 if e.get_job() == "M" and grade < 1:
  163.                     job = "T"
  164.                     grade = Tmax_grade
  165.                     jobs["M"].remove(e)
  166.                     e.set_job(job)
  167.                     e.set_grade(grade)
  168.                     jobs["T"].append(e)
  169.                
  170.                 else:
  171.                     e.set_grade(grade)
  172.                 print("降级成功!")
  173.                 print(f"{e.get_name()},工号:{q_uid},降级后的职位:{e.get_job()}{e.get_grade()},降级后的薪资:{e.salary(e.get_job())}({e.salary(e.get_job()) - ord_salary})")
  174.             else:
  175.                 print("该工号不存在!")
  176.         
  177.         if ins == "5":
  178.             break
  179. main()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-15 07:27:37 | 显示全部楼层
0 通过对主类的集成,并在子类中修改,每一个子类增添相对于本子类输入类型的方法,实现多态
1 可以接口不变,覆盖更多的输入类型或者处理方法
2 可以的,+和体现了多态
3 我看它走路像鸭子,游泳像鸭子,叫声像鸭子,那这只鸟就是鸭子
4 增强了内聚?
5 不是,单纯的默认参数
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-14 19:47:44 | 显示全部楼层
1
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-2-13 21:34:23 | 显示全部楼层
1
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-2-13 19:36:18 | 显示全部楼层
瞅瞅
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-2-11 21:59:18 | 显示全部楼层
class People:
    num = 0
    count = 10000
    l = ["E1", "E2", "E3", "E4", "E5", "E6", "E7", "E8", "E9", "E10", "T1", "T2", "T3", "T4", "T5", "T6", "M1", "M2", "M3"]
    d = {"E":"普通员工", "T":"组长", "M":"经理"}
   
    def __init__(self, uid, name, job, grade, year, salary, num):
        self.uid = uid
        self.name = name
        self.job = job
        self.grade = grade
        self.year =year
        self.salary = salary
        self.num = num
    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.salary
    def get_num(self):
        return self.num
   
def main():
    inf = []
    while True:
        x = int(input("1.录入;2.查询;3.升级;4.降级;5.退出:"))
        if x == 1:
            inf.append(write())
            continue
        elif x == 2:
            find(inf)
            continue
        elif x == 3:
            upgrade(inf)
            continue
        elif x == 4:
            downgrade(inf)
            continue
        else:
            break
            
def write():
    name = input("姓名:")
    job = input("职位(E.普通员工;T.组长;M.经理):")
    if job != "E" and job != "T" and job != "M":
        print(f"本公司没有{job}职务哦~")
        print()
        return
    year = int(input("工龄:"))
    grade = get_grade(job)
    s = salary(job, grade, year)
    print(f"录入成功!姓名:{name}, 工号:{People.count}, 薪资:{s}")
    People.count += 1
    People.num += 1
    print()
    return People(People.count-1, name, job, grade, year, s, People.num-1)
        
def find(inf):
    f = int(input("1.员工查询;2.职位查询:"))
    if f == 1:
        count = 0
        uid = int(input("请输入工号:"))   
        for each in inf:
            if uid == each.get_uid():
                count += 1
                print(f"姓名:{each.name}")
                print(f"职位:{each.job}")
                print(f"级别:{each.grade}")
                print(f"工龄:{each.year}")
                print(f"薪资:{each.salary}")
        if count == 0:
            print("该工号不存在!")
        print()
    elif f == 2:
        count = 0
        jobb = input("职位(E.普通员工;T.组长;M.经理):")
        if jobb != "E" and jobb != "T" and jobb != "M":
            print(f"本公司没有{jobb}职务哦~")
            print()
            return
        for each in inf:
            if jobb in each.job:
                count += 1
                print(f"第{count}位:{each.uid} - {each.name}")
        if count == 0:
            print(f"目前公司没有{each.d[jobb]}!")
        else:
            print(f"目前{each.d[jobb]}共有{count}人。")
        print()
    else:
        print("请输入正确的查询方式~")
        print()
    return

def upgrade(inf):
    uid = int(input("请输入工号:"))
    count = 0
    i = 0
    for each in inf:
        if uid == each.get_uid():
            count += 1
            now_grade_letter = each.get_job()
            now_grade_number = each.get_grade()
            list_num = each.get_num()
            print(f"{each.get_name()},工号:{each.get_uid()}, 当前职位:{each.get_job()}{each.get_grade()}, 当前薪资:{each.get_salary()}")
    if count == 0:
        print("该工号不存在!")
        return
    num = int(input("请输入需要增加的级数:"))
    now_grade = now_grade_letter + str(now_grade_number)
    while i < len(People.l):
        if People.l[i] == now_grade:
            if i + num >= len(People.l):
                print("升级失败!已超出本公司职位的最大等级!")
                return
            else:
                print("升级成功!")
                x = list(People.l[i+num])
                inf[list_num].job = x[0]
                inf[list_num].grade = int(x[1])
                s = inf[list_num].salary
                inf[list_num].salary = salary(x[0], int(x[1]), inf[list_num].get_year())
                print(f"{inf[list_num].get_name()},工号:{inf[list_num].get_uid()}, 升级后职位:{People.l[i+num]}, 升级后薪资:{inf[list_num].get_salary()}(+{inf[list_num].get_salary()-s})")
                print()
        i += 1
    return

def downgrade(inf):
    uid = int(input("请输入工号:"))
    count = 0
    i = 0
    for each in inf:
        if uid == each.get_uid():
            count += 1
            now_grade_letter = each.get_job()
            now_grade_number = each.get_grade()
            list_num = each.get_num()
            print(f"{each.get_name()},工号:{each.get_uid()}, 当前职位:{each.get_job()}{each.get_grade()}, 当前薪资:{each.get_salary()}")
    if count == 0:
        print("该工号不存在!")
        return
    num = int(input("请输入需要减少的级数:"))
    now_grade = now_grade_letter + str(now_grade_number)
    while i < len(People.l):
        if People.l[i] == now_grade:
            if i - num <= 0:
                print("降级失败!已超出本公司职位的最小等级!")
                print()
                return
            else:
                print("降级成功!")
                x = list(People.l[i-num])
                inf[list_num].job = x[0]
                inf[list_num].grade = int(x[1])
                s = inf[list_num].salary
                inf[list_num].salary = salary(x[0], int(x[1]), inf[list_num].get_year())
                print(f"{inf[list_num].get_name()},工号:{inf[list_num].get_uid()}, 降级后职位:{People.l[i-num]}, 降级后薪资:{inf[list_num].get_salary()}(-{s-inf[list_num].get_salary()})")
                print()
        i += 1
    return

def get_grade(job,):
    while True:
        grade = int(input("级别:"))
        if job == "E":
            if grade <= 10 and grade > 0:
                return grade
            else:
                print("该职位最高级别为10,请重新录入级别:")
                continue
        if job == "T":
            if grade <= 6 and grade > 0:
                return grade
            else:
                print("该职位最高级别为6,请重新录入级别:")
                continue
        if job == "M":
            if grade <= 3 and grade > 0:
                return grade
            else:
                print("该职位最高级别为3,请重新录入级别:")
                continue

def salary(job, grade, year):
    if job == "E":
        return 3000 + 500 * grade + 50 * year
    elif job == "T":
        return 4000 + 800 * grade + 100 *year
    else:
        return 5000 + 1000 * (grade + year)

main()
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-11 10:18:27 | 显示全部楼层
谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-2-8 23:24:44 | 显示全部楼层
666666666666
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-8 19:47:47 | 显示全部楼层
class Emp:

     def get_uid(self,uid):            
            self.uid=uid
            return self.uid

     def get_name(self,name):            
            self.name=name
            return self.name

     def get_job(self,job):            
            self.job=job
            return self.job

     def get_grade(self,grade):            
            self.grade=grade
            return self.grade

     def get_year(self,year):            
            self.year=year
            return self.year

     def salary(self):            
            if self.job=='经理':
                 return 5000+1000*(self.grade+self.year)

            if self.job=='组长':
                 return 4000+800*self.grade+100*self.year

            if self.job=='普通员工':
                 return 3000+500*self.grade+50*self.year

def shenzhi(x,i):         
    gra=g[u.index(i)]-x
    jo=j[u.index(i)]
    year=y[u.index(i)]
    name=n[u.index(i)]
    sa=s[u.index(i)]
    if gra<1:
        gra=1
        x= g[u.index(i)]-1
        job="经理"
    elif gra<4:
        job="经理"
    elif gra<7:
        job="组长"
    else:
        job="普通员工"
   
    if job==jo:
        j[u.index(i)]=m.get_job(job)
        g[u.index(i)]=m.get_grade(gra)        
        m.get_year(year)
        
        y[u.index(i)]=m.salary()
        ic=m.salary()-sa
        

    elif job!=jo & x>0:
       if job=="经理":
           gra=3
       else:
           gra=6
       j[u.index(i)]=m.get_job(job)
       g[u.index(i)]=m.get_grade(gra)        
       m.get_year(year)
      
       y[u.index(i)]=m.salary()
       ic=m.salary()-sa

     

    elif job!=jo & x<0:
       if job=="组长":
           gra=4
       else:
           gra=10
       j[u.index(i)]=m.get_job(job)
       g[u.index(i)]=m.get_grade(gra)        
       m.get_year(year)
       m.get_uid(uid)
       y[u.index(i)]=m.salary()
       ic=m.salary()-sa

    print(f"调整级别后:{m.get_name(name)}的等级为{m.get_grade(gra)},职位为{m.get_job(job)},薪资:{m.salary()}({ic})")

def main():
     uid=10000
     menu=input("1.录入;2.查询;3.升级;4.降级;5.退出:")
     m=Emp()
     n=[]
     j=[]
     g=[]
     y=[]
     u=[]
     s=[]

     while menu !="5":
        
            
           if menu=='1':
              name=input('姓名:')
              job=input('职位:')
              grade=0
              while grade==0:
                  if  job=="经理":
                     grade=int(input('级别:'))
                     while grade>3:
                         grade=int(input("该职位级别最高为3,请重新输入:"))
                  elif job=="组长":
                        grade=int(input('级别:'))
                        while grade<3 or grade>6:
                            grade=int(input("该职位级别4~6,请重新输入:"))
                  elif job=="普通员工":
                        grade=int(input('级别:'))
                        while grade<6 or grade>10:
                            grade=int(input("该职位级别7~10,请重新输入:"))
                  else:
                        job=input("请输入正确的职位")
                        grade=0

              year=int(input('工龄:'))
                  
              uid+=1
              
              n.append(m.get_name(name))
              j.append(m.get_job(job))
              g.append(m.get_grade(grade))
              y.append(m.get_year(year))
              u.append(m.get_uid(uid))
              s.append(m.salary())
              print(f"录入成功!姓名:{m.get_name(name)},工号:{m.get_uid(uid)},薪资:{m.salary()}")
              menu=input("1.录入;2.查询;3.升级;4.降级;5.退出:")

           elif menu=='2':
              find=input("1.员工查询; 2.职位查询:")
              if find=="1":
                 i=int(input("请输入员工编号:"))
                 while i not in u:
                      i=int(input("你所查找的编号不存在,请重新输入:"))
                 num=u.index(i)
                 print("您查询的员工信息如下:")
                 print('姓名:', n[num])
                 print('职位:', j[num])
                 print('等级:', g[num])
                 print('工龄:', y[num])
                 print('薪资:', s[num])
              if find=='2':
                 x=input("请输入职位:")
                 id1 = [i for i,a in enumerate(j) if a==x ]
                 if len(id1)==0:
                   print(f"目前公司还没有{x}")
                 else:
                   print(f"目前{x}共有{len(id1)}人")
                   for i in id1:
                        print(f"姓名:{n[i]};工号:{u[i]}")
              menu=input("1.录入;2.查询;3.升级;4.降级;5.退出:")

           elif menu=="3":
              i=int(input("请输入员工编号:"))
              x=int(input("请输入调整等级:"))
              while x>4:
                  x=int(input("最大调整等级为7,请重新输入:"))
              gra=g[u.index(i)]-x
              jo=j[u.index(i)]
              year=y[u.index(i)]
              name=n[u.index(i)]
              sa=s[u.index(i)]
              if gra<1:
                  gra=1
                  x= g[u.index(i)]-1
                  job="经理"
              elif gra<4:
                  job="经理"
              elif gra<7:
                 job="组长"
              else:
                 job="普通员工"

              if job==jo:
                 j[u.index(i)]=m.get_job(job)
                 g[u.index(i)]=m.get_grade(gra)        
                 m.get_year(year)
                 grade=gra        
                 y[u.index(i)]=m.salary
                 ic=m.salary()-sa
              
              elif job!=jo:
                 if job=="经理":
                    gra=3
                 else:
                    gra=6
                 j[u.index(i)]=m.get_job(job)
                 g[u.index(i)]=m.get_grade(gra)        
                 m.get_year(year)
                 grade=gra      
                 y[u.index(i)]=m.salary()
                 ic=m.salary()-sa
              print(f"调整级别后:{m.get_name(name)}的等级为{m.get_grade(gra)},职位为{m.get_job(job)},薪资:{m.salary()}({ic})")
              menu=input("1.录入;2.查询;3.升级;4.降级;5.退出:")

           elif menu=="4":
              i=int(input("请输入员工编号:"))
              x=int(input("请输入调整等级:"))
              while x>4:
                  x=int(input("最大调整等级为7,请重新输入:"))
              x=-x
              shenzhi(x,i)              
                     

            
main()               
      
            

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-8 13:50:03 | 显示全部楼层
新年好
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-8 13:46:33 | 显示全部楼层
# 员工类
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

    # 获取工号
    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 salary(self):
        pass

# 普通员工类
class Employee(Staff):
    def salary(self):
        return 3000 + 500 * self.grade + 50 * self.year

# 组长类
class Teamleader(Staff):
    def salary(self):
        return 4000 + 800 * self.grade + 100 * self.year

# 经理类
class Manager(Staff):
    def salary(self):
        return 5000 + 1000 * (self.grade + self.year)

# 管理程序功能类
class Manage():
    def __init__(self):
        self.staffs = {}
        self.uid = 10000 # 工号自动分配,由10000开始
        self.grade_max_E = 10
        self.grade_max_T = 6
        self.grade_max_M = 3

    # 程序主入口
    def welcome(self):
        while True:
            func = int(input("\n1.录入;2.查询;3.升级;4.降级;5.退出:"))
            if func == 1:
                self.enter()
            if func == 2:
                self.inquiry()
            if func == 3:
                self.promote()
            if func == 4:
                self.demote()
            if func == 5:
                break

    def check_grade(self, job, grade):
        while True:
            if job == 'E' and grade > self.grade_max_E:
                grade = int(input(f"该职位最高级别为{self.grade_max_E},请重新录入级别:"))
            elif job == 'T' and grade > self.grade_max_T:
                grade = int(input(f"该职位最高级别为{self.grade_max_T},请重新录入级别:"))
            elif job == 'M' and grade > self.grade_max_M:
                grade = int(input(f"该职位最高级别为{self.grade_max_M},请重新录入级别:"))
            else:
                break
        return grade

    # 录入员工数据功能
    def enter(self):
        name = input("姓名:")
        job = input("职位(E.普通员工;T.组长;M.经理):")
        year = int(input("工龄:"))
        grade = int(input("级别:"))
        grade = self.check_grade(job, grade)

        if job == 'M':
            self.staffs[self.uid] = Manager(name, job, grade, year, self.uid)
        if job == 'E':
            self.staffs[self.uid] = Employee(name, job, grade, year, self.uid)
        if job == 'T':
            self.staffs[self.uid] = Teamleader(name, job, grade, year, self.uid)

        print(f"录入成功!姓名:{name},工号:{self.uid},薪资:{self.staffs[self.uid].salary()}")
        self.uid += 1

    # 查询功能
    def inquiry(self):
        func = int(input("1.员工查询;2.职位查询:"))
        if func == 1:
            uid = int(input("请输入工号:"))
            if not self.staffs.get(uid):
                print("该工号不存在!")
            else:
                print(f"姓名:{self.staffs[uid].name}")
                print(f"职位:{self.staffs[uid].job}")
                print(f"级别:{self.staffs[uid].grade}")
                print(f"工龄:{self.staffs[uid].year}")
                print(f"薪资:{self.staffs[uid].salary()}")
        if func == 2:
            job = input("职位(E.普通员工;T.组长;M.经理):")
            count = 0
            _ = []
            for each in self.staffs.values():
                if each.job == job:
                    count += 1
                    _.append(each.uid)
            if count == 0:
                if job == 'E':
                    print("目前公司没有普通员工!")
                elif job == 'T':
                    print("目前公司没有组长!")
                elif job == 'M':
                    print("目前公司没有经理!")
            else:
                print(f"目前普通员工共有{count}人:")
                for i in range(count):
                    print(f"{_[i]} - {self.staffs[_[i]].name}")

    # 程序升级功能
    def promote(self):
        uid = int(input("请输入工号:"))
        if not self.staffs.get(uid):
            print("该工号不存在!")
        else:
            print(f"{self.staffs[uid].name},工号:{uid},当前职位:{self.staffs[uid].job}{self.staffs[uid].grade},当前薪资:{self.staffs[uid].salary()}")
            promote_grade = int(input("请输入需要增加的级数:"))
            salary_old = self.staffs[uid].salary()

            if self.staffs[uid].job == 'T' and (self.staffs[uid].grade + promote_grade) > self.grade_max_T:
                self.staffs[uid] = Manager(self.staffs[uid].name, 'M', 1, self.staffs[uid].year, uid)
            elif self.staffs[uid].job == 'E' and (self.staffs[uid].grade + promote_grade) > self.grade_max_E:
                self.staffs[uid] = Teamleader(self.staffs[uid].name, 'T', 1, self.staffs[uid].year, uid)
            elif self.staffs[uid].job == 'M' and (self.staffs[uid].grade + promote_grade) > self.grade_max_M:
                self.staffs[uid].grade = self.grade_max_M
            else:
                self.staffs[uid].grade += promote_grade

            salary_d = self.staffs[uid].salary() - salary_old
            print("升级成功!")
            print(f"{self.staffs[uid].name},工号:{uid},升级后职位:{self.staffs[uid].job}{self.staffs[uid].grade},升级后薪资:{self.staffs[uid].salary()}(+{salary_d})")

    # 程序降级功能
    def demote(self):
        uid = int(input("请输入工号:"))
        if not self.staffs.get(uid):
            print("该工号不存在!")
        else:
            print(f"{self.staffs[uid].name},工号:{uid},当前职位:{self.staffs[uid].job}{self.staffs[uid].grade},当前薪资:{self.staffs[uid].salary()}")
            demote_grade = int(input("请输入需要减少的级数:"))
            salary_old = self.staffs[uid].salary()

            if self.staffs[uid].job == 'T' and (self.staffs[uid].grade - demote_grade) < 1:
                self.staffs[uid] = Employee(self.staffs[uid].name, 'E', self.grade_max_E, self.staffs[uid].year, uid)
            elif self.staffs[uid].job == 'E' and (self.staffs[uid].grade - demote_grade) < 1:
                self.staffs[uid].grade = 1
            elif self.staffs[uid].job == 'M' and (self.staffs[uid].grade - demote_grade) < 1:
                self.staffs[uid] = Teamleader(self.staffs[uid].name, 'T', self.grade_max_T, self.staffs[uid].year, uid)
            else:
                self.staffs[uid].grade -= demote_grade

            salary_d = salary_old - self.staffs[uid].salary()
            print("降级成功!")
            print(
                f"{self.staffs[uid].name},工号:{uid},降级后职位:{self.staffs[uid].job}{self.staffs[uid].grade},降级后薪资:{self.staffs[uid].salary()}(-{salary_d})")

# 主程序接口
def main():
    m = Manage()
    m.welcome()

main()
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-7 23:38:23 | 显示全部楼层
问答题:
0. Python 允许在子类中定义与父类同名的方法,即重写,通过重写,Python体现了面向对象的多态特性
1. 可以在不修改源代码情况下实现不同场景下的运算调用
2. 可以
3. 不知道
4. 低耦合
5. 不是

动动手:
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-7 17:25:01 | 显示全部楼层
1
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-2-7 10:05:22 | 显示全部楼层
1
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-2-6 19:53:55 | 显示全部楼层
答案
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-8-21 13:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表