Python项目:学生管理系统(手把手教程)

Rasine ·
更新时间:2024-11-13
· 581 次阅读

如需源码,评论区留下邮箱 文章目录如需源码,评论区留下邮箱前言1. 结构搭建index.pyfile_manager.py2. 退出功能实现3. 注册功能实现index.pyfile_manager.pymodel.pytools.py4. 登录功能实现index.pystudent_manager.py5. 添加学生功能实现student_manager.pymodel.py6. 查找学生功能实现student_manager.py7. 删除学生功能实现student_manager.py8. 修改学生功能实现student_manager.py 前言

准备文件students_page.txtwelcome.txt用来显示系统界面。

1. 结构搭建

思路:

创建index.py主程序。 创建file_manager.py用来存放处理文件读写相关的方法,使整个结构清晰。 index.py import file_manager def start(): content = file_manager.read_file('welcome.txt') while 1: operator = input(content + '\n请选择(1-3):') if operator == '1': print('登录') elif operator == '2': print('注册') elif operator == '3': print('退出') else: print('输入有误') if __name__ == '__main__': start() file_manager.py 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('文件未找到') 2. 退出功能实现

可以用3种方法实现,index.py代码如下:

import sys import file_manager def start(): content = file_manager.read_file('welcome.txt') while 1: operator = input(content + '\n请选择(1-3):') if operator == '1': print('登录') elif operator == '2': print('注册') elif operator == '3': # exit(0) # break sys.exit(0) else: print('输入有误') if __name__ == '__main__': start() 3. 注册功能实现

思路:

输入账号、密码并判断合法性。 读取data.json文件,如果文件不存在,默认是一个空字典。 创建一个Teacher类的对象,通过对象将账号、密码保存到字典。这里不创建对象,直接使用data[teacher_name] = password也可以。 将密码加密(创建一个新的模块tools.py)。 index.py import sys import file_manager import model def register(): # 读取文件,查看文件里面是否有数据,如果文件不存在,默认是一个空字典 data = file_manager.read_json('data.json') while 1: teacher_name = input('请输入账号(3~6位):') if not 3 <= len(teacher_name) <= 6: print('账号不符合要求,请重新输入!') else: break if teacher_name in data: print('注册失败,该账户已经注册!') return while 1: password = input('请输入密码(6~12位):') if not 6 <= len(password) <= 12: print('密码不符合要求,请重新输入!') else: break # 账号和密码都已经输入正确后,将数据进行保存 t = model.Teacher(teacher_name, password) data[t.name] = t.password # data[teacher_name] = password file_manager.write_json('data.json', data) def login(): pass def start(): content = file_manager.read_file('welcome.txt') while 1: operator = input(content + '\n请选择(1-3):') if operator == '1': login() elif operator == '2': register() elif operator == '3': # exit(0) # break sys.exit(0) else: print('输入有误') if __name__ == '__main__': start() file_manager.py 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: return default_data model.py import tools class Teacher(object): def __init__(self, name, password): self.name = name self.password = tools.encrypt_password(password) tools.py import hashlib def encrypt_password(passwd, x='asdfgh'): h = hashlib.sha256() h.update(passwd.encode('utf8')) h.update(x.encode('utf8')) return h.hexdigest() 4. 登录功能实现

思路:

读取文件,判断输入的老师账号是否存在。 输入密码,并将输入的密码加密后进行比对,判断密码是否正确。 登录成功后,显示学生管理页面。 index.py import sys import file_manager import model import student_manager def register(): # 读取文件,查看文件里面是否有数据,如果文件不存在,默认是一个空字典 data = file_manager.read_json('data.json') while 1: teacher_name = input('请输入账号(3~6位):') if not 3 <= len(teacher_name) <= 6: print('账号不符合要求,请重新输入!') else: break if teacher_name in data: print('注册失败,该账户已经注册!') return while 1: password = input('请输入密码(6~12位):') if not 6 <= len(password) <= 12: print('密码不符合要求,请重新输入!') else: break # 账号和密码都已经输入正确后,将数据进行保存 t = model.Teacher(teacher_name, password) data[t.name] = t.password # data[teacher_name] = 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.teacher_name = teacher_name student_manager.show_manager() else: print('密码错误,登录失败!') def start(): content = file_manager.read_file('welcome.txt') while 1: operator = input(content + '\n请选择(1-3):') if operator == '1': login() elif operator == '2': register() elif operator == '3': # exit(0) # break sys.exit(0) else: print('输入有误') if __name__ == '__main__': start() student_manager.py import file_manager teacher_name = '' def show_manager(): # 显示学生管理页面 content = file_manager.read_file('students_page.txt').format(teacher_name) while 1: print(content) input('请选择(1~5):') 5. 添加学生功能实现

学生管理系统的数据结构设置:

一个学生信息对应一个字典 整个系统的所有学生:所有学生对应一个列表,列表中的元素全是字典 整个系统:一个字典, 字典中有一个key(all_student),对应的值是所有学生 这个字典需要做数据持久化,将数据存储到json文件中, 文件名就是当前登录的账号名

比如jack.json表示jack老师的所有学生:

{ 'all_student': [ {'name': '张三', 'age': 89, 'tel': '237837293'}, {'name': '张三', 'age': 89, 'tel': '237837293'}, {'name': '张三', 'age': 89, 'tel': '237837293'}, {'name': '张三', 'age': 89, 'tel': '237837293'} ], 'num': 4 }

思路:

输入学生信息 创建一个Student类 将学生信息保存到字典中 把字典写入文件里 student_manager.py import file_manager import model teacher_name = '' def add_student(): """添加学生""" x = file_manager.read_json(teacher_name + '.json') if not x: students = [] num = 0 else: students = x['all_student'] num = int(x['num']) while 1: s_name = input('请输入学生姓名:') s_age = input('请输入学生年龄:') s_gender = input('请输入学生性别:') s_tel = input('请输入学生电话:') num += 1 # zifll()方法,在字符串的前面补0 s_id = 'stu' + str(num).zfill(4) # 创建一个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)} # 把数据写入文件中 file_manager.write_json(teacher_name + '.json', data) choice = input('添加成功!\n1.继续\n2.返回\n请选择(1~2):') if choice == '2': break def show_student(): """查看学生""" pass def modify_student(): """修改学生信息""" pass def delete_student(): """删除学生""" pass def show_manager(): # 显示学生管理页面 content = file_manager.read_file('students_page.txt').format(teacher_name) while 1: print(content) operator = input('请选择(1~5):') if operator == '1': add_student() elif operator == '2': show_student() elif operator == '3': modify_student() elif operator == '4': delete_student() elif operator == '5': break else: print('输入有误!') model.py import tools class Teacher(object): def __init__(self, name, password): 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 6. 查找学生功能实现

思路:

读取文件,查找所有学生,并打印。 按姓名查找。 按学号查找。 student_manager.py import file_manager import model teacher_name = '' def add_student(): """添加学生""" x = file_manager.read_json(teacher_name + '.json') if not x: students = [] num = 0 else: students = x['all_student'] num = int(x['num']) while 1: s_name = input('请输入学生姓名:') s_age = input('请输入学生年龄:') s_gender = input('请输入学生性别:') s_tel = input('请输入学生电话:') num += 1 # zifll()方法,在字符串的前面补0 s_id = 'stu' + str(num).zfill(4) # 创建一个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)} # 把数据写入文件中 file_manager.write_json(teacher_name + '.json', data) choice = input('添加成功!\n1.继续\n2.返回\n请选择(1~2):') if choice == '2': break def show_student(): """查找学生""" key = value = '' x = input('1.查找所有学生\n2.根据姓名查找\n3.根据学号查找\n其他:返回\n请选择:') y = file_manager.read_json(teacher_name + '.json') students = y.get('all_student', []) if not students: print('该老师还没有学员,请添加学员') return if x == '1': pass elif x == '2': value = input('请输入学员姓名:') key = 'name' elif x == '3': value = input('请输入学员的id:') key = 's_id' else: return students = filter(lambda s: s.get(key, '') == value, students) if not students: print('未找到学员') return for student in students: print('学号:{s_id}, 姓名:{name},性别:{gender},年龄:{age}, ☎:{tel}'.format(**student)) def modify_student(): """修改学生信息""" pass def delete_student(): """删除学生""" pass def show_manager(): # 显示学生管理页面 content = file_manager.read_file('students_page.txt').format(teacher_name) while 1: print(content) operator = input('请选择(1~5):') if operator == '1': add_student() elif operator == '2': show_student() elif operator == '3': modify_student() elif operator == '4': delete_student() elif operator == '5': break else: print('输入有误!') 7. 删除学生功能实现

思路:

读取文件。 按姓名删除。 按学号删除。

注意:每个学生信息前面有标号,按照标号修改,就可以不用担心重名了删除哪个学生的问题。

student_manager.py import file_manager import model teacher_name = '' def add_student(): """添加学生""" x = file_manager.read_json(teacher_name + '.json') if not x: students = [] num = 0 else: students = x['all_student'] num = int(x['num']) while 1: s_name = input('请输入学生姓名:') s_age = input('请输入学生年龄:') s_gender = input('请输入学生性别:') s_tel = input('请输入学生电话:') num += 1 # zifll()方法,在字符串的前面补0 s_id = 'stu' + str(num).zfill(4) # 创建一个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)} # 把数据写入文件中 file_manager.write_json(teacher_name + '.json', data) choice = input('添加成功!\n1.继续\n2.返回\n请选择(1~2):') if choice == '2': break def show_student(): """查找学生""" key = value = '' x = input('1.查找所有学生\n2.根据姓名查找\n3.根据学号查找\n其他:返回\n请选择:') y = file_manager.read_json(teacher_name + '.json') students = y.get('all_student', []) if not students: print('该老师还没有学员,请添加学员') return if x == '1': pass elif x == '2': value = input('请输入学员姓名:') key = 'name' elif x == '3': value = input('请输入学员的id:') key = 's_id' else: return students = filter(lambda s: s.get(key, '') == value, students) if not students: print('未找到学员') return for student in students: print('学号:{s_id}, 姓名:{name},性别:{gender},年龄:{age}, ☎:{tel}'.format(**student)) def modify_student(): """修改学生信息""" pass def delete_student(): """删除学生""" y = file_manager.read_json(teacher_name + '.json') all_students = y.get('all_student', []) 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('请输入要删除的学生id:') 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('{x} 学号:{s_id}, 姓名:{name},性别:{gender},年龄:{age}, ☎:{tel}'.format(x=i, **student)) n = input('请输入要删除的学生的标号(0~{}),q-返回:'.format(len(students) - 1)) if not n.isdigit() or not 0 <= int(n) <= len(students) - 1: print('输入的内容不合法') return # 将学生从all_students里删除 all_students.remove(students[int(n)]) y['all_student'] = all_students file_manager.write_json(teacher_name + '.json', y) def show_manager(): # 显示学生管理页面 content = file_manager.read_file('students_page.txt').format(teacher_name) while 1: print(content) operator = input('请选择(1~5):') if operator == '1': add_student() elif operator == '2': show_student() elif operator == '3': modify_student() elif operator == '4': delete_student() elif operator == '5': break else: print('输入有误!') 8. 修改学生功能实现

思路:

读取文件。 按姓名修改。 按学号修改。

注意:每个学生信息前面有标号,按照标号修改,就可以不用担心重名了修改哪个学生的问题。

student_manager.py import file_manager import model teacher_name = '' def add_student(): """添加学生""" x = file_manager.read_json(teacher_name + '.json') if not x: students = [] num = 0 else: students = x['all_student'] num = int(x['num']) while 1: s_name = input('请输入学生姓名:') s_age = input('请输入学生年龄:') s_gender = input('请输入学生性别:') s_tel = input('请输入学生电话:') num += 1 # zifll()方法,在字符串的前面补0 s_id = 'stu' + str(num).zfill(4) # 创建一个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)} # 把数据写入文件中 file_manager.write_json(teacher_name + '.json', data) choice = input('添加成功!\n1.继续\n2.返回\n请选择(1~2):') if choice == '2': break def show_student(): """查找学生""" key = value = '' x = input('1.查找所有学生\n2.根据姓名查找\n3.根据学号查找\n其他:返回\n请选择:') y = file_manager.read_json(teacher_name + '.json') students = y.get('all_student', []) if not students: print('该老师还没有学员,请添加学员') return if x == '1': pass elif x == '2': value = input('请输入学员姓名:') key = 'name' elif x == '3': value = input('请输入学员的id:') key = 's_id' else: return students = filter(lambda s: s.get(key, '') == value, students) if not students: print('未找到学员') return for student in students: print('学号:{s_id}, 姓名:{name},性别:{gender},年龄:{age}, ☎:{tel}'.format(**student)) def modify_student(): """修改学生信息""" y = file_manager.read_json(teacher_name + '.json') all_students = y.get('all_student', []) 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('请输入要修改的学生id:') 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('{x} 学号:{s_id}, 姓名:{name},性别:{gender},年龄:{age}, ☎:{tel}'.format(x=i, **student)) n = input('请输入要修改的学生的标号(0~{}),q-返回:'.format(len(students) - 1)) if not n.isdigit() or not 0 <= int(n) <= len(students) - 1: print('输入的内容不合法') return index = all_students.index(students[int(n)]) students[int(n)]['name'] = input('请输入新的姓名:') students[int(n)]['gender'] = input('请输入新的性别:') students[int(n)]['age'] = input('请输入新的年龄:') students[int(n)]['tel'] = input('请输入新的电话:') all_students[index] = students[int(n)] y['all_student'] = all_students file_manager.write_json(teacher_name + '.json', y) def delete_student(): """删除学生""" y = file_manager.read_json(teacher_name + '.json') all_students = y.get('all_student', []) 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('请输入要删除的学生id:') 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('{x} 学号:{s_id}, 姓名:{name},性别:{gender},年龄:{age}, ☎:{tel}'.format(x=i, **student)) n = input('请输入要删除的学生的标号(0~{}),q-返回:'.format(len(students) - 1)) if not n.isdigit() or not 0 <= int(n) <= len(students) - 1: print('输入的内容不合法') return # 将学生从all_students里删除 all_students.remove(students[int(n)]) y['all_student'] = all_students file_manager.write_json(teacher_name + '.json', y) def show_manager(): # 显示学生管理页面 content = file_manager.read_file('students_page.txt').format(teacher_name) while 1: print(content) operator = input('请选择(1~5):') if operator == '1': add_student() elif operator == '2': show_student() elif operator == '3': modify_student() elif operator == '4': delete_student() elif operator == '5': break else: print('输入有误!')
作者:南枝向暖北枝寒MA



系统 学生管理系统 Python 教程

需要 登录 后方可回复, 如果你还没有账号请 注册新账号