前言

今天这篇博客我将和各位一起完成这样一个简单的项目——学生管理系统。该项目最终呈现效果为增加学生、删除学生、编辑学生、查找学生、输出所有学生信息,也就是经典的 “ 增、删、改、查 ” 。

在这篇文章中,我们用 字典(dict) 嵌套 列表(list) 实现,话不多说,我们开始。

运行截图
运行截图

首先,该方法的原理是 用学号作为字典的键(key),因为每一个学生的学号都是不同的,满足字典中 key 的互异性,否则如果用姓名作为 key ,那如果有同名的学生,处理起来就会特别麻烦。

用姓名、性别、年龄所组成的列表作为该键所对应的值(value),进而完成学生信息的储存。

我们先创建一个字典,用来储存所有学生的信息:

stu_dict = {}
# stu_dict = dict() 也可以使用函数 dict() 来创建字典

1. 增加学生

我们定义一个函数用于增加学生,函数体中的功能很简单:如果该学生的学号已经在字典的key中了(即已存在该学生),就更新该 key 所对应的 value ,否则就新增一个学生。我们可以用一条语句就实现该效果:

def Add_stu(id,name,gender,age):    # 传入姓名、学号、性别、年龄四个参数
stu_dict[id] = [name,gender,age]    # 列表从0到2号位分别为姓名、性别、年龄
print("添加成功。\n")    # 加一个换行符 \n ,使最终效果更美观

2. 删除学生

这个函数中我们使用到了 if...in... 语句,让我们很方便的查找传入的学号是否在所有学号中。要注意的是,不同于列表有多种删除元素的方式,在字典中,我们只能通过 del... 来删除元素。

def Del_stu(id):    # 传入学生的学号
if id in stu_dict.keys():   # 查找该学号是否在字典的keys(即所有学生的学号)中
    del stu_dict[id]    # 删除所对应的字典元素
    print("删除成功。\n")
else:
    print("未找到该学生,无法删除。\n")

3. 修改学生

def Mod_stu(id):
if id in stu_dict.keys():
    name = input("学生姓名:")
    gender = input("学生性别:")
    age = input("学生年龄:")
    stu_dict[id] = [name,gender,age]    # 用新信息覆盖旧信息
    print("修改成功。\n")
else:
    print("未找到该学生,无法修改。\n")

4. 查找学生

在上文中,我们已经知道了姓名、性别、年龄在列表中的下标索引分别为 0、1、2 ,我们可以通过 字典名 key 来获得嵌套列表中对应下标的值。

def Find_stu(id):
if id in stu_dict.keys():
    name = stu_dict[id][0]
    gender = stu_dict[id][2]
    age = stu_dict[id][3]
    print("经查询,该学生信息如下:")
    print(f"姓名:{name},学号:{id},性别:{gender},年龄:{age}\n")
else:
    print("未找到该学生。\n")

5. 输出所有学生信息

输出所有学生的信息,也就是输出所有字典元素,我们只需要用简单的 for 循环即可实现:

def View_stu():
if stu_dict:    # 如果字典中不为空,则进入if语句
    for id in stu_dict.keys():
        name = stu_dict[id][0]
        gender = stu_dict[id][4]
        age = stu_dict[id][5]
        print(f"姓名:{name},学号:{id},性别:{gender},年龄:{age}")
    print() # 添加一个空行,使最终效果更美观
else:
    print("无学生。")

6. 制作菜单

写完了以上五个功能,学生管理系统的开发就接近尾声了,最后,我们只需要制作一个菜单即可:

while (True):
print("请输入 1-5 的数值,输入 -1 结束程序:")
print("1. 增加学生\t2. 删除学生")
print("3. 修改学生\t4. 查找学生")
print("5. 输出所有学生信息")
i = input()
if i == '-1':
    exit()
elif i == '1':
    name = input("学生姓名:")
    id = input("学生学号:")
    gender = input("学生性别:")
    age = input("学生年龄:")
    Add_stu(id,name,gender,age) # 注意传参顺序不要错
elif i == '2':
    id = input("请输入要删除学生的学号:")
    Del_stu(id)
elif i == '3':
    id = input("请输入要修改学生的学号:")
    Mod_stu(id)
elif i == '4':
    id = input("请输入要查找学生的学号:")
    Find_stu(id)
elif i == '5':
    View_stu()
else:
    print("请输入有效的数字。")

完整代码

stu_dict = {}
# stu_dict = dict() 也可以使用函数 dict() 来创建字典

def Add_stu(id,name,gender,age):    # 传入姓名、学号、性别、年龄四个参数
    stu_dict[id] = [name,gender,age]    # 列表从0到2号位分别为姓名、性别、年龄
    print("添加成功。\n")    # 加一个换行符 \n ,使最终效果更美观

def Del_stu(id):    # 传入学生的学号
    if id in stu_dict.keys():   # 查找该学号是否在字典的keys(即所有学生的学号)中
        del stu_dict[id]    # 删除所对应的字典元素
        print("删除成功。\n")
    else:
        print("未找到该学生,无法删除。\n")

def Mod_stu(id):
    if id in stu_dict.keys():
        name = input("学生姓名:")
        gender = input("学生性别:")
        age = input("学生年龄:")
        stu_dict[id] = [name,gender,age]    # 用新信息覆盖旧信息
        print("修改成功。\n")
    else:
        print("未找到该学生,无法修改。\n")

def Find_stu(id):
    if id in stu_dict.keys():
        name = stu_dict[id][0]
        gender = stu_dict[id][6]
        age = stu_dict[id][7]
        print("经查询,该学生信息如下:")
        print(f"姓名:{name},学号:{id},性别:{gender},年龄:{age}\n")
    else:
        print("未找到该学生。\n")

def View_stu():
    if stu_dict:    # 如果字典中不为空,则进入if语句
        for id in stu_dict.keys():
            name = stu_dict[id][0]
            gender = stu_dict[id][8]
            age = stu_dict[id][9]
            print(f"姓名:{name},学号:{id},性别:{gender},年龄:{age}")
        print() # 添加一个空行,使最终效果更美观
    else:
        print("无学生。")

while (True):
    print("请输入 1-5 的数值,输入 -1 结束程序:")
    print("1. 增加学生\t2. 删除学生")
    print("3. 修改学生\t4. 查找学生")
    print("5. 输出所有学生信息")
    i = input()
    if i == '-1':
        exit()
    elif i == '1':
        name = input("学生姓名:")
        id = input("学生学号:")
        gender = input("学生性别:")
        age = input("学生年龄:")
        Add_stu(id,name,gender,age) # 注意传参顺序不要错
    elif i == '2':
        id = input("请输入要删除学生的学号:")
        Del_stu(id)
    elif i == '3':
        id = input("请输入要修改学生的学号:")
        Mod_stu(id)
    elif i == '4':
        id = input("请输入要查找学生的学号:")
        Find_stu(id)
    elif i == '5':
        View_stu()
    else:
        print("请输入有效的数字。")