新建目录,新建三个模块:
main.py : 启动模块,发起程序
student.py: 学员模块, 学员信息默认属性
managerSystem: 程序主模块,实现各种功能
student.txt 文件保存数据
main 启动模块 导入 --> managerSystem 程序主模块 --> 导入 student 学员模块
main 代码:
# coding=utf8
from managerSystem import * # 导入模块
if __name__ == '__main__': # 防止被其它调用后执行, 当前文件运行才执行的代码
student_manger = StudentManager() # 创建 对象
student_manger.run() # 对象.方法 调用启动程序
student 模块:
# coding=utf8
class Student:
def __init__(self, name, gender, tel):
self.name = name
self.gender = gender
self.tel = tel
def __str__(self):
return f'{self.name}, {self.gender}, {self.tel}'
if __name__ == '__main__':
"""
本模块测试内容
"""
# s_list = []
# s1 = Student('alex', 'man', 189)
# s_list.append(s1)
# s2 = Student('tony', 'girl', 139)
# s_list.append(s2)
# print(s_list)
# ss_list = [i.__dict__ for i in s_list]
# print(ss_list)
# print(type(str(ss_list)))
l1 = [{'name': 'alex', 'gender': 'man', 'tel': 189}, {'name': 'tony', 'gender': 'girl', 'tel': 139}]
ll1 = [Student(i['name'], i['gender'], i['tel']) for i in l1]
print(eval(ll1))
managerSystem 模块:
# coding=utf8
import time
from student import *
class StudentManager:
def __init__(self):
self.student_list = []
def __str__(self):
return f'{self.student_list}'
# 一 程序入口
def run(self):
self.load_student()
while True:
# 2 显示登录功能
self.show_menu()
# 3 用户选择功能
menu_num = int(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.save_student() # 保存学员信息
elif menu_num == 7:
self.load_student() # 加载学员信息
elif menu_num == 8:
# 退出系统
print('系统已经退出!')
break
# 二 程序功能
# 2.1 显示功能菜单--静态方法
@staticmethod # 如果不静态,类.方法 将会报错
def show_menu():
print('请选择如下功能:')
print('1: 添加学员 \t2: 删除学员 \t3: 修改学员 \t4: 查询学员')
print('5: 所有学员 \t6: 保存学员 \t7: 加载学员 \t8: 退出系统')
# 2.2 添加学员
def add_student(self):
name = input('姓名:')
gender = input('性别:')
tel = input('电话号码:')
ss = Student(name, gender, tel)
self.student_list.append(ss)
print(self.student_list)
print(ss.__dict__) # __dict__转化为字典, {key=属性名:value=属性值}
# 2.3 删除学员
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)
# 2.4 修改学员
def modify_student(self):
modify_name = input('输入你要修改的学员名字:')
for i in self.student_list:
if i.name == modify_name:
i.name = input('输入新名字:')
i.gender = input('输入性别:')
i.tel = input('输入电话')
print(f'修改 {modify_name} 成功,新的名字是: {i.name}, 性别是: {i.gender}, 电话是: {i.tel}')
break
else:
print('没有找到此学员')
print(self.student_list)
print(i.__dict__) # i 为当前对象
# 2.5 查询学员
def search_student(self):
search_name = input('输入你要查询的学员名字:')
for i in self.student_list:
if i.name == search_name:
print(f'学员名字是 {i.name}, 性别是 {i.gender}, 电话是 {i.tel}')
break
else:
print('没有找到此学员')
# 2.6 显示所有学员
def show_student(self):
print('姓名 \t性别 \t电话')
print("*" * 20)
for i in self.student_list:
time.sleep(1)
print(f'{i.name} \t{i.gender} \t{i.tel}')
# 2.7 保存学员信息
def save_student(self):
f = open('student.txt', 'w')
# 文件写入的数据不能是学员对象的内存地址,需要把学员数据转换成列表字典数据再做存储
# 对象 i 遍历 self.student_list列表,__dict__ 将对象属生转化为 字典 方式加入到新的 列表
new_list = [i.__dict__ for i in self.student_list] # 列表推导式;__dice__ 转化为字典
print(new_list)
# 以字符串的方式写入
f.write(str(new_list))
f.close() # 关闭
# 2.8 加载学员信息
def load_student(self):
try:
f = open('student.txt', 'r')
except:
f = open('student.txt', 'w')
else:
data = f.read() # 读取数据结果为字符串类型
# 使用 eval()函数将 字符串 还原为列表
new_list = eval(data)
# 列表是由字典组成,推导式获得 key, 成为 Student() 类对象的参数
self.student_list = [Student(i['name'], i['gender'], i['tel']) for i in new_list]
finally:
f.close()
if __name__ == '__main__':
"""
本模块测试内容
"""
# print(StudentManager.show_menu())
# aa = StudentManager()
# print(aa.show_menu())
print(StudentManager())