1.较上一次更新内容:
- 1.用户数据 (包括学生信息,用户账号信息) 现在可以存储在本地
- 2.添加了教师 (用户) 的登录注册功能
- 3.添加了用户权限控制
2.数据结构:
采用3个文件,分别储存不同的信息,类似于数据库的table.
文件1: sno.json
用于保存上一次学生的学号(方便下次添加学生时,学号的获取),不受删除的影响,
尝试过将此项数据保存在stu.json里面. 加在每一个学生的信息里,每次添加一个学生, 所有的学生信息里这一项数据都同时改变, 但是不知道什么原因会有报错, 于是决定单独存为一个文件, 独立保存.
[0,1,2,3,4]
文件2:stu.json
用于保存系统中所有的学生信息
[
{姓名, 学号, 年龄, 电话, 所属用户(是哪个用户添加的)}
{........................同上.....................}
{........................同上.....................}
]
文件3:tea.json
用于保存系统中所有用户(教师)的信息:
[
{账号1, 密码1}
{账号2, 密码2}
{....................}
]
3.主程序文件: index.py
"""__author__ = Sun Jiankang"""
import apis
def print_stu_info():
"""
打印学生信息
:return:
"""
print('姓名:', all_student[i][key_stu_name], '年龄:', all_student[i][key_stu_age], '电话:', all_student[i][key_stu_tel],
'学号:', all_student[i][key_stu_no])
# 教师
key_tea_account = 'tea_name' # 用户账号(教师姓名)
key_tea_passwd = 'passwd' # 用户密码(教师密码)
# 学生
key_max_sno = 'max_sno' # 存放最后一个学生的学号
key_stu_name = 'stu_name' # 学生姓名
key_stu_no = 'stu_no' # 学生学号
key_stu_tel = 'stu_tel' # 学生电话
key_stu_age = 'stu_age' # 学生年龄
key_tea_account = 'tea_name' # 关联的教师姓名(用户账号)
# max_sno = 0
# sno = 0 # 学号基数
all_teacher = [] # 定义一个空的列表保存教师信息,为了防止第一次操作文件添加数据的时候报错
all_student = [] # 定义一个空的列表保存学生信息.同上
while True:
apis.show_first()
opera = apis.user_input()
# 退出
if opera == 3:
break
# 注册
elif opera == 1:
while True:
try:
all_teacher = apis.read_file('./files/tea.json') # 先将用户信息提取出来
except:
pass
(account, passwd) = apis.show_reg()
content = {key_tea_account: account, key_tea_passwd: passwd}
flag = True
for i in range(len(all_teacher)): # 遍历用户信息,如果有重复的,就不添加.
if all_teacher[i][key_tea_account] == account:
print('用户名已存在,请重新输入!')
flag = False
break
if flag: # 如果用户名没有重复,就添加到文件中.
all_teacher.append(content)
apis.write_file('./files/tea.json', all_teacher)
print('注册成功!')
print(' 请登录')
print('1.注册', '2.登录', '3.退出', sep='\n')
apis.user_input()
break
# 登录
elif opera == 2:
all_teacher = apis.read_file('./files/tea.json') # 先将用户信息提取出来
# print(all_teacher)
while True:
(account, passwd) = apis.login() # 输入登录账号和密码
login_flag = 0
for tea_i in range(len(all_teacher)): # 遍历用户信息,如果账号和密码匹配成功,则登录成功
if all_teacher[tea_i][key_tea_account] == account:
if all_teacher[tea_i][key_tea_passwd] == passwd:
print('登录成功')
login_flag = 1 # 记录是否匹配成功(成功:1,失败:0)
break
if login_flag:
break
else:
print('用户不存在或密码错误请,重新登录')
continue
# 登录成功后进入信息管理系统:
while True:
apis.show_system()
opera = apis.user_input()
if opera == 4:
break
# 添加学生
elif opera == 1:
max_snos = []
# temp_max_sno = 0
while True:
try:
all_student = apis.read_file('./files/stu.json') # 先取出所有学生
except:
pass
(name, age, tel) = apis.insert_stu_info() # 输入要添加的学生信息
max_snos = apis.read_file('./files/sno.json') # 读取存放学号的文件
if len(max_snos) < 1:
max_sno = 1
else:
max_sno = max_snos[len(max_snos)-1] + 1 # 获取上一次添加的学号,并对这次的学号加1
stu_no = 'py1805' + str(max_sno).rjust(3, '0')
max_snos.append(max_sno)
apis.write_file('./files/sno.json', max_snos) # 保存当前学号,写入文件
# 将所有学生信息存入文件
content = {key_stu_name: name, key_stu_age: age, key_stu_tel: tel, key_stu_no: stu_no, key_tea_account: all_teacher[tea_i][key_tea_account]}
all_student.append(content)
apis.write_file('./files/stu.json', all_student)
apis.insert_success() # 写入文件成功,弹窗选择继续添加或者返回上一层
if apis.user_input() == 1:
continue
else:
apis.show_system()
break
# 查找学生
elif opera == 2:
apis.show_search_stu()
opera = apis.user_input()
# 查看当前用户所属的所有学生信息
if opera == 1:
flag = 1
all_student = apis.read_file('./files/stu.json') # 取出所有学生
for i in range(len(all_student)):
if all_student[i][key_tea_account] == all_teacher[tea_i][key_tea_account]:
print_stu_info()
flag = 0
if flag:
print('没有查询到学生!!!!')
# 按姓名查看学生
elif opera == 2:
flag = 1
all_student = apis.read_file('./files/stu.json') # 取出所有学生
input_name = input('请输入要查找的学生姓名>>>')
for i in range(len(all_student)): # 遍历出姓名匹配的学生,并且还要满足条件:是本用户添加的学生
if all_student[i][key_tea_account] == all_teacher[tea_i][key_tea_account] and input_name == all_student[i][key_stu_name]:
print_stu_info()
flag = 0
if flag:
print('没有这个学生')
# 按学号查看学生
elif opera == 3:
all_student = apis.read_file('./files/stu.json') # 取出所有学生
input_sno = input('请输入要查找的学生学号>>>')
for i in range(len(all_student)):
if input_sno == all_student[i][key_stu_no]:
print_stu_info()
# 删除学生
elif opera == 3:
all_student = apis.read_file('./files/stu.json') # 取出所有学生
input_name = input('请输入要删除的学生姓名>>>') # 查找出符合条件的学生
flag = 1
for i in range(len(all_student)):
if all_student[i][key_tea_account] == all_teacher[tea_i][key_tea_account] and input_name == all_student[i][key_stu_name]:
print_stu_info()
flag = 0
if flag:
print('没有这个学生')
continue
value = input('请输入要删除的学生学号>>') # 根据学号删除学生
for i in range(len(all_student)):
if value == all_student[i][key_stu_no]:
del all_student[i]
break
apis.write_file('./files/stu.json', all_student)
else:
print('333')
else:
print('输入错误,请重新输入!')
apis.show_first()
4.####接口文件: apis.py
"""__author__ = Sun Jiankang"""
import json
def show_first():
"""
系统初始界面
:return:
"""
print('----------------------------')
print('| 欢迎进入本系统 |')
print('----------------------------')
print(' 请登录')
print('1.注册', '2.登录', '3.退出', sep='\n')
def user_input():
"""
用户输入数字选项,进行下一步操作
:return: 返回选项编号
"""
value = int(input('请选择要执行的操作>>>'))
return value
def write_file(file_name, content):
"""
导入内容
:param file_name:
:param content:
:return:
"""
with open(file_name, 'w', encoding='utf-8') as f:
json.dump(content, f)
def read_file(filename):
"""
读取文件内容
:param filename:
:param content:
:return:
"""
with open(filename, 'r', encoding='utf-8') as f:
return json.load(f)
def show_reg():
"""
注册界面
:return:
"""
print('-----注册-----')
account = input('请输入账号>>>:')
passwd = input('请输入密码>>>')
return account, passwd
def login():
"""
登录界面
:return:
"""
print('-----登录-----')
account = input('请输入账号>>>:')
passwd = input('请输入密码>>>')
return account, passwd
def show_system():
"""
学生信息管理首页
:return:
"""
print('----------------------------')
print('| 学生信息管理页面 |')
print('----------------------------')
print('1.添加学生', '2.查找学生', '3.删除学生', '4.退出', sep='\n')
def insert_stu_info():
"""
添加学生信息
:return:
"""
name = input('学生姓名>>>')
age = input('年龄>>>')
tel = input('电话>>>')
return name, age, tel
def show_search_stu():
"""
查找学生界面
:return:
"""
print('-----查找学生-----')
print('1.查看所有学生')
print('2.按姓名查找')
print('3.按学号查找')
print('4.返回')
def insert_success():
"""
添加学生成功后打印后续选项
:return:
"""
print('添加成功!')
print('1.继续添加')
print('2.返回')
if __name__ == '__main__':
pass
5.####运行效果: