代碼:
## 定義界面列表
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()
部分測試結果:
![](http://i2.51cto.com/images/blog/201812/04/0f4f5924f4b33eaaebd18fad38b2dc92.jpg?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk