python實(shí)現(xiàn)簡(jiǎn)易的學(xué)生信息管理系統(tǒng)
本文實(shí)例為大家分享了python實(shí)現(xiàn)簡(jiǎn)易學(xué)生信息管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
一、系統(tǒng)功能
1.錄入學(xué)生信息
2.查找學(xué)生信息
3.修改學(xué)生信息
4.刪除學(xué)生信息
5.成績(jī)排序
6.統(tǒng)計(jì)學(xué)生總?cè)藬?shù)
7.顯示所有學(xué)生信息
0.退出系統(tǒng)
二、系統(tǒng)開(kāi)發(fā)環(huán)境
1.操作系統(tǒng):win7
2.開(kāi)發(fā)工具:PyCharm
3.Python內(nèi)置模塊:os,re
三、實(shí)現(xiàn)代碼
import os filename='students.txt' def main(): ? ? while True: ? ? ? ? menum() ? ? ? ? choice=int(input('請(qǐng)選擇功能:')) ? ? ? ? if choice in [0,1,2,3,4,5,6,7]: ? ? ? ? ? ? if choice==0: ? ? ? ? ? ? ? ? answer=input('您確定要退出系統(tǒng)嗎?(y/n)') ? ? ? ? ? ? ? ? if answer=='y' or answer=='Y': ? ? ? ? ? ? ? ? ? ? print('感謝您的使用!') ? ? ? ? ? ? ? ? ? ? break #退出while循環(huán)并退出系統(tǒng) ? ? ? ? ? ? ? ? else: ? ? ? ? ? ? ? ? ? ? continue ? ? ? ? ? ? elif choice == 1: ? ? ? ? ? ? ? ? insert() #錄入學(xué)生信息 ? ? ? ? ? ? elif choice == 2: ? ? ? ? ? ? ? ? search() #查找學(xué)生信息 ? ? ? ? ? ? elif choice == 3: ? ? ? ? ? ? ? ? delete() #刪除學(xué)生信息 ? ? ? ? ? ? elif choice == 4: ? ? ? ? ? ? ? ? modify() #修改學(xué)生信息 ? ? ? ? ? ? elif choice == 5: ? ? ? ? ? ? ? ? sort() #成績(jī)排序 ? ? ? ? ? ? elif choice == 6: ? ? ? ? ? ? ? ? total() #統(tǒng)計(jì)學(xué)生總?cè)藬?shù) ? ? ? ? ? ? elif choice == 7: ? ? ? ? ? ? ? ? show() #顯示所有學(xué)生信息 ? def insert(): ? ? student_list=[] #用于存儲(chǔ)學(xué)生信息,列表每個(gè)元素是字典。 ? ? while True: ? ? ? ? id=input('請(qǐng)輸入學(xué)生ID:') ? ? ? ? if not id: ? ? ? ? ? ? break ? ? ? ? name=input('請(qǐng)輸入學(xué)生姓名:') ? ? ? ? if not name: ? ? ? ? ? ? break ? ? ? ? try: ? ? ? ? ? ? Englist=int(input('請(qǐng)輸入英語(yǔ)成績(jī):')) ? ? ? ? ? ? Python=int(input('請(qǐng)輸入Python成績(jī):')) ? ? ? ? ? ? Java=int(input('請(qǐng)輸入Java成績(jī):')) ? ? ? ? except: ? ? ? ? ? ? print('輸入無(wú)效,不是整數(shù)類型,請(qǐng)重新輸入!') ? ? ? ? ? ? continue ? ? ? ? #將錄入的學(xué)生信息保存到字典中 ? ? ? ? student={'id':id,'name':name,'English':Englist,'Python':Python,'Java':Java} ? ? ? ? #將學(xué)生信息添加到列表中 ? ? ? ? student_list.append(student) ? ? ? ? answer=input('是否繼續(xù)添加?(y/n)') ? ? ? ? if answer=='y' or answer=='Y': ? ? ? ? ? ? continue ? ? ? ? else: ? ? ? ? ? ? break ? ? ? #將學(xué)生信息保存在文件中 ? ? save(student_list) ? ? print('學(xué)生信息錄入完畢!') ? ? pass ? def search(): ? ? student_query=[] #用列表存儲(chǔ),防止有同名學(xué)生。 ? ? while True: ? ? ? ? id='' ? ? ? ? name='' ? ? ? ? if os.path.exists(filename): ? ? ? ? ? ? mode=input('按ID查找請(qǐng)輸入1,按姓名查找請(qǐng)輸入2:') ? ? ? ? ? ? if mode == '1': ? ? ? ? ? ? ? ? id=input('請(qǐng)輸入要查找的學(xué)生ID:') ? ? ? ? ? ? elif mode == '2': ? ? ? ? ? ? ? ? name=input('請(qǐng)輸入要查找的學(xué)生姓名:') ? ? ? ? ? ? else: ? ? ? ? ? ? ? ? print('您的輸入有誤,請(qǐng)重新輸入!') ? ? ? ? ? ? ? ? search() ? ? ? ? ? ? with open(filename,'r',encoding='utf-8') as rfile: ? ? ? ? ? ? ? ? student=rfile.readlines() ? ? ? ? ? ? ? ? for item in student: ? ? ? ? ? ? ? ? ? ? d=dict(eval(item)) ? ? ? ? ? ? ? ? ? ? if id!='': ? ? ? ? ? ? ? ? ? ? ? ? if d['id']==id: ? ? ? ? ? ? ? ? ? ? ? ? ? ? student_query.append(d) ? ? ? ? ? ? ? ? ? ? elif name!='': ? ? ? ? ? ? ? ? ? ? ? ? if d['name']==name: ? ? ? ? ? ? ? ? ? ? ? ? ? ? student_query.append(d) ? ? ? ? ? ? #顯示查詢結(jié)果 ? ? ? ? ? ? show_student(student_query) ? ? ? ? ? ? student_query.clear() #清空列表 ? ? ? ? ? ? answer=input('是否要繼續(xù)查詢?(y/n)') ? ? ? ? ? ? if answer=='y' or answer=='Y': ? ? ? ? ? ? ? ? continue ? ? ? ? ? ? else: ? ? ? ? ? ? ? ? break ? ? ? ? else: ? ? ? ? ? ? print('暫未保存學(xué)生信息。') ? ? ? ? ? ? return ? ? pass ? def delete(): ? ? while True: ? ? ? ? student_id=input('請(qǐng)輸入要?jiǎng)h除的學(xué)生ID:') ? ? ? ? if student_id != '': ? ? ? ? ? ? if os.path.exists(filename): #判斷文件是否存在 ? ? ? ? ? ? ? ? with open(filename,'r',encoding='utf-8') as file: ? ? ? ? ? ? ? ? ? ? student_old=file.readlines() #讀取所有學(xué)生信息并保存在列表中 ? ? ? ? ? ? else: ? ? ? ? ? ? ? ? student_old=[] ? ? ? ? ? ? flag=False #用于標(biāo)記是否刪除 ? ? ? ? ? ? if student_old: ? ? ? ? ? ? ? ? with open(filename,'w',encoding='utf-8') as wfile: ? ? ? ? ? ? ? ? ? ? d={} ? ? ? ? ? ? ? ? ? ? for item in student_old: #遍歷學(xué)生信息列表 ? ? ? ? ? ? ? ? ? ? ? ? d=dict(eval(item)) #將字符串轉(zhuǎn)成字典 ? ? ? ? ? ? ? ? ? ? ? ? if d['id']!=student_id: ? ? ? ? ? ? ? ? ? ? ? ? ? ? wfile.write(str(d)+'\n') ? ? ? ? ? ? ? ? ? ? ? ? else: ? ? ? ? ? ? ? ? ? ? ? ? ? ? flag=True ? ? ? ? ? ? ? ? ? ? if flag: ? ? ? ? ? ? ? ? ? ? ? ? print(f'id為{student_id}的學(xué)生信息已被刪除') ? ? ? ? ? ? ? ? ? ? else: ? ? ? ? ? ? ? ? ? ? ? ? print(f'沒(méi)有找到ID為{student_id}的學(xué)生信息') ? ? ? ? ? ? else: ? ? ? ? ? ? ? ? print('無(wú)此學(xué)生信息') ? ? ? ? ? ? ? ? break ? ? ? ? ? ? show() #刪完之后重新顯示所有學(xué)生信息 ? ? ? ? ? ? answer=input('是否繼續(xù)刪除?(y/n)') ? ? ? ? ? ? if answer=='y' or answer=='Y': ? ? ? ? ? ? ? ? continue ? ? ? ? ? ? else: ? ? ? ? ? ? ? ? break ? ? pass ? def modify(): ? ? show() ? ? if os.path.exists(filename): #判斷文件是否存在 ? ? ? ? with open(filename,'r',encoding='utf-8') as rfile: ? ? ? ? ? ? student_old=rfile.readlines() ? ? else: ? ? ? ? return #結(jié)束函數(shù) ? ? student_id=input('請(qǐng)輸入要修改信息的學(xué)生ID:') ? ? with open(filename,'w',encoding='utf-8') as wfile: ? ? ? ? for item in student_old: ? ? ? ? ? ? d=dict(eval(item)) ? ? ? ? ? ? if d['id']==student_id: ? ? ? ? ? ? ? ? print('找到此學(xué)生信息,可以修改。') ? ? ? ? ? ? ? ? while True: ? ? ? ? ? ? ? ? ? ? try: ? ? ? ? ? ? ? ? ? ? ? ? d['name']=input('請(qǐng)輸入學(xué)生姓名:') ? ? ? ? ? ? ? ? ? ? ? ? d['English']=input('請(qǐng)輸入English成績(jī):') ? ? ? ? ? ? ? ? ? ? ? ? d['Python']=input('請(qǐng)輸入Python成績(jī):') ? ? ? ? ? ? ? ? ? ? ? ? d['Java']=input('請(qǐng)輸入Java成績(jī):') ? ? ? ? ? ? ? ? ? ? except: ? ? ? ? ? ? ? ? ? ? ? ? print('您的輸入有誤請(qǐng)重新輸入!') ? ? ? ? ? ? ? ? ? ? else: ? ? ? ? ? ? ? ? ? ? ? ? break ? ? ? ? ? ? ? ? wfile.write(str(d)+'\n') ? ? ? ? ? ? ? ? print('修改成功!') ? ? ? ? ? ? else: ? ? ? ? ? ? ? ? wfile.write(str(d)+'\n') ? ? ? ? answer=input('是否繼續(xù)修改其他學(xué)生信息?(y/n)') ? ? ? ? if answer=='y': ? ? ? ? ? ? modify() ? ? pass ? def sort(): ? ? show() ? ? if os.path.exists(filename): ? ? ? ? with open(filename,'r',encoding='utf-8') as rfile: ? ? ? ? ? ? student_list=rfile.readlines() ? ? ? ? student_new=[] ? ? ? ? for item in student_list: ? ? ? ? ? ? d=dict(eval(item)) ? ? ? ? ? ? student_new.append(d) ? ? else: ? ? ? ? return ? ? asc_or_desc=input('請(qǐng)選擇(0:升序,1:降序):') ? ? if asc_or_desc=='0': ? ? ? ? asc_or_desc_bool=False ? ? elif asc_or_desc=='1': ? ? ? ? asc_or_desc_bool=True ? ? else: ? ? ? ? print('您的輸入有誤,請(qǐng)重新輸入!') ? ? ? ? sort() ? ? mode=input('請(qǐng)選擇排序方式(0:按總成績(jī)排序,1:按English成績(jī)排序,2:按Python成績(jī)排序,3:按Java成績(jī)排序)') ? ? if mode=='0': ? ? ? ? student_new.sort(key=lambda x: int(x['English'])+int(x['Python'])+int(x['Java']), reverse=asc_or_desc_bool) ? ? elif mode=='1': ? ? ? ? student_new.sort(key=lambda x:int(x['English']),reverse=asc_or_desc_bool) ? ? elif mode=='2': ? ? ? ? student_new.sort(key=lambda x: int(x['Python']), reverse=asc_or_desc_bool) ? ? elif mode=='3': ? ? ? ? student_new.sort(key=lambda x: int(x['Java']), reverse=asc_or_desc_bool) ? ? else: ? ? ? ? print('您的輸入有誤,請(qǐng)重新輸入!') ? ? ? ? sort() ? ? show_student(student_new) ? ? pass ? def total(): ? ? if os.path.exists(filename): ? ? ? ? with open(filename,'r',encoding='utf-8') as rfile: ? ? ? ? ? ? students=rfile.readlines() ? ? ? ? ? ? if students: ? ? ? ? ? ? ? ? print(f'一共有{len(students)}名學(xué)生') ? ? ? ? ? ? else: ? ? ? ? ? ? ? ? print('還沒(méi)有錄入學(xué)生信息!') ? ? else: ? ? ? ? print('暫未保存學(xué)生信息......') ? ? pass ? def show(): ? ? student_lst=[] ? ? if os.path.exists(filename): ? ? ? ? with open(filename,'r',encoding='utf-8') as rfile: ? ? ? ? ? ? students=rfile.readlines() ? ? ? ? ? ? for item in students: ? ? ? ? ? ? ? ? student_lst.append(eval(item)) ? ? ? ? ? ? if student_lst: ? ? ? ? ? ? ? ? show_student(student_lst) ? ? else: ? ? ? ? print('暫未保存過(guò)數(shù)據(jù)!') ? ? pass ? def save(stu_list): ? ? try: ? ? ? ? stu_txt=open(filename,'a',encoding='utf=8') ? ? except: ? ? ? ? stu_txt=open(filename,'w',encoding='utf-8') ? ? for item in stu_list: ? ? ? ? stu_txt.write(str(item)+'\n') ? ? stu_txt.close() ? def show_student(lst): ? ? if len(lst)==0: ? ? ? ? print('沒(méi)有查到學(xué)生信息,無(wú)數(shù)據(jù)顯示!') ? ? ? ? return ? ? #定義標(biāo)題顯示格式 ? ? format_title='{:^6}\t{:^12}\t{:^10}\t{:^10}\t{:^10}\t{:^8}' ? ? print(format_title.format('ID','姓名','English成績(jī)','Python成績(jī)','Java成績(jī)','總成績(jī)')) ? ? #定義內(nèi)容顯示格式 ? ? format_data='{:^6}\t{:^12}\t{:^10}\t{:^18}\t{:^14}\t{:^8}' ? ? for item in lst: ? ? ? ? print(format_data.format(item.get('id'),item.get('name'),item.get('English'),item.get('Python'),item.get('Java'),str(int(item.get('English'))+int(item.get('Python'))+int(item.get('Java'))))) ? ? pass ? def menum(): ? ? print('-------------------學(xué)生信息管理系統(tǒng)--------------------') ? ? print('-----------------------功能菜單------------------------') ? ? print(' ? ? ? ? ? ? ? ? ? ?1.錄入學(xué)生信息') ? ? print(' ? ? ? ? ? ? ? ? ? ?2.查找學(xué)生信息') ? ? print(' ? ? ? ? ? ? ? ? ? ?3.刪除學(xué)生信息') ? ? print(' ? ? ? ? ? ? ? ? ? ?4.修改學(xué)生信息') ? ? print(' ? ? ? ? ? ? ? ? ? ?5.成績(jī)排序') ? ? print(' ? ? ? ? ? ? ? ? ? ?6.統(tǒng)計(jì)學(xué)生總?cè)藬?shù)') ? ? print(' ? ? ? ? ? ? ? ? ? ?7.顯示所有學(xué)生信息') ? ? print(' ? ? ? ? ? ? ? ? ? ?0.退出系統(tǒng)') ? ? print('------------------------------------------------------') ? main()
四、項(xiàng)目打包并生成.exe可執(zhí)行文件
1.安裝第三方模塊,打開(kāi)dos窗口,輸入:pip install PyInstaller并回車,
2.輸入:pyinstaller -F 程序文件具體位置,
3.回車后即可在輸出內(nèi)容的倒數(shù)第二行看到.exe文件的位置。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Python實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)的示例代碼
- 基于Python實(shí)現(xiàn)一個(gè)簡(jiǎn)單的學(xué)生管理系統(tǒng)
- 基于Python實(shí)現(xiàn)簡(jiǎn)易學(xué)生信息管理系統(tǒng)
- python代碼實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)
- python超詳細(xì)實(shí)現(xiàn)完整學(xué)生成績(jī)管理系統(tǒng)
- Python實(shí)現(xiàn)簡(jiǎn)單的學(xué)生信息管理系統(tǒng)
- Python實(shí)現(xiàn)學(xué)生管理系統(tǒng)的示例代碼
相關(guān)文章
自己編程中遇到的Python錯(cuò)誤和解決方法匯總整理
這篇文章主要介紹了自己編程中遇到的Python錯(cuò)誤和解決方法匯總整理,本文收集整理了較多的案例,需要的朋友可以參考下2015-06-06Python+Matplotlib繪制發(fā)散條形圖的示例代碼
發(fā)散條形圖(Diverging Bar)是一種用于顯示數(shù)據(jù)分布的圖表,可以幫助我們比較不同類別或分組的數(shù)據(jù)的差異和相對(duì)性,本文介紹了Matplotlib繪制發(fā)散條形圖的函數(shù)源碼,需要的可以參考一下2023-06-06Python實(shí)現(xiàn)的插入排序算法原理與用法實(shí)例分析
這篇文章主要介紹了Python實(shí)現(xiàn)的插入排序算法原理與用法,簡(jiǎn)單描述了插入排序的原理,并結(jié)合實(shí)例形式分析了Python實(shí)現(xiàn)插入排序的相關(guān)操作技巧,需要的朋友可以參考下2017-11-11Python中判斷subprocess調(diào)起的shell命令是否結(jié)束
這篇文章主要介紹了Python中判斷subprocess調(diào)起的shell命令是否結(jié)束的方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-04-04Django使用httpresponse返回用戶頭像實(shí)例代碼
這篇文章主要介紹了Django使用httpresponse返回用戶頭像實(shí)例代碼2018-01-01django搭建項(xiàng)目配置環(huán)境和創(chuàng)建表過(guò)程詳解
這篇文章主要介紹了django搭建項(xiàng)目配置環(huán)境和創(chuàng)建表過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07利用 Python 實(shí)現(xiàn)多任務(wù)進(jìn)程
這篇文章主要介紹如何利用 Python 實(shí)現(xiàn)多任務(wù)進(jìn)程,正在執(zhí)行的程序,由程序、數(shù)據(jù)和進(jìn)程控制塊組成,是正在執(zhí)行的程序,程序的一次執(zhí)行過(guò)程,是資源調(diào)度的基本單位。下面就來(lái)詳細(xì)介紹改內(nèi)容,需要的朋友可以參考一下2021-10-10詳解用Python進(jìn)行時(shí)間序列預(yù)測(cè)的7種方法
這篇文章主要介紹了詳解用Python進(jìn)行時(shí)間序列預(yù)測(cè)的7種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03