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 实现根据对象属性排序
结构设计思维 体现类封装、方法划分、模块职责分离等理念
相关推荐
橙露4 分钟前
Python 对接 API:自动化拉取、清洗、入库一站式教程
开发语言·python·自动化
Omigeq10 分钟前
1.4 - 曲线生成轨迹优化算法(以BSpline和ReedsShepp为例) - Python运动规划库教程(Python Motion Planning)
开发语言·人工智能·python·算法·机器人
2301_8084143812 分钟前
自动化测试的实施
开发语言·python
无限码力15 分钟前
华为OD技术面真题 - Python开发 - 4
python·华为od·华为od技术面真题·华为od面试八股文·华为od面试真题·华为odpython开发真题·华为od技术面题目
CheerWWW28 分钟前
C++学习笔记——栈内存与堆内存、宏、auto、std::array
c++·笔记·学习
波波00729 分钟前
写出稳定C#系统的关键:不可变性思想解析
开发语言·c#·wpf
dr_yingli1 小时前
fMRI(3-1)报告(个体化报告)生成器说明
开发语言·matlab
hrhcode1 小时前
【java工程师快速上手go】一.Go语言基础
java·开发语言·golang
l1t1 小时前
用wsl自带的python 3.10下载适用于3.12的pandas版本结合uv安装python 3.12模拟离线安装场景
python·pandas·uv
知识分享小能手1 小时前
MongoDB入门学习教程,从入门到精通,在生产环境中设置MongoDB(21)
数据库·学习·mongodb