这个只是使用面向对象的方法写的 构思和学生管理系统(JSON模块)是一样的
"""
Project: ClassStudent
Creator: 猫猫
Create time: 2021-03-04 08:18
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_file(file_name):
with open(base_dir + file_name, 'w', encoding='utf8') as file:
pass
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
"""
Project: ClassStudent
Creator: 猫猫
Create time: 2021-03-04 08:20
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()
"""
Project: ClassStudent
Creator: 猫猫
Create time: 2021-03-04 08:18
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, name, age, gender):
self.name = name
self.age = age
self.gender = gender
def __str__(self):
return f'{self.name},{self.age},{self.gender}'
"""
Project: ClassStudent
Creator: 猫猫
Create time: 2021-03-04 12:08
IDE: PyCharm
Introduction:https://blog.csdn.net/Cantevenl/article/details/115439530
"""
# 1.导入管理系统模块
import sys
import file_manager # 导入自己写的读取文件模块
import model
import managerSystem
def register():
# 读取文件,查看文件里是否有数据。如果文件不存在,默认是一个字典
data = file_manager.read_json('data.json', {
})
while True:
teacher_name = input('请输入账号(2~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):
managerSystem.name = teacher_name
print('登录成功')
student_manager= managerSystem.StudentManager()
student_manager.run()
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('输入有误!')
# 2.启动管理系统
# 保证是当前文件运行才启动管理系统 : if -- 创建对象 并且调用run方法
if __name__ == '__main__':
start()
"""
Project: ClassStudent
Creator: 猫猫
Create time: 2021-03-04 16:12
IDE: PyCharm
Introduction:https://blog.csdn.net/Cantevenl/article/details/115439530
"""
import file_manager
from model import *
name = ''
class StudentManager(object):
def __init__(self):
# 存储学院数据 -- 列表
self.student_list = []
# 一.程序入口函数
def run(self):
# 1.加载文件里面的学员数据
self.load_student()
while True:
# 2.显示功能菜单
self.show_menu()
# 3.用户输入目标功能序号
menu_num = input('请输入你需要的功能序号:')
# 4.根据用户输入的序号执行不同的功能
if menu_num == '1':
self.add_student()
elif menu_num == '2':
self.del_student()
elif menu_num == '3':
self.modify_student()
elif menu_num == '4':
self.search_student()
elif menu_num == '5':
self.show_student()
elif menu_num == '6':
self.sava_student()
elif menu_num == '7':
break
else:
print('输入错误')
# 二。系统功能函数
# 2.1 显示功能菜单 ---- 这种方法一般需要使用静态方法
@staticmethod
def show_menu():
content = file_manager.read_file('students_page.txt')
print(content)
# 增加
def add_student(self):
# 1.用户输入信息
name = input('请输入你的姓名:')
age = input('请输入你的年龄:')
gender = input('请输入你的性别:')
# 2. 创建学员对象 -- 类 先导入student模块,在创建对象
student = Student(name, age, gender)
# 3.将该对象添加到学员列表
self.student_list.append(student)
print(self.student_list)
print(student)
# 删除
def del_student(self):
del_name = input('请输入要删除的学生名字:')
# 遍历列表 有的话就删除没有就提示
for i in self.student_list:
if i.name == del_name:
self.student_list.remove(i)
break
else:
print('查无此人')
print(self.student_list)
# 修改
def modify_student(self):
modify_name = input('请输入要修改的学生名字:')
for i in self.student_list:
if i.name == modify_name:
i.name = self.new_input(i.name, '请输入新修改的名字[回车则不修改]:')
i.age = self.new_input(i.age, '请输入新修改的年龄[回车则不修改]:')
i.gender = self.new_input(i.gender, '请输入新修改的性别[回车则不修改]:')
print(f'修改学员信息成功,姓名 {i.name},年龄 {i.age},性别 {i.gender}')
break
else:
print('查无此人')
# 查找
def search_student(self):
search_name = input('请输入想查找的学生名字:')
for i in self.student_list:
if i.name == search_name:
print(f'姓名 {i.name},年龄 {i.age},性别 {i.gender}')
break
else:
print('查无此人')
# 显示全部学生
def show_student(self):
print('姓名\t\t年龄\t性别')
for i in self.student_list:
print(f'{i.name}\t\t{i.age}\t\t{i.gender}')
# 保存学员信息
def sava_student(self):
# 1.打开文件
file = open('files/student.data', 'w')
# 2.数据写入文件
# 2.1 [学员对象] 转换成 [字典]
# 使用列表推导式
new_list = [i.__dict__ for i in self.student_list]
# 2.2 文件写入 字符串数据
file.write(str(new_list))
file.close()
# 加载信息
def load_student(self):
try:
file = open('files/student.data', 'r')
except FileNotFoundError:
file = open('files/student.data', 'w')
else:
# 1.读取数据
data = file.read()
# 2.文件中读取的数据都是字符串且字符串内部为字典数据,
# 故需要转换数据类型再转换字典为对象后存储到学院列表
new_list = eval(data)
# 创建学生类
self.student_list = [Student(i['name'], i['age'], i['gender']) for i in new_list]
finally:
pass
# 3.关闭文件
file.close()
# 重写的input方法
def new_input(self, old, new):
input_str = input(new)
if len(input_str) > 0:
return input_str
else:
return old