Python综合案例:学生管理系统

目录

需求说明:

功能:

创建入口函数:

实现菜单函数:

实现增删查操作:

1. 新增学生

2. 展示学生

3. 查找学生

4. 删除学生

加入存档读档:

1. 约定存档格式

2. 实现存档函数

3. 实现读档函数

打包成 exe 程序发布

1. 安装 pyinstaller

2. 打包程序


需求说明:

实现一个命令行版本的学生管理系统

功能:

  • 新增学生
  • 显示学生
  • 查找学生
  • 删除学生
  • 存档到文件

创建入口函数:

  • 使用一个全局列表 students 表示所有学生信息。
  • 使用 menu 函数和用户交互,这是一个自定义函数。
  • 使用 insert , show , find , delete 这几个自定义函数完成增删查操作。
  • 使用 sys.exit 实现程序退出。
# 使用列表表示所有的学生
students = []
def main():"""程序的入口函数"""print('+--------------------------+')print('|     欢迎来带学生管理系统!   |')print('+--------------------------+')while True:choice = menu()if choice == 0:sys.exit()if choice == 1:insert()elif choice == 2:show()elif choice == 3:find()elif choice == 4:delete()else:print('您的输入有误! 请重新输入!')
main()

实现菜单函数:

def menu():"""显示程序菜单"""print(" 1. 新增学生信息")print(" 2. 显示所有同学信息")print(" 3. 根据名字查找学生信息")print(" 4. 删除学生信息")print(" 0. 退出程序")choice = input(" 请输入您的选择: ")return int(choice)

实现增删查操作:

1. 新增学生

def insert():print("[新增学生] 开始!")studentId = input("请输入学生的学号: ")name = input("请输入学生的姓名: ")gender = input("请输入学生的性别: ")if gender not in ('男', '女'):print("性别不符合要求! 新增学生失败!")returnclassName = input("请输入学生的班级: ")# 使用一个字典表示学生信息student = {'studentId': studentId,'name': name,'gender': gender,'className': className}# 把字典添加到学生列表中global studentsstudents.append(student)print("[新增学生] 完毕!")

2. 展示学生

def show():print("[显示学生] 开始!")for s in students:print(f"
[{s['studentId']}]\t{s['name']}\t{s['gender']}\t{s['className']}")print(f"[显示学生] 完毕! 共显示了 {len(students)} 条记录!")

3. 查找学生

def find():print("[查找学生] 开始!")name = input("请输入要查找的同学姓名: ")count = 0for s in students:if name == s['name']:print(f"
[{s['studentId']}]\t{s['name']}\t{s['gender']}\t{s['className']}")count += 1print(f"[查找学生] 完毕! 共查找到 {count} 条记录!")

4. 删除学生

def delete():print("[删除学生] 开始!")studentId = input("请输入要删除的同学学号: ")count = 0for s in students:if studentId == s['studentId']:print(f"删除 {s['name']} 同学的信息!")students.remove(s)count += 1print(f"[删除学生] 完毕! 共删除 {count} 条记录!")

加入存档读档:

1. 约定存档格式

约定存档文件放到 d:/record.txt 文件中。

并且以行文本的方式来保存学生信息,格式如下:

学号\t名字\t性别\t班级

学号\t名字\t性别\t班级

学号\t名字\t性别\t班级

  • 每个同学占一行。
  • 每个同学的信息之间使用 \t 制表符进行分隔。

2. 实现存档函数

def save():"""存档函数"""with open('d:/record.txt', 'w') as f:for s in students:f.write(f"
{s['studentId']}\t{s['name']}\t{s['gender']}\t{s['className']}\n")print(f"[存档成功] 共存储了 {len(students)} 条记录!")

在 insert 和 delete 末尾,调用 save 函数进行存档。

# 执行存档
save()

3. 实现读档函数

def load():"""读档函数"""# 如果存档文件不存在, 则跳过读档环节if not os.path.exists('d:/record.txt'):return# 先清空全局变量里的数据global studentsstudents = []with open('d:/record.txt', 'r') as f:for line in f:# 去除末尾的换行符line = line.strip()tokens = line.split('\t')if 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)} 条记录!")

在 main 函数开头的地方,调用 load 加载存档。

load()

打包成 exe 程序发布

当前虽然已经实现了一个管理系统,但是 .py 的文件只能在安装了 Python 环境的机器上运行。

为了能够更好的部署到其他主机上,可以借助 pyinstaller 来把 Python 程序打包成 exe 程序。

1. 安装 pyinstaller

pip install pyinstaller

2. 打包程序

  • -F 表示打包成单个 exe (不带动态库)
pyinstall -F 学生管理系统.py

注意:如果提示找不到 pyinstaller 命令,则需要重启一下 PyCharm。

稍等片刻,很快打包完成。

此时就可以把这个程序拷贝给其他机器使用了,无需 Python 环境即可运行。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

RabbitMQ学习笔记(消息发布确认,死信队列,集群,交换机,持久化,生产者、消费者)

一、MQ基本介绍 MQ&#xff08;message queue&#xff09;&#xff1a;本质上是个队列&#xff0c;遵循FIFO原则&#xff0c;队列中存放的是message&#xff0c;是一种跨进程的通信机制&#xff0c;用于上下游传递消息。MQ提供“逻辑解耦物理解耦”的消息通信服务。使用了MQ之…

Ubuntu 22.04 安装Nvidia显卡驱动、CUDA、cudnn

GPU做深度学习比CPU要快很多倍&#xff0c;用Ubuntu跑也有一定的优势&#xff0c;但是安装Nvidia驱动有很多坑 Ubuntu版本&#xff1a;22.04.3 LTS 分区&#xff1a; /boot分配 1G &#xff0c;剩下都分给根目录/ 显卡&#xff1a;GTX 1050 Ti 坑1&#xff1a;用Ubuntu自带的 …

基于SpringBoot的车辆管理系统

目录 前言 一、技术栈 二、系统功能介绍 员工信息管理 证件信息管理 车辆信息管理 事故登记管理 事故登记 保养登记 违章登记 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实…

【小沐学前端】Windows下搭建WordPress(nginx1.25、PHP8.2、WordPress6.3、MySQL5.7)

文章目录 1、简介1.1 Nginx1.2 PHP1.3 WordPress1.4 MySQL 2、下载2.1 Nginx2.2 PHP2.3 WordPress2.4 MySQL 3、搭建环境3.1 Nginx3.2 PHP3.3 WordPress3.4 MySQL 4、配置WordPress4.1 选择语言4.2 配置数据库4.3 登录界面4.4 常规设置4.5 写作操作 结语 1、简介 WordPress是基…

SEO搜索引擎

利用搜索引擎的规则提高网站在有关搜索引擎内的自然排名&#xff0c;吸引更多的用户访问网站&#xff0c;提高网站的访问量&#xff0c;提高网站的销售能力和宣传能力&#xff0c;从而提升网站的品牌效应 搜索引擎优化的技术手段 黑帽SEO 通过欺骗技术和滥用搜索算法来推销毫不…

WebPack-打包工具

从图中我们可以看出&#xff0c;Webpack 可以将多种静态资源 js、css、less 转换成一个静态文件&#xff0c;减少了页面的请求. 下面举个例子 &#xff1a; main.js 我们只命名导出一个变量 export const name"老六"index.js import { name } from "./tset/…

VC6 WIN32,Dialog为主窗口编程

VC6是Microsoft非常经典的开发环境&#xff0c;尤其是Windows API方式开发&#xff0c;自从Quick C for win以来基本保持着同样的风格和API&#xff0c;在它上面做习练很不错。下面是习练完成的界面&#xff0c;它是在自动创建的WIN32 application模板下&#xff0c;增加一个Di…

怎么将Linux上的文件上传到github上

文章目录 1. 先在window浏览器中创建一个存储项目的仓库2. 复制你的ssh下的地址1) 生成ssh密钥 : 在Linux虚拟机的终端中,运行以下命令生成ssh密钥2)将ssh密钥添加到github账号 : 运行以下命令来获取公钥内容:3. 克隆GitHub存储库:在Linux虚拟机的终端中,导航到您想要将文件上…

ESP32设备驱动-I2C-LCD1602显示屏驱动

I2C-LCD1602显示屏驱动 1、LCD1602介绍 LCD1602液晶显示器是广泛使用的一种字符型液晶显示模块。它是由字符型液晶显示屏(LCD)、控制驱动主电路HD44780及其扩展驱动电路HD44100,以及少量电阻、电容元件和结构件等装配在PCB板上而组成。 通过前面的实例我们知道,并口方式…

GPX可视化工具 GPX航迹预览工具

背景 当我们收到别人分享的航迹文档&#xff0c;即gpx文档时&#xff0c;如何快速的进行浏览呢&#xff1f;我们可以使用GIS软件来打开gpx文档并显示gpx中所记录的航迹&#xff0c;例如常用的GIS软件有googleEarth&#xff0c; Basecamp&#xff0c; GPXsee&#xff0c; GPX E…

Net相关的各类开源项目

Net相关的各类开源项目 WPFHandyControlLive-ChartsWPFDeveloperswpf-uidesignStylet WebScheduleMasterYiShaAdminBlog.CoreNebula.AdminNewLife.CubeOpenAuth UnityuGUIUnityCsReferenceEpitomeMyUnityFrameWorkKSFrameworkTowerDefense-GameFramework-Demo 通用ClientServer…

mac电脑任务管理器 Things3 for Mac中文

Things 3是一款效率软件&#xff0c;可以帮助用户规划一天行程、管理项目&#xff0c;并使使用者按部就班地朝目标迈进。以下是Things 3的主要特点和功能&#xff1a; 待办事项&#xff1a;以“待办事项”为基本组成部分&#xff0c;每一则待办事项都是迈向大成就的一小步。用…

C++stackqueue

目录 一、stack 1.1 简要介绍 1.2 小试身手 1.3 模拟实现 二、queue 2.1 简要介绍 2.2 小试身手 2.3 模拟实现 三、deque 3.1 简要介绍 3.2 分析底层 四、priority_queue 4.1 简要介绍 4.2 小试身手 4.3 模拟实现 五、仿函数/函数对象 5.1 简要介绍 一…

优化方法的应用(optimtool.example)

import optimtool as oo from optimtool.base import np, sp, pltpip install optimtool>2.4.2优化方法的应用&#xff08;optimtool.example&#xff09; import optimtool.example as oeLasso问题&#xff08;Lasso&#xff09; oe.Lasso.[函数名]([矩阵A], [矩阵b], [因…

模型训练环境相关(CUDA、PyTorch)

模型训练环境相关&#xff08;CUDA、PyTorch&#xff09; 1. 查看当前 GPU 所能支持的最高版本的 CUDA2. 如何判断是否安装了 CUDA3. 安装 PyTorch3.1 创建虚拟环境3.2 激活并进入虚拟环境3.3 安装 PyTorch 1. 查看当前 GPU 所能支持的最高版本的 CUDA 打开 NVIDIA 控制面板&a…

Android学习之路(20) 进程间通信

IPC IPC为 (Inter-Process Communication) 缩写&#xff0c;称为进程间通信或跨进程通信&#xff0c;指两个进程间进行数据交换的过程。安卓中主要采用 Binder 进行进程间通信&#xff0c;当然也支持其他 IPC 方式&#xff0c;如&#xff1a;管道&#xff0c;Socket&#xff0…

后端面经学习自测(二)

文章目录 1、Http1.1和2.0的区别大概是什么&#xff1f;HTTP & HTTPS 2、HTTP&#xff0c;用户后续的操作&#xff0c;服务端如何知道属于同一个用户cookie & session & token手机验证码登录流程SSO单点登录 3、如果服务端是一个集群机器&#xff1f;4、hashmap是线…

华为云云耀云服务器L实例评测|基于canal缓存自动更新流程 SpringBoot项目应用案例和源码

前言 最近华为云云耀云服务器L实例上新&#xff0c;也搞了一台来玩&#xff0c;期间遇到各种问题&#xff0c;在解决问题的过程中学到不少和运维相关的知识。 在之前的博客中&#xff0c;介绍过canal的安装和配置&#xff0c;参考博客 拉取创建canal镜像配置相关参数 & …

《Jetpack Compose从入门到实战》第一章 全新的 Android UI 框架

书籍源码 Compose官方文档 《Jetpack Compose从入门到实战》第一章 全新的 Android UI 框架 《Jetpack Compose从入门到实战》 第二章 了解常用UI组件 《Jetpack Compose从入门到实战》第三章 定制 UI 视图 《Jetpack Compose从入门到实战》第八章 Compose页面 导航 《Jet…

【Overload游戏引擎分析】画场景网格的Shader

Overload引擎地址&#xff1a; GitHub - adriengivry/Overload: 3D Game engine with editor 一、栅格绘制基本原理 Overload Editor启动之后&#xff0c;场景视图中有栅格线&#xff0c;这个在很多软件中都有。刚开始我猜测它应该是通过绘制线实现的。阅读代码发现&#xff0…