【一起python】使用python实现学生管理系统

请添加图片描述

文章目录

  • 📝前言
  • 🌠主函数man
    • 🌉菜单menu
    • 🌉添加学生信息
    • 🌉展示目前学生信息
    • 🌉查找学生
    • 🌉删除同学信息
    • 🌉退出程序
  • 🌠python完整代码
  • 🚩总结


📝前言

🌠主函数man

def main():"""入口函数"""#通过控制台和用户进行交互print('---------------------------------')print('         欢迎来到学生管理系统       ')print('---------------------------------')while True:#通过 menu 函数调用load 即可choice = menu()if choice == '1':#新增学生insert()elif choice == '2':#显示所有学生show()elif choice == '3':#查找学生find()elif choice == '4':#删除学生delete()elif choice == '0':#退出程序result = exitprint()else:print('无效选择,请重试!')if __name__ == "__main__":main()

在 Python 中,每个脚本文件都有一个特殊的内置变量 name。当一个 Python 文件被直接运行时,name 的值会被设置为 “main”。但是如果这个 Python 文件被当作模块导入到其他程序中,那么 name 的值就会是模块名称。

🌉菜单menu

def menu():print(' 1. 新增学生')print(' 2. 显示学生')print(' 3. 查找学生')print(' 4. 删除学生')print(' 0. 退出程序')choice = input(' 请输入你的选择:')return choice

🌉添加学生信息

def insert():print('[新增学生] 开始!')studentId = input('请输入学生的学号:')name = input('请输入学生的姓名:')gender = input('请输入学生的性别:')if gender not in ('man', 'girl'):print('性别输入的内容不符合要求, 新增失败!')returnclassName = input('请输入学生的班级:')# 使用一个字典把上述的信息给聚合起来.student = {'studentId': studentId,'name': name,'gender': gender,'className': className}global studentsstudents.append(student)# 增加保存操作save()print('[新增学生] 完毕!')

🌉展示目前学生信息

def show():#遍历全局变量的这个列表,把每个学生的信息给打印出来print('[显示学生] 开始!')for s in students:print(f"[{s['studentId']}]\t{s['name']}\t{s['gender']}\t{s['className']}")print(f'[显示学生] 完毕!,共显示了 {len(students)} 条数据')

🌉查找学生

def find():#根据学生姓名,来查找print('[查找学生] 开始!')name = input("请输入要查找的同学姓名:")count = 0for s in students:if name == s['name']:print(f'{s['student']}\t{s['name']}\t{s['gender']}\t{s['className']}')count += 1print(f'[查找学生] 结束! 共找到了{count}个匹配的同学!')

🌉删除同学信息

def delete():print('[删除学生] 开始!')studentId = input('请输入要删除的学生学号:')for s in students:if s['studentId'] == studentId:print(f'删除{s['name']}同学的信息!')students.remove(s)save()print('[删除学生] 结束!')

🌉退出程序

def exitprint():print('''  ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓  ┃                                   ┃  ┃     你真的要离开学生管理系统吗?       ┃  ┃                                   ┃  ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛  ''')confirm = input("输入 ‘yes’ 确认退出:")if confirm.lower() == 'yes':print('''  ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓  ┃                                   ┃  ┃     学生管理系统即将关闭,再见!        ┃  ┃                                   ┃  ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛  ''')sys.exit()  # 直接退出程序else:print("继续使用学生管理系统")

🌠python完整代码

# -*- coding: utf-8 -*-
import sys#实现一个命令行版本的学生管理系统
import os.path#使用这个全局变量,来管理所有的学生信息
# 这个列表的每一个元素都是一个"字典",每个字典就分别表示一个同学
students = []def save():"""用于存档"""#此处的路径不是以 d: 开头的“绝对路径”,而是相对路径# 此时这个写法的含义就是让 recode.txt 和当前 的 code66.py在同一个目录with open('recode.txt','w',encoding='utf8') as f:for s in students:f.write(f'{s['studentId']}\t{s['name']}\t{s['gender']}\t{s['className']}')print(f'[存档成功] 共存储了 {(len)(students)} 条记录!')def load():"""用于读档"""# 如果存档文件不存在,则直接跳过读档流程# 为了避免读方式打开文件的时候,文件不存在引起的异常if not os.path.exists('recode.txt'):return# 读档的时候要保证先把旧的数据清理干净!global studentsstudents = []with open('recode.txt','r',encoding='utf8') as f:for line in f:#针对这一行数据,按照 \t 进行切分操作#切分之前,要去除末尾的换行\nline = line.strip()#去除字符串两端的空白字符(空格、换行、制表符等)tokens = line.split('\t')#处理后的字符串(line)按照制表符 \t 进行切分,生成一个字符串列表# 1001    Alice    Female  ClassAif len(tokens) != 4:print(f'当前格式存在问题! line = {line}')continuestudent = {'studentId': tokens[0],'name': tokens[1],'gender': tokens[2],'className': tokens[3]}students.append(student)print('f[读档成功] 共读取了 {len(students)} 条记录!')def menu():print(' 1. 新增学生')print(' 2. 显示学生')print(' 3. 查找学生')print(' 4. 删除学生')print(' 0. 退出程序')choice = input(' 请输入你的选择:')return choicedef insert():print('[新增学生] 开始!')studentId = input('请输入学生的学号:')name = input('请输入学生的姓名:')gender = input('请输入学生的性别:')if gender not in ('man', 'girl'):print('性别输入的内容不符合要求, 新增失败!')returnclassName = input('请输入学生的班级:')# 使用一个字典把上述的信息给聚合起来.student = {'studentId': studentId,'name': name,'gender': gender,'className': className}global studentsstudents.append(student)# 增加保存操作save()print('[新增学生] 完毕!')def show():#遍历全局变量的这个列表,把每个学生的信息给打印出来print('[显示学生] 开始!')for s in students:print(f"[{s['studentId']}]\t{s['name']}\t{s['gender']}\t{s['className']}")print(f'[显示学生] 完毕!,共显示了 {len(students)} 条数据')def find():#根据学生姓名,来查找print('[查找学生] 开始!')name = input("请输入要查找的同学姓名:")count = 0for s in students:if name == s['name']:print(f'{s['student']}\t{s['name']}\t{s['gender']}\t{s['className']}')count += 1print(f'[查找学生] 结束! 共找到了{count}个匹配的同学!')def delete():print('[删除学生] 开始!')studentId = input('请输入要删除的学生学号:')for s in students:if s['studentId'] == studentId:print(f'删除{s['name']}同学的信息!')students.remove(s)save()print('[删除学生] 结束!')def exitprint():print('''  ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓  ┃                                   ┃  ┃     你真的要离开学生管理系统吗?       ┃  ┃                                   ┃  ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛  ''')confirm = input("输入 ‘yes’ 确认退出:")if confirm.lower() == 'yes':print('''  ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓  ┃                                   ┃  ┃     学生管理系统即将关闭,再见!        ┃  ┃                                   ┃  ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛  ''')sys.exit()  # 直接退出程序else:print("继续使用学生管理系统")def main():"""入口函数"""#通过控制台和用户进行交互print('---------------------------------')print('         欢迎来到学生管理系统       ')print('---------------------------------')while True:#通过 menu 函数调用load 即可choice = menu()if choice == '1':#新增学生insert()elif choice == '2':#显示所有学生show()elif choice == '3':#查找学生find()elif choice == '4':#删除学生delete()elif choice == '0':#退出程序result = exitprint()else:print('无效选择,请重试!')if __name__ == "__main__":main()

🚩总结

请添加图片描述

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

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

相关文章

前缀和_560. 和为 K 的子数组

560. 和为 K 的子数组 #include <unordered_map> class Solution { public:int subarraySum(vector<int>& nums, int k) {int nnums.size();unordered_map<int,int> hs;int sum0,re0;hs[0]1;for(int i0;i<n;i){sumnums[i];if(hs.count(sum-k)) rehs[s…

(转载)Tools for Learning LLVM TableGen

前提 最近在学习有关llvm的东西&#xff0c;其中TableGen占了一部分&#xff0c;所以想特意学习下TableGen相关的语法。这里找到了LLVM官网的一篇介绍TableGen的博客&#xff0c;学习并使用机器翻译为中文。在文章的最后也添加了一些学习TableGen的资源。 原文地址&#xff1…

excel表格文字识别-ocr表格文字提取api接口集成-python

表格文字识别接口的集成示例通常包含几个关键步骤&#xff0c;从接入API接口到最终数据处理和展示。以下是翔云表格文字识别接口的一个基本集成流程示例&#xff1a; 1. 获取接口信息 在开始集成前&#xff0c;请确保已经获取了表格文字识别API的接口文档&#xff0c;并了解该接…

Python酷库之旅-第三方库Pandas(182)

目录 一、用法精讲 841、pandas.api.types.is_complex函数 841-1、语法 841-2、参数 841-3、功能 841-4、返回值 841-5、说明 841-6、用法 841-6-1、数据准备 841-6-2、代码示例 841-6-3、结果输出 842、pandas.api.types.is_float函数 842-1、语法 842-2、参数 …

CSS基础学习篇——选择器

学习文档连接&#xff1a;CSS层叠样式表 1.全局选择器&#xff1a;* * {margin: 0;padding: 0;font-size: 18px; }2.类&#xff08;clss&#xff09;选择器&#xff0c;以 . 开头 .container {display: flex;justify-content: space-around;align-items: center;width: 1200…

Marin说PCB之电源的Surface Current Density知多少?

小编我是一位资深的国漫迷&#xff0c;像什么仙逆&#xff0c;斗破&#xff0c;斗罗&#xff0c;完美世界&#xff0c;遮天&#xff0c;凡人修仙传&#xff0c;少年歌行等&#xff0c;为了可以看这些视频小编我不惜花费了攒了很多年的私房钱去开了这个三个平台的会员啊&#xf…

CSS中display和visibility的区别

在 CSS 中&#xff0c;display 和 visibility 是两个用于控制元素显示和布局的属性&#xff0c;但它们的作用和效果是不同的。以下是它们的主要区别&#xff1a; 1.display 定义&#xff1a;display 属性用于控制元素的显示类型和布局行为。 常见值&#xff1a; none&#…

计算机毕业设计——ssm-基于SSM框架的校园爱心公益平台的设计与实现-演示录像2021

作者&#xff1a;程序媛9688开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等。 &#x1f31f;文末获取源码数据库&#x1f31f;感兴趣的可以先收藏起来&#xff0c;还有大家在毕设选题&#xff08;免费咨询指导选题&#xff09;&#xff0…

Oracle视频基础1.3.3练习

1.3.3 检查数据库启动情况 ps -ef | grep oracle启动数据库 sqlplus /nolog conn / as sysdba修改 fast_start_mttr_target 参数为初始值-50&#xff0c;缺省 scope 和 sid&#xff0c;查看修改结果 show parameter fast; alter system set parameter 250; show parameter fa…

CSS flex布局- 最后一个元素占满剩余可用高度转载

效果图 技术要点 height父元素必须有一个设定的高度flex-grow: 1 flex 盒子模型内的该元素将会占据父容器中剩余的空间F12检查最后一行的元素&#xff0c;高度就已经改变了&#xff1b;

LlamaIndex框架学习-提示词的几种使用模式

定义自定义提示词 定义自定义提示词就像创建格式字符串一样简单。 from llama_index.core import PromptTemplatetemplate ("We have provided context information below. \n""---------------------\n""{context_str}""\n------------…

基于vue框架的的驾校预约管理系统设计d5tq3(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;用户,驾校教练,车辆信息,报名信息,学员信息,考试预约,教学课程,教练评价,考试成绩,练车预约,报修申请,维修信息,课程类型,车辆类型 开题报告内容 基于Vue框架的驾校预约管理系统设计开题报告 一、项目背景与意义 随着驾驶培训行业的快…

shell脚本编写注意细节 ==、=等的区别

文章目录 和的使用主要区别小结 Shell脚本要注意的细节1. 变量引用和空格处理2. [[ ... ]] vs [ ... ]3. 使用-n和-z来检测变量是否为空4. 整数运算和浮点运算5. 避免使用反引号执行命令6. for循环中的命令替换7. 使用trap来清理临时文件8. 避免使用硬编码路径9. 使用-eq、-lt、…

Docker Swarm简介

注意事项 Swarm 模式是用于管理 Docker 守护进程集群的一项高级特性。如果你打算将 Swarm 用作生产运行时环境&#xff0c;那就使用 Swarm 模式。如果你不打算使用 Swarm 进行部署&#xff0c;可改用 Docker Compose。如果正在为 Kubernetes 部署进行开发&#xff0c;可以考虑使…

【1】基础概念

文章目录 一、特点二、基础语法注意三、官方编程指南四、go 语言标准库 API 一、特点 golang 一个 go 文件都要归属到一个包&#xff0c;需要进行申明。天然的并发&#xff1a;golang 从语言层面支持大并发。每个 go 文件都必须要归属到一个包中。执行 go 文件&#xff1a;go …

接口测试及常用接口测试工具(postman/jmeter)详解

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 首先&#xff0c;什么是接口呢&#xff1f; 接口一般来说有两种&#xff0c;一种是程序内部的接口&#xff0c;一种是系统对外的接口。 系统对外的接口&#…

CVE-2024-51567 CyberPanel upgrademysqlstatus 远程命令执行

该漏洞源于upgrademysqlstatus接口未做身份验证和参数过滤&#xff0c;未授权的攻击者可以通过此接口执行任意命令获取服务器权限&#xff0c;从而造成数据泄露、服务器被接管等严重的后果。 影响版本 CyberPanel v2.3.5CyberPanel v2.3.6 目前官方已有可更新版本&#xff0…

Kaggle “Reducing Commercial Aviation Fatalities” 比赛 生理数据分析

1、背景 Kaggle在2018 年 12 月 20 日举办“Reducing Commercial Aviation Fatalities” 比赛&#xff0c;通过收集飞行员的生理数据&#xff0c;判断飞行员何时会遇到麻烦吗&#xff1f;该比赛主要分析飞行员的问题&#xff0c;因为航班多、时间不固定&#xff0c;飞行员会出…

【flink】之新版本kafka到kafka

前言&#xff1a; 通过sinkTo()的优点&#xff1a;更简洁、类型安全&#xff0c;适用于使用 Flink 提供的预定义 sink 或简单的自定义 sink 准备&#xff1a; 引入Flink 1.12版本即可 <dependency><groupId>org.apache.flink</groupId><artifactId>fl…

如何配置,npm install 是从本地安装依赖

在 Node.js 中&#xff0c;要使npm install从本地安装依赖&#xff0c;可以按照以下步骤进行配置&#xff1a; 一、准备本地依赖包 确保你有本地的依赖包。这个依赖包可以是一个包含package.json文件的文件夹&#xff0c;或者是一个已经打包好的.tgz文件。 二、使用相对路径…