一、学生管理系统需求分析(面向对象)
1、需求分析
使用==面向对象编程思想==完成学员管理系统的开发,具体如下:
① 系统要求:==学员数据存储在文件中==
② 系统功能:==添加学员、删除学员、修改学员信息、查询学员信息、显示所有学员信息、保存学员信息及退出系统==等功能。
2、角色分析
学员对象(姓名、年龄、电话) => 自身属性,打印学生时,还需要输出学生信息 => __str__()
学生管理系统对象(可以实现对学生进行增、删、改、查)
在面向对象编程思想中,必须找到要具体实现操作的实体。
通过系统实现添加学员操作
通过系统实现删除学员操作
....
最终可以得出一个结论:这个通讯管理系统,其主要的实体就是==通讯录管理系统本身==
注意事项
① 为了方便维护代码,一般一个角色一个程序文件
② 项目要有主程序入口,习惯为main.py
3、创建项目
创建类文件 => studentManager.py
创建项目入口文件 => main.py
二、学生管理代码开发
1、学员信息存储代码分析
student_list = [s1, s2, s3]
s1, s2, s3代表由Student学生类创建的对象
学员姓名
学员年龄
学员电话
学员信息(姓名、年龄、电话),可以使用字典来表示。但是我们已经学习了面向对象,其学员信息可以完全用对象来进行实现。
学员(主体) => 属性(姓名、年龄、电话)
2、student.py类文件编写
需求:
学员信息包含:姓名、年龄、电话
添加__str__
魔法方法,方便查看学员对象信息
# 定义一个Student类
class Student():
# 定义魔术方法,用于初始化属性信息
def __init__(self, name, age, mobile):
self.name = name
self.age = age
self.mobile = mobile
# 定义魔术方法,用于打印输出学员信息
def __str__(self):
return f'{self.name}, {self.age}, {self.mobile}'
3、编写studentManager.py代码
studentManager.py
class StudentManager(object):
# 定义__init__魔术方法,用于初始化操作
def __init__(self):
# 定义一个列表,将来用于保存所有学员信息
self.student_list = []
4、学员管理系统具体功能说明
需求:
存储数据的位置:文件(student.data)
-
加载文件数据
-
修改数据后保存到文件
存储数据的形式:列表存储学员对象
系统功能:
① 添加学员信息
② 删除学员信息
③ 修改学员信息
④ 查询学员信息
⑤ 显示所有学员信息
⑥ 保存学员信息
⑦ 退出系统
编写程序代码,用于实现以上的所有功能:
from Student import Student
class StudentManager(object):
# 4、定义一个属性,用于保存所有学员信息 => [s1, s2, s3],注:s1,s2,s3都是Student类对象
def __init__(self):
self.students = []
# 封装一个menu()方法,用于打印系统功能菜单
@staticmethod
def menu():
print('-' * 40)
print('欢迎使用学生管理系统V2.0')
print('【1】添加学员信息')
print('【2】删除学员信息')
print('【3】修改学员信息')
print('【4】查询学员信息')
print('【5】遍历所有学员信息')
print('【6】保存数据到文件')
print('【7】退出系统')
print('-' * 40)
# 5、定义一个add_student()方法,用于实现添加学员信息
def add_student(self):
# 接收要添加的学员信息
name = input('请输入要添加学员的姓名:')
age = int(input('请输入要添加学员的年龄:'))
mobile = input('请输入要添加学员的电话:')
# 把name/age/mobile => 组装成一个学生对象
self.students.append(Student(name, age, mobile)) # [s1, s2, s3]
print('恭喜您,信息已录入成功!')
# 6、定义一个show_students()方法,用于展现所有学员信息
def show_students(self):
for i in self.students: # [s1, s2, s3]
print(i) # print(s1)
# 7、定义一个del_student()方法,用于删除所有学员信息
def del_student(self):
# ① 提供要删除学员的名称
name = input("请输入要删除学员的名称:")
# ② 对整个self.students列表进行遍历,查看哪个学员与name同名
for i in self.students: # [s1, s2, s3]
if i.name == name:
# 找到了这个同学,把整个对象从列表中移除
self.students.remove(i)
print('恭喜您,信息已成功移除!')
break
else:
# ③ 如果在整个循环过程中,都没有执行break,则代表循环正常结束,没有找到同学
print('很抱歉,您要移除的同学信息未找到!')
# 8、定义一个edit_student()方法,用于实现修改学员信息
def edit_student(self):
# ① 提供要修改学员的姓名
name = input('请输入您要修改学员的姓名:')
# ② 遍历整个self.students列表,找是否有与之同名的学员信息
for i in self.students: # [s1, s2, s3] 对象修改属性 s1.属性 = 新的属性值
if i.name == name:
# 找到了要修改的同学,修改其自身属性 => name/age/mobile
i.name = input('请输入修改后的学员姓名:')
i.age = int(input('请输入修改后的学员年龄:'))
i.mobile = input('请输入修改后的学员电话:')
print('恭喜您,信息已修改成功!')
break
else:
print('很抱歉,您要修改同学的信息未找到!')
# 9、定义一个find_student()方法,用于查找学员信息
def find_student(self):
# ① 接收要查找学员的名称
name = input('请输入要查找学员的姓名:')
# ② 对整个self.students列表进行遍历
for i in self.students:
if i.name == name:
print(i) # 直接打印学员信息
break
else:
print('很抱歉,您要查找的同学信息未找到!')
# 10、定义一个save_data_to_file()方法,用于保存数据到文件
def save_data_to_file(self):
# 文件操作三步走 => ① 打开文件 ② 读写文件 ③ 关闭文件
f = open('students.txt', 'w', encoding='utf-8')
data = [i.__dict__ for i in self.students] # [s1, s2, s3] == [{}, {}, {}]
f.write(str(data)) # 特别注意:f.write()只能把字符串类型的数据写入到文件, [s1, s2, s3]
f.close()
print('恭喜您,数据已成功保存!')
# 11、定义一个load_data()方法,用于加载文件中的数据到系统
def load_data(self):
f = open('students.txt', 'r', encoding='utf-8')
content = f.read()
f.close()
if not content:
return
# 如果数据不为空,则替换self.students列表
data = eval(content) # [{'name': '张三', 'age': 23, 'mobile': '10086'}] == [s1]
self.students = [Student(i['name'], i['age'], i['mobile']) for i in data]
# 定义一个启动方法,运行系统
def start(self):
# 加载load_data方法,用于加载文件中的数据到系统
self.load_data()
# 1、给系统添加一个while True,让系统可以一直运行下去
while True:
# 2、打印系统功能菜单 => 输出自身信息,输出可以实现的相关功能
self.menu()
# 3、提示用户输入要执行的功能编号
user_num = int(input('请输入您要执行的功能编号:'))
# 添加if...elif...else多分支判断结构
if user_num == 1:
# 在类中创建一个add_student()方法,用于添加学员
self.add_student()
elif user_num == 2:
# 删除学员功能实现
self.del_student()
elif user_num == 3:
# 修改学员功能实现
self.edit_student()
elif user_num == 4:
self.find_student()
elif user_num == 5:
# 遍历所有学员信息
self.show_students()
elif user_num == 6:
# 保存数据到文件
self.save_data_to_file()
elif user_num == 7:
print('退出系统成功,感谢您使用传智教育学生管理系统V2.0!')
break
else:
print('很抱歉,您输入的编号有误,请重新输入')
main.py
# 导入StudentManager文件中的StudentManager类
# from 模块名称(文件名称) import 类名
from StudentManager import StudentManager
# 定义程序的入口 => 一段模块测试代码
if __name__ == '__main__':
# 启动项目,运行项目中的代码
sm = StudentManager()
sm.start()