day11 学生管理系统python版本
学生管理系统Python版本
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.center(10) + self.stu_age.rjust(3) + ' |'
# 当前模块的测试代码
if __name__ == '__main__':
tom = Student('1', 'Tom', '12')
print(tom)
main.py
'''
主程序文件,用来实现程序的入口
'''
# 导入学生管理模块
from student_manager import *
if __name__ == '__main__':
# 使用学生管理类创建一个学生管理对象
sms = StudentManagerSystem()
# 通过start() 方法,启动程序
sms.start()
StudentManagerSystem.py
'''
这个模块用来实现学生管理类
主要负责学生管理的增删改查等操作的逻辑实现
'''
from student import Student
class StudentManagerSystem(object):
def __init__(self):
# 定义一个容器属性,用来保存所有被管理的学生
# 容器是一个字典类型
# 容器的元素值 学生ID: 学生对象
self.students = {}
# 加载数据
self.__load_data()
# start() 方法是用来启动该管理系统的公有接口方法
def start(self):
print('系统启动成功')
# 循环执行
while True:
# 打印菜单
self.__print_menu()
# 输入要执行的id
selecd_id = input('请输入要选择功能的ID:')
# 判断,如果输入的ID,不在范围内,那么执行输入
if selecd_id.isdigit():
# 如果是数字字符串,那么转换成数字,方便后面的判断
n = int(selecd_id)
# 判断是否在有效范围内
if n >= 0 and n <= 5:
# 执行操作方法
self.__operator(selecd_id)
else:
print('超出功能ID范围,重新输入')
else:
print('输入了非法功能,请重新输入')
# 打印菜单的方法
def __print_menu(self):
print("*" * 30)
print("欢迎使用【学生管理系统】 V1.0")
print("1.添加学生")
print("2.显示全部")
print("3.查询学生")
print("4.修改学生")
print("5.删除学生")
print("0.退出系统")
print("*" * 30)
# 用来执行操作的方法
# 实现管理的代码逻辑
def __operator(self, selecd_id):
print('选择了功能 ', selecd_id)
# 在这个功能里,需要根据接收的ID来选择相应功能执行
# 将功能的ID和字典做一个映射关系,每一个ID和函数名做为键值对保存到字典中
method_dict = {'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_dict[selecd_id]
# 判断,有id参数的方法,通过if后代码执行
if selecd_id == '3' or selecd_id == '4' or selecd_id == '5':
# 输入一个要操作的学生ID,并传给相应的学生
stu_id = input('请输入要操作的学生ID:')
method(stu_id)
# 所有无参的方法,都在这里执行
else:
# 如果功能ID是0,表示要退出程序,
# 退出程序前先要保存数据,写入文件
if selecd_id == '0':
self.__save_data()
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
# self.students[stu_info[0]] = 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]
# stu = self.students.get(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('修改完成')
self.__show_stu_info(stu)
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 __save_data(self):
print('保存数据')
# 以行的形式来保存每一个学生的信息
# 以写的方式打开一个文件
file_w = open('data', '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()
# 加载数据
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()
本文来自博客园,作者:李好秀,转载请注明原文链接:https://www.cnblogs.com/lehoso/p/17065740.html