鱼C论坛

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

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

  [复制链接]
发表于 2023-5-6 11:55:36 | 显示全部楼层
零基础入门学习Python封面
《零基础入门学习Python》
(最新版)
小甲鱼 著
立即购买
1
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-5-6 10:23:57 | 显示全部楼层
学习
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-5-5 20:42:41 | 显示全部楼层
1
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-5-5 11:39:40 | 显示全部楼层
1
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-5-5 09:11:41 | 显示全部楼层
1.根据不同的对象采取不同的操作
2.属于多态
4.降低了耦合度
5.不属于多态
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-4 17:51:06 | 显示全部楼层
# 0. 请按要求编写一个企业员工管理程序。
# 需要实现的要求:

class EmployeeM:
# b. 员工属性:姓名(name)、职位(job)、级别(grade)、工龄(year)、工号(uid)
    name =None
    job = None
    grade = None
    year = None
    uid =None
# a. 员工分类:普通员工(Employee)、组长(Teamleader)、经理(Manager)
# c. 员工方法:
# get_uid() -- 获取工号
    def set_uid(self,uid):
         self.uid=uid
    def get_uid(self):
        return  self.uid
# get_name() -- 获取姓名
    def set_name(self,name):
         self.name=name
    def get_name(self):
        return self.name
# get_job() -- 获取职位
    def set_job(self,job):
        dif = {'E': 'Employee', 'T': 'Teamleader', 'M': 'Manager'}
        self.job=job
    def get_job(self):
        return self.job
# get_grade() -- 获取级别
    def set_grade(self,grade):
            self.grade=grade
    def get_grade(self):
        return self.grade
# get_year() -- 获取工龄
    def set_year(self,year):
         self.year=year
    def get_year(self):
        return self.year
# salary() -- 统计并返回工资(计算方法如下)
# d. 员工工资计算方法:
# 普通员工:3000 + 500 * 级别 + 50 * 工龄
# 组长:4000 + 800 * 级别 + 100 * 工龄
# 经理:5000 + 1000 * (级别 + 工龄)
    def salary(self):
        if self.grade==1:
            self.salarysum=3000 + 500 * int(self.grade) + 50 * int(self.year)
        elif self.grade==2:
            self.salarysum = 4000 + 800 * int(self.grade) + 100 * int(self.year)
        else:
            self.salarysum = 5000 + 1000 * (int(self.grade) + int(self.year))
        return self.salarysum
# e. 程序功能:
class Manager:

    def __init__(self):
        self.em = EmployeeM()
        self.idstart = 10000
        self.eee={}
# 录入员工数据功能(工号自动分配,由 10000 开始)
    def inEmployee(self):
        name = 'hcm'
        self.em.set_name(name)
        job = 'M'
        self.em.set_job(job)
        grade = '7'
        self.em.set_grade(grade)
        year = '15'
        self.em.set_year(year)
        uid = self.idstart+1
        while uid in self.eee:
            uid = uid +1
        self.em.set_uid(uid)
        self.salarys = self.em.salary()
        self.eee[self.em.get_uid()]=[self.em.get_name(),
                                     self.em.get_job(),
                                     self.em.get_grade(),
                                     self.em.get_year(),
                                     self.salarys]

        print(f'录入成功 name:{self.eee[self.em.get_uid()][0]} '
              f'职称:{str(self.eee[self.em.get_uid()][1])+str(self.eee[self.em.get_uid()][2])}'
              f'工资:{self.salarys}')

        print('inEmployee',self.eee)
# 查询功能,分为员工查询和职位查询(见程序实现截图)
    def checkEmployee(self):
        print('checkEmployee',self.eee)
        # self.uid =input('请输入UID')
        self.uid = '10001'
        print(int(self.uid) in self.eee)
        if int(self.uid) in self.eee:
            print(f'查询成功! name:{self.eee[self.em.get_uid()][0]} '
                  f'职称:{str(self.eee[self.em.get_uid()][1]) + str(self.eee[self.em.get_uid()][2])}'
                  f'工资:{str(self.eee[self.em.get_uid()][4])}')
        else:
            print('UID不存在')

# 各类员工级别数量如下:
# 普通员工:10 级
# 组长:6 级
# 经理:3 级
# 升级功能:支持增加多级;当超过当前职位最高级别时,进行升职操作(无论增加多少个级别,只要发生升职,级别一律初始化为 1 级,见程序实现截图).
    def up_grade(self):
        print('up_grade', self.eee)
        # self.uid =input('请输入UID')
        self.uid = '10001'
        print(int(self.uid) in self.eee)
        if int(self.uid) in self.eee:
            self.eee[self.em.get_uid()][2]=int(self.eee[self.em.get_uid()][2])+1
            print(f'升级成功! name:{self.eee[self.em.get_uid()][0]} '
                  f'职称:{str(self.eee[self.em.get_uid()][1]) + str(self.eee[self.em.get_uid()][2])}'
                  f'工资:{str(self.eee[self.em.get_uid()][4])}')
        else:
            print('UID不存在')
# 降级功能:支持减少多级;当超过当前职位最高级别时,进行升职操作(无论减少多少个级别,只要发生降职,级别一律初始化为当前职位最高级别,见程序实现截图)
    def down_grade(self):
        print('up_grade', self.eee)
        # self.uid =input('请输入UID')
        self.uid = '10001'
        print(int(self.uid) in self.eee)
        if int(self.uid) in self.eee:
            self.eee[self.em.get_uid()][2]=int(self.eee[self.em.get_uid()][2])-1
            print(f'降级成功! name:{self.eee[self.em.get_uid()][0]} '
                  f'职称:{str(self.eee[self.em.get_uid()][1]) + str(self.eee[self.em.get_uid()][2])}'
                  f'工资:{str(self.eee[self.em.get_uid()][4])}')
        else:
            print('UID不存在')
m = Manager()
m.inEmployee()
m.checkEmployee()
m.up_grade()
m.down_grade()
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-4 10:17:04 | 显示全部楼层
非常感谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-4 00:28:44 | 显示全部楼层
。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-5-3 15:33:02 | 显示全部楼层
1
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-5-3 11:25:43 | 显示全部楼层
0。给函数传递不同的实例对象
1.只需要要一个函数就能调用不同类的方法
2.可以
3.鸭鸭这么可爱,为什么要吃鸭鸭
4.增强内聚
5.不是
0.
class Member:
    def __init__(self):
        self.names = []
        self.jobs = {}
        self.grades = {}
        self.years = {}
        self.uids = {}
        self.salarys = {}
        self.counts = 0
class SalaryMixin:
    def salary(self,grade,year,job):
        if job == "E":
            return 3000+500*int(grade)+50*int(year)
        if job == "T":
            return 4000+800*int(grade)+100*int(year)
        if job == "M":
            return 5000+1000*(int(grade)+int(year))
class Manage:
    def log_in(self):
        m = Member()
        s = SalaryMixin()
        num = 10000 + self.counts
        name = input("姓名:")
        while name in m.names:
            name = input("该姓名已存在,请重新录入:")
        else:
            m.names.append(name)
        m.uids[name] = num
        job = input("职位(E.普通员工;T.组长;M.经理):")
        m.jobs[name] = job
        year = input("工龄:")
        m.years[name] = year
        grade = input("级别")
        if job == "E":
            while int(grade) > 10 or int(grade) < 1:
                grade = input("级别不正确,请重新输入:")
        if job == "T":
            while int(grade) > 6 or int(grade) < 1:
                grade = input("级别不正确,请重新输入:")
        if job == "M":
            while int(grade) > 3 or int(grade) < 1:
                grade = input("级别不正确,请重新输入:")
        m.grades[name] = grade
        self.counts += 1
        salary = s.salary(grade,year,job)
        m.salarys[name] = salary
        print(f"录入成功!姓名:{name},工号:{num},薪资:{salary}")
    def staff_search(self):
        m =Member()
        uid = input("请输入工号")
        try:
            name = m.names[int(uid[4:])]
            job = m.jobs[name] + m.grades[name]
            salary = m.salarys[name]
        except:
            print("该员工不存在")
        else:
            print(f"{name},工号:{uid},当前职位:{job},当前薪资:{salary}")
    def job_search(self):
        m = Member()
        job = input("职位(E.普通员工;T.组长;M.经理):")
        sums = 0
        _ = []
        if job == "E":
            for each in m.names:
                if m.jobs[name] == "E":
                    sums += 1
                    _.append[each]
                print(f"当前普通员工共有{sums}人")
                for each in _:
                    print(f"{m.uids[each]}-each")
        if job == "T":
            for each in m.names:
                if m.jobs[name] == "T":
                    sums += 1
                    _.append[each]
                print(f"当前组长共有{sums}人")
                for each in _:
                    print(f"{m.uids[each]}-each")
        if job == "M":
            for each in m.names:
                if m.jobs[name] == "M":
                    sums += 1
                    _.append[each]
                print(f"当前经理共有{sums}人")
                for each in _:
                    print(f"{m.uids[each]}-each")
    def upgrade(self):
        m = Member()
        s = SalaryMixin()
        uid = input("请输入工号:")
        sums = 0
        try:
            name = m.names[int(uid[4:])]
            job = m.jobs[name] + m.grades[name]
            salary = m.salarys[name]
        except:
            print("该员工不存在")
        else:
            print(f"{name},工号:{uid},当前职位:{job},当前薪资:{salary}")
        if m.jobs[name] == "E":
            grade = input("请输入需要增加的级数")
            sums = int(m.grades[name]) + int(grade)
            while sums > 19:
                grade = input("级别错误,请输入需要增加的级数")
                sums = int(m.grades[name]) + int(grade)
            else:
                if sums < 11:
                    print("升级成功")
                    salary = int(salary) + 500 * int(grade)
                    job = m.jobs[name] + str(sums)
                    print(f"{name},工号:{uid},当前职位:{job},当前薪资:{salary}")
                if sums > 10 and sums < 17:
                    print("升级成功")
                    salary = s.salary(sums-10,m.years[name],"T")
                    job = "T"+str(sums-10)
                    print(f"{name},工号:{uid},当前职位:{job},当前薪资:{salary}")
                if sums > 16 and sums < 20:
                    print("升级成功")
                    salary = s.salary(sums-16,m.years[name],"M")
                    job = "M"+str(sums-16)
                    print(f"{name},工号:{uid},当前职位:{job},当前薪资:{salary}")
        if m.jobs[name] == "T":
            grade = input("请输入需要增加的级数")
            sums = int(m.grades[name]) + int(grade)
            while sums > 9:
                grade = input("级别错误,请输入需要增加的级数")
                sums = int(m.grades[name]) + int(grade)
            else:
                if sums < 4:
                    print("升级成功")
                    salary = int(salary) + 800 * int(grade)
                    job = m.jobs[name] + str(sums)
                    print(f"{name},工号:{uid},当前职位:{job},当前薪资:{salary}
                if sums > 3 and sums < 10:
                    print("升级成功")
                    salary = s.salary(sums-3,m.years[name],"M")
                    job = "M"+str(sums-3)
                    print(f"{name},工号:{uid},当前职位:{job},当前薪资:{salary}
        if m.jobs[name] == "M":
            grade = input("请输入需要增加的级数")
            sums = int(m.grades[name]) + int(grade)
            while sums > 3:
                grade = input("级别错误,请输入需要增加的级数")
                sums = int(m.grades[name]) + int(grade)
            else:
                print("升级成功")
                salary = int(salary) + 1000 * int(grade)
                job = m.jobs[name] + str(sums)
                print(f"{name},工号:{uid},当前职位:{job},当前薪资:{salary}
    def downgrade(self):
        m = Member()
        s = SalaryMixin()
        uid = input("请输入工号:")
        sums = 0
        try:
            name = m.names[int(uid[4:])]
            job = m.jobs[name] + m.grades[name]
            salary = m.salarys[name]
        except:
            print("该员工不存在")
        else:
            print(f"{name},工号:{uid},当前职位:{job},当前薪资:{salary}")
        if m.jobs[name] == "E":
            grade = input("请输入需要减少的级数")
            sums = int(m.grades[name]) - int(grade)
        while sums < 1:
                grade = input("级别错误,请输入需要增加的级数")
                sums = int(m.grades[name]) + int(grade)
        else:
            print("降级成功")
            salary = int(salary) - 500 * int(grade)
            job = m.jobs[name] + str(sums)
            print(f"{name},工号:{uid},当前职位:{job},当前薪资:{salary}")
         if m.jobs[name] == "T":
            grade = input("请输入需要减少的级数")
            sums = int(m.grades[name]) - int(grade) + 10
            while sums < 1:
                grade = input("级别错误,请输入需要增加的级数")
                sums = int(m.grades[name]) + int(grade)
            else:
                if sums > 10:
                    print("降级成功")
                    salary = int(salary) - 800 * int(grade)
                    job = m.jobs[name] + str(sums)
                    print(f"{name},工号:{uid},当前职位:{job},当前薪资:{salary}")
                if sums < 11:
                    print("降级成功")
                    salary = s.salary(sums,m.years[name],"E")
                    job = "E"+str(sums)
                    print(f"{name},工号:{uid},当前职位:{job},当前薪资:{salary}")
         if m.jobs[name] == "M":
            grade = input("请输入需要减少的级数")
            sums = int(m.grades[name]) - int(grade) + 16
            while sums < 1:
                grade = input("级别错误,请输入需要增加的级数")
                sums = int(m.grades[name]) + int(grade)
            else:
                if sums > 16:
                    print("降级成功")
                    salary = int(salary) - 1000 * int(grade)
                    job = m.jobs[name] + str(sums)
                    print(f"{name},工号:{uid},当前职位:{job},当前薪资:{salary}")
                if sums > 10 and sums < 17:
                    print("降级成功")
                    salary = s.salary(sums-10,m.years[name],"T")
                    job = "T"+str(sums-10)
                    print(f"{name},工号:{uid},当前职位:{job},当前薪资:{salary}")
                if sums < 11:
                    print("降级成功")
                    salary = s.salary(sums,m.years[name],"E")
                    job = "E"+str(sums)
                    print(f"{name},工号:{uid},当前职位:{job},当前薪资:{salary}")
while True:
    command = input("1.录入;2.查询;3.升级;4.降级;5.退出:")
    m = Manage()
    if command == "1":
        m.log_in()
    if command == "2":
        search = input("1.员工查询;2.职位查询:")
        if search == "1":
            m.staff_search()
        else:
            m.job_search()
    if command == "3":
        m.upgrade()
    if command == "4":
        m.downgrade()
    if command == "5":
        break
        

                    
                    

               

        
                          
                                

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

使用道具 举报

发表于 2023-5-2 16:35:07 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-5-2 09:51:20 | 显示全部楼层
0)
1)尽管我们的接口是不变的,但它却可以根据不同的对象执行不同的操作
2)不可以
3)
4)降低了耦合度
5)是
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-27 15:58:36 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-4-25 09:47:45 | 显示全部楼层
1
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-4-24 20:18:45 | 显示全部楼层
1
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-4-24 11:32:32 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-4-22 16:22:20 | 显示全部楼层
录入 查询 升级 降级
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-22 14:05:08 | 显示全部楼层
class Employee:
    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=self.get_salary()
    def get_uid(self):
        pass
    def get_name(self):
        pass
    def get_job(self):
        pass
    def get_grade(self):
        pass
    def get_year(self):
        pass
    def get_salary(self):
        if self.job=='E':
            return 3000+500*self.grade+50*self.year
        elif self.job=='T':
            return 4000+800*self.grade+100*self.year
        else:
            return 5000+1000*(self.grade+self.year)
class Manage:
    def __init__(self):
        self.members={}
        self.count=10000
    def opening(self):
        s=0
        while s!='5':
            s=input("1.录入;2.查询;3.升级;4.降级;5.退出:")
            if s=='1':
                self.create()
            elif s=='2':
                self.search()
            elif s=='3':
                self.upgrade()
            elif s=='4':
                self.degrade()
    def create(self):
        name=input("姓名:")
        job=input( "职位(E.普通员工;T.组长;M.经理):")
        year=int(input("工龄:"))
        grade=self.check_grade(job)
        self.members[self.count]=Employee(name,job,grade,year,self.count)
        print(f"录入成功!姓名:{name},工号:{self.count},薪资:{self.members[self.count].salary}")
        self.count+=1
    def search(self):
        c=input("1.员工查询;2.职位查询:")
        if c=='1':
            uid=int(input("请输入工号:"))
            if uid not in self.members:
                print("该工号不存在!")
            else:
                print(f"姓名:{self.members[uid].name}")
                print(f"职位:{self.members[uid].job}")
                print(f"级别:{self.members[uid].grade}")
                print(f"工龄:{self.members[uid].year}")
                print(f"工资:{self.members[uid].salary}")
        else:
            job=input("职位(E.普通员工;T.组长;M.经理):")
            nums=0
            ls=[]
            for i in self.members:
                if self.members[i].job==job:
                    nums+=1
                    ls.append(f"{self.members[i].uid}-{self.members[i].name}")
            if nums:
                print(f"目前{job}共有{nums}人")
                print('\n'.join(ls))
            else:
                print(f"目前公司没有{job}!")
    def check_grade(self,job):
        grade=int(input("级别:"))
        while True:
            if job=='E' and grade>10:
                grade=int(input("该职位最高级别为10,请重新录入级别:"))
            elif job=='T' and grade>6:
                grade=int(input("该职位最高级别为6,请重新录入级别:"))
            elif job=='M' and grade>3:
                grade=int(input("该职位最高级别为3,请重新录入级别:"))
            else:
                return grade
    def upgrade(self):
        uid=int(input("请输入工号:"))
        ins=self.members[uid]
        print(f"{ins.name},工号:{ins.uid},当前职位:{ins.job}{ins.grade},当前薪资:{ins.salary}")
        adds=int(input("请输入需要增加的级数:"))
        if ins.job=='E':
            if ins.grade+adds>10:
                ins.grade=1
                ins.job='T'
            else:
                ins.grsde+=adds
        elif ins.job=='T':
            if ins.grade+adds>6:
                ins.grade=1
                ins.job='M'
            else:
                ins.grsde+=adds
        else:
            ins.grade+=adds
        old_salary=ins.salary
        ins.salary=ins.get_salary()
        print("升级成功")
        print(f"{ins.name},工号:{ins.uid},升级后职位:{ins.job}{ins.grade},升级后薪资:{ins.salary}(+{ins.salary-old_salary})")
    def degrade(self):
        uid=int(input("请输入工号:"))
        ins=self.members[uid]
        print(f"{ins.name},工号:{ins.uid},当前职位:{ins.job}{ins.grade},当前薪资:{ins.salary}")
        drops=int(input("请输入需要减少的级数:"))
        if ins.job=='M':
            if ins.grade-drops<0:
                ins.grade=6
                ins.job='T'
            else:
                ins.grsde-=drops
        elif ins.job=='T':
            if ins.grade-drops>0:
                ins.grade=10
                ins.job='E'
            else:
                ins.grsde-=drops
        else:
            ins.grade-=drops
        old_salary=ins.salary
        ins.salary=ins.get_salary()
        print("降级成功")
        print(f"{ins.name},工号:{ins.uid},降级后职位:{ins.job}{ins.grade},降级后薪资:{ins.salary}({ins.salary-old_salary})")
        
def main():
    m=Manage()
    m.opening()

main()
        
               
        
            


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

使用道具 举报

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

使用道具 举报

发表于 2023-4-18 14:54:16 | 显示全部楼层
看答案
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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