Python学生管理系统:JSON持久化实战

好的!下面我将详细介绍如何使用Python实现一个功能完整的学生管理系统,包括基础功能(增删改查)和数据持久化(使用JSON文件存储)。教程包含完整源码及详细注释。


学生管理系统设计

系统主要功能模块:

  1. 添加学生信息
  2. 删除学生信息
  3. 修改学生信息
  4. 查询学生信息
  5. 显示所有学生
  6. 数据持久化(JSON文件存储)

核心代码实现

1. 数据结构设计

每个学生信息包含:

  • 学号(ID)
  • 姓名(name)
  • 年龄(age)
  • 班级(class)
python 复制代码
# 学生信息结构示例
student = {
    "id": "2023001",
    "name": "张三",
    "age": 18,
    "class": "计算机1班"
}

2. 主程序框架
python 复制代码
import json
import os

# 数据存储文件名
DATA_FILE = "students.json"

def load_data():
    """从文件加载学生数据"""
    if os.path.exists(DATA_FILE):
        with open(DATA_FILE, 'r') as f:
            return json.load(f)
    return []

def save_data(students):
    """保存学生数据到文件"""
    with open(DATA_FILE, 'w') as f:
        json.dump(students, f, ensure_ascii=False, indent=4)

def add_student(students):
    """添加学生信息"""
    student_id = input("请输入学号: ")
    # 检查学号是否重复
    if any(s['id'] == student_id for s in students):
        print("学号已存在!")
        return
    
    name = input("请输入姓名: ")
    age = input("请输入年龄: ")
    class_name = input("请输入班级: ")
    
    students.append({
        "id": student_id,
        "name": name,
        "age": age,
        "class": class_name
    })
    save_data(students)
    print("添加成功!")

# 其他功能函数(删除、修改、查询等)类似实现

3. 完整功能代码
python 复制代码
import json
import os

DATA_FILE = "students.json"

def load_data():
    if not os.path.exists(DATA_FILE):
        return []
    try:
        with open(DATA_FILE, 'r') as f:
            return json.load(f)
    except:
        return []

def save_data(students):
    with open(DATA_FILE, 'w') as f:
        json.dump(students, f, ensure_ascii=False, indent=4)

def show_menu():
    print("\n===== 学生管理系统 =====")
    print("1. 添加学生")
    print("2. 删除学生")
    print("3. 修改学生")
    print("4. 查询学生")
    print("5. 显示所有学生")
    print("0. 退出系统")

def add_student(students):
    student_id = input("学号: ")
    if any(s['id'] == student_id for s in students):
        print("错误:学号重复!")
        return
    
    name = input("姓名: ")
    age = input("年龄: ")
    class_name = input("班级: ")
    
    students.append({
        "id": student_id,
        "name": name,
        "age": age,
        "class": class_name
    })
    save_data(students)
    print(f"成功添加学生: {name}")

def delete_student(students):
    student_id = input("输入要删除的学号: ")
    for i, s in enumerate(students):
        if s['id'] == student_id:
            students.pop(i)
            save_data(students)
            print("删除成功!")
            return
    print("未找到该学生!")

def modify_student(students):
    student_id = input("输入要修改的学号: ")
    for s in students:
        if s['id'] == student_id:
            s['name'] = input(f"新姓名 (原: {s['name']}): ") or s['name']
            s['age'] = input(f"新年龄 (原: {s['age']}): ") or s['age']
            s['class'] = input(f"新班级 (原: {s['class']}): ") or s['class']
            save_data(students)
            print("修改成功!")
            return
    print("未找到该学生!")

def search_student(students):
    keyword = input("输入学号或姓名: ")
    results = [
        s for s in students 
        if keyword in s['id'] or keyword in s['name']
    ]
    if results:
        print("查询结果:")
        for s in results:
            print(f"学号: {s['id']}, 姓名: {s['name']}, 年龄: {s['age']}, 班级: {s['class']}")
    else:
        print("未找到匹配记录!")

def show_all(students):
    if not students:
        print("暂无学生记录!")
        return
    print("\n===== 所有学生信息 =====")
    for s in students:
        print(f"学号: {s['id']}, 姓名: {s['name']}, 年龄: {s['age']}, 班级: {s['class']}")

def main():
    students = load_data()
    while True:
        show_menu()
        choice = input("请选择操作: ")
        if choice == '1':
            add_student(students)
        elif choice == '2':
            delete_student(students)
        elif choice == '3':
            modify_student(students)
        elif choice == '4':
            search_student(students)
        elif choice == '5':
            show_all(students)
        elif choice == '0':
            print("系统已退出!")
            break
        else:
            print("无效选项!")

if __name__ == "__main__":
    main()

功能测试

  1. 运行程序后选择操作:

    复制代码
    ===== 学生管理系统 =====
    1. 添加学生
    2. 删除学生
    3. 修改学生
    4. 查询学生
    5. 显示所有学生
    0. 退出系统
  2. 数据持久化验证:
    程序关闭后,数据保存在students.json文件中,格式如下:

    json 复制代码
    [
        {
            "id": "2023001",
            "name": "张三",
            "age": "18",
            "class": "计算机1班"
        }
    ]

扩展建议

  1. 异常处理:增加输入校验(如年龄需为数字)
  2. 数据加密:敏感信息加密存储
  3. 多条件查询:支持按班级、年龄范围查询

源码获取

完整代码已托管至GitHub仓库:

👉 点击获取完整源码


通过本教程,您已掌握如何构建一个具有数据持久化功能的学生管理系统。欢迎在项目中实践并扩展更多功能!

相关推荐
打小就很皮...1 小时前
React Router 7 全局路由保护
前端·react.js·router
咕噜咕噜啦啦2 小时前
ROS入门
linux·vscode·python
2301_790300962 小时前
用Matplotlib绘制专业图表:从基础到高级
jvm·数据库·python
起风的蛋挞2 小时前
Matlab提示词语法
前端·javascript·matlab
有味道的男人2 小时前
1688获得商品类目调取商品榜单
java·前端·spring
独自破碎E2 小时前
【中心扩展法】LCR_020_回文子串
java·开发语言
不光头强2 小时前
spring boot项目欢迎页设置方式
java·spring boot·后端
XLYcmy2 小时前
一个用于统计文本文件行数的Python实用工具脚本
开发语言·数据结构·windows·python·开发工具·数据处理·源代码
txwtech2 小时前
第20篇esp32s3小智设置横屏
前端·html