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

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

相关推荐
Brsentibi2 小时前
基于python代码自动生成关于建筑安全检测的报告
python·microsoft
程序员爱钓鱼2 小时前
REST API 与前后端交互:让应用真正跑起来
后端·python·ipython
gCode Teacher 格码致知4 小时前
Python基础教学:Python的openpyxl和python-docx模块结合Excel和Word模板进行数据写入-由Deepseek产生
python·excel
Dcs4 小时前
Java 中 UnaryOperator 接口与 Lambda 表达式的应用示例
java·后端
Destiny_where6 小时前
Agent平台-RAGFlow(2)-源码安装
python·ai
bagadesu6 小时前
使用Docker构建Node.js应用的详细指南
java·后端
molunnnn7 小时前
第四章 Agent的几种经典范式
开发语言·python
linuxxx1108 小时前
django测试缓存命令的解读
python·缓存·django