69. Python: 核心语法-面向对象基础-案例(教务系统)

1. 需求说明

2.需求实现代码

python 复制代码
# 学生类
class Student:
    def __init__(self, name, chinese, math, english):
        self.name = name
        self.chinese = chinese
        self.math = math
        self.english = english

    @property
    def total_score(self):
        # 计算总分
        return self.chinese + self.math + self.english

    def __str__(self):
        return f"姓名: {self.name} | 语文: {self.chinese} | 数学: {self.math} | 英语: {self.english} | 总分: {self.total_score}"


# 教务管理系统类
class EduSystem:
    def __init__(self):
        self.student_list = []  # 存储所有学生对象

    # 获取合法成绩:异常捕获 + 0‑100范围校验
    def get_valid_score(self, tip):
        while True:
            try:
                score = int(input(tip))
                if 0 <= score <= 100:
                    return score
                else:
                    print("❌ 成绩必须在 0‑100 之间,请重新输入!")
            except ValueError:
                print("❌ 输入错误!成绩必须是数字,请重新输入!")

    # 1. 添加学生
    def add_student(self):
        name = input("请输入学生姓名:")
        # 1.2 判断学生是否已经存在
        for stu in self.student_list:
            if stu.name == name:
                print(f"❌ 学生【{name}】已经存在,不能重复添加!")
                return
        # 1.1输入成绩 + 1.3校验分数范围
        chinese = self.get_valid_score("请输入语文成绩:")
        math = self.get_valid_score("请输入数学成绩:")
        english = self.get_valid_score("请输入英语成绩:")
        # 1.4 创建学生对象并添加
        new_stu = Student(name, chinese, math, english)
        self.student_list.append(new_stu)
        print("✅ 添加学生成功!")

    # 2. 修改学生成绩
    def update_student(self):
        # 2.1输入姓名
        name = input("请输入要修改的学生姓名:")
        # 2.2查找学生
        for stu in self.student_list:
            if stu.name == name:
                print("📋 当前学生信息:")
                print(stu)
                # 2.3输入新成绩
                stu.chinese = self.get_valid_score("输入新的语文成绩:")
                stu.math = self.get_valid_score("输入新的数学成绩:")
                stu.english = self.get_valid_score("输入新的英语成绩:")
                # 2.4更新完成
                print("✅ 修改成绩成功!")
                return
        print(f"❌ 学生【{name}】不存在!")

    # 3. 删除学生成绩
    def del_student(self):
        name = input("请输入要删除的学生姓名:")
        for stu in self.student_list:
            if stu.name == name:
                self.student_list.remove(stu)
                print("✅ 删除学生成功!")
                return
        print(f"❌ 学生【{name}】不存在!")

    # 4. 查询指定学生成绩
    def search_student(self):
        name = input("请输入要查询的学生姓名:")
        for stu in self.student_list:
            if stu.name == name:
                print(stu)
                return
        print(f"❌ 学生【{name}】不存在!")

    # 5. 展示全部学生成绩
    def show_all(self):
        if len(self.student_list) == 0:
            print("📭 暂无任何学生数据!")
            return
        for stu in self.student_list:
            print(stu)

    # 菜单页面(带菜单输入异常捕获)
    def menu(self):
        while True:
            print("\n========教务管理系统========")
            print("1. 添加学生成绩")
            print("2. 修改学生成绩")
            print("3. 删除学生成绩")
            print("4. 查询指定学生成绩")
            print("5. 展示全部学生成绩")
            print("0. 退出系统")
            # 捕获菜单输入非数字异常
            try:
                choice = int(input("请输入您的选择:"))
            except ValueError:
                print("⚠️ 请输入有效的数字选项!")
                continue

            match str(choice):
                case "1":
                    self.add_student()
                case "2":
                    self.update_student()
                case "3":
                    self.del_student()
                case "4":
                    self.search_student()
                case "5":
                    self.show_all()
                case "0":
                    print("👋 系统退出,再见!")
                    break
                case _:
                    print("⚠️ 选项超出范围,请重新选择!")


# 启动程序
if __name__ == '__main__':
    app = EduSystem()
    app.menu()
相关推荐
东莞市云毅网络有限公司7 小时前
用 SQLite FTS5 给企业知识库做问答检索原型:中文二元切分与 BM25 排序
python·sqlite·自动化运维·geo·数据监测
承渊政道8 小时前
PR-Agent鸿蒙PC适配全记录:从Python服务端代理到ArkTS原生评审客户端
python·华为·代理模式·agent·harmonyos·pc端
Thomas.Sir8 小时前
第49课:TensorFlow|项目性能调优全方案【训练提速、推理提速、资源占用优化】
人工智能·python·tensorflow
热爱编程的小李8 小时前
安卫士设备数实时监测警报脚本
python
程序员清风8 小时前
Python 操作 MySQL、Redis 与消息队列的完整实践
redis·python·mysql
Q264336502311 小时前
【有源码】基于 Hadoop 生态的化妆品销售数据存储分析与可视化 面向化妆品行业的用户画像构建与销售机会识别研究
大数据·hadoop·python·机器学习·spark·毕业设计·课程设计
2601_9620781917 小时前
Python中calendar.weekday用法
python·编程技巧·calendar·日期处理·weekday
2601_9622186117 小时前
万象生鲜系统业财一体化底层打通技术自动生成经营账单
大数据·数据库·人工智能·python·算法
2601_9669496517 小时前
为什么量化策略需要大量历史股票数据?从回测可信度理解数据规模
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
2601_9628857217 小时前
如何用 Python 扫描 A 股跳空缺口并统计缺口回补概率?
java·前端·python