Skip to content

学生管理系统

学生管理系统

需求分析

学生管理系统

项目简介

随着学校的规模变大,对应的学员会越来越多,相应的管理越来越难。 学员信息管理系统主要是对学员的各种信息进行管理,能够让学员的信息关系变得科学化、系统化和规范化。

实现方式

以模块化思想使用函数完成代码开发。

知识点

  • 数据类型
  • 运算符
  • 数据结构
  • 流程控制
  • 函数定义
  • 函数使用
  • 函数参数
  • 函数返回值

项目要求

功能拆解

  1. 学生信息包含: - 编号(sid), 姓名(name), 年龄(age), 性别(gender) 四个信息 - 每个学生信息使用字典形式保存 - 使用列表保存所有学生的信息

  2. 实现菜单函数(menu),输出下列信息,返回用户输入的编号

    print("*****************************")
    print("*      学生管理系统           *")
    print("* 1. 添加新学生信息           *")
    print("* 2. 通过学号修改学生信息      *")
    print("* 3. 通过学号删除学生信息      *")
    print("* 4. 通过姓名删除学生信息      *")
    print("* 5. 通过学号查询学生信息      *")
    print("* 6. 通过姓名查询学生信息      *")
    print("* 7. 显示所有学生信息         *")
    print("* 8. 退出系统                *")
    print("*****************************")
    
  3. 定义管理函数 (studentManager),用来实现整体业务逻辑。

    • 对用户输入内容进行输入校验
    • 根据用户输入内容选择不同功能执行
  4. 因程序中需要多次对编号及姓名进行输入,故抽取函数获取对应的数据。

    - 获取编号函数(getID), 输入编号并返回(字符串类型)eg. s01 - 获取姓名函数(getName), 输入姓名并返回(字符串类型) - 获取姓名函数(getAge), 输入年龄并返回(整型) - 获取姓名函数(getGender), 输入性别并返回(字符串类型)

  5. 实现添加学生函数(addStudent)

    • 函数参数为编号,姓名,年龄,性别四个参数
    • 返回是否添加成功的结果
    • 要求编号不可重复。
  6. 实现通过编号修改学生信息函数(modifyStudentByID)

    • 参数为学号
    • 如果学生存在,则进行修改,不存在输出提示
    • 返回是否修改成功
  7. 实现通过学号删除学生函数(deleteStudentByID)

    • 参数为学号
    • 如果学生存在,则进行删除,不存在输出提示,并返回是否删除成功
  8. 实现通过姓名删除学生函数(deleteStudentByName)

    • 参数为姓名
    • 如果学生存在,则进行删除(同名学生全部删除),不存在输出提示
    • 返回是否删除成功
  9. 实现通过学号查询学生函数(queryStudentByID)

    • 参数为学号
    • 如果学生存在,则输出学生信息,不存在输出提示
    • 返回是否查询成功
  10. 实现通过姓名查询学生函数(queryStudentByName)

    • 参数为姓名
    • 如果学生存在,则输出学生信息(同名学生全部输出),不存在输出提示
    • 返回是否删除成功
  11. 实现显示所有学生信息函数(showAllInfo)

    - 输出所有学生信息

业务功能梳理

uml diagram

功能实现

import os

# 定义一个全局变量,用来保存学生的信息,方法各个函数之间进行访问
students = []

# 菜单函数
def menu():
    print("****************************************")
    print("*                学生管理系统           *")
    print("*        1. 添加新学生信息              *")
    print("*        2. 通过学号修改学生信息        *")
    print("*        3. 通过学号删除学生信息        *")
    print("*        4. 通过姓名删除学生信息        *")
    print("*        5. 通过学号查询学生信息          *")
    print("*        6. 通过姓名查询学生信息          *")
    print("*        7. 显示所有学生信息             *")
    print("*        8. 退出系统                  *")
    print("****************************************")
    select_op = input("输入编号选择操作:")
    return select_op

# 获取学号
def getSid():
    sid = input("请输入学生ID:")
    return sid

# 获取姓名
def getName():
    name = input("请输入学生姓名:")
    return name

# 获取年龄
def getAge():
    while True:
        age = input("请输入学生年龄:")
        if age.isdigit():
            return int(age)
        else:
            print("输入年龄不合法,请输入数字")

# 获取性别
def getGender():
    gender = input("请输入学生性别:")
    return gender

# 添加学生
def addStudent(sid, name, age, gender):
    for s in students:
        if s["sid"] == sid:
            print("学号已存在,添加失败")
            return "添加失败"
    else:
        student = {"sid": sid, "name": name, "age": age, "gender": gender}
        students.append(student)
        print("添加学生信息成功")
        return '添加成功'

# 通过学号修改学生信息
def modifyStudentByID(sid):
    for s in students:
        if s["sid"] == sid:
            name = getName()
            age = getAge()
            gender = getGender()
            s["name"] = name
            s["age"] = age
            s["gender"] = gender
            print("修改成功")
            return "修改成功"
    else:
        print(f'没有 {sid} 对应的学生信息')
        return "修改失败"

# 通过ID删除学生信息
def deleteStudentByID(sid):
    for s in students:
        if s["sid"] == sid:
            students.remove(s)
            print("删除成功")
            return "删除成功"
    else:
        print(f'没有 {sid} 对应的学生信息')
        return "删除失败"

# 通过学生姓名 删除所有符合的学生
def deleteStudentByName(name):
    exist_s = []
    # 找出所有要删除的学生
    for s in students:
        if s['name'] == name:
            exist_s.append(s)

    # 开始删除
    if len(exist_s) > 0:
        for s in exist_s:
            students.remove(s)
            print(f"学号 { s['sid'] } 的学生删除成功")
        else:
            print(f"成功删除 {len(exist_s)} 个学生")
            return "删除成功"
    else:
        print("学号不存在,无法删除")
        return "删除失败"

# 通过学号查询学生信息
def queryStudentByID(sid):
    for s in students:
        if s["sid"] == sid:
            print(f"学号 {sid} 的学生信息如下:")
            print(s)
            return "查询成功"
    else:
        print(f"学号 {sid} 的学生不存在")
        return "查询失败"

# 通过姓名查询学生信息
def queryStudentByName(name):
    result = []
    for s in students:
        if s["name"] == name:
            result.append(s)

    if len(result) > 0:
        print(f"姓名为 {name} 的学生共 {len(result)} 名,信息如下:")
        for s in result:
            print(s)
        return "查询成功"
    else:
        print(f"姓名为 {name} 的学生不存在")
        return "查询失败"

# 显示所有学生信息
def show():
    print("所有学生信息如下:")
    for s in students:
        print(s)

# 管理函数
def studentManager():
    while True:
        select_op = menu()
        if len(select_op) == 1 and select_op in "12345678":
            if select_op == "1":
                sid = getSid()
                name = getName()
                age = getAge()
                gender = getGender()
                addStudent(sid, name, age, gender)
            elif select_op =="2":
                sid = getSid()
                modifyStudentByID(sid)
            elif select_op =="3":
                sid = getSid()
                deleteStudentByID(sid)
            elif select_op =="4":
                name = getName()
                deleteStudentByName(name)
            elif select_op =="5":
                sid = getSid()
                queryStudentByID(sid)
            elif select_op =="6":
                name = getName()
                queryStudentByName(name)
            elif select_op =="7":
                show()
            else:
                break

        else:
            print("输入的数据不合法,请输入在合法范围内的操作编号!!!")

# 程序入口
if __name__ == '__main__':
    studentManager()