1. 系统需求
- 对学员信息存储
- 实现对学员信息的增、删、改、查、存储、显示及退出系统
2. 程序文件准备
2.1 分析对象
- 学员
- 管理系统
工作注意事项
- 一个对象一个文件,便于维护
- 程序入口一般定为:main.py
2.2 创建程序文件
- 文件夹名称:StudentManagerSystem
- 程序文件:
- 入口:main.py
- 学员:student.py
- 管理系统:managerSystem.py
3. 书写程序
3.1 学员
需求:
- 初始化属性:姓名、性别、手机号
- 通过
__str__()
返回学员信息
class Student(object):
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}'
3.2 管理系统
需求
- 存储数据为文件(student.data)
- 数据存储方式:列表存储对象
- 系统功能
- 增加学员
- 删除学员
- 修改学员
- 显示所有学员信息
- 查询学员
- 保存学员
- 退出系统
3.2.1 定义类
class StudentManager(object):
def __init__(self):
self.student_list = []
3.2.2 管理系统框架
需求:循环显示输入,根据不同序号执行不同功能
- 定义入口函数:
- 首先加载数据
- 循环执行:
- 输出菜单
- 输入序号
- 执行相应功能
- 添加各种功能函数
- 代码
class StudentManager(object):
def __init__(self):
self.student_list = []
# 一:定义函数入口,启动系统时自动调用
def run(self):
# 1. 加载学员信息
while True:
# 2. 显示菜单
self.show_menu()
# 3. 用户输入功能序号
num = int(input('请输入功能序号:'))
# 4. 根据序号执行相应功能
if num == 1:
self.add_stu()
elif num == 2:
self.del_stu()
elif num == 3:
self.update_stu()
elif num == 4:
self.ser_stu()
elif num == 5:
self.show_stu()
elif num == 6:
self.save_stu()
elif num == 7:
break
# 二:系统功能函数
# 显示菜单
@staticmethod
def show_menu():
print('欢迎登陆学员管理系统!!!')
print('1. 增加学员')
print('2. 删除学员')
print('3. 修改学员')
print('4. 查询学员')
print('5. 显示所有学员')
print('6. 存储学员')
print('7. 退出系统')
# 1. 增加学员
def add_stu(self):
print('增加学员')
# 2. 删除学员
def del_stu(self):
print('删除学员')
# 3. 修改学员
def update_stu(self):
print('修改学员')
# 4. 查询学员
def ser_stu(self):
print('查询学员')
# 5. 显示所有学员
def show_stu(self):
print('显示所有学员')
# 6. 存储学员
def save_stu(self):
print('存储学员')
3.2.3 函数入口
# 导入managerSystem模块
from managerSystem import *
# 保证只有直接通过main模块进入函数才能生效
if __name__ == '__main__':
stu_manager = StudentManager()
stu_manager.run()
4 系统函数功能
4.1 添加学员
- 需求:输入学员的姓名、性别、手机号
- 实现步骤:
- 输入信息
- 创建学员对象
- 将学员对象添加到学员列表
- 代码
# 1. 增加学员
def add_stu(self):
name = input('输入姓名:')
gender = input('输入性别:')
tel = input('输入手机号:')
stu =Student(name, gender, tel)
self.student_list.append(stu)
4.2 删除学员
# 2. 删除学员
def del_stu(self):
self.name = input('请输入姓名:')
for i in self.student_list:
if i.name == self.name:
self.student_list.remove(i)
print('删除成功!')
break
else:
print('不存在%s' % self.name)
4.3 修改学员
# 3. 修改学员
def update_stu(self):
self.name = input('请输入姓名:')
for i in self.student_list:
if i.name == self.name:
self.gender = input('请输入需要修改性别:')
self.tel = input('请输入电话号码;')
print(f'姓名:{i.name},性别:{i.gender},电话号码为:{i.tel} 已修改为:')
i.gender = self.gender
i.tel = self.tel
print(f'姓名:{i.name},性别:{i.gender},电话号码为:{i.tel}')
break
else:
print('不存在%s' % self.name)
4.4 查询学员
# 4. 查询学员
def ser_stu(self):
self.name = input('请输入姓名:')
for i in self.student_list:
if i.name == self.name:
print(f'姓名:{i.name},性别:{i.gender},电话号码为:{i.tel}')
break
else:
print('不存在学员%s' % self.name)
4.5 显示所有学员
# 5. 显示所有学员
def show_stu(self):
if len(self.student_list) == 0:
print('暂无学员信息')
else:
print('姓名\t性别\t电话号')
for i in self.student_list:
print(f'{i.name}\t{i.gender}\t{i.tel}')
4.6 保存学员数据
4.6.1 __dict__
方法
- 将对象的实例属性生成字典
- 将类的属性生成字典
- 代码
class A(object):
b = 2
def __init__(self):
self.a = 1
aa = A() # 生成对象
print(aa.__dict__) # 对象的实例属性 {'a': 1}
print(A.__dict__) # 类的属性 {'__module__': '__main__', ..., 'b': 2}
4.6.2 保存到文件中
- 将对象通过
__dict__
生成字典并且通过列表生成式将所有学员信息生成列表 - 对文件保存时注意将列表转化为
str
存储 - 代码
# 6. 存储学员
def save_stu(self):
# 打开文件
f = open('student.data','w')
# 生成列表并存入
stu_list = [i.__dict__ for i in self.student_list] # i.__dict__ 对象转化为字典,不能直接存入对象 i
f.write(str(stu_list)) # 注意需要转化为str型
# 关闭文件
f.close()
4.7 加载文件
- 打开文件:如果存在则r,否则不存在则 w
- 读取:如果文件存在则读取文件:字符串转化为列表,列表再转化为对象,添加到对象列表
- 关闭
- 代码解释
# 7. 加载学员信息
def load_stu(self):
# 打开文件:如果存在则r,否则不存在则 w
try:
f = open('student.data','r')
except:
f = open('student.data','w')
# 如果文件存在则读取文件:字符串转化为列表,列表再转化为对象,添加到对象列表
else:
stu = eval(f.read())
self.student_list = [Student(i['name'], i['gender'], i['tel']) for i in stu]
# 关闭文件
finally:
f.close()
5. 总结
- 函数
- 定义和调用
- 参数的使用
- 面向对象
- 定义类
- 创建对象
- 定义和调用实例属性
- 定义和调用实例方法
- 数据类型
- 列表
- 增加删除数据
- 列表推导式
- 字典
- 字符串
- 列表
- 文件操作
- 打开文件
- 读取或写入
- 关闭文件