题目描述
学生的基本信息要求至少包括:学号、姓名、专 业、年龄、班级。
系统中要包含对学生信息的管理功能,包括但不限于新增学生、删除学生、 修改学生信息、查找指定条件的学生等。
A、新增学生时要考虑到新增学生的学号不能和系统中已有学生的学号冲突,学号具有唯一 性,且学号固定为 6 位数。新增时录入信息要进行合法性检查,例如学号必须是 6 位, 年龄必须在 17~25 岁等。
B、删除学生时要考虑至少实现按照指定学号删除以及按照姓名删除。按照姓名删除时要考 虑到可能有多个学生同名且要删除的是其中一名学生的情况。
C、 修改学生信息时学号不可修改。
D、查找功能至少实现按照学号、按照姓名、按照班级进行查找。
E、 学生的信息在运行时存储于内存中的序列或字典中,程序建议包含将学生信息保存到文 件中以及从文件中加载学生信息的数据持久化功能。
源代码
import os
import json
students = []
def load_students():
global students
if os.path.exists("students.json"):
with open("students.json", "r") as f:
students = json.load(f)
def save_students():
with open("students.json", "w") as f:
json.dump(students, f)
def add_student():
while True:
sid = input("请输入学号(6位数字):")
if not sid.isdigit() or len(sid) != 6:
print("学号必须是6位数字,请重新输入。")
elif any(s["sid"] == sid for s in students):
print("学号已存在,请重新输入。")
else:
break
name = input("请输入姓名:")
major = input("请输入专业:")
while True:
age = input("请输入年龄(17~25岁):")
if not age.isdigit() or int(age) < 17 or int(age) > 25:
print("年龄必须在17~25岁之间,请重新输入。")
else:
break
cls = input("请输入班级:")
student = {"sid": sid, "name": name, "major": major, "age": int(age), "class": cls}
students.append(student)
print("添加成功!")
def delete_student():
sid_or_name = input("请输入要删除的学生的学号或姓名:")
found = False
for i, student in enumerate(students):
if student["sid"] == sid_or_name or student["name"] == sid_or_name:
print("找到以下学生:")
print(f"{i+1}. 学号:{student['sid']} 姓名:{student['name']} 专业:{student['major']} 年龄:{student['age']} 班级:{student['class']}")
confirm = input("确定要删除吗?(y/n)")
if confirm.lower() == "y":
students.pop(i)
print("删除成功!")
found = True
if not found:
print("未找到该学生。")
def modify_student():
sid = input("请输入要修改的学生的学号:")
for student in students:
if student["sid"] == sid:
print("找到以下学生:")
print(f"学号:{student['sid']} 姓名:{student['name']} 专业:{student['major']} 年龄:{student['age']} 班级:{student['class']}")
name = input("请输入姓名(回车不修改):")
if name:
student["name"] = name
major = input("请输入专业(回车不修改):")
if major:
student["major"] = major
while True:
age = input("请输入年龄(17~25岁,回车不修改):")
if age and (not age.isdigit() or int(age) < 17 or int(age) > 25):
print("年龄必须在17~25岁之间,请重新输入。")
else:
break
if age:
student["age"] = int(age)
cls = input("请输入班级(回车不修改):")
if cls:
student["class"] = cls
print("修改成功!")
break
else:
print("未找到该学生。")
def search_student():
keyword = input("请输入要搜索的关键字:")
results = []
for student in students:
if keyword in student["sid"] or keyword in student["name"] or keyword in student["class"]:
results.append(student)
if results:
print(f"共找到{len(results)}个结果:")
for i, student in enumerate(results):
print(f"{i+1}. 学号:{student['sid']} 姓名:{student['name']} 专业:{student['major']} 年龄:{student['age']} 班级:{student['class']}")
else:
print("未找到匹配的学生。")
def print_menu():
print("=" * 30)
print("学生信息管理系统")
print("1. 添加学生")
print("2. 删除学生")
print("3. 修改学生信息")
print("4. 查找学生")
print("5. 显示所有学生")
print("0. 退出")
print("=" * 30)
load_students()
while True:
print_menu()
choice = input("请输入选项:")
if choice == "0":
save_students()
print("谢谢使用,再见!")
break
elif choice == "1":
add_student()
elif choice == "2":
delete_student()
elif choice == "3":
modify_student()
elif choice == "4":
search_student()
elif choice == "5":
if students:
print("所有学生信息如下:")
for i, student in enumerate(students):
print(f"{i+1}. 学号:{student['sid']} 姓名:{student['name']} 专业:{student['major']} 年龄:{student['age']} 班级:{student['class']}")
else:
print("暂无学生信息。")
else:
print("无效选项,请重新输入。")
在这个代码中,我们使用一个全局变量students
来存储所有学生的信息。在程序启动时,我们通过load_students
函数从文件中加载之前保存的学生信息。
在主循环中,我们根据用户的选择执行不同的操作。对于新增学生、删除学生、修改学生信息和查找学生,我们分别实现了相应的函数。其中,新增学生和修改学生信息时需要进行合法性检查,例如学号必须是6位数字,年龄必须在17~25岁之间等。删除学生时可以按照学号或姓名进行删除,而按照姓名删除时可能存在多个同名学生的情况,我们需要让用户确认要删除哪个学生。
除此之外,我们还实现了将学生信息保存到文件和从文件中加载学生信息的功能,以便程序下次启动时能够恢复之前保存的学生信息。
注意:这个代码只是一个简单的示例,实际的学生信息管理系统可能需要更加完善的功能和更严格的数据校验。
© 版权声明
本站资源来自互联网收集,仅供用于学习和交流,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!
THE END