目录
系统需求:学员的学员信息需要存储在文件中
系统功能:添加学员,删除学员,修改学员信息,查询学员信息,显示学员信息,保存学员信息,以及退出系统等功能。
角色分析
管理系统
学员
工作过程中需要注意的地方:
为了方便维护代码,一般一个角色一个程序文件
项目中要有主程序入口,习惯命名为main.py
创建项目目录: 比如说:StudentManageSystem
程序文件:
程序入口文件:main.py
学员文件:students.py
管理系统文件:managersystem.py
需求:
学员信息:姓名,性别,手机号
添加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}'
if __name__ == '__main__':
yunxing = Student('Peng', '男', 21)
print(yunxing)
yunxing1 = Student('Cheng', '男', 19)
print(yunxing1)
需求:
系统功能
添加学员
删除学员
修改学员
查询学员
显示所有学员
保存学员
退出系统
存储数据文件的位置:文件(student.data)
加载学员信息
修改数据后保存在文件中
存储数据的形式:在系统中列表存储学员对象,数据文件中字典加列表组合。
代码:
class StudentManager(object):
def __init__(self):
# 存储数据的列表
self.student_list = []
需求:系统功能循环使用,用户输入不同的功能序号执行不同的功能
步骤:
定义程序入口
加载学员信息
显示功能菜单
用户输入功能序号
根据用户输入的不同功能序号执行不同的功能
定义系统功能函数,例如增删改查等
代码:
class StudentManager(object):
def __init__(self):
# 存储数据的列表
self.student_list = []
def run(self):
"""程序入口函数,也就是程序运行起来之后执行的功能"""
# 加载学员信息
self.load_student()
while True:
# 显示功能菜单
self.show_menu()
# 判断输入的序号正不正确
try:
# 用户输入功能序号
number = int(input('请输入你要执行的功能序号:'))
except:
print("你输入的序号有误,请输入正确的序号")
continue
else:
# 根据用户输入的功能序号执行对应的功能
if number == 1:
# 添加学员
self.add_student()
elif number == 2:
# 删除学员
self.del_student()
elif number == 3:
# 修改学员
self.modify_student()
elif number == 4:
# 查询学员
self.search_student()
elif number == 5:
# 显示所有学员
self.show_student()
elif number == 6:
# 保存学员
self.save_student()
elif number == 7:
# 退出系统
break
def modify_student(self):
pass
def search_student(self):
pass
def show_student(self):
pass
def save_student(self):
pass
def del_student(self):
pass
def add_student(self):
pass
@staticmethod
def show_menu():
print('请输入如下功能序号:')
print('1:添加学员功能')
print('2:删除学员功能')
print('3:修改学员功能')
print('4:查询学员功能')
print('5:显示所有学员功能')
print('6:保存学员功能')
print('7:退出系统')
def load_student(self):
pass
代码:
# 导入managersystem模块
import managersystem
if __name__ == '__main__':
# 启动学员管理系统
student_manager = managersystem.StudentManager()
student_manager.run()
需求:用户输入学员信息,将用户输入的学员信息添加到系统模块中。
步骤:
用户输入姓名,性别,电话
创建学员对象
将学员对象添加到系统中
代码
def add_student(self):
# - 用户输入姓名,性别,电话
name = input('请输入学员姓名:')
gender = input('请输入学员性别:')
tel = input('请输入学员电话:')
# - 创建学员对象
student = Student(name, gender, tel)
# - 将学员对象添加到系统中
self.student_list.append(student)
# 打印学员信息
print(self.student_list)
print(student)
步骤
用户输入姓名
遍历学员列表,如果存在即删除,如果不存在即提示学员不存在
代码
def del_student(self):
# - 用户输入姓名
del_name = input('请输入您要删除的学员的姓名:')
# - 遍历学员列表,如果存在即删除,如果不存在即提示学员不存在
for i in self.student_list:
if del_name == i.name:
self.student_list.remove(i)
print('学员已删除', del_name)
break
else:
print("您要删除的学员不存在")
用户输入姓名
遍历列表,如果存在就修改,如果不存在就提示不存在
代码
def modify_student(self):
# - 用户输入姓名
modify_name = input('请输入您要修改的学员姓名:')
# - 遍历列表,如果存在就修改,如果不存在就提示不存在
for i in self.student_list:
if modify_name == i.name:
i.name = input('姓名:')
i.gender = input('性别:')
i.tel = input('电话:')
print(f"学员信息修改成功,姓名{i.name},性别{i.gender},电话{i.tel}")
break
else:
print('您要修改的学员信息不存在')
需求:将学员的信息保存到存储数据的student.data中
步骤:
打开文件
写入数据
关闭文件
思考:
文件写入的时候,写入的数据是学员的具体信息,还是学员的对象地址
文件数据要求的数据类型是啥?
代码
def save_student(self):
# - 打开文件
f = open('student.data', 'w')
# - 写入数据
# 注意1:文件写入不能是学员对象的内存地址,必须是具体学员信息,需要把学员信息转换成字典再存储
new_list = [i.__dict__ for i in self.student_list]
print(new_list)
# 文件内的数据要求为字符串儿类型,故存入数据前需要强转
f.write(str(new_list))
# - 关闭文件
f.close()
用户输入姓名
遍历列表
代码
def search_student(self):
# 用户输入姓名
search_name = input('请输入您要查找的学员的姓名:')
# 遍历列表,有则展示,没有则提示无此人
for i in self.student_list:
if search_name == i.name:
print(f"姓名:{i.name},性别:{i.gender},电话:{i.tel}")
break
else:
print('查无此人!')
代码:
def show_student(self):
for i in self.student_list:
print(f"姓名:{i.name},性别:{i.gender},电话:{i.tel}")
需求:每次进入系统的时候,修改和查询的都是文件里面的数据,添加在是在加载文件数据之后再添加
步骤:
尝试以r的方式打开文件,如果有误就以w的方式打开文件
如果文件存在则读取数据并且加载到系统中
读取数据
转换数据类型为列表,并且转换列表里面的字典为学员对象
存储学员对象到列表中
关闭文件
代码
def load_student(self):
# - 尝试以r的方式打开文件,如果有误就以w的方式打开文件
try:
f = open('student.data', 'r')
except:
f = open('student.data', 'w')
else:
# - 如果文件存在则读取数据并且加载到系统中
# - 读取数据
data = f.read()
# - 转换数据类型为列表,并且转换列表里面的字典为学员对象
# - 存储学员对象到列表中
new_list = eval(data)
# for i in new_list:
# student = Student(i['name'], i['gender'], i['tel'])
# self.student_list.append(student)
self.student_list = [Student(i['name'], i['gender'], i['tel']) for i in new_list]
finally:
# - 关闭文件
f.close()