当前位置: 首页 > ds >正文

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

第三周 Day 5

🎯 今日目标

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

📦 项目需求描述

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

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

🧬 设计类结构

class Student:def __init__(self, sid, name, score):self.sid = sidself.name = nameself.score = scoredef __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)returnprint("未找到该学号的学生。")def delete_by_sid(self, sid):for stu in self.students:if stu.sid == sid:self.students.remove(stu)print("删除成功!")returnprint("删除失败,未找到该学号。")def sort_by_score(self):self.students.sort(key=lambda x: x.score, reverse=True)print("成绩排序成功!")self.show_all()

🧪 主程序入口

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("感谢使用,已退出。")breakelse:print("输入无效,请重新输入。")

👉 最后在底部加一句:

if __name__ == "__main__":run()

📝 今日练习任务

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

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

    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("未找到相关学生。")
    

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

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

    别忘了在菜单中加入:

    print("7. 按姓名模糊查找")
    
  2. 为 Student 类增加一个 eq 方法,便于比较对象是否相同(学号相同即为同一人)
    我们在 Student 类中添加:

    def __eq__(self, other):if isinstance(other, Student):return self.sid == other.sidreturn False
    

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


🧾 今日总结

技术点应用说明
类与对象将学生抽象为对象,提高代码清晰度和扩展性
魔术方法 str优化输出格式
排序函数 + lambda实现根据对象属性排序
结构设计思维体现类封装、方法划分、模块职责分离等理念
http://www.xdnf.cn/news/13278.html

相关文章:

  • Linux——I/O复用函数
  • 245. 2019年蓝桥杯国赛 - 数正方形(困难)- 递推
  • RocketMQ基础命令
  • 【Linux】使用1Panel 面板让服务器定时自动执行任务
  • 小木的算法日记-二叉堆
  • 代码随想录算法训练营第60期第六十二天打卡
  • 全面掌握Pandas时间序列处理:从基础到实战
  • 多面体模型-学习笔记2
  • 管理学院权限管理系统开发总结
  • Blazor-Ant Design of Blazor快速开始
  • 蓝桥杯 回文日期
  • uniapp 字符包含的相关方法
  • RAG 文档解析难点1:多栏布局的 PDF 如何解析
  • 【渲染】Unity-分析URP的延迟渲染-DeferredShading
  • ZeenWoman 公司数据结构文档
  • window 显示驱动开发-如何查询视频处理功能(三)
  • Windows电脑能装鸿蒙吗_Windows电脑体验鸿蒙电脑操作系统教程
  • 算法岗面试经验分享-大模型篇
  • MODBUS TCP转CANopen 技术赋能高效协同作业
  • 华为网路设备学习-24(路由器OSPF - 特性专题)
  • Linux文件管理和输入输出重定向
  • VS创建Qt项目,Qt的关键字显示红色波浪线解决方法
  • 未授权访问事件频发,我们应当如何应对?
  • 求解Ax=b
  • Sonic EVM L1:沉睡的雄狮已苏醒
  • Coze工作流-故事语音转文本-语音转文本的应用
  • 从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障
  • LNG 应急储配站液氮利用率的调研
  • IDEA运行VUE项目报错相关
  • 线程同步:确保多线程程序的安全与高效!