Python实现学生管理系统的代码(JSON模块)

时间:2021-05-23

构思

学生管理系统 应该包含老师注册登录 管理学生信息(增删改查)还有数据持久化

因为数据存入JSON文件 增删改查都需要读取和修改文件
所以需要一个读写文件的方法文件 file_manager
密码加密可以用到哈希模块文件 tools
老师和学生的类文件 model
程序入口(主页)文件index
核心增删改查文件 student_manager

file_manager.py

"""Project: ClassStudentCreator: 猫猫Create time: 2021-02-25 20:23IDE: PyCharmIntroduction: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: ClassStudentCreator: 猫猫Create time: 2021-02-25 20:24IDE: PyCharmIntroduction:https://blog.csdn.net/Cantevenl/article/details/115439530"""# 加密密码import hashlibdef encrypt_password(passwd, x='zhumaogouniu'): h = hashlib.sha256() h.update(passwd.encode('utf8')) h.update(x.encode('utf8')) return h.hexdigest()

model.py

"""Project: ClassStudentCreator: 猫猫Create time: 2021-02-25 20:24IDE: PyCharmIntroduction: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: ClassStudentCreator: 猫猫Create time: 2021-02-25 20:25IDE: PyCharmIntroduction:https://blog.csdn.net/Cantevenl/article/details/115439530"""import sysimport file_manager # 导入自己写的读取文件模块import modelimport student_managerdef 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: ClassStudentCreator: 猫猫Create time: 2021-02-25 20:26IDE: PyCharmIntroduction:https://blog.csdn.net/Cantevenl/article/details/115439530"""import file_managerimport modelname = ''# 添加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. 返回❀❀ ❀❀================================

执行效果



到此这篇关于Python实现学生管理系统的代码(JSON模块)的文章就介绍到这了,更多相关Python学生管理系统内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章