Python 学生管理系统实现与详解(连接MySQL数据库)

        在当今数字化的时代,学生管理系统对于学校和教育机构来说至关重要。它可以帮助管理人员高效地处理学生信息,提高工作效率。本文将详细介绍一个使用 Python 实现的学生管理系统,并对其代码进行深入分析。

一、项目背景与需求

        学生管理系统是为了满足学校或教育机构对学生信息进行有效管理的需求而开发的。该系统需要具备以下功能:

  1. 连接 MySQL 数据库,存储和管理学生信息。
  2. 提供登录功能,用户有三次机会输入正确的用户名和密码登录系统。默认用户名为admin,默认密码为123456
  3. 实现查询学生 ID 的方法,用于判断学生是否存在,并在增加、修改、查询和删除学生信息的方法中使用。
  4. 能够添加学生信息,包括学生的 ID、姓名、院系、专业、地址、电话号码和邮箱。学生的 ID 为学号,不可重复。
  5. 可以修改学生信息,通过 ID 查询找到学生后,能够修改学生的姓名、地址、院系、专业、电话和邮箱。
  6. 提供查询学生信息的功能,可以通过学生的 ID、姓名、院系和专业进行查询,并输出学生的详细信息。
  7. 实现删除学生信息的功能,通过查询学生的姓名或 ID 找到学生后,确认是否删除该学生。
  8. 构建一个学生管理系统的主界面,用户登录成功后,可以选择进入添加、修改、查询或删除学生信息的功能模块,或者退出系统。

二、代码实现与分析

(一)连接数据库

def create_connection():
    return mysql.connector.connect(
        host='localhost',
        database='数据库名称',
        user='你的数据库用户名称',
        password='你的数据库密码'
    )

        这个函数用于创建与 MySQL 数据库的连接。通过指定主机地址、数据库名称、用户名和密码,使用mysql.connector模块建立连接并返回连接对象。这样可以在后续的操作中使用这个连接对象来执行数据库查询和更新操作。

(二)登录页面

def login():
    attempts = 3
    while attempts > 0:
        username = input("请输入用户名(默认用户名为 admin):")
        password = input("请输入密码(默认密码为 123456):")
        if username == "admin":
            if password == "123456":
                print("欢迎xxx进入学生管理系统")
                return True
            else:
                print("密码错误")
        else:
            print("用户名错误")
        attempts -= 1
        if attempts > 0:
            print(f"你还有{attempts}次机会")
        if attempts == 0:
            print("次数已用完,请联系管理员!!!!")
    return False

        登录函数login提供了用户登录学生管理系统的功能。用户有三次机会输入正确的用户名和密码。如果输入的用户名是admin且密码是123456,则登录成功并返回True。如果用户名或密码错误,会提示相应的错误信息,并减少尝试次数。当尝试次数用完时,打印提示信息并返回False

(三)根据 ID 查询用户

def student_by_id(student_id):
    connection = create_connection()
    cursor = connection.cursor()
    query = "select * from students where student_id = %s"
    cursor.execute(query, (student_id,))
    result = cursor.fetchone()
    cursor.close()
    connection.close()
    return bool(result)

        这个函数用于根据学生的 ID 查询学生信息。首先创建数据库连接,然后使用游标执行 SQL 查询语句,从students表中查找指定 ID 的学生记录。如果找到记录,result将是一个包含学生信息的元组;如果没有找到,resultNone。最后关闭游标和连接,并返回一个布尔值表示学生是否存在。

(四)添加学生信息

def add_student():
    while True:
        student_id = int(input("请输入学生 ID(学号不可重复|输入 0 退出):"))
        if student_by_id(student_id):
            print("此 ID 已存在,请重新输入。")
        elif student_id == 0:
            print("你已退出添加信息")
            break
        else:
            student_name = input("请输入学生姓名:")
            department = input("请输入学生院系:")
            major = input("请输入学生专业:")
            address = input("请输入学生地址(可为空):")
            phone_number = input("请输入学生电话号码:")
            email = input("请输入学生邮箱:")
            connection = create_connection()
            cursor = connection.cursor()
            query = "insert into students (student_id, name, department, major, address, phone_number, email) values (%s, %s, %s, %s, %s, %s, %s)"
            cursor.execute(query, (student_id, student_name, department, major, address, phone_number, email))
            connection.commit()
            cursor.close()
            connection.close()
            print("学生信息添加成功!")

        添加学生信息的函数add_student首先要求用户输入学生的 ID。如果输入的 ID 已经存在,会提示用户重新输入。如果用户输入0,则退出添加信息的功能。如果输入的 ID 不存在,接着要求用户输入学生的姓名、院系、专业、地址、电话号码和邮箱。然后创建数据库连接,使用游标执行 SQL 插入语句,将学生信息插入到students表中。最后提交事务、关闭游标和连接,并打印添加成功的信息。

(五)修改学生信息

def update_student():
    while True:
        student_id = int(input("请输入学生 ID(输入 0 退出):"))
        if student_id == 0:
            print("你已退出添加信息")
            break
        elif not student_by_id(student_id):
            print("此 ID 未找到,请检查 ID。")
        else:
            connection = create_connection()
            cursor = connection.cursor()
            query = "select * from students where student_id = %s"
            cursor.execute(query, (student_id,))
            result = cursor.fetchone()
            print(result)
            while True:
                print("0.退出修改信息|1.修改学生姓名|2.修改学生地址|3.修改学生电话|4.修改学生邮箱|5.修改学生专业|6.修改学生院系")
                choice = int(input("请输入你要修改的选项:"))
                if choice == 1:
                    new_name = input("请输入新的学生姓名:")
                    query = "update students set name = %s where student_id = %s"
                    cursor.execute(query, (new_name, student_id))
                    print("学生姓名修改成功!")
                elif choice == 2:
                    new_address = input("请输入新的学生地址:")
                    query = "update students set address = %s where student_id = %s"
                    cursor.execute(query, (new_address, student_id))
                    print("学生地址修改成功!")
                elif choice == 3:
                    new_phone_number = input("请输入新的学生电话号码:")
                    query = "update students set phone_number = %s where student_id = %s"
                    cursor.execute(query, (new_phone_number, student_id))
                    print("学生电话修改成功!")
                elif choice == 4:
                    new_email = input("请输入新的学生邮箱:")
                    query = "update students set email = %s where student_id = %s"
                    cursor.execute(query, (new_email, student_id))
                    print("学生邮箱修改成功!")
                elif choice == 5:
                    new_major = input("请输入新的学生专业:")
                    query = "update students set major = %s where student_id = %s"
                    cursor.execute(query, (new_major, student_id))
                    print("学生专业修改成功!")
                elif choice == 6:
                    new_department = input("请输入新的学生院系:")
                    query = "update students set department = %s where student_id = %s"
                    cursor.execute(query, (new_department, student_id))
                    print("学生院系修改成功!")
                elif choice == 0:
                    print("你已退出修改信息")
                    break
                else:
                    print("无效选择。")
            connection.commit()
            cursor.close()
            connection.close()
            break

        修改学生信息的函数update_student首先要求用户输入学生的 ID。如果输入的 ID 不存在,会提示用户检查 ID。如果 ID 存在,会查询出该学生的信息并打印。然后进入一个循环,让用户选择要修改的选项,包括学生姓名、地址、电话、邮箱、专业和院系。根据用户的选择,执行相应的 SQL 更新语句,修改学生信息。最后提交事务、关闭游标和连接。

(六)查询学生信息

def query_student():
    while True:
        print("0.退出查询信息|1.通过 ID 查询|2.通过姓名查询|3.通过院系查询|4.通过专业查询")
        choice = int(input("请输入你要查询的选项:"))
        connection = create_connection()
        cursor = connection.cursor()
        if choice == 1:
            student_id = int(input("请输入 ID:"))
            query = "select * from students where student_id = %s"
            cursor.execute(query, (student_id,))
            result = cursor.fetchone()
            if result:
                print(f"学生ID\t\t姓名\t\t\t院系\t\t\t专业\t\t\t地址\t\t\t\t电话\t\t\t\t邮箱")
                print(f"{result[0]}\t{result[1]}\t\t{result[2]}\t\t{result[3]}\t\t{result[4]}\t\t{result[5]}\t\t{result[6]}")
            else:
                print("未找到该 ID 的信息。")
        elif choice == 2:
            student_name = input("请输入姓名:")
            query = "select * from students where name = %s"
            cursor.execute(query, (student_name,))
            results = cursor.fetchall()
            if results:
                print(f"学生ID\t\t姓名\t\t\t院系\t\t\t专业\t\t\t地址\t\t\t\t电话\t\t\t\t邮箱")
                for result in results:
                    print(f"{result[0]}\t{result[1]}\t\t{result[2]}\t\t{result[3]}\t\t{result[4]}\t\t{result[5]}\t\t{result[6]}")
            else:
                print("未找到该姓名的信息。")
        elif choice == 3:
            department = input("请输入学生院系:")
            query = "select * from students where department = %s"
            cursor.execute(query, (department,))
            results = cursor.fetchall()
            if results:
                print(f"学生ID\t\t姓名\t\t\t院系\t\t\t专业\t\t\t地址\t\t\t\t电话\t\t\t\t邮箱")
                for result in results:
                    print(f"{result[0]}\t{result[1]}\t\t{result[2]}\t\t{result[3]}\t\t{result[4]}\t\t{result[5]}\t\t{result[6]}")
            else:
                print("未找到该院系的信息。")
        elif choice == 4:
            major = input("请输入专业:")
            query = "select * from students where major = %s"
            cursor.execute(query, (major,))
            results = cursor.fetchall()
            if results:
                print(f"学生ID\t\t姓名\t\t\t院系\t\t\t专业\t\t\t地址\t\t\t\t电话\t\t\t\t邮箱")
                for result in results:
                    print(f"{result[0]}\t{result[1]}\t\t{result[2]}\t\t{result[3]}\t\t{result[4]}\t\t{result[5]}\t\t{result[6]}")
            else:
                print("未找到该专业的信息。")
        elif choice == 0:
            print("你已退出查询信息")
            break
        else:
            print("无效选择。")
    cursor.close()
    connection.close()

        查询学生信息的函数query_student提供了多种查询方式。用户可以选择通过学生的 ID、姓名、院系或专业进行查询。根据用户的选择,执行相应的 SQL 查询语句,并打印查询结果。如果没有找到符合条件的学生信息,会提示相应的信息。

(七)删除学生信息

def delete_student():
    while True:
        print("0.退出删除信息|1.通过姓名查询并删除|2.通过 ID 查询并删除")
        choice = int(input("请输入你要删除的选项:"))
        connection = create_connection()
        cursor = connection.cursor()
        if choice == 1:
            student_name = input("请输入学生姓名:")
            query = "select * from students where name = %s"
            cursor.execute(query, (student_name,))
            results = cursor.fetchall()
            if results:
                print(f"学生ID\t\t姓名\t\t\t院系\t\t\t专业\t\t\t地址\t\t\t\t电话\t\t\t\t邮箱")
                for result in results:
                    print(f"{result[0]}\t{result[1]}\t\t{result[2]}\t\t{result[3]}\t\t{result[4]}\t\t{result[5]}\t\t{result[6]}")
                students_id = int(input("请输入学生 ID:"))
                confirm = input("确认要删除该学生吗?(y/n):")
                if confirm == "y":
                    student_id = students_id
                    query = "delete from students where student_id = %s"
                    cursor.execute(query, (student_id,))
                    connection.commit()
                    print("学生删除成功!")
            else:
                print("未找到该学生姓名的信息。")
        elif choice == 2:
            student_id = int(input("请输入 ID:"))
            query = "select * from students where student_id = %s"
            cursor.execute(query, (student_id,))
            result = cursor.fetchone()
            if result:
                print(f"学生ID\t\t姓名\t\t\t院系\t\t\t专业\t\t\t地址\t\t\t\t电话\t\t\t\t邮箱")
                print(f"{result[0]}\t{result[1]}\t\t{result[2]}\t\t{result[3]}\t\t{result[4]}\t\t{result[5]}\t\t{result[6]}")
                confirm = input("确认要删除该学生吗?(y/n):")
                if confirm == "y":
                    query = "delete from students where student_id = %s"
                    cursor.execute(query, (student_id,))
                    connection.commit()
                    print("学生删除成功!")
            else:
                print("未找到该 ID 的信息。")
        elif choice == 0:
            print("你已退出删除信息")
            break
        else:
            print("无效选择。")
        cursor.close()
        connection.close()

        删除学生信息的函数delete_student提供了两种删除方式,通过学生姓名或 ID 查询并删除学生信息。首先让用户选择删除方式,然后根据用户的选择执行相应的 SQL 查询语句,找到符合条件的学生信息并打印。接着要求用户确认是否删除该学生,如果用户输入y,则执行 SQL 删除语句,从数据库中删除该学生信息。最后提交事务、关闭游标和连接。

(八)学生管理系统

def student_management_system():
    # if not login():
    #     return
    while True:
        print("0.退出学生管理系统|1.添加学生|2.修改学生信息|3.查询学生信息|4.删除学生")
        choice = int(input("请输入你的选择:"))
        if choice == 0:
            print("你已退出学生管理系统欢迎下次登录")
            break
        elif choice == 1:
            add_student()
        elif choice == 2:
            update_student()
        elif choice == 3:
            query_student()
        elif choice == 4:
            delete_student()
        else:
            print("无效选择。")

        学生管理系统的主函数student_management_system提供了一个菜单界面,让用户选择不同的功能模块。用户可以选择添加学生、修改学生信息、查询学生信息、删除学生或退出系统。根据用户的选择,调用相应的函数来执行对应的操作。

三、MySQL数据库

create table students (
        student_id int primary key ,
        name varchar(255),
        department varchar(255),
        major varchar(255),
        address varchar(255),
        phone_number varchar(11),
        email varchar(255)
    );

四、总结

        通过以上代码实现了一个功能较为完整的学生管理系统。该系统使用 Python 和 MySQL 数据库,提供了登录、添加、修改、查询和删除学生信息的功能。用户可以通过命令行界面与系统进行交互,方便地管理学生信息。

        学生管理系统为学校或教育机构提供了一个有效的学生信息管理工具,可以帮助管理人员提高工作效率。随着不同的需求,学生管理系统也可以不断地进行改进和完善,以满足更多的需求。

作者:天冬忘忧

物联沃分享整理
物联沃-IOTWORD物联网 » Python 学生管理系统实现与详解(连接MySQL数据库)

发表回复