欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python使用pyinstaller實(shí)現(xiàn)學(xué)生管理系統(tǒng)流程

 更新時(shí)間:2023年02月01日 10:20:49   作者:HaiFan.  
pyinstaller是一個非常簡單的打包python的py文件的庫,下面這篇文章主要給大家介紹了關(guān)于Python?Pyinstaller庫安裝步驟以及使用方法的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下

前言

功能

  • 新增學(xué)生
  • 顯示學(xué)生
  • 查找學(xué)生
  • 刪除學(xué)生
  • 存到文檔

創(chuàng)建入口函數(shù)

在入口函數(shù)中,可以先打印一個菜單,用菜單來進(jìn)行交互。

def menu():
    print('1.新增學(xué)生')
    print('2.顯示學(xué)生')
    print('3.查找學(xué)生')
    print('4.刪除學(xué)生')
    print('0.退出程序')

光有菜單也不行,因?yàn)檩斎氲臄?shù)字要對應(yīng)菜單上的選項(xiàng)。所以可以在菜單里搞一個輸入和返回值,把輸入的值給返回,用一個變量接收。

def menu():
    print('1.新增學(xué)生')
    print('2.顯示學(xué)生')
    print('3.查找學(xué)生')
    print('4.刪除學(xué)生')
    print('0.退出程序')
    choice = input('請輸入您的選擇:')
    return choice

在根據(jù)菜單里的選項(xiàng)對應(yīng)一下需要實(shí)現(xiàn)的內(nèi)容。

這里可以用if-else-elif語句來完成。

ret = menu()
        if ret == '1':
            #新增學(xué)生
            insert()
        elif ret == '2':
            #顯示學(xué)生
            show()
        elif ret == '3':
            #查找學(xué)生
            find()
        elif ret == '4':
            #刪除學(xué)生
            del()
        elif ret == '0':
            #退出程序
            print('bye bye')
            sys.exit(0)
        else:
            print("輸入錯誤,請重新輸入")

在調(diào)整學(xué)生信息的時(shí)候,肯定需要進(jìn)行多次更改,所以,要把上面的代碼放在循環(huán)里,當(dāng)用戶用完之后,輸入指定的數(shù)字或其他東西,才能退出。輸入錯誤的時(shí)候,要讓用戶重新輸入。

    while True:
        #通過menu函數(shù)來打印除菜單
        ret = menu()
        if ret == '1':
            #新增學(xué)生
            insert()
        elif ret == '2':
            #顯示學(xué)生
            show()
        elif ret == '3':
            #查找學(xué)生
            find()
        elif ret == '4':
            #刪除學(xué)生
            delete()
        elif ret == '0':
            #退出程序
            print('bye bye')
            sys.exit(0)
        else:
            print("輸入錯誤,請重新輸入")
            #進(jìn)入下次循環(huán),讓用戶重新輸入
            continue

這樣,學(xué)生管理系統(tǒng)的大致框架。接下來把對應(yīng)選項(xiàng)的函數(shù)實(shí)現(xiàn)即可。

做完框架的時(shí)候,可以考慮運(yùn)行一下試試。

新增學(xué)生insert

要新增學(xué)生,就要先輸入學(xué)生的基本信息,在這里,可以弄一個全局變量的列表,和一個局部變量的字典,為什么呢?因?yàn)橛米值洌梢园褜W(xué)生的所有信息都存在里面,然后列表的每一個元素都是字典,每一個字典就是一個學(xué)生。

def insert():
    StuId = input('請輸入學(xué)生的學(xué)號:')
    StuName = input('請輸入學(xué)生的姓名:')
    StuGender = input('請輸入學(xué)生的性別:')
    if StuGender not in ('男','女'):
        print('性別輸入不符合的內(nèi)容不符合要求')
        return
    StuClass = input('請輸入學(xué)生的班級:')
    #使用一個字典把上述信息給聚合起來
    StuDict = {
        'StuId':StuId,
        'StuName':StuName,
        'StuGender':StuGender,
        'StuClass':StuClass
    }
    global StuList
    StuList.append(StuDict)
    print('新增學(xué)生完畢')

這里,并不能看出新增的學(xué)生是否在列表里面,下面來實(shí)現(xiàn)show展示學(xué)生的函數(shù)。

展示學(xué)生show

展示學(xué)生只需要把學(xué)生遍歷即可

def show():
    #遍歷全局變量的這個列表,把每個學(xué)生的信息給打印出來。
    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'顯示學(xué)生完畢!共有{len(StuList)}個學(xué)生')

因?yàn)樽兞渴谴嬖趦?nèi)存中的,當(dāng)程序結(jié)束,內(nèi)存中的數(shù)據(jù)便會被銷毀,所以每次運(yùn)行程序都需要重新輸入信息。

為了解決這個問題,一會我會把數(shù)據(jù)存儲在文件里。

查找學(xué)生find

查找學(xué)生的功能,在這里,以名字查找為例。

先輸入學(xué)生的名字,然后開始遍歷全局變量StuList看是否有相匹配的同學(xué),若有:則打印出匹配同學(xué)的信息,若無:則繼續(xù)遍歷,直到遍歷完畢,flag依舊為False,就輸出沒有找到與該姓名相匹配的同學(xué)。

def find():
    name = input('請輸入要查找的同學(xué)的姓名')
    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'沒有找到與該姓名相匹配的同學(xué)')
    print(f'查找到了{(lán)cnt}個匹配的同學(xué)')

刪除學(xué)生delete

根據(jù)姓名刪除學(xué)生與根據(jù)姓名查找學(xué)生類似,先把該學(xué)生的姓名輸入,然后對全局變量進(jìn)行遍歷即可

def delete():
    name = input('請輸入要刪除學(xué)生的姓名')
    flag = False
    #看看這個要函數(shù)學(xué)生的姓名對應(yīng)列表中的哪個元素,把這個元素刪除了就好
    for stu in StuList:
        if name == stu['StuName']:
            StuList.remove(stu)
            flag = True
    if not flag:
        print('沒有找到該學(xué)生,請重新查找')
        res = input('若不進(jìn)行刪除,則輸入1,退出刪除程序,輸入其他則重新刪除學(xué)生')
        if res == '1':
           pass
        else:
            delete()
    #刪除之后學(xué)生的人數(shù)為
    print(f'刪除之后學(xué)生的人數(shù)為{len(StuList)}')

加入存檔讀檔

約定文件放到D:/FileOperator/Stu.txt文件中
并且以行文本的方式來保存學(xué)生信息
學(xué)號\t名字\t性別\t班級
學(xué)號\t名字\t性別\t班級
學(xué)號\t名字\t性別\t班級
每個同學(xué)占一行.
每個同學(xué)的信息之間使用 \t 制表符進(jìn)行分隔

存檔

存檔就是把學(xué)生內(nèi)容,添加到一個文件里,這個操作就是一個遍歷,每次把學(xué)生加入即可。

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'存檔成功,共存儲了{(lán)len(StuList)}個記錄')

但是光有存檔,每次運(yùn)行的時(shí)候,展示學(xué)生,還是沒有之前添加學(xué)生的記錄,這是因?yàn)?,添加的學(xué)生在文件里,沒有寫入讀入內(nèi)存。

讀檔

strip方法可以去掉一個字符串開頭和末尾的空白符

空白符就是空格,換行,回車,制表符等等

os.path.exists這個是用來檢測文件是否存在,以’r‘方式打開文件,若文件不存在,則會拋出異常。

clear是用來清空列表的。

讀檔要先對文件進(jìn)行檢查,看文件是否存在,然后對文件中的內(nèi)容進(jìn)行遍歷,將文件的內(nèi)容寫入到一個字典里,因?yàn)橐粋€字典就是一個列表的里的元素,一個元素就是一個學(xué)生。前面我們說過,文件里的內(nèi)容是用4個\t來分割的,在去除空白符之后,可以用split來拆分字符,拆分之后返回分割后的字符串列表,因?yàn)閷W(xué)生的內(nèi)容只要四個,所以我們可以用一個元素來接收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:
            #針對這一行的數(shù)據(jù),按照\t進(jìn)行切分操作
            #卻分之前,取到文件里的換行
            line = line.strip()
            tokens = line.split('\t')
            if len(tokens) != 4:
                print(f'當(dāng)前行格式有問題! line = {line}')
                continue
            StuDict = {
                'StuId':tokens[0],
                'StuName':tokens[1],
                'StuGender':tokens[2],
                'StuClass':tokens[3]
            }
            StuList.append(StuDict)
    print('讀檔成功')

打包成exe程序發(fā)布

先打開終端,

然后輸入pip install pyinstaller按回車,然后就開始下載了。

在輸入

pyinstaller -F StudentManagementSystem.py StudentManagementSystem.py這個名字我是對這個文件的命名,這個名字是要打包的文件名。

之后就會出來很多東西,不用搭理他,最后會在目錄里出現(xiàn)一個dist文件,點(diǎn)開就是要打包的文件。

點(diǎn)開這個exe文件也可以使用學(xué)生管理系統(tǒng)。

這樣就可以把這個程序拷貝給其他機(jī)器是用來,無需Python環(huán)境即可運(yùn)行

代碼

"""
    學(xué)生管理系統(tǒng)
    珍惜在學(xué)校的時(shí)間。
"""
import sys
import os
#使用這個全局變量,來管理所有學(xué)生的信息
#表的每一個元素都是字典,每一個字典就是一個同學(xué)
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'存檔成功,共存儲了{(lán)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:
            #針對這一行的數(shù)據(jù),按照\t進(jìn)行切分操作
            #卻分之前,取到文件里的換行
            line = line.strip()
            tokens = line.split('\t')
            if len(tokens) != 4:
                print(f'當(dāng)前行格式有問題! line = {line}')
                continue
            StuDict = {
                'StuId':tokens[0],
                'StuName':tokens[1],
                'StuGender':tokens[2],
                'StuClass':tokens[3]
            }
            StuList.append(StuDict)
    print('讀檔成功')
def menu():
    print('1.新增學(xué)生')
    print('2.顯示學(xué)生')
    print('3.查找學(xué)生')
    print('4.刪除學(xué)生')
    print('0.退出程序')
    choice = input('請輸入您的選擇:')
    return choice
def insert():
    StuId = input('請輸入學(xué)生的學(xué)號:')
    StuName = input('請輸入學(xué)生的姓名:')
    StuGender = input('請輸入學(xué)生的性別:')
    if StuGender not in ('男','女'):
        print('性別輸入不符合的內(nèi)容不符合要求')
        return
    StuClass = input('請輸入學(xué)生的班級:')
    #使用一個字典把上述信息給聚合起來
    StuDict = {
        'StuId':StuId,
        'StuName':StuName,
        'StuGender':StuGender,
        'StuClass':StuClass
    }
    global StuList
    StuList.append(StuDict)
    save()
    print('新增學(xué)生完畢')
def show():
    #遍歷全局變量的這個列表,把每個學(xué)生的信息給打印出來。
    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'顯示學(xué)生完畢!共有{len(StuList)}個學(xué)生')
def find():
    name = input('請輸入要查找的同學(xué)的姓名')
    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'沒有找到與該姓名相匹配的同學(xué)')
    print(f'查找到了{(lán)cnt}個匹配的同學(xué)')
def delete():
    name = input('請輸入要刪除學(xué)生的姓名')
    flag = False
    #看看這個要函數(shù)學(xué)生的姓名對應(yīng)列表中的哪個元素,把這個元素刪除了就好
    for stu in StuList:
        if name == stu['StuName']:
            StuList.remove(stu)
            flag = True
    if not flag:
        print('沒有找到該學(xué)生,請重新查找')
        res = input('若不進(jìn)行刪除,則輸入1,退出刪除程序,輸入其他則重新刪除學(xué)生')
        if res == '1':
           pass
        else:
            delete()
    save()
    #刪除之后學(xué)生的人數(shù)為
    print(f'刪除之后學(xué)生的人數(shù)為{len(StuList)}')
def main():
    """
    入口函數(shù)
    """
    #通過控制臺和用戶進(jìn)行交互
    print('----------------------------------------')
    print('|         歡迎來到學(xué)生管理系統(tǒng)             |')
    print('----------------------------------------')
    load()
    while True:
        #通過menu函數(shù)來打印除菜單
        ret = menu()
        if ret == '1':
            #新增學(xué)生
            insert()
        elif ret == '2':
            #顯示學(xué)生
            show()
        elif ret == '3':
            #查找學(xué)生
            find()
        elif ret == '4':
            #刪除學(xué)生
            delete()
        elif ret == '0':
            #退出程序
            print('bye bye')
            sys.exit(0)
        else:
            print("輸入錯誤,請重新輸入")
            #進(jìn)入下次循環(huán),讓用戶重新輸入
            continue
main()

到此這篇關(guān)于Python使用pyinstaller實(shí)現(xiàn)學(xué)生管理系統(tǒng)流程的文章就介紹到這了,更多相關(guān)Python學(xué)生管理系統(tǒng)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • TensorFlow2中提供的幾種處理特征列的方法小結(jié)

    TensorFlow2中提供的幾種處理特征列的方法小結(jié)

    本文主要介紹了TensorFlow2中提供的幾種處理特征列的方法小結(jié),主要介紹了6種方式,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • pandas中關(guān)于nan的處理方式

    pandas中關(guān)于nan的處理方式

    這篇文章主要介紹了pandas中關(guān)于nan的處理方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • Python應(yīng)用之利用pyecharts畫中國地圖

    Python應(yīng)用之利用pyecharts畫中國地圖

    這篇文章主要介紹了Python應(yīng)用之利用pyecharts畫中國地圖,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • 利用python循環(huán)創(chuàng)建多個文件的方法

    利用python循環(huán)創(chuàng)建多個文件的方法

    今天小編就為大家分享一篇利用python循環(huán)創(chuàng)建多個文件的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • Python制作春聯(lián)的示例代碼

    Python制作春聯(lián)的示例代碼

    春聯(lián)是中國傳統(tǒng)文化中最具內(nèi)涵的元素之一,它以對仗工整、簡潔精巧的文字描繪美好形象,抒發(fā)美好愿望,是中國特有的文學(xué)形式,是華人們過年的重要習(xí)俗。本文將通過Python制作春聯(lián),需要的可以參考一下
    2022-01-01
  • Python matplotlib繪制散點(diǎn)圖的實(shí)例代碼

    Python matplotlib繪制散點(diǎn)圖的實(shí)例代碼

    這篇文章主要給大家介紹了關(guān)于Python matplotlib繪制散點(diǎn)圖的相關(guān)資料,所謂散點(diǎn)圖就是反映兩組變量每個數(shù)據(jù)點(diǎn)的值,并且從散點(diǎn)圖可以看出它們之間的相關(guān)性,需要的朋友可以參考下
    2021-06-06
  • 用Python 爬取貓眼電影數(shù)據(jù)分析《無名之輩》

    用Python 爬取貓眼電影數(shù)據(jù)分析《無名之輩》

    這篇文章主要介紹了用Python 爬取貓眼電影數(shù)據(jù)分析《無名之輩》,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • python 安裝庫幾種方法之cmd,anaconda,pycharm詳解

    python 安裝庫幾種方法之cmd,anaconda,pycharm詳解

    在python項(xiàng)目開發(fā)的過程中,需要安裝大大小小的庫,本文會提供幾種安裝庫的方法,通過實(shí)例截圖給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下
    2020-04-04
  • 把pandas轉(zhuǎn)換int型為str型的方法

    把pandas轉(zhuǎn)換int型為str型的方法

    今天小編就為大家分享一篇把pandas轉(zhuǎn)換int型為str型的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • python錯誤調(diào)試及單元文檔測試過程解析

    python錯誤調(diào)試及單元文檔測試過程解析

    這篇文章主要介紹了python錯誤調(diào)試及單元文檔測試過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12

最新評論