python基础(16):学生信息管理系统——Python编写(附全部代码)
?作者簡介:大家好我是Xlong,一枚正在學習COMSOL、Python的工科研究僧
📃個人主頁: Xlong的個人博客主頁
🔥系列專欄:Python學習
💖如果覺得博主的文章還不錯的話,請👍支持一下博主哦🤞
目錄
一、需求分析
二、系統分析
三、系統開發必備
四、主函數設計
五、學生信息維護模塊設計
六、查詢/統計模塊設計
七、排序模塊設計
八、項目打包
九、代碼
一、需求分析
1.學生管理系統應具備的功能:
(1)添加學生及成績信息
(2)將學生信息保存到文件中
(3)修改和刪除學生信息
(4)查詢學生信息
(5)根據學生成績進行排序
(6)統計學生的總分
二、系統分析
1.系統功能結構:學生信息管理系統的7大模塊
(1)錄入學生信息模塊
(2)查找學生信息模塊
(3)刪除學生信息模塊
(4)修改學生信息模塊
(5)學生成績排名模塊
(6)統計學生總人數模塊
(7)顯示全部學生信息模塊
2.系統業務流程:
三、系統開發必備
1.系統開發環境:
(1)操作系統:win10
(2)Python解釋器版本:Python3.9.10
(3)開發工具:Pycharm
(4)Python內置模塊:os,re
四、主函數設計
?1.實現主函數 :
五、學生信息維護模塊設計
1.實現錄入學生信息功能
?2.具體實現:
(1)save(student)函數,用于將學生信息保存到文件
(2)insert()函數,用于錄入學生信息
3.刪除學生信息功能:業務流程
?4.修改學生信息功能:業務流程
?5.查找學生信息功能:業務流程
六、查詢/統計模塊設計
1.統計學生總人數功能:業務流程
2.顯示所有學生信息功能:業務流程
七、排序模塊設計
八、項目打包
1.安裝第三方模塊:
(1)在線安裝方式;pip install Pylnstaller
(2)執行打包操作:C:\Users\jjlu>pyinstaller -F E:\軟件相關\Python\vippython\chap16\stusyste.py
最后打包的exe路徑在C:\Users\jjlu\dist
九、代碼
import os.path #導入os.path模塊def menm(): #菜單print('==========================學生信息管理系統==========================')print('------------------------------功能菜單-----------------------------')print('\t\t\t 1.錄入學生信息')print('\t\t\t 2.查找學生信息')print('\t\t\t 3.刪除學生信息')print('\t\t\t 4.修改學生信息')print('\t\t\t 5.排序')print('\t\t\t 6.統計學生總人數')print('\t\t\t 7.顯示所有學生信息')print('\t\t\t 0.退出系統')print('-------------------------------------------------------------------')filename = 'student.txt'# 文件名def main(): #主程序while True:menm() #調用菜單函數choice = int(input('請選擇'))if choice in [0,1,2,3,4,5,6,7]:if choice == 0:answer = input('您確定要退出系統嗎?y/n')if answer == 'y' or answer == 'Y':print('謝謝您的使用!!!')break #退出系統else:continueelif choice == 1:insert() #錄入學生信息elif choice == 2:search() #查找學生信息elif choice == 3:delete() #刪除學生信息elif choice == 4:modify() #修改學生信息elif choice == 5:sort() #排序elif choice == 6:total() #統計學生總人數elif choice == 7:show() #顯示所有學生信息def insert():# 插入信息student_list = []while True: # 循環輸入id = input('請輸入ID(如1001):')if not id:# 防止手滑breakname = input('請輸入姓名:')if not name:breaktry:english = int(input('請輸入英語成績:'))python = int(input('請輸入python成績:'))java = int(input('請輸入Java成績:'))except:print('輸入無效,不是整數類型,請重新輸入')continue#將錄入的學生信息保存到字典當中student ={'id':id,'name':name,'english':english,'python':python,'java':java}#將學生信息添加到列表中student_list.append(student)answer = input('是否繼續添加?y/n\n')if answer == 'y':continueelse:break#調用save()函數save(student_list)print('學生信息錄入完畢!!!')def save(lst):# 保存try:stu_txt = open(filename,'a',encoding='utf-8')except:stu_txt = open(filename,'w',encoding='utf-8')for item in lst:stu_txt.write(str(item)+'\n')# 將內容寫入文件中def search(): # 搜索student_query = []while True:id = ''name = ''if os.path.exists(filename): # 如果可以打開文件mode = input('按ID查找請輸入1,按姓名查找請輸入2:')if mode =='1':id = input('請輸入要查詢的學生ID:')elif mode =='2':name = input('請輸入學生姓名:')else:print('您的輸入有誤,請重新輸入')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)#顯示查詢結果show_student(student_query)#清空列表student_query.clear()answer = input('是否要繼續查詢?y/n\n')if answer =='y':continueelse:breakelse:print('暫未保存學生信息')return def show_student(lst):if len(lst)==0:print('沒有查詢到學生信息,無數據顯示!!!')return#定義標題顯示格式format_title='{:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^8}'print(format_title.format('ID','姓名','英語成績','python成績','java成績','總成績'))#定義內容的顯示格式format_data ='{:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^10}\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'),int(item.get('english'))+int(item.get('python'))+int(item.get('java')))) def delete():while True:student_id = input('請輸入要刪除的學生的ID:')if student_id != '':if os.path.exists(filename):with open(filename,'r',encoding='utf-8')as file:student_old = file.readlines()else:student_old = []flag = False #標記是否刪除if student_old:with open(filename,'w',encoding='utf-8')as wfile:d = {}for item in student_old:d = dict(eval(item)) #將字符串轉成字典if d['id'] != student_id:wfile.write(str(d)+'\n')else:flag = Trueif flag:print(f'id為{student_id}的學生信息已被刪除')else:print(f'沒有找到ID為{student_id}的學生信息')else:print('無學生信息')breakshow() #刪除之后要重新顯示所有學生信息answer = input('是否繼續刪除?y/n\n')if answer == 'y':continueelse:break def modify():show()if os.path.exists(filename):with open(filename,'r',encoding='utf-8')as rfile:student_old = rfile.readlines()else:returnstudent_id = input('請輸入要修改的學員的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('找到學生信息,可以修改他的相關信息了!')while True:try:d['name'] = input('請輸入姓名:')d['english'] = input('請輸入英語成績:')d['python'] = input('請輸入Python成績:')d['java'] = input('請輸入java成績:')except:print('您的輸入有誤,請重新輸入!!!')else:breakwfile.write(str(d)+'\n')print('修改成功!!!')else:wfile.write(str(d)+'\n')answer = input('是否繼續修改其他學生信息呢?y/n\n')if answer == 'y':modify()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:returnasc_or_desc = input('請選擇(0.升序 1.降序:)')if asc_or_desc =='0':asc_or_desc_bool =Falseelif asc_or_desc =='1':asc_or_desc_bool =Trueelse:print('您的輸入有誤,請重新輸入')sort()mode = input('請選擇排序方式(1.按英語成績排序 2.按python成績排序 3.按java成績排序 0.按總成績排序):')if 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)elif mode == '0':student_new.sort(key=lambda x:int(x['english'])+int(x['python'])+int(x['java']),reverse=asc_or_desc_bool)else:print('您的輸入有誤,請重新輸入!!!')sort()show_student(student_new)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)}名學生')else:print('還未錄入學生信息')else:print('暫未保存數據信息......') 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('暫未保存過數據!!!')if __name__ == '__main__':main()持續更新中......
原創不易,各位看官請隨手點個贊和關注哦,感謝!!!
總結
以上是生活随笔為你收集整理的python基础(16):学生信息管理系统——Python编写(附全部代码)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 刚安装3dsmax2020无法保存文件或
- 下一篇: 【OpenCV入门教程之二】 一览众山小