You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

117 lines
3.4 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# -*- coding: utf-8 -*-
import json
import os
DATA_FILE = 'students.json'
def load_students():
"""从文件加载学生数据"""
if os.path.exists(DATA_FILE):
with open(DATA_FILE, 'r', encoding='utf-8') as f:
return json.load(f)
return []
def save_students(students):
"""保存学生数据到文件"""
with open(DATA_FILE, 'w', encoding='utf-8') as f:
json.dump(students, f, ensure_ascii=False, indent=2)
def input_student_info():
"""输入学生信息并验证"""
name = input("请输入姓名:").strip()
while not name:
print("姓名不能为空!")
name = input("请输入姓名:").strip()
gender = input("请输入性别(男/女):").strip()
while gender not in ['', '']:
print("性别输入错误,请重新输入!")
gender = input("请输入性别(男/女):").strip()
class_name = input("请输入班级:").strip()
while not class_name:
print("班级不能为空!")
class_name = input("请输入班级:").strip()
phone = input("请输入电话号码:").strip()
while not (phone.isdigit() and len(phone) >= 7):
print("电话号码必须为数字且至少7位")
phone = input("请输入电话号码:").strip()
return {
'name': name,
'gender': gender,
'class': class_name,
'phone': phone
}
def add_student(students):
"""添加学生"""
student = input_student_info()
students.append(student)
print(f"学生 {student['name']} 添加成功!")
def delete_student(students):
"""删除学生"""
name = input("请输入要删除的学生姓名:").strip()
found = [s for s in students if s['name'] == name]
if not found:
print("未找到该学生!")
return
for s in found:
students.remove(s)
print(f"已删除 {len(found)} 个名为 {name} 的学生")
def search_student(students):
"""查询学生"""
keyword = input("请输入查询关键字(姓名或班级):").strip()
results = []
for s in students:
if keyword in s['name'] or keyword in s['class']:
results.append(s)
if not results:
print("未找到匹配的学生!")
return
print("\n查询结果:")
for i, student in enumerate(results, 1):
print(f"{i}. 姓名:{student['name']}")
print(f" 性别:{student['gender']}")
print(f" 班级:{student['class']}")
print(f" 电话:{student['phone']}\n")
def show_menu():
"""显示主菜单"""
print("\n学生通讯录管理系统")
print("1. 添加学生")
print("2. 删除学生")
print("3. 查询学生")
print("4. 退出系统")
def main():
students = load_students()
while True:
show_menu()
choice = input("请选择操作1-4").strip()
if choice == '1':
add_student(students)
elif choice == '2':
delete_student(students)
elif choice == '3':
search_student(students)
elif choice == '4':
save_students(students)
print("系统已退出,数据已保存!")
break
else:
print("输入无效,请重新输入!")
if __name__ == '__main__':
main()