创建三个文件:
第一个:student.py(存放学生类)
第二个:studentManager.py(教师管理)
第三个:main.py(程序入口)
了解面向对象开发过程中类内部功能的分析和方法
了解常用系统功能
添加
删除修改
查询
学元数据存储在一个系统文件中
系统功能:添删改差,显示学员信息,退出
分析:
角色分析:学员,管理系统
工作中注意事项:为了方便代码维护,一般一个角色一个程序文件。项目要有主程序入口main.py
创建程序文件:
程序文件:
程序入口文件:main.py
学员文件:student.py
管理系统文件:managerSystem.py
student.py
'''
学员信息包含:姓名,性别,手机号
添加__str__方法,方便查看学员对象信息
'''
class Student(object):
def __init__(self,name,gender,tel):
self.name = name
self.gender = gender
self.tel = tel
def __str__(self):
return '%s,%s,%s' %(self.name,self.gender,self.tel)
ManagerSystem.py
import sys
from student import *
import pickle
FILE_PATH='student_info'
class Mypickle:#自定义pickle模块
def __init__(self):
self.path = FILE_PATH
def dump(self,obj):
with open(self.path,'ab') as f:
pickle.dump(obj,f)
def load(self):
with open(self.path,'rb') as f:
while True:
try:
yield pickle.load(f)
except:
break
def del_dump(self,obj):
with open(self.path,'wb') as f:
pickle.dump(obj,f)
class StudentManager(object):
opt_lst = [('添加学员','add_student'), ('删除学员','delete_student'), ('修改学员','mod_student'),
('查询学员信息','query_student'), ('显示所有学员信息','show_student_info'),
('退出','exit')]
student_list = []
def __init__(self):
#存储数据所用的列表
pass
#1.程序入口函数,启动程序后执行不同功能
@classmethod
def run(cls):
#加载学员信息
cls.load_student()
while True:
# 显示菜单
cls.show_menu()
# 用户输入序号选择功能
menu_num = int(input('请输入要选择的功能序号:'))
# 根据用户输入的不同功能的序号选择功能
if hasattr(cls,cls.opt_lst[menu_num-1][1]):
getattr(cls,cls.opt_lst[menu_num-1][1])()
else:
print('还没有添加此功能------------!')
@staticmethod
def load_student():
for student in Mypickle().load():
StudentManager.student_list.append(student)
print('学生信息加载完毕')
@staticmethod
def show_menu():
for index,opt in enumerate(StudentManager.opt_lst,1):
print(index,opt[0])
@staticmethod
def add_student():
num = int(input('请输入要添加几名学员:'))
count=0
if num>0 and isinstance(num,int):
while num>0:
name = input('请输入要添加的学员的名字:')
gender = input('请输入该学员的性别:')
tel = input('请输入该学员的手机号码:')
obj = Student(name,gender,tel)
StudentManager.student_list.append(obj)
num-=1
count += 1
opt = input('是否要保存到文件中(Y/N):')
if opt.upper()=='Y':
for student in StudentManager.student_list[-count:]:
Mypickle().dump(student)
print('学生信息保存完成')
elif opt.upper()=='N':
pass
else:
pass
@staticmethod
def delete_student():
del_name=input('请输入要删除的学生的姓名:')
del_tel = input('请输入要删除的学生的手机号码:')
count=0
for stu in StudentManager.student_list:
if del_tel==stu.tel and del_name==stu.name:
# print(count)
# print(StudentManager.student_list)
del StudentManager.student_list[count]
# print(StudentManager.student_list)
break
else:
count+=1
opt = input('是否要保存操作到文件中(Y/N):')
if opt.upper() == 'Y':
i = 0
for student in StudentManager.student_list:
if i==0:
Mypickle().del_dump(student)
i=1
elif i==1 :
Mypickle().dump(student)
print('学生信息保存完成')
elif opt.upper() == 'N':
pass
@staticmethod
def mod_student():
name = input('请输入要修改的学生的姓名:')
count=0
for stu in StudentManager.student_list:
if name==stu.name:
gender = stu.gender
tel = input('要修改成的手机号码:')
del StudentManager.student_list[count]
obj = Student(name,gender,tel)
# Mypickle().dump(obj)
StudentManager.student_list.append(obj)
i = 0
for student in StudentManager.student_list:
if i == 0:
Mypickle().del_dump(student)
i = 1
elif i == 1:
Mypickle().dump(student)
else:
count+=1
@staticmethod
def query_student():
options = ['姓名','手机号码']
for index,opt in enumerate(options,1):
print(index,opt)
ans = int(input('您想要按什么查找:'))
if ans==1:
name = input('请输入要查找的姓名:')
for stu in StudentManager.student_list:
if name==stu.name:
print("姓名:%s 性别:%s 手机号码:%s" % (stu.name, stu.gender, stu.tel))
else:continue
elif ans==2:
tel = input('请输入要查找的手机号:')
for stu in StudentManager.student_list:
if tel==stu.tel:
print("姓名:%s 性别:%s 手机号码:%s" % (stu.name, stu.gender, stu.tel))
else:continue
@staticmethod
def show_student_info():
try:
for student in Mypickle().load():
print("姓名:%s 性别:%s 手机号码:%s" %(student.name,student.gender,student.tel))
except:
print('信息显示完毕~~~~')
@staticmethod
def exit():
print('谢谢您的使用~~~')
sys.exit()
if __name__ == '__main__':
man = StudentManager()
man.run()
main.py
from managerSystem_new import *
if __name__ == '__main__':
man = StudentManager()
man.run()