Python練習【4】【學生管理系統】
阿新 • • 發佈:2018-12-04
程式碼:
## 定義介面列表 stu_interface=['學生管理系統','1.管理員登入','2.學生登入'] admin_login=['管理員操作介面','1.管理員密碼修改','2.新增學生的資訊','3.刪除學生的資訊','4.修改學生的資訊','5.查詢學生的資訊','6.列出學生的資訊','7.退出系統'] stu_login=['學生操作介面','1.查詢個人資訊','2.修改資訊'] stu_chInfo=['修改個人資訊','1.修改年齡','2.修改密碼'] flag=0 ## 標誌位,用於確定當前介面位置 info_admin={'admin':'admin'} ## 管理員資訊 ## 示例學生資訊 info_st_ex={ '000000': { 'name':'tom', 'sex':'man', 'age':18, 'class':'Class1 Grade2', 'birthday':'2000-1-1', 'num':'000000', 'password':'tom' } } info={} ##定義空列表用於存放資訊 info.update(info_st_ex) ##將示例資訊加入存放資料中方便測試 ## 函式:根據陣列資訊轉化為介面 def make_interface(li): for i in range(len(li)): if i == 0: print(li[i].center(44,'*')) print((' '*48).center(50,'*')) else: p=len([j for j in li[i].replace('.','0')if not j.isnumeric()]) print(li[i].center(48-p,' ').center(50-p,'*')) if flag!=0: print('輸入q返回上一層'.center(41,' ').center(43,'*')) print((' '*48).center(50,'*')+'\n'+'*'*50) ## 函式:限制輸入指令在正確範圍內,不在則返回True def outofrange(li,cmd): if cmd!='q': if cmd not in [str(i) for i in range(1,len(li))]: input('請輸入正確的指令,按下Enter鍵返回') return True ## 函式:利用flag標識返回對應的介面列表 def flag_turn(): if flag==0: return stu_interface elif flag==1: return admin_login elif flag==2: return stu_login elif flag==3: return stu_chInfo ## 函式:使用者登入函式 def login(cmd): global flag name_in=input('管理員賬戶:'if cmd=='1' else '學生賬戶:') passwd_in=input('密碼:') if cmd=='1' and name_in=='admin'and passwd_in==info_admin['admin']: flag=1 elif cmd=='2' and name_in in info and passwd_in==info[name_in]['password']: flag=2 global stu_in stu_in=name_in else: print('登入失敗,請檢查您的使用者名稱和密碼是否正確') flag=0 ## 管理員介面操作函式 def admin(cmd): global flag if cmd== '1': passwd_in=input('請輸入當前管理員密碼:') if passwd_in==info_admin['admin']: info_admin['admin']=input('請輸入新密碼:') print('修改成功') else: print('與當前密碼不符,請確認後重試') elif cmd== '2': print('新增學生資訊:'.center(50,'*')) info['buf']=copy.copy(info_st_ex['000000']) for i in info['buf']: if i=='class': li=input(i+'(例:2,1表示 Class1 Grade2):').split(',') info['buf'][i]='Class'+li[0]+' Grade'+li[1] else: info['buf'][i]=input(i+':') else: info[info['buf']['num']]=info['buf'] info.pop('buf') print('新增成功') elif cmd== '3': print('刪除學生資訊:'.center(50,'*')+'\n已存在的學生資訊:') for i in info: print('學號:'+i+'\t姓名:'+info[i]['name']) pop_in=input('輸入學號刪除指定資訊:') if pop_in in info: info.pop(pop_in) print('刪除成功') else: print('請輸入已存在的學生資訊(學號):') elif cmd== '4': print('刪除學生資訊:'.center(50,'*')+'\n已存在的學生資訊:') for i in info: print('學號:'+i+'\t姓名:'+info[i]['name']) mod_in=input('輸入學號確定修改物件:') if mod_in in info: for i,v in info[mod_in].items(): print(i+':'+v) while True: mod_info=input('輸入要修改的資訊選項:輸入q退出') if mod_info in info[mod_in]: info[mod_in][mod_info]=input('原始資訊:'+info[mod_in][mod_info]+'\n輸入新資訊:') print('修改成功') elif mod_info=='q': break else: print('資訊選項不存在') else: print('不存在該學生資訊') elif cmd== '5': print('檢視學生資訊:'.center(50,'*')+'\n已存在的學生資訊:') for i in info: print('學號:'+i+'\t姓名:'+info[i]['name']) while True: find_in=input('輸入學號檢視完整資訊:輸入q退出') if find_in in info: for i,v in info[find_in].items(): print(i+':'+str(v)) elif find_in=='q': break else: print('該學號不存在') elif cmd== '6': print('所有學生資訊:'.center(50,'*')) for i in info: for j,k in info[i].items(): print(j+':'+str(k)) print('*'*50) elif cmd== '7': print('歡迎下次登入管理員系統'.center(50,'~')) exit() if cmd=='q': flag=0 ## 學生介面操作函式 def stu(cmd): global flag if cmd!='q': cmd=int(cmd) else: flag=0 if cmd==1: print('查詢個人資訊'.center(50,'*')) for i,v in info[stu_in].items(): print(i+':'+str(v)) if cmd==2: flag=3 ## 學生修改資訊函式 def modify_stu(cmd): if cmd=='1': input('當前年齡:'+str(info[stu_in]['age'])+'\n新年齡:') elif cmd=='2': if input('請輸入當前密碼:')==info[stu_in]['password']: info[stu_in]['password']=input('請輸入新密碼:') print('修改成功') else: print('密碼錯誤,請核對後重試') elif cmd=='q': global flag flag=0 else: print('請輸入正確的指令') ## 指令輸入函式 def cmd_input(): cmd=input() if outofrange(flag_turn(),cmd): return if flag==0: login(cmd) elif flag==1: admin(cmd) elif flag==2: stu(cmd) elif flag==3: modify_stu(cmd) ## 主函式 while True: try: make_interface(flag_turn()) cmd_input() except Exception as error: print('程式異常') finally: if input('Enter鍵繼續 輸入q退出程式')=='q': print('歡迎下次使用'.center(50,'~')) exit()