Python实现学生管理系统的代码(JSON模块)
作者:stan Z 发布时间:2022-01-02 07:54:42
标签:Python,学生管理系统,JSON模块
构思
学生管理系统 应该包含老师注册登录 管理学生信息(增删改查)还有数据持久化
因为数据存入JSON文件 增删改查都需要读取和修改文件
所以需要一个读写文件的方法文件 file_manager
密码加密可以用到哈希模块文件 tools
老师和学生的类文件 model
程序入口(主页)文件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/' # 定义一个变量 文件路径
# 读文件的函数
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
"""
# 创建一个老师对象
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 # 导入自己写的读取文件模块
import model
import student_manager
def register():
# 读取文件,查看文件里是否有数据。如果文件不存在,默认是一个字典
data = file_manager.read_json('data.json', {})
while True:
teacher_name = input('请输入账号(3~6位):')
if not 2 <= len(teacher_name) <= 6:
print('账号不符合要求,请重新输入!')
else:
break
if teacher_name in data:
print('注册失败!该账号已经被注册!')
return
while True:
password = input('请输入密码(6~12位):')
if not 6 <= len(password) <= 12:
print('密码不符合要求,请重新输入!')
else:
break
# 用户名密码都已经输入正确以后 将用户名和密码以key:value形式储存
# 可以创建一个teacher对象
t = model.Teacher(teacher_name, password)
data[t.name] = t.password
file_manager.write_json('data.json', data)
def login():
# 读取文件,查看文件里是否有数据。如果文件不存在,默认是一个字典
data = file_manager.read_json('data.json', {})
teacher_name = input('请输入老师账号:')
if teacher_name not in data:
print('登录失败!该账号没有注册!')
return
password = input('请输入密码:')
import tools
if data[teacher_name] == tools.encrypt_password(password):
student_manager.name = teacher_name
print('登录成功')
student_manager.show_manager()
else:
print('密码错误,登陆失败!')
def start():
content = file_manager.read_file('welcome.txt')
while True:
operate = input(content + '\n请选择(1-3):')
if operate == '1':
print('登录')
login()
elif operate == '2':
print('注册')
register()
elif operate == '3':
print('退出')
# break # 把循环退出
# exit(0) # 退出整个程序
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通过json字典里的num来生成
num = int(x['num'])
while True:
s_name = input('请输入学生姓名:')
s_age = input('请输入年龄:')
s_gender = input('请输入性别:')
s_tel = input('请输入电话号码:')
num += 1
# 字符串的zfill方法,在字符串的前面补0
s_id = 'student_id_' + str(num).zfill(3)
# 创建一个Student对象
s = model.Student(s_id, s_name, s_age, s_gender, s_tel)
students.append(s.__dict__)
# 拼接字典
data = {'all_student': students, 'num': len(students)}
# 把数据写入到文件里 以老师名字.json 把data写进去
file_manager.write_json(name + '.json', data)
choice = input('添加成功!\n1.继续\n2.返回\n请选择(1-2):')
if choice == '2':
break
# 显示 查找
def show_student():
choice = input('1.查看所有学生\n2.根据姓名查找\n3.根据学号查找\n其他:返回\n请选择:')
students = file_manager.read_json(name + '.json', {})
all_students = students.get('all_student', []) # get拿列表里的数据,拿不到默认是一个空列表[]
if not all_students:
print('该老师没有学生,请添加学生')
return
if choice == '1': # 查看所有学生
pass
elif choice == '2': # 根据姓名查看
s_name = input('请输入学生的姓名:')
all_students = filter(lambda s: s['name'] == s_name, all_students) # students就只保留了指定名字的学生
elif choice == '3': # 学号查找
s_id = input('请输入学生的学号:')
all_students = filter(lambda s: s['s_id'] == s_id, all_students)
else:
return
if not students:
print('未找到学生')
return
for student in all_students:
print('学号:{s_id},姓名:{name},性别:{gender},年龄{age},电话号码{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('该老师没有学生,请添加学生')
return
modify = input('1.根据姓名修改\n2.根据学号修改\n其他:返回\n请选择:')
if modify == '1':
value = input('请输入要修改的学生名字:')
key = 'name'
elif modify == '2':
value = input('请输入要修改的学生学号:')
key = 's_id'
else:
return
students = list(filter(lambda s: s[key] == value, all_students))
if not all_students:
print('没有找到对应的学生')
return
for i, student in enumerate(students):
print('{xiabiao} 学号:{s_id},姓名:{name},性别:{gender},年龄{age},电话号码{tel}'.format(xiabiao=i, **student))
n = int(input('请输入需要修改的学生的标号(0~{}),q-->返回:'.format(len(students) - 1)))
if not 0 <= n <= len(students):
print('输入的内容错误')
return
all_students.remove(students[n])
students[n]['s_id'] = new_input((students[n]['s_id']), "请输入修改后的学生学号[回车则不修改]:")
students[n]['name'] = new_input((students[n]['name']), "请输入修改后的学生姓名[回车则不修改]:")
students[n]['gender'] = new_input((students[n]['gender']), "请输入修改后的学生性别[回车则不修改]:")
students[n]['age'] = new_input((students[n]['age']), "请输入修改后的学生年龄[回车则不修改]:")
students[n]['tel'] = new_input((students[n]['tel']), "请输入修改后的学生电话号码[回车则不修改]:")
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('该老师没有学生,请添加学生')
return
num = input('1.按照姓名删除\n2.按照学号删除\n其他:返回\n请选择:')
if num == '1':
key = 'name'
value = input('请输入要删除的学生名字:')
elif num == '2':
key = 's_id'
value = input('请输入要删除的学生学号:')
else:
return
students = list(filter(lambda s: s.get(key, '') == value, all_students))
if not students:
print('没有找到对应的学生')
return
for i, student in enumerate(students):
print('{xiabiao} 学号:{s_id},姓名:{name},性别:{gender},年龄{age},电话号码{tel}'.format(xiabiao=i, **student))
n = input('请输入需要删除的学生的标号(0~{}),q-->返回:'.format(len(students) - 1))
if not n.isdigit() or not 0 <= int(n) <= len(students):
print('输入的内容错误')
return
# 将学生从all_students里删除
# all_students.pop(n)
all_students.remove(students[int(n)])
# 更新新的名单
y['all_student'] = all_students
file_manager.write_json(name + '.json', y)
# 显示管理页面
def show_manager():
content = file_manager.read_file('students_page.txt') % name
while True:
print(content)
operate = input('请选择(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('输入错误!')
# 修改时用的input方法
def new_input(old, new):
input_str = input(new)
if len(input_str) > 0:
return input_str
else:
return old
美化文本
通过自己写的读取文件方法可以直接读取文本(类似界面)
welcome.txt
================================
** 欢迎来到学生管理系统**
1. 登 录
2. 注 册
3. 退 出
** **
================================
students_page.txt
================================
❀❀ 欢迎%s老师进入学生管理系统:
1. 添加学生
2. 查看学生
3. 修改学生信息
4. 删除学生
5. 返回
❀❀ ❀❀
================================
执行效果
来源:https://blog.csdn.net/Cantevenl/article/details/115439530
0
投稿
猜你喜欢
- hmac主要应用在身份验证中,它的使用方法是这样的:1. 客户端发出登录请求(假设是浏览器的GET请求)2. 服务器返回一个随机值,并在会话
- 使用python的json模块序列化时间或者其他不支持的类型时会抛异常,例如下面的代码:# -*- coding: cp936 -*-fro
- 每一字符串字符文字有一个字符集和一个校对规则,它不能为空。一个字符串文字可能有一个可选的字符集引介词和COLLATE子句:[_charset
- EXISTS该函数返回集合中第一个元素的索引,如果集合为空,返回NULLNULLNULLCollection.EXISTS(index)CO
- 1,建路由;2,写方法;def fanyi(request): import requests import jso
- 如果没有了解栅格系统是什么,建议看完这篇文章以后再回来。其实有很种 CSS 写法实现栅格系统,很多 CSS 库也都会提供类似的栅格系统实现(
- 1、基本原理访问网站扫码登录页,网站给浏览器返回一个二维码和一个唯一标志KEY浏览器开启定时轮询服务器,确认KEY对应的扫码结果用户使用ap
- IE 的弹窗常用的有两种,不外乎是 window.open 与 window.showModalDialog,前者兼容性好,后者
- 工作时需要取得MySQL中一个表的字段是否存在于是就使用Describe命令来判断mysql_connect(localhost, root
- 虽然现在IE还是主导了整个浏览器的天下,但IE靠的并非是产品设计上的优势,而是依靠windows的力量,因为绝大多数的初级网民认为IE的产品
- ASP(Active Server Page)是Microsoft公司推出的基于PWS(Personal We
- 函数局部变量 全局变量 及其作用域#简单类型(int str等)变量的局部变量与全局变量及其作用域的关系name = "xxx&q
- 代码#!/usr/bin/env python#coding=utf-8import random#生成[0, 1)直接随机浮点数print
- 决定数据类型的第一步是定义所存数数据的分类: 数值型, 字符串型还是临时型等;除了一些特别的并不是那么直观的外, 这通常是很直观的。接下来是
- //创建组件 function createobj() { if (window.ActiveXObject) { return(new A
- 两个并发事务同时访问数据库表相同的行时,可能存在以下三个问题:1、幻想读:事务T1读取一条指定where条件的语句,返回结果集。此时事务T2
- 今天偶然看到“一个有将近两年的div + CSS 开发经验和历史,曾经是Web标准绝对拥趸的同志”在自己的blog上发表放弃div+css的
- 本文实例分析了php5.4传引用时报错问题。分享给大家供大家参考,具体如下:php5.3系列版本以及以前版本,传引用没有什么问题,升级到ph
- 是的,这仅仅是一个PPT文档,由Anna Debenham上传至slideshare。幻灯片的标题叫做《CSS nuggets》,嗯,很好的
- 环境准备Python3.6pip install Django==2.0.1pip install celery==4.1.0pip ins