python开发一个命令行版本的学生信息管理系统

题目描述

学生的基本信息要求至少包括:学号、姓名、专 业、年龄、班级。

系统中要包含对学生信息的管理功能,包括但不限于新增学生、删除学生、 修改学生信息、查找指定条件的学生等。

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
喜欢就支持一下吧
点赞15赞赏 分享