def dict_to_file(self):
"""
把字典中的学生的数据覆盖写到文件中
"""
# 1.得到所有value对应的列表
student_list = self.student_dict.values()
# 2.打开文件,以只写的方法打开文件,编码设置为UTF-8
f = open("student.txt", "w", encoding="UTF-8")
# 3.遍历列表,每个元素都是一个对象
for student in student_list:
# 4.在循环中,得到学生对象的学号,姓名,分数,组成一个字符串
id = student.id
name = student.name
score = student.score
line = id + "," + name + "," + score
# 5.把这个字符串写入到文件中
f.write(line + "
")
# 6.循环结束后,关闭文件
f.close()
def file_to_dict(self):
"""
读取文件中的数据,一行一行的读取.
从读到的一行数据中解析出学号,姓名,分数, 创建一个学生对象.
把对象作为value,把学号作为key,添加到字典中
"""
# 1.以只读的方式打开文件
f = open("student.txt", "r", encoding="UTF-8")
while True:
# 2.循环着读取文件,一次读一行
line = f.readline()
if line != "":
# 如果数据不为空,去掉最后的换行符
line = line[0:len(line) - 1]
# 3.在循环里面,从读到的一行数据中解析出学号,姓名,分数
infos = line.split(",")
id = infos[0]
name = infos[1]
score = infos[2]
# 4.使用学号,姓名,分数创建一个学生对象
s = Student(id, name, score)
# 5.把对象作为value,把学号作为key,添加到字典中
self.student_dict[id] = s
else:
# 如果本次没有读到数据,表示数据已经读完了,应该终止循环
break
from student_manager import *
# 编写启动学生管理系统的代码
sm = StudentManager()
sm.start()
# 定义学生类
class Student:
def __init__(self, id, name, score):
self.id = id
self.name = name
self.score = score
def __str__(self):
return f"{self.id}, {self.name}, {self.score}"
from student import *
# 学生管理系统的主要功能
class StudentManager:
def __init__(self):
# 添加一个字典,用来存储所有的学生
# 学号作为key, 学生对象作为value
self.student_dict = {}
def start(self):
"""
启动学生管理系统
"""
# 在系统一启动的时候 ,就应该从文件中读取数据,存到字典中
self.file_to_dict()
# 5.把以上4个步骤循环起来
while True:
# 1.显示菜单
# print("调用 显示菜单 的功能")
self.show_menu()
# 2.提示录入菜单编号
menu_code = input("请录入菜单编号:")
# 3.判断菜单编号
if menu_code == "1":
# 4.根据判断的结果调用对应的功能
# print("调用 1.添加的学生 的功能")
self.add_student()
elif menu_code == "2":
# 4.根据判断的结果调用对应的功能
# print("调用 2.显示全部 的功能")
self.show_all()
elif menu_code == "3":
# 4.根据判断的结果调用对应的功能
# print("调用 3.查询学生 的功能")
self.find_student()
elif menu_code == "4":
# 4.根据判断的结果调用对应的功能
# print("调用 4.修改学生 的功能")
self.update_student()
elif menu_code == "5":
# 4.根据判断的结果调用对应的功能
# print("调用 5.删除学生 的功能")
self.delete_student()
elif menu_code == "0":
# 4.根据判断的结果调用对应的功能
# print("调用 0.退出系统 的功能")
# 退出系统之前把内存中的数据存入文件中
self.dict_to_file()
break
else:
# 4.根据判断的结果调用对应的功能
print("录入的菜单编号有误,请重新录入!!!")
def show_menu(self):
"""
显示菜单
"""
print("*" * 40)
print("欢迎使用【学生管理系统】 V1.0")
print("1.添加学生")
print("2.显示全部")
print("3.查询学生")
print("4.修改学生")
print("5.删除学生")
print()
print("0.退出系统")
print("*" * 40)
def add_student(self):
"""
添加学生
"""
# 这段代码 控制不能录入重复的学号的
while True:
# 1.提示录入一个学号
id = input("请输入学号:")
# 2.判断学号是否重复,如果重复,需要重新录入
if id in self.student_dict:
print("学号已经被占用,请使用一个不同的学号!!!")
continue
else:
break
# 3.提示录入姓名和分数
name = input("请输入姓名:")
score = input("请输入分数:")
# 4.使用录入的学号,姓名,分数创建一个学生对象
s = Student(id, name, score)
# 5.把学号作为key,对象作为value,添加到字典
self.student_dict[id] = s
# 6.提示添加成功
print(f"添加{id}成功!!!")
def show_all(self):
"""
#显示全部学生信息
"""
# 先判断系统中是否有学生信息,如果有:
if len(self.student_dict) > 0:
# 1.打印表头,和上面的那条线
print("学号".ljust(15) + "姓名".ljust(15) + "分数".ljust(15))
print("-" * 45)
# 2.得到字典中所有的value组成的列表
student_list = self.student_dict.values()
# 3.遍历列表,每个元素都是一个学生对象
for student in student_list:
id = student.id
name = student.name
score = student.score
# 4.在循环里面,得到学号,姓名,分数,打印成一行
print(id.ljust(15) + name.ljust(15) + score.ljust(15))
# 5.在循环结束后,打印下面那条线
print("-" * 45)
else:
# 如果系统中没有学生信息,就提示"系统中还没有学生信息!!!"
print("系统中还没有学生信息!!!")
def find_student(self):
"""
根据学号查询一个学生
"""
# 1.提示录入学号
id = input("请输入学号:")
# 2.查找学号在系统是否存在
if id not in self.student_dict:
# 3.如果不存在,就提示系统中没有此学生
print(f"系统中没有学号为{id}的学生!!!")
else:
# 4.如果存在:
# 4.1 打印表头和那条线
print("学号".ljust(15) + "姓名".ljust(15) + "分数".ljust(15))
print("-" * 45)
# 4.2 得到这个学号对应的学生对象
s = self.student_dict.get(id)
id = s.id
name = s.name
score = s.score
# 4.3 得到学号,姓名,分数,打印成一行
print(id.ljust(15) + name.ljust(15) + score.ljust(15))
# 4.4 打印出下面那条线
print("-" * 45)
def update_student(self):
"""
根据学号修改一个学生信息
"""
# 1.提示录入学号
id = input("请录入要修改学生的学号:")
# 2.查找学号在系统是否存在
if id not in self.student_dict:
# 3.如果不存在,就提示系统中没有此学生
print(f"系统中没有学号为{id}的学生")
else:
# 4.如果有,提示录入新的姓名和分数
name = input("请录入新的姓名:")
score = input("请录入新的分数:")
# 5.根据学号从字典中得到学生对象
s = self.student_dict[id]
# 6.使用新录入的姓名和分数,修改学生对象中的姓名和分数
s.name = name
s.score = score
# 7.提示修改成功
print("修改学生信息成功!!!")
def delete_student(self):
"""
根据学号删除一个学生信息
"""
# 1.提示录入学号
id = input("请录入要修改学生的学号:")
# 2.查找学号在系统是否存在
if id not in self.student_dict:
# 3.如果不存在,就提示系统中没有此学生
print(f"系统中没有学号为{id}的学生")
else:
# 4.如果有,从字典中把该学号对应的键值对删除
self.student_dict.pop(id)
# 5.提示删除成功
print(f"删除学生{id}成功!!!")
def dict_to_file(self):
"""
把字典中的学生的数据覆盖写到文件中
"""
# 1.得到所有value对应的列表
student_list = self.student_dict.values()
# 2.打开文件,以只写的方法打开文件,编码设置为UTF-8
f = open("student.txt", "w", encoding="UTF-8")
# 3.遍历列表,每个元素都是一个对象
for student in student_list:
# 4.在循环中,得到学生对象的学号,姓名,分数,组成一个字符串
id = student.id
name = student.name
score = student.score
line = id + "," + name + "," + score
# 5.把这个字符串写入到文件中
f.write(line + "
")
# 6.循环结束后,关闭文件
f.close()
def file_to_dict(self):
"""
读取文件中的数据,一行一行的读取.
从读到的一行数据中解析出学号,姓名,分数, 创建一个学生对象.
把对象作为value,把学号作为key,添加到字典中
"""
# 1.以只读的方式打开文件
f = open("student.txt", "r", encoding="UTF-8")
while True:
# 2.循环着读取文件,一次读一行
line = f.readline()
if line != "":
# 如果数据不为空,去掉最后的换行符
line = line[0:len(line) - 1]
# 3.在循环里面,从读到的一行数据中解析出学号,姓名,分数
infos = line.split(",")
id = infos[0]
name = infos[1]
score = infos[2]
# 4.使用学号,姓名,分数创建一个学生对象
s = Student(id, name, score)
# 5.把对象作为value,把学号作为key,添加到字典中
self.student_dict[id] = s
else:
# 如果本次没有读到数据,表示数据已经读完了,应该终止循环
break
1,小樱,100
2,千寻,100
3,小野,100