要求:
1、打印提示界面,能够实现学生信息的增删改查
2、将学生信息存储到文件中
3、可以进行学生信息的存档与读档
4、可以重名,且删除时将所有同名信息删除
5、尽可能完善健壮性
一、创建一个学生类
# 1、定义学生类
class Student:
def __init__(self, name, gender, age, phno, desc):
"""
该函数用于初始化学生信息
:param name: 学生的 姓名
:param gender: 学生的 性别
:param age: 学生的 年龄
:param phno: 学生的 手机号
:param desc: 学生的 详情
"""
self.name = name
self.gender = gender
self.age = age
self.phno = phno
self.desc = desc
# 2、打印各个属性值
def __str__(self):
return f'name:{self.name},gender:{self.gender},age:{self.age},phno:{self.phno},desc:{self.desc}'
# 3、测试代码
if __name__ == '__main__':
s1 = Student('小林', 23, '女', '111', 'wuhu')
print(s1)
stu_dict = s1.__dict__
print(stu_dict)
print(type(stu_dict))
二、创建一个学生管理类
# 1、导包
from student import Student
import time
# 2、定义 学生管理业务类
class StudentCMS:
# 3、初始化属性
def __init__(self):
# 采用 列表嵌套字典 的形式,存储具体的学生数据
self.student_list = []
# 4、定义函数 show_operator_view,用来打印 操作界面
# 细节:该函数被所有对象 共享,建议定义为 静态方法
@staticmethod
def show_operator_view():
print('=' * 25)
print('欢迎来到学生管理系统V2.0')
print('\t 1.添加学生')
print('\t 2.修改学生')
print('\t 3.删除学生')
print('\t 4.查询单个学生')
print('\t 5.查询所有学生')
print('\t 6.保存信息')
print('\t 0.退出系统')
print('=' * 25)
# 6、定义 退出时再次确认 的函数
def exit_system(self):
input_str = input('您确定要退出吗?(Y/N)')
if input_str.lower() == 'y': # lower函数:将字母转成小写
exit('感谢您的使用,下次再见!')
# 7、定义 添加学生信息 函数
def add_student(self):
name = input('请输入学生的 姓名:')
gender = input('请输入学生的 性别:')
age = eval(input('请输入学生的 年龄:'))
phno = input('请输入学生的 手机号:')
desc = input('请输入学生的 描述信息:')
# 7.1 将上述的信息 封装成 学生对象
stu = Student(name, gender, age, phno, desc)
# 7.2 将学生对象 添加到 学生列表中
self.student_list.append(stu)
print('添加信息成功!\n')
# 8、显示所有学生信息
def show_all_student(self):
if len(self.student_list) > 0:
for stu in self.student_list:
print(stu)
else:
print('暂无数据,请添加后再查询\n')
# 9、删除所有匹配学生
def delete_student(self):
# 标记变量
flag = False
del_name = input('要删除的学生姓名:')
# 9.1 遍历学生列表
i = 0 # 记录索引
while i < len(self.student_list):
stu = self.student_list[i]
# 9.2 判断是否为要删除的学生
if stu.name == del_name:
self.student_list.remove(stu)
# 细节:每删除一次,索引减 1
i -= 1
flag = True
# while循环的控制条件
i += 1
# 9.3 根据标记变量,进行响应提示
print('删除成功!\n' if flag else '查无此人,请重新输入\n')
# 10、修改学生信息
def update_student(self):
upd_name = input('')
for stu in self.student_list:
if stu.name == upd_name:
stu.gender = input('请输入学生的 性别:')
stu.age = eval(input('请输入学生的 年龄:'))
stu.phno = input('请输入学生的 手机号:')
stu.desc = input('请输入学生的 描述信息:')
print('')
break
else:
print('查无此人,请核对后再修改\n')
# 11、查询单个学生信息
def show_student(self):
show_name = input('要查询信息的学生姓名:')
for stu in self.student_list:
if stu.name == show_name:
print(stu)
break
else:
print('查无此人,请核对后再查询\n')
# 12、保存学生信息 到文件,格式为:字符串形式的 列表嵌套字典(存档)
def save_data(self):
# 12.1 获取目的地文件的对象形式
dest_f = open('./student.data', mode='w', encoding='utf-8')
# 12.2 把学生列表,转成字符串形式
data = str([stu.__dict__ for stu in self.student_list])
# 12.3 把数据写到文件中
dest_f.write(data)
# 12.4 关闭对象,释放资源
dest_f.close()
# 13、将文件信息 读取到 学生列表中(读档)
def load_data(self):
try:
src_f = open('./student.data', mode='r', encoding='utf-8')
# 13.2 从文件中 一次性读取 所有数据
data = src_f.read()
# 13.3 若文件内容不为空,将内容设置给student_list
if len(data) > 0:
self.student_list = [Student(dict_stu['name'], dict_stu['gender'], dict_stu['age'], dict_stu['phno'], dict_stu['desc'])for dict_stu in eval(data)]
except:
# 13.4 只写模式 当文件不存在 自动创建
src_f = open('./student.data', mode='w', encoding='utf-8')
# 13.5 关闭对象,释放资源
src_f.close()
# 5、定义start()函数,表示具体的 业务逻辑流程
def start(self):
# 5.1 模拟用户等待
time.sleep(2)
# 5.2 调用读档函数
self.load_data()
# 5.3 用死循环包裹,即可反复输入
while True:
# 5.4 打印操作界面
StudentCMS.show_operator_view()
# 5.5 提示录入并接收
number = input('请输入您要操作的功能编号:') # 为了提高代码的健壮性,不做转换
if number == '1':
self.add_student()
elif number == '2':
self.update_student()
elif number == '3':
self.delete_student()
elif number == '4':
self.show_student()
elif number == '5':
self.show_all_student()
elif number == '6':
self.save_data()
elif number == '0':
self.exit_system()
else:
print('错误操作,请输入0~6的操作编码')
三、创建一个操作类
# 1、导包
from studentcms import StudentCMS
# 2、定义main函数,用来执行学生管理系统
if __name__ == '__main__':
stu_cms = StudentCMS()
stu_cms.start()
在操作类中运行即可。