
文件結(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ù)的操作還是不太熟悉,邏輯多了感覺有些繞。代碼寫的少了吧!