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(5) + '年龄:' + self.stu_age.ljust(3)+'|'
if __name__ == '__main__':
tom = Student('1','tom','20')
print(tom)
print(str(tom))
student_manager.py
from student import Student
class StudentManagerSystem():
def __init__(self):
# 定义一个容器属性,荣来保存所有被管理的学生
# 容器是一个字典类型
# 容器的元素值 学生ID:学生对象
self.students = {}
# start()方法是用来启动该管理系统的公有接口方法
def start(self):
print("系统使用成功")
# 循环执行
while True:
# 打印菜单
self.__Print_menu()
# 输入要执行功能的ID
select_id = input("请输入要执行功能的功能编号:")
if select_id.isdigit():
# 判断输入的是否是数字字符串
# 如果是数字字符串,转换成数字,方便后面的操作
n = int(select_id)
if n >=0 and n<=7:
self.__operator(select_id)
else:
print("超出功能ID范围,重新输入!!")
else:
print("输入了非法功能ID请重新输入!!")
# 打印菜单的方法
def __Print_menu(self):
print('^'*20)
print("学生管理系统V1.0")
print("1.添加学生")
print("2.查询学生")
print("3.修改学生")
print("4.删除学生")
print("5.显示所有学生")
print("6.保存输入的学生信息到本地")
print("7.加载数据")
print("0.退出系统")
print('^'*20)
# 用来执行操作的方法
# 实现管理的代码逻辑
def __operator(self,select_id):
print("选择了功能:",select_id)
# 在这个功能里,需要根据接受的功能ID选择对应功能
# 将功能ID和功能做一个映射,封存到字典中,通过键ID能访问对应功能函数
method_dist = {'1':self.__add_student,
'2':self.__query_stu_with_id,
'3':self.__modify_stu_with_id,
'4':self.__remove_stu_with_id,
'5':self.__show_all_info,
'6':self.__save_data,
'7':self.__laod_data,
'0':exit}
method = method_dist[select_id]
if select_id == '2' or select_id == '3' or select_id == '4':
stu_id = input("请输入要操作的学生ID:")
method(stu_id)
elif select_id == '0':
# 退出方法传入的固定参数是0所以单独判断
method(0)
else:
# 所以无参都在这里执行
method()
# 键盘输入函数:
# 获取学生信息方法
# 返回一个学生信息(列表形式)
def __input_stu_info(self):
stu_id = input("请输入学生ID:")
stu_name = input("请输入学生姓名:")
stu_age = input("请输入学生年龄:")
return stu_id,stu_name,stu_age
# 显示单个学生信息
def __show_stu_info(self,stu):
print(stu)
# 显示所有学生信息
def __show_all_info(self):
print("准备显示所有学生。。。")
# 遍历打印
for stu in self.students.values():
self.__show_stu_info(stu)
#功能1、添加学生函数
def __add_student(self):
print("准备添加学生。。。")
# 通过input函数获取学生信息
stu_info = self.__input_stu_info()
# 创建一个学生对象,保存学生信息
stu = Student(stu_info[0],stu_info[1],stu_info[2])
self.students[stu.stu_id] = stu
# self.students[stu_info[0]] = stu
# 显示添加信息
print('添加的信息为:',stu_info)
#功能2、 查找学生函数
# 方法有个返回值,返回查找的学生
def __query_stu_with_id(self,query_id):
print(f"准备查找学号为{query_id}的学生。。。")
stu = None
# 通过参数id在字典中共进行判断,如果id存在,通过id找到该学生
if query_id in self.students:
stu = self.students[query_id]
# 显示学生信息
self.__show_stu_info(stu)
else:
print(f"输入的学号为{query_id}的学生不存在,请检查学号重新输入!")
# 将找到的学生信息返回
return stu
# 功能3、修改学生函数
def __modify_stu_with_id(self,modify_id):
print(f"准备修改id为{modify_id}的学生信息")
# 查找需要修改的学生信息
stu = self.__query_stu_with_id(modify_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("修改完成!")
self.__show_stu_info(stu)
else:
print(f"学号为{modify_id}的学生不存在!")
# 功能4、删除学生函数
def __remove_stu_with_id(self,remove_id):
print("准备删除学生。。。")
# 调用查找方法查询学生
stu = self.__query_stu_with_id(remove_id)
if stu != None:
self.students.pop(remove_id)
else:
print(f"学号为{remove_id}的学生不存在!")
#功能5、保存到本地文件
def __save_data(self):
print("保存数据!")
# 以行的心事来保存每一个学生信息
# 以写的形式打开一个文件
file_w = open("D:\\桌面\\测试.txt",'w')
# 遍历所有学生信息
for stu in self.students.values():
# 将学生转换成一个字符串对象
# stu_s = str(stu)
stu_s = stu.stu_id + '' + stu.stu_name + '' + stu.stu_age + '\n'
print(stu_s)
# 将学生信息组织成一个固定格式的字符串,按行写入到文件中
file_w.write(stu_s)
# 关闭文件
file_w.close()
print("保存完成!")
#功能6、从本地文件中加载数据
def __laod_data(self):
print("加载数据!")
# 打开文件,并要处理文件不存在的异常
file_r = None
file_r = input("请输入文件完整路径 目录\\目录\\目录 形式:")
try:
file_data = open(file_r,'r')
except Exception as e:
print(e,'文件不存在')
else:
# 读取文件内容
content = file_data.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_data.close()
# 调用函数
StudentManagerSystem().start()