学生管理系统功能清单
- 添加学生信息(学号、姓名、年龄、性别、成绩)
- 删除学生(按学号)
- 修改学生信息(按学号)
- 查询学生信息(按学号 / 姓名)
- 显示所有学生信息
- 保存数据到文件(txt 格式)
- 加载文件中的学生数据
- 退出系统
完整代码实现
python
运行
import os
# 全局变量:存储学生信息的列表(每个元素是字典)
student_list = []
# 数据文件路径
DATA_FILE = "students.txt"
def print_menu():
"""打印系统菜单"""
print("=" * 30)
print(" 学生管理系统 V1.0")
print(" 1. 添加学生信息")
print(" 2. 删除学生信息")
print(" 3. 修改学生信息")
print(" 4. 查询学生信息")
print(" 5. 显示所有学生信息")
print(" 6. 保存数据到文件")
print(" 7. 从文件加载数据")
print(" 0. 退出系统")
print("=" * 30)
def add_student():
"""添加学生信息"""
print("\n----- 添加学生 -----")
# 输入学号(确保唯一)
while True:
student_id = input("请输入学生学号(数字):").strip()
if not student_id.isdigit():
print("学号必须是数字!请重新输入。")
continue
# 检查学号是否已存在
exists = any(student["id"] == student_id for student in student_list)
if exists:
print(f"学号 {student_id} 已存在!请重新输入。")
else:
break
# 输入其他信息
name = input("请输入学生姓名:").strip()
while True:
age = input("请输入学生年龄(数字):").strip()
if age.isdigit() and 0 < int(age) < 100:
age = int(age)
break
print("年龄必须是0-100的数字!请重新输入。")
gender = input("请输入学生性别(男/女):").strip()
while True:
score = input("请输入学生成绩(0-100):").strip()
if score.replace(".", "", 1).isdigit():
score = float(score)
if 0 <= score <= 100:
break
print("成绩必须是0-100的数字!请重新输入。")
# 构造学生字典并添加到列表
student = {
"id": student_id,
"name": name,
"age": age,
"gender": gender,
"score": score
}
student_list.append(student)
print(f"✅ 学生 {name}(学号:{student_id})添加成功!")
def delete_student():
"""删除学生信息(按学号)"""
print("\n----- 删除学生 -----")
if not student_list:
print("❌ 暂无学生数据,无法删除!")
return
student_id = input("请输入要删除的学生学号:").strip()
# 查找并删除学生
for i, student in enumerate(student_list):
if student["id"] == student_id:
del student_list[i]
print(f"✅ 学号 {student_id} 的学生已成功删除!")
return
print(f"❌ 未找到学号 {student_id} 的学生!")
def modify_student():
"""修改学生信息(按学号)"""
print("\n----- 修改学生 -----")
if not student_list:
print("❌ 暂无学生数据,无法修改!")
return
student_id = input("请输入要修改的学生学号:").strip()
# 查找学生
for student in student_list:
if student["id"] == student_id:
print(f"当前信息:{student}")
# 逐项修改(按回车保留原信息)
name = input(f"请输入新姓名(原:{student['name']}):").strip()
if name:
student["name"] = name
# 年龄修改
while True:
age = input(f"请输入新年龄(原:{student['age']}):").strip()
if not age: # 回车保留原数据
break
if age.isdigit() and 0 < int(age) < 100:
student["age"] = int(age)
break
print("年龄必须是0-100的数字!请重新输入(回车保留原数据)。")
# 性别修改
gender = input(f"请输入新性别(原:{student['gender']}):").strip()
if gender:
student["gender"] = gender
# 成绩修改
while True:
score = input(f"请输入新成绩(原:{student['score']}):").strip()
if not score: # 回车保留原数据
break
if score.replace(".", "", 1).isdigit():
score = float(score)
if 0 <= score <= 100:
student["score"] = score
break
print("成绩必须是0-100的数字!请重新输入(回车保留原数据)。")
print(f"✅ 学号 {student_id} 的学生信息修改成功!")
return
print(f"❌ 未找到学号 {student_id} 的学生!")
def query_student():
"""查询学生信息(按学号/姓名)"""
print("\n----- 查询学生 -----")
if not student_list:
print("❌ 暂无学生数据,无法查询!")
return
query_type = input("请选择查询方式(1-按学号,2-按姓名):").strip()
if query_type == "1":
student_id = input("请输入要查询的学号:").strip()
for student in student_list:
if student["id"] == student_id:
print("✅ 查询结果:")
print(f"学号:{student['id']},姓名:{student['name']},年龄:{student['age']},性别:{student['gender']},成绩:{student['score']}")
return
print(f"❌ 未找到学号 {student_id} 的学生!")
elif query_type == "2":
name = input("请输入要查询的姓名:").strip()
results = [s for s in student_list if s["name"] == name]
if results:
print(f"✅ 共找到 {len(results)} 个名为 {name} 的学生:")
for student in results:
print(f"学号:{student['id']},姓名:{student['name']},年龄:{student['age']},性别:{student['gender']},成绩:{student['score']}")
else:
print(f"❌ 未找到姓名为 {name} 的学生!")
else:
print("❌ 无效的查询方式!")
def show_all_students():
"""显示所有学生信息"""
print("\n----- 所有学生信息 -----")
if not student_list:
print("❌ 暂无学生数据!")
return
# 格式化打印表头
print(f"{'学号':<8}{'姓名':<8}{'年龄':<8}{'性别':<8}{'成绩':<8}")
print("-" * 40)
# 打印每个学生信息
for student in student_list:
print(f"{student['id']:<8}{student['name']:<8}{student['age']:<8}{student['gender']:<8}{student['score']:<8.1f}")
def save_to_file():
"""保存学生数据到文件"""
if not student_list:
print("❌ 暂无学生数据,无需保存!")
return
try:
with open(DATA_FILE, "w", encoding="utf-8") as f:
for student in student_list:
# 按格式写入:学号|姓名|年龄|性别|成绩
line = f"{student['id']}|{student['name']}|{student['age']}|{student['gender']}|{student['score']}\n"
f.write(line)
print(f"✅ 数据已成功保存到 {DATA_FILE}!")
except Exception as e:
print(f"❌ 保存失败:{e}")
def load_from_file():
"""从文件加载学生数据"""
if not os.path.exists(DATA_FILE):
print(f"❌ {DATA_FILE} 文件不存在!")
return
try:
with open(DATA_FILE, "r", encoding="utf-8") as f:
lines = f.readlines()
# 清空原有数据
student_list.clear()
for line in lines:
line = line.strip()
if not line:
continue
# 拆分数据并转换类型
parts = line.split("|")
if len(parts) != 5:
print(f"⚠️ 跳过无效行:{line}")
continue
student_id, name, age, gender, score = parts
# 类型转换
try:
age = int(age)
score = float(score)
except ValueError:
print(f"⚠️ 数据类型错误,跳过行:{line}")
continue
# 添加到列表
student_list.append({
"id": student_id,
"name": name,
"age": age,
"gender": gender,
"score": score
})
print(f"✅ 成功从 {DATA_FILE} 加载 {len(student_list)} 条学生数据!")
except Exception as e:
print(f"❌ 加载失败:{e}")
def main():
"""系统主函数"""
print("欢迎使用学生管理系统!")
while True:
print_menu()
choice = input("请输入操作编号(0-7):").strip()
print() # 空行分隔,提升可读性
if choice == "0":
print("👋 感谢使用学生管理系统,再见!")
break
elif choice == "1":
add_student()
elif choice == "2":
delete_student()
elif choice == "3":
modify_student()
elif choice == "4":
query_student()
elif choice == "5":
show_all_students()
elif choice == "6":
save_to_file()
elif choice == "7":
load_from_file()
else:
print("❌ 无效的操作编号!请输入0-7之间的数字。")
input("\n按回车键继续...") # 暂停,等待用户确认
os.system("cls" if os.name == "nt" else "clear") # 清屏(跨平台)
if __name__ == "__main__":
main()
系统使用说明
1. 运行方式
将代码保存为student_management.py,直接运行即可(Python 3.x 环境):
bash
运行
python student_management.py
2. 核心功能操作
- 添加学生:输入唯一学号(数字),依次填写姓名、年龄、性别、成绩(有输入校验,避免非法数据);
- 删除 / 修改 / 查询:按学号精准操作,查询支持 “学号 / 姓名” 两种方式;
- 数据保存 / 加载:自动将数据保存到
students.txt文件(格式:学号|姓名|年龄|性别|成绩),重启系统后可加载; - 清屏功能:每次操作后按回车,自动清屏并重新显示菜单,交互更整洁。
3. 数据校验亮点
- 学号:强制数字 + 唯一性检查;
- 年龄:0-100 的数字;
- 成绩:0-100 的数字(支持小数);
- 所有输入支持 “回车保留原数据”(修改功能)。
扩展建议
- 数据持久化优化:改用 JSON/CSV 格式存储,可读性更强(替换
save_to_file和load_from_file即可); - 增加功能:如按成绩排序、统计平均分 / 最高分、批量导入导出等;
- 界面优化:结合
tkinter制作图形化界面(GUI),提升交互体验; - 权限管理:添加登录功能,区分管理员 / 普通用户权限;
- 异常处理增强:增加更多边界情况校验(如空姓名、特殊字符等)。