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

把登陸注冊與學(xué)生管理分為兩個模塊:

  • 1.界面設(shè)置:

在項目下新建一個文件夾files,在文件夾下新建txt文件main_page.txt設(shè)置登陸界面

代碼如下(可自行設(shè)置界面)

=======================================
??????歡迎來到學(xué)生管理系統(tǒng)????
=======================================
★         1\. 登       陸            ★
★         2\. 注       冊            ★
★         3\. 退       出            ★
=======================================

在新建一個txt文件manager.txt設(shè)置學(xué)生管理系統(tǒng)界面

代碼如下

==========================================
     ?歡迎%s來到學(xué)生管理系統(tǒng):
         ?1\.   添加學(xué)生
         ?2 .  查看學(xué)生
         ?3\.   修改學(xué)生信息
         ?4\.   刪除學(xué)生
         ?5\.   返回
==========================================

  • 2.實現(xiàn)功能

在files文件夾里面新建一個文件夾module步清,在module新建一個py文件file_manager.py以封裝數(shù)據(jù)本地化函數(shù)

代碼如下

import json
# 普通文本文件的讀操作
def text_read(file_name: str):
    """
    普通文本文件的讀操作
    :param file_name: 要讀文件的名字
    :return: 讀到的內(nèi)容
    """
    try:
        with open('./files/' + file_name, 'r', encoding='utf_8') as fp:
            return fp.read()
    except FileNotFoundError:
        print('%s文件不存在' % (file_name))
        return None

def text_write(file_name: str, content):
    """
    將文件寫入指定文件
    :param file_name:文件明
    :param content: 要寫入的內(nèi)容
    :return:
    """
    with open('./files/' + file_name, 'w', encoding='utf-8') as fp:
        fp.write(content)
        return True

def json_read(file_name: str):
    """
    獲取json文件中內(nèi)容
    :param file_name: 文件名
    :return: python類型
    """
    try:
        with open('./files/' + file_name, 'r', encoding='utf-8') as fp:
            return json.load(fp)
    except FileNotFoundError:
        return None

def json_write(file_name: str, content):
    """
    將文件寫入指定文件
    :param file_name:文件明
    :param content: 要寫入的內(nèi)容
    :return:
    """
    try:
        with open('./files/' + file_name, 'w', encoding='utf-8') as fp:
            json.dump(content, fp)
            return True
    except:
        print('寫入錯誤恭应!')
        return False

if __name__ == '__main__':
    pass

在項目下新建py文件main_page(主頁).py封裝函數(shù)實現(xiàn)登陸界面

代碼如下

import files.module.file_manager as file_manager
import student_manager  # 導(dǎo)入學(xué)生管理系統(tǒng)模塊

def register():
    """注冊"""
    # 獲取之前注冊過的所有賬戶信息
    all_user = file_manager.json_read('all_user.json')
    # 控制用戶名輸入
    while 1:
        # 1.輸入賬號和密碼
        user_name = input('請輸入賬號(3-6位):')
        # 2.檢測賬號密碼的位數(shù)是否符合要求
        if not 3 <= len(user_name) <= 6:
             print('賬號有誤')
             continue

        # 2.判斷輸入成功的賬號是否存在
        if user_name in all_user:
            print('該用戶名已經(jīng)被注冊!')
            continue
        break
    # 控制密碼輸入
    while 1:
        # 3.在賬號輸入成功的前提下輸入密碼
        pass_word = input('請輸入密碼(6-12位):')
        # 4.檢測密碼是否合格
        if not 6 <= len(pass_word) <= 12:
            print('密碼有誤,請重新輸入!')
            continue
        break
    # 3.賬號可用,將賬號信息添加到所有的用戶中
    all_user[user_name] = pass_word

    # 4.更新本地文件
    re = file_manager.json_write('all_user.json', all_user)
    if re:
        print('注冊成功!')
    else:
        print('注冊失敗!')
    # 檢測賬號是否已經(jīng)注冊過
    """
    數(shù)據(jù)設(shè)計:用一個字典來保存所有的賬號和密碼 ---> 將所有的賬號和密碼存到一個文件中(json)
    """

def login():
    # 1.輸入賬號和密碼
    user_name = input('請輸入賬號:')
    pass_word = input('請輸入密碼:')
    # 2.檢測賬號是否存在
    # 獲取系統(tǒng)所有用戶信息
    all_user  = file_manager.json_read('all_user.json')
    # 判斷賬號是否存在
    if user_name not in all_user:
        print('賬號不存在!')
        return
    # 賬號存在先通過賬號獲取正確的密碼
    pass_word_old = all_user[user_name]
    if pass_word == pass_word_old:
        # print('登錄成功!')
        student_manager.show_manager_page(user_name)  # 執(zhí)行學(xué)生管理系統(tǒng)
    else:
        print('登陸失敗,密碼錯誤!')

def show_main_page():
    while True:
        # 顯示頁面
        print(file_manager.text_read('main_page.txt'))
        value = input('請選擇(1-3):')
        # 根據(jù)不同的選擇做出不同的反應(yīng)
        if value == '1':
            login()
        elif value == '2':
            register()
        elif value == '3':
            return
        else:
            print('輸入有誤!')

if __name__ == '__main__':
    # 1.顯示登陸注冊頁面
    show_main_page()

在項目下新建py文件student_manager.py封裝并實現(xiàn)學(xué)生管理系統(tǒng)的相應(yīng)功能

代碼如下

import files.module.file_manager as file_manager

# 全局變量:保存當(dāng)前登陸成功的用戶名
current_user = ''

"""
數(shù)據(jù)結(jié)構(gòu):
1.賬號和賬號管理的學(xué)生要一一對應(yīng)
aaa  stu1,stu2
bbb  stu3,stu4

2.一個賬號要管理多個學(xué)生
3.一個學(xué)生要存儲多個信息,每個學(xué)生存儲的信息數(shù)量一樣

方案一:整個管理系統(tǒng)所有的賬號管理的學(xué)生放在一起
{
     賬號1:[{'name':name1,'age':age1,...},....],
     賬號2:[{'name':name2,'age':age2,...},....],
     .......
}
將字典寫到一個json文件中

方案二:一個賬號對應(yīng)一個json文件
每個json文件中就是一個列表:
   [{'name':name1,'age':age1,...},....],
   .......
json文件名和賬號名一一對應(yīng)
aaa.json:
{
     'count:nums',    當(dāng)前系統(tǒng)已經(jīng)添加的學(xué)生數(shù)目
     'all_students':[...]
}
bbb.json:[{001},{002}...]
{
     'count':nums,
     'all_students':[...]
}
"""
# 通過全局變量保存常用key
key_count = 'count'
key_all_students = 'all_students'
key_name = 'name'
key_age = 'age'
key_tel = 'tel'
key_id = 'id'

def get_current_userinfo():  # 獲取當(dāng)前賬號對應(yīng)的json文件中的內(nèi)容
    content = file_manager.json_read(current_user + '.json')
    if not content:
        content = {}
    return content

# 添加學(xué)生

# 添加學(xué)生
def add_student():
    # 獲取當(dāng)前賬號的數(shù)據(jù)
    user_info = get_current_userinfo()

    while 1:
        # 1.輸入學(xué)生信息
        name = input('請輸入學(xué)生姓名:')
        age = input('請輸入學(xué)生的年齡:')
        tel = input('請輸入學(xué)生的電話:')

        # 2.產(chǎn)生學(xué)號
        nummber = user_info.get(key_count, 0)
        nummber += 1
        stu_id = 'py18' + str(nummber).rjust(3, '0')
        # 3.創(chuàng)建學(xué)生
        stu = {key_name: name, key_age: age, key_tel: tel, key_id: stu_id}
        # 4.添加學(xué)生
        all_students = user_info.get(key_all_students, [])
        all_students.append(stu)

        # 5.將新的數(shù)據(jù)更新到文件中
        user_info[key_count] = nummber
        user_info[key_all_students] = all_students
        re = file_manager.json_write(current_user + '.json', user_info)
        if re:
            print('添加成功!')
        else:
            print('添加失敗!')
        # 6.給出選擇
        print('1.繼續(xù)添加')
        print('2.返回')
        value = input('請選擇(1-2):')
        if value == '1':
            continue
        else:
            break

def show_studeng_info(stu):
    print('學(xué)號:%s  姓名:%s  年齡:%s  電話:%s' % (stu[key_id], stu[key_name], stu[key_age], stu[key_tel]))

def find_student_with_name(name, all_students):
    """安姓名查找"""
    find_student = []  # 保存符合條件的所有學(xué)生
    for stu in all_students:
        if stu[key_name] == name:
            find_student.append(stu)
    return find_student

def find_student_with_id(stu_id, all_students):
    """按學(xué)號查找"""
    for stu in all_students:
        if stu[key_id] == stu_id:
            return stu
    return None

# 查找學(xué)生
def find_student():
    """查找學(xué)生"""
    # 1.拿到所有學(xué)生
    user_info = get_current_userinfo()
    all_students = user_info.get(key_all_students, None)
    if not all_students:
        print('當(dāng)前賬號沒有可管理的學(xué)生!')
        return
    while 1:
        print(' 1.查看所有學(xué)生\n 2.按姓名查找\n 3.按學(xué)號查找\n 4.返回')
        value = input('請選擇(1-4):')
        if value == '1':
            for stu in all_students:
                show_manager_page(stu)
        elif value == '2':
            name = input('請輸入姓名:')
            students = find_student_with_name(name, all_students)
            if students:
                for stu in students:
                    show_studeng_info(stu)
            else:
                print('沒有找到學(xué)生%s!' % name)
        elif value == '2':
            stu_id = input('請輸入學(xué)號:')
            stu = find_student_with_id(stu_id, all_students)
            if stu:
                show_studeng_info(stu)
            else:
                print('沒有找到學(xué)號%s對應(yīng)的學(xué)生!' % stu_id)
        else:
            return

# 刪除學(xué)生
def delete_student():
    """刪除學(xué)生"""
    # 1.拿到所有學(xué)生
    user_info = get_current_userinfo()
    all_students = user_info.get(key_all_students, [])
    if not all_students:
        print('當(dāng)前賬號沒有可管理的學(xué)生!')
        return
    while 1:
        # 2.給出選擇
        print('1.按姓名刪除\n2.按學(xué)號刪除\n3.返回')
        value = input('請選擇(1-3):')
        if value == '1':
            name = input('請輸入姓名:')
            students = find_student_with_name(name, all_students)
            # 判斷系統(tǒng)中是否有該學(xué)生
            if not students:
                print('該學(xué)生不存在!')
                continue
            index = 0
            for stu in students:
                print(index, end=' ')
                show_studeng_info(stu)
                index += 1
            print('q 返回上一層')
            del_index = input('請輸入要刪除的學(xué)生標(biāo)號:')
            if del_index == 'q':
                continue
            else:
                # 找到要刪除的學(xué)生對應(yīng)的字典
                del_stu = students[int(del_index)]
                # 從所有的學(xué)生對應(yīng)的列表中去刪除
                all_students.remove(del_stu)
                # 將新的數(shù)據(jù)更新到j(luò)son文件中
                re = file_manager.json_write(current_user+'.json', user_info)
                if re:
                    print('刪除成功!')
                else:
                    print('刪除失敗!')
        elif value == '2':
            del_id = input('輸入要刪除的學(xué)號:')
            del_stu = find_student_with_id(del_id, all_students)
            if not del_stu:
                print('沒有該學(xué)生!')
                continue
            show_studeng_info(del_stu)
            value = input('是否刪除(Y/N):')
            if value == 'Y':
                all_students.remove(del_stu)
            else:
                continue
            re = file_manager.json_write(current_user + '.json', user_info)
            if re:
                print('刪除成功!')
            else:
                print('刪除失敗')
        else:
            return

# 修改學(xué)生
def revise_student():
    # 1.拿到所有學(xué)生
    user_info = get_current_userinfo()
    all_students = user_info.get(key_all_students, [])
    if not all_students:
        print('當(dāng)前賬號沒有可管理的學(xué)生!')
        return
    while 1:
        # 2.查找
        print('1.按姓名查找修改\n2.按學(xué)號刪除查找修改\n3.返回')
        value = input('請選擇:')
        # 按姓名查找
        if value == '1':
            name = input('請輸入要修改的學(xué)生姓名:')
            students = find_student_with_name(name, all_students)
            # 判斷系統(tǒng)中是否有該學(xué)生
            if not students:
                print('該學(xué)生不存在!')
                continue
            index = 0
            for stu in students:
                print(index, end=' ')
                show_studeng_info(stu)
                index += 1
            print('q 返回上一層')
            revise_index = input('請輸入要修改的學(xué)生標(biāo)號:')
            if revise_index == 'q':
                continue
            else:
                while 1:
                    # 找到要修改的學(xué)生對應(yīng)的字典
                    revise_stu = students[int(revise_index)]
                    show_studeng_info(revise_stu)
                    print('1.修改姓名\n2.修改年齡\n3.修改電話號碼\n4.返回')
                    n = input("請選擇(1-4):")
                    if n == '1':
                        name = input('請輸入新的名字:')
                        all_students[key_name] = name
                    if n == '2':
                        age = input('請輸入新的年齡:')
                        all_students[key_age] = age
                    if n == '3':
                        tel = input('請輸入新的電話號碼:')
                        all_students[key_tel] = tel
                    else:
                        return
                    re = file_manager.json_write(current_user + '.json', user_info)
                    if re:
                        print('修改成功!')
                    else:
                        print('修改失敗!')
                    print('是否繼續(xù)修改當(dāng)前學(xué)生信息(Y/N):')
                    n = input('請選擇:')
                    if n == 'Y':
                        continue
                    else:
                        break
        # 按學(xué)號查找
        elif value == '2':
            id = input('請輸入要修改的學(xué)生學(xué)號:')
            students = find_student_with_id(id, all_students)
            if not students:
                print('沒有該學(xué)生!')
                continue
            show_studeng_info(students)
            value = input('是否修改(Y/N):')
            if value == 'Y':
                while 1:
                    print('1.修改姓名\n2.修改年齡\n3.修改電話號碼\n4.返回')
                    n = input("請選擇(1-4):")
                    if n == '1':
                        name = input('請輸入新的名字:')
                        all_students[key_name] = name
                    if n == '2':
                        age = input('請輸入新的年齡:')
                        all_students[key_age] = age
                    if n == '3':
                        tel = input('請輸入新的電話號碼:')
                        all_students[key_tel] = tel
                    else:
                        return
                    re = file_manager.json_write(current_user + '.json', user_info)
                    if re:
                        print('修改成功!')
                    else:
                        print('修改失敗!')
                    print('是否繼續(xù)修改當(dāng)前學(xué)生信息(Y/N):')
                    n = input('請選擇:')
                    if n == 'Y':
                        continue
                    else:
                        break
            else:
                continue
        print('是否繼續(xù)修改(Y/N):')
        n = input('請選擇:')
        if n == 'Y':
            continue
        else:
            break

def show_manager_page(user_name):
    # 保存登陸成功的用戶名
    global current_user
    current_user = user_name
    # 顯示頁面
    while 1:
        content = file_manager.text_read('manager_page.txt')
        print(content % (user_name))

        # 選擇操作
        value = input('請選擇(1-5):')
        if value == 5:
            return
        elif value == '1':
            add_student()
        elif value == '2':
            find_student()
        elif value == '3':
            revise_student()
        elif value == '4':
            delete_student()
        else:
            print('輸入有誤!')

運行結(jié)果可自行檢測

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末稀蟋,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子鸳玩,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異擎场,居然都是意外死亡,警方通過查閱死者的電腦和手機几莽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宅静,“玉大人章蚣,你說我怎么就攤上這事∫碳校” “怎么了纤垂?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長磷账。 經(jīng)常有香客問我峭沦,道長,這世上最難降的妖魔是什么逃糟? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任吼鱼,我火速辦了婚禮,結(jié)果婚禮上绰咽,老公的妹妹穿的比我還像新娘菇肃。我一直安慰自己,他們只是感情好取募,可當(dāng)我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布琐谤。 她就那樣靜靜地躺著,像睡著了一般玩敏。 火紅的嫁衣襯著肌膚如雪斗忌。 梳的紋絲不亂的頭發(fā)上质礼,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天,我揣著相機與錄音织阳,去河邊找鬼眶蕉。 笑死,一個胖子當(dāng)著我的面吹牛陈哑,可吹牛的內(nèi)容都是我干的妻坝。 我是一名探鬼主播,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼惊窖,長吁一口氣:“原來是場噩夢啊……” “哼刽宪!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起界酒,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤圣拄,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后毁欣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體庇谆,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年凭疮,在試婚紗的時候發(fā)現(xiàn)自己被綠了饭耳。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡执解,死狀恐怖寞肖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情衰腌,我是刑警寧澤新蟆,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站右蕊,受9級特大地震影響琼稻,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜饶囚,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一帕翻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧坯约,春花似錦熊咽、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春衫仑,著一層夾襖步出監(jiān)牢的瞬間梨与,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工文狱, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留粥鞋,地道東北人。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓瞄崇,卻偏偏與公主長得像呻粹,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子苏研,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,092評論 2 355

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