1. 需求描述
使用python的面向对象做一个简单的学生管理系统。要求如下:
- 展示系统功能,用户可以使用展示的功能实现对学生信息的管理。
- 数据保存到文件,文件格式为data
- 用户可以添加、查询、修改、删除、保存学生信息。
- 查询、修改、删除学生信息时,如果没有对应信息要给出相应提示。
2. 需求分析
- 系统要求使用面向对象编程,考虑系统的角色,可以划分为学生、管理系统两类
- 学生包括编号、姓名、性别、地址等信息。
- 管理系统包括加载数据、保存数据、添加、修改、删除、查询学生信息等功能。
3. 需求实现
3.1 新建程序入口文件 main.py
main方法中,实例化管理系统类,并调用run()方法执行程序。
3.2 新建学生模块 Student.py
- 新建Student类,并初始化编号、姓名、性别、地址等信息
- 添加__all__ = [“Student”] 控制调用范围
- 使用__str__方法,返回学生信息
3.3 新建 管理系统模块 managerSystem.py
- 新建ManagerSystem类,初始化加载学生信息,使用列表保存学生信息
- 新建静态方法system_ui(),构建功能列表
- 新建load_info方法,先以只读打开文件,如果文件不存在,则自动创建。以列表中嵌套字典的方式将数据存储到文件
- 新增save_info方法,将系统运行过程中的学生信息保存到数据文件
- 查询、删除、修改都根据编号操作。
4. 代码实现
4.1 项目层级
4.2 main.py
"""
@Time : 2024/1/3 21:26
@Author :Ceyyen_Koo
@File :main.py
@IDE :PyCharm
@coding: utf-8
@DESC:程序入口
"""
from managerSystem import *
if __name__ == '__main__':
manager_sys = ManagerSystem()
manager_sys.run()
4.3 Student.py
"""
@Time : 2024/1/3 21:27
@Author :Ceyyen_Koo
@File :Student.py
@IDE :PyCharm
@coding: utf-8
@DESC: 定义学生类:包含学号,姓名,性别,手机号,家庭住址等信息
"""
__all__ = ["Student"]
class Student(object):
def __init__(self, stu_id, name, gender, address):
self.stuId = stu_id
self.stuName = name
self.stuGender = gender
self.stuAddress = address
# 打印学生信息
def __str__(self):
return f"{self.stuId},{self.stuName},{self.stuGender},{self.stuAddress}"
if __name__ == "__main__":
student = Student("20230103", '张三', '男', '北京市朝阳区')
print(student)
4.4 managerSystem.py
"""
@Time : 2024/1/3 21:27
@Author :Ceyyen_Koo
@File :managerSystem.py
@IDE :PyCharm
@coding: utf-8
@DESC:定义系统类
"""
from Student import *
class ManagerSystem(object):
def __init__(self):
# 加载学生信息
self.stuList = []
self.load_info()
@staticmethod
def system_ui():
print("--------------------欢迎来到学生管理系统--------------------")
print("1.添加学生信息")
print("2.删除学生")
print("3.修改学生信息")
print("4.查询学生信息")
print("5.显示所有学生信息")
print("6.保存信息")
print("7.退出系统")
def load_info(self):
global f
try:
# 先以只读打开文件,如果文件不存在,则自动创建
f = open("./StudentInfo.data", "r")
except FileNotFoundError:
f = open("./StudentInfo.data", "w")
else:
# 读取数据
data = f.read()
new_list = eval(data)
print(new_list)
self.stuList = [Student(i['stuId'], i['stuName'], i['stuGender'], i['stuAddress']) for i in new_list]
finally:
f.close()
def save_info(self):
f = open("./StudentInfo.data", "w")
# __dict__ 属性 可以查看类中包含哪些属性,以及属性和属性值
new_list = [i.__dict__ for i in self.stuList]
f.write(str(new_list))
f.close()
def addStu(self):
# 用户输入学生信息
stuId = int(input("请输入学生的学号:"))
stuName = str(input("请输入学生的姓名:"))
stuSex = int(input("请输入学生的性别(0代表男,1代表女):"))
stuAdr = str(input("请输入学员的家庭住址:"))
# 创建实例对象
student = Student(stuId, stuName, stuSex, stuAdr)
# 实例对象添加到列表
self.stuList.append(student)
print(self.stuList)
print(student)
def delStu(self):
# 用户输入学员编号
stuId = int(input("请输入要删除的学生的学号:"))
for stu in self.stuList:
if stu.stuId == stuId:
self.stuList.remove(stu)
break
else:
print("没有查询到对应的学生信息")
print(self.stuList)
def modStu(self):
# 用户输入学员编号
stuId = int(input("请输入要修改的学生的学号:"))
for stu in self.stuList:
if stu.stuId == stuId:
# 打印学员信息
print("当前信息:")
print(stu)
stu.stuId = int(input("请输入学生的学号:"))
stu.stuName = str(input("请输入学生的姓名:"))
stu.stuGender = int(input("请输入学生的性别(0代表男,1代表女):"))
stu.stuAddress = str(input("请输入学员的家庭住址:"))
print("修改成功,修改后信息为:")
print(stu)
break
else:
print("没有查询到对应的学生信息")
def selStu(self):
# 用户输入学员编号
stuId = int(input("请输入要查询的学生的学号:"))
for stu in self.stuList:
if stu.stuId == stuId:
# 打印学员信息
print(stu)
else:
print("没有查询到对应的学生信息")
def selAllStu(self):
for stu in self.stuList:
print(stu)
def run(self):
while True:
self.system_ui()
choice = input("请输入对应功能前的数字:")
if choice == "1":
# 添加学生信息
self.addStu()
elif choice == "2":
self.delStu()
elif choice == "3":
self.modStu()
elif choice == "4":
self.selStu()
elif choice == "5":
# 显示所有学生信息
self.selAllStu()
elif choice == "6":
self.save_info()
elif choice == "7":
break