Python学生信息管理系统的设计与实现
在本篇博客中,我们将深入探讨一个基于Python的简单学生信息管理系统的设计与实现过程。这个系统允许用户执行诸如添加、删除、修改和查询学生信息等操作。我们将逐步解析代码,理解其中的关键概念和编程实践。
1. 系统概述
该系统由几个核心功能组成:
- 添加学生信息
- 删除学生信息
- 修改学生信息
- 查询学生信息
- 遍历所有学生信息
- 退出系统
2. 主要代码结构
系统的核心在于一个循环,不断向用户展示菜单并根据用户的输入执行相应的功能。我们首先定义了一个showInfo()
函数,用于显示功能列表。
def showInfo():print("-" * 30)print(" 学生管理系统 v1.0")# ... 显示菜单 ...print('-' * 30)
3. 学生数据存储
为了保存学生信息,我们使用了一个列表students
,其中每个元素都是一个字典,包含name
、id
和age
字段。
students = []
4. 功能实现
添加学生信息
在添加学生信息时,程序会提示用户输入姓名、学号和年龄,并检查学号是否已存在,以保证其唯一性。
if leap == 1:print("输入学生学号重复,添加失败!")
else:stuInfo = {'name': name, 'id': stuId, 'age': age}students.append(stuInfo)print("添加成功!")
删除学生信息
删除操作通过查找指定学号的学生信息并从列表中移除来实现。
if leap == 0:print("没有此学生学号,删除失败!")
else:del students[i]print("删除成功!")
修改学生信息
修改功能允许用户修改特定学生的学号、姓名或年龄,同时确保学号的唯一性。
if leap == 1:# 修改代码...
else:print("没有此学号,修改失败!")
查询学生信息
查询功能根据输入的学号查找并显示学生的详细信息。
if leap == 0:print("没有此学生学号,查询失败!")
else:print("找到此学生,信息如下:")print("学号:%s\n姓名:%s\n年龄:%s\n" % (temp['id'], temp['name'], temp['age']))
遍历所有学生信息
遍历功能用于显示系统中存储的所有学生信息。
print("*" * 20)
print("接下来进行遍历所有的学生信息...")
print("id 姓名 年龄")
for temp in students:print("%s %s %s" % (temp['id'], temp['name'], temp['age']))
print("*" * 20)
退出系统
最后,系统提供了退出选项,但通过询问确认来避免意外退出。
quitconfirm = input("亲,真的要退出么 (yes或者no)??~~(>_<)~~??")
if quitconfirm == 'yes':print("欢迎使用本系统,谢谢")break;
5. 完整代码
# encoding utf=8
# 定义一个函数,显示可以使用的功能列表给用户
def showInfo():print("-" * 30)print(" 学生管理系统 v1.0")print(" 1.添加学生的信息")print(" 2.删除学生的信息")print(" 3.修改学生的信息")print(" 4.查询学生的信息")print(" 5.遍历所有学生的信息")print(" 6.退出系统")print('-' * 30)# 定义一个列表,用来存储多个学生的信息
students = []while True:# 把功能列表进行显示给用户showInfo()# 提示用户选择功能# 获取用户选择的功能key = int(input("请选择功能(序号):"))# 根据用户选择,完成相应功能if key == 1:print("您选择了添加学生信息功能")name = input("请输入学生姓名:")stuId = input("请输入学生学号(学号不可重复):")age = input("请输入学生年龄:")# 验证学号是否唯一i = 0leap = 0for temp in students:if temp['id'] == stuId:leap = 1breakelse:i = i + 1if leap == 1:print("输入学生学号重复,添加失败!")breakelse:# 定义一个字典,存放单个学生信息stuInfo = {}stuInfo['name'] = namestuInfo['id'] = stuIdstuInfo['age'] = age# 单个学生信息放入列表students.append(stuInfo)print("添加成功!")elif key == 2:print("您选择了删除学生功能")delId = input("请输入要删除的学生学号:")# i记录要删除的下标,leap为标志位,如果找到leap=1,否则为0i = 0leap = 0for temp in students:if temp['id'] == delId:leap = 1breakelse:i = i + 1if leap == 0:print("没有此学生学号,删除失败!")else:del students[i]print("删除成功!")elif key == 3:print("您选择了修改学生信息功能")alterId = input("请输入你要修改学生的学号:")# 检测是否有此学号,然后进行修改信息i = 0leap = 0for temp in students:if temp['id'] == alterId:leap = 1breakelse:i = i + 1if leap == 1:while True:alterNum = int(input(" 1.修改学号\n 2.修改姓名 \n 3.修改年龄 \n 4.退出修改\n"))if alterNum == 1:newId = input("输入更改后的学号:")# 修改后的学号要验证是否唯一i = 0leap1 = 0for temp1 in students:if temp1['id'] == newId:leap1 = 1breakelse:i = i + 1if leap1 == 1:print("输入学号不可重复,修改失败!")else:temp['id'] = newIdprint("学号修改成功")elif alterNum == 2:newName = input("输入更改后的姓名:")temp['name'] = newNameprint("姓名修改成功")elif alterNum == 3:newAge = input("输入更改后的年龄:")temp['age'] = newAgeprint("年龄修改成功")elif alterNum == 4:breakelse:print("输入错误请重新输入")else:print("没有此学号,修改失败!")elif key == 4:print("您选择了查询学生信息功能")searchID = input("请输入你要查询学生的学号:")# 验证是否有此学号i = 0leap = 0for temp in students:if temp['id'] == searchID:leap = 1breakelse:i = i + 1if leap == 0:print("没有此学生学号,查询失败!")else:print("找到此学生,信息如下:")print("学号:%s\n姓名:%s\n年龄:%s\n" % (temp['id'], temp['name'], temp['age']))elif key == 5:# 遍历并输出所有学生的信息print('*' * 20)print("接下来进行遍历所有的学生信息...")print("id 姓名 年龄")for temp in students:print("%s %s %s" % (temp['id'], temp['name'], temp['age']))print("*" * 20)elif key == 6:# 退出功能,尽量往不退出的方向引quitconfirm = input("亲,真的要退出么 (yes或者no)??~~(>_<)~~??")if quitconfirm == 'yes':print("欢迎使用本系统,谢谢")break;else:print("您输入有误,请重新输入")
6. 总结
这个学生信息管理系统虽然简单,但它涵盖了Python编程中的许多关键概念,包括列表、字典、循环、条件判断和用户输入处理。此外,它还展示了如何在实际应用中使用这些概念来构建一个实用的系统。通过理解和修改这段代码,你可以进一步扩展其功能,例如增加文件读写功能,使得数据可以持久化存储。
相关文章:

Python学生信息管理系统的设计与实现
在本篇博客中,我们将深入探讨一个基于Python的简单学生信息管理系统的设计与实现过程。这个系统允许用户执行诸如添加、删除、修改和查询学生信息等操作。我们将逐步解析代码,理解其中的关键概念和编程实践。 1. 系统概述 该系统由几个核心功能组成&am…...

最优雅的PHP框架 Laravel
Laravel 之所以被称为最优雅的 PHP 框架,是因为它在设计和功能上做了很多独特的创新,极大地提高了开发效率和代码的可维护性。以下是 Laravel 受欢迎的主要原因: 良好的文档和社区支持 Laravel 有详尽的官方文档,涵盖了框架的所有功能和用法。此外,Laravel 社区非常活跃…...

log4j2的日志框架(详细,springboot和异步日志的实现)
目录 log4j2的介绍 Log4j2的性能 SpringBoot中的使用Log4j2 log4j2的进阶--异步日志 AsyncAppender方式 AsyncLogger方式 log4j2的介绍 Apache Log4j 2是对Log4j的升级版,参考了logback的一些优秀的设计,并且修复了一些问题,因此带 来…...

taocms 3.0.1 本地文件泄露漏洞(CVE-2021-44983)
前言 CVE-2021-44983 是一个影响 taoCMS 3.0.1 的远程代码执行(RCE)漏洞。该漏洞允许攻击者通过上传恶意文件并在服务器上执行任意代码来利用这一安全缺陷。 漏洞描述 taoCMS 是一个内容管理系统(CMS),用于创建和管…...

SpringBoot实战:处理全局异常
1. 导入springmvc依赖 2.定义全局异常处理类 //定义全局异常处理器,可捕获控制层抛出的异常 ControllerAdvice public class GlobalExceptionHandler {//当控制层抛出Exception异常时会被该方法捕获,并执行该方法ExceptionHandler(Exception.class)Res…...

pdf只要前几页,pdf中只要前几页怎么处理
在处理pdf文件时,我们有时只需要其中的一页或几页,而不是整个文档。那么,如何快速且高效地从pdf中提取单独的一页呢?本文将为你揭示几种简单易行的方法,让你轻松实现这一目标。 使用 “轻云处理pdf官网” 打开 “轻云…...

实变函数精解【4】
文章目录 说明点集与测度开集的极限点集定义与解释开集的导集特性示例结论 导集一、定义二、特点三、性质四、应用五、总结 边界点与聚点的区别一、定义二、性质与区别三、结论 有界点集与测度有界点集的测度不一定有限分析原因结论注意事项 测度有限的点集,不一定有…...

【BUG】Python3|COPY 指令合并 ts 文件为 mp4 文件时长不对(含三种可执行源代码和解决方法)
文章目录 前言源代码FFmpeg的安装1 下载2 安装 前言 参考: python 合并 ts 视频(三种方法)使用 FFmpeg 合并多个 ts 视频文件转为 mp4 格式 Windows 平台下,用 Python 合并 ts 文件为 mp4 文件常见的有三种方法: 调用…...

AI克隆声音,基于函数计算部署GPT-Sovits语音生成模型
阿里云的基于函数计算部署GPT-Sovits语音生成模型 可以直接文字转语音,也可以上传一段自己的语音,根据你上传的语音进行语音播报。 一、打开阿里云的函数计算 https://developer.aliyun.com/adc/scenario/808348a321844a62b922187d89cd5077 还是 函数…...

DP讨论——建造者模式
学而时习之,温故而知新。 敌人出招(使用场景) 组合关系中,如果要A对象创建B对象,或者要A对象创建一堆对象,这种是普遍的需求。 你出招 这种适合创建者模式,我感觉也是比较常见的。 构造函数…...

【JavaScript】解决 JavaScript 语言报错:Uncaught SyntaxError: Unexpected token
文章目录 一、背景介绍常见场景 二、报错信息解析三、常见原因分析1. 缺少必要的语法元素2. 使用了不正确的字符或符号3. JSON 格式错误4. 字符串未正确闭合 四、解决方案与预防措施1. 检查语法元素2. 正确使用符号和字符3. 修正 JSON 格式4. 字符串闭合 五、示例代码和实践建议…...

oracle数据库的plsql免安装版安装
这个是连接oracle数据库的,注意安装不能有中文路径。以下只是示例。 1、打开D:\ruanjian\plsql\plsql\plsql,发送plsqldev.exe快捷方式到桌面。 2、新弹出的页面填写cancel,什么也不写。 3、将instanceclient解压,并复制文件路径。 修改tool…...

stm32使用通用定时器生成pwm
Driver_TIM5.c 通用定时器的通道1和2可以做时钟源 #include "Driver_TIM5.h"void Driver_TIM5_Init(void) {/* 1. 开启时钟*//* 1.1 定时器5的时钟 */RCC->APB1ENR | RCC_APB1ENR_TIM5EN;/* 1.2 GPIO的时钟 PA */RCC->APB2ENR | RCC_APB2ENR_IOPAEN;/* 2. 设…...

老物件线上3D回忆展拓宽了艺术作品的展示空间和时间-深圳华锐视点
在数字技术的浪潮下,3D线上画展为艺术家们开启了一个全新的展示与销售平台。这一创新形式不仅拓宽了艺术作品的展示空间,还为广大观众带来了前所未有的观赏体验。 3D线上画展制作以其独特的互动性,让艺术不再是单一的视觉享受。在这里&#x…...

对于多个表多个字段进行查询、F12查看网页的返回数据帮助开发、数据库的各种查询方式(多对多、多表查询、子查询等)。
对于多个表多个字段进行查询、F12查看网页的返回数据帮助开发、数据库的各种查询方式(多对多、多表查询、子查询等)。 一、 前端界面需要展现多个表的其中几个数据的多表查询。1. 三个表查询其中字段返回:(用一下sql语句ÿ…...

护网HW面试常问——组件中间件框架漏洞(包含流量特征)
apache&iis&nginx中间件解析漏洞 参考我之前的文章:护网HW面试—apache&iis&nginx中间件解析漏洞篇-CSDN博客 log4j2 漏洞原理: 该漏洞主要是由于日志在打印时当遇到${后,以:号作为分割,将表达式内容分割成两部…...

招投标数据采集:为企业决策提供数据支持
在当今数据驱动的时代,招投标信息作为行业竞争情报的重要组成部分,正日益成为企业制定战略决策的关键依据。本文将深入探讨招投标数据采集的重要性,以及它如何为企业决策提供强有力的数据支持,同时揭秘如何高效、精准地获取这些数…...

02:项目二:感应开关盖垃圾桶
感应开关盖垃圾桶 1、PWM开发SG901.1、怎样通过C51单片机输出PWM波?1.2、通过定时器输出PWM波来控制SG90 2、超声波测距模块的使用3、感应开关盖垃圾桶 需要材料: 1、SG90舵机模块 2、HC-SR04超声波模块 3、震动传感器 4、蜂鸣器 5、若干杜邦线 1、PWM开…...

eNsp公司管理的网络NAT策略搭建
实验拓扑图 实验需求: 7,办公区设备可以通过电信链路和移动链路上网(多对多的NAT,并且需要保留一个公网IP不能用来转换) 8,分公司设备可以通过总公司的移动链路和电信链路访问到Dmz区的http服务器 9,多出口环境基于带…...

MUR2060CTR-ASEMI无人机专用MUR2060CTR
编辑:ll MUR2060CTR-ASEMI无人机专用MUR2060CTR 型号:MUR2060CTR 品牌:ASEMI 封装:TO-220 批号:最新 最大平均正向电流(IF):20A 最大循环峰值反向电压(VRRM&#…...

Manim的代码练习02:在manim中Dot ,Arrow和NumberPlane对象的使用
Dot:指代点对象或者表示点的符号。Arrow:指代箭头对象,包括直线上的箭头或者向量箭头等。NumberPlane:指代数轴平面对象,在Manim中用来创建包含坐标轴的数学坐标系平面。Text:指代文本对象,用来…...

datawhale - 基于术语词典干预的机器翻译挑战赛 (一)
文章目录 torchtext 库是干什么用的 ?TranslationDataset 类定义 Seq2Seq模型EncoderDecoderSeq2Seq 类 load_terminology_dictionary 函数示例用法 train 函数主程序代码模型评价load_sentences 函数translate_sentence 函数evaluate_bleu 函数主程序 测试集上进行…...

【JavaScript脚本宇宙】提升用户体验:探索 JavaScript 命令行界面开发工具
构建交互式命令行:JavaScript 中的 CLI 开发利器 前言 在现代软件开发中,命令行界面(CLI)和终端应用程序的开发变得越来越重要。为了提高用户体验和交互性,使用合适的工具和库是至关重要的。本文将介绍一些用于构建命…...

ubuntu18.04安装显卡驱动后无法进入桌面的解决办法
我没有尝试完美恢复的方法,只尝试了卸载nvidia显卡的方法 1.第一步 进 安开机键进入 1 开机进入 选项界面,选择高级模式(ubuntu 高级选项) 2.第二步 进去以后选择一个括号里面带recovery mode的选项,数字选最高最大的。 3.然后…...

javaScript的面试重点--预解析
目录 一.前言 二.预解析案例 一.前言 关于预解析,我们通过今天学习就能够知道解析器运行JS分为哪两步;能够说出变量提升的步骤和运行过程;能够说出函数提升的步骤和运行过程。 二.预解析案例 预解析,简而言之,也就是…...

Gitea 仓库事件触发Jenkins远程构建
文章目录 引言I Gitea 仓库事件触发Jenkins远程构建1.1 Jenkins配置1.2 Gitea 配置引言 应用场景:项目部署 I Gitea 仓库事件触发Jenkins远程构建 Gitea支持用于仓库事件的Webhooks 1.1 Jenkins配置 高版本Jenkins需要关闭跨域限制和开启匿名用户访问 在Jenkins启动前加入…...

springboot+vue 开发记录(九)后端打包部署运行
本篇文章主要内容是后端项目写好了,怎么打包部署到服务器上运行。 文章目录 1. 在服务器上安装Docker2. 在Docker中装MySQL3. 在Docker中设置网桥,实现容器间的网络通信4. 修改后端配置文件5. 修改pom.xml文件6. 打包7. 编写DockerFile文件8. 上传文件到…...

昇思25天学习打卡营第20天 | 基于MindNLP+MusicGen生成自己的个性化音乐
基于MindNLPMusicGen生成个性化音乐 实验简介 MusicGen是Meta AI提出的音乐生成模型,能够根据文本描述或音频提示生成高质量音乐。该模型基于Transformer结构,分为三个阶段:文本编码、音频token预测和音频解码。此实验将演示如何使用MindSpo…...

windows USB 设备驱动开发-USB主控制开发(一)
下面介绍主机驱动程序开发的高级概念和任务。 如果你正在编写与 Microsoft 提供的 USB 主机控制器扩展驱动程序 (Ucx01000.sys) 通信的新主机控制器驱动程序,则这部分内容适用于你。 下面是 Windows 中 USB 主机端驱动程序中显示的图表的修改版本。 此版本隐藏 USB…...

Dubbo 负载均衡(Load Balance)
在分布式系统中,负载均衡是确保系统高效稳定运行的关键技术之一。Dubbo 作为一款高性能的 RPC 框架,提供了多种负载均衡策略以满足不同场景的需求。本文将深入介绍 Dubbo 中常用的几种负载均衡策略:随机(Random)、轮询…...