Python---学生管理系统(pyinstaller)
创始人
2024-05-19 00:17:44
0

专栏:python
个人主页:HaiFan.
专栏简介:本专栏主要更新一些python的基础知识,也会实现一些小游戏和通讯录,学时管理系统之类的,有兴趣的朋友可以关注一下。

学生管理系统

  • 前言
  • 创建入口函数
  • 新增学生insert
  • 展示学生show
  • 查找学生find
  • 删除学生delete
  • 加入存档读档
    • 存档
    • 读档
  • 打包成exe程序发布
  • 代码


前言

功能

  1. 新增学生
  2. 显示学生
  3. 查找学生
  4. 删除学生
  5. 存到文档

在这里插入图片描述


创建入口函数

在入口函数中,可以先打印一个菜单,用菜单来进行交互。

def menu():print('1.新增学生')print('2.显示学生')print('3.查找学生')print('4.删除学生')print('0.退出程序')

光有菜单也不行,因为输入的数字要对应菜单上的选项。所以可以在菜单里搞一个输入和返回值,把输入的值给返回,用一个变量接收。

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

在根据菜单里的选项对应一下需要实现的内容。
这里可以用if-else-elif语句来完成。

ret = menu()if ret == '1':#新增学生insert()elif ret == '2':#显示学生show()elif ret == '3':#查找学生find()elif ret == '4':#删除学生del()elif ret == '0':#退出程序print('bye bye')sys.exit(0)else:print("输入错误,请重新输入")

在调整学生信息的时候,肯定需要进行多次更改,所以,要把上面的代码放在循环里,当用户用完之后,输入指定的数字或其他东西,才能退出。输入错误的时候,要让用户重新输入。

    while True:#通过menu函数来打印除菜单ret = menu()if ret == '1':#新增学生insert()elif ret == '2':#显示学生show()elif ret == '3':#查找学生find()elif ret == '4':#删除学生delete()elif ret == '0':#退出程序print('bye bye')sys.exit(0)else:print("输入错误,请重新输入")#进入下次循环,让用户重新输入continue

这样,学生管理系统的大致框架。接下来把对应选项的函数实现即可。

在这里插入图片描述
做完框架的时候,可以考虑运行一下试试。

新增学生insert

要新增学生,就要先输入学生的基本信息,在这里,可以弄一个全局变量的列表,和一个局部变量的字典,为什么呢?因为用字典,可以把学生的所有信息都存在里面,然后列表的每一个元素都是字典,每一个字典就是一个学生。

def insert():StuId = input('请输入学生的学号:')StuName = input('请输入学生的姓名:')StuGender = input('请输入学生的性别:')if StuGender not in ('男','女'):print('性别输入不符合的内容不符合要求')returnStuClass = input('请输入学生的班级:')#使用一个字典把上述信息给聚合起来StuDict = {'StuId':StuId,'StuName':StuName,'StuGender':StuGender,'StuClass':StuClass}global StuListStuList.append(StuDict)print('新增学生完毕')

在这里插入图片描述
这里,并不能看出新增的学生是否在列表里面,下面来实现show展示学生的函数。

展示学生show

展示学生只需要把学生遍历即可

def show():#遍历全局变量的这个列表,把每个学生的信息给打印出来。print(f'[{["StuId"]}]\t{["StuName"]}\t{["StuGender"]}\t{["StuClass"]}')for stu in StuList:print(f'[{stu["StuId"]}]\t\t\t{stu["StuName"]}\t\t\t{stu["StuGender"]}\t\t\t\t{stu["StuClass"]}')print(f'显示学生完毕!共有{len(StuList)}个学生')

因为变量是存在内存中的,当程序结束,内存中的数据便会被销毁,所以每次运行程序都需要重新输入信息。
为了解决这个问题,一会我会把数据存储在文件里。

在这里插入图片描述

查找学生find

查找学生的功能,在这里,以名字查找为例。
先输入学生的名字,然后开始遍历全局变量StuList看是否有相匹配的同学,若有:则打印出匹配同学的信息,若无:则继续遍历,直到遍历完毕,flag依旧为False,就输出没有找到与该姓名相匹配的同学。

def find():name = input('请输入要查找的同学的姓名')cnt = 0flag = Falseprint(f'[{["StuId"]}]\t{["StuName"]}\t{["StuGender"]}\t{["StuClass"]}')for stu in StuList:if name == stu['StuName']:print(f'[{stu["StuId"]}]\t\t\t{stu["StuName"]}\t\t\t{stu["StuGender"]}\t\t\t\t{stu["StuClass"]}')cnt += 1flag = Trueif not flag:print(f'没有找到与该姓名相匹配的同学')print(f'查找到了{cnt}个匹配的同学')

在这里插入图片描述

删除学生delete

根据姓名删除学生与根据姓名查找学生类似,先把该学生的姓名输入,然后对全局变量进行遍历即可

def delete():name = input('请输入要删除学生的姓名')flag = False#看看这个要函数学生的姓名对应列表中的哪个元素,把这个元素删除了就好for stu in StuList:if name == stu['StuName']:StuList.remove(stu)flag = Trueif not flag:print('没有找到该学生,请重新查找')res = input('若不进行删除,则输入1,退出删除程序,输入其他则重新删除学生')if res == '1':passelse:delete()#删除之后学生的人数为print(f'删除之后学生的人数为{len(StuList)}')

在这里插入图片描述

加入存档读档

约定文件放到D:/FileOperator/Stu.txt文件中
并且以行文本的方式来保存学生信息
学号\t名字\t性别\t班级
学号\t名字\t性别\t班级
学号\t名字\t性别\t班级
每个同学占一行.
每个同学的信息之间使用 \t 制表符进行分隔

存档

存档就是把学生内容,添加到一个文件里,这个操作就是一个遍历,每次把学生加入即可。

def save():"""用于存档"""with open('d:/FileOperator/Stu.txt','w',encoding = 'UTF8') as f:for s in StuList:f.write(f"{s['StuId']}\t{s['StuName']}\t{s['StuGender']}\t{s['StuClass']}\n")print(f'存档成功,共存储了{len(StuList)}个记录')

在这里插入图片描述
但是光有存档,每次运行的时候,展示学生,还是没有之前添加学生的记录,这是因为,添加的学生在文件里,没有写入读入内存。

读档

strip方法可以去掉一个字符串开头和末尾的空白符
空白符就是空格,换行,回车,制表符等等

os.path.exists这个是用来检测文件是否存在,以’r‘方式打开文件,若文件不存在,则会抛出异常。
clear是用来清空列表的。

读档要先对文件进行检查,看文件是否存在,然后对文件中的内容进行遍历,将文件的内容写入到一个字典里,因为一个字典就是一个列表的里的元素,一个元素就是一个学生。前面我们说过,文件里的内容是用4个\t来分割的,在去除空白符之后,可以用split来拆分字符,拆分之后返回分割后的字符串列表,因为学生的内容只要四个,所以我们可以用一个元素来接收split的返回值,并判断该元素是否有4个,对此做出是否异常判断。

def load():"""读档"""# 若文件不存在,则直接跳过读档流程#为了避免读方式打开文件,文件不存在造成的抛出异常if not os.path.exists('d:/FileOperator/Stu.txt'):returnglobal StuListStuList.clear()with open('d:/FileOperator/Stu.txt','r',encoding = 'UTF8') as f:for line in f:#针对这一行的数据,按照\t进行切分操作#却分之前,取到文件里的换行line = line.strip()tokens = line.split('\t')if len(tokens) != 4:print(f'当前行格式有问题! line = {line}')continueStuDict = {'StuId':tokens[0],'StuName':tokens[1],'StuGender':tokens[2],'StuClass':tokens[3]}StuList.append(StuDict)print('读档成功')

在这里插入图片描述
在这里插入图片描述

打包成exe程序发布

先打开终端,

在这里插入图片描述
然后输入pip install pyinstaller按回车,然后就开始下载了。
在输入
pyinstaller -F StudentManagementSystem.py StudentManagementSystem.py这个名字我是对这个文件的命名,这个名字是要打包的文件名。

在这里插入图片描述

之后就会出来很多东西,不用搭理他,最后会在目录里出现一个dist文件,点开就是要打包的文件。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
点开这个exe文件也可以使用学生管理系统。

这样就可以把这个程序拷贝给其他机器是用来,无需Python环境即可运行

代码

"""学生管理系统珍惜在学校的时间。
"""import sysimport os#使用这个全局变量,来管理所有学生的信息
#表的每一个元素都是字典,每一个字典就是一个同学
StuList = []def save():"""用于存档"""with open('d:/FileOperator/Stu.txt','w',encoding = 'UTF8') as f:for s in StuList:f.write(f"{s['StuId']}\t{s['StuName']}\t{s['StuGender']}\t{s['StuClass']}\n")print(f'存档成功,共存储了{len(StuList)}个记录')def load():"""读档"""# 若文件不存在,则直接跳过读档流程#为了避免读方式打开文件,文件不存在造成的抛出异常if not os.path.exists('d:/FileOperator/Stu.txt'):returnglobal StuListStuList.clear()with open('d:/FileOperator/Stu.txt','r',encoding = 'UTF8') as f:for line in f:#针对这一行的数据,按照\t进行切分操作#却分之前,取到文件里的换行line = line.strip()tokens = line.split('\t')if len(tokens) != 4:print(f'当前行格式有问题! line = {line}')continueStuDict = {'StuId':tokens[0],'StuName':tokens[1],'StuGender':tokens[2],'StuClass':tokens[3]}StuList.append(StuDict)print('读档成功')def menu():print('1.新增学生')print('2.显示学生')print('3.查找学生')print('4.删除学生')print('0.退出程序')choice = input('请输入您的选择:')return choicedef insert():StuId = input('请输入学生的学号:')StuName = input('请输入学生的姓名:')StuGender = input('请输入学生的性别:')if StuGender not in ('男','女'):print('性别输入不符合的内容不符合要求')returnStuClass = input('请输入学生的班级:')#使用一个字典把上述信息给聚合起来StuDict = {'StuId':StuId,'StuName':StuName,'StuGender':StuGender,'StuClass':StuClass}global StuListStuList.append(StuDict)save()print('新增学生完毕')def show():#遍历全局变量的这个列表,把每个学生的信息给打印出来。print(f'[{["StuId"]}]\t{["StuName"]}\t{["StuGender"]}\t{["StuClass"]}')for stu in StuList:print(f'[{stu["StuId"]}]\t\t\t{stu["StuName"]}\t\t\t{stu["StuGender"]}\t\t\t\t{stu["StuClass"]}')print(f'显示学生完毕!共有{len(StuList)}个学生')def find():name = input('请输入要查找的同学的姓名')cnt = 0flag = Falseprint(f'[{["StuId"]}]\t{["StuName"]}\t{["StuGender"]}\t{["StuClass"]}')for stu in StuList:if name == stu['StuName']:print(f'[{stu["StuId"]}]\t\t\t{stu["StuName"]}\t\t\t{stu["StuGender"]}\t\t\t\t{stu["StuClass"]}')cnt += 1flag = Trueif not flag:print(f'没有找到与该姓名相匹配的同学')print(f'查找到了{cnt}个匹配的同学')def delete():name = input('请输入要删除学生的姓名')flag = False#看看这个要函数学生的姓名对应列表中的哪个元素,把这个元素删除了就好for stu in StuList:if name == stu['StuName']:StuList.remove(stu)flag = Trueif not flag:print('没有找到该学生,请重新查找')res = input('若不进行删除,则输入1,退出删除程序,输入其他则重新删除学生')if res == '1':passelse:delete()save()#删除之后学生的人数为print(f'删除之后学生的人数为{len(StuList)}')def main():"""入口函数"""#通过控制台和用户进行交互print('----------------------------------------')print('|         欢迎来到学生管理系统             |')print('----------------------------------------')load()while True:#通过menu函数来打印除菜单ret = menu()if ret == '1':#新增学生insert()elif ret == '2':#显示学生show()elif ret == '3':#查找学生find()elif ret == '4':#删除学生delete()elif ret == '0':#退出程序print('bye bye')sys.exit(0)else:print("输入错误,请重新输入")#进入下次循环,让用户重新输入continuemain()

相关内容

热门资讯

山西芮城永乐宫导游词 山西芮城永乐宫导游词  作为一位杰出的导游,往往需要进行导游词编写工作,导游词是导游员进行实地口语导...
杭州雷峰塔经典导游词 杭州雷峰塔经典导游词范文(精选3篇)  作为一位无私奉献的导游,时常要开展导游词准备工作,导游词由引...
兵马俑介绍导游词 兵马俑介绍导游词(通用17篇)  作为一名尽职尽责的导游,总归要编写导游词,借助导游词可以更好地宣传...
皇城相府的导游词 皇城相府的导游词  皇城相府导游词(一)女士们、先生们:  皇城相府位于山西省阳城县城东15公里的北...
三峡导游词 三峡导游词(15篇)  作为一名旅游从业人员,常常要根据讲解需要编写导游词,导游词一般是根据实际的游...
介绍乌镇的英文导游词 介绍乌镇的英文导游词  Wuzhen lies in the far north-east of Z...
武当山古建筑群导游词 武当山古建筑群导游词(通用5篇)  作为一名乐于助人的导游,就不得不需要编写导游词,导游词是导游人员...
宝鸡红河谷导游词 宝鸡红河谷导游词  作为一名具备丰富知识的导游,时常要开展导游词准备工作,一篇完整的导游词,其结构一...
安徽导游词 安徽导游词15篇  作为一名专门为游客提供帮助的导游,就难以避免地要准备导游词,导游词是导游员在游览...
介绍长沙岳麓书院的导游词 介绍长沙岳麓书院的导游词  岳麓书院是古代汉族书院建筑,属于中国历史上著名的四大书院之一,介绍长沙岳...
茅台镇导游词 茅台镇导游词  作为一名优秀的导游,时常要开展导游词准备工作,导游词作为一种解说的文体,它的作用是帮...
安徽池州杏花村导游词 安徽池州杏花村导游词  导语:池州秀山门外的杏花村,原只不过是几间“沦为荒烟野草之中”的茅舍酒肆,毫...
成吉思汗庙导游词 成吉思汗庙导游词  导游词是导游人员引导游客观光游览时的讲解词,是导游员同游客交流思想,向游客传播文...
茂陵导游词介绍 茂陵导游词范文介绍  作为一名导游,编写导游词是必不可少的,导游词可以帮助旅游者欣赏景观,以达到游览...
鲁迅故居导游词 鲁迅故居导游词(精选6篇)  作为一名优秀的导游,时常会需要准备好导游词,导游词具有极强的实用性,涉...
丹东断桥导游词 丹东断桥导游词  作为一位兢兢业业的旅游从业人员,总不可避免地需要编写导游词,导游词由引言、主体和结...
北京八达岭长城的导游词 北京八达岭长城的导游词(通用5篇)  作为一名乐于为游客排忧解难的导游,总不可避免地需要编写导游词,...
大龙湫景区的导游词 大龙湫景区的导游词  导语:大龙湫景区西邻雁湖景区,东接灵岩景区,是雁荡山的精华景区之一。大龙湫与灵...
山西大同悬空寺导游词   引导语:悬空寺,是佛道儒三教合一的奇特寺庙,今天小编为大家整理了三篇关于悬空寺的导游词。 ...
正定隆兴寺导游词 正定隆兴寺导游词  导语:隆兴寺,别名大佛寺,位于河北省石家庄市正定县城东门里街,原是东晋十六国时期...