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

Python实战项目--学生成绩管理系统

一、项目要求

1、程序启动,显示名片管理系统欢迎界面,并显示功能菜单

****************************************************
欢迎使用【学生信息管理系统】V1.0
请选择你想要进行的操作
1. 新建学生信息
2. 显示全部信息
3. 查询学生信息
4. 删除学生信息
5. 修改学生信息0. 退出系统
**************************************************"""

2、用户用数字选择 不同的功能

3、根据功能选择,执行不同的功能

4、需要记录学生的 姓名、语文成绩、数学成绩、英语成绩 、总分

5、 如果查新到指定的学生信息,用户可以选择 修改 或者 删除 信息

 二、代码编写框架

1、系统目标和范围

  • 核心目标:实现学生成绩的增删改查与数据持久化

数据持久化:确保数据不会因为程序关闭而丢失。也就是说,是指将程序运行过程中产生的内存数据(临时数据)保存到 非易失性存储介质(如硬盘、数据库等)中,确保数据在程序关闭、电脑重启甚至断电后不会丢失的过程。

  •  功能边界:仅处理学生基本信息+三门学科成绩(数学/语文/英语)。就是为了明确系统能做什么、不能做什么,避免功能过于复杂。
  •  交互方式:命令行文本交互,通过菜单选择操作。也就是说,用户通过键盘输入数字(如 “1”),然后按回车,告诉程序自己想执行哪个操作。

交互方式指的是用户与程序(或系统)之间进行信息传递、操作沟通的具体形式,简单说就是 “用户怎么操作程序,程序怎么回应用户”。

2、程序结构规划

如图是整个系统的“骨架”设计。

3、代码具体模块划分

│ ├─ 1. 新增学生功能:让用户输入新学生的信息,验证有效性后,将其加入系统。

│ │ ├─ 提示用户输入姓名及三门成绩(利用input函数)

│ │ ├─ 验证输入合法性(成绩需为整数)

│ │ ├─ 自动计算总分

│ │ └─ 将新学生信息添加到列表

│ ├─ 2. 查看所有学生功能:将系统中所有学生的信息以清晰的格式展示给用户。

│ │ ├─ 检查列表是否为空(空则提示)

│ │ └─ 以表格形式展示所有学生信息(对齐排版)

│ ├─ 3. 查找学生功能(input("请输入要查询的学生姓名:"))

│ │ ├─ 获取用户输入的姓名

│ │ ├─ 遍历列表匹配姓名

│ │ ├─ 找到则展示该学生详情

│ │ └─ 未找到则提示"学生不存在" 

│ ├─ 4. 修改学生功能

│ │ ├─ 获取目标学生姓名并查找

│ │ ├─ 找到后提供单科成绩修改入口(支持空输入不修改)

│ │ ├─ 修改后重新计算总分

│ │ └─ 未找到则提示 

│ └─ 5. 删除学生功能

│ ├─ 获取目标学生姓名并查找

│ ├─ 找到后从列表中移除该学生信息

│ └─ 未找到则提示

       这 5 个功能模块覆盖了学生成绩管理的核心需求,每个模块的步骤设计都遵循 “用户输入→程序处理→反馈结果” 的逻辑,既保证了功能的完整性,又考虑了用户操作的合理性(如空输入不修改、输入验证等)。下面这张图是代码编写思路。

三、代码编写

info = """
**************************************************
欢迎使用【学生信息管理系统】V1.0
请选择你想要进行的操作
1. 新建学生信息
2. 显示全部信息
3. 查询学生信息
4. 删除学生信息
5. 修改学生信息0. 退出系统
**************************************************"""# 初始化部分,导入json文件import json# 从JSON文件中读取学生数据
# 打开students.json文件,只读模式,编码为utf-8
with open('students.json', mode='r', encoding='utf-8') as f:text = f.read()
students = json.loads(text)
while True:print(info)action = input('请选择你需要的操作:')if action == '1':print('1. 新建学生信息')name = input('请输入学生的名字:')math = int(input('请输入学生的数学成绩:'))Chinese = int(input('请输入学生的语文成绩:'))English = int(input('请输入学生的英语成绩:'))total = math + Chinese + Englishstudents.append({'name': name,'math': math,'Chinese': Chinese,'English': English,'total': total})elif action == '2':print('姓名 \t\t 数学 \t\t 语文 \t\t 英语 \t\t 总分')for student in students:print('{}\t\t{}\t\t{}\t\t{}\t\t{}'.format(*student.values()))elif action == '3':name = input('请输入被查的学生名字:')for student in students:if student ['name'] == name:print('姓名 \t\t 数学 \t\t 语文 \t\t 英语 \t\t 总分')print('{}\t\t{}\t\t{}\t\t{}\t\t{}'.format(*student.values()))breakelse:print(f'{name}这个同学不存在')elif action == '4':name = input('请输入被删除的学生名字:')for student in students:if student ['name'] == name:del students [students.index(student)]breakelse:print(f'{name}这个同学不存在')elif action == '5':name = input('请输入被修改的学生名字:')for student in students:if student['name'] == name:math = input('请重新输入学生的数学成绩:')if math:   # 如果重新输入的数学成绩不为空math = int(math)student['math'] = mathChinese = input('请重新输入学生的数学成绩:')if Chinese:   # 如果重新输入的数学成绩不为空Chinese = int(Chinese)student['Chinese'] = ChineseEnglish = input('请重新输入学生的数学成绩:')if English:   # 如果重新输入的数学成绩不为空English = int(English)student['English'] = Englishstudent ['total'] = student ['math'] + student ['Chinese'] + student ['English']else:# 学员不存在只有一个print(f'{name} 这个学员不存在')elif action == '0':print('0. 退出系统')with open('students.json', mode='w', encoding='utf-8') as f:f.write(json.dumps(students, ensure_ascii=False))breakelse:print('你输入的选项错了,请重新在选择')

info :是一个字符串变量,它存储了学生信息管理系统的操作菜单文本

open函数

file_object = open(file_path, mode, encoding)# file_path:指定文件的路径; 
# mode:指定文件的打开模式;'r':只读模式,'w':写入模式,'a':追加模式
# encoding:可选参数,指定文件编码(如 'utf-8',常用于处理包含中文的文件)

with: 作用就是会自动调用文件对象的 close() 方法关闭文件,无需手动编写 f.close()

text = f.read()将文件对象 f 中的内容读取出来,并存储到变量 text
students = json.loads(text):是将JSON 格式的字符串转换为Python 数据结构的操作。json.loads():这是 Python 内置 json 模块中的一个函数,作用是解析 JSON 字符串(即符合 JSON 格式的文本),并将其转换为对应的 Python 数据类型。

       假设Json文件是'[{"name": "张三", "math": 65}, {"name": "李四", "math": 70}]'

那么执行 students = json.loads(text) 后,students 会变成一个 Python 列表:
[ {"name": "张三", "math": 65},

{"name": "李四", "math": 70} ]

format() 方法:通过在字符串中使用占位符{}来标记需要替换的位置,然后将需要插入的值作为参数传递给 format()

  1. student.values()
    假设 student 是一个字典(dictionary),values() 方法会返回字典中所有的值(value)组成的可迭代对象。
    例如,如果 student = {'name': 'Alice', 'age': 18, 'score': 90},则 student.values() 会返回 ['Alice', 18, 90](具体顺序取决于 Python 版本,3.7+ 为插入顺序)。

  2. *student.values()
    这里的 * 是解包操作符,会将可迭代对象中的元素逐个提取出来,作为单独的参数传递给 format() 方法。
    接上面的例子,*student.values() 相当于把 'Alice'1890 这三个值分别作为参数传入。

    elif action == '0':print('0. 退出系统')with open('students.json', mode='w', encoding='utf-8') as f:f.write(json.dumps(students, ensure_ascii=False))breakelse:print('你输入的选项错了,请重新在选择')

在这段代码中,

with open('students.json', mode='w', encoding='utf-8') as f:
  • with 语句用于文件操作,会自动处理文件的打开和关闭,避免资源泄露
  • open() 函数用于打开文件,参数说明:
    • 'students.json':要操作的文件名(JSON 格式文件)
    • mode='w':打开模式为 "写入"(如果文件不存在则创建,存在则覆盖原有内容)
    • encoding='utf-8':指定文件编码为 UTF-8,确保中文等字符能正确写入
  • as f:将打开的文件对象赋值给变量f,后续通过f操作文件
 f.write(json.dumps(students, ensure_ascii=False))
  • json.dumps():将 Python 数据结构(这里是students列表)转换为 JSON 格式的字符串(序列化过程)
  • students:要转换的 Python 列表(通常包含多个字典,每个字典代表一个学生的信息)
  • ensure_ascii=False:关闭 ASCII 编码模式,默认情况下 JSON 会将中文等非 ASCII 字符转义为\uXXXX格式,设置为False后会直接保存原始字符
  • f.write():将转换后的 JSON 字符串写入到文件中。

 

 

http://www.dtcms.com/a/315421.html

相关文章:

  • 机器人slam个人笔记
  • 交叉验证:机器学习模型评估的“稳压器”——从原理到实战
  • 测试开发:Python+Django实现接口测试工具
  • AI 对话高效输入指令攻略(四):AI+Apache ECharts:生成各种专业图表
  • 第六章 道阻且艰(2025.7学习总结)
  • 期权定价全解析:从Black-Scholes到量子革命的金融基石
  • 利用Coze平台生成测试用例
  • 发票的分类识别与查验接口-发票管理软件-发票查验API
  • C++返回值优化(RVO):高效返回对象的艺术
  • 《算法导论》第 2 章 - 算法基础
  • spring webflux链路跟踪【traceId日志自动打印】
  • 【Spring Boot 快速入门】七、阿里云 OSS 文件上传
  • 从零实现富文本编辑器#6-浏览器选区与编辑器选区模型同步
  • dos中常用的全屏幕编辑器
  • 一次“无告警”的服务器宕机分析:从无迹可寻到精准定位
  • 服务器数据恢复—坏道致Raid5阵列硬盘离线如何让数据重生?
  • 【Electron】electron-vite中基于electron-builder与electron-updater实现程序远程自动更新,附源码
  • 前端性能工程化:构建高性能Web应用的系统化实践
  • 8.5 CSS3-flex弹性盒子
  • 从达梦到 StarRocks:国产数据库实时入仓实践
  • NFS CENTOS系统 安装配置
  • RAGFlow 0.20.0 : Multi-Agent Deep Research
  • Java Date类介绍
  • 计算机网络:(十三)传输层(中)用户数据报协议 UDP 与 传输控制协议 TCP 概述
  • Python 基础语法(二):流程控制语句详解
  • FPGA实现Aurora 8B10B视频点对点传输,基于GTP高速收发器,提供4套工程源码和技术支持
  • [按键精灵]
  • 【C++详解】⼆叉搜索树原理剖析与模拟实现、key和key/value,内含优雅的赋值运算符重载写法
  • 豆包新模型与 PromptPilot 实操体验测评,AI 辅助创作的新范式探索
  • Python装饰器函数《最详细》