Python学生成绩管理系统:Python经典实战案例08

本篇为Python学生成绩管理系统实战案例,专为编程小白打造!教你用Python从零实现一个功能完整的学生成绩管理系统,支持增删查改、数据统计、文件持久化,新手能快速掌握字典、JSON操作和数据管理的核心用法,轻松入门Python项目开发!

Python学生成绩管理系统功能流程图

图1:系统核心功能与操作流程

一、系统功能说明

这是Python零基础入门最经典的实战项目,基于JSON文件存储数据,无需数据库,支持学生信息全生命周期管理,操作简单,适合新手练手和小型班级使用,帮你快速掌握Python数据管理的核心逻辑:

  • 添加学生:录入学生姓名、学号、各科成绩,自动计算总分和平均分
  • 查询学生:按学号/姓名查询学生信息,展示详细成绩
  • 修改学生:修改学生成绩,自动更新总分和平均分
  • 删除学生:按学号删除学生信息
  • 展示所有:展示所有学生的成绩列表,按总分排序显示
  • 数据持久化:所有操作自动保存到JSON文件,关闭程序不丢失

二、完整代码实现

以下为完整可运行代码,注释覆盖核心逻辑,零基础小白可直接复制到PyCharm/VS Code运行:

# 基于JSON文件存储的学生成绩管理系统
import json
import os# 数据文件路径
DATA_FILE = “students.json”def load_data():
“””加载学生数据,返回字典”””
if not os.path.exists(DATA_FILE):
return {}
with open(DATA_FILE, “r”, encoding=”utf-8″) as f:
return json.load(f)def save_data(data):
“””保存学生数据到JSON文件”””
with open(DATA_FILE, “w”, encoding=”utf-8″) as f:
json.dump(data, f, ensure_ascii=False, indent=2)def add_student():
“””添加学生信息”””
data = load_data()
student_id = input(“请输入学生学号:”).strip()
if student_id in data:
print(” 学号已存在!”)
return
name = input(“请输入学生姓名:”).strip()
# 录入成绩(语文、数学、英语)
try:
chinese = float(input(“请输入语文成绩:”))
math = float(input(“请输入数学成绩:”))
english = float(input(“请输入英语成绩:”))
except ValueError:
print(” 成绩输入错误!请输入数字”)
return
# 计算总分和平均分
total = chinese + math + english
avg = total / 3
# 保存学生信息
data[student_id] = {
“name”: name,
“chinese”: chinese,
“math”: math,
“english”: english,
“total”: total,
“avg”: avg
}
save_data(data)
print(f” 已添加学生:{name}(学号:{student_id})”)def query_student():
“””查询学生信息”””
data = load_data()
if not data:
print(” 暂无学生数据!”)
return
# 按学号查询
student_id = input(“请输入要查询的学生学号:”).strip()
if student_id in data:
stu = data[student_id]
print(“\n 学生信息:”)
print(f”学号:{student_id}”)
print(f”姓名:{stu[‘name’]}”)
print(f”语文:{stu[‘chinese’]} 数学:{stu[‘math’]} 英语:{stu[‘english’]}”)
print(f”总分:{stu[‘total’]:.2f} 平均分:{stu[‘avg’]:.2f}”)
else:
print(” 未找到该学号的学生!”)def update_student():
“””修改学生成绩”””
data = load_data()
if not data:
print(” 暂无学生数据!”)
return
student_id = input(“请输入要修改的学生学号:”).strip()
if student_id not in data:
print(” 未找到该学号的学生!”)
return
stu = data[student_id]
print(f”\n当前学生:{stu[‘name’]}(学号:{student_id})”)
try:
# 输入新成绩(留空则保留原成绩)
chinese = input(f”语文成绩(当前:{stu[‘chinese’]}):”).strip()
chinese = float(chinese) if chinese else stu[‘chinese’]
math = input(f”数学成绩(当前:{stu[‘math’]}):”).strip()
math = float(math) if math else stu[‘math’]
english = input(f”英语成绩(当前:{stu[‘english’]}):”).strip()
english = float(english) if english else stu[‘english’]
except ValueError:
print(” 成绩输入错误!请输入数字”)
return
# 更新总分和平均分
total = chinese + math + english
avg = total / 3
data[student_id].update({
“chinese”: chinese,
“math”: math,
“english”: english,
“total”: total,
“avg”: avg
})
save_data(data)
print(f” 已更新学生:{stu[‘name’]}的成绩”)def delete_student():
“””删除学生信息”””
data = load_data()
if not data:
print(” 暂无学生数据!”)
return
student_id = input(“请输入要删除的学生学号:”).strip()
if student_id in data:
name = data[student_id][‘name’]
del data[student_id]
save_data(data)
print(f” 已删除学生:{name}(学号:{student_id})”)
else:
print(” 未找到该学号的学生!”)def show_all_students():
“””展示所有学生信息”””
data = load_data()
if not data:
print(” 暂无学生数据!”)
return
print(“\n 所有学生成绩列表:”)
print(“-” * 70)
print(f”{‘学号’:<10} {‘姓名’:<8} {‘语文’:<6} {‘数学’:<6} {‘英语’:<6} {‘总分’:<8} {‘平均分’:<8}”)
print(“-” * 70)
# 按总分排序
sorted_students = sorted(data.items(), key=lambda x: x[1][‘total’], reverse=True)
for student_id, stu in sorted_students:
print(f”{student_id:<10} {stu[‘name’]:<8} {stu[‘chinese’]:<6.1f} {stu[‘math’]:<6.1f} {stu[‘english’]:<6.1f} {stu[‘total’]:<8.1f} {stu[‘avg’]:<8.1f}”)
print(“-” * 70)def main():
“””主程序,菜单交互”””
print(“=” * 60)
print(” 学生成绩管理系统 v1.0″)
print(” 功能:1-添加 2-查询 3-修改 4-删除 5-展示所有 0-退出”)
print(“=” * 60)
while True:
try:
choice = int(input(“\n请输入操作序号:”))
if choice == 0:
print(” 感谢使用,程序退出!”)
break
elif choice == 1:
add_student()
elif choice == 2:
query_student()
elif choice == 3:
update_student()
elif choice == 4:
delete_student()
elif choice == 5:
show_all_students()
else:
print(” 操作序号错误!请输入0-5之间的数字”)
except ValueError:
print(” 输入错误!请输入有效的数字”)if __name__ == “__main__”:
main()

Python学生成绩管理系统代码运行效果

图2:控制台运行效果演示

三、运行效果演示

运行代码后,在控制台输入操作序号,即可完成学生信息的增删查改,以下为完整运行效果:

============================================================
学生成绩管理系统 v1.0
功能:1-添加 2-查询 3-修改 4-删除 5-展示所有 0-退出
============================================================
请输入操作序号:1
请输入学生学号:2026001
请输入学生姓名:张三
请输入语文成绩:90
请输入数学成绩:95
请输入英语成绩:88
已添加学生:张三(学号:2026001)请输入操作序号:5
所有学生成绩列表:
———————————————————————-
学号 姓名 语文 数学 英语 总分 平均分
———————————————————————-
2026001 张三 90.0 95.0 88.0 273.0 91.0
———————————————————————-请输入操作序号:0
感谢使用,程序退出!

四、核心知识点总结

  • JSON文件存储:json.load()/json.dump()实现数据持久化,ensure_ascii=False完美支持中文
  • 字典操作:用学号作为唯一key,存储学生信息,实现O(1)复杂度的快速增删查改
  • 数据计算:自动计算总分和平均分,修改成绩时实时更新,保证数据一致性
  • 排序功能:sorted()按总分排序,实现学生成绩排名,直观展示班级成绩
  • 格式化输出:用Python格式化字符串,实现表格对齐,控制台展示更美观
  • 异常处理:捕获输入错误、文件异常,提升程序健壮性,避免崩溃

Python学生成绩管理系统架构图

图3:数据存储与交互架构

五、扩展功能建议

掌握基础版系统后,可尝试扩展以下功能,进一步提升项目实用性和开发能力:

  • 班级统计功能:计算班级平均分、最高分、最低分、及格率,生成成绩分析报告
  • Excel数据导入/导出:用openpyxl库实现Excel文件的读写,适配办公场景
  • 图形化界面(GUI):用Tkinter/PyQt打造可视化界面,适合非技术人员使用
  • 数据库存储:将JSON替换为SQLite/MySQL,支持多用户并发操作
  • 权限管理:添加管理员/普通用户权限,区分操作权限

六、常见问题解答

在学习和使用系统的过程中,新手常遇到以下问题,这里统一解答:

  • Q:JSON文件在哪里生成?可以手动修改吗?
    A:JSON文件会在程序同级目录生成,可直接用记事本打开查看、修改,修改后程序会自动读取最新数据
  • Q:如何处理大量学生数据?会卡顿吗?
    A:系统基于字典存储,支持千级以内学生数据,不会卡顿,适合小型班级使用;数据量过大可升级为数据库存储
  • Q:可以添加更多科目吗?比如物理、化学?
    A:可以,只需在代码中新增科目输入、计算总分/平均分的逻辑,无需修改核心结构,新手也能快速扩展
  • Q:如何备份学生数据?
    A:直接复制JSON文件到其他位置即可完成备份,恢复时替换原文件即可,操作简单安全

小贴士:
1. 本文是「Python实战案例10篇技术专栏」的第08篇,聚焦Python数据管理核心知识点
2. JSON文件会在程序同级目录生成,所有学生数据都保存在这里,可直接打开查看
3. 多动手修改代码、扩展功能,是提升Python编程能力的最佳方式
4. 后续可学习面向对象编程,将系统重构为类结构,提升代码可维护性

本文是Python实战案例10篇技术专栏的第08篇,专为Python零基础小白打造的Python学生成绩管理系统教程。
更多Python官方学习资源,可参考Python官方中文教程,这是Python学习的权威参考依据。

本文为「小白编程笔记」原创 · Python零基础入门实战系列 | 未经授权,禁止转载

文章标签:
Python学生成绩管理系统
Python实战案例
Python数据管理
JSON文件存储
Python入门项目

2人评论了“Python学生成绩管理系统:Python经典实战案例08”

  1. Pingback: Python 经典实战案例 10 篇技术专栏目录 - 小白 编程 笔记

  2. Pingback: Python 实战案例:10 篇经典技术专栏全目录 - 小白 编程 笔记

发表评论

滚动至顶部
渝公网安备50022402001073号  |  渝ICP备2026004448号   © 2026 小白编程笔记