程序有三步分组成:
main.py --仅仅启动文件
student.py --模板
student_manager.py —学生的增删改查都是在这里
main.py
"""
这个文件是系统启动入口文件,运行这个文件,系统才能启动
"""
#导入学生管理模块
from student_manager import *
if __name__ == '__main__':
#使用学生管理类创建一个学生管理对象
sm=StudentManagerSystem()
#通过start()方法,启动程序
sm.start()
student.py
"""
这个是学生模块,用来实现学生模型类的定义
保存学生信息
"""
class Student(object):
# 定义一个初始化方法,定义学生属性信息
def __init__(self,stu_id,stu_name,stu_age):
self.stu_id=stu_id
self.stu_name=stu_name
self.stu_age=stu_age
# 格式化对象信息
def __str__(self):
return '| '+self.stu_id.ljust(5)+self.stu_name.ljust(10)+self.stu_age.ljust(3)+' |'
#单元模块测试运行验证
if __name__ == '__main__':
jerry=Student('1','jerry','50')
print(jerry)
student_manager.py
from student import Student
class StudentManagerSystem(object):
#定影一个容器属性,用来保存所有被管理的学生
# 容器是一个字典类型,容器的元素值 {学生id:学生对象}
def __init__(self):
self.students={}
# start()方法是原来启动该管理熊的共有接口方法
def start(self):
print("系统的启动方法")
while True:
#打印选择菜单
self.print_menu()
#输入要执行的id
select_id=input("请输入选择的功能选项ID:")
# 判断id的范围
if select_id.isdigit():
#如果是数字字符串,就是可以转换数字,为后续判断使用
n=int(select_id)
# 判断是否在有效的范围内
if n>=0 and n<=5:
#执行操作方法
self.operator(select_id)
else:
print("id超出范围,请重新输入")
else:
print("输入了非法功能,请重新输入")
def print_menu(self):
menu="""
*************************************
*************************************
1.添加学生
2.显示全部
3.查询学生
4.修改学生
5.删除学生
0.退出系统
*************************************
*************************************
"""
print(menu)
"""
用来执行操作的方法
实现管理代码的逻辑
"""
def operator(self,select_id):
print("选择了功能 ",select_id)
#根据接收的id选择相应的功能
#功能id与字典做映射关系
method_dic={
'1':self.add_student,
'3':self.search_stu_with_id,
'4':self.modify_student_with_id,
'2':self.show_all_info,
'5':self.remove_student_with_id,
'0':exit,
}
#通过接收的id,在字典中去找相应的方法,并执行
method=method_dic[select_id]
#判断有id参数的方法,通过if后代码执行
if select_id=='3' or select_id=='4' or select_id=='5':
stu_id=input("请输入要操作的学生的ID:")
method(stu_id)
#退出方法传入固定的参数0,所以单独判断
elif select_id=='0':
method(0)
#所有无参的方法,都在这里执行
else:
method()
#添加学生的方法
def add_student(self):
# print("添加学生")
#通过输入获取学生的信息
stu_info=self.input_stu_info()
#创建一个学生对象,保存学生的信息
stu=Student(stu_info[0],stu_info[1],stu_info[2])
#添加到学生字典中
self.students[stu.stu_id]=stu
print(self.students)
#查找学生的方法
#方法有个返回值,返回查找到的学生
def search_stu_with_id(self,stu_id):
print(stu_id)
#给学生定义一个默认值为空,默认是找不到学生
stu=None
#通过参数id在字典中进行判断,如果id存在,那么就通过id找到这个学生
if stu_id in self.students:
stu=self.students[stu_id]
#显示学生信息,调用显示单个学生的方法
self.show_stu_info(stu)
else:
print(f'id为{stu_id}的 学生不存在')
#将找到的学生返回
return stu
#修改学生信息
def modify_student_with_id(self,stu_id):
#打印修改学生的id
print('要修改的学生是 ',stu_id)
#修改之前要先查找
stu=self.search_stu_with_id(stu_id)
#判断,如果找到学生就修改,没有找到就不修改
if stu!=None:
#获取新数据
new_stu_info=self.input_stu_info()
#修改
stu.stu_id=new_stu_info[0]
stu.stu_name=new_stu_info[1]
stu.stu_age=new_stu_info[2]
print("修改完成")
else:
print("要修改的学生 ",stu_id,"不存在!")
#删除学生信息
def remove_student_with_id(self,stu_id):
#删除之前 先查找学生
stu=self.search_stu_with_id(stu_id)
#判断如果查找到学生就删除
if stu:
self.students.pop(stu_id)
else:
print("没有找到要删除的学生")
#显示单个学生的信息
def show_stu_info(self,stu):
print(stu)
# 显示所有学生的信息
def show_all_info(self):
#循环打印
for stu in self.students.values():
# print(stu)
self.show_stu_info(stu)
#获取学生信息的方法
#返回一个学生的信息
def input_stu_info(self):
stu_id=input("请输入学生的id:")
stu_name=input("请输入学生的姓名:")
stu_age=input("请输入学生的年龄:")
return stu_id,stu_name,stu_age
#############保存数据###################
#添加两个方法,用来读取数据和退出程序时保存数据
def savedata(self):
print("保存数据")
#以行的方式来保存每一个学生的信息
file_w=open('data','w')
# 遍历所有的学生信息
for stu in self.students.values():
#将学生转换成一个学生字符串对象
stu_s=stu.stu_id+' '+stu.stu_name+' '+stu.stu_age+'n'
#将学生信息组成一个固定格式的字符串,按行写入到文件中
file_w.write(stu_s)
#关闭文件
file_w.close()
###########加载数据#####################
def load_data(self):
print("加载数据")
#打开文件。并要处理文件不存在的异常
file_r=None
try:
file_r=open('data','r')
except Exception as e:
print(e,"文件不存在")
else:
#读取文件内容,按行读取
content=file_r.readlines()
#遍历每一行数据
for stu_s in content:
split_info=stu_s.split()
#创建一个学生对象,然后保存到字典里
stu=Student(split_info[0],split_info[1],split_info[2])
#加到字典里
self.students[stu.stu_id]=stu
finally:
if file_r!=None:
file_r.close()



