Python学员管理系统进阶版
整合基础,使用面向对象的方式做学员管理系统
文章目录
前言
一、系统需求
使用面向对象编程思想完成学员管理系统的开发,具体如下:
1.系统要求:学员数据存储在文件中
2.系统功能:添加学员、删除学员、修改学员信息、查询学员信息、显示所有学员信息、保存学员信息及退出系统等功能。
1.创建程序文件
创建程序文件
创建项目目录,例如: StudentManagerSystem
程序文件如下:
程序入口文件:main.py
学员文件:student.py
管理系统文件:managerSystem.py
2.书写程序
书写程序
student.py
需求:
学员信息包含:姓名、性别、⼿机号;
添加 str 魔法方法,方便查看学员对象信息
managerSystem.py
需求:
存储数据的位置:文件(student.data)
加载文件数据
修改数据后保存到文件
存储数据的形式:列表存储学员对象
系统功能:
1.添加学员
2.删除学员
3.修改学员
4.查询学员信息
5.显示所有学员信息
6.保存学员信息
退出系统
3.管理系统框架
需求:系统功能循环使用,用户输入不同的功能序号执行不同的功能。
步骤
定义程序入口函数
1.加载数据
2.显示功能菜单
3.用户输入功能序号
4.根据用户输入的功能序号执行不同的功能
5.定义系统功能函数,添加、删除学员等
二、功能函数
1.添加学员
添加功能
需求:用户输入学员姓名、性别、⼿机号,将学员添加到系统。
步骤
用户输入姓名、性别、⼿机号
创建该学员对象
将该学员对象添加到列表
2.删除学员
需求:用户输入目标学员姓名,如果学员存在则删除该学员。
步骤
用户输入目标学员姓名
遍历学员数据列表,如果用户输入的学员姓名存在则删除,否则则提示该学员不存在。
3.修改学员信息
需求:用户输入目标学员姓名,如果学员存在则修改该学员信息。
步骤
用户输入目标学员姓名;
遍历学员数据列表,如果用户输入的学员姓名存在则修改学员的姓名、性别、⼿机号数据,否则则提示该学员不存在。
4.查询学员信息
需求:用户输入目标学员姓名,如果学员存在则打印该学员信息
步骤
用户输入目标学员姓名
遍历学员数据列表,如果用户输入的学员姓名存在则打印学员信息,否则提示该学员不存在。
5.显示所有学员信息
打印所有学员信息
步骤
遍历学员数据列表,打印所有学员信息
6.保存学员信息
需求:将修改后的学员数据保存到存储数据的文件。
步骤
打开文件
文件写入数据
关闭文件
思考
1. 文件写入的数据是学员对象的内存地址吗?
2. 文件内数据要求的数据类型是什么
7.加载学员信息
需求:每次进入系统后,修改的数据是文件⾥面的数据
步骤
尝试以 "r" 模式打开学员数据文件,如果文件不存在则以 "w" 模式打开文件
如果文件存在则读取数据并存储数据
读取数据
转换数据类型为列表并转换列表内的字典为对象
存储学员数据到学员列表
关闭文件
三.需求总结
函数:
1.定义和调用
2.参数的使用
⾯向对象:
1.定义类
2.创建对象
3.定义和调用实例属性
4.定义和调用实例方法
数据类型:
1.列表
2.增加删除数据
3.列表推导式
4.字典
5.字符串
文件操作:
1.打开文件
2.读取或写入
3.关闭文件
我的代码实现{仅供参考}
1.Student类:
class Students():
def __init__(self, name,sex, tel):
self.__name = name
self.__sex = sex
self.__tel = tel
def __str__(self):
return f'学员姓名:{self.__name},学员性别:{self.__sex},学员电话:{self.__tel}'
def getName(self):
return self.__name
def getSex(self):
return self.__sex
def getTel(self):
return self.__tel
2.managerSystem类:
from Student import Students
class Manage(Students):
def __init__(self):
self.StuList = []
# 保存数据
def save(self):
try:
f = open('Student.data', 'w')
except():
print('出错了!!')
else:
lis = []
for i in self.StuList:
dic = {'name': i.getName(), 'sex': i.getSex(), 'tel': i.getTel()}
lis.append(dic)
f.write(str(lis))
print('保存成功!')
finally:
f.close()
# 加载数据
def login(self):
try:
f = open('Student.data', 'r')
except():
print('出错了!!')
else:
lis=eval(f.read())
for i in lis:
self.StuList.append(Students(i['name'],i['sex'],i['tel']))
print('加载成功!')
finally:
f.close()
# 静态菜单
@staticmethod
def menu():
print('1.删除学员')
print('2.修改学员')
print('3.查询学员信息')
print('4.显示所有学员信息')
print('5.保存系统')
print('6.退出系统')
print('7.添加学员')
# 删除学员
def delStu(self):
name = input('请输入要删除的学生姓名:')
for i in self.StuList:
if i.getName() == name:
self.StuList.remove(i)
print('删除成功!')
break
else:
print('查无此人!')
# 修改学员
def updStu(self):
print('修改学员')
uname = input('请输入学员姓名:')
for i in self.StuList:
if uname == i.getName():
newName = input('请输入新的姓名:')
newSex = input('请输入新的性别:')
newtel = input('请输入新的电话:')
op=self.StuList.index(i)
st=Students(newName,newSex,newtel)
self.StuList[op]=st
print('修改成功')
break
else:
print('查无此人')
# 添加学员
def addStu(self):
name = input('请输入学员姓名:')
for i in self.StuList:
if name == i.getName():
print('此人已存在!')
break
else:
sex = input('请输入性别:')
tel = input('请输入电话:')
st=Students(name,sex,tel)
self.StuList.append(st)
print('新增成功!')
# 根据姓名查询
def selectStu(self):
name = input('请输入要查询的姓名:')
for i in self.StuList:
if i.getName() == name:
print(i.__str__())
break
else:
print('查无此人!!')
# 查询所有
def select(self):
for i in self.StuList:
print(i.__str__())
# 主方法
def main(self):
self.login()
while True:
self.menu()
user = int(input('请选择功能序号:'))
if user == 1:
self.delStu()
elif user == 2:
self.updStu()
elif user == 3:
self.selectStu()
elif user == 4:
self.select()
elif user == 5:
self.save()
elif user == 6:
break
elif user == 7:
self.addStu()
else:
print('输入错误!')
3.main方法:
import managerSystem
if __name__ == '__main__':
Stu = managerSystem.Manage()
Stu.main()
四.本章小结
到这里,面向对象版学员管理系统就OK了,实现方法有很多种,我这只是其中一种,万变不离其宗,各位小伙伴可以自行探索做法.
有哪里不足或者有更好的建议,欢迎留言吐槽,有哪里不懂的小伙伴可以私信我,我会一一答复,感谢认可,感谢支持!