Python使用pyinstaller实现学生管理系统流程

 更新时间:2023年02月01日 10:20:49   作者:HaiFan.  
pyinstaller是一个非常简单的打包python的py文件的库,下面这篇文章主要给大家介绍了关于Python Pyinstaller库安装步骤以及使用方法的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下

前言

功能

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

创建入口函数

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

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('性别输入不符合的内容不符合要求')
        return
    StuClass = input('请输入学生的班级:')
    #使用一个字典把上述信息给聚合起来
    StuDict = {
        'StuId':StuId,
        'StuName':StuName,
        'StuGender':StuGender,
        'StuClass':StuClass
    }
    global StuList
    StuList.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 = 0
    flag = False
    print(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 += 1
            flag = True
    if 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 = True
    if not flag:
        print('没有找到该学生,请重新查找')
        res = input('若不进行删除,则输入1,退出删除程序,输入其他则重新删除学生')
        if res == '1':
           pass
        else:
            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'):
        return
    global StuList
    StuList.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}')
                continue
            StuDict = {
                '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 sys
import 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'):
        return
    global StuList
    StuList.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}')
                continue
            StuDict = {
                '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 choice
def insert():
    StuId = input('请输入学生的学号:')
    StuName = input('请输入学生的姓名:')
    StuGender = input('请输入学生的性别:')
    if StuGender not in ('男','女'):
        print('性别输入不符合的内容不符合要求')
        return
    StuClass = input('请输入学生的班级:')
    #使用一个字典把上述信息给聚合起来
    StuDict = {
        'StuId':StuId,
        'StuName':StuName,
        'StuGender':StuGender,
        'StuClass':StuClass
    }
    global StuList
    StuList.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 = 0
    flag = False
    print(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 += 1
            flag = True
    if 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 = True
    if not flag:
        print('没有找到该学生,请重新查找')
        res = input('若不进行删除,则输入1,退出删除程序,输入其他则重新删除学生')
        if res == '1':
           pass
        else:
            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("输入错误,请重新输入")
            #进入下次循环,让用户重新输入
            continue
main()

到此这篇关于Python使用pyinstaller实现学生管理系统流程的文章就介绍到这了,更多相关Python学生管理系统内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python给视频添加背景音乐并改变音量的具体方法

    python给视频添加背景音乐并改变音量的具体方法

    在本篇文章里小编给大家整理的是关于python给视频添加背景音乐并改变音量的具体方法,需要的朋友们可以参考下。
    2020-07-07
  • python 队列基本定义与使用方法【初始化、赋值、判断等】

    python 队列基本定义与使用方法【初始化、赋值、判断等】

    这篇文章主要介绍了python 队列基本定义与使用方法,结合实例形式分析了Python队列的定义、初始化、赋值、判断等相关操作技巧,需要的朋友可以参考下
    2019-10-10
  • Python面向对象之继承代码详解

    Python面向对象之继承代码详解

    这篇文章主要介绍了Python面向对象之继承代码详解,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • python使用pandas读取json文件并进行刷选导出xlsx文件的方法示例

    python使用pandas读取json文件并进行刷选导出xlsx文件的方法示例

    这篇文章主要介绍了python使用pandas读取json文件并进行刷选导出xlsx文件的方法,结合实例形式分析了python调用pandas模块针对json数据操作的相关使用技巧,需要的朋友可以参考下
    2023-06-06
  • python3字符串输出常见面试题总结

    python3字符串输出常见面试题总结

    在本篇文章里小编给大家整理的是一篇关于python3字符串输出常见面试题总结内容,有需要的朋友们可以参考下。
    2020-12-12
  • 总结python爬虫抓站的实用技巧

    总结python爬虫抓站的实用技巧

    很多人学用python,用得最多的还是各类爬虫脚本:有写过抓代理本机验证的脚本,有写过自动收邮件的脚本,还有写过简单的验证码识别的脚本,那么我们今天就来总结下python爬虫抓站的一些实用技巧。
    2016-08-08
  • Pycharm汉化两种方法(pycharm改为中文版)

    Pycharm汉化两种方法(pycharm改为中文版)

    PyCharm是一款流行的Python开发环境,提供了丰富的功能和工具,使得Python的开发和调试变得更加方便和高效,下面这篇文章主要给大家介绍了Pycharm汉化的两种方法,所谓汉化就是将pycharm改为中文版,需要的朋友可以参考下
    2023-06-06
  • 解决django.db.utils.IntegrityError:(1048, Column last_login cannot be null)

    解决django.db.utils.IntegrityError:(1048, Column las

    这篇文章主要介绍了解决django.db.utils.IntegrityError:(1048, Column last_login cannot be null)问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • Python利用Beautiful Soup模块修改内容方法示例

    Python利用Beautiful Soup模块修改内容方法示例

    Beautiful Soup是一个可以从HTML或XML文件中提取数据的Python 库。它能够通过你喜欢的转换器实现惯用的文档导航、查找、修改文档的方式。他还能够修改HTML/XML文档的内容。这篇文章主要介绍了Python利用Beautiful Soup模块修改内容的方法,需要的朋友可以参考下。
    2017-03-03
  • pytorch中部分矩阵乘法和数组乘法的小结

    pytorch中部分矩阵乘法和数组乘法的小结

    本文主要介绍了pytorch中部分矩阵乘法和数组乘法的小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03

最新评论