6个月Python学习计划 Day 18 - 项目实战 · 学生成绩管理系统(OOP版)

第三周 Day 5

🎯 今日目标

  • 运用类与对象封装学生数据与操作
  • 实现添加、查询、删除、排序等功能
  • 使用魔术方法美化输出

📦 项目需求描述

我们要构建一个简易的学生成绩管理系统,功能包括:

  1. 添加学生(姓名、学号、成绩)
  2. 查询所有学生
  3. 查找指定学号学生
  4. 删除学生
  5. 按成绩排序输出
  6. 退出系统

🧬 设计类结构

python 复制代码
class Student:
    def __init__(self, sid, name, score):
        self.sid = sid
        self.name = name
        self.score = score

    def __str__(self):
        return f"{self.sid:<6} {self.name:<10} {self.score:<5}"

class StudentManager:
    def __init__(self):
        self.students = []

    def add_student(self, sid, name, score):
        self.students.append(Student(sid, name, score))

    def show_all(self):
        print(f"{'学号':<6} {'姓名':<10} {'成绩':<5}")
        for stu in self.students:
            print(stu)

    def find_by_sid(self, sid):
        for stu in self.students:
            if stu.sid == sid:
                print("找到学生:", stu)
                return
        print("未找到该学号的学生。")

    def delete_by_sid(self, sid):
        for stu in self.students:
            if stu.sid == sid:
                self.students.remove(stu)
                print("删除成功!")
                return
        print("删除失败,未找到该学号。")

    def sort_by_score(self):
        self.students.sort(key=lambda x: x.score, reverse=True)
        print("成绩排序成功!")
        self.show_all()

🧪 主程序入口

python 复制代码
def run():
    manager = StudentManager()

    while True:
        print("\n==== 学生成绩管理系统 ====")
        print("1. 添加学生")
        print("2. 显示所有学生")
        print("3. 查找学生")
        print("4. 删除学生")
        print("5. 按成绩排序")
        print("6. 退出")
        choice = input("请输入操作编号:")

        if choice == "1":
            sid = input("请输入学号:")
            name = input("请输入姓名:")
            try:
                score = float(input("请输入成绩:"))
                manager.add_student(sid, name, score)
                print("添加成功!")
            except:
                print("成绩格式不正确!")
        elif choice == "2":
            manager.show_all()
        elif choice == "3":
            sid = input("请输入要查找的学号:")
            manager.find_by_sid(sid)
        elif choice == "4":
            sid = input("请输入要删除的学号:")
            manager.delete_by_sid(sid)
        elif choice == "5":
            manager.sort_by_score()
        elif choice == "6":
            print("感谢使用,已退出。")
            break
        else:
            print("输入无效,请重新输入。")

👉 最后在底部加一句:

python 复制代码
if __name__ == "__main__":
    run()

📝 今日练习任务

  1. 增加一个功能:根据姓名模糊搜索学生

    我们在 StudentManager 类中新增一个方法 search_by_name:

    python 复制代码
    def search_by_name(self, keyword):
        result = [stu for stu in self.students if keyword.lower() in stu.name.lower()]
        if result:
            print(f"{'学号':<6} {'姓名':<10} {'成绩':<5}")
            for stu in result:
                print(stu)
        else:
            print("未找到相关学生。")

    在主循环中添加对应的选项:

    python 复制代码
    elif choice == "7":
        keyword = input("请输入要查找的姓名关键词:")
        manager.search_by_name(keyword)

    别忘了在菜单中加入:

    python 复制代码
    print("7. 按姓名模糊查找")
  2. 为 Student 类增加一个 eq 方法,便于比较对象是否相同(学号相同即为同一人)

    我们在 Student 类中添加:

    python 复制代码
    def __eq__(self, other):
        if isinstance(other, Student):
            return self.sid == other.sid
        return False

    这个方法可以让我们用 == 比较两个 Student 对象是否代表同一位学生(通过学号)。


🧾 今日总结

技术点 应用说明
类与对象 将学生抽象为对象,提高代码清晰度和扩展性
魔术方法 str 优化输出格式
排序函数 + lambda 实现根据对象属性排序
结构设计思维 体现类封装、方法划分、模块职责分离等理念
相关推荐
微学AI6 分钟前
内网穿透的应用-把飞牛NAS变成家庭录像中心:EasyNVR部署与远程回放实战
开发语言·php
峥嵘life12 分钟前
Android WiFi连接过程 wpa_supplicant 日志分析
android·开发语言·php
BerryS3N17 分钟前
深度解析:从零构建生产级大模型 RAG(检索增强生成)系统全栈指南
开发语言·python·ai
weixin_BYSJ198725 分钟前
「课设设计」springboot校园超市助购系统26449 (附源码)
java·javascript·spring boot·python·django·flask·php
今儿敲了吗33 分钟前
Python——函数基础
开发语言·笔记·python
CHANG_THE_WORLD38 分钟前
深入理解递归:从函数调用到调用栈的完整执行过程
java·开发语言·算法
泰勒朗斯42 分钟前
Helicopter FBI-405尾电机版本设置
学习
半条_虫1 小时前
豆包-网页逆向接口, 免token调用AI
python·ai·shell
kels88991 小时前
单连接动态增减订阅:股票行情API后端降负载实战方案
开发语言·笔记·python·信息可视化·金融
爱吃程序猿的喵1 小时前
LingBot-Map 复现与原理剖析:基于 Geometric Context Transformer 的流式 3D 重建
人工智能·python·深度学习·计算机视觉·3d·transformer