学生信息管理系统程序Python
系统主界面

在该界面中可以选择要使用功能对应的菜单进行不同的操作。在选择功能菜单时,有两种方法,
一种是输入1,另一种是按下键盘上的↑或↓方向键进行选择。这两种方法的结果是一样的,所以使用哪种方法都可以。
(1)录入学生信息。在“请选择:”右侧光标所在位置,输入数字1,并按下<Enter>键,系统将分别提示输入学生编号、学生名字、英语成绩、Python成绩和C语言成绩,输入正确的信息后,系统会提示是否继续添加,如图2所示。输入y,系统将会再次提示用户输入用户信息,输入n,则将录入学生信息保存到文件中。

(2)查找学生信息。在功能菜单上输入功能编号2,并且按下<Enter>键,系统将要求用户选择是按学生编号查询还是按学生姓名查询,如果用户输入1,则要求用户输入学生ID,表示按学生编号查询,输入想要查询的学生编号,系统查找该学生信息,如果找到则显示,效果如图3所示,否则显示“(o@.@o) 无数据信息 (o@.@o)”,效果如图4所示。最后提示是否继续查找输入y,系统将再次提示用户选择查找方式,输入n,则退出查找学生信息功能。

(3)删除学生信息。在功能菜单上输入功能编号3,并且按下<Enter>键,系统将提示输入要删除学生的编号,输入相应的学生ID后,系统会直接从文件中删除该学生信息,并且提示是否继续删除,如图5所示。输入y,系统将会再次提示用户输入要删除的学生编号,输入n,则退出删除功能。
(4)修改学生信息。在功能菜单上输入功能编号4,并且按下<Enter>键,系统首先显示全部学生信息列表,再提示输入要修改学生的编号,输入相应的学生ID后,系统会在文件中查找该学生信息,如果找到,则提示修改相应的信息,否则不修改。最后提示是否继续修改,如图6所示。输入y,系统将会再次提示用户输入要修改的学生编号,输入n,则退出修改功能。
(5)排序。在功能菜单上输入功能编号5,并且按下<Enter>键,系统将先显示不排序的全部学生信息,然后提示选择排序方式,这里输入2,再选择降序排列“1”,将对学生信息按Python成绩降序排列并显示
(6)统计学生总人数。在功能菜单上选择“6 统计学生总人数”菜单项,并且按下<Enter>键,将自动统计出学生总人数并显示
(7)显示所有学生信息。在功能菜单上选择“7 显示所有学生信息”菜单项,并且按下<Enter>键,系统将获取并显示全部学生信息
(8)退出系统。在功能菜单上输入功能编号5,并且按下<Enter>键即可退出系统。
代码实现如下:
import re # 导入正则表达式模块
import os # 导入操作系统模块filename = "students.txt" # 定义保存学生信息的文件名def menu():# 输出菜单print('''╔———————学生信息管理系统————————╗│ ││ =============== 功能菜单 =============== ││ ││ 1 录入学生信息 ││ 2 查找学生信息 ││ 3 删除学生信息 ││ 4 修改学生信息 ││ 5 排序 ││ 6 统计学生总人数 ││ 7 显示所有学生信息 ││ 0 退出系统 ││ ========================================== ││ 说明:通过数字或↑↓方向键选择菜单 │╚———————————————————————╝''')def main():ctrl = True # 标记是否退出系统while (ctrl):menu() # 显示菜单option = input("请选择:") # 选择菜单项option_str = re.sub("\D", "", option) # 提取数字if option_str in ['0', '1', '2', '3', '4', '5', '6', '7']:option_int = int(option_str)if option_int == 0: # 退出系统print('您已退出学生成绩管理系统!')ctrl = Falseelif option_int == 1: # 录入学生成绩信息insert()elif option_int == 2: # 查找学生成绩信息search()elif option_int == 3: # 删除学生成绩信息delete()elif option_int == 4: # 修改学生成绩信息modify()elif option_int == 5: # 排序sort()elif option_int == 6: # 统计学生总数total()elif option_int == 7: # 显示所有学生信息show()'''1 录入学生信息'''def insert():stdentList = [] # 保存学生信息的列表mark = True # 是否继续添加while mark:id = input("请输入ID(如 1001):")if not id: # ID为空,跳出循环breakname = input("请输入名字:")if not name: # 名字为空,跳出循环breaktry:english = int(input("请输入英语成绩:"))python = int(input("请输入Python成绩:"))c = int(input("请输入C语言成绩:"))except:print("输入无效,不是整型数值....重新录入信息")continuestdent = {"id": id, "name": name, "english": english, "python": python, "c": c} # 将输入的学生信息保存到字典stdentList.append(stdent) # 将学生字典添加到列表中inputMark = input("是否继续添加?(y/n):")if inputMark == "y": # 继续添加mark = Trueelse: # 不继续添加mark = Falsesave(stdentList) # 将学生信息保存到文件print("学生信息录入完毕!!!")# 将学生信息保存到文件
def save(student):try:students_txt = open(filename, "a") # 以追加模式打开except Exception as e:students_txt = open(filename, "w") # 文件不存在,创建文件并打开for info in student:students_txt.write(str(info) + "\n") # 按行存储,添加换行符students_txt.close() # 关闭文件'''2 查找学生成绩信息'''def search():mark = Truestudent_query = [] # 保存查询结果的学生列表while mark:id = ""name = ""if os.path.exists(filename): # 判断文件是否存在mode = input("按ID查输入1;按姓名查输入2:")if mode == "1":id = input("请输入学生ID:")elif mode == "2":name = input("请输入学生姓名:")else:print("您的输入有误,请重新输入!")search() # 重新查询with open(filename, 'r') as file: # 打开文件student = file.readlines() # 读取全部内容for list in student:d = dict(eval(list)) # 字符串转字典if id is not "": # 判断是否按ID查if d['id'] == id:student_query.append(d) # 将找到的学生信息保存到列表中elif name is not "": # 判断是否按姓名查if d['name'] == name:student_query.append(d) # 将找到的学生信息保存到列表中show_student(student_query) # 显示查询结果student_query.clear() # 清空列表inputMark = input("是否继续查询?(y/n):")if inputMark == "y":mark = Trueelse:mark = Falseelse:print("暂未保存数据信息...")return'''3 删除学生成绩信息'''def delete():mark = True # 标记是否循环while mark:studentId = input("请输入要删除的学生ID:")if studentId is not "": # 判断要删除的学生是否存在if os.path.exists(filename): # 判断文件是否存在with open(filename, 'r') as rfile: # 打开文件student_old = rfile.readlines() # 读取全部内容else:student_old = []ifdel = False # 标记是否删除if student_old: # 如果存在学生信息with open(filename, 'w') as wfile: # 以写方式打开文件d = {} # 定义空字典for list in student_old:d = dict(eval(list)) # 字符串转字典if d['id'] != studentId:wfile.write(str(d) + "\n") # 将一条学生信息写入文件else:ifdel = True # 标记已经删除if ifdel:print("ID为 %s 的学生信息已经被删除..." % studentId)else:print("没有找到ID为 %s 的学生信息..." % studentId)else: # 不存在学生信息print("无学生信息...")break # 退出循环show() # 显示全部学生信息inputMark = input("是否继续删除?(y/n):")if inputMark == "y":mark = True # 继续删除else:mark = False # 退出删除学生信息功能'''4 修改学生成绩信息'''def modify():show() # 显示全部学生信息if os.path.exists(filename): # 判断文件是否存在with open(filename, 'r') as rfile: # 打开文件student_old = rfile.readlines() # 读取全部内容else:returnstudentid = input("请输入要修改的学生ID:")with open(filename, "w") as wfile: # 以写模式打开文件for student in student_old:d = dict(eval(student)) # 字符串转字典if d["id"] == studentid: # 是否为要修改的学生print("找到了这名学生,可以修改他的信息!")while True: # 输入要修改的信息try:d["name"] = input("请输入姓名:")d["english"] = int(input("请输入英语成绩:"))d["python"] = int(input("请输入Python成绩:"))d["c"] = int(input("请输入C语言成绩:"))except:print("您的输入有误,请重新输入。")else:break # 跳出循环student = str(d) # 将字典转换为字符串wfile.write(student + "\n") # 将修改的信息写入到文件print("修改成功!")else:wfile.write(student) # 将未修改的信息写入到文件mark = input("是否继续修改其他学生信息?(y/n):")if mark == "y":modify() # 重新执行修改操作
相关文章:
学生信息管理系统程序Python
系统主界面 在该界面中可以选择要使用功能对应的菜单进行不同的操作。在选择功能菜单时,有两种方法, 一种是输入1,另一种是按下键盘上的↑或↓方向键进行选择。这两种方法的结果是一样的,所以使用哪种方法都可以。 (…...
[js] for forEach for of 循环里await关键字的用法
1、for:循环中使用await的写法(生效) async function loop(){for( let i0; i<array.length; i ){let datas await getDatas()break} }2、forEach:循环中使用await的写法(不生效): array.f…...
Linux面试题(二)
目录 17、怎么使一个命令在后台运行? 18、利用 ps 怎么显示所有的进程? 怎么利用 ps 查看指定进程的信息? 19、哪个命令专门用来查看后台任务? 20、把后台任务调到前台执行使用什么命令?把停下的后台任务在后台执行起来用什么命令? 21、终止进程用什么命令…...
电源控制系统架构(PCSA)之系统控制处理器组件
目录 6.4 系统控制处理器 6.4.1 SCP组件 SCP处理器Core SCP处理器Core选择 SCP处理器核内存 系统计数器和通用计时器 看门狗 电压调节器控制 时钟控制 系统控制 信息接口 电源策略单元 传感器控制 外设访问 系统访问 6.4 系统控制处理器 系统控制处理器(SCP)是…...
《已解决: ImportError: Keras requires TensorFlow 2.2 or higher 问题》
🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页: 🐅🐾猫头虎的博客🎐《面试题大全专栏》 🦕 文章图文并茂🦖…...
在 CentOS 7 上安装 MySQL 8
在 CentOS 7 上安装 MySQL 8 步骤 1: 添加 MySQL Yum 存储库 首先,我们需要添加 MySQL Yum 存储库。打开终端并执行以下命令: sudo yum install -y https://repo.mysql.com/mysql80-community-release-el7-3.noarch.rpm步骤 2: 导入 MySQL GPG 公钥 …...
从二极管到linux服务器
软件设计: os: 批处理系统: 轮询系统:单片机裸机开发 实时系统:ucosii,rtos,rt-thread、风和系统、liteos(主要是海思系列soc在用)等 非实时系统:linux 对os任务切换时寄存器的功能有理解。 对ipc机制有理解。 bsp: 需要对寄存器、单片机内部总线、iic、spi、uart、c…...
设计模式-16-Spring源码中的设计模式
1-Spring之观察者模式 Java、Google Guava都提供了观察者模式的实现框架。Java提供的框架比较简单,只包含java.util.Observable和java.util.Observer两个类。Google Guava提供的框架功能比较完善和强大:通过EventBus事件总线来实现观察者模式。实际上&am…...
Leetcode 2948. Make Lexicographically Smallest Array by Swapping Elements
Leetcode 2948. Make Lexicographically Smallest Array by Swapping Elements 1. 解题思路2. 代码实现 题目链接:2948. Make Lexicographically Smallest Array by Swapping Elements 1. 解题思路 这一题其实思路上就是分组排序,显然,对于…...
[计算机网络]应用层概述
0.写在前面: 该层为教学模型的最后一层,某种意义上来说是最接近各位开发者的一层,正因如此,这层中的很多定义和概念大家都有属于自己的理解, 完全按照书本反而才是异类,因此在这里我会去结合我做前端开发的一些经验,来处理和讲解一些概念,另外本层中的部分协议也不会过多阐述了…...
《已解决:TypeError: unhashable type: ‘slice‘ 问题》
🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页: 🐅🐾猫头虎的博客🎐《面试题大全专栏》 🦕 文章图文并茂🦖…...
Rust UI开发(二):iced中如何为窗口添加icon图标
注:此文适合于对rust有一些了解的朋友 iced是一个跨平台的GUI库,用于为rust语言程序构建UI界面。 想要了解如何构建简单窗口的可以看本系列的第一篇: Rust UI开发:使用iced构建UI时,如何在界面显示中文字符 本篇是系…...
Django(十一、auth认证模块)
文章目录 一、auth介绍auth认证相关模块及操作扩展auth_user表 一、auth介绍 Django自带一个admin路由,但是需要我们提供管理员账户和密码,如果想要使用admin后台管理,需要先创建表,然后创建管理员账户。 直接执行数据类迁移命令…...
WebSocket了解
一.什么是WebSocket WebSocket是HTML5下一种新的协议(websocket协议本质上是一个基于tcp的协议)它实现了浏览器与服务器全双工通信,能更好的节省服务器资源和带宽并达到实时通讯的目的Websocket是一个持久化的协议 二.websocket的原理 web…...
深度学习基础概念
1. 神经网络基础 神经元(Neuron): 了解神经网络的基本组成单元。激活函数(Activation Function): 学习常见的激活函数,如Sigmoid、ReLU等,以及它们在神经网络中的作用。前馈神经网络…...
vatee万腾科技先锋之选:vatee创新力驱动着未来发展
在科技潮流的浩荡前行中,Vatee万腾崭新的科技先锋之选正以强大的创新力引领着未来的发展。Vatee万腾凭借其前瞻性的技术理念和卓越的创新实践,成为业界的引领者,为整个科技行业树立了标杆。 Vatee万腾不仅仅是一家科技公司,更是一…...
MetaObject-BeanWrapper-MetaClass-Reflector的关系
MetaObject、BeanWrapper、MetaClass、Reflector之间是通过装饰器模式逐层进行装饰的。其中MetaObject、BeanWrapper是操作对象;MetaClass、Reflector是操作Class ObjectWrapper类结构图 BaseWrapper是对BeanWrapper、MapWrapper公共方法的提取及类图的优化&#…...
【JavaEE初阶】线程安全问题及解决方法
目录 一、多线程带来的风险-线程安全 1、观察线程不安全 2、线程安全的概念 3、线程不安全的原因 4、解决之前的线程不安全问题 5、synchronized 关键字 - 监视器锁 monitor lock 5.1 synchronized 的特性 5.2 synchronized 使用示例 5.3 Java 标准库中的线程安全类…...
uniapp高德、百度、腾讯地图配置 SHA1
uniapp高德、百度、腾讯地图配置 SHA1 当winr弹出cmd弹框后输入 keytool -list -v -keystore debug.keystore 显示keytool 不是内部或外部命令,也不是可运行的程序或批处理文件。可以先看看是否有下载jdk且配置了环境变量,具体操作如下:keyto…...
[AutoSAR存储] 车载存储层次 和 常用存储芯片概述
公知及经验整理,原创保护,禁止转载。 专栏 《AutoSAR存储》 <<<< 返回总目录 <<<< 1 存储系统层次 先抛个问题, 为什么要划分存储器的层次? 速度越快,但成本越高,从经济的角度规…...
如何快速解决电脑卡顿问题:Mem Reduct内存管理实用指南
如何快速解决电脑卡顿问题:Mem Reduct内存管理实用指南 【免费下载链接】memreduct Lightweight real-time memory management application to monitor and clean system memory on your computer. 项目地址: https://gitcode.com/gh_mirrors/me/memreduct 电…...
Phi-3-Mini-128K实际案例:为芯片设计团队提供Verilog代码规范检查建议
Phi-3-Mini-128K实际案例:为芯片设计团队提供Verilog代码规范检查建议 1. 项目背景与挑战 在芯片设计领域,Verilog代码的质量直接影响着芯片的性能和可靠性。某芯片设计团队面临以下痛点: 代码规范问题:团队成员编写的Verilog代…...
外卖试吃、霸王餐活动API接口怎么对接?
以微客云为例,外卖试吃 / 霸王餐 API 采用RESTfulJSON,支持美团 / 饿了么双平台,覆盖活动列表、报名 / 领取、核销、订单与统计全链路,适配小程序 / APP/H5 多端,与你常用的PHP/ThinkPHP完美适配。 🔌 核心…...
如何快速设置Plaid开发环境:连接银行账户获取交易数据的终极教程
如何快速设置Plaid开发环境:连接银行账户获取交易数据的终极教程 【免费下载链接】build-your-own-mint Build your own personal finance analytics using Plaid, Google Sheets and CircleCI. 项目地址: https://gitcode.com/gh_mirrors/bu/build-your-own-mint…...
RAG 还是 Lucene:私有化部署客服系统的 AI 知识库架构选型娜
在之前的文章中,我们花了大量的篇幅,从记录后端pod真实ip开始说起,然后引入envoy,再解决了各种各样的需求:配置自动重载、流量劫持、sidecar自动注入,到envoy的各种能力:熔断、流控、分流、透明…...
Redis命令处理机制源码探究粗
一、项目背景与核心价值 1. 解决的核心痛点 Navicat的数据库连接密码并非明文存储,而是通过AES算法加密后写入.ncx格式的XML配置文件中。一旦用户忘记密码,常规方式只能重新配置连接,效率极低。本项目只作为学习研究使用,不做其他…...
如何用开源工具永久保存微信聊天记录:5个实用技巧让珍贵对话永不丢失
如何用开源工具永久保存微信聊天记录:5个实用技巧让珍贵对话永不丢失 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Tre…...
lite-avatar形象库快速部署:基于CSDN GPU平台的150+2D形象即开即用方案
lite-avatar形象库快速部署:基于CSDN GPU平台的1502D形象即开即用方案 1. 项目介绍 lite-avatar形象库是一个专为数字人应用打造的高质量2D形象资源库,基于HumanAIGC-Engineering/LiteAvatarGallery项目构建。这个形象库最大的特点是提供了150个预训练…...
我试了四种去除 Gemini 水印的方法,整理成一篇实用对比野
认识Pass层级结构 Pass范围从上到下一共分为5个层级: 模块层级:单个.ll或.bc文件 调用图层级:函数调用的关系。 函数层级:单个函数。 基本块层级:单个代码块。例如C语言中{}括起来的最小代码。 指令层级:单…...
Huntarr实战案例:如何从零搭建完整的媒体自动化系统
Huntarr实战案例:如何从零搭建完整的媒体自动化系统 【免费下载链接】Sonarr-Hunter Assists Sonarr to check for missing TV Shows 项目地址: https://gitcode.com/gh_mirrors/so/Sonarr-Hunter Huntarr是一款强大的媒体自动化工具,能够帮助用户…...
