版本 面向对象版本的学生信息管理系统
第一版:
import os
# 面向对象的方式分析学生管理管理系统
# 1. 添加学生的功能
# 2. 修改学生的功能
# 3. 删除学生的功能
# 4. 查询学生的功能
# 定义类
# 1. 学生管理系统类
# 2. 学生类
# 分析学生管理系统类的成员
# 1. 属性: 学生列表属性
# 2. 方法:增删改查的行为方法
# 分析学生类的成员
# 1. 属性: 姓名, 年龄,性别
# 2. 方法: 无
# 学生类
class Student(object):
def __init__(self, name, age, sex):
# 添加三个属性
self.name = name
self.age = age
self.sex = sex
# 学生管理系统类
class StudentManagerSystem(object):
def __init__(self):
# 添加学生列表属性
self.student_list = [] # 未来的数据格式: [学生对象1, 学生对象2, ....]
# 显示功能菜单
@staticmethod
def show_menu():
print("----学生管理系统V1.0----")
print("1. 添加学生")
print("2. 修改学生")
print("3. 删除学生")
print("4. 查询学生")
print("5. 显示所有学生")
print("6. 退出")
# 添加学生的功能函数
def add_student(self):
name = input("请输入您的姓名:")
age = input("请输入您的年龄:")
sex = input("请输入您的性别:")
# 创建学生类的对象
stu = Student(name, age, sex)
# 添加学生字典到学生列表
self.student_list.append(stu)
print("添加成功")
# 显示所有学生的功能函数
def show_all_student(self):
for index, stu in enumerate(self.student_list):
# 学号 = 下标 + 1
num = index + 1
print("学号: %d 姓名: %s 年龄: %s 性别: %s" % (num,
stu.name,
stu.age,
stu.sex))
# 修改学生信息的功能函数
def modify_student(self):
student_no = int(input("请输入您要修改学生信息的学号:"))
# 根据学号计算对应的下标
index = student_no - 1
# 判断index是否是一个合法的下标
if 0 <= index < len(self.student_list):
# 根据下标获取要修改的学生对象
stu = self.student_list[index]
# 接收用户输入的最新数据
new_name = input("请输入您修改后的姓名:")
new_age = input("请输入您修改后的年龄:")
new_sex = input("请输入您修改后的性别:")
# 修改对象的属性信息
stu.name = new_name
stu.age = new_age
stu.sex = new_sex
print("修改成功!")
else:
print("请输入合法学号!")
# 删除学生信息的功能函数
def remove_student(self):
student_no = int(input("请输入要删除学生的学号:"))
# 根据学号计算对应下标
index = student_no - 1
# 判断index是否是一个合法的下标
if 0 <= index < len(self.student_list):
# 根据下标删除学生列表中的数据
del self.student_list[index]
print("删除成功!")
# 大家需要完成删除后,显示被删除的学生姓名
# stu_dict = student_list.pop(index)
# stu_dict["name"]
else:
print("请输入合法的学号!")
# 查询学生的功能函数
def query_student(self):
name = input("请输入您要查询学生的姓名:")
# 遍历学生列表,获取每一个学生对象
for index, stu in enumerate(self.student_list):
# 根据学生字典取出姓名,判断是否和用户输入的姓名一致
if stu.name == name:
# 生成学号
num = index + 1
print("学号: %d 姓名: %s 年龄: %s 性别: %s" % (num,
stu.name,
stu.age,
stu.sex))
break
else:
print("对不起,您查询的学生信息不存在!")
# 保存学生列表数据到文件
def save_data(self):
# 1. 打开文件
file = open("student_list.data", "w", encoding="utf-8")
# 2. 写入数据
# 把学生列表对象转成学生列表字典
new_list = [stu.__dict__ for stu in self.student_list]
print(new_list)
# 把列表转成字符串
student_list_str = str(new_list)
print(student_list_str)
file.write(student_list_str)
# 3. 关闭文件
file.close()
# 加载缓存文件中的历史数据
def load_data(self):
# 判断文件是否存在
if os.path.exists("student_list.data"):
# 1. 打开文件
file = open("student_list.data", "r", encoding="utf-8")
# 2. 读取数据
file_data = file.read()
# print(file_data, type(file_data))
new_student_list = eval(file_data)
# 把列表字典转成列表学生对象
new_list = [Student(**stu_dict) for stu_dict in new_student_list]
# 把new_student_list中的每项数据条件到student_list
self.student_list.extend(new_list)
# 3. 关闭文件
file.close()
# 程序启动的入口函数
def start(self):
# 加载历史数据,只加载一次即可
self.load_data()
while True:
# 显示功能菜单
self.show_menu()
# 2. 接收用户输入的功能选项
menu_option = input("请输入您需要的功能选项:")
# 3. 判断用户输入的功能选项
if menu_option == "1":
# print("执行添加学生的功能")
self.add_student()
elif menu_option == "2":
# print("执行修改学生的功能")
self.modify_student()
elif menu_option == "3":
# print("执行删除学生的功能")
self.remove_student()
elif menu_option == "4":
# print("执行查询学生的功能")
self.query_student()
elif menu_option == "5":
# print("执行显示所有学生的功能")
self.show_all_student()
elif menu_option == "6":
print("退出系统")
# 退出程序之前,保存数据到文件
self.save_data()
break
# 创建学生管理系统对象
sms = StudentManagerSystem()
# 启动程序
sms.start()
第二版:
import os
class Student(object):
def __init__(self, name, age, sex):
self.name = name
self.age = age
self.sex = sex
class StudentManagerSystem(object):
def __init__(self):
self.student_list = []
@staticmethod
def show_meun():
print("----学生管理系统V1.0----")
print("1. 添加学生")
print("2. 修改学生")
print("3. 删除学生")
print("4. 查询学生")
print("5. 显示所有学生")
print("6. 退出")
def add_student(self):
name = input('请输入姓名:')
age = input('请输入年龄:')
sex = input('请输入性别:')
stu = Student(name, age, sex)
self.student_list.append(stu)
print("添加成功")
def del_student(self):
student_name = input("请输入你想删除学生的姓名:")
for index, student_dict_name in enumerate(self.student_list):
if student_dict_name['name'] == student_name:
del self.student_list[index]
else:
print('输入有误!')
def modify_student(self):
student_name = input("请输入你想修改学生的姓名:")
for student_dict_name in self.student_list:
if student_dict_name['name'] == student_name:
name = input("修改后的姓名为:")
sex = input("修改后的性别为:")
age = int(input("修改后的年龄为:"))
student_dict_name['name'] = name
student_dict_name['sex'] = sex
student_dict_name['age'] = age
else:
print('输入有误!')
def show_student(self):
student_name = input("请输入你想查询学生的姓名:")
for student_dict_name in self.student_list:
if student_dict_name['name'] == student_name:
print('你所查询的学生信息为:')
print(student_dict_name)
else:
print("查无此人!")
def show_student_list(self):
for n in range(0, len(self.student_list)):
print(f'第{n + 1}位学号为:{n + 1},学生信息为:{self.student_list[n]}')
def save_data(self):
with open('student_list.data', 'w', encoding='utf-8') as f:
new_list = [stu.__dict__ for stu in self.student_list]
student_list_str = str(new_list)
f.write(student_list_str)
def load_data(self):
if os.path.exists('student_list.data'):
with open('student_list.data', 'r', encoding='utf-8') as f:
file_data = f.read()
new_student_list = eval(file_data) # 将读取的字符串完全提取出来
self.student_list.extend(new_student_list)
def run(self):
self.load_data() # 启动程序前先加载以前的数据
while True:
self.show_meun()
menu_option = input("请输入你想进行操作的序号:")
if menu_option == "1":
print("添加学生")
self.add_student()
elif menu_option == "2":
print("删除学生")
if len(self.student_list) == 0:
print("还没有学生信息")
else:
self.del_student()
elif menu_option == "3":
print("修改学生信息")
if len(self.student_list) == 0:
print("还没有学生信息")
else:
self.modify_student()
elif menu_option == "4":
print("查询学生信息")
if len(self.student_list) == 0:
print("还没有学生信息")
else:
self.show_student()
elif menu_option == "5":
print("显示所有学生信息")
self.show_student_list()
elif menu_option == "6":
print("退出")
self.save_data() # 在程序退出前保存数据到文件中
break
sms = StudentManagerSystem()
# 启动程序
sms.run()