04面向对象案例.py

class Student:
    def __init__(self,name,chinese,math,english):
        self.name=name
        self.chinese = chinese
        self.math = math
        self.english = english
    def __str__(self):
        return f"姓名:{self.name} | 语文:{self.chinese} | 数学:{self.math} | 英语:{self.english}"
    #修改成绩方法
    def update_score(self,chinese=None,math=None,english=None):
        if chinese is not None:
            self.chinese = chinese
        if math is not None:
            self.math = math
        if english is not None:
            self.english = english


class EduManagement:
    system_version = 1.0
    system_name = "教务管理系统"#类属性
    def __init__(self):
        self.student_list=[]

    def add_student(self):
        name = input("请输入学生姓名")
        for s in self.student_list:
            if name == s.name:
                print("学生已在系统中")
                return
        chinese = float(input("请输入语文成绩"))
        math = float(input('请输入数学成绩'))
        english = float(input("请输入英语成绩"))
        if 0<=chinese<=100 and 0<=math<=100 and 0<=english<=100:
            #创建学生实例
            stu = Student(name,chinese,math,english)
            self.student_list.append(stu)
            print("添加成功")
        else:
            print("学生成绩不合理")

    def update_student(self):
        name = input("请输入要修改的学生姓名")
        for s in self.student_list:
            if name == s.name:
                print(f"当前成绩:{s}")
                chinese = float(input("请输入修改后语文成绩"))
                math = float(input('请输入修改后数学成绩'))
                english = float(input("请输入修改后英语成绩"))
                if 0<=chinese<=100 and 0<=math<=100 and 0<=english<=100:
                    #调用学生类的方法
                    s.update_score(chinese,math,english)
                    print("修改成功")
                    print(f"当前成绩:{s}")
                    return
                else:
                    print("学生成绩不合理")
                    return
        print("未找到该学生")

    def delete_student(self):
        name = input("请输入要删除的学生姓名")
        for s in self.student_list:
            if name == s.name:
                self.student_list.remove(s)
                print("删除成功")
                return
        print("未找到该学生 删除失败")

    def find_student(self):
        name = input("请输入查询的学生姓名")
        for s in self.student_list:
            if name == s.name:
                #得益于__str__方法
                print(f"{s}")
                return
        print("未找到学生")

    def list_student(self):
        for s in self.student_list:
            print(s)

    def run(self):
        print(f"欢迎使用{EduManagement.system_name} {EduManagement.system_version}")
        while True:
            print()
            print("###########################################################")
            print("1.添加学生 2.修改学生 3.删除学生 4.查询指定学生 5.查询所有学生 6.退出系统")
            print("###########################################################")
            oper = int(input("请输入操作数字"))
            try:
                match oper:
                    case 1:
                        self.add_student()
                    case 2:
                        self.update_student()
                    case 3:
                        self.delete_student()
                    case 4:
                        self.find_student()
                    case 5:
                        self.list_student()
                    case 6:
                        print("已退出系统")
                        break
                    case _:
                        print("非法操作")
            except Exception as e:
                print(e)

#启动
edu = EduManagement()
edu.run()