目录
前言
学习黑马程序员全套Python教程_Python基础入门视频教程黑马程序员全套Python教程_Python基础入门视频教程,零基础小白自学Python必备教程_哔哩哔哩_bilibili
今儿个完结,把最后的面向对象版学员管理系统记录下来
基本的函数运用都拥有啊!看了那么多天 终于学完了,接下来进阶+数据结构
一、系统需求
使用面向对象编程思想完成学员管理系统的开发,具体如下:
1.系统要求:学员数据存储在文件中
2.系统功能:添加学员、删除学员、修改学员信息、查询学员信息、显示所有学员信息、保存学员信息及退出系统等功能
二、书写程序
1.Student类
代码如下:
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}'
2.StudentManager类
代码如下:
class StudentManager(object):
def __init__(self):
#查询数据所用的列表
self.student_list = []
#1.程序入口函数,启动程序后执行的函数
def run(self):
#1.加载学员的信息
self.load_student()
while True:
#显示功能菜单
self.show_menu()
#用户输入功能序号
menu_num = int(input("你要输入的功能:"))
#根据用户输入的功能序号执行不同的功能
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
#显示功能菜单 --打印序号的功能对应关系 --静态
@staticmethod
def show_menu():
print("--------------------------------------------------")
print('请选择如下功能:')
print("1:添加学员")
print("2:删除学员")
print("3:修改学员信息")
print("4:查询学员信息")
print("5:显示所有学员信息")
print("6:保存学员信息")
print("7:退出系统")
print("--------------------------------------------------")
#添加学员
def add_student(self):
#1.用户输入姓名、性别、手机号
name = input("请输入您的姓名:")
gender = input("请输入您的性别:")
tel = input("请输入您的手机号:")
student = Student(name,gender,tel)
#3.将该对象添加到学院列表
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 i.name == del_name:
self.student_list.remove(i)
break
else:
print("查无此人!")
print(self.student_list)
#修改学员信息
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'修改该学员信息成功,姓名:{i.name},性别:{i.gender},手机号:{i.tel}')
break
else:
print("查无此人")
#查询
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("查无此人")
#显示所有
def show_student(self):
print("姓名\t性别\t手机号")
for i in self.student_list:
print(f'{i.name}\t{i.gender}\t{i.tel}')
#保存学员信息
def save_student(self):
f = open('student.txt','w')
#文件写入的数据不能是学员对象的内存地址,需要把学员数据转换成列表字典数据再做存储
new_list = [i.__dict__ for i in self.student_list]
print(new_list)
f.write(str(new_list))#write() argument must be str, not list
f.close()
#加载学员信息
def load_student(self):
try:#尝试以r模式打开数据文件,文件不存在则提示用户;文件存在则读取
f = open('student.txt','r')
except:
f = open('student.txt','w')
else:
data = f.read()
#文件中读取的数据都是字符串内部为字典数据,需要转换数据类型在转换字典为对象后存储到学院列表
new_list = eval(data)
self.student_list = [Student(i['name'],i['gender'],i['tel'])for i in new_list]#i 是字典
finally:
f.close()
student_manager = StudentManager()
student_manager.run()
三、部分分解
1.保存学员信息
def save_student(self):
f = open('student.txt','w')
#文件写入的数据不能是学员对象的内存地址,需要把学员数据转换成列表字典数据再做存储
new_list = [i.__dict__ for i in self.student_list]
print(new_list)
f.write(str(new_list))#write() argument must be str, not list
f.close()
可以参考:Python __dict__属性详解 - 星空·77 - 博客园讲解__dict__
我们print(self.student_list)会出现一行地址,但是这不是我们想要的结果,所以我们得给他转换成列表字典数据再进行存储。
f.write(xxx)必须得是str,其他不接受。
2.加载学员信息
#加载学员信息
def load_student(self):
try:#尝试以r模式打开数据文件,文件不存在则提示用户;文件存在则读取
f = open('student.txt','r')
except:
f = open('student.txt','w')
else:
data = f.read()
#文件中读取的数据都是字符串内部为字典数据,需要转换数据类型在转换字典为对象后存储到学院列表
new_list = eval(data)
self.student_list = [Student(i['name'],i['gender'],i['tel'])for i in new_list]#i 是字典
finally:
f.close()
eval(expression, globals=None, locals=None) --- 官方文档中的解释是,将字符串str当成有效的表达式来求值并返回计算结果。globals和locals参数是可选的,如果提供了globals参数,那么它必须是dictionary类型;如果提供了locals参数,那么它可以是任意的map对象。