鱼C论坛

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

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

  [复制链接]
发表于 2023-3-6 17:43:48 | 显示全部楼层
零基础入门学习Python封面
《零基础入门学习Python》
(最新版)
小甲鱼 著
立即购买
2. 可以
5. 不是
输入对象都是 int 类的变量 只是 z是否按默认取值

0.
def main():
    index = int(input("1.录入;2.查询;3.升级;4.降级;5.退出:"))
    uid = 9999
    worker = [0 for i in range(uid+1)]
    while index!=5:
        if index == 1:
            name = input("姓名:")
            job = input("职位(E.普通员;T.组长;M.经理):")
            if job == 'E':
                max_grade = 10
            elif job == 'T':
                max_grade = 6
            elif job == 'M':
                max_grade = 3
            year = int(input("工龄:"))
            grade = int(input("级别:"))
            while grade>max_grade:
                grade = int(input(f"该职位最高级别为{max_grade},请重新录入级别:"))

            
            uid += 1
            worker.append(0)
            worker[uid] = Worker(name,job,grade,year,uid)
            print(f"录入成功!姓名:{worker[uid].name},工号:{uid},资薪:{worker[uid].salary()}")
            index = int(input("1.录入;2.查询;3.升级;4.降级;5.退出:"))

        elif index == 2:
            check = int(input("1.员工查询;2.职位查询:"))
            if check == 1:
                _ = int(input("请输入工号:"))
                if _>len(worker)-1 or _<10000:
                    print("该员工不存在!")
                    index = int(input("1.录入;2.查询;3.升级;4.降级;5.退出:"))
                else:
                    worker[_].worker_inquire()
                    index = int(input("1.录入;2.查询;3.升级;4.降级;5.退出:"))
            elif check == 2:
                job_ = input("职位(E.普通员;T.组长;M.经理):")
                sum1 = sum([1 for i in worker[10000:] if i.job == job_])
                if sum1 == 0:
                    if job_ == 'E':
                        print("目前公司没有普通员工")
                    elif job_ == 'T':
                        print("目前公司没有组长")
                    elif job_ == 'M':
                        print("目前公司没有经理")
                else:
                    if job_ == 'E':
                        print("目前普通员工共有{}人".format(sum1))
                    elif job_ == 'T':
                        print("目前组长共有{}人".format(sum1))
                    elif job_ == 'M':
                        print("目前经理共有{}人".format(sum1))
                    for _ in worker[10000:]:
                        if _.job == job_:
                            print(_.uid," - ",_.name)
                index = int(input("1.录入;2.查询;3.升级;4.降级;5.退出:"))

        elif index == 3:
            uid_ = int(input("请输入工号:"))
            if uid_>len(worker)-1 or uid_<10000:
                print("该员工不存在!")
                index = int(input("1.录入;2.查询;3.升级;4.降级;5.退出:"))
            else:
                print(f"{worker[uid_].name},工号:{worker[uid_].uid},当前职位:{worker[uid_].job}{worker[uid_].grade},当前资薪:{worker[uid_].salary()}")
                temp = worker[uid_].salary()

               
                add_grade = int(input("请输入需要增加的级数:"))
                if worker[uid_].job == 'E':
                    max_grade = 10
                    if add_grade + worker[uid_].grade > max_grade:
                        worker[uid_].job = 'T'
                        worker[uid_].grade = 1
                    else:
                        worker[uid_].grade = add_grade + worker[uid_].grade
                        
                elif worker[uid_].job == 'T':
                    max_grade = 6
                    if add_grade + worker[uid_].grade > max_grade:
                        worker[uid_].job = 'M'
                        worker[uid_].grade = 1
                    else:
                        worker[uid_].grade = add_grade + worker[uid_].grade
                        
                elif worker[uid_].job == 'M':
                    max_grade = 3
                    if add_grade + worker[uid_].grade > max_grade:
                        print("没有这个级别")
                        index = int(input("1.录入;2.查询;3.升级;4.降级;5.退出:"))
                    else:
                        worker[uid_].grade = add_grade + worker[uid_].grade
                        
                print("升级成功!")
                print(f"{worker[uid_].name},工号:{worker[uid_].uid},升级后职位:{worker[uid_].job}{worker[uid_].grade},升级后资薪:{worker[uid_].salary()}(+{worker[uid_].salary()-temp})")
               

               
            index = int(input("1.录入;2.查询;3.升级;4.降级;5.退出:"))

        elif index == 4:
            uid_ = int(input("请输入工号:"))
            if uid_>len(worker)-1 or uid_<10000:
                print("该员工不存在!")
                index = int(input("1.录入;2.查询;3.升级;4.降级;5.退出:"))
            else:
                print(f"{worker[uid_].name},工号:{worker[uid_].uid},当前职位:{worker[uid_].job}{worker[uid_].grade},当前资薪:{worker[uid_].salary()}")
                temp = worker[uid_].salary()
               
                add_grade = int(input("请输入需要减少的级数:"))
                if worker[uid_].job == 'M':
                    min_grade = 1
                    if  worker[uid_].grade - add_grade < min_grade:
                        worker[uid_].job = 'T'
                        worker[uid_].grade = 6
                    else:
                        worker[uid_].grade = worker[uid_].grade - add_grade

                elif worker[uid_].job == 'T':
                    min_grade = 1
                    if aworker[uid_].grade - add_grade < min_grade:
                        worker[uid_].job = 'E'
                        worker[uid_].grade = 10
                    else:
                        worker[uid_].grade = worker[uid_].grade - add_grade
                        
                elif worker[uid_].job == 'E':
                    min_grade = 1
                    if worker[uid_].grade - add_grade < min_grade:
                        print("没有这个级别")
                        index = int(input("1.录入;2.查询;3.升级;4.降级;5.退出:"))
                    else:
                        worker[uid_].grade = worker[uid_].grade - add_grade

            print("降级成功!")
            print(f"{worker[uid_].name},工号:{worker[uid_].uid},降级后职位:{worker[uid_].job}{worker[uid_].grade},降级后资薪:{worker[uid_].salary()}({worker[uid_].salary()-temp})")


               
            index = int(input("1.录入;2.查询;3.升级;4.降级;5.退出:"))
   


class Worker:
    def __init__(self,name=None,job=None,grade=None,year=None,uid=None):
        self.name = name
        self.job = job
        self.grade = grade
        self.year = year
        self.uid = uid

    def salary(self):
        if self.job == 'E':
            return 3000 + 500 * self.grade + 50 * self.year
        if self.job == 'T':
            return 4000 + 800 * self.grade + 100 * self.year
        if self.job == 'M':
            return 5000 + 1000 *(self.grade + self.year)

    def worker_inquire(self):
        print(f"姓名:{self.name}")
        print(f"职位:{self.job}")
        print(f"级别:{self.grade}")
        print(f"工龄:{self.year}")
        print(f"薪资:{self.salary()}")


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

使用道具 举报

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

使用道具 举报

发表于 2023-3-4 09:58:38 | 显示全部楼层
我曾经跨过山和大海
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-3 17:15:54 | 显示全部楼层
0. 不同类的对象均可使用同一种方法
1. 利用多态可以让不同类的对象执行同一种方法
2. 可以
3.
4. 增强内聚
5. 不属于

0.
uids = iter(range(10000, 100000))
uid_used = []
employees = []

def get_uid(uids):
    uid = int(input("请输入工号:"))
    while uid not in uids:
        uid = int(input("工号不存在,请重新输入:"))
    return uid

class infoMixin:
    def info(self, name, job, grade, year, uid):
        self.name = name
        self.job = job
        self.grade = grade
        self.year = year
        self.uid = uid

class checkMixin:
    def check_grade(self):
        if self.job == "E":
            if self.grade > 10 or self.grade < 0:
                self.grade = int(input("超过范围,该职位级别为1~10,请重新输入:"))
        elif self.job == "T":
            if self.grade > 6 or self.grade < 0:
                self.grade = int(input("超过范围,该职位级别为1~6,请重新输入:"))
        elif self.job == "M":
            if self.grade > 3 or self.grade < 0:
                self.grade = int(input("超过范围,该职位级别为1~3,请重新输入:"))

    def up_grade(self, x):
        if self.job == "E":
            if x + self.grade > 10:
                self.job = "T"
                self.grade = 1
            else:
                self.grade += x
        elif self.job == "T":
            if x + self.grade > 6:
                self.job = "M"
                self.grade = 1
            else:
                self.grade += x
        else:
            while x + self.grade > 3:
                x = int(input("超过范围,该职位级别为1~3,请重新输入:"))
            self.grade += x

    def down_grade(self, x):
        if self.job == "M":
            if self.grade - x <= 0:
                self.job = "T"
                self.grade = 6
            else:
                self.grade -= x
        elif self.job == "T":
            if self.grade - 2 <= 0:
                self.job = "E"
                self.grade = 10
            else:
                self.grade -= x
        else:
            while x + self.grade <= 0:
                x = int(input("超过范围,该职位级别为1~10,请重新输入:"))
            self.grade -= x      


class toolMixin:
    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):
        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 Employee(infoMixin, checkMixin, toolMixin):
    def __init__(self, name, job, grade, year, uid):
        super().info(name, job, grade, year, uid)
        super().check_grade()

class Teamleader(infoMixin, checkMixin, toolMixin):
    def __init__(self, name, job, grade, year, uid):
        super().info(name, job, grade, year, uid)
        super().check_grade()

class Manager(infoMixin, checkMixin, toolMixin):
    def __init__(self, name, job, grade, year, uid):
        super().info(name, job, grade, year, uid)
        super().check_grade()

class Manage:
    def greet(self):
        command = input("1.录入;2.查询;3.升级;4.降级;5.退出")
        return command

    def register(self):
        name = input("姓名:")
        job = input("职位(E.普通员工;T.组长;M.经理):")
        year = int(input("工龄:"))
        grade = int(input("级别:"))
        uid = next(uids)
        if job == "E":
            employees.append(Employee(name, job, year, grade, uid))
        elif job == "T":
            employees.append(Teamleader(name, job, year, grade, uid))
        elif job == "M":
            employees.append(Manager(name, job, year, grade, uid))
        uid_used.append(uid)

    def search(self):
        command = input("1.员工查询;2.职位查询:")
        if command == "1":
            uid = get_uid(uid_used)
            for each in employees:
                if each.uid == uid:
                    print(f"姓名:{each.get_name()}\n职位:{each.get_job()}\n级别:{each.get_grade()}\n工龄:{each.get_year()}\n薪资:{each.salary()}")
                    break
        elif command == "2":
            job = input("请输入职位(E.普通员工;T.组长;M.经理):")
            count = 0
            p = [each for each in employees if each.job == job]
            if job == "E":
                print(f"目前普通员工共{len(p)}人:")
            elif job == "T":
                print(f"目前组长共{len(p)}人:")
            else:
                print(f"目前经理共{len(p)}人:")
            for each in p:
                print(f"{each.uid} --{each.name}")

    def upgrade(self):
        uid = get_uid(uid_used)
        for each in employees:
            if each.uid == uid:
                print(f"{each.name},工号:{each.uid},当前职位:{each.job}{each.grade},当前薪资:{each.salary()}")
                x = int(input("请输入需要增加的级数:"))
                y = each.salary()
                each.up_grade(x)
        print("升级成功!")
        print(f"{each.name},工号:{each.uid},升级后职位:{each.job}{each.grade},升级后薪资:{each.salary()}(+{each.salary() - y})")

    def downgrade(self):
        uid = get_uid(uid_used)
        for each in employees:
            if each.uid == uid:
                print(f"{each.name},工号:{each.uid},当前职位:{each.job}{each.grade},当前薪资:{each.salary()}")
                x = int(input("请输入需要降低的级数:"))
                y = each.salary()
                each.down_grade(x)
        print("降级成功!")
        print(f"{each.name},工号:{each.uid},降级后职位:{each.job}{each.grade},降级后薪资:{each.salary()}(-{y - each.salary()})")

def main():
    manage = Manage()
    while 1:
        command = manage.greet()
        if command == "1":
            manage.register()
        elif command == "2":
            manage.search()
        elif command == "3":
            manage.upgrade()
        elif command == "4":
            manage.downgrade()
        elif command == "5":
            break

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

使用道具 举报

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

使用道具 举报

发表于 2023-3-2 16:50:18 | 显示全部楼层
答案
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-3-2 16:46:48 | 显示全部楼层
0.允许在子类中定义与父类相同名字的方法
1.可以 运算符的多态
2.不知道
4.增强内聚
5.不属于吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-27 15:50:11 | 显示全部楼层
class level_optMixin:
    def level_max(self,job):
        if job == 'E':
            return 10
        elif job == 'T':
            return 6
        elif job == 'M':
            return 3
    def level_judge(self,level,level_max):
        while level >level_max:
            level = int(input(f'该职位最高级别为{level_max},请重新录入级别:'))
        return level



class Employee:
    def __init__(self,name,job,level,year,uid,salary):
        self.name = name
        self.job = job
        self.level = level
        self.year = year
        self.uid = uid
        self.salary = salary

    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_uid(self):
        return self_uid

class Job_statistic:
   
   
    def statistic(self,job,employees):
        temp = {}
        count = 0
        for each in employees:
            if self.employees[each].job == job:
                count +=1
                temp[each] = self.employees[each].name
               
        if job == 'E':
            print(f'目前普通员工共有{count}人:')
        elif job == 'T':
            print(f'目前组长共有{count}人:')
        elif job == 'M':
            print(f'目前经理共有{count}人:')

        if len(temp) == 0:
            print('目前公司没有该职位')
        else:
            for each in temp:
                print(f'{each}-{temp[each]}')



class Salary:
    def output_salary(self,job,year,level):
        if job == 'E':
            return 3000+500*level+50*year
        elif job == 'T':
            return 4000+800*level+100*year
        elif job == 'M':
            return 5000+ 1000*(level + year)



class Manage(level_optMixin,Salary,Job_statistic):
    def __init__(self):
        self.employees = {}
        self.uid = 10000
        self.job_list = ['E','T','M']

    def inputorder(self):
        while True:
            order = int(input('\n1.录入;2.查询;3.升级;4.降级;5.退出:'))

        
            if order == 1:
                self.create_e()
                self.uid +=1
                continue
            elif order == 2:
                self.searching()
                continue
            elif order == 3:
                self.level_up()
                continue
            elif order == 4:
                self.level_down()
                continue
            elif order == 5:
                break
               




    def create_e(self):
        name = input('姓名:')
        
        job = input('(E.普通员工;T.组长;M.经理):')
        
        year = int(input('工龄:'))
        
        level = int(input('级别:'))
        level_max = self.level_max(job)
        level = self.level_judge(level,level_max)

        salary = self.output_salary(job,year,level)
        
        self.employees[self.uid] = Employee(name,job,level,year,self.uid,salary)

        print(f'录入成功!姓名:{name},工号:{self.uid},薪资:{salary}')


    def searching(self):
        order_0 = int(input('1.员工查询;2.职位查询:'))
        
        if order_0 == 1:
            uid_searching = int(input('请输入工号:'))
            if self.employees.get(uid_searching):
                print(f'姓名:{self.employees.get(uid_searching).name}')
                print(f'职位:{self.employees.get(uid_searching).job}')
                print(f'级别:{self.employees.get(uid_searching).level}')
                print(f'工龄:{self.employees.get(uid_searching).year}')
                print(f'薪资:{self.employees.get(uid_searching).salary}')
            else:
                print('该工号不存在')
        elif order_0 == 2:
            job_searching = input('(E.普通员工;T.组长;M.经理):')
            
            self.statistic(job_searching,self.employees)

    def level_up(self):
        uid_searching = int(input('请输入工号:'))
        if self.employees.get(uid_searching):
            print(f'{self.employees.get(uid_searching).name},\
工号{uid_searching},当前职位{self.employees.get(uid_searching).job}\
{self.employees.get(uid_searching).level},当前薪资\
{self.employees.get(uid_searching).salary}')
            
            job = self.employees.get(uid_searching).job
            level = self.employees.get(uid_searching).level
            
            index = self.job_list.index(job)
            
            level_max = self.level_max(job)
            level_up = int(input('请输入需要增加的级数:'))

            salary_old = self.employees.get(uid_searching).salary
            
            if level + level_up > level_max:
                job = self.job_list[index +1]
                level = 1
            else:
                level +=level_up

            year = self.employees.get(uid_searching).year

            salary_new = self.output_salary(job,year,level)

            self.employees.get(uid_searching).job = job
            self.employees.get(uid_searching).level = level
            self.employees.get(uid_searching).salary = salary_new
            print(f'{self.employees.get(uid_searching).name},\
工号{uid_searching},升级后职位{self.employees.get(uid_searching).job}\
{self.employees.get(uid_searching).level},\
升级后薪资{salary_new}({salary_new-salary_old})')
            
    def level_down(self):
        uid_searching = int(input('请输入工号:'))
        if self.employees.get(uid_searching):
            print(f'{self.employees.get(uid_searching).name},\
工号{uid_searching},当前职位{self.employees.get(uid_searching).job}\
{self.employees.get(uid_searching).level},当前薪资\
{self.employees.get(uid_searching).salary}')
            
            job = self.employees.get(uid_searching).job
            level = self.employees.get(uid_searching).level
            
            index = self.job_list.index(job)
            
            salary_old = self.employees.get(uid_searching).salary
            
            level_down = int(input('请输入需要减少的级数:'))
            if level - level_down < 1:
                job = self.job_list[index -1]
                level = self.level_max(job)
            else:
                level -=level_down

            year = self.employees.get(uid_searching).year
            
            self.employees.get(uid_searching).job = job
            self.employees.get(uid_searching).level = level
            salary_new = self.output_salary(job,year,level)
            
            print(f'{self.employees.get(uid_searching).name},\
工号{uid_searching},降级后职位{self.employees.get(uid_searching).job}\
{self.employees.get(uid_searching).level},\
降级后薪资{salary_new}({salary_new-salary_old})')
        
        
def main():
    m = Manage()
    m.inputorder()

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

使用道具 举报

发表于 2023-2-26 14:58:18 | 显示全部楼层
0.
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-2-24 12:13:24 | 显示全部楼层
import sys

class Person:
    uid = 10000
    person_list = []

    def __init__(self, name, job, grade, year, uid):
        self.name = name
        self.job = job
        self.grade = grade
        self.year = year
        self.uid = uid
        self.money = None

    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):
        if self.job == 'E':
            self.money =  3000 + 500 * self.grade + 50 * self.year
        elif self.job == 'T':
            self.money =  4000 + 800 * self.grade + 100 * self.year
        elif self.job == 'M':
            self.money =  5000 + 1000 * (self.grade + self.year)


class Employee(Person):
    def __init__(self,name, job, grade, year, uid):
        super().__init__(name, job, grade, year, uid)
        self.job = 'E'
        self.grade_max = 10


    def salary(self):
        self.money = 3000 + 500 * self.grade + 50 * self.year
        return self.money


class Teamleader(Person):
    def __init__(self,name, job, grade, year, uid):
        super().__init__(name, job, grade, year, uid)
        self.job = 'T'
        self.grade_max = 6

    def salary(self):
        self.money = 4000 + 800 * self.grade + 100 * self.year
        return self.money


class Manager(Person):
    def __init__(self,name, job, grade, year, uid):
        super().__init__(name, job, grade, year, uid)
        self.job = 'M'
        self.grade_max = 3

    def salary(self):
        self.money = 5000 + 1000 * (self.grade + self.year)
        return self.money



def add():
    name = input('姓名:')
    job = input('职位(E.普通员工;T.组长;M.经理):')
    year = int(input('工龄:'))
    grade = int(input('级别:'))
    if job == 'E':
        p = Employee(name, job, grade, year, Person.uid)
        if p.grade > p.grade_max:
            p.grade = int(input(f'该职位最高级别为{p.grade_max},请重新输入级别:'))
            p.salary()
    elif job == 'T':
        p = Teamleader(name, job, grade, year, Person.uid)
        if p.grade > p.grade_max:
            p.grade = int(input(f'该职位最高级别为{p.grade_max},请重新输入级别:'))
            p.salary()
    elif job == 'M':
        p = Manager(name, job, grade, year, Person.uid)
        if p.grade > p.grade_max:
            p.grade = int(input(f'该职位最高级别为{p.grade_max},请重新输入级别:'))
    p.money = p.salary()
    Person.person_list.append(p)
    print(f'录入成功!姓名:{p.name},工号:{Person.uid},薪资:{p.money}')
    Person.uid += 1

def search():
    res = int(input('1.员工查询;2.职位查询:'))
    if res == 1:
        uid = int(input('请输入工号:'))
        for p in Person.person_list:
            if uid == p.uid:
                print(f'姓名: {p.name}')
                print(f'职位: {p.job}')
                print(f'级别: {p.grade}')
                print(f'工龄: {p.year}')
                print(f'薪资: {p.money}')
                break
        else:
            print('该工号不存在!')
    elif res == 2:
        res = input('职位(E.普通员工;T.组长;M.经理):')
        if res == "E":
            p_lst = []
            for p in Person.person_list:
                if p.job == res:
                    p_lst.append(p)
            print(f'目前普通员工共有 {len(p_lst)} 人')
            for p in p_lst:
                print(f'{p.uid} - {p.name}')
            if len(p_lst) == 0:
                print('目前公司没有普通员工!')
        elif res == 'T':
            p_lst = []
            for p in Person.person_list:
                if p.job == res:
                    p_lst.append(p)
            print(f'目前组长共有 {len(p_lst)} 人')
            for p in p_lst:
                print(f'{p.uid} - {p.name}')
            if len(p_lst) == 0:
                print('目前公司没有组长!')
        elif res == 'M':
            p_lst = []
            for p in Person.person_list:
                if p.job == res:
                    p_lst.append(p)
            print(f'目前经理共有 {len(p_lst)} 人')
            for p in p_lst:
                print(f'{p.uid} - {p.name}')
            if len(p_lst) == 0:
                print('目前公司没有经理!')

def upgrade():
    uid = int(input('请输入工号:'))

    for p in Person.person_list:
        if p.name == uid:
            m1 = int(p.money)
            print(f'{p.name},工号: {uid},当前职位:{p.job}{p.grade},当前薪资:{p.money}')
            grade = int(input('请输入需要增加的级数:'))
            p.grade = p.grade + grade
            if p.grade > p.grade_max:
                if p.job == 'E':
                    p.job = 'T'
                    p.grade = p.grade - p.grade_max
                elif p.job == 'T':
                    p.job = 'M'
                    p.grade = p.grade - p.grade_max
            p.salary()
            m2 = int(p.money)
            print('升级成功')
            print(f'{p.name},工号: {uid},升级后职位职位:{p.job}{p.grade},升级后薪资:{p.money}(+{m2-m1})')


def downgrade():
    uid = int(input('请输入工号:'))
    for p in Person.person_list:
        if p.name == uid:
            m1 = int(p.money)
            print(f'{p.name},工号: {uid},当前职位:{p.job}{p.grade},当前薪资:{p.money}')
            grade = int(input('请输入需要减少的级数:'))
            p.grade = p.grade - grade
            if p.grade < 0:
                if p.job == 'T':
                    p.job = 'E'
                    p.grade = p.grade_max - p.grade
                elif p.job == 'M':
                    p.job = 'T'
                    p.grade = p.grade_max - p.grade
            p.salary()
            m2 = int(p.money)
            print('降级成功')
            print(f'{p.name},工号: {uid},降级后职位:{p.job}{p.grade},降级后薪资:{p.money}(-{m2 - m1})')
            break



def main():
    while True:
        res = int(input('\n1.录入;2.查询;3.升级;4.降级;5.退出:'))
        if res == 1:
            add()
        elif res == 2:
            search()
        elif res == 3:
            upgrade()
        elif res == 4:
            downgrade()
        elif res == 5:
            break


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

使用道具 举报

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

使用道具 举报

发表于 2023-2-23 11:08:48 | 显示全部楼层
0.
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-2-22 15:16:05 | 显示全部楼层
写个简单的 偷懒啦
class yuangong():
    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
class employees(yuangong):
    def __init__(self,name,job,grade,year,uid):
        super().__init__(name,job,grade,year,uid)
    def salary(self):
        return 3000 + 500*self.grade+50*self.year
class teamleader(yuangong):
    def __init__(self,name,job,grade,year,uid):
        super().__init__(name,job,grade,year,uid)
    def salary(self):
        return 4000+800*self.grade+100*self.year
class manager(yuangong):
    def __init__(self,name,job,grade,year,uid):
        super().__init__(name,job,grade,year,uid)
    def salary(self):
        return 5000 + 1000*(self.grade+self.year)

class Manager_min():
    def __init__(self):
        self.employee = {}
        self.uid = 10000
    def welcom(self):
        print('欢迎使用员工管理系统')
        while 1 :
            ins = input('请输入您的命令:1.增加员工 2.查询 3.升级 4.降级 5.退出')
            if ins == '1':
                self.create_yuangong()
            elif ins == '2':
                self.select()
            elif ins == '3':
                pass
            elif ins == '4':
                pass
            elif ins == '5':
                print('感谢使用员工管理系统,再见!')
                break
            else :
                print('你输入的密码不正确 ',end = '')
    def create_yuangong(self):
        name = input('请输入员工名称')
        job = input('职位(E员工 T组长 M经理)')
        year = int(input('工龄'))
        grade = int(input('级别'))
        
        if job == 'E':
            employee = employees(name,job,grade,year,self.uid)
            self.employee[self.uid] = employee

        elif job == 'T':
            employee = teamleader(name,job,grade,year,self.uid)
            self.employee[self.uid] = employee

        else:
            employee = manager(name,job,grade,year,self.uid)
            self.employee[self.uid] = employee
        self.uid += 1
    def select(self):
        uid = int(input('请输入你要查询的员工号'))
        while uid not in self.employee:
            uid = int(input('你输入的员工号不存在,请重新输入'))
        print(f'姓名:{self.employee[uid].name}\n职位:{self.employee[uid].job}\n级别:{self.employee[uid].job}\n工龄:{self.employee[uid].year}\n薪资:{self.employee[uid].salary()}')

def main():
    main = Manager_min()
    main.welcom()

main()







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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

发表于 2023-2-20 11:39:04 | 显示全部楼层
0.同名方法,在不同类中的功能不一样
1.不同对象中的计算长度的函数可以用一个len()就解决
2.不能
3.
4.增强了内聚,降低了耦合
5.不是
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-19 16:29:06 | 显示全部楼层
0.
方法的作用在不同状况下各不相同
1.

2.
可以
3.

4.
降低藕合
5.
不能

动动手:
  1. class JobMixin:
  2.     def shift_en(self, job):
  3.         if job == 'E':
  4.             return 'Employee'
  5.         elif job == 'T':
  6.             return 'Teamleader'
  7.         elif job == 'M':
  8.             return 'Manager'

  9.     def shift_cn(self, job):
  10.         if job == 'E':
  11.             return "普通员工"
  12.         elif job == 'T':
  13.             return "组长"
  14.         elif job == 'M':
  15.             return "经理"

  16.     def up_down(self, job, grade):
  17.         job_id = {'Employee': 0, 'Teamleader': 1, 'Manager': 2}
  18.         job_name = ['Employee', 'Teamleader', 'Manager']
  19.         grade_scope = {'Employee': 10, 'Teamleader': 6, 'Manager': 3}
  20.         id = job_id[job]
  21.         scope = grade_scope[job]
  22.         if grade > scope:
  23.             if id == 2:
  24.                 grade = scope
  25.             else:
  26.                 grade = 1
  27.                 id += 1
  28.                 job = job_name[id]
  29.         if grade < 0:
  30.             if id == 0:
  31.                 grade = 1
  32.             else:
  33.                 id -= 1
  34.                 job = job_name[id]
  35.                 grade = grade_scope[job]
  36.         return job, grade

  37.     def check(self, x, y='job'):
  38.         if isinstance(x, str):
  39.             while x not in ['E', 'T', 'M']:
  40.                 x = input("请输入正确的职位(E.普通员工;T.组长;M.经理):")
  41.         elif isinstance(x, int):
  42.             grade_scope = {'Employee': 10, 'Teamleader': 6, 'Manager': 3}
  43.             scope = grade_scope[y]
  44.             while x not in range(scope+1):
  45.                 x = int(input(f"该职位最高级别为{scope},请重新录入级别:"))
  46.         return x

  47. class Staff:
  48.     def __init__(self, name, job, year, grade, uid):
  49.         self.name = name
  50.         self.job = job
  51.         self.year = year
  52.         self.grade = grade
  53.         self.uid = uid

  54.     def get_uid(self):
  55.         return self.uid

  56.     def get_name(self):
  57.         return self.name

  58.     def get_job(self):
  59.         return self.job

  60.     def get_grade(self):
  61.         return self.grade

  62.     def get_year(self):
  63.         return self.year

  64.     def salary(self):
  65.         if self.job == 'Employee':
  66.             return 3000 + 500 * self.grade + 50 * self.year
  67.         elif self.job == 'Teamleader':
  68.             return 4000 + 800 * self.grade + 100 * self.year
  69.         elif self.job == 'Manager':
  70.             return 5000 + 1000 * (self.grade + self.year)

  71. class Manage(JobMixin):
  72.     def __init__(self):
  73.         self.members = {}
  74.         self.job = {'Employee': {}, 'Teamleader': {}, 'Manager': {}}
  75.         self.uid = 10000

  76.     def register(self):
  77.         name = input("姓名:")
  78.         job = input("职位(E.普通员工;T.组长;M.经理):")
  79.         job = super().check(job)
  80.         job = super().shift_en(job)
  81.         year = int(input("工龄:"))
  82.         grade = int(input("级别:"))
  83.         grade = super().check(grade, job)
  84.         self.members[self.uid] = Staff(name, job, year, grade, self.uid)
  85.         self.job[job][self.uid] = name
  86.         salary = self.members[self.uid].salary()
  87.         print(f"录入成功!姓名:{name},工号:{self.uid},薪资:{salary}")
  88.         self.uid += 1

  89.     def inquire(self):
  90.         order = int(input("1.工人查询;2.职位查询:"))
  91.         if order == 1:
  92.             uid = int(input("请输入工号:"))
  93.             if uid in self.members:
  94.                 play = self.members[uid]
  95.                 salary = play.salary()
  96.                 print(f"姓名:{play.name}\n"
  97.                       f"职位:{play.job[0]}\n"
  98.                       f"级别:{play.grade}\n"
  99.                       f"工龄:{play.year}\n"
  100.                       f"薪资:{salary}")
  101.             else:
  102.                 print("该工号不存在!")

  103.         elif order == 2:
  104.             job = input("职位(E.普通员工;T.组长;M.经理):")
  105.             job = super().check(job)
  106.             job, job_cn = super().shift_en(job), super().shift_cn(job)
  107.             if self.job[job]:
  108.                 print(f"目前{job_cn}共有{len(self.job[job])}人:")
  109.                 for i in self.job[job]:
  110.                     print(f"{i} - {self.job[job][i]}")
  111.             else:
  112.                 print(f"目前公司没有{job_cn}")

  113.     def upgrade(self):
  114.         uid = int(input("请输入工号:"))
  115.         if uid in self.members:
  116.             play = self.members[uid]
  117.             salary = play.salary()
  118.             print(f"{play.name},工号:{uid},当前职位:{play.job[0]}{play.grade},当前薪资:{salary}")

  119.             up = int(input("请输入需要增加的级数:"))
  120.             print("升级成功")
  121.             grade = play.grade + up
  122.             job, grade = super().up_down(play.job, grade)
  123.             if play.job != job:
  124.                 del self.job[play.job][play.uid]
  125.                 self.job[job][play.uid] = play.name
  126.                 play.job = job
  127.             play.job = job
  128.             play.grade = grade
  129.             new_salary = play.salary()
  130.             print(f"{play.name},工号:{uid},升级后职位:{job[0]}{play.grade},升级后薪资:{new_salary}(+{new_salary - salary})")
  131.         else:
  132.             print("该工号不存在!")

  133.     def relegation(self):
  134.         uid = int(input("请输入工号:"))
  135.         if uid in self.members:
  136.             play = self.members[uid]
  137.             salary = play.salary()
  138.             print(f"{play.name},工号:{uid},当前职位:{play.grade},当前薪资:{salary}")

  139.             down = int(input("请输入需要增加的级数:"))
  140.             print("升级成功")
  141.             grade = play.grade - down
  142.             job, grade = super().up_down(play.job, grade)
  143.             if play.job != job:
  144.                 del self.job[play.job][play.uid]
  145.                 self.job[job][play.uid] = play.name
  146.                 play.job = job
  147.             play.grade = grade
  148.             new_salary = play.salary()
  149.             print(f"{play.name},工号:{uid},降级后职位:{job[0]}{play.grade},降级后薪资:{new_salary}({new_salary - salary})")
  150.         else:
  151.             print("该工号不存在!")


  152. # 执行
  153. main = Manage()
  154. while True:
  155.     try:
  156.         o = int(input("1.录入;2.查询;3.升级;4.降级;5.退出:"))
  157.         if o == 1:
  158.             main.register()
  159.         elif o == 2:
  160.             main.inquire()
  161.         elif o == 3:
  162.             main.upgrade()
  163.         elif o == 4:
  164.             main.relegation()
  165.         elif o == 5:
  166.             break
  167.     except ValueError:
  168.         print("请输入正确的指令!")
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

使用道具 举报

发表于 2023-2-18 15:11:40 | 显示全部楼层
问答题:

0.

1.根据不同的对象进行不同的操作

2.可以

3.

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

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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