第一次用寫博客,從前一直在博客園上學習,現在也來這里分享一下我的學習成果,
就開門見山的說吧,首先做了一個流程圖,可能也不符合啥規范,就當草稿用,將就著看,明白個設計思路就行,

1.首先系統初始化,定義時間戳A,定義一些變數,再設定一個默認賬戶,這里賬戶用字典的形式表示,
1 import time 2 #設定起始時間戳 3 start = time.perf_counter() 4 #學生資訊總類"次數":listtime = lt 5 lt = 3 6 #學生人數為:sum 7 sum = 0 8 #回圈介質置零:i 9 i = 0 10 #默認賬戶 11 defaultuser = {'name':'admin', 'passwd':'passwd'}
2.然后讀入默認學生資訊default檔案,定義一眾函式,
1 #檢索現有的學生內容: 2 try: 3 file=open('default.txt',"r", encoding = 'utf-8') 4 except FileNotFoundError: 5 print("The Student Managerment Is Empty Now") 6 else: 7 contents=file.readlines() 8 #將默認學生資訊匯入至學生串列: 9 student = [] 10 for content in contents: 11 student.append(content[3:-1]) 12 tempsum = int(len(student)/lt) 13 #用戶登錄代碼 14 def login(shutdown): 15 with open("users.txt", 'r+', encoding='utf-8') as f: 16 getinformation = f.readlines() 17 tempuserslist = [] 18 for count in range(3): 19 name = input('請輸入用戶名: ') 20 password = input('請輸入密碼: ') 21 for getit in getinformation: 22 tempuserslist.append(getit) 23 for gettemplistline in tempuserslist: 24 users = eval(gettemplistline) 25 if (name == users['name'] and password == users['passwd']) or (name == defaultuser['name'] and password == defaultuser['passwd']): 26 print( '登錄成功!') 27 shutdown = 1 28 return shutdown 29 if (not(name == users['name'] and password == users['passwd']) or (name == defaultuser['name'] and password == defaultuser['passwd'])): 30 lost = 2 - count 31 if count < 2: 32 print('用戶名或密碼錯誤,還有{:}次機會'.format(lost)) 33 else: 34 alertexit = '輸入錯誤次數過多,程式終止' 35 print(alertexit) 36 shutdown = 0 37 return shutdown 38 f.close() 39 #選擇輸出文本代碼 40 def chooseoutput (name, tempcondition): 41 for i in range(lt * sum): 42 if tempcondition in student[i]: 43 with open (name, "a+", encoding = 'utf-8') as f: 44 p = ('姓名:' + student[i - 1] + "\n" + '性別:' + student[i] + "\n" + '學號:' + student[i + 1]) 45 f.writelines(p + "\n") 46 pass 47 f.close() 48 #全輸出文本代碼 49 def alloutput(name): 50 with open (name, "a+", encoding = 'utf-8') as f: 51 for i in range(len(student)): 52 if i % lt == 0: 53 p = ('姓名:' + student[i] + "\n" + '性別:' + student[i + 1] + "\n" + '學號:' + student[i + 2]) 54 f.writelines(p + "\n") 55 pass 56 else: 57 continue 58 f.close() 59 #清空文本代碼 60 def coveroutput(): 61 with open ('default.txt', "a+", encoding = 'utf-8') as f: 62 f.seek(0) 63 f.truncate() 64 pass 65 f.close()
3.在進度條代碼中設定時間戳B
1 #進度條代碼: 2 scale = 50 3 print('加載中'.center(scale//2, '-')) 4 for i in range(scale+1): 5 a = '*' * i 6 b = '.' * (scale - i) 7 c = (i/scale)*100 8 dur = time.perf_counter() - start 9 print('\r{:^3.0f}%[{}->{}]{:.2f}s'.format(c,a,b,dur),end='') 10 time.sleep(0.1) 11 print('\n'+'加載完成'.center(scale//2,'-'))
4.由用戶選擇注冊或登錄,注冊后強制登錄,由于用戶登錄要用兩遍起,所以登錄代碼放在了上面函式里了,而且因為登錄代碼的for回圈嵌套的多,所以登陸失敗過多無法單純地用break退出系統,所以在登錄函式中設定了一個shutdown引數,用來退出系統,
1 #首頁: 2 print('1.注冊', '2.登錄') 3 choosefirst = input('請選擇:') 4 #用戶注冊 5 if choosefirst == '1': 6 with open("users.txt", 'r+', encoding='utf-8') as f: 7 information = f.readlines() 8 for it in information: 9 it = it.strip() 10 users = eval(it) 11 for i in range(4): 12 name = input('請輸入用戶名:') 13 passwd = input('請輸入密碼:') 14 again_passwd = input('請再次輸入密碼:') 15 if len(name.strip()) != 0 and name != users['name'] and len(passwd.strip()) != 0 and passwd == again_passwd: 16 users = {'name': name, 'passwd': passwd} 17 f.writelines(str(users) + '\n') 18 print('恭喜,注冊成功') 19 f.close() 20 break 21 elif len(name.strip()) == 0: 22 print('用戶名不能為空,請重新輸入,還可輸入%d次' %(3-i)) 23 elif name == users['name']: 24 print('用戶名重復,請重新輸入,還可輸入%d次' %(3-i)) 25 elif len(passwd.strip()) == 0: 26 print('密碼不能為空,請重新輸入,還可輸入%d次' %(3-i)) 27 elif again_passwd != passwd: 28 print('兩次輸入的密碼不一致,請重新輸入,還可輸入%d次' %(3-i)) 29 shutdown = login(1) #注冊之后強制登錄 30 #用戶登錄 31 elif choosefirst == '2': 32 shutdown = login(1)
5.下面就是主選單用戶可以選擇地各種功能了:初始錄入、增添學生、洗掉學生、更改資訊、篩選學生、輸出所有學生資訊、退出系統、查詢版本,
1 #選單頁: 2 while(1): 3 if shutdown == 0: 4 break 5 line1 = ['學生管理系統'] 6 print(line1) 7 line2 = ['0.初始錄入' , '1.增添學生' , '2.洗掉學生 ', '3.更改資訊 ', '4.篩選學生 ', '5.輸出所有學生資訊', '6.退出系統', '7.查詢版本'] 8 print(line2) 9 #用戶選擇代碼 10 choose = input( '請選擇你需要的功能:') 11 #0.初始學生錄入代碼 12 if choose == '0': 13 alert0 = input( '選擇初始錄入會清空現有學生資料,你是否要繼續:') 14 if alert0 == '是': 15 tempsum = 0 16 student = [] 17 sum = int( input( '請輸入學生人數:')) 18 for i in range(sum): 19 name=input('請輸入姓名:') 20 student.append(name) 21 sex=input('請輸入性別:') 22 student.append(sex) 23 stuid=input('請輸入學號:') 24 student.append(stuid) 25 if len(student) == lt * sum: 26 print('初始錄入學生資訊成功') 27 m =input( '是否顯示當前學生資訊:') 28 if m == '是': 29 print(student) 30 else: 31 print('資訊錄入失敗') 32 #1.增添學生代碼 33 elif choose == '1': 34 newsum = int( input( '請輸入新增的學生人數:')) 35 for i in range(newsum): 36 name=input('請輸入姓名:') 37 student.append(name) 38 sex=input('請輸入性別:') 39 student.append(sex) 40 stuid=input('請輸入學號:') 41 student.append(stuid) 42 #此時學生數為初始錄入學生數+新增學生數+留存學生數 43 sum = sum + newsum + tempsum 44 if len(student) == lt * sum: 45 print('增添學生資訊成功') 46 m =input( '是否顯示當前學生資訊:') 47 if m == '是': 48 print(student) 49 else: 50 print('資訊錄入失敗') 51 #2.洗掉學生代碼 52 elif choose == '2': 53 condition = input('請輸入要洗掉學生的姓名:') 54 for i in range(lt * sum): 55 if condition == student[i]: 56 del student[i:i + lt] 57 sum = sum - 1 58 break 59 if len(student) == lt * sum: 60 print('洗掉學生資訊成功') 61 m =input( '是否顯示當前學生資訊:') 62 if m == '是': 63 print(student) 64 else: 65 print('資訊洗掉失敗') 66 #3.更改學生資訊代碼 67 elif choose == '3': 68 if sum == 0: 69 sum = tempsum 70 condition = input('請輸入要修改的學生姓名:') 71 choosechange = input('請輸入要修改的內容:【1.性別 2.學號】:') 72 if choosechange == '1': 73 tempsex = input('請輸入修改后的性別:') 74 for i in range(lt * sum): 75 if student[i] == condition: 76 student[i + 1] = tempsex 77 elif choosechange == '2': 78 tempstuid = input('請輸入修改后的學號:') 79 for i in range(lt * sum): 80 if student[i] == condition: 81 student[i + 2] = tempstuid 82 if condition in student: 83 print('更改學生資訊成功') 84 else: 85 print('更改學生資訊失敗') 86 m = input( '是否顯示當前學生資訊:') 87 if m == '是': 88 print(student) 89 #4.篩選學生資訊代碼 90 elif choose == '4': 91 if sum == 0: 92 sum = tempsum 93 choosename = input('請輸入檔案名:') 94 choosesex = input( '請輸入篩選性別:') 95 chooseoutput(choosename,choosesex) 96 print('已輸出篩選的學生資訊') 97 #5.全輸出 98 elif choose == '5': 99 choosename = input('請輸入檔案名:') 100 alloutput(choosename) 101 print('已全部輸出') 102 #6.系統退出 103 elif choose == '6': 104 alert = input('是否保存修改:') 105 if alert == '是': 106 coveroutput() 107 alloutput('default.txt') 108 print('系統退出') 109 break 110 #7.查詢版本 111 elif choose == '7': 112 print('version-5.3')
最后列舉幾點說明:
1.此學生管理系統內置一個賬戶在程式內,可以直接使用:
用戶名:admin 密碼:passwd
2.除了上面的程式內置賬戶,在賬戶保存檔案“users”中也預先存放了一個賬戶:
用戶名:guest 密碼:passwd
3.在學生資訊保存檔案 “default”中預存了默認資訊
4.此學生管理系統有防誤操作機制,在正常退出系統前無論做了什么操作,即便是“初始化學生資訊(清空了現有學生資訊)”,只要退出系統時不保存,檔案資訊就不會被篡改,相反地,一旦在正常退出系統時保存了檔案,下次進入系統后,系統資訊就會更改為上次保存的內容,
5.系統運行時所需保存的檔案名都需要手動添加“.txt”后綴,
6.文本進度條的進度在一個基礎時間上還與學生資訊大小有關,即“default”檔案越大,初始化時所耗時間越長,
附幾張檔案中的圖:



轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/162487.html
標籤:Python
上一篇:Python檔案逐行寫入
下一篇:day14裝飾器
