学生信息管理系统程序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()  # 重新执行修改操作

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/170948.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

时间序列预测 — Informer实现多变量负荷预测(PyTorch)

目录 1 实验数据集 2 如何运行自己的数据集 3 报错分析 1 实验数据集 实验数据集采用数据集4&#xff1a;2016年电工数学建模竞赛负荷预测数据集&#xff08;下载链接&#xff09;&#xff0c;数据集包含日期、最高温度℃ 、最低温度℃、平均温度℃ 、相对湿度(平均) 、降雨…

什么是零拷贝 、零拷贝优化方案 - 真正的零拷贝,哪些地方会用到零拷贝技术

文章目录 什么是零拷贝3、零拷贝优化方案 - 真正的零拷贝哪些地方会用到零拷贝技术 现在来谈谈零拷贝&#xff0c;以及在开发中哪些地方使用到零拷贝。 开干… 什么是零拷贝 零拷贝指的是&#xff0c;从一个存储区域到另一个存储区域的copy任务无需CPU参与就可完成。零拷贝的底…

徕芬不是满分:自称超越戴森,用户称多次故障,品控仍是老大难?

撰稿|行星 来源|贝多财经 “双十一”购物节落下帷幕后&#xff0c;各大品牌纷纷公布“战报”。其中&#xff0c;高速吹风机品牌徕芬&#xff08;也称“徕芬科技”&#xff09;销售额超4.4亿元&#xff0c;全系产品销量超过80万台&#xff0c;高速吹风机系列单品(LF03、SE)销售…

来自Microsoft Teams的摄像头背景图片

原文件在&#x1f446;&#xff0c;下面是预览图 如果你安装了Microsoft Teams也可以搜索MSTeams&#xff0c;就在MSTeams/Backgrounds

【anaconda】numpy.dot 向量点乘小技巧

假设向量A[1,1], 向量B[2,3]。如果想知道他们的内积就可以输入如下代码: 当然&#xff0c;如果是两个列向量相乘&#xff0c;肯定是不对的 但是如果没有维度也一样可以求得内积&#xff0c;而且结果不会套在列表里

AI和人工智能与机器学习全景报告

今天分享的是AI系列深度研究报告&#xff1a;《AI和人工智能与机器学习全景报告》。 &#xff08;报告出品方&#xff1a;appen&#xff09; 报告共计&#xff1a;30页 获取 数据获取仍是AI应用构建团队的主要瓶颈。 原因各不相同。例如&#xff0c;特定用例的数据可能不足…

Day02嵌入式---按键控灯

一、简单介绍 按键控制灯开关是一种常见的嵌入式系统示例项目&#xff0c;它通常用于演示嵌入式系统的基本控制能力。该项目由一个或多个LED和一个按键组成。通过按下按键&#xff0c;可以控制LED的开关状态&#xff0c;从而实现灯的亮灭控制。 二、查看功能手册 2.1 查看硬件…

基于单片机压力传感器MPX4115检测-报警系统proteus仿真+源程序

一、系统方案 1、本设计采用这51单片机作为主控器。 2、MPX4115采集压力值、DS18B20采集温度值送到液晶1602显示。 3、按键设置报警值。 4、蜂鸣器报警。 二、硬件设计 原理图如下&#xff1a; 三、单片机软件设计 1、首先是系统初始化 /*********************************…

鸿蒙开发之android开发人员指南《基础知识》

基于华为鸿蒙未来可能不再兼容android应用&#xff0c;推出鸿蒙开发系列文档&#xff0c;帮助android开发人员快速上手鸿蒙应用开发。 1. 鸿蒙使用什么基础语言开发&#xff1f; ArkTS是鸿蒙生态的应用开发语言。它在保持TypeScript&#xff08;简称TS&#xff09;基本语法风…

【免费使用】基于PaddleSeg开源项目开发的人像抠图Web API接口

基于PaddleSeg开源项目开发的人像抠图API接口&#xff0c;服务器不存储照片大家可放心使用。 1、请求接口 请求地址&#xff1a;http://apiseg.hysys.cn/predict_img 请求方式&#xff1a;POST 请求参数&#xff1a;{"image":"/9j/4AAQ..."} 参数是jso…

与Windows 10更新大同小异!一步一步教你如何更新Windows 11

如果你想让你的Windows 11设备获得最佳性能&#xff0c;那么定期更新是至关重要的。即使是最好的电脑如果不更新也会受到影响&#xff0c;因为更新会应用软件调整&#xff0c;帮助你的设备更快、更平稳地运行。它还提高了安全性&#xff0c;意味着你可以从Microsoft的最新功能中…

Kafka-TopicPartition

Kafka主题与分区 主题与分区 topic & partition&#xff0c;是Kafka两个核心的概念&#xff0c;也是Kafka的基本组织单元。 主题作为消息的归类&#xff0c;可以再细分为一个或多个分区&#xff0c;分区也可以看作对消息的二次归类。 分区的划分为kafka提供了可伸缩性、水…

【H5 Canvas】【平面几何】特殊图形绘制(箭头/正多边/正多尖角形等)

文章目录 直线/弧线 箭头 直线/弧线 箭头 // startX,startY 起始坐标 // endX,endY 结束坐标 // angel 圆弧角度,取值[0&#xff0c;PI]; 0表示画直线箭头&#xff0c;否则画圆弧箭头 CanvasRenderingContext2D.prototype.drawArrow function(startX,startY,endX,endY,angel)…

openEuler Linux 部署 FineBi

openEuler Linux 部署 FineBi 部署环境 环境版本openEuler Linux22.03MySQL8.0.35JDK1.8FineBi6.0 环境准备 升级系统内核和软件 yum -y updatereboot安装常用工具软件 yum -y install vim tar net-tools 安装MySQL8 将 MySQL Yum 存储库添加到系统的存储库列表中 sudo…

JVM——垃圾回收算法(垃圾回收算法评价标准,四种垃圾回收算法)

目录 1.垃圾回收算法发展简介2.垃圾回收算法的评价标准1.吞吐量2.最大暂停时间3.堆使用效率 3.垃圾回收算法01-标记清除算法垃圾回收算法-标记清除算法的优缺点 4.垃圾回收算法02-复制算法垃圾回收算法-复制算法的优缺点 5.垃圾回收算法03-标记整理算法标记整理算法的优缺点 6.…

适用于 Mac 和 Windows 的顶级U 盘数据恢复软件

由于意外删除或设备故障而丢失 USB 驱动器中的数据始终是一件令人压力很大的事情&#xff0c;检索该信息的最佳选择是使用优质数据恢复软件。为了让事情变得更容易&#xff0c;我们已经为您完成了所有研究并测试了工具&#xff0c;并且我们列出了最好的 USB 记忆棒恢复软件&…

队列实现栈VS栈实现队列

目录 【1】用队列实现栈 思路分析 ​ 易错总结 Queue.c&Queue.h手撕队列 声明栈MyStack 创建&初始化栈myStackCreate 压栈myStackPush 出栈&返回栈顶元素myStackPop 返回栈顶元素myStackTop 判断栈空否myStackEmpty 释放空间myStackFree MyStack总代码…

赢麻了!义乌一个村有5000个网红,有人年收租就300万!

#义乌一村电商年成交额超300亿# ,在中国&#xff0c;电商行业的发展可谓是日新月异&#xff0c;而位于浙江省义乌市的江北下朱村&#xff0c;正是这股潮流的一个典型代表。这个村子&#xff0c;处处弥漫着“直播”的气息&#xff0c;仿佛每个人都在为这个新兴行业助力。 江北下…

软件开发中的抓大放小vs极致细节思维

最近在开发过程中&#xff0c;遇到了好多次 “这个需求点这次要不要做&#xff1f;” 的问题&#xff0c; 主要有两方阵营&#xff0c;比如以研发主导的 “这次先不做、等必要的时候再做” &#xff0c;另外一方是以PM主导的 “这个不做需求不完整&#xff0c;可能影响用户体验…

机器学习第14天:KNN近邻算法

☁️主页 Nowl &#x1f525;专栏《机器学习实战》 《机器学习》 &#x1f4d1;君子坐而论道&#xff0c;少年起而行之 文章目录 介绍 实例 回归任务 缺点 实例 分类任务 如何选择最佳参数 结语 介绍 KNN算法的核心思想是&#xff1a;当我们要判断一个数据为哪一类时…