"""
学生信息管理系统
version: 2
author: Teow
"""
import json
def print_info():
"""输出功能提示信息"""
print("\n--------------学生信息管理系统--------------\n")
print(" 1. 显示所有学生信息")
print(" 2. 升序显示学生信息")
print(" 3. 添加学生信息")
print(" 4. 查找学生信息")
print(" 5. 修改学生信息")
print(" 6. 删除学生信息")
print(" 7. 保存学生信息")
print(" 8. 载入学生信息")
print(" 9. 退 出\n")
def show_all_info(all_info):
"""显示所有学生信息"""
print("---------------------------------")
print(" 姓名\t\t\t性别\t\t\t学号\n")
# 遍历数组并进行输出
for student_info in all_info:
print(f"{student_info['name'].ljust(3)}\t\t\t{student_info['gender']}\t\t{student_info['student_id']}")
print("---------------------------------")
def sort_info(all_info):
"""对学生信息按学号升序输出"""
sorted_info = sorted(all_info, key=lambda str: str['student_id'])
show_all_info(sorted_info)
def add_info(all_info):
"""添加学生信息"""
# 为学生创建字典
student_info = input_check(all_info)
# 将字典添加到数组尾部
all_info.append(student_info)
print("添加成功!")
def find_info(all_info):
"""通过姓名或者学号查找学生信息"""
keyword = input("请输入姓名或者学号:")
# 去除左右空格
keyword = keyword.strip()
print("---------------------------------")
print(" 姓名\t\t\t性别\t\t\t学号\n")
# 遍历数组,对符合条件的字典进行输出
for student_info in all_info:
if student_info['name'] == keyword or student_info['student_id'] == keyword:
print(f"{student_info['name'].ljust(3)}\t\t\t{student_info['gender']}\t\t{student_info['student_id']}")
print("---------------------------------")
def change_info(all_info):
"""通过学号修改学生信息"""
keyword = input("请输入要修改信息学生的学号:")
keyword = keyword.strip()
# 获取目标信息数组下标
index = find_info_index(all_info, keyword)
if index or index == 0:
student_info = input_check(all_info, keyword)
all_info[index] = student_info
print("修改成功!")
else:
print("未录入该学生信息!")
def del_info(all_info):
"""通过学号删除学生信息"""
keyword = input("请输入要删除信息学生的学号:")
keyword = keyword.strip()
index = find_info_index(all_info, keyword)
if index or index == 0:
del all_info[index]
print("删除成功!")
else:
print("未录入该学生信息!")
def save_info(all_info, filename):
"""保存学生信息"""
with open(filename, 'w') as f:
json.dump(all_info, f)
print("保存成功!")
def load_info(filename):
"""载入学生信息"""
try:
with open(filename) as f:
saved_info = json.load(f)
except FileNotFoundError:
print("文件不存在!")
return []
except json.JSONDecodeError:
print("尚未保存信息!")
return []
else:
if not saved_info:
print("尚未保存信息!")
else:
print("载入成功!")
return saved_info
def input_check(all_info, keyword=None):
"""获取用户输入,并对学号进行检查"""
while True:
while True:
name = input("请输入姓名:")
# 去除左右空格
name = name.strip()
# 非空检查
if name != '':
break
while True:
gender = input("请输入性别:")
gender = gender.strip()
if gender != '':
break
while True:
student_id = input("请输入学号:")
student_id = student_id.strip()
if student_id != '':
break
# 判断该学号是否已经存在
flag = True
for student_info in all_info:
# keyword参数在修改信息时使用,允许新学号与原学号相同
if student_info['student_id'] == student_id and student_id != keyword:
print("该学号已经被登记,请重新输入学生信息!")
flag = False
break
if flag is True:
break
student_info = {'name': name, 'gender': gender, 'student_id': student_id}
return student_info
def find_info_index(all_info, keyword):
"""返回目标学号数组下标"""
flag = False
for i in range(0, len(all_info)):
if all_info[i]['student_id'] == keyword:
flag = True
break
if flag is True:
return i
else:
return None
# 存储所有学生信息的列表
info = []
file = 'student_info.json'
while True:
print_info()
user_num = input("请选择功能选项(1-9):")
user_num = user_num.strip()
if user_num == '1':
show_all_info(info)
elif user_num == '2':
sort_info(info)
elif user_num == '3':
add_info(info)
elif user_num == '4':
find_info(info)
elif user_num == '5':
change_info(info)
elif user_num == '6':
del_info(info)
elif user_num == '7':
save_info(info, file)
elif user_num == '8':
info = load_info(file)
elif user_num == '9':
break
else:
print("请输入正确的选项")
repeat = input("\n按下回车键返回菜单")