Python 综合项目实战:学生成绩管理系统(命令行版)

当我们学完 Python 的基本语法、函数、文件操作、数据结构之后,最重要的就是"动手把零散技能组合起来"。 一个 命令行版本的学生成绩管理系统 非常适合作为阶段性小项目,它不需要用到任何 GUI 框架,但涵盖了如下关键知识点:

  • 文件读写
  • 列表与字典操作
  • 输入与输出
  • 流程控制与异常处理
  • 模块化(可选)
  • 程序结构设计

这类小项目虽然简单,但非常接近真实业务逻辑,是从"语法"迈向"小型应用"的第一步。


1. 项目功能设计

我们先把项目功能规划清楚,这比写代码更重要:

核心需求

  1. 添加学生成绩
  2. 查看所有学生成绩
  3. 查询指定学生
  4. 修改学生成绩
  5. 删除学生信息
  6. 保存到文件 / 从文件读取
  7. 退出程序

数据结构设计

我们用字典表示一个学生:

python 复制代码
{
    "id": "2025001",
    "name": "张三",
    "score": 88
}

全部学生数据使用列表保存:

python 复制代码
students = []

这个结构清晰、扩展性强,也方便序列化保存。


2. 主菜单设计

命令行程序最重要的就是菜单循环:

python 复制代码
def show_menu():
    print("\n===== 学生成绩管理系统 =====")
    print("1. 添加学生成绩")
    print("2. 查看所有学生")
    print("3. 查询学生")
    print("4. 修改学生成绩")
    print("5. 删除学生信息")
    print("6. 保存数据")
    print("7. 读取数据")
    print("0. 退出系统")

看起来简单,但这是后续所有操作的"入口"。


3. 功能实现

下面给出完整的核心逻辑,代码结构清晰易懂。


① 添加学生

python 复制代码
def add_student(students):
    sid = input("请输入学号:")
    name = input("请输入姓名:")
    score = int(input("请输入成绩:"))
    students.append({"id": sid, "name": name, "score": score})
    print("添加成功!")

② 查看所有学生

python 复制代码
def show_all(students):
    if not students:
        print("当前没有学生数据")
        return
    print("\n--- 所有学生成绩 ---")
    for stu in students:
        print(f"学号:{stu['id']},姓名:{stu['name']},成绩:{stu['score']}")

③ 按学号查询学生

python 复制代码
def find_student(students):
    sid = input("请输入要查询的学号:")
    for stu in students:
        if stu["id"] == sid:
            print(f"找到 → 姓名:{stu['name']},成绩:{stu['score']}")
            return stu
    print("未找到该学生")
    return None

④ 修改成绩

python 复制代码
def update_student(students):
    stu = find_student(students)
    if stu:
        new_score = int(input("请输入新成绩:"))
        stu["score"] = new_score
        print("修改成功!")

⑤ 删除学生

python 复制代码
def delete_student(students):
    stu = find_student(students)
    if stu:
        students.remove(stu)
        print("删除成功!")

4. 数据持久化(文件保存 & 读取)

我们使用简单的 JSON 格式,因为它结构清晰、方便读写。

python 复制代码
import json

def save_data(students, filename="students.json"):
    with open(filename, "w", encoding="utf-8") as f:
        json.dump(students, f, ensure_ascii=False, indent=2)
    print("数据已保存!")

def load_data(filename="students.json"):
    try:
        with open(filename, "r", encoding="utf-8") as f:
            data = json.load(f)
        print("数据读取成功!")
        return data
    except FileNotFoundError:
        print("文件不存在,使用空数据。")
        return []

5. 主程序(把所有功能串起来)

python 复制代码
def main():
    students = load_data()

    while True:
        show_menu()
        choice = input("请选择操作:")

        if choice == "1":
            add_student(students)
        elif choice == "2":
            show_all(students)
        elif choice == "3":
            find_student(students)
        elif choice == "4":
            update_student(students)
        elif choice == "5":
            delete_student(students)
        elif choice == "6":
            save_data(students)
        elif choice == "7":
            students = load_data()
        elif choice == "0":
            print("退出系统,欢迎下次使用!")
            break
        else:
            print("输入无效,请重新选择!")

运行:

bash 复制代码
python student_system.py

你的第一个完整小系统就能跑起来了。


6. 项目扩展方向

如果你想继续升级这个项目,我给你一些很好拓展方向:

✔ 增加成绩排序功能

按成绩排序、按姓名排序等。

✔ 增加成绩统计

最高分、最低分、平均分。

✔ 使用 SQLite/MySQL 持久化

从文件升级成真正的数据库。

✔ 使用类封装

将学生、系统封装为类,代码更专业。

✔ 使用 Tkinter / PyQt 做 GUI

瞬间变成桌面应用。

✔ 使用 Flask / FastAPI 提供 REST API

做成一个真正的"学生管理后台"。

相关推荐
懂点Tech3 小时前
ctfshow misc28:GIF 高度修改解题与脚本实现
开发语言·windows·python
comedate3 小时前
SMLib 的 Examples 导读:PyAPI / SM_API / SMLib 三组示例怎么读
python·cad·smlib·examples·sm_api
云和数据.ChenGuang3 小时前
Python 重写(Override)深度解析:从 MRO 到 super() 的完整机制
java·开发语言·人工智能·python·langchain·1024程序员节
川石课堂软件测试4 小时前
学习软件测试需掌握的一些知识
数据库·python·sql·功能测试·网络协议·mysql·http
万化冥合4 小时前
PyBox屏幕键盘如何辅助演示键盘操作?
python·计算机外设
车软学堂4 小时前
从测试转开发,到底要补什么
网络·人工智能·python·功能测试·单片机·车载系统·自动化
天空依然蔚蓝4 小时前
分享一个自动检测网站在线状态的python程序
python·运维开发·1024程序员节
岁月宁静5 小时前
一个 AI 项目从本地到上线,要经过哪些步骤?全流程讲清楚
python·docker·agent
Cosolar5 小时前
不收费、不加水印、数据归你:我做了个开源的在线简历工具
后端·面试·前端框架
codists5 小时前
《crafting interpreters》阅读笔记:p45-p45
python