Day10—作業(yè)

學(xué)生管理系統(tǒng)

"""__author__=Zeng"""
import os
import json


# 登錄界面
def sys_menu():
    print('='*7, '*', '歡迎來到學(xué)生管理系統(tǒng)', '*', '='*7)
    print(' 1. 登錄\n',
          '2. 注冊\n',
          'q. 退出系統(tǒng)')
    print('=' * 37)
    # 根據(jù)輸入數(shù)值進入相應(yīng)操作界面
    select_num = input('請選擇:')
    if select_num == '1':
        sign_in()
    elif select_num == '2':
        user_register_name()
    elif select_num == 'q':
        exit(0)
    else:
        print('選擇錯誤丘薛,請選擇重新')
        sys_menu()


def sign_in():
    user_name = input('請輸入用戶名(3-10位):')
    user_password = input('請輸入密碼(6-16位):')
    f = open('./Student-management/UsersInformation.json', 'r', encoding='utf8')
    info = json.load(f)
    if not info:
        print('登錄失斨冀贰!沒有找到該用戶名航缀!請注冊后再登錄\n------')
        sys_menu()
    for i in range(len(info)):
        if info[i]['name'] == user_name:
            if info[i]['password'] == user_password:
                f.close()
                print('登錄成功夜牡!\n------')
                interface_menu(user_name)
            else:
                print('登錄失斢肱Α!密碼錯誤塘装!\n------')
                sys_menu()
    else:
        f.close()
        print('登錄失敿庇亍!沒有找到該用戶名蹦肴!請注冊后再登錄\n------')
        sys_menu()


def user_register_name():
    user_name = input('請輸入用戶名(3-10位):')
    f = open('./Student-management/UsersInformation.json', 'r', encoding='utf8')
    info = json.load(f)
    if not info:
        user_register_password(user_name)
    for i in range(len(info)):
        if info[i]['name'] == user_name:
            f.close()
            print('該用戶名已存在僚碎!請從新輸入!\n------')
            user_register_name()
    else:
        f.close()
        print('用戶名可用阴幌!')
        user_register_password(user_name)


def user_register_password(user_name: str):
    user_password1 = input('請輸入密碼(6-16位):')
    user_password2 = input('請再次輸入密碼:')
    if user_password1 != user_password2:
        print('兩次密碼輸入不一致勺阐!請從新輸入卷中!\n------')
        user_register_password(user_name)
    else:
        # 注冊成功,并在用戶信息文檔中渊抽,添加用戶信息
        list1 = []
        dict1 = {'name':user_name, 'password':user_password1}
        f = open('./Student-management/UsersInformation.json', 'r', encoding='utf8')
        info = json.load(f)
        f.close()
        if not info:
            list1.append(dict1)
            f1 = open('./Student-management/UsersInformation.json', 'w', encoding='utf8')
            json.dump(list1,f1)
            f1.close()
        else:
            info.append(dict1)
            f1 = open('./Student-management/UsersInformation.json', 'w', encoding='utf8')
            json.dump(info, f1)
            f1.close()
        # 添加用戶信息后蟆豫,為該用戶創(chuàng)建一個單獨的文件夾用來存放該用戶的操作信息
        user_path = file_path + '\\Student-management\\User_space\\' + user_name + '//'
        if not os.path.exists(user_path):
            os.makedirs(user_path)
            f_path = user_path + '\\StudentInformation.json'
            if not os.path.exists(f_path):
                list1 = []
                f = open(f_path, 'w', encoding='utf-8')
                json.dump(list1, f)
                f.close()
        print('注冊成功!\n------')
        sys_menu()


# 系統(tǒng)界面菜單
def interface_menu(user_name: str):
    print('='*7,'*','歡迎進入學(xué)生管理系統(tǒng)','*','='*7)
    print(' 1. 添加學(xué)生\n',
          '2. 刪除學(xué)生\n',
          '3. 修改信息\n',
          '4. 查找信息\n',
          'q. 退出系統(tǒng)')
    print('=' * 37)
    # 根據(jù)輸入數(shù)值進入相應(yīng)操作界面
    select_num = input('請選擇:')
    if select_num == '1':
        add_menu(user_name)
    elif select_num == '2':
        del_menu(user_name)
    elif select_num == '3':
        re_menu(user_name)
    elif select_num == '4':
        find_menu(user_name)
    elif select_num == 'q':
        exit(0)
    else:
        print('選擇錯誤懒闷,請選擇重新')
        interface_menu(user_name)


# 添加學(xué)生功能部分
def add_menu(user_name: str):     # 添加學(xué)生界面菜單
    print('=' * 37)
    print(' 1. 開始添加\n',
          '2. 返回上一級\n',
          'q. 退出系統(tǒng)')
    print('=' * 37)
    # 根據(jù)輸入數(shù)值進入相應(yīng)操作界面
    select_num = input('請選擇:')
    if select_num == '1':
        add_stud(user_name)
    elif select_num == '2':
        interface_menu(user_name)
    elif select_num == 'q':
        exit(0)
    else:
        print('選擇錯誤十减,請選擇重新')
        add_menu(user_name)


def add_stud(user_name):
    stu_name = input('請輸入學(xué)生姓名:')
    stu_age = input('請輸入學(xué)生年齡:')
    stu_num = input('請輸入學(xué)生學(xué)號:')
    stu_tel = input('請輸入學(xué)生電話:')
    stu_info = {'姓名': stu_name,
                '年齡': stu_age,
                '學(xué)號': stu_num,
                '電話': stu_tel}
    info = r_json(user_name)
    info.append(stu_info)
    w_json(user_name, info)
    print('添加成功!C汀嫉称!')
    cont_add(user_name)


def cont_add(user_name: str):
    print('=' * 37)
    print(' 1. 繼續(xù)添加\n',
          '2. 返回首頁\n',
          'q. 退出系統(tǒng)')
    print('=' * 37)
    # 根據(jù)輸入數(shù)值進入相應(yīng)操作界面
    select_num = input('請選擇:')
    if select_num == '1':
        add_stud(user_name)
    elif select_num == '2':
        interface_menu(user_name)
    elif select_num == 'q':
        exit(0)
    else:
        print('選擇錯誤,請選擇重新')
        cont_add(user_name)


# 刪除學(xué)生功能部分
def del_menu(user_name: str):     # 刪除學(xué)生界面菜單
    print('=' * 37)
    print(' 1. 根據(jù)姓名刪除\n',
          '2. 根據(jù)學(xué)號刪除\n',
          '3. 返回上一級\n',
          'q. 退出系統(tǒng)')
    print('=' * 37)
    # 根據(jù)輸入數(shù)值進入相應(yīng)操作界面
    select_num = input('請選擇:')
    if select_num == '1':
        del_stud(1, user_name)
    elif select_num == '2':
        del_stud(2, user_name)
    elif select_num == '3':
        interface_menu(user_name)
    elif select_num == 'q':
        exit(0)
    else:
        print('選擇錯誤灵疮,請選擇重新')
        del_menu(user_name)


def del_stud(id, user_name: str):
    if id == 1:
        s_name = input('請輸入學(xué)生姓名:')
        name_list = []    # 創(chuàng)建一個新的列表织阅,用來存放在json文件中獲取的與輸入姓名相同的學(xué)生信息
        id_list = []      # 創(chuàng)建一個新的列表,用來存放在在json文件中獲取的與輸入姓名相同的索引值
        i = 0            # 計算索引值
        count = 0         # 計算json文件中獲取的與輸入姓名相同的元素個數(shù)
        info = r_json(user_name)
        for item in info[:]:
            if item['姓名'] == s_name:
                name_list.append(item)   # 遍歷json文件中與輸入姓名相同的同學(xué)震捣,并將信息存入name_list列表中
                id_list.append(i)        # 將存入name_list列表中的同學(xué)信息在json文件中的索引值存入id_list列表中
                count += 1               # 統(tǒng)計名字相同的個數(shù)
            i += 1                       # 每循環(huán)一次荔棉,索引值+1
        if not count:
            print('未找到該名字學(xué)生,請重新輸入')
            del_menu(user_name)
        else:
            for j in range(count):
                print(j+1,'. ',name_list[j])
        del_id = int(input('請刪除學(xué)生對應(yīng)的編號(1 - %d):' % count)) - 1
        for x in range(count):
            if x == del_id:
                del info[id_list[x]]
                w_json(user_name, info)
                print('刪除成功]镉H笥!!')
                cont_del(0, user_name)
            else:
                print('刪除錯誤O劭谩R既簟!')
                del_menu(user_name)
    else:
        s_num = input('請輸入學(xué)生學(xué)號:')
        y = 0  # 計算索引值
        info = r_json(user_name)
        for item in info[:]:
            if item['學(xué)號'] == s_num:
                del info[y]   # 遍歷json文件中與輸入學(xué)號相同的同學(xué)皂冰,并刪除
                w_json(user_name, info)
                print('刪除成功5暾埂!秃流!')
                break
            y += 1
        else:
            print('未找到該名字學(xué)生赂蕴,請重新選擇')
            del_menu(user_name)
        cont_del(1, user_name)


def cont_del(did, user_name: str):
    did1 = did
    print('=' * 37)
    print(' 1. 繼續(xù)刪除\n',
          '2. 返回上一級\n',
          'q. 退出系統(tǒng)')
    print('=' * 37)
    # 根據(jù)輸入數(shù)值進入相應(yīng)操作界面
    select_num = input('請選擇:')
    if select_num == '1':
        if did1 == 0:
            del_stud(1, user_name)
        else:
            del_stud(2, user_name)
    elif select_num == '2':
        del_menu(user_name)
    elif select_num == 'q':
        exit(0)
    else:
        print('選擇錯誤,請選擇重新')
        cont_del(did1, user_name)


# 修改學(xué)生功能部分
def re_menu(user_name: str):     # 修改學(xué)生界面菜單
    print('=' * 37)
    print(' 1. 根據(jù)姓名修改\n',
          '2. 根據(jù)學(xué)號修改\n',
          '3. 返回上一級\n',
          'q. 退出系統(tǒng)')
    print('=' * 37)
    # 根據(jù)輸入數(shù)值進入相應(yīng)操作界面
    select_num = input('請選擇:')
    if select_num == '1':
        re_stud(1, user_name)
    elif select_num == '2':
        re_stud(2, user_name)
    elif select_num == '3':
        interface_menu(user_name)
    elif select_num == 'q':
        exit(0)
    else:
        print('選擇錯誤舶胀,請選擇重新')
        del_menu(user_name)


def re_stud(id, user_name: str):
    if id == 1:
        s_name = input('請輸入學(xué)生姓名:')
        name_list = []    # 創(chuàng)建一個新的列表概说,用來存放在json文件中獲取的與輸入姓名相同的學(xué)生信息
        id_list = []      # 創(chuàng)建一個新的列表,用來存放在在json文件中獲取的與輸入姓名相同的索引值
        i = 0            # 計算索引值
        count = 0         # 計算json文件中獲取的與輸入姓名相同的元素個數(shù)
        info = r_json(user_name)
        for item in info[:]:
            if item['姓名'] == s_name:
                name_list.append(item)   # 遍歷json文件中與輸入姓名相同的同學(xué)嚣伐,并將信息存入name_list列表中
                id_list.append(i)        # 將存入name_list列表中的同學(xué)信息在json文件中的索引值存入id_list列表中
                count += 1               # 統(tǒng)計名字相同的個數(shù)
            i += 1                       # 每循環(huán)一次糖赔,索引值+1
        if not count:
            print('未找到該名字學(xué)生,請重新選擇')
            re_menu(user_name)
        else:
            for j in range(count):
                print(j+1,'. ',name_list[j])
        del_id = int(input('請輸入需修改學(xué)生對應(yīng)的編號(1 - %d):' % count)) - 1
        for x in range(count):
            if x == del_id:
                re_info(x, user_name)
    else:
        s_num = input('請輸入學(xué)生學(xué)號:')
        y = 0  # 計算索引值
        info = r_json(user_name)
        for item in info[:]:
            if item['學(xué)號'] == s_num:
                print('該同學(xué)信息為:\n', info[y])
                re_info(y, user_name)   # 遍歷json文件中中與輸入學(xué)號相同的同學(xué)轩端,并修改
                print('修改成功9夷怼!!')
                break
            y += 1
        else:
            print('未找到該名字學(xué)生刻撒,請重新選擇')
            re_menu(user_name)


def re_info(fid, user_name: str):
    fid2 = fid
    print('=' * 37)
    print(' 1. 修改學(xué)生姓名\n',
          '2. 修改學(xué)生年齡\n',
          '3. 修改學(xué)生學(xué)號\n',
          '4. 修改學(xué)生電話\n',
          '5. 返回上一級\n',
          'q. 退出系統(tǒng)')
    print('=' * 37)
    # 根據(jù)輸入數(shù)值進入相應(yīng)操作界面
    info = r_json(user_name)
    select_num = input('請選擇:')
    if select_num == '1':
        re_name = input('請輸入修改后的姓名:')
        info[fid]['姓名'] = re_name
        w_json(user_name, info)
        print('修改成功9翘铩!声怔!\n修改結(jié)果為:\n', info[fid])
    elif select_num == '2':
        re_age = input('請輸入修改后的年齡:')
        info[fid]['年齡'] = re_age
        w_json(user_name, info)
        print('修改成功L汀!醋火!\n修改結(jié)果為:\n', info[fid])
    elif select_num == '3':
        re_num = input('請輸入修改后的學(xué)號:')
        info[fid]['年齡'] = re_num
        w_json(user_name, info)
        print('修改成功S破!芥驳!\n修改結(jié)果為:\n', info[fid])
    elif select_num == '4':
        re_tel = input('請輸入修改后的電話:')
        info[fid]['年齡'] = re_tel
        w_json(user_name, info)
        print('修改成功J脸濉!兆旬!\n修改結(jié)果為:\n', info[fid])
    elif select_num == '5':
        re_menu(user_name)
    elif select_num == 'q':
        exit(0)
    else:
        print('選擇錯誤假抄,請選擇重新')
        interface_menu(user_name)
    re_info(fid2, user_name)


# 查找學(xué)生功能部分
def find_menu(user_name: str):     # 查找學(xué)生界面菜單
    print('=' * 37)
    print(' 1. 查找所有學(xué)生\n',
          '2. 根據(jù)姓名查找\n',
          '3. 根據(jù)學(xué)號查找\n',
          '4. 返回上一級\n',
          'q. 退出系統(tǒng)')
    print('=' * 37)
    # 根據(jù)輸入數(shù)值進入相應(yīng)操作界面
    select_num = input('請選擇:')
    if select_num == '1':
        find_stud(1, user_name)
    elif select_num == '2':
        find_stud(2, user_name)
    elif select_num == '3':
        find_stud(3, user_name)
    elif select_num == '4':
        interface_menu(user_name)
    elif select_num == 'q':
        exit(0)
    else:
        print('選擇錯誤,請選擇重新')
        del_menu(user_name)


def find_stud(id,user_name: str):
    info = r_json(user_name)
    if id == 1:
        print('所有同學(xué)信息如下所示:')
        for item in info[:]:
            print(item)
        print('查找成功@鲡K薇ァ!')
        find_menu(user_name)
    elif id == 2:
        s_name = input('請輸入學(xué)生姓名:')
        name_list = []    # 創(chuàng)建一個新的列表脚祟,用來存放在json文件中獲取的與輸入姓名相同的學(xué)生信息
        id_list = []      # 創(chuàng)建一個新的列表谬以,用來存放在在json文件中獲取的與輸入姓名相同的索引值
        i = 0            # 計算索引值
        count = 0         # 計算json文件中獲取的與輸入姓名相同的元素個數(shù)
        for item in info[:]:
            if item['姓名'] == s_name:
                name_list.append(item)   # 遍歷json文件中與輸入姓名相同的同學(xué),并將信息存入name_list列表中
                id_list.append(i)        # 將存入name_list列表中的同學(xué)信息在json文件中的索引值存入id_list列表中
                count += 1               # 統(tǒng)計名字相同的個數(shù)
            i += 1                       # 每循環(huán)一次由桌,索引值+1
        if not count:
            print('未找到該名字學(xué)生为黎,請重新查找')
            cont_find(0, user_name)
        else:
            for j in range(count):
                print(j+1,'. ',name_list[j])
        print('查找成功!P心碍舍!')
        cont_find(0, user_name)
    else:
        s_num = input('請輸入學(xué)生學(xué)號:')
        y = 0  # 計算索引值
        for item in info[:]:
            if item['學(xué)號'] == s_num:
                print(info[y])   # 遍歷json文件中與輸入學(xué)號相同的同學(xué),并輸出
                print('查找成功R匮拧!妈经!')
                break
            y += 1
        else:
            print('未找到該學(xué)號學(xué)生淮野,請重新輸入')
        cont_find(1, user_name)


def cont_find(id2,user_name: str):
    id3 = id2
    print('=' * 37)
    print(' 1. 繼續(xù)查找\n',
          '2. 返回上一級\n',
          'q. 退出系統(tǒng)')
    print('=' * 37)
    # 根據(jù)輸入數(shù)值進入相應(yīng)操作界面
    select_num = input('請選擇:')
    if select_num == '1':
        if id2 == 0:
            find_stud(2, user_name)
        else:
            find_stud(3, user_name)
    elif select_num == '2':
        find_menu(user_name)
    elif select_num == 'q':
        exit(0)
    else:
        print('選擇錯誤,請選擇重新')
        cont_find(id3, user_name)


# 讀取json文件吹泡,并返回學(xué)生信息
def r_json(user_name: str):
    f = open('./Student-management/User_space/' + user_name + '/' + 'StudentInformation.json', 'r', encoding='utf8')
    info = json.load(f)
    f.close()
    return info


# 將更新后的信息重新寫入json文件并保存
def w_json(user_name: str, list1: list):
    f = open('./Student-management/User_space/' + user_name + '/' + 'StudentInformation.json', 'w', encoding='utf8')
    json.dump(list1, f)
    f.close()


# 在程序運行時骤星,在當前路徑下為管理系統(tǒng)創(chuàng)建數(shù)據(jù)存放文件夾
file_path = os.getcwd()  # 返回當前工作目錄
sys_path = file_path + '\\Student-management//'
if not os.path.exists(sys_path):
    os.makedirs(sys_path)
    f_path = file_path + '\\Student-management\\UsersInformation.json'
    if not os.path.exists(f_path):
        list1 = []
        f = open(f_path, 'w', encoding='utf-8')
        json.dump(list1,f)
        f.close()

sys_menu()

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市爆哑,隨后出現(xiàn)的幾起案子洞难,更是在濱河造成了極大的恐慌,老刑警劉巖揭朝,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件队贱,死亡現(xiàn)場離奇詭異色冀,居然都是意外死亡,警方通過查閱死者的電腦和手機柱嫌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門锋恬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人编丘,你說我怎么就攤上這事与学。” “怎么了嘉抓?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵索守,是天一觀的道長。 經(jīng)常有香客問我抑片,道長卵佛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任蓝丙,我火速辦了婚禮级遭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘渺尘。我一直安慰自己挫鸽,他們只是感情好,可當我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布鸥跟。 她就那樣靜靜地躺著丢郊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪医咨。 梳的紋絲不亂的頭發(fā)上枫匾,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天,我揣著相機與錄音拟淮,去河邊找鬼干茉。 笑死,一個胖子當著我的面吹牛很泊,可吹牛的內(nèi)容都是我干的角虫。 我是一名探鬼主播,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼委造,長吁一口氣:“原來是場噩夢啊……” “哼戳鹅!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起昏兆,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤枫虏,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體隶债,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡腾它,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了燃异。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片携狭。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖回俐,靈堂內(nèi)的尸體忽然破棺而出逛腿,到底是詐尸還是另有隱情,我是刑警寧澤仅颇,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布单默,位于F島的核電站,受9級特大地震影響忘瓦,放射性物質(zhì)發(fā)生泄漏搁廓。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一耕皮、第九天 我趴在偏房一處隱蔽的房頂上張望境蜕。 院中可真熱鬧,春花似錦凌停、人聲如沸粱年。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽台诗。三九已至,卻和暖如春赐俗,著一層夾襖步出監(jiān)牢的瞬間拉队,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工阻逮, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留粱快,地道東北人。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓叔扼,卻偏偏與公主長得像事哭,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子币励,可洞房花燭夜當晚...
    茶點故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內(nèi)容