数组越界,数组下标从0开始的,你的infos要获取第三个元素的话需要用infos[2]
顺便说下,程序路径之类的最好不要有中文,虽然现在很多东西都可以支持,但是你不知道哪天哪个模块就抽筋了
class StudentManager:
def __init__(self):
self.student_dict = {}
def start(self):
"""
启动学生管理系统
"""
self.file_to_dict()
while True:
self.show_menu()
menu_code = input("请录入菜单编号:")
if menu_code == "1":
self.add_student()
elif menu_code == "2":
self.show_all()
elif menu_code == "3":
self.find_student()
elif menu_code == "4":
self.update_student()
elif menu_code == "5":
self.delete_student()
elif menu_code == "0":
self.dict_to_file()
break
else:
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:
id = input("请输入学号:")
if id in self.student_dict:
print("学号已经被占用,请使用一个不同的学号!!!")
continue
else:
break
name = input("请输入姓名:")
age = input("请输入年龄:")
sex = input("请输入性别:")
Class = input("请输入班级:")
s = Student(id, name, age,sex,Class)
self.student_dict[id] = s
print(f"添加{id}成功!!!")
def show_all(self):
"""
#显示全部学生信息
"""
if len(self.student_dict) > 0:
print("学号".ljust(15) + "姓名".ljust(15) + "年龄".ljust(15) + "性别".ljust(15) +"班级".ljust(15))
print("-" * 75)
student_list = self.student_dict.values()
for student in student_list:
id = student.id
name = student.name
age = student.age
sex = student.age
Class = student.Class
print(id.ljust(15) + name.ljust(15) + age.ljust(15) + sex.ljust(15) + Class.ljust(15))
print("-" * 75)
else:
print("系统中还没有学生信息!!!")
def find_student(self):
"""
根据学号查询一个学生
"""
id = input("请输入学号:")
if id not in self.student_dict:
print(f"系统中没有学号为{id}的学生!!!")
else:
print("学号".ljust(15) + "姓名".ljust(15) + "年龄".ljust(15) +"性别".ljust(15) + "班级".ljust(15))
print("-" * 75)
s = self.student_dict.get(id)
id = s.id
name = s.name
age = s.age
sex = s.sex
Class = s.Class
print(id.ljust(15) + name.ljust(15) + age.ljust(15) + sex,ljust(15) + Class.ljust(15))
print("-" * 75)
def update_student(self):
"""
根据学号修改一个学生信息
"""
id = input("请录入要修改学生的学号:")
if id not in self.student_dict:
print(f"系统中没有学号为{id}的学生")
else:
name = input("请录入新的姓名:")
age = input("请录入新的年龄:")
sex = input("请输入新的性别:")
Class = input("请输入新的班级:")
s = self.student_dict[id]
s.name = name
s.age = age
s.sex = sex
s.Class = Class
print("修改学生信息成功!!!")
def delete_student(self):
"""
根据学号删除一个学生信息
"""
id = input("请录入要修改学生的学号:")
if id not in self.student_dict:
print(f"系统中没有学号为{id}的学生")
else:
self.student_dict.pop(id)
print(f"删除学生{id}成功!!!")
def dict_to_file(self):
"""
把字典中的学生的数据覆盖写到文件中
"""
student_list = self.student_dict.values()
f = open("student.txt", "w", encoding="UTF-8")
for student in student_list:
id = student.id
name = student.name
age = student.age
sex = student.sex
Class = student.Class
line = id + "," + name + "," + age +"," +sex + "," +Class
f.write(line + "\n")
f.close()
def file_to_dict(self):
"""
读取文件中的数据,一行一行的读取.
从读到的一行数据中解析出学号,姓名,年龄,性别,班级 创建一个学生对象.
把对象作为value,把学号作为key,添加到字典中
"""
f = open("student.txt", "r", encoding="UTF-8")
while True:
line = f.readline()
if line != "":
line = line[0:len(line) - 1]
infos = line.split(",")
id = infos[0]
name = infos[1]
age = infos[2]
sex= infos[3]
Class = infos[4]
s = Student(id, name, age, sex, Class)
self.student_dict[id] = s
else:
break