当前位置:   article > 正文

【Python毕设|课设】基于Flask+MySQL的学生选课系统-文末附源码下载官网地址|源码100%可运行!!!_python+flask+mysql选课系统

python+flask+mysql选课系统

一、项目简介

学生选课系统是一个基于Python Flask后端框架和Bootstrap4前端开发的全面选课解决方案。该系统为学校提供了高效的学生、教师和管理员管理工具,涵盖了从学生信息录入到选课管理的完整流程。

在系统背景下,我们致力于解决学校管理繁琐的选课过程和信息管理问题。通过使用Python Flask作为后端框架,我们能够轻松构建强大的API,提供高度可定制化的学生、教师和管理员功能。Bootstrap4的前端框架则为系统提供了直观友好的用户界面,使各类用户能够轻松上手,提高了系统的易用性。

技术层面上,系统采用了数据库设计、ORM(例如SQLAlchemy)等先进技术,确保数据的安全性和一致性。前后端分离的设计使得系统更易于维护和扩展,同时通过AJAX请求实现了无刷新交互,提升了用户体验。

这个学生选课系统的意义在于提高学校管理效率,简化选课流程,减轻了学校行政工作负担。管理员能够通过系统轻松管理学生、教师、课程等信息,而教师和学生也能方便地完成相关操作。系统的权限管理保障了信息安全,同时用户友好的界面使得操作更加直观,有助于提升整体教务管理水平。

综上所述,学生选课系统通过整合现代化技术,为学校提供了一套高效、安全、易用的选课解决方案,将有力地推动学校管理工作向数字化、智能化迈进,为学生、教师和管理员创造更便利的校园管理环境。

基于Python Flask后端框架和BootStrap4前端开发的学生选课系统设计。本系统分为管理员、老师、学生三个角色。其中要求管理员账号五位(默认admin,123456)、老师账号4位、学生账号8位,密码默认都是123456。

管理员主要功能有学生管理:学生管理(录入学生:先检测学生表中是否存在学号冲突的学生,若无则插入此学生信息。删除学生:先查询出此学生所有已选课程,系统将其全部退选后,再删除此学生。)、教师管理(教师管理功能校验同学生管理一致)、课程管理、选课管理、学院管理、专业管理;注意删除功能会同步删除相关数据库信息,例如删除学院会同步删除学院下的教师、专业等。同理删除专业也会删除相关的信息。

教师功能有:查询教师个人信息(密码修改)、查看学生选课详情、录入学生课程的成绩。

学生功能:查询学生个人信息(密码修改)、专业信息、学院信息、查询已选课程信息,更换已选课程授课教师、退课、查询所有开设课程的信息、查询已选课程的成绩。

二、开发环境

开发环境版本/工具
PYTHON3.6.8
开发工具PyCharm
操作系统Windows 10
内存要求8GB 以上
浏览器Firefox (推荐)、Google Chrome (推荐)、Edge
数据库MySQL 8.0 (推荐)
数据库工具Navicat Premium 15 (推荐)
项目框架FLASK

三、项目技术

后端:Flask、SQLAlchemy、MySQL

前端:Jinja2、Jquery、Ajax、bootstrap

四、项目功能

  1. 管理员功能模块

学生管理: 包括学生信息录入和删除。

教师管理: 同学生管理,支持教师信息的录入和删除。

课程管理: 管理所有开设的课程,包括课程名、授课教师等信息。

选课管理: 管理学生的选课信息,包括课程号、学生号等。

学院管理和专业管理: 管理学院和专业信息,支持删除时同步删除相关数据。

  1. 教师功能模块

查询个人信息: 包括个人基本信息和密码修改。

查看学生选课详情: 查看学生已选课程及相关信息。

录入学生成绩: 提供成绩录入功能,确保及时记录学生成绩。

  1. 学生功能模块

查询个人信息: 包括个人基本信息和密码修改。

专业信息和学院信息: 查询所属专业和学院的相关信息。

查询已选课程信息: 查看已选课程及相关信息。

更换已选课程授课教师: 支持学生更改已选课程的授课教师。

退课: 提供学生退选课程的功能。

查询所有开设课程的信息: 查看所有开设课程的详细信息。

查询已选课程的成绩: 查看已选课程的成绩信息。

五、运行截图

系统首页:

请添加图片描述

学生功能:
请添加图片描述

请添加图片描述请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

教师功能:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

管理员功能:

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

六、部分代码

sqlLite数据库配置:

class Config(object):
    SECRET_KEY = os.environ.get('SECRET_KEY') or 'you-will-never-guess!'
    SQLALCHEMY_DATABASE_URI = os.environ.get('DEV_DATABASE_URL') or \
                              'sqlite:///' + os.path.join(basedir, 'db.sqlite')
    SQLALCHEMY_TRACK_MODIFICATIONS = False

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

删除课程接口

@app.route('/course_delete/<CourseNum>')
@login_required
def course_delete(CourseNum):
    if isinstance(current_user._get_current_object(), Manager):
        # 先删除选课信息
        course_select_tables = Course_select_table.query.filter_by(CourseNum=CourseNum).all()
        for course_select_table in course_select_tables:
            db.session.delete(course_select_table)
        db.session.commit()
        flash('删除学生选课信息成功!')
        # 再删除课程与老师的对应表
        course_teachers = Course_Teacher.query.filter_by(CourseNum=CourseNum).all()
        for course_teacher in course_teachers:
            db.session.delete(course_teacher)
        db.session.commit()
        flash('删除教师开设课程成功!')
        # 最后删除课程
        course = Course.query.filter_by(CourseNum=CourseNum).first()
        db.session.delete(course)
        db.session.commit()
        flash('删除课程成功!')
    return redirect(url_for('course_manage'))

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

课程数据模型

class Course_select_table(db.Model):
		#学生选课
    __tablename__ = "course_select_table"
    StudentNum = db.Column(db.String(8), db.ForeignKey('student.StudentNum'), primary_key=True, nullable=False)
    CourseNum = db.Column(db.String(10), db.ForeignKey('course.CourseNum'), primary_key=True, nullable=False)
    TeacherNum = db.Column(db.String(8), db.ForeignKey('teacher.TeacherNum'), primary_key=True, nullable=False)
    Grade = db.Column(db.Integer)

    def __init__(self, StudentNum, CourseNum, TeacherNum):
        self.StudentNum = StudentNum
        self.CourseNum = CourseNum
        self.TeacherNum = TeacherNum

    def input_grade(self, grade):
        self.Grade = grade


class Course(db.Model):
    # 课程
    CourseNum = db.Column(db.String(8), primary_key=True)
    CourseName = db.Column(db.String(10), nullable=False)
    CourseCredit = db.Column(db.Integer, nullable=False)
    CourseTime = db.Column(db.Integer, nullable=False)
    CourseDesc = db.Column(db.Text)
    Teachers = db.relationship('Teacher', secondary='course_teacher', backref='course', lazy='dynamic')
    DeptNum = db.Column(db.String(4), db.ForeignKey('dept.DeptNum'), nullable=False)

    def __init__(self, CourseNum, CourseName, CourseCredit, CourseTime, DeptNum, CourseDesc):
        self.CourseNum = CourseNum
        self.CourseName = CourseName
        self.CourseCredit = CourseCredit
        self.CourseTime = CourseTime
        self.DeptNum = DeptNum
        self.CourseDesc = CourseDesc

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

七、源码获取

源码、安装教程文档、项目简介文档以及其它相关文档已经上传到是云猿实战官网,可以通过下面官网进行获取项目!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/157765
推荐阅读
相关标签
  

闽ICP备14008679号