MySQL与python联合练习(设计学生管理系统)

以下是使用 Python 结合 Flask(用于构建 Web 应用)和 SQLAlchemy(用于数据库操作)来简单实现上述学生管理系统部分核心功能的示例代码。注意,这只是一个基础示例,实际应用中可能需要更多的完善、错误处理以及拓展功能,并且需要提前安装好flasksqlalchemy库(可通过pip install flask sqlalchemy命令安装)。

1. 项目结构搭建

创建如下基本的项目文件夹结构:

student_management_system/
├── app.py
├── models.py
├── templates/
└── static/

app.py是主应用程序文件,models.py用于定义数据库模型,templates文件夹用来存放 HTML 模板文件(用于页面展示,此处简单示例暂不详细展开页面部分),static文件夹可存放如 CSS、JavaScript 等静态资源文件(同样暂不详细涉及页面样式和交互)。

2. 数据库配置及模型定义(models.py

from flask_sqlalchemy import SQLAlchemy

# 创建数据库对象
db = SQLAlchemy()

# 用户模型,对应用户表
class User(db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    password = db.Column(db.String(120), nullable=False)
    role = db.Column(db.String(20), nullable=False)  # 角色(管理员、教师、学生等)
    contact_info = db.Column(db.String(100))
    email = db.Column(db.String(100))
    register_time = db.Column(db.DateTime)

# 学生基本信息模型,对应学生基本信息表
class StudentInfo(db.Model):
    __tablename__ = 'student_info'
    student_id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(80), nullable=False)
    gender = db.Column(db.String(10))
    birth_date = db.Column(db.Date)
    nationality = db.Column(db.String(20))
    home_address = db.Column(db.String(200))
    enrollment_time = db.Column(db.DateTime)
    student_status = db.Column(db.String(20))
    user_id = db.Column(db.Integer, db.ForeignKey('users.id'))

# 课程模型,对应课程表
class Course(db.Model):
    __tablename__ = 'courses'
    course_id = db.Column(db.Integer, primary_key=True)
    course_name = db.Column(db.String(100), nullable=False)
    teacher_id = db.Column(db.Integer, db.ForeignKey('users.id'))
    credits = db.Column(db.Float)
    course_outline = db.Column(db.Text)
    course_category = db.Column(db.String(20))

# 成绩模型,对应成绩表
class Score(db.Model):
    __tablename__ = 'scores'
    score_id = db.Column(db.Integer, primary_key=True)
    student_id = db.Column(db.Integer, db.ForeignKey('student_info.student_id'))
    course_id = db.Column(db.Integer, db.ForeignKey('courses.course_id'))
    usual_score = db.Column(db.Float)
    exam_score = db.Column(db.Float)
    final_score = db.Column(db.Float)
    entry_time = db.Column(db.DateTime)

3. 应用程序主文件(app.py

收起

python

from flask import Flask
from models import db, User, StudentInfo, Course, Score
import datetime

app = Flask(__name__)

# 配置数据库连接(此处以SQLite为例,实际可替换为MySQL等其他数据库)
app.config['SQLALCHEMY_DATABASE_URI'] ='sqlite:///student_management.db'
db.init_app(app)


# 初始化数据库(创建表等)
@app.before_first_request
def create_tables():
    db.create_all()


# 示例:用户注册功能
@app.route('/register', methods=['POST'])
def register():
    # 模拟获取表单数据(实际中可能需要从请求中解析)
    username = "test_user"
    password = "test_password"
    role = "student"
    contact_info = "1234567890"
    email = "[email protected]"
    register_time = datetime.datetime.now()

    new_user = User(
        username=username,
        password=password,
        role=role,
        contact_info=contact_info,
        email=email,
        register_time=register_time
    )
    db.session.add(new_user)
    db.session.commit()
    return "User registered successfully"


# 示例:添加学生基本信息功能
@app.route('/add_student_info', methods=['POST'])
def add_student_info():
    # 模拟获取表单数据
    name = "John Doe"
    gender = "Male"
    birth_date = datetime.date(2000, 1, 1)
    nationality = "Chinese"
    home_address = "123 Main St"
    enrollment_time = datetime.datetime(2024, 9, 1)
    student_status = "Active"
    user_id = 1  # 假设关联的用户ID为1

    new_student_info = StudentInfo(
        name=name,
        gender=gender,
        birth_date=birth_date,
        nationality=nationality,
        home_address=home_address,
        enrollment_time=enrollment_time,
        student_status=student_status,
        user_id=user_id
    )
    db.session.add(new_student_info)
    db.session.commit()
    return "Student information added successfully"


# 示例:添加课程功能
@app.route('/add_course', methods=['POST'])
def add_course():
    # 模拟获取表单数据
    course_name = "Math Course"
    teacher_id = 2  # 假设教师用户ID为2
    credits = 3.0
    course_outline = "This is a math course outline."
    course_category = "Core Course"

    new_course = Course(
        course_name=course_name,
        teacher_id=teacher_id,
        credits=credits,
        course_outline=course_outline,
        course_category=course_category
    )
    db.session.add(new_course)
    db.session.commit()
    return "Course added successfully"


# 示例:录入成绩功能
@app.route('/enter_score', methods=['POST'])
def enter_score():
    # 模拟获取表单数据
    student_id = 1  # 假设学生ID为1
    course_id = 1  # 假设课程ID为1
    usual_score = 80.0
    exam_score = 90.0
    final_score = (usual_score + exam_score) / 2
    entry_time = datetime.datetime.now()

    new_score = Score(
        student_id=student_id,
        course_id=course_id,
        usual_score=usual_score,
        exam_score=exam_score,
        final_score=final_score,
        entry_time=entry_time
    )
    db.session.add(new_score)
    db.session.commit()
    return "Score entered successfully"


if __name__ == '__main__':
    app.run(debug=True)

上述代码实现了以下几个简单功能的示例:

  • 用户注册:通过/register路由,创建一个新用户记录并存入数据库,实际中应该从前端页面获取准确的用户输入数据,并且进行更多的验证(如用户名唯一性验证等)。
  • 添加学生基本信息:利用/add_student_info路由,向数据库中添加学生的基本情况信息,同样需要完善数据获取和验证机制。
  • 添加课程:在/add_course路由下,可以添加一门新的课程到课程表中,涉及课程相关属性的赋值和数据库插入操作。
  • 录入成绩:通过/enter_score路由,实现将学生某门课程的成绩信息录入到成绩表中,这里简单计算了最终成绩(实际可能更复杂,按不同权重等计算)。

要完整实现整个学生管理系统的所有功能,还需要大量的代码拓展,比如:

  • 完善前端页面,让用户能通过界面友好地输入信息、查看数据等,这可能涉及到 HTML、CSS、JavaScript 以及 Flask 的模板渲染相关知识。
  • 实现更多的功能路由,像用户登录验证、各类信息的查询(按不同条件查询学生信息、课程信息、成绩信息等)、修改、删除操作等,并且需要做好权限控制,确保不同角色的用户只能访问和操作其权限范围内的数据。
  • 优化数据库操作,比如处理复杂的关联查询、数据的批量处理、异常情况的应对等,同时根据实际需求考虑是否更换更合适的数据库(如 MySQL、PostgreSQL 等,对于大型系统更适用)。

以下是针对各主要功能进一步完善代码示例(只是简单示例,还可不断优化):

4. 用户登录验证功能(在app.py中添加)

收起

python

from flask import request

# 用户登录验证功能
@app.route('/login', methods=['POST'])
def login():
    username = request.form.get('username')
    password = request.form.get('password')
    user = User.query.filter_by(username=username, password=password).first()
    if user:
        return "Login successful"
    return "Invalid username or password"

5. 查询学生信息功能(在app.py中添加)

收起

python

# 查询学生信息功能(根据学生ID查询)
@app.route('/student_info/', methods=['GET'])
def get_student_info(student_id):
    student = StudentInfo.query.filter_by(student_id=student_id).first()
    if student:
        return {
            "name": student.name,
            "gender": student.gender,
            "birth_date": student.birth_date.strftime('%Y-%m-%d') if student.birth_date else None,
            "nationality": student.nationality,
            "home_address": student.home_address,
            "enrollment_time": student.enrollment_time.strftime('%Y-%m-%d %H:%M:%S') if student.enrollment_time else None,
            "student_status": student.student_status
        }
    return "Student not found"

6. 查询课程信息功能(在app.py中添加)

收起

python

# 查询课程信息功能(根据课程ID查询)
@app.route('/course_info/', methods=['GET'])
def get_course_info(course_id):
    course = Course.query.filter_by(course_id=course_id).first()
    if course:
        return {
            "course_name": course.course_name,
            "teacher": User.query.filter_by(id=course.teacher_id).first().username if course.teacher_id else None,
            "credits": course.credits,
            "course_outline": course.course_outline,
            "course_category": course.course_category
        }
    return "Course not found"

7. 查询成绩功能(在app.py中添加)

# 查询成绩功能(根据学生ID和课程ID查询)
@app.route('/score_info//', methods=['GET'])
def get_score_info(student_id, course_id):
    score = Score.query.filter_by(student_id=student_id, course_id=course_id).first()
    if score:
        return {
            "usual_score": score.usual_score,
            "exam_score": score.exam_score,
            "final_score": score.final_score,
            "entry_time": score.entry_time.strftime('%Y-%m-%d %H:%M:%S') if score.entry_time else None
        }
    return "Score record not found"

        这只是一个非常基础且不完善的 Python 代码示例来展示如何实现学生管理系统的部分功能,在实际开发中,你需要根据具体的业务需求、性能要求、安全规范等诸多方面进行进一步的详细设计、代码优化以及功能拓展等工作。

你可能感兴趣的:(数据库,python,mysql,python,数据库)