赞
踩
使用==面向对象编程思想==完成学员管理系统的开发,具体如下:
① 系统要求:==学员数据存储在文件中==
② 系统功能:==添加学员、删除学员、修改学员信息、查询学员信息、显示所有学员信息、保存学员信息及退出系统==等功能。
学员对象(姓名、年龄、电话) => 自身属性,打印学生时,还需要输出学生信息 => __str__()
学生管理系统对象(可以实现对学生进行增、删、改、查)
在面向对象编程思想中,必须找到要具体实现操作的实体。
通过系统实现添加学员操作
通过系统实现删除学员操作
....
最终可以得出一个结论:这个通讯管理系统,其主要的实体就是==通讯录管理系统本身==
注意事项
① 为了方便维护代码,一般一个角色一个程序文件
② 项目要有主程序入口,习惯为main.py
创建类文件 => studentManager.py
创建项目入口文件 => main.py
student_list = [s1, s2, s3]
s1, s2, s3代表由Student学生类创建的对象
学员姓名
学员年龄
学员电话
学员信息(姓名、年龄、电话),可以使用字典来表示。但是我们已经学习了面向对象,其学员信息可以完全用对象来进行实现。
学员(主体) => 属性(姓名、年龄、电话)
需求:
学员信息包含:姓名、年龄、电话
添加__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}'
'运行
studentManager.py
- class StudentManager(object):
- # 定义__init__魔术方法,用于初始化操作
- def __init__(self):
- # 定义一个列表,将来用于保存所有学员信息
- self.student_list = []
'运行
需求:
存储数据的位置:文件(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()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。