student information management system(新增:數(shù)據(jù)本地化及多用戶管理)

文件結(jié)構(gòu)

dataProcessing.py --> 數(shù)據(jù)讀寫方法的封裝
infoManage.py --> 信息管理(增刪查改)方法的封裝
Interface.py --> 所需頁面的封裝
log --> 登錄與注冊(cè)功能的封裝
main --> 程序主入口即對(duì)各個(gè)方法的調(diào)用
stuInfo --> 保存數(shù)據(jù)的json文件

按書寫順序貼出代碼:

1、main.py

# -*- coding: utf-8 -*-
# @Time    : 2018/7/28 8:39
# @Author  : G.Hope
# @Email   : 1638327522@qq.com
# @File    : main.py
# @Software: PyCharm
"""
1.分析數(shù)據(jù)結(jié)構(gòu)
學(xué)生管理系統(tǒng)管理學(xué)生 ---> 管理的是多個(gè)學(xué)生 ---> 需要容器儲(chǔ)存學(xué)生 ---> 考慮使用那種容器
---> 列表?字典? ---> 系統(tǒng)對(duì)應(yīng)的大的容器是字典 --->字典中的某一個(gè)key對(duì)應(yīng)的值是所有的學(xué)生(用列表作為容器)
--->每一個(gè)學(xué)生是一個(gè)字典
[[學(xué)生],'GHope','123456',123,'描述']
{'student':[學(xué)生],'user_name':'GHope','pass_word':'123456'}
{'student':[學(xué)生1,學(xué)生2,學(xué)生3...],''}

添加多個(gè)用戶管理功能:每一個(gè)登錄的用戶只能查看自己錄入保存的學(xué)生信息,改變數(shù)據(jù)結(jié)構(gòu)。
最外層依然為一個(gè)大字典,里面包含多個(gè)字典,每一個(gè)字典對(duì)應(yīng)一位用戶。使用用戶名作為key值。
此時(shí)需要滿足用戶名唯一的設(shè)置,最外層除了用戶信息外,還應(yīng)該包括版本信息、幫助文檔等一些幫助用戶使用系統(tǒng)的相關(guān)文檔。
所以大致數(shù)據(jù)結(jié)構(gòu)設(shè)置如下:
{'user_name':{'pwd':'root','stu_name':'Tom','stu_id':'py180501','sex':'男’,’score':{'Python':56,'C語言':67,
'國學(xué)基礎(chǔ)':78,'體育':89},'user_name1':{'pwd':'123456','stu_name':'Lucy','stu_id':'py180502','sex':'女’,
’score':{'Python':66,'C語言':57,'國學(xué)基礎(chǔ)':98,'體育':69},'version_info':'V2018.1.1.0','help':''}
"""

"""
因?yàn)樾枰玫降膋ey值比較多,所以在需要用到的相關(guān)模塊中分別聲明為全局變量。
在此只需導(dǎo)入模塊即可。
"""

import Interface
import log
import infoManage

while True:
    Interface.interface_login()
    log_control = int(input('\t請(qǐng)輸入你的選擇:'))
    if log_control == 1:
        log_result = log.login()
        if log_result:
            while True:  # while循環(huán)的嵌套可以實(shí)現(xiàn)多個(gè)用戶之間的切換
                Interface.interface_main()
                main_control = int(input('\t請(qǐng)輸入你的選擇:'))
                if main_control == 1:
                    Interface.interface_main_find()
                    infoManage.stu_inquire(log_result)
                elif main_control == 2:
                    infoManage.stu_add(log_result)
                elif main_control == 3:
                    Interface.interface_main_update()
                    infoManage.stu_update(log_result)
                elif main_control == 4:
                    Interface.interface_main_del()
                    infoManage.stu_del(log_result)
                elif main_control == 5:
                    Interface.interface_main_version()
                    # infoManage.stu_version()
                elif main_control == 6:
                    Interface.interface_main_help()
                    # infoManage.stu_help()
                elif main_control == 7:
                    break
                else:
                    print("請(qǐng)根據(jù)提示,輸入系統(tǒng)可以辨認(rèn)的值?。。?)
        else:
            break
    if log_control == 2:
        if log.logon():
            continue
        break
    if log_control == 3:
        break

2、Interface.py

# -*- coding: utf-8 -*-
# @Time    : 2018/7/28 9:08
# @Author  : G.Hope
# @Email   : 1638327522@qq.com
# @File    : Interface.py
# @Software: PyCharm

#相關(guān)界面設(shè)計(jì)
def interface_login():
    print("++++++++++++++++++++++++++++++++++++++++++++++")
    print("+            學(xué)生信息管理系統(tǒng)                 +")
    print("+                【1】登陸                    +")
    print("+                【2】注冊(cè)                    +")
    print("+                【3】退出                    +")
    print("+++++++++++++++++++++++++++++++++++++++++++++++\n")


def interface_main():
    print("++++++++++++++++++++++++++++++++++++++++++++++")
    print("+                學(xué)生信息管理系統(tǒng)             +")
    print("+                【1】查詢學(xué)生信息            +")
    print("+                【2】添加學(xué)生信息            +")
    print("+                【3】修改學(xué)生信息            +")
    print("+                【4】刪除學(xué)生信息            +")
    print("+                【5】查看版本信息            +")
    print("+                【6】瀏覽幫助文檔            +")
    print("+                【7】退出登陸                +")
    print("++++++++++++++++++++++++++++++++++++++++++++++\n")


def interface_main_find():
    print("+++++++++++++++++++++++++++++++++++++++++++++++")
    print("+                 學(xué)生信息管理系統(tǒng)             +")
    print("+                 【1】按姓名查找              +")
    print("+                 【2】按學(xué)號(hào)查找              +")
    print("+                 【3】查看全部                +")
    print("+                 【4】返回上一級(jí)              +")
    print("+++++++++++++++++++++++++++++++++++++++++++++++\n")


def interface_main_update():
    print("++++++++++++++++++++++++++++++++++++++++++++++")
    print("+               學(xué)生信息管理系統(tǒng)              +")
    print("+               【1】按學(xué)號(hào)修改               +")
    print("+               【2】按姓名修改               +")
    print("+               【3】返回上一級(jí)               +")
    print("++++++++++++++++++++++++++++++++++++++++++++++\n")


def interface_main_del():
    print("++++++++++++++++++++++++++++++++++++++++++++++")
    print("+               學(xué)生信息管理系統(tǒng)              +")
    print("+               【1】按學(xué)號(hào)刪除               +")
    print("+               【2】按姓名刪除               +")
    print("+               【3】返回上一級(jí)               +")
    print("++++++++++++++++++++++++++++++++++++++++++++++\n")


def interface_main_version():
    print("++++++++++++++++++++++++++++++++++++++++++++++")
    print("+          學(xué)生信息管理系統(tǒng)版本信息            +")
    print("+          創(chuàng)建時(shí)間:2018.7-2018.8            +")
    print("+          創(chuàng)建人:GHope                      +")
    print("+          版本號(hào):V2018.1.1.0                +")
    print("++++++++++++++++++++++++++++++++++++++++++++++\n")
    emm = input("請(qǐng)輸入任意鍵返回上一層")

def interface_main_help():
    print("++++++++++++++++++++++++++++++++++++++++++++++++")
    print("+            學(xué)生信息管理系相關(guān)說明              +")
    print("+   本系統(tǒng)僅供學(xué)習(xí)參考使用,如需轉(zhuǎn)載,請(qǐng)注明出處。 +")
    print("+   關(guān)于數(shù)據(jù)結(jié)構(gòu)及其功能的簡單說明:1、本系統(tǒng)為多用+")
    print("+戶管理系統(tǒng)。每個(gè)用戶僅能看到自己錄入的信息。且自己+")
    print("+錄入的信息不被其它人所共享。系統(tǒng)中共享信息僅包括系統(tǒng)+")
    print("+版本信息及此說明文檔。關(guān)于數(shù)據(jù)結(jié)構(gòu)的信息在代碼注釋中+")
    print("+有相關(guān)解釋。如有疑問,請(qǐng)閱讀相關(guān)代碼。如不能解決,請(qǐng)+")
    print("+通過1638327522@qq.com聯(lián)系作者,期待你的反饋。     +")
    print("+++++++++++++++++++++++++++++++++++++++++++++++++\n")
    emm = input("請(qǐng)輸入任意鍵返回上一層")

if __name__ == '__main__':
    pass

3、dataProcessing.py

# -*- coding: utf-8 -*-
# @Time    : 2018/7/28 10:51
# @Author  : G.Hope
# @Email   : 1638327522@qq.com
# @File    : dataProcessing.py
# @Software: PyCharm
import json


def data_read(read_path):
    try:
        with open(read_path, 'r', encoding='utf-8') as f:
            result = json.load(f)
            # print(result)
            return result
    except FileNotFoundError:
        print('文件不存在?。?!')


def data_write(write_path, write_body):
    with open(write_path, 'w', encoding='utf-8') as f:
        json.dump(write_body, f)
        # print('本地信息錄入成功?。。?)


# data_read( './stuInfo')
# 注釋代碼為測(cè)試模塊功能所使用
if __name__ == '__main__':
    pass

4、log.py

# -*- coding: utf-8 -*-
# @Time    : 2018/7/28 8:43
# @Author  : G.Hope
# @Email   : 1638327522@qq.com
# @File    : log.py
# @Software: PyCharm
import dataProcessing

path = './stuInfo'


def login():  # 登錄功能實(shí)現(xiàn)
    date = dataProcessing.data_read(path)
    if not date:
        print("暫無用戶,請(qǐng)注冊(cè)!!!")
        return
    else:
        user_name = input('請(qǐng)輸入用戶名:')
        count = 5
        while True:
            pwd = input("請(qǐng)輸入密碼:")
            if user_name not in date:
                print("輸入的用戶不存在")
                break
            elif pwd == date[user_name]["pwd"]:
                print('登錄成功,請(qǐng)開始你的操作!')
                return user_name
            else:
                count -= 1
            if count > 0:
                print("密碼錯(cuò)誤,請(qǐng)重新輸入。還能輸入%d次" % count)
            else:
                break


def logon():  # 注冊(cè)功能實(shí)現(xiàn)
    data = dataProcessing.data_read(path)
    if not data:
        data = {}
    while True:
        user_name = input("請(qǐng)輸入用戶名:")
        if user_name not in data:
            key = input("請(qǐng)輸入密碼:")
            key2 = input("請(qǐng)?jiān)俅屋斎朊艽a:")
            if key == key2 and key != "":
                data[user_name] = {"pwd": key,"body":{}}
                dataProcessing.data_write(path, data)
                print("注冊(cè)成功")
                break
            elif key == "":
                    print("密碼不能為空,請(qǐng)重新輸入")
            else:
                    print("兩次密碼不相同,請(qǐng)重新輸入密碼")
        else:
            print("該用用戶名已經(jīng)被注冊(cè),請(qǐng)重新輸入")

    return True





if __name__ == '__main__':
    pass

5、infoManage.py

# -*- coding: utf-8 -*-
# @Time    : 2018/7/28 10:05
# @Author  : G.Hope
# @Email   : 1638327522@qq.com
# @File    : infoManage.py
# @Software: PyCharm
import dataProcessing
path = './stuInfo'
data_all = dataProcessing.data_read(path)

def stu_inquire(user_name):
    while True:
        inquire_control = int(input('請(qǐng)輸入你的選擇:'))
        if inquire_control == 4:
            break
        data_current = data_all[user_name]
        if inquire_control == 1:
            inquire_name = input("請(qǐng)輸入你想要查找的姓名:")
            for stu_info in data_current["body"]:
                if inquire_name == stu_info["stu_name"]:
                    print(stu_info)
        elif inquire_control == 2:
            inquire_id = input('請(qǐng)輸入你想查找的學(xué)號(hào):')
            for stu_info in data_current["body"]:
                if inquire_id == stu_info["stu_id"]:
                    print(stu_info)
        elif inquire_control == 3:
            print(data_current)
        else:
            print('請(qǐng)輸入合法的操作提示:')


def stu_add(user_name):
    data_current = data_all[user_name]
    name = input("請(qǐng)輸入添加學(xué)生的姓名:")
    id = input("請(qǐng)輸入添加學(xué)生的學(xué)號(hào):")
    sex = input("請(qǐng)輸入添加學(xué)生的性別:")
    score = {}
    py = input("請(qǐng)輸入該生的python成績:")
    c = input("請(qǐng)輸入該生的C語言成績:")
    Chinaese_base = input("請(qǐng)輸入該生的國學(xué)基礎(chǔ)成績:")
    pe = input("請(qǐng)輸入該生的體育成績:")
    data_current["body"][id] = {"姓名": name, "學(xué)號(hào)": id, "性別": sex, "成績": score}
    data_current["body"][id][score] = {"python成績":py,"C語言成績":c,"國學(xué)基礎(chǔ)成績":Chinaese_base,"體育成績":pe}
    dataProcessing.data_write(path,data_current)
    print('恭喜你,添加成功?。?!')


def stu_update(user_name):
    while True:
        update_control = int(input('請(qǐng)輸入你的選擇:'))
        if update_control == 3:
            break
        data_current = data_all[user_name]
        if update_control == 1:
            update_name = input("請(qǐng)輸入你想要修改的姓名:")
            for stu_info in data_current["body"]:
                if update_name == stu_info["stu_name"]:
                    print(stu_info)
                    if input("你確定要修改這個(gè)學(xué)生的信息嗎?確認(rèn)按y,取消按任意鍵") == "y":
                        name = input("請(qǐng)輸入添加學(xué)生的姓名:")
                        id = input("請(qǐng)輸入添加學(xué)生的學(xué)號(hào):")
                        sex = input("請(qǐng)輸入添加學(xué)生的性別:")
                        score = {}
                        py = input("請(qǐng)輸入該生的python成績:")
                        c = input("請(qǐng)輸入該生的C語言成績:")
                        Chinaese_base = input("請(qǐng)輸入該生的國學(xué)基礎(chǔ)成績:")
                        pe = input("請(qǐng)輸入該生的體育成績:")
                        data_current["body"][update_name] = {"姓名": name, "學(xué)號(hào)": id, "性別": sex, "成績": score}
                        data_current["body"][update_name][score] = {"python成績": py, "C語言成績": c, "國學(xué)基礎(chǔ)成績": Chinaese_base,
                                                           "體育成績": pe}
                        dataProcessing.data_write(path, data_current)
                        print('恭喜你,修改成功?。?!')
        elif update_control == 2:
            update_id = input('請(qǐng)輸入你想要修改的學(xué)號(hào):')
            for stu_info in data_current["body"]:
                if update_id == stu_info["stu_id"]:
                    if input("你確定要修改這個(gè)學(xué)生的信息嗎?確認(rèn)按y,取消按任意鍵") == "y":
                        name = input("請(qǐng)輸入添加學(xué)生的姓名:")
                        id = input("請(qǐng)輸入添加學(xué)生的學(xué)號(hào):")
                        sex = input("請(qǐng)輸入添加學(xué)生的性別:")
                        score = {}
                        py = input("請(qǐng)輸入該生的python成績:")
                        c = input("請(qǐng)輸入該生的C語言成績:")
                        Chinaese_base = input("請(qǐng)輸入該生的國學(xué)基礎(chǔ)成績:")
                        pe = input("請(qǐng)輸入該生的體育成績:")
                        data_current["body"][update_id] = {"姓名": name, "學(xué)號(hào)": id, "性別": sex, "成績": score}
                        data_current["body"][update_id][score] = {"python成績": py, "C語言成績": c, "國學(xué)基礎(chǔ)成績": Chinaese_base,
                                                           "體育成績": pe}
                        dataProcessing.data_write(path, data_current)
                        print('恭喜你,修改成功?。。?)

def stu_del(user_name):
    while True:
        del_control = int(input('請(qǐng)輸入你的選擇:'))
        if del_control == 3:
            break
        data_current = data_all[user_name]
        if del_control == 1:
            del_name = input("請(qǐng)輸入你想要?jiǎng)h除的姓名:")
            for stu_info in data_current["body"]:
                if del_name == stu_info["stu_name"]:
                    print(stu_info)
                    if input("你確定要?jiǎng)h除這個(gè)學(xué)生的信息嗎?確認(rèn)按y,取消按任意鍵") == "y":
                        del data_current["body"][del_name]
                        dataProcessing.data_write(path, data_current)
                        print('恭喜你,修改成功?。?!')
        elif del_control == 2:
            del_id = input('請(qǐng)輸入你想要修改的學(xué)號(hào):')
            for stu_info in data_current["body"]:
                if del_id == stu_info["stu_id"]:
                    if input("你確定要?jiǎng)h除這個(gè)學(xué)生的信息嗎?確認(rèn)按y,取消按任意鍵") == "y":
                        del data_current["body"][del_id]
                        dataProcessing.data_write(path, data_current)
                        print('恭喜你,刪除成功!??!')



# def stu_version():
#     n = input("請(qǐng)輸入任意鍵返回上一層!")


# def stu_help():
#     m = input("請(qǐng)輸入任意鍵返回上一層!")


if __name__ == '__main__':
    pass

總結(jié):整體感覺還是對(duì)數(shù)據(jù)的操作還是不太熟悉,邏輯多了感覺有些繞。代碼寫的少了吧!

?著作權(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),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,922評(píng)論 25 709
  • 流浪是對(duì)宿命的厚養(yǎng)薄葬 可每每試圖披上情衣 卻總能發(fā)覺 是舊的熱 新的涼
    哀慕熙榮閱讀 319評(píng)論 0 1
  • 我是怪異君 為了不熬夜所以加快了寫文案的進(jìn)度 所以昨晚在發(fā)布了最新一期的恐怖故事之后 后臺(tái)交給了趙小姐維護(hù) 今早起...
    怪異君閱讀 1,103評(píng)論 1 47
  • 磅礴, 是詩中才有的云, 透著風(fēng)的水粉色, 拭 淡淡墨色陰沉 黎明 是葉上才有的霜 徹骨融甘露 暖, 初陽微微涼
    墨徽羽閱讀 176評(píng)論 2 1

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