基于python实现学生管理系统

基于Python实现学生管理系统

简介

学生管理系统是一种很常见的应用系统,用于方便学校对学生信息进行管理。本文介绍了如何使用Python语言来实现一个简单的学生管理系统,包括设计数据库、编写程序等。

设计数据库

学生管理系统需要存储的数据包括学生信息、课程信息、成绩信息等。因此,需要设计一个关系型数据库来存储这些信息。在本示例中,我们使用MySQL数据库。

在MySQL数据库中,我们创建一个名为"student_management_system"的数据库,在其中创建三个表:studentscourses,以及scores

可以使用以下的SQL代码来创建相应的表:

-- 创建students表
CREATE TABLE students (
  id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(255) NOT NULL,
  gender VARCHAR(10) NOT NULL,
  birthday DATE,
  major VARCHAR(255)
);

-- 创建courses表
CREATE TABLE courses (
  id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(255) NOT NULL,
  teacher VARCHAR(255),
  credit FLOAT
);

-- 创建scores表
CREATE TABLE scores (
  student_id INT NOT NULL,
  course_id INT NOT NULL,
  score FLOAT NOT NULL,
  PRIMARY KEY (student_id, course_id),
  FOREIGN KEY (student_id) REFERENCES students(id),
  FOREIGN KEY (course_id) REFERENCES courses(id)
);

编写程序

我们使用Python语言来编写程序,需要使用pymysql库来连接MySQL数据库,使用flask库构建Web应用。在本示例中,我们使用Python 3.7.7版本进行开发。

安装依赖

可以使用以下命令安装所需的依赖:

pip install pymysql flask

连接数据库

连接MySQL数据库需要进行以下配置:

import pymysql

# 数据库连接配置
DB_HOST = 'localhost'
DB_PORT = 3306
DB_USER = 'root'
DB_PASSWORD = 'password'
DB_NAME = 'student_management_system'

# 创建数据库连接
conn = pymysql.connect(host=DB_HOST, port=DB_PORT, user=DB_USER, password=DB_PASSWORD, db=DB_NAME)

Flask应用

我们使用Flask构建Web应用。在本示例中,我们将使用Flask提供的Blueprint机制,将应用的不同部分分别封装成不同的蓝图。

from flask import Flask
from students import students_bp
from courses import courses_bp
from scores import scores_bp

app = Flask(__name__)

app.config.update(
    DEBUG=True,
    SECRET_KEY='thisisasecretkey',
)

# 注册蓝图
app.register_blueprint(students_bp)
app.register_blueprint(courses_bp)
app.register_blueprint(scores_bp)

在上面的代码中,我们注册了三个蓝图:students_bpcourses_bp以及scores_bp。这三个蓝图分别对应学生管理、课程管理以及成绩管理三个模块。

编写蓝图

接下来,我们分别编写三个蓝图的代码。以下是students_bp的示例代码:

from flask import Blueprint, jsonify, request
import pymysql

students_bp = Blueprint('students', __name__, url_prefix='/students')

# 获取所有学生信息
@students_bp.route('/', methods=['GET'])
def get_students():
    conn = pymysql.connect(host=DB_HOST, port=DB_PORT, user=DB_USER, password=DB_PASSWORD, db=DB_NAME)
    cursor = conn.cursor()
    cursor.execute('SELECT * FROM students')
    result = cursor.fetchall()
    conn.close()
    return jsonify(result)

# 新增学生信息
@students_bp.route('/', methods=['POST'])
def add_student():
    data = request.json
    name = data['name']
    gender = data['gender']
    birthday = data.get('birthday')
    major = data.get('major')

    conn = pymysql.connect(host=DB_HOST, port=DB_PORT, user=DB_USER, password=DB_PASSWORD, db=DB_NAME)
    cursor = conn.cursor()
    cursor.execute('INSERT INTO students(`name`, `gender`, `birthday`, `major`) VALUES (%s, %s, %s, %s)',
                   (name, gender, birthday, major))
    conn.commit()
    conn.close()
    return 'OK'

# 删除学生信息
@students_bp.route('/<int:id>', methods=['DELETE'])
def delete_student(id):
    conn = pymysql.connect(host=DB_HOST, port=DB_PORT, user=DB_USER, password=DB_PASSWORD, db=DB_NAME)
    cursor = conn.cursor()
    cursor.execute('DELETE FROM students WHERE id=%s', id)
    conn.commit()
    conn.close()
    return 'OK'

以上代码中,@students_bp.route('/<int:id>', methods=['DELETE'])表示该路由处理DELETE请求,并传入一个名为id的参数,该参数为整数类型。类似的,我们可以在其他蓝图中编写相应的路由。

运行应用

最后,我们使用以下代码启动Flask应用:

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

现在,我们可以使用浏览器或者其他HTTP客户端工具来测试我们的应用了。

示例说明

以下是两个关于使用该学生管理系统的示例说明:

示例1

小明是一名学生,他想查看自己的成绩单。他访问学生管理系统,输入自己的学号和密码,即可查看到自己的所有成绩信息。

示例2

小红是一名教师,她需要录入学生的成绩。她访问学生管理系统,输入自己的教师账号和密码,进入成绩录入页面。她选择相应的课程,并输入学生的学号和成绩,即可完成成绩录入。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于python实现学生管理系统 - Python技术站

(1)
上一篇 2023年5月30日
下一篇 2023年5月30日

相关文章

  • python NetworkX库生成并绘制带权无向图

    生成和绘制带权无向图是Python NetworkX库中的一个主题。以下是详细讲解“Python NetworkX库生成并绘制带权无向图”的完整攻略,包括必要的代码段和解释。 安装 NetworkX 库 首先,确保安装了 NetworkX 库。如果没有安装,可以使用以下命令进行安装: pip install networkx 创建图 在 NetworkX 中…

    python 2023年5月18日
    00
  • 解决Python 中英文混输格式对齐的问题

    解决Python中英文混输格式对齐的问题,可以采用以下方法: 1. 使用中文字符宽度作为对齐基准 中文字符通常比英文字符宽度要大,因此我们可以将中文字符的宽度作为对齐基准,从而解决混输格式对齐的问题。 可以使用Python中的wcswidth函数来计算字符串的宽度,例如: import unicodedata def get_display_width(te…

    python 2023年5月20日
    00
  • Python list列表查找元素详情

    以下是详细讲解“Python list列表查找元素详情”的完整攻略。 在Python中,列表是一种常用的数据类型,提供了多种方法来查找列表中的元素。本文将详细讲解如何在 list列表中查找元素,并提供两个示例说明。 查找元素 1. 使用in关键字 可以使用in关键来判断一个元素是否在列表中。例如: lst = [1, 2, 3, 4] if 3 in lst…

    python 2023年5月13日
    00
  • 如何根据多个条件从Numpy数组中删除行

    删除Numpy数组中的行可以使用numpy.delete()函数来实现。此函数提供了两种方式来删除行:按照行索引或者按照某个条件来删除。 按照行索引删除 如果我们想删除一些特定的行,可以指定要删除的行索引并使用numpy.delete()函数。 import numpy as np # 创建一个二维数组 arr = np.array([[1, 2, 3], …

    python-answer 2023年3月25日
    00
  • python操作日期和时间的方法

    下面是关于Python操作日期和时间的方法的完整攻略,包含以下内容: Python中操作日期和时间的模块 常用的日期和时间格式 日期和时间的转化 日期和时间的加减运算 示例1:计算两个日期之间的差值 示例2:将字符串转换为日期 Python中操作日期和时间的模块 Python中常用的日期和时间模块是datetime。datetime模块提供了如下类: dat…

    python 2023年6月2日
    00
  • python异步编程 使用yield from过程解析

    Python异步编程是一种非常流行的编程技巧,可以极大地提高程序的性能和响应速度。使用yield from是Python中异步编程的一种常见实现方式,本文将对其详细进行讲解。 什么是异步编程? 在介绍yield from之前,我们有必要先了解什么是异步编程。 在传统的同步编程中,程序按照顺序逐条执行,每一行代码都需要等待前一行代码执行完成后才能开始执行,这样…

    python 2023年6月7日
    00
  • python如何设置静态变量

    Python中没有静态变量这个概念,但是可以通过类属性和闭包来实现类似的功能。 使用类属性实现“静态变量” 可以将所需的静态变量定义为类属性,以实现类似的功能。示例如下: class MyClass: static_var = 0 def increment_static_var(cls): cls.static_var += 1 return cls.st…

    python 2023年5月18日
    00
  • 在NumPy中创建你自己的通用函数

    在NumPy中,我们可以使用通用函数(universal functions)对数组进行数学运算或其他操作。但在某些情况下我们可能需要自己定义一些通用函数,以适应我们的特殊需求。 下面是创建自己的通用函数的完整攻略: 1.使用 np.vectorize 函数创建通用函数 我们可以使用 np.vectorize 函数将一个标量函数转换成一个通用函数。该函数输入…

    python-answer 2023年3月25日
    00
合作推广
合作推广
分享本页
返回顶部