day19 课程(面向对象开发学员管理系统 & dict方法)
课程:https://www.bilibili.com/video/BV1o4411M71o?spm_id_from=333.788.videopod.episodes&p=351
19.1 章节介绍
1.了解面向对象开发过程中类内部功能的分析方法
2.了解常用系统功能
(1)添加
(2)删除
(3)修改
(4)查询
19.2 介绍系统需求
使用面向对象编程思想完成学员管理系统的开发,具体如下:
(1)系统要求:学员数据存储在文件中
(2)系统功能:添加学员、删除学员、修改学员信息、查询学员信息、显示所有学员信息、保存学员信息及退出系统等功能
19.3 准备程序文件
19.3.1 分析
角色分析:
(1)学员角色登录
(2)管理系统
工作中注意事项:
(1)为了方便维护代码,一般一个角色一个程序文件
(2)项目要有主程序入口,习惯为 main.py
基于以上,需要 3 个文件:即 学员角色、管理角色、主程序
19.3.2 创建程序文件
1.先创建项目目录,例如:StudentManagerSystem
2.再创建程序文件如下:
(1)程序入口文件:main.py
(2)学员文件:student.py
(3)管理系统文件:managerSystem.py
19.4 定义学员类
需求:
(1)学员信息包含:姓名、性别、手机号
(2)添加 __str__ 魔法方法,方便查看学员对象信息
# student.py 文件 # 定义学员类 传参:姓名、性别、手机号 class Student(object): def __init__(self, name, gender, phone): self.name = name self.gender = gender self.phone = phone def __str__(self): return f"{self.name} {self.gender} {self.phone}" # 测试使用 if __name__ == '__main__': test = Student('张三', '男', '123456') print(test) ------------------------------------------------ 执行后 C:\Users\马俊南\AppData\Local\Programs\Python\Python37\python.exe D:\Pycharm\code\day19\StudentManagerSystem\student.py 张三 男 123456 Process finished with exit code 0
19.5 了解管理系统的需求
需求:
1.存储数据的位置:文件(student.data)
(1)加载文件数据
(2)修改数据后保存到文件
2.存储数据的形式:列表存储学员对象,列表中存储字典
3.系统功能:
(1)添加学员
(2)删除学员
(3)修改学员
(4)查询学员信息
(5)显示所有学员信息
(6)保存学员信息
19.6 定义管理系统类
# managerSystem.py 文件 class StudentManager(object): def __init__(self): self.student_list = [] # 存储学员数据信息所用的列表
19.7 管理系统框架需求和步骤
需求:系统功能循环使用,用户输入不同的功能序号执行不同的功能
步骤:
1.定义程序入口函数
(1)加载数据
(2)显示功能菜单
(3)用户输入功能序号
(4)根据用户输入的功能序号执行不同的功能
2.定义系统功能函数,添加、删除学员等
19.8 管理系统框架之程序入口函数
# managerSystem.py 文件 class StudentManager(object): def __init__(self): self.student_list = [] # 存储学员数据信息所用的列表 def run(self): # 1 程序入口函数 # 1.1 加载文件里面的学员数据 while True: # 1.2 显示功能菜单 # 1.3 用户输入目标功能序号 menu_num = int(input("请输入您要选择的功能序号: ")) # int 转换整型类型 # 1.4 根据用户输入的序号执行不同的功能 if menu_num == 1: # 添加学员 pass elif menu_num == 2: # 删除学员 pass elif menu_num == 3: # 修改学员信息 pass elif menu_num == 4: # 查询学员信息 pass elif menu_num == 5: # 显示所有学员信息 pass elif menu_num == 6: # 保存学员信息 pass elif menu_num == 7: # 退出系统 break
19.9 管理系统框架之定义系统功能函数
# managerSystem.py 文件 class StudentManager(object): def __init__(self): self.student_list = [] # 存储学员数据信息所用的列表 def run(self): # 1 程序入口函数 # 1.1 加载文件里面的学员数据 self.load_student() while True: # 1.2 显示功能菜单 self.show_menu() # 1.3 用户输入目标功能序号 menu_num = int(input("请输入您要选择的功能序号: ")) # int 转换整型类型 # 1.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.save_student() elif menu_num == 7: # 退出系统 break # 2.1 显示功能菜单 打印序号的功能对应关系 -- 静态方法 @staticmethod def show_menu(): print("请选择如下功能: ") print("1.添加学员") print("2.删除学员") print("3.修改学员信息") print("4.查询学员信息") print("5.显示所有学员信息") print("6.保存学员信息") print("7.退出系统") # 2.2 添加学员 def add_student(self): print("添加学员") # 2.3 删除学员 def del_student(self): print("删除学员") # 2.4 修改学员信息 def modify_student(self): print("修改学员信息") # 2.5 查询学员信息 def search_student(self, name): print("查询学员信息") # 2.6 显示所有学员信息 def show_student(self): print("显示所有学员信息") # 2.7 保存学员信息 def save_student(self): print("保存学员信息") # 2.8 加载学员信息 def load_student(self): print("加载学员信息")
19.10 程序入口文件功能实现
# main.py 文件 # 1 导入 managerSystem 模块 from managerSystem import * # managerSystem模块名 # 2 启动学员管理系统 if __name__ == '__main__': # 当前文件运行时 manager = StudentManager() # 基于管理类创建对象 managerSystem类名 manager.run() # 调用管理运行的方法 ------------------------------------------------ 执行后 C:\Users\马俊南\AppData\Local\Programs\Python\Python37\python.exe D:\Pycharm\code\day19\StudentManagerSystem\main.py 加载学员信息 请选择如下功能: 1.添加学员 2.删除学员 3.修改学员信息 4.查询学员信息 5.显示所有学员信息 6.保存学员信息 7.退出系统 请输入您要选择的功能序号: 6 保存学员信息 请选择如下功能: 1.添加学员 2.删除学员 3.修改学员信息 4.查询学员信息 5.显示所有学员信息 6.保存学员信息 7.退出系统 请输入您要选择的功能序号: 7 Process finished with exit code 0
19.11 添加学员功能
需求:用户输入学员姓名、性别、手机号,将学员添加到系统
步骤:
1.用户输入姓名、性别、手机号
2.创建该学员对象
3.将该学员对象添加到列表
# managerSystem.py 文件 from student import * # 3.2 导入学员模块 基于类创建对象 class StudentManager(object): def __init__(self): self.student_list = [] # 存储学员数据信息所用的列表 def run(self): # 1 程序入口函数 # 1.1 加载文件里面的学员数据 self.load_student() while True: # 1.2 显示功能菜单 self.show_menu() # 1.3 用户输入目标功能序号 menu_num = int(input("请输入您要选择的功能序号: ")) # int 转换整型类型 # 1.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.save_student() elif menu_num == 7: # 退出系统 break # 2.1 显示功能菜单 打印序号的功能对应关系 -- 静态方法 @staticmethod def show_menu(): print("请选择如下功能: ") print("1.添加学员") print("2.删除学员") print("3.修改学员信息") print("4.查询学员信息") print("5.显示所有学员信息") print("6.保存学员信息") print("7.退出系统") # 2.2 添加学员 def add_student(self): # 3.1 用户输入姓名、性别、手机号 name = input("请输入您的姓名: ") gender = input("请输入您的性别: ") tel = input("请输入您的手机号: ") # 3.2 创建学员对象 student = Student(name, gender, tel) # 基于类创建对象传入实参 # 3.3 将该对象添加到学员列表 self.student_list.append(student) print(self.student_list) # 打印仅测试时使用 print(student) # 2.3 删除学员 def del_student(self): print("删除学员") # 2.4 修改学员信息 def modify_student(self): print("修改学员信息") # 2.5 查询学员信息 def search_student(self): print("查询学员信息") # 2.6 显示所有学员信息 def show_student(self): print("显示所有学员信息") # 2.7 保存学员信息 def save_student(self): print("保存学员信息") # 2.8 加载学员信息 def load_student(self): print("加载学员信息")
# 1 导入 managerSystem 模块 from managerSystem import * # managerSystem模块名 # 2 启动学员管理系统 if __name__ == '__main__': # 当前文件运行时 manager = StudentManager() # 基于管理类创建对象 managerSystem类名 manager.run() # 调用管理运行的方法 ------------------------------------------------ 执行后 C:\Users\马俊南\AppData\Local\Programs\Python\Python37\python.exe D:\Pycharm\code\day19\StudentManagerSystem\main.py 加载学员信息 请选择如下功能: 1.添加学员 2.删除学员 3.修改学员信息 4.查询学员信息 5.显示所有学员信息 6.保存学员信息 7.退出系统 请输入您要选择的功能序号: 1 请输入您的姓名: zhangsan 请输入您的性别: 男 请输入您的手机号: 111 [<student.Student object at 0x000001EF9000E278>] zhangsan 男 111 请选择如下功能: 1.添加学员 2.删除学员 3.修改学员信息 4.查询学员信息 5.显示所有学员信息 6.保存学员信息 7.退出系统 请输入您要选择的功能序号: 7 Process finished with exit code 0
19.12 删除学员功能
需求:用户输入目标学员姓名,如果学员存在
步骤:
1.用户输入目标学员姓名
2.遍历学员数据列表,如果用户输入的学员姓名存在则删除,否则则提示该学员不存在
# managerSystem.py 文件 from student import * # 3.2 导入学员模块 基于类创建对象 class StudentManager(object): def __init__(self): self.student_list = [] # 存储学员数据信息所用的列表 def run(self): # 1 程序入口函数 # 1.1 加载文件里面的学员数据 self.load_student() while True: # 1.2 显示功能菜单 self.show_menu() # 1.3 用户输入目标功能序号 menu_num = int(input("请输入您要选择的功能序号: ")) # int 转换整型类型 # 1.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.save_student() elif menu_num == 7: # 退出系统 break # 2.1 显示功能菜单 打印序号的功能对应关系 -- 静态方法 @staticmethod def show_menu(): print("请选择如下功能: ") print("1.添加学员") print("2.删除学员") print("3.修改学员信息") print("4.查询学员信息") print("5.显示所有学员信息") print("6.保存学员信息") print("7.退出系统") # 2.2 添加学员 def add_student(self): # 3.1 用户输入姓名、性别、手机号 name = input("请输入您的姓名: ") gender = input("请输入您的性别: ") tel = input("请输入您的手机号: ") # 3.2 创建学员对象 student = Student(name, gender, tel) # 基于类创建对象传入实参 # 3.3 将该对象添加到学员列表 self.student_list.append(student) print(self.student_list) # 打印仅测试时使用 print(student) # 2.3 删除学员 def del_student(self): # 4.1 用户输入目标学员姓名 del_name = input("请输入您要删除学员的姓名: ") # 4.2 遍历学员数据列表,如果用户输入的学员姓名存在则删除,否则则提示该学员不存在 for student in self.student_list: # 遍历列表查询学员 if student.name == del_name: self.student_list.remove(student) break # 删除后面不在执行查找, 打破循环 else: # 查不到执行 print("查无此人") print(self.student_list) # 打印仅测试时使用 # 2.4 修改学员信息 def modify_student(self): print("修改学员信息") # 2.5 查询学员信息 def search_student(self): print("查询学员信息") # 2.6 显示所有学员信息 def show_student(self): print("显示所有学员信息") # 2.7 保存学员信息 def save_student(self): print("保存学员信息") # 2.8 加载学员信息 def load_student(self): print("加载学员信息")
# main.py 文件 # 1 导入 managerSystem 模块 from managerSystem import * # managerSystem模块名 # 2 启动学员管理系统 if __name__ == '__main__': # 当前文件运行时 manager = StudentManager() # 基于管理类创建对象 managerSystem类名 manager.run() # 调用管理运行的方法 ------------------------------------------------ 执行后 C:\Users\马俊南\AppData\Local\Programs\Python\Python37\python.exe D:\Pycharm\code\day19\StudentManagerSystem\main.py 加载学员信息 请选择如下功能: 1.添加学员 2.删除学员 3.修改学员信息 4.查询学员信息 5.显示所有学员信息 6.保存学员信息 7.退出系统 请输入您要选择的功能序号: 1 请输入您的姓名: zhangsan 请输入您的性别: 男 请输入您的手机号: 111 [<student.Student object at 0x000001C1CAB2E198>] zhangsan 男 111 请选择如下功能: 1.添加学员 2.删除学员 3.修改学员信息 4.查询学员信息 5.显示所有学员信息 6.保存学员信息 7.退出系统 请输入您要选择的功能序号: 2 请输入您要删除学员的姓名: lisi 查无此人 [<student.Student object at 0x000001C1CAB2E198>] 请选择如下功能: 1.添加学员 2.删除学员 3.修改学员信息 4.查询学员信息 5.显示所有学员信息 6.保存学员信息 7.退出系统 请输入您要选择的功能序号: 2 请输入您要删除学员的姓名: zhangsan [] 请选择如下功能: 1.添加学员 2.删除学员 3.修改学员信息 4.查询学员信息 5.显示所有学员信息 6.保存学员信息 7.退出系统 请输入您要选择的功能序号: 7 Process finished with exit code 0
19.13 修改学员功能
需求:用户输入目标学员姓名,如果学员存在则修改该学员信息
步骤:
1.用户输入目标学员姓名
2.遍历学员数据列表,如果用户输入的学员姓名存在则修改学员的姓名、性别、手机号数据,否则则提示该学员不存在
# managerSystem.py 文件 from student import * # 3.2 导入学员模块 基于类创建对象 class StudentManager(object): def __init__(self): self.student_list = [] # 存储学员数据信息所用的列表 def run(self): # 1 程序入口函数 # 1.1 加载文件里面的学员数据 self.load_student() while True: # 1.2 显示功能菜单 self.show_menu() # 1.3 用户输入目标功能序号 menu_num = int(input("请输入您要选择的功能序号: ")) # int 转换整型类型 # 1.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.save_student() elif menu_num == 7: # 退出系统 break # 2.1 显示功能菜单 打印序号的功能对应关系 -- 静态方法 @staticmethod def show_menu(): print("请选择如下功能: ") print("1.添加学员") print("2.删除学员") print("3.修改学员信息") print("4.查询学员信息") print("5.显示所有学员信息") print("6.保存学员信息") print("7.退出系统") # 2.2 添加学员 def add_student(self): # 3.1 用户输入姓名、性别、手机号 name = input("请输入您的姓名: ") gender = input("请输入您的性别: ") tel = input("请输入您的手机号: ") # 3.2 创建学员对象 student = Student(name, gender, tel) # 基于类创建对象传入实参 # 3.3 将该对象添加到学员列表 self.student_list.append(student) print(self.student_list) # 打印仅测试时使用 print(student) # 2.3 删除学员 def del_student(self): # 4.1 用户输入目标学员姓名 del_name = input("请输入您要删除学员的姓名: ") # 4.2 遍历学员数据列表,如果用户输入的学员姓名存在则删除,否则则提示该学员不存在 for student in self.student_list: # 遍历列表查询学员 if student.name == del_name: self.student_list.remove(student) break # 删除后面不在执行查找, 打破循环 else: # 查不到执行 print("查无此人") print(self.student_list) # 打印仅测试时使用 # 2.4 修改学员信息 def modify_student(self): # 5.1 用户输入目标学员姓名 modify_name = input("请输入您要修改学员的姓名: ") # 5.2 遍历学员数据列表,如果用户输入的学员姓名存在则修改学员的姓名、性别、手机号数据,否则则提示该学员不存在 for student in self.student_list: # 遍历列表查询学员 if student.name == modify_name: # 查到修改学员姓名 student.name = input("请输入您要修改学员的姓名: ") student.gender = input("请输入您要修改学员的性别: ") student.tel = input("请输入您要修改学员的手机号: ") print(f"修改学员信息成功, 姓名: {student.name}, 性别: {student.gender},手机号: {student.tel}") break # 修改后面不在执行查找, 打破循环 else: # 查不到执行 print("查无此人") print(self.student_list) # 打印仅测试时使用 # 2.5 查询学员信息 def search_student(self): print("查询学员信息") # 2.6 显示所有学员信息 def show_student(self): print("显示所有学员信息") # 2.7 保存学员信息 def save_student(self): print("保存学员信息") # 2.8 加载学员信息 def load_student(self): print("加载学员信息")
# main.py 文件 # 1 导入 managerSystem 模块 from managerSystem import * # managerSystem模块名 # 2 启动学员管理系统 if __name__ == '__main__': # 当前文件运行时 manager = StudentManager() # 基于管理类创建对象 managerSystem类名 manager.run() # 调用管理运行的方法 ------------------------------------------------ 执行后 C:\Users\马俊南\AppData\Local\Programs\Python\Python37\python.exe D:\Pycharm\code\day19\StudentManagerSystem\main.py 加载学员信息 请选择如下功能: 1.添加学员 2.删除学员 3.修改学员信息 4.查询学员信息 5.显示所有学员信息 6.保存学员信息 7.退出系统 请输入您要选择的功能序号: 1 请输入您的姓名: zhangsan 请输入您的性别: nan 请输入您的手机号: 111 [<student.Student object at 0x000002331280E278>] zhangsan nan 111 请选择如下功能: 1.添加学员 2.删除学员 3.修改学员信息 4.查询学员信息 5.显示所有学员信息 6.保存学员信息 7.退出系统 请输入您要选择的功能序号: 3 请输入您要修改学员的姓名: lisi 查无此人 [<student.Student object at 0x000002331280E278>] 请选择如下功能: 1.添加学员 2.删除学员 3.修改学员信息 4.查询学员信息 5.显示所有学员信息 6.保存学员信息 7.退出系统 请输入您要选择的功能序号: 3 请输入您要修改学员的姓名: zhangsan 请输入您要修改学员的姓名: 张三 请输入您要修改学员的性别: 男 请输入您要修改学员的手机号: 110 修改学员信息成功, 姓名: 张三, 性别: 男,手机号: 110 [<student.Student object at 0x000002331280E278>] 请选择如下功能: 1.添加学员 2.删除学员 3.修改学员信息 4.查询学员信息 5.显示所有学员信息 6.保存学员信息 7.退出系统 请输入您要选择的功能序号: 7 Process finished with exit code 0
19.14 查询学员信息
需求:用户输入目标学员姓名,如果学员存在则打印该学员信息
步骤:
1.用户输入目标学员姓名
2.遍历学员数据列表,如果用户输入的学员姓名存在则打印学员信息,否则提示该学员不存在
........ # 2.5 查询学员信息 def search_student(self): # 6.1 用户输入目标学员姓名 search_name = input("请输入您要查询学员的姓名: ") # 6.2 遍历学员数据列表,如果用户输入的学员姓名存在则打印学员信息,否则提示该学员不存在 for student in self.student_list: # 遍历列表查询学员 if student.name == search_name: # student 中存放的是基于 student.py 文件中 Student 创建的信息 phone 是索引 print(f"学员信息 姓名: {student.name}, 性别: {student.gender},手机号: {student.phone}") # 这里的 phone 与student.py 中 phone 定义一样 break else: print("查无此人") .......
# main.py 文件 # 1 导入 managerSystem 模块 from managerSystem import * # managerSystem模块名 # 2 启动学员管理系统 if __name__ == '__main__': # 当前文件运行时 manager = StudentManager() # 基于管理类创建对象 managerSystem类名 manager.run() # 调用管理运行的方法 ------------------------------------------------ 执行后 C:\Users\马俊南\AppData\Local\Programs\Python\Python37\python.exe D:\Pycharm\code\day19\StudentManagerSystem\main.py 加载学员信息 请选择如下功能: 1.添加学员 2.删除学员 3.修改学员信息 4.查询学员信息 5.显示所有学员信息 6.保存学员信息 7.退出系统 请输入您要选择的功能序号: 1 请输入您的姓名: zhangsan 请输入您的性别: nan 请输入您的手机号: 111 [<student.Student object at 0x000001C0B470E390>] zhangsan nan 111 请选择如下功能: 1.添加学员 2.删除学员 3.修改学员信息 4.查询学员信息 5.显示所有学员信息 6.保存学员信息 7.退出系统 请输入您要选择的功能序号: 4 请输入您要查询学员的姓名: lisi 查无此人 请选择如下功能: 1.添加学员 2.删除学员 3.修改学员信息 4.查询学员信息 5.显示所有学员信息 6.保存学员信息 7.退出系统 请输入您要选择的功能序号: 4 请输入您要查询学员的姓名: zhangsan 学员信息 姓名: zhangsan, 性别: nan,手机号: 111 请选择如下功能: 1.添加学员 2.删除学员 3.修改学员信息 4.查询学员信息 5.显示所有学员信息 6.保存学员信息 7.退出系统 请输入您要选择的功能序号: 7 Process finished with exit code 0
19.15 显示所有学员信息
需求:打印所有学员信息
步骤:遍历学员数据列表,打印所有学员信息
....... # 2.6 显示所有学员信息 def show_student(self): # 7.1 遍历学员数据列表,打印所有学员信息 print("姓名\t性别\t手机号") for student in self.student_list: print(f"{student.name}\t{student.gender}\t{student.phone}") # 这里的 phone 与student.py 中 phone 定义一样 print("-----上述输出完毕-----") .......
# main.py 文件 # 1 导入 managerSystem 模块 from managerSystem import * # managerSystem模块名 # 2 启动学员管理系统 if __name__ == '__main__': # 当前文件运行时 manager = StudentManager() # 基于管理类创建对象 managerSystem类名 manager.run() # 调用管理运行的方法 ------------------------------------------------ 执行后 C:\Users\马俊南\AppData\Local\Programs\Python\Python37\python.exe D:\Pycharm\code\day19\StudentManagerSystem\main.py 加载学员信息 请选择如下功能: 1.添加学员 2.删除学员 3.修改学员信息 4.查询学员信息 5.显示所有学员信息 6.保存学员信息 7.退出系统 请输入您要选择的功能序号: 1 请输入您的姓名: zhangsan 请输入您的性别: nan 请输入您的手机号: 111 [<student.Student object at 0x0000022D5EADE208>] zhangsan nan 111 请选择如下功能: 1.添加学员 2.删除学员 3.修改学员信息 4.查询学员信息 5.显示所有学员信息 6.保存学员信息 7.退出系统 请输入您要选择的功能序号: 1 请输入您的姓名: lisi 请输入您的性别: nv 请输入您的手机号: 112 [<student.Student object at 0x0000022D5EADE208>, <student.Student object at 0x0000022D5EADE400>] lisi nv 112 请选择如下功能: 1.添加学员 2.删除学员 3.修改学员信息 4.查询学员信息 5.显示所有学员信息 6.保存学员信息 7.退出系统 请输入您要选择的功能序号: 5 姓名 性别 手机号 zhangsan nan 111 lisi nv 112 -----上述输出完毕----- 请选择如下功能: 1.添加学员 2.删除学员 3.修改学员信息 4.查询学员信息 5.显示所有学员信息 6.保存学员信息 7.退出系统 请输入您要选择的功能序号: 7 Process finished with exit code 0
19.16 保存学员信息需求和注意事项
需求:将修改后的学员数据保存到存储数据的文件
步骤:
1.打开文件
2.写入数据
3.关闭文件
思考:
1.文件写入的数据是学员对象的内存地址吗?"学员数据存储在列表,列表中存储的是学员对象,存储内存地址的编号是没有意义的,所以要用列表中是字典写入数据"
2.文件内数据要求的数据类型是什么? "字符串,转为字符串写入"
19.17 扩展 __dict__
收集类对象或实例对象的属性和方法以及对应的值,从而返回一个字典
# 1 定义类 class A(): a = 0 # 类属性 def __init__(self): # 初始化方法, 即魔法方法 self.b = 1 # 实例属性 # 2 基于类创建对象 aa = A() # 3 调用 __dict__ print(A.__dict__) # 返回 类内部所有属性和方法对应的字典 print(aa.__dict__) # 返回 实例属性和值组成的字典 ------------------------------------------------ 执行后 C:\Users\马俊南\AppData\Local\Programs\Python\Python37\python.exe D:\Pycharm\code\day19\StudentManagerSystem\01.__dict__.py {'__module__': '__main__', 'a': 0, '__init__': <function A.__init__ at 0x0000015954D1D840>, '__dict__': <attribute '__dict__' of 'A' objects>, '__weakref__': <attribute '__weakref__' of 'A' objects>, '__doc__': None} {'b': 1} Process finished with exit code 0
19.18 保存学员信息
........ # 2.7 保存学员信息 def save_student(self): # 8.1 打开文件, 不存在则创建文件 f = open("student.txt", "w") # 8.2 文件写入学员数据 # 8.2.1 注意:文件写入的数据不能是学员的内存地址(列表内是对象), 需要把学员数据转换成列表字典数据再做存储 new_list = [ i.__dict__ for i in self.student_list] # for 循环推导式, 将列表中每个对象字典化 即 name='张三', gender='男', phone='123456' 字典化 print(new_list) # 8.2.2 注意:文件内数据要求为字符串类型, 故需要先转换数据类型为字符串才能文件写入数据 f.write(str(new_list)) # 转换 # 8.3 关闭文件 f.close() ........
# main.py 文件 # 1 导入 managerSystem 模块 from managerSystem import * # managerSystem模块名 # 2 启动学员管理系统 if __name__ == '__main__': # 当前文件运行时 manager = StudentManager() # 基于管理类创建对象 managerSystem类名 manager.run() # 调用管理运行的方法 ------------------------------------------------ 执行后 C:\Users\马俊南\AppData\Local\Programs\Python\Python37\python.exe D:\Pycharm\code\day19\StudentManagerSystem\main.py 加载学员信息 请选择如下功能: 1.添加学员 2.删除学员 3.修改学员信息 4.查询学员信息 5.显示所有学员信息 6.保存学员信息 7.退出系统 请输入您要选择的功能序号: 1 请输入您的姓名: lisi 请输入您的性别: nv 请输入您的手机号: 112 [<student.Student object at 0x0000022EEB2DF358>] lisi nv 112 请选择如下功能: 1.添加学员 2.删除学员 3.修改学员信息 4.查询学员信息 5.显示所有学员信息 6.保存学员信息 7.退出系统 请输入您要选择的功能序号: 6 [{'name': 'lisi', 'gender': 'nv', 'phone': '112'}] 请选择如下功能: 1.添加学员 2.删除学员 3.修改学员信息 4.查询学员信息 5.显示所有学员信息 6.保存学员信息 7.退出系统 请输入您要选择的功能序号: 7 Process finished with exit code 0
# student.txt 文件 [{'name': 'lisi', 'gender': 'nv', 'phone': '112'}]
19.19 加载学员信息思路
需求:每次进入系统后,修改的数据是文件里面的数据
步骤:
1.尝试以"r" 模式打开学员数据文件,如果文件不存在则以"w" 模式打开文件
2.如果文件存在则读取数据并存储数据
(1)读取数据
(2)转换数据类型为列表并转换列表内的字典为对象
(3)存储学员数据到学员列表
3.关闭文件
19.20 加载学员信息
........ # 2.8 加载学员信息 def load_student(self): # 9.1 尝试以"r" 模式打开学员数据文件,如果文件不存在则以"w" 模式打开文件 try: f = open("student.txt", "r") # 文件存在 只读模式 except: f = open("student.txt", "w") # 文件不存在 写模式打开 # 9.2 如果文件存在则读取数据并存储数据 else: # 没有异常执行 data = f.read() # 9.2.1 读取数据 data 是字符串 # 9.2.2 转换数据类型为列表并转换列表内的字典为对象 new_list = eval(data) # 转换成列表原本类型 # 9.2.3 存储学员数据到学员列表 self.student_list = [Student(i['name'], i['gender'], i['phone']) for i in new_list] # for 推导式循环列表中字典,对列表中数据基于 Student 类重新创建对象 存储到列表中 finally: f.close() # 9.3 关闭文件 ........
# main.py 文件 # 1 导入 managerSystem 模块 from managerSystem import * # managerSystem模块名 # 2 启动学员管理系统 if __name__ == '__main__': # 当前文件运行时 manager = StudentManager() # 基于管理类创建对象 managerSystem类名 manager.run() # 调用管理运行的方法 ------------------------------------------------ 第一次执行后 C:\Users\马俊南\AppData\Local\Programs\Python\Python37\python.exe D:\Pycharm\code\day19\StudentManagerSystem\main.py 请选择如下功能: 1.添加学员 2.删除学员 3.修改学员信息 4.查询学员信息 5.显示所有学员信息 6.保存学员信息 7.退出系统 请输入您要选择的功能序号: 4 请输入您要查询学员的姓名: lisi 学员信息 姓名: lisi, 性别: nv,手机号: 112 请选择如下功能: 1.添加学员 2.删除学员 3.修改学员信息 4.查询学员信息 5.显示所有学员信息 6.保存学员信息 7.退出系统 请输入您要选择的功能序号: 5 姓名 性别 手机号 lisi nv 112 -----上述输出完毕----- 请选择如下功能: 1.添加学员 2.删除学员 3.修改学员信息 4.查询学员信息 5.显示所有学员信息 6.保存学员信息 7.退出系统 请输入您要选择的功能序号: 7 Process finished with exit code 0 ------------------------------------------------ 第二次执行后(删除student.txt文件) C:\Users\马俊南\AppData\Local\Programs\Python\Python37\python.exe D:\Pycharm\code\day19\StudentManagerSystem\main.py 请选择如下功能: 1.添加学员 2.删除学员 3.修改学员信息 4.查询学员信息 5.显示所有学员信息 6.保存学员信息 7.退出系统 请输入您要选择的功能序号: 4 请输入您要查询学员的姓名: lisi 查无此人 请选择如下功能: 1.添加学员 2.删除学员 3.修改学员信息 4.查询学员信息 5.显示所有学员信息 6.保存学员信息 7.退出系统 请输入您要选择的功能序号: 7 Process finished with exit code 0
19.21 全体代码
# main.py 文件 # 1 导入 managerSystem 模块 from managerSystem import * # managerSystem模块名 # 2 启动学员管理系统 if __name__ == '__main__': # 当前文件运行时 manager = StudentManager() # 基于管理类创建对象 managerSystem类名 manager.run() # 调用管理运行的方法
# student.py 文件 # 定义学员类 传参:姓名、性别、手机号 class Student(object): def __init__(self, name, gender, phone): self.name = name self.gender = gender self.phone = phone def __str__(self): return f"{self.name} {self.gender} {self.phone}" # 测试使用 if __name__ == '__main__': test = Student('张三', '男', '123456') print(test)
# managerSystem.py 文件 from student import * # 3.2 导入学员模块 基于类创建对象 class StudentManager(object): def __init__(self): self.student_list = [] # 存储学员数据信息所用的列表 def run(self): # 1 程序入口函数 # 1.1 加载文件里面的学员数据 self.load_student() while True: # 1.2 显示功能菜单 self.show_menu() # 1.3 用户输入目标功能序号 menu_num = int(input("请输入您要选择的功能序号: ")) # int 转换整型类型 # 1.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.save_student() elif menu_num == 7: # 退出系统 break # 2.1 显示功能菜单 打印序号的功能对应关系 -- 静态方法 @staticmethod def show_menu(): print("请选择如下功能: ") print("1.添加学员") print("2.删除学员") print("3.修改学员信息") print("4.查询学员信息") print("5.显示所有学员信息") print("6.保存学员信息") print("7.退出系统") # 2.2 添加学员 def add_student(self): # 3.1 用户输入姓名、性别、手机号 name = input("请输入您的姓名: ") gender = input("请输入您的性别: ") tel = input("请输入您的手机号: ") # 3.2 创建学员对象 student = Student(name, gender, tel) # 基于类创建对象传入实参 # 3.3 将该对象添加到学员列表 self.student_list.append(student) print(self.student_list) # 打印仅测试时使用 print(student) # 2.3 删除学员 def del_student(self): # 4.1 用户输入目标学员姓名 del_name = input("请输入您要删除学员的姓名: ") # 4.2 遍历学员数据列表,如果用户输入的学员姓名存在则删除,否则则提示该学员不存在 for student in self.student_list: # 遍历列表查询学员 if student.name == del_name: self.student_list.remove(student) break # 删除后面不在执行查找, 打破循环 else: # 查不到执行 print("查无此人") print(self.student_list) # 打印仅测试时使用 # 2.4 修改学员信息 def modify_student(self): # 5.1 用户输入目标学员姓名 modify_name = input("请输入您要修改学员的姓名: ") # 5.2 遍历学员数据列表,如果用户输入的学员姓名存在则修改学员的姓名、性别、手机号数据,否则则提示该学员不存在 for student in self.student_list: # 遍历列表查询学员 if student.name == modify_name: # 查到修改学员姓名 student.name = input("请输入您要修改学员的姓名: ") student.gender = input("请输入您要修改学员的性别: ") student.tel = input("请输入您要修改学员的手机号: ") print(f"修改学员信息成功, 姓名: {student.name}, 性别: {student.gender}, 手机号: {student.tel}") break # 修改后面不在执行查找, 打破循环 else: # 查不到执行 print("查无此人") print(self.student_list) # 打印仅测试时使用 # 2.5 查询学员信息 def search_student(self): # 6.1 用户输入目标学员姓名 search_name = input("请输入您要查询学员的姓名: ") # 6.2 遍历学员数据列表,如果用户输入的学员姓名存在则打印学员信息,否则提示该学员不存在 for student in self.student_list: # 遍历列表查询学员 if student.name == search_name: # student 中存放的是基于 student.py 文件中 Student 创建的信息 phone 是索引 print(f"学员信息 姓名: {student.name}, 性别: {student.gender},手机号: {student.phone}") # 这里的 phone 与student.py 中 phone 定义一样 break else: print("查无此人") # 2.6 显示所有学员信息 def show_student(self): # 7.1 遍历学员数据列表,打印所有学员信息 print("姓名\t性别\t手机号") for student in self.student_list: print(f"{student.name}\t{student.gender}\t{student.phone}") # 这里的 phone 与student.py 中 phone 定义一样 print("-----上述输出完毕-----") # 2.7 保存学员信息 def save_student(self): # 8.1 打开文件, 不存在则创建文件 f = open("student.txt", "w") # 8.2 文件写入学员数据 # 8.2.1 注意:文件写入的数据不能是学员的内存地址(列表内是对象), 需要把学员数据转换成列表字典数据再做存储 new_list = [ i.__dict__ for i in self.student_list] # for 循环推导式, 将列表中每个对象字典化 即 name='张三', gender='男', phone='123456' print(new_list) # 8.2.2 注意:文件内数据要求为字符串类型, 故需要先转换数据类型为字符串才能文件写入数据 f.write(str(new_list)) # 转换 # 8.3 关闭文件 f.close() # 2.8 加载学员信息 def load_student(self): # 9.1 尝试以"r" 模式打开学员数据文件,如果文件不存在则以"w" 模式打开文件 try: f = open("student.txt", "r") # 文件存在 只读模式 except: f = open("student.txt", "w") # 文件不存在 写模式打开 # 9.2 如果文件存在则读取数据并存储数据 else: # 没有异常执行 data = f.read() # 9.2.1 读取数据 data 是字符串 # 9.2.2 转换数据类型为列表并转换列表内的字典为对象 new_list = eval(data) # 转换成列表原本类型 # 9.2.3 存储学员数据到学员列表 self.student_list = [Student(i['name'], i['gender'], i['phone']) for i in new_list] # for 推导式循环列表中字典,对列表中数据基于 Student 类重新创建对象 存储到列表中 finally: f.close() # 9.3 关闭文件
19.22 学员管理系统涵盖知识点总结
1.函数
(1)定义和调用
(2)参数的使用
2.面向对象
(1)定义类
(2)创建对象
(3)定义和调用实例属性
(4)定义和调用实例方法
3.数据类型
(1)列表
a.增加删除数据
b.列表推导式
(2)字典
(3)字符串
4.文件操作
(1)打开文件
(2)读取或写入(读取和写入必须是字符串类型)
(3)关闭文件
———————————————————————————————————————————————————————————————————————————
无敌小马爱学习
浙公网安备 33010602011771号