Python实现学生管理系统的完整代码(面向对象)

作者:stan Z 时间:2023-09-11 19:08:55 

前言

这个只是使用面向对象的方法写的 构思和学生管理系统(JSON模块)是一样的

file_manager.py


"""
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

tools.py


"""
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()

model.py


"""
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}'

index.py


"""
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()

managerSystem.py


"""
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

执行效果

Python实现学生管理系统的完整代码(面向对象)
Python实现学生管理系统的完整代码(面向对象)

来源:https://blog.csdn.net/Cantevenl/article/details/115440116

标签:python,学生管理系统
0
投稿

猜你喜欢

  • MySQL批量插入数据脚本

    2024-01-16 13:31:14
  • MySQL日志文件详解

    2024-01-23 14:43:24
  • pip安装tensorflow的坑的解决

    2022-02-07 13:26:32
  • VS2003 SP1发布

    2024-06-05 09:26:10
  • 仅允许指定的机器连接SQL Server服务器

    2010-07-22 19:54:00
  • 教你制作IBM LOGO的方法

    2007-10-23 13:34:00
  • 浅谈Python中os模块及shutil模块的常规操作

    2022-05-02 21:42:50
  • windows环境下tensorflow安装过程详解

    2021-12-10 15:59:34
  • Python使用tkinter模块实现GUI界面的学生信息管理系统流程分步详解

    2022-04-06 18:09:53
  • 如何使用json在前后台进行数据传输实例介绍

    2024-05-03 15:03:56
  • python如何将多个模型的ROC曲线绘制在一张图(含图例)

    2023-06-24 00:28:54
  • Python利用psutil实现获取硬件,网络和进程信息

    2023-08-12 18:37:44
  • python爬虫之Appium爬取手机App数据及模拟用户手势

    2023-12-28 00:10:46
  • Go单元测试工具gomonkey的使用

    2024-05-22 10:19:21
  • 条件CSS的使用[译]

    2009-03-12 12:23:00
  • Python实现简单查找最长子串功能示例

    2023-01-14 01:20:33
  • MySQL连接时出现2003错误的实现

    2024-01-22 17:17:30
  • python manim实现排序算法动画示例

    2021-11-10 10:41:58
  • PHP7正式版测试,性能惊艳!

    2023-09-12 07:41:43
  • 对python中的pop函数和append函数详解

    2021-10-09 09:11:32
  • asp之家 网络编程 m.aspxhome.com