day10-homework

基于json保存數(shù)據(jù)的簡(jiǎn)單學(xué)生管理系統(tǒng)

"""
__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)行判斷

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、通過(guò)CocoaPods安裝項(xiàng)目名稱(chēng)項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請(qǐng)求組件 FMDB本地?cái)?shù)據(jù)庫(kù)組件 SD...
    陽(yáng)明AI閱讀 16,211評(píng)論 3 119
  • 6-myr 日常工作中,我們往往避免沖突,而當(dāng)沖突真的發(fā)生時(shí),一昧的退縮或者一時(shí)火氣沖上腦門(mén),都不是最佳方案,前者...
    6_myr閱讀 490評(píng)論 0 0

友情鏈接更多精彩內(nèi)容