基于json保存數(shù)據(jù)的簡(jiǎn)單學(xué)生管理系統(tǒng)
- 需要用到json文件和python格式編碼轉(zhuǎn)換的看這
- 控制臺(tái)終端Terminal密碼隱藏輸入(不是直接run xx.py)
- 在線json格式校驗(yàn)
- codes
"""
__author__ = 'rz'
__Time__ = 2018/8/31 0031 下午 8:05
"""
import json
import getpass #用于控制臺(tái)input輸入密碼隱藏化
def menu():
"""
主功能界面
:return:
"""
print("*"*53)
print('*' + ' '*51 + '*')
print('*' + 'Student Manager System'.center(51,' ') + '*')
print('*' + '1.Log in'.center(51,' ') + '*')
print('*' + '2.Register'.center(51,' ') + '*')
print('*' + '0.Exit '.center(51,' ') + '*')
print('*' + ' ' * 51 + '*')
print("*" * 53)
while True:
option = input('輸入選項(xiàng):')
if option == '1':
login()
elif option == '2':
register()
elif option == '0':
exit()
elif option == '':
continue
else:
print('輸入有誤,請(qǐng)重新選擇功能項(xiàng)!')
def login():
"""
用戶登錄
:return:
"""
print('*' + 'starting login'.center(50, ' ') + '*')
f1 = open('./rmyfile/system_info.json', 'r', encoding='utf-8')
res = f1.read()
f1.close()
sys_info_list = json.loads(res) # 將文本中的json格式轉(zhuǎn)換成python中格式,此處為list
while True:
t_id = input('輸入id:')
t_pwd = getpass.getpass('輸入密碼:')
for n in range(len(sys_info_list)):
if sys_info_list[n]['id'] == t_id and sys_info_list[n]['pwd'] == t_pwd:
submenu(sys_info_list[n]) ##將該用戶的字典信息返回
else:
print('沒(méi)有該用戶或用戶密碼不匹配,請(qǐng)重新登錄')
def register():
"""
用戶注冊(cè)
:return:
"""
print('*' + 'starting register'.center(50, ' ') + '*')
f1 = open('./rmyfile/system_info.json', 'r', encoding='utf-8')
res = f1.read()
f1.close()
sys_info_list = json.loads(res) # 將文本中的json格式轉(zhuǎn)換成python中格式,此處為list
while True:
t_id = input('輸入用戶id:')
for n in range(len(sys_info_list)):
if t_id == sys_info_list[n]['id']:
print('該用戶id已存在.')
break
elif t_id == '':
print('用戶id不能為空.')
break
else:
break
t_user = input('輸入用戶名:')
while True:
t_pwd = getpass.getpass('輸入密碼:')
t_pwd2 = getpass.getpass('確認(rèn)密碼:')
if t_pwd != t_pwd2:
print('密碼不一致')
else:
break
new_info_dict = {}
new_info_dict['id'] = t_id
new_info_dict['user'] = t_user
new_info_dict['pwd'] = t_pwd
new_info_dict['students'] = []
sys_info_list.append(new_info_dict)
sys_info_json = json.dumps(sys_info_list) #將添加完信息的列表轉(zhuǎn)換成json格式
f2 =open('./rmyfile/system_info.json','w',encoding='utf-8')
f2.write(sys_info_json)
print('用戶:%s' % t_id + '注冊(cè)成功')
f2.close()
print('選項(xiàng):繼續(xù)注冊(cè)1/返回上一級(jí)0')
while True:
option = input('請(qǐng)輸入選項(xiàng):')
if option == '1':
register()
elif option == '0':
menu()
elif option == '':
continue
else:
print('輸入有誤,請(qǐng)重新選擇.')
def submenu(teacher_dict:dict):
"""
子功能界面-用戶登錄后
:param teacher_dict:
:return:
"""
print("*" * 53)
print('*' + ('Welcome to you - %s'%teacher_dict['user']).center(50, ' ') + '*')
print('*' + '1.Add student'.center(50, ' ') + '*')
print('*' + '2.Edit student'.center(50, ' ') + '*')
print('*' + '3.Query student'.center(50, ' ') + '*')
print('*' + '4.Delete student'.center(50, ' ') + '*')
print('*' + '5.Return menu'.center(50, ' ') + '*')
print('*' + '0.Exit'.center(50, ' ') + '*')
print("*" * 53)
while True:
option = input('輸入選項(xiàng):')
if option == '1':
add_student(teacher_dict)
elif option == '2':
edit_student(teacher_dict)
elif option == '3':
query_student(teacher_dict)
elif option == '4':
delete_student(teacher_dict)
elif option == '5':
menu()
elif option == '0':
exit()
elif option == '':
continue
else:
print('輸入有誤,請(qǐng)重新選擇功能項(xiàng)!')
def add_student(teacher_dict:dict):
print('*' + 'Adding student'.center(50, ' ') + '*')
f1 = open('./rmyfile/system_info.json', 'r', encoding='utf-8')
res = f1.read()
f1.close()
sys_info_list = json.loads(res) # 將文本中的json格式轉(zhuǎn)換成python中格式,此處為list
stu_name = input('輸入學(xué)生姓名:')
while True:
stu_id = input('輸入學(xué)生學(xué)號(hào):')
if stu_id == '':
continue
for n in range(len(teacher_dict['students'])): #學(xué)號(hào)一定不能相同
if stu_id == teacher_dict['students'][n]['stuid']:
print('學(xué)號(hào)已被占用,請(qǐng)重置.')
break
else: #注意若是上面的break結(jié)束循環(huán),是不會(huì)執(zhí)行else的
break
age = input('輸入年齡:')
phone = input('輸入電話號(hào)碼:')
student_dcit = {'stuname':stu_name,'stuid':stu_id,'age':age,'phone':phone} #生成的新學(xué)生字典
t_index = sys_info_list.index(teacher_dict) #教師字典信息在系統(tǒng)信息列表的索引
sys_info_list[t_index]['students'].append(student_dcit) #添加新學(xué)生到系統(tǒng)信息列表
sys_info_json = json.dumps(sys_info_list)
f2 = open('./rmyfile/system_info.json', 'w', encoding='utf-8')
f2.write(sys_info_json)
f2.close()
print('添加學(xué)生( %s )成功.\n' % stu_name)
print('選項(xiàng):繼續(xù)添加1/返回上一級(jí)0')
while True:
option = input('請(qǐng)輸入選項(xiàng):')
if option == '1':
add_student(sys_info_list[t_index])
elif option == '0':
submenu(sys_info_list[t_index])
elif option == '':
continue
else:
print('輸入有誤,請(qǐng)重新選擇.\n')
def edit_student(teacher_dict:dict):
print('*' + 'Editing student'.center(50, ' ') + '*')
print('你的所有學(xué)生信息如下:')
for n in range(len(teacher_dict['students'])): #打印全部學(xué)生
print(teacher_dict['students'][n])
f1 = open('./rmyfile/system_info.json', 'r', encoding='utf-8')
res = f1.read()
f1.close()
sys_info_list = json.loads(res) # 將文本中的json格式轉(zhuǎn)換成python中格式,此處為list
t_index = sys_info_list.index(teacher_dict) # 教師字典信息在系統(tǒng)信息列表的索引
while True:
edit_id = input('輸入需要修改的學(xué)生id:') # 先不做輸入得不到學(xué)生id的情形
mark = 0
if edit_id == '':
continue
for n in range(len(teacher_dict['students'])):
if teacher_dict['students'][n]['stuid'] == edit_id: #找到匹配的學(xué)生
edit_name = input('修改名字:')
edit_age = input('修改年齡:')
edit_phone = input('修改電話號(hào)碼:')
teacher_dict['students'][n]['stuname'] = edit_name
teacher_dict['students'][n]['age'] = edit_age
teacher_dict['students'][n]['phone'] = edit_phone
sys_info_list[t_index]['students'][n] = teacher_dict['students'][n].copy() #修改對(duì)應(yīng)的學(xué)生的字典
mark = 1
sys_info_json = json.dumps(sys_info_list)
f2 = open('./rmyfile/system_info.json', 'w', encoding='utf-8')
f2.write(sys_info_json)
f2.close()
print('修改學(xué)生信息成功.\n')
break
if not mark:
print('欲修改的學(xué)生不存在( %s ).\n' % edit_id)
break
print('選項(xiàng):繼續(xù)修改1/返回上一級(jí)0')
while True:
option = input('請(qǐng)輸入選項(xiàng):')
if option == '1':
edit_student(sys_info_list[t_index])
elif option == '0':
submenu(sys_info_list[t_index])
elif option == '':
continue
else:
print('輸入有誤,請(qǐng)重新選擇.')
def delete_student(teacher_dict:dict):
print('*' + 'Deleting student'.center(50, ' ') + '*')
print('你的所有學(xué)生信息如下:')
for n in range(len(teacher_dict['students'])): # 打印全部學(xué)生
print(teacher_dict['students'][n])
f1 = open('./rmyfile/system_info.json', 'r', encoding='utf-8')
res = f1.read()
f1.close()
sys_info_list = json.loads(res) # 將文本中的json格式轉(zhuǎn)換成python中格式,此處為list
t_index = sys_info_list.index(teacher_dict) # 教師字典信息在系統(tǒng)信息列表的索引
while True:
del_id = input('輸入需要?jiǎng)h除的學(xué)生id:') # 先不做輸入得不到學(xué)生id的情形
mark = 0
if del_id == '':
continue
for n in range(len(teacher_dict['students'])):
if teacher_dict['students'][n]['stuid'] == del_id: # 找到匹配的學(xué)生id
sys_info_list[t_index]['students'].pop(n) #刪除對(duì)應(yīng)學(xué)生的字典
sys_info_json = json.dumps(sys_info_list)
f2 = open('./rmyfile/system_info.json', 'w', encoding='utf-8')
f2.write(sys_info_json)
f2.close()
print('刪除學(xué)生( %s )成功.\n' % del_id)
mark = 1
break
if not mark: #若沒(méi)有這名學(xué)生給提示信息
print('沒(méi)有id( %s )的學(xué)生\n' % del_id)
break
print('選項(xiàng):繼續(xù)刪除1/返回上一級(jí)0')
while True:
option = input('請(qǐng)輸入選項(xiàng):')
if option == '1':
delete_student(sys_info_list[t_index])
elif option == '0':
submenu(sys_info_list[t_index])
elif option == '':
continue
else:
print('輸入有誤,請(qǐng)重新選擇.')
def query_student(teacher_dict:dict):
print('*' + 'Querying student'.center(51, ' ') + '*')
print('*' + ' ' * 51 + '*')
print('*' + '1.Query by student name'.center(51, ' ') + '*')
print('*' + '2.Query by student id'.center(51, ' ') + '*')
print('*' + '3.Query by age'.center(51, ' ') + '*')
while True:
option = input('請(qǐng)輸入選項(xiàng):')
if option == '1':
query_student_name(teacher_dict)
elif option == '2':
query_student_id(teacher_dict)
elif option == '':
continue
else:
print('輸入有誤,請(qǐng)重新選擇.')
def query_student_name(teacher_dict:dict):
print('*' + 'Querying by name'.center(51, ' ') + '*')
query_name = input('輸入需要查詢(xún)的學(xué)生姓名:')
count = 0
for n in range(len(teacher_dict['students'])):
if query_name in teacher_dict['students'][n]['stuname']:
count += 1
print(teacher_dict['students'][n])
print('總共為您找到%d條記錄\n' % count)
print('選項(xiàng):繼續(xù)查詢(xún)1/返回上一級(jí)0')
while True:
option = input('請(qǐng)輸入選項(xiàng):')
if option == '1':
query_student(teacher_dict)
elif option == '0':
submenu(teacher_dict)
elif option == '':
continue
else:
print('輸入有誤,請(qǐng)重新選擇.')
def query_student_id(teacher_dict:dict):
print('*' + 'Querying by id'.center(51, ' ') + '*')
query_id = input('輸入需要查詢(xún)的學(xué)生學(xué)號(hào):')
count = 0
for n in range(len(teacher_dict['students'])):
if query_id == teacher_dict['students'][n]['stuid']:
count += 1
print(teacher_dict['students'][n])
print('總共為您找到%d條記錄\n' % count)
print('選項(xiàng):繼續(xù)查詢(xún)1/返回上一級(jí)0')
while True:
option = input('請(qǐng)輸入選項(xiàng):')
if option == '1':
query_student(teacher_dict)
elif option == '0':
submenu(teacher_dict)
else:
print('輸入有誤,請(qǐng)重新選擇.')
if __name__ == '__main__':
menu()
注:對(duì)部分信息的輸入沒(méi)有進(jìn)行判斷