Day-11 - 第二周作業(yè)(簡(jiǎn)易學(xué)生管理系統(tǒng)(賬號(hào)登錄系統(tǒng)更新))

更新了一版答案,點(diǎn)此鏈接
新增需求:
1.學(xué)號(hào)遞增,刪除學(xué)員后學(xué)號(hào)不可再用
2.重名檢測(cè),按序列打印學(xué)員,選擇刪除
3.刪除學(xué)員可以選擇按照姓名或者學(xué)號(hào)
4.添加登錄系統(tǒng),不同的賬號(hào)存儲(chǔ)不同的添加內(nèi)容 (已添加)
5.本地文件保存

簡(jiǎn)介:
本項(xiàng)目分為6個(gè)模塊,其中界面模塊為主程序,調(diào)用其他模塊
登錄系統(tǒng)采用賬號(hào)密碼登錄,不同賬號(hào)對(duì)應(yīng)不同班級(jí)學(xué)生列表
在主界面中輸入用戶名,并將用戶名作為參數(shù)傳遞給其他功能模塊函數(shù),用于獲取不同賬號(hào)對(duì)應(yīng)班級(jí)列表
萌新寫的程序,有BUG,重要的事情說(shuō)三遍!
萌新寫的程序,有BUG,重要的事情說(shuō)三遍!
萌新寫的程序,有BUG,重要的事情說(shuō)三遍!
(盡力查找中- -)

1. yxy_interface.py模塊(界面模塊):主界面程序


from add_stu import add_stu
import check_stu
from delete_stu import del_stu
from revise_stu import revise_stu
import yxy_login
"""
新增需求:
1.學(xué)號(hào)遞增,刪除學(xué)員后學(xué)號(hào)不可再用 
2.重名檢測(cè),按序列打印學(xué)員,選擇刪除 
3.刪除學(xué)員可以選擇按照姓名或者學(xué)號(hào) 
4.添加登錄系統(tǒng),不同的賬號(hào)存儲(chǔ)不同的添加內(nèi)容 (已添加)
5.本地文件保存

"""


def main():
    print('簡(jiǎn)易版學(xué)生管理系統(tǒng)登錄界面')
    user_name = input('請(qǐng)輸入您的賬號(hào):')
    re = yxy_login.login_in(user_name)
    if re == 'quit':
        print('退出系統(tǒng)')
    else:
        stus = yxy_login.get_stus(user_name)
        stu_num = yxy_login.get_stu_num(user_name)

        # 編輯主界面循環(huán)
        while True:
            print('+' * 60)
            print('+' + '歡迎來(lái)到非常非常簡(jiǎn)易版的學(xué)生管理系統(tǒng)^_^'.center(40, ' ') + '+')
            print('+' + '1.添加學(xué)生信息'.center(52, ' ') + '+')
            print('+' + '2.查詢學(xué)生信息'.center(52, ' ') + '+')
            print('+' + '3.刪除學(xué)生信息'.center(52, ' ') + '+')
            print('+' + '4.修改學(xué)生信息'.center(52, ' ') + '+')
            print('+'+'5.退出'.center(56, ' ')+'+')
            print('+' * 60)
            step1 = int(input('請(qǐng)輸入您想進(jìn)行的操作:'))

            if step1 == 5:
                break

            # 編輯添加學(xué)生的循環(huán)界面
            elif step1 == 1:
                while True:
                    add_stu(user_name)
                    print('1.繼續(xù)添加')
                    print('2.返回上一步')
                    step2 = int(input('請(qǐng)輸入您想進(jìn)行的操作: '))

                    if step2 == 2:
                        break
                    elif step2 == 1:
                        continue
                    else:
                        print('輸入錯(cuò)誤,請(qǐng)重新選擇:')
            # 編輯查詢學(xué)生的界面
            elif step1 == 2:
                while True:
                    print('1.查詢指定學(xué)生信息')
                    print('\n2.查詢所有學(xué)生信息')
                    print('\n3.查詢指定學(xué)生平均分')
                    print('\n4.返回上一步')
                    step3 = int(input('請(qǐng)輸入您想進(jìn)行的操作: '))
                    if step3 == 4:
                        break
                    elif step3 == 1:
                        check_stu.search_stu(user_name)
                    elif step3 == 2:
                        check_stu.check_all(user_name)
                    elif step3 == 3:
                        check_stu.avg_score(user_name)
                    else:
                        print('輸入錯(cuò)誤,請(qǐng)重新選擇:')
            # 編輯刪除學(xué)生的界面
            elif step1 == 3:
                del_stu(user_name)
            # 編輯修改學(xué)生的界面
            elif step1 == 4:
                revise_stu(user_name)

            else:
                print('輸入錯(cuò)誤,請(qǐng)重新選擇:')


if __name__ == '__main__':

    main()

2. yxy_login.py模塊,登錄模塊,負(fù)責(zé)登錄系統(tǒng)和數(shù)據(jù)的保存和載入

import json

"""
思路:
建立數(shù)據(jù)的結(jié)構(gòu):
老師1 = {'account':輸入賬號(hào), 'password': 輸入密碼}
list1 = [{老師1}, {老師2}]
dict2 = {輸入賬號(hào)1:列表1, 輸入賬號(hào)2:列表2}
dict3 = {輸入賬號(hào)1:學(xué)號(hào)池1,輸入賬號(hào)2:學(xué)號(hào)池2}

登錄后輸入賬號(hào),密碼
保存在dict1中,如果信息不對(duì),返回相應(yīng)提示
如果通過(guò),導(dǎo)入老師對(duì)應(yīng)的列表,以及對(duì)應(yīng)的學(xué)號(hào)池
"""


def print_stu(stu: dict):
    """
    定義一個(gè)函數(shù),用來(lái)打印學(xué)生信息
    :param stu: 學(xué)生信息對(duì)應(yīng)的字典
    :return:
    """
    print(
        'name: %s, 學(xué)號(hào): %s, 英語(yǔ)成績(jī):%s, 體育成績(jī):%s, 美術(shù)成績(jī): %s,數(shù)學(xué)成績(jī): %s,年齡: %s,' %
        (stu['name'], stu['seq'], stu['en_score'], stu['ph_score'], stu['art_score'], stu['math_score'], stu['age'])
    )


def save(dict1, filename):
        with open('./'+filename, 'w', encoding='utf-8') as fs:
            json.dump(dict1, fs)


def load_dict(filename):
    try:
        with open('./'+filename, 'r', encoding='utf-8') as fs:
            dict1 = json.load(fs)
        return dict1
    except FileNotFoundError:
        save({}, filename)
        return {}


def load_list(filename):
    try:
        with open('./'+filename, 'r', encoding='utf-8') as fs:
            dict1 = json.load(fs)
        return dict1
    except FileNotFoundError:
        save([], filename)
        return []


list_account = load_list('list_account.json')
dict_stus = load_dict('dict_stus.json')
dict_num = load_dict('dict_num.json')


def get_stus(user_name):

    stus = dict_stus[user_name]  # 班級(jí)列表
    return stus


def get_stu_num(user_name):

    stu_num = dict_num[user_name]  # 學(xué)號(hào)池當(dāng)前可用序列
    return stu_num


def register() -> str:
    """
    定義一個(gè)注冊(cè)函數(shù),用來(lái)注冊(cè)用戶的賬號(hào)密碼,并保持到本地文件,函數(shù)返回輸入賬號(hào)對(duì)應(yīng)的字符串
    :return:
    """
    dict_account = {}
    print('歡迎來(lái)到注冊(cè)系統(tǒng)!')
    account = input('請(qǐng)輸入賬號(hào),按q退出注冊(cè):')
    if account == 'q':
        print('退出注冊(cè)!')
        return 'quit'
    while True:
        password = input('請(qǐng)輸入密碼,按q退出注冊(cè): ')
        if password == 'q':
            print('退出注冊(cè)!')
            return 'quit'
        re_password = input('請(qǐng)?jiān)俅屋斎朊艽a以確認(rèn): ')
        if re_password == password:
            print('恭喜您注冊(cè)成功!')
            dict_account['account'] = account  # 初始化賬號(hào)密碼列表
            dict_account['password'] = password
            list_account.append(dict_account)
            save(list_account, 'list_account.json')
            dict_stus[account] = []  # 初始化 賬號(hào):班級(jí)列表 字典
            dict_num[account] = 1  # 初始化 賬號(hào):學(xué)號(hào)池 字典
            save(dict_stus, 'dict_stus.json')
            save(dict_num, 'dict_num.json')
            return account
        else:
            print('輸入密碼錯(cuò)誤,請(qǐng)重新創(chuàng)建密碼')
            continue


def login_in(user_name):
    # 登錄界面循環(huán)
    while True:

        # 先檢測(cè)賬號(hào),賬號(hào)匹配就檢測(cè)密碼
        for item in list_account:
            if item['account'] == user_name:
                # 檢測(cè)密碼的循環(huán),通過(guò)函數(shù)返回值為賬號(hào),退出返回'quit',輸入錯(cuò)誤循環(huán)輸入
                while True:
                    password = input('請(qǐng)輸入您的密碼,輸入q退出系統(tǒng)')
                    if password == 'q':
                        return 'quit'
                    elif password == item['password']:
                        print('='*20 + '\n' + 'welcome back!' + user_name + '\n' + '='*20)
                        return user_name
                    else:
                        print('您的密碼不正確,請(qǐng)重新輸入')
                        continue

        # 賬號(hào)不匹配讓用戶進(jìn)行注冊(cè),退出返回'quit',注冊(cè)成功函數(shù)返回用戶名
        else:
            print('您的賬號(hào)不存在!')
            while True:
                step1 = int(input('按1注冊(cè)賬號(hào),按0退出系統(tǒng)'))
                if step1 == 1:
                    return register()
                elif step1 == 0:
                    return 'quit'
                else:
                    print('您的輸入不正確!請(qǐng)重新輸入')
                    continue

3. add_stu.py模塊,學(xué)生信息添加功能模塊

注意:學(xué)號(hào)基于生成器生成,但是生成器每次運(yùn)行會(huì)重置,所以生成器初始序號(hào)也需要文件保存到本地

import yxy_login

# def save_num(num: int):
#     """
#     定義一個(gè)函數(shù),用來(lái)保存當(dāng)前的下一個(gè)學(xué)號(hào)序列
#     :param num: 學(xué)號(hào)對(duì)應(yīng)的數(shù)字序列
#     :return:
#     """
#     with open('./stu_num.txt', 'w', encoding='utf-8') as fs:
#         fs.write(str(num+1))
#
#
# def load_num():
#     """
#     定義一個(gè)函數(shù),用來(lái)讀取當(dāng)前可用的學(xué)號(hào)序列
#     :return: 數(shù)字,學(xué)號(hào)序列
#     """
#     try:
#         with open('./stu_num.txt', 'r', encoding='utf-8') as fs:
#             num = fs.read()
#             return int(num)
#     except FileNotFoundError:
#         save_num(1)
#         return 1


# 定義一個(gè)生產(chǎn)學(xué)號(hào)的生成器

def seq_generator(user_name):
    stu_num = yxy_login.get_stu_num(user_name)
    num = stu_num  # 從保存的本地文件中導(dǎo)入當(dāng)前可用學(xué)號(hào)
    if num >= 1000:
        print('學(xué)號(hào)超限,請(qǐng)重置')
        yield 0

    for x in range(num, 10000):
        yield x


# 定義一個(gè)全局變量re_seq用來(lái)存放生成器地址

def get_seq(user_name):
    """
    定義一個(gè)函數(shù),用來(lái)獲得學(xué)號(hào)
    :return: 字符串,學(xué)號(hào)
    """
    global re_seq
    re_seq = seq_generator(user_name)
    num = next(re_seq)
    # save_num(num)
    yxy_login.dict_num[user_name] = num + 1
    yxy_login.save(yxy_login.dict_num, 'dict_num.json')
    return 'py1807' + str(num).rjust(4,'0')


def add_stu(user_name):
    # 創(chuàng)建一個(gè)函數(shù)用來(lái)添加學(xué)生
    infors = {}
    # 創(chuàng)建一個(gè)用來(lái)存放輸入學(xué)生信息的字典
    name = input('請(qǐng)輸入要添加學(xué)生的姓名: ')
    infors['name'] = name.title()
    infors['seq'] = get_seq(user_name)
    en_score = input('請(qǐng)輸入要添加學(xué)生的英語(yǔ)成績(jī): ')
    infors['en_score'] = en_score
    ph_score = input('請(qǐng)輸入要添加學(xué)生的體育成績(jī): ')
    infors['ph_score'] = ph_score
    art_score = input('請(qǐng)輸入要添加學(xué)生的美術(shù)成績(jī): ')
    infors['art_score'] = art_score
    math_score = input('請(qǐng)輸入要添加學(xué)生的數(shù)學(xué)成績(jī): ')
    infors['math_score'] = math_score
    age = input('請(qǐng)輸入要添加學(xué)生的年齡: ')
    infors['age'] = age
    stus = yxy_login.get_stus(user_name)
    stus.append(infors)
    yxy_login.save(yxy_login.dict_stus, 'dict_stus.json')
    return stus


4. check_stu.py模塊,查找功能模塊,刪除和修改功能也會(huì)基于此模塊編寫

import yxy_login


def check_all(user_name):
    """
    打印全班所有學(xué)生的信息
    :return:
    """
    stus = yxy_login.get_stus(user_name)
    print('班級(jí)所有學(xué)生信息如下:')
    for stu in stus:
        yxy_login.print_stu(stu)


# def search_stu_name(name: str) -> list:
#     """
#     生成重名列表:根據(jù)姓名查找學(xué)生信息,并將學(xué)生(包括重名的)存入列表
#     :return:
#     """
#     search_list = []
#     name = name.title()
#     # 使用姓名匹配學(xué)生,將重名學(xué)生存入列表
#     for stu in yxy_login.stus:
#         if stu['name'] == name:
#             search_list.append(stu)
#     if not search_list:
#         print('該學(xué)生不在班級(jí)里面')
#
#     return search_list
def search_stu_name(name: str, user_name) -> list:
    """
    生成重名列表:根據(jù)姓名查找學(xué)生信息,并將重名學(xué)生對(duì)應(yīng)在數(shù)據(jù)庫(kù)原列表的下標(biāo)存入列表
    :return:
    """
    stus = yxy_login.get_stus(user_name)
    search_list = []
    name = name.title()
    # 使用姓名匹配學(xué)生,將重名學(xué)生存入列表
    index = 0  # 用來(lái)存放重名學(xué)生在stus列表中的下標(biāo)
    for stu in stus:
        # print(stu)
        if stu['name'] == name:
            search_list.append(index)
        index += 1
    if not search_list:
        print('該學(xué)生不在班級(jí)里面')

    return search_list


def print_stu_list(search_list: list, user_name):
    """
    打印重名學(xué)生信息:根據(jù)按姓名查找返回的結(jié)果列表,打印出學(xué)生的信息
    :param search_list:
    :return:
    """
    stus = yxy_login.get_stus(user_name)
    i = 0
    for index in search_list:
        print('序號(hào):%s ' % (i), end='')
        yxy_login.print_stu(stus[index])
        i += 1


def return_stu_name(user_name):
    """
    輸入學(xué)生名字查找學(xué)生,在重名時(shí),根據(jù)選擇的序號(hào),返回所選擇學(xué)生在數(shù)據(jù)庫(kù)中的元素
    如果找不到,返回空字典
    :return:
    """
    stus = yxy_login.get_stus(user_name)
    name = input('請(qǐng)輸入您要查找的學(xué)生的名字:')
    search_list = search_stu_name(name, user_name)
    if not search_list:
        return {}
    print_stu_list(search_list, user_name)
    num = int(input('請(qǐng)輸入您想選擇的學(xué)生的序號(hào):'))
    index = search_list[num]
    stu = stus[index]
    return stu


def search_stu_num(stu_num: str, user_name) -> dict:
    """
    根據(jù)學(xué)號(hào)查找學(xué)生,并返回在數(shù)據(jù)庫(kù)中的元素,沒(méi)有返回為空
    :param stu_num: 字符串,學(xué)生學(xué)號(hào)
    :return: 學(xué)生對(duì)應(yīng)的字典
    """
    stus = yxy_login.get_stus(user_name)
    se_stu = {}  # 新建字典用來(lái)存放查找結(jié)果
    # 根據(jù)學(xué)號(hào)查找,找到就將結(jié)果賦值給se_stu
    for stu in stus:
        if stu['seq'] == stu_num:
            return stu

    else:
        print('該學(xué)生不在班級(jí)里面')
        return {}


def search_stu(user_name):
    while True:
        print('1.根據(jù)學(xué)生姓名查找')
        print('2.根據(jù)學(xué)生學(xué)號(hào)查找')
        print('3.返回上一級(jí)')
        try:
            step1 = int(input('請(qǐng)輸入您想進(jìn)行的操作: '))

            if step1 == 3:
                break
            elif step1 == 1:
                name = input('請(qǐng)輸入您要查找的學(xué)生的名字:')
                search_list = search_stu_name(name, user_name)
                print_stu_list(search_list, user_name)
            elif step1 == 2:
                stu_num = input('請(qǐng)輸入您要查找的學(xué)生的學(xué)號(hào):')
                stu = search_stu_num(stu_num, user_name)
                yxy_login.print_stu(stu)
            else:
                print('輸入錯(cuò)誤,請(qǐng)重新選擇:')
        except ValueError:
            print('請(qǐng)輸入對(duì)應(yīng)數(shù)字')

# def avg_score():
#     name = input('請(qǐng)輸入要求平均成績(jī)的學(xué)生的姓名: ')
#     name = name.title()
#     index = 0
#     search_dict = {}
#     # 使用姓名匹配學(xué)生,將重名學(xué)生存入字典
#     for stu in yxy_login.stus:
#         if stu['name'] == name:
#             print('name: %s, 學(xué)號(hào): %s,' % (stu['name'], stu['seq']))
#             search_dict[stu['seq']] = index
#         index += 1
#     if not search_dict:
#         print('您所查找的學(xué)生不在班級(jí)里面')
#     elif len(search_dict) == 1:
#         for key in search_dict:
#             index = search_dict[key]
#         se_stu = yxy_login.stus[index]
#         avg = (int(se_stu['en_score']) + int(se_stu['ph_score']) + int(se_stu['art_score']) + int(
#             se_stu['math_score'])) / 4
#         print('您要查詢的學(xué)生的平均成績(jī)?yōu)?.1f' % (avg))
#     else:
#         search_num = input('請(qǐng)輸入您要查詢的以上學(xué)生的學(xué)號(hào)以確認(rèn): ')
#         search_index = search_dict[search_num]
#         se_stu = yxy_login.stus[search_index]
#         avg = (int(se_stu['en_score']) + int(se_stu['ph_score']) + int(se_stu['art_score']) + int(se_stu['math_score']))/4
#         print('您要查詢的學(xué)生的平均成績(jī)?yōu)?.1f' % (avg))


def get_avg(stu: dict):
    avg = (int(stu['en_score']) + int(stu['ph_score']) + int(stu['art_score']) + int(stu['math_score']))/4
    print('該學(xué)生的平均分為:%s' % (avg))
    return avg


def avg_score(user_name):
    while True:
        print('1.根據(jù)學(xué)生姓名查詢平均分')
        print('2.根據(jù)學(xué)生學(xué)號(hào)查詢平均分')
        print('0.返回上一級(jí)')
        step1 = int(input('請(qǐng)輸入您想進(jìn)行的操作: '))
        if step1 == 0:
            break
        elif step1 == 1:
            stu = return_stu_name(user_name)  # 調(diào)用輸入姓名,并選擇序號(hào)后,返回所選擇學(xué)生在數(shù)據(jù)庫(kù)中元素的函數(shù)
            get_avg(stu)
        elif step1 == 2:
            stu_num = input('請(qǐng)輸入您要查找的學(xué)生的學(xué)號(hào):')
            stu = search_stu_num(stu_num, user_name)
            yxy_login.print_stu(stu)
            get_avg(stu)

        else:
            print('輸入錯(cuò)誤,請(qǐng)重新選擇:')


5. delete_stu.py模塊,刪除學(xué)生信息功能模塊

import yxy_login
import check_stu


# def del_from_list(del_stu: dict):
#     """
#     根據(jù)學(xué)生所對(duì)應(yīng)的字典,去班級(jí)學(xué)生列表中刪除學(xué)生
#     :param stu:
#     :return:
#     """
#     stu_num = del_stu['seq']
#     for stu in yxy_login.stus.copy():
#         if stu['seq'] == stu_num:
#             yxy_login.stus.remove(stu)
#             break

def del_stu(user_name):
    """
    刪除指定的學(xué)生
    :return:
    """
    stus = yxy_login.get_stus(user_name)
    while True:
        print('1.根據(jù)名字刪除')
        print('2.根據(jù)學(xué)號(hào)刪除')
        print('3.返回上一級(jí)')
        step1 = int(input('請(qǐng)輸入您想進(jìn)行的操作: '))
        if step1 == 3:
            break
        elif step1 == 1:
            stu = check_stu.return_stu_name(user_name)  # 調(diào)用輸入姓名,并選擇序號(hào)后,返回所選擇學(xué)生在數(shù)據(jù)庫(kù)中元素的函數(shù)
            # print(stu)
            stus.remove(stu)
            yxy_login.save(yxy_login.dict_stus, 'dict_stus.json')
            print('恭喜恭喜恭喜您!刪除成功')
        elif step1 == 2:
            stu_num = input('請(qǐng)輸入您要?jiǎng)h除的學(xué)生的學(xué)號(hào):')
            stu = check_stu.search_stu_num(stu_num, user_name)
            stus.remove(stu)
            yxy_login.save(yxy_login.dict_stus, 'dict_stus.json')
            print('恭喜恭喜恭喜您!刪除成功')
        else:
            print('輸入錯(cuò)誤,請(qǐng)重新選擇:')

6. revise_stu.py模塊,修改學(xué)生信息功能模塊

import yxy_login
import check_stu

def revise_specified(stu: dict):
    """
    輸入指定的學(xué)生在數(shù)據(jù)庫(kù)的元素,并修改指定的值
    :param stu:
    :return:
    """
    while True:
        print('1.修改姓名')
        print('2.修改英語(yǔ)成績(jī)')
        print('3.修改體育成績(jī)')
        print('4.修改美術(shù)成績(jī)')
        print('5.修改數(shù)學(xué)成績(jī)')
        print('6.修改年齡')
        print('0.返回上一級(jí)')
        r_key = int(input('請(qǐng)輸入您想進(jìn)行的操作:'))
        if r_key == 0:
            break
        elif r_key == 1:
            r_key = 'name'
        elif r_key == 2:
            r_key = 'en_score'
        elif r_key == 3:
            r_key = 'ph_score'
        elif r_key == 4:
            r_key = 'art_score'
        elif r_key == 5:
            r_key = 'math_score'
        elif r_key == 6:
            r_key = 'age'
        else:
            print('輸入錯(cuò)誤,請(qǐng)重新輸入: ')
            continue
        r_value = input('請(qǐng)修改所選項(xiàng)的值:')
        if r_key == 'name':
            stu[r_key] = r_value.title()
        else:
            stu[r_key] = r_value
        return stu


def revise_all(stu):
    keys = list(stu)
    for key in keys:
        if key == 'seq':
            break
        value = input('請(qǐng)依次輸入需要修改的學(xué)生信息')
        stu[key] = value

    return stu


def revise_menu(stu):
    while True:
        print('1.修改該學(xué)生全部信息')
        print('2.修改指定項(xiàng)信息')
        print('0.返回上一級(jí)')
        step1 = int(input('請(qǐng)輸入您想進(jìn)行的操作: '))
        if step1 == 0:
            break
        elif step1 == 1:
            revise_all(stu)
            print('恭喜恭喜恭喜您!修改成功')
        elif step1 == 2:
            revise_specified(stu)
            print('恭喜恭喜恭喜您!修改成功')
        else:
            print('輸入錯(cuò)誤,請(qǐng)重新選擇:')


def revise_stu(user_name):
    while True:
        print('1.根據(jù)名字查找需要修改的學(xué)生')
        print('2.根據(jù)學(xué)號(hào)查找需要修改的學(xué)生')
        print('3.返回上一級(jí)')
        step1 = int(input('請(qǐng)輸入您想進(jìn)行的操作: '))
        if step1 == 3:
            break
        elif step1 == 1:
            stu = check_stu.return_stu_name(user_name)  # 調(diào)用輸入姓名,并選擇序號(hào)后,返回所選擇學(xué)生在數(shù)據(jù)庫(kù)中元素的函數(shù)
            revise_menu(stu)
            yxy_login.save(yxy_login.dict_stus, 'dict_stus.json')

        elif step1 == 2:
            stu_num = input('請(qǐng)輸入您要查找的學(xué)生的學(xué)號(hào):')
            stu = check_stu.search_stu_num(stu_num, user_name)
            yxy_login.print_stu(stu)
            revise_menu(stu)
            yxy_login.save(yxy_login.dict_stus, 'dict_stus.json')

        else:
            print('輸入錯(cuò)誤,請(qǐng)重新選擇:')

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,431評(píng)論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,637評(píng)論 3 429
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 178,555評(píng)論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 63,900評(píng)論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,629評(píng)論 6 412
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 55,976評(píng)論 1 328
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,976評(píng)論 3 448
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 43,139評(píng)論 0 290
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,686評(píng)論 1 336
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,411評(píng)論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,641評(píng)論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,129評(píng)論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,820評(píng)論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 35,233評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 36,567評(píng)論 1 295
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,362評(píng)論 3 400
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,604評(píng)論 2 380