最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實(shí)現(xiàn)學(xué)生管理系統(tǒng)的代碼(JSON模塊)

 更新時(shí)間:2021年04月08日 10:34:10   作者:stan Z  
這篇文章主要介紹了Python實(shí)現(xiàn)學(xué)生管理系統(tǒng)的代碼(JSON模塊),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

構(gòu)思

學(xué)生管理系統(tǒng) 應(yīng)該包含老師注冊(cè)登錄 管理學(xué)生信息(增刪改查)還有數(shù)據(jù)持久化

因?yàn)閿?shù)據(jù)存入JSON文件 增刪改查都需要讀取和修改文件
所以需要一個(gè)讀寫文件的方法文件 file_manager
密碼加密可以用到哈希模塊文件 tools
老師和學(xué)生的類文件 model
程序入口(主頁(yè))文件index
核心增刪改查文件 student_manager

file_manager.py

"""
Project: ClassStudent
Creator: 貓貓
Create time: 2021-02-25 20:23
IDE: PyCharm
Introduction:https://blog.csdn.net/Cantevenl/article/details/115439530
"""
base_dir = 'files/'  # 定義一個(gè)變量 文件路徑


# 讀文件的函數(shù)
def read_file(file_name):
    try:
        with open(base_dir + file_name, 'r', encoding='utf8') as file:
            content = file.read()
            return content
    except FileNotFoundError:
        print('文件未找到')


def write_json(file_name, data):
    with open(base_dir + file_name, 'w', encoding='utf8') as file:
        import json
        json.dump(data, file)


def read_json(file_name, default_data):
    try:
        with open(base_dir + file_name, 'r', encoding='utf8') as file:
            import json
            return json.load(file)
    except FileNotFoundError:
        # print('文件未找到')
        return default_data

tools.py

"""
Project: ClassStudent
Creator: 貓貓
Create time: 2021-02-25 20:24
IDE: PyCharm
Introduction:https://blog.csdn.net/Cantevenl/article/details/115439530
"""
# 加密密碼
import hashlib

def encrypt_password(passwd, x='zhumaogouniu'):
    h = hashlib.sha256()
    h.update(passwd.encode('utf8'))
    h.update(x.encode('utf8'))
    return h.hexdigest()

model.py

"""
Project: ClassStudent
Creator: 貓貓
Create time: 2021-02-25 20:24
IDE: PyCharm
Introduction:https://blog.csdn.net/Cantevenl/article/details/115439530
"""
# 創(chuàng)建一個(gè)老師對(duì)象
class Teacher(object):
    def __init__(self, name, password):
        import tools
        self.name = name
        self.password = tools.encrypt_password(password)

class Student(object):
    def __init__(self, s_id, name, age, gender, tel):
        self.s_id = s_id
        self.name = name
        self.age = age
        self.gender = gender
        self.tel = tel

index.py

"""
Project: ClassStudent
Creator: 貓貓
Create time: 2021-02-25 20:25
IDE: PyCharm
Introduction:https://blog.csdn.net/Cantevenl/article/details/115439530
"""
import sys
import file_manager  # 導(dǎo)入自己寫的讀取文件模塊
import model
import student_manager

def register():
    # 讀取文件,查看文件里是否有數(shù)據(jù)。如果文件不存在,默認(rèn)是一個(gè)字典
    data = file_manager.read_json('data.json', {})
    while True:
        teacher_name = input('請(qǐng)輸入賬號(hào)(3~6位):')
        if not 2 <= len(teacher_name) <= 6:
            print('賬號(hào)不符合要求,請(qǐng)重新輸入!')
        else:
            break
    if teacher_name in data:
        print('注冊(cè)失敗!該賬號(hào)已經(jīng)被注冊(cè)!')
        return

    while True:
        password = input('請(qǐng)輸入密碼(6~12位):')
        if not 6 <= len(password) <= 12:
            print('密碼不符合要求,請(qǐng)重新輸入!')
        else:
            break

    # 用戶名密碼都已經(jīng)輸入正確以后 將用戶名和密碼以key:value形式儲(chǔ)存
    # 可以創(chuàng)建一個(gè)teacher對(duì)象
    t = model.Teacher(teacher_name, password)
    data[t.name] = t.password
    file_manager.write_json('data.json', data)

def login():
    # 讀取文件,查看文件里是否有數(shù)據(jù)。如果文件不存在,默認(rèn)是一個(gè)字典
    data = file_manager.read_json('data.json', {})
    teacher_name = input('請(qǐng)輸入老師賬號(hào):')

    if teacher_name not in data:
        print('登錄失敗!該賬號(hào)沒(méi)有注冊(cè)!')
        return
    password = input('請(qǐng)輸入密碼:')
    import tools
    if data[teacher_name] == tools.encrypt_password(password):
        student_manager.name = teacher_name
        print('登錄成功')
        student_manager.show_manager()
    else:
        print('密碼錯(cuò)誤,登陸失敗!')

def start():
    content = file_manager.read_file('welcome.txt')
    while True:
        operate = input(content + '\n請(qǐng)選擇(1-3):')
        if operate == '1':
            print('登錄')
            login()
        elif operate == '2':
            print('注冊(cè)')
            register()
        elif operate == '3':
            print('退出')
            # break   # 把循環(huán)退出
            # exit(0)   # 退出整個(gè)程序
            sys.exit(0)  # 退出程序
        else:
            print('輸入有誤!')

if __name__ == '__main__':
    start()

student_manager.py

"""
Project: ClassStudent
Creator: 貓貓
Create time: 2021-02-25 20:26
IDE: PyCharm
Introduction:https://blog.csdn.net/Cantevenl/article/details/115439530
"""
import file_manager
import model

name = ''


# 添加
def add_student():
    x = file_manager.read_json(name + '.json', {})
    if not x:
        students = []
        num = 0
    else:
        students = x['all_student']
        # s_id通過(guò)json字典里的num來(lái)生成
        num = int(x['num'])
    while True:
        s_name = input('請(qǐng)輸入學(xué)生姓名:')
        s_age = input('請(qǐng)輸入年齡:')
        s_gender = input('請(qǐng)輸入性別:')
        s_tel = input('請(qǐng)輸入電話號(hào)碼:')

        num += 1
        # 字符串的zfill方法,在字符串的前面補(bǔ)0
        s_id = 'student_id_' + str(num).zfill(3)

        # 創(chuàng)建一個(gè)Student對(duì)象
        s = model.Student(s_id, s_name, s_age, s_gender, s_tel)

        students.append(s.__dict__)
        # 拼接字典
        data = {'all_student': students, 'num': len(students)}
        # 把數(shù)據(jù)寫入到文件里 以老師名字.json 把data寫進(jìn)去
        file_manager.write_json(name + '.json', data)
        choice = input('添加成功!\n1.繼續(xù)\n2.返回\n請(qǐng)選擇(1-2):')
        if choice == '2':
            break


# 顯示 查找
def show_student():
    choice = input('1.查看所有學(xué)生\n2.根據(jù)姓名查找\n3.根據(jù)學(xué)號(hào)查找\n其他:返回\n請(qǐng)選擇:')
    students = file_manager.read_json(name + '.json', {})
    
    all_students = students.get('all_student', [])  # get拿列表里的數(shù)據(jù),拿不到默認(rèn)是一個(gè)空列表[]
    if not all_students:
        print('該老師沒(méi)有學(xué)生,請(qǐng)?zhí)砑訉W(xué)生')
        return

    if choice == '1':  # 查看所有學(xué)生
        pass
    elif choice == '2':  # 根據(jù)姓名查看
        s_name = input('請(qǐng)輸入學(xué)生的姓名:')
        all_students = filter(lambda s: s['name'] == s_name, all_students)  # students就只保留了指定名字的學(xué)生
    elif choice == '3':  # 學(xué)號(hào)查找
        s_id = input('請(qǐng)輸入學(xué)生的學(xué)號(hào):')
        all_students = filter(lambda s: s['s_id'] == s_id, all_students)
    else:
        return

    if not students:
        print('未找到學(xué)生')
        return

    for student in all_students:
        print('學(xué)號(hào):{s_id},姓名:{name},性別:{gender},年齡{age},電話號(hào)碼{tel}'.format(**student))


# 修改
def modify_student():
    key = value = ''
    m = file_manager.read_json(name + '.json', {})
    all_students = m.get('all_student', [])

    if not all_students:
        print('該老師沒(méi)有學(xué)生,請(qǐng)?zhí)砑訉W(xué)生')
        return

    modify = input('1.根據(jù)姓名修改\n2.根據(jù)學(xué)號(hào)修改\n其他:返回\n請(qǐng)選擇:')
    if modify == '1':
        value = input('請(qǐng)輸入要修改的學(xué)生名字:')
        key = 'name'

    elif modify == '2':
        value = input('請(qǐng)輸入要修改的學(xué)生學(xué)號(hào):')
        key = 's_id'

    else:
        return

    students = list(filter(lambda s: s[key] == value, all_students))
    if not all_students:
        print('沒(méi)有找到對(duì)應(yīng)的學(xué)生')
        return

    for i, student in enumerate(students):
        print('{xiabiao} 學(xué)號(hào):{s_id},姓名:{name},性別:{gender},年齡{age},電話號(hào)碼{tel}'.format(xiabiao=i, **student))

    n = int(input('請(qǐng)輸入需要修改的學(xué)生的標(biāo)號(hào)(0~{}),q-->返回:'.format(len(students) - 1)))

    if not 0 <= n <= len(students):
        print('輸入的內(nèi)容錯(cuò)誤')
        return

    all_students.remove(students[n])

    students[n]['s_id'] = new_input((students[n]['s_id']), "請(qǐng)輸入修改后的學(xué)生學(xué)號(hào)[回車則不修改]:")
    students[n]['name'] = new_input((students[n]['name']), "請(qǐng)輸入修改后的學(xué)生姓名[回車則不修改]:")
    students[n]['gender'] = new_input((students[n]['gender']), "請(qǐng)輸入修改后的學(xué)生性別[回車則不修改]:")
    students[n]['age'] = new_input((students[n]['age']), "請(qǐng)輸入修改后的學(xué)生年齡[回車則不修改]:")
    students[n]['tel'] = new_input((students[n]['tel']), "請(qǐng)輸入修改后的學(xué)生電話號(hào)碼[回車則不修改]:")
    all_students.append(students[n])
    print(all_students)
    m['all_student'] = all_students
    file_manager.write_json(name + '.json', m)


# 刪除
def delete_student():
    y = file_manager.read_json(name + '.json', {})
    all_students = y.get('all_student', [])
    key = value = ''

    if not all_students:
        print('該老師沒(méi)有學(xué)生,請(qǐng)?zhí)砑訉W(xué)生')
        return

    num = input('1.按照姓名刪除\n2.按照學(xué)號(hào)刪除\n其他:返回\n請(qǐng)選擇:')
    if num == '1':
        key = 'name'
        value = input('請(qǐng)輸入要?jiǎng)h除的學(xué)生名字:')

    elif num == '2':
        key = 's_id'
        value = input('請(qǐng)輸入要?jiǎng)h除的學(xué)生學(xué)號(hào):')
    else:
        return

    students = list(filter(lambda s: s.get(key, '') == value, all_students))
    if not students:
        print('沒(méi)有找到對(duì)應(yīng)的學(xué)生')
        return

    for i, student in enumerate(students):
        print('{xiabiao} 學(xué)號(hào):{s_id},姓名:{name},性別:{gender},年齡{age},電話號(hào)碼{tel}'.format(xiabiao=i, **student))

    n = input('請(qǐng)輸入需要?jiǎng)h除的學(xué)生的標(biāo)號(hào)(0~{}),q-->返回:'.format(len(students) - 1))

    if not n.isdigit() or not 0 <= int(n) <= len(students):
        print('輸入的內(nèi)容錯(cuò)誤')
        return

    # 將學(xué)生從all_students里刪除
    # all_students.pop(n)
    all_students.remove(students[int(n)])

    # 更新新的名單
    y['all_student'] = all_students
    file_manager.write_json(name + '.json', y)


# 顯示管理頁(yè)面
def show_manager():
    content = file_manager.read_file('students_page.txt') % name
    while True:
        print(content)
        operate = input('請(qǐng)選擇(1-5):')
        if operate == '1':
            add_student()
        elif operate == '2':
            show_student()
        elif operate == '3':
            modify_student()
        elif operate == '4':
            delete_student()
        elif operate == '5':
            break
        else:
            print('輸入錯(cuò)誤!')


# 修改時(shí)用的input方法
def new_input(old, new):
    input_str = input(new)

    if len(input_str) > 0:
        return input_str
    else:
        return old

美化文本

通過(guò)自己寫的讀取文件方法可以直接讀取文本(類似界面)

welcome.txt

================================
    ** 歡迎來(lái)到學(xué)生管理系統(tǒng)**

           1. 登    錄
           2. 注    冊(cè)
           3. 退    出
    **                    **
================================

students_page.txt

================================
❀❀ 歡迎%s老師進(jìn)入學(xué)生管理系統(tǒng):

         1.  添加學(xué)生
         2.  查看學(xué)生
         3.  修改學(xué)生信息
         4.  刪除學(xué)生
         5.  返回
❀❀                          ❀❀
================================

執(zhí)行效果

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

到此這篇關(guān)于Python實(shí)現(xiàn)學(xué)生管理系統(tǒng)的代碼(JSON模塊)的文章就介紹到這了,更多相關(guān)Python學(xué)生管理系統(tǒng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python編程pygame模塊實(shí)現(xiàn)移動(dòng)的小車示例代碼

    Python編程pygame模塊實(shí)現(xiàn)移動(dòng)的小車示例代碼

    這篇文章主要介紹了Python編程pygame模塊實(shí)現(xiàn)移動(dòng)的小車示例代碼,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • Django框架驗(yàn)證碼用法實(shí)例分析

    Django框架驗(yàn)證碼用法實(shí)例分析

    這篇文章主要介紹了Django框架驗(yàn)證碼用法,結(jié)合實(shí)例形式分析了Python Django框架驗(yàn)證碼的功能、實(shí)現(xiàn)方法及相關(guān)操作技巧,需要的朋友可以參考下
    2019-05-05
  • python3.7 利用函數(shù)os pandas利用excel對(duì)文件名進(jìn)行歸類

    python3.7 利用函數(shù)os pandas利用excel對(duì)文件名進(jìn)行歸類

    這篇文章主要介紹了python3.7 利用函數(shù)os pandas利用excel對(duì)文件名進(jìn)行歸類,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • 使用Dajngo 通過(guò)代碼添加xadmin用戶和權(quán)限(組)

    使用Dajngo 通過(guò)代碼添加xadmin用戶和權(quán)限(組)

    這篇文章主要介紹了使用Dajngo 通過(guò)代碼添加xadmin用戶和權(quán)限(組),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-07-07
  • python中requests小技巧

    python中requests小技巧

    Requests 使用的是 urllib3,因此繼承了它的所有特性。Requests 支持 HTTP 連接保持和連接池,支持使用 cookie 保持會(huì)話,支持文件上傳,支持自動(dòng)確定響應(yīng)內(nèi)容的編碼,支持國(guó)際化的 URL 和 POST 數(shù)據(jù)自動(dòng)編碼?,F(xiàn)代、國(guó)際化、人性化。
    2017-05-05
  • Python實(shí)現(xiàn)新版正方系統(tǒng)滑動(dòng)驗(yàn)證碼識(shí)別

    Python實(shí)現(xiàn)新版正方系統(tǒng)滑動(dòng)驗(yàn)證碼識(shí)別

    這篇文章主要介紹了基于Python實(shí)現(xiàn)新版正方系統(tǒng)滑動(dòng)驗(yàn)證碼識(shí)別算法和方案,文中示例代碼對(duì)我們的學(xué)習(xí)和工作有一定的幫助,感興趣的可以了解一下
    2021-12-12
  • python使用scapy模塊實(shí)現(xiàn)ping掃描的過(guò)程詳解

    python使用scapy模塊實(shí)現(xiàn)ping掃描的過(guò)程詳解

    這篇文章主要介紹了python使用scapy模塊實(shí)現(xiàn)ping掃描的過(guò)程詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • Python查找算法之分塊查找算法的實(shí)現(xiàn)

    Python查找算法之分塊查找算法的實(shí)現(xiàn)

    這篇文章主要介紹了Python查找算法之分塊查找算法的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • python單元測(cè)試框架pytest介紹

    python單元測(cè)試框架pytest介紹

    這篇文章介紹了python的單元測(cè)試框架pytest,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • django2筆記之路由path語(yǔ)法的實(shí)現(xiàn)

    django2筆記之路由path語(yǔ)法的實(shí)現(xiàn)

    這篇文章主要介紹了django2筆記之路由path語(yǔ)法的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07

最新評(píng)論

日土县| 都匀市| 辽阳县| 姜堰市| 上高县| 安丘市| 永康市| 库车县| 峨山| 乌拉特前旗| 阳山县| 海原县| 南城县| 南华县| 盐山县| 搜索| 临潭县| 铜山县| 山东| 南靖县| 泌阳县| 拉孜县| 桓台县| 阳东县| 五家渠市| 浮山县| 青龙| 肃宁县| 达孜县| 嘉禾县| 肇州县| 沿河| 大荔县| 江陵县| 大田县| 定远县| 肇源县| 綦江县| 尤溪县| 鹤山市| 曲沃县|