Code Monkey home page Code Monkey logo

student-course-choosing's Introduction

student-course-choosing

学生选课系统 —— 一种高并发环境下的高可用选课解决方案

选题的背景和目标

背景: 由于选课时间集中, 在同一时间进入系统抢占有限的资源, 导致系统服务响应速度明显下降, 严重时甚至会造成服务器崩溃。这种问题在目前实行学分制的国内高校中普遍存在。当系统软件不具备高并发性时,就无法顺畅承接超大流量,当请求过多,系统就会直接崩溃。

**目标:**本系统致力于针对原有选课系统的缺点,利用高并发技术的方法论以及设计原则,结合业务本身进行架构设计,以应对系统面临的流量冲击。从网络、架构、数据库等多方面进行系统优化,从而降低系统的响应时间,提高系统吞吐量,为学生提供一个高可用的选课系统,以达到系统能够在高并发下平稳处理大流量且自身依然运行良好的目的,让学生不再受系统崩溃所困扰。

系统需求分析

  • 普通用户(学生)
    • 登录注销、查看全校课程、查看方案内课程以及推荐班选课,选课退课、查看选课退课日志
  • 普通管理员
    • 学院、系、专业、班级管理,学生管理、课程管理、通知管理、选课轮次管理、课程紧急设置
  • 超级管理员
    • 进行系统设置,查看系统日志,对普通管理员用户进行设置

具体功能分析

学生

登录注销

学生可以通过学号和密码登入系统,登录后会保持一天的登入状态,登录凭证过期后再进行操作则会重新跳转至登录页面。也可以通过注销功能退出当前用户的登录。

选课退课

学生可以对显示的课程进行选课,该操作会判断学生学分是否足够、课程是否冲突、是否已完成先修课程的学习以及课程容量充足等一系列条件。对于通识课程,如果当前处于第一轮次选课,则会允许选择人数超过课程容量,后台会在之后筛选。

查看全校课程

学生进入选课系统后可以查看与搜索全校开设的课程班。可以通过是否必修、是否通识课、课程学分等条件进行课程筛选,也可以进行课程搜索。同时会根据学生已选课程显示课程是否出现时间冲突。

选课日志查询

学生可以查看当前学期自己已经选择的课程。同时也可以查看当前学期的退选日志,退选日志包括自己退选和系统退选。

查看方案内课程

学生可以查看自己所在班级的方案内课程,以及当前学期的推荐班选课。学生同样可以通过各种条件进行筛选和搜索,方便查找目的课程。

管理员

选课轮次

新增选课轮次、查看选课轮次、删除选课轮次

班级管理

院系专业、班级和方案内课程的增删改查

课程管理

课程依赖、课程以及课程班的增删改查

紧急设置

新增课程仅开放给某个班级、年级

通知管理

发布点对点通知以及群体公告

超级管理员

查看系统日志

查看前台学生的操作日志以及后台管理员的操作日志,可以通过学号、管理员编号以及是否请求异常和请求时间进行筛选。

修改系统设置

新增和删除用户黑名单、设置IP地址拦截、修改用户每分钟的请求次数限制。

管理普通管理员

可以新增管理员和删除管理员,允许修改管理员的信息和将普通管理员提权为超级管理员。

系统设计

开发环境与技术选型
  • 前端
    • Vue3 + Vue-Router + Vuex
    • Node.js + JavaScript + ElementUI
    • Axios + WebSocket
  • 后端
    • CentOS 7 + Java17
    • Maven + SpringBoot + MySQL / ShardingJDBC + Redis + RabbitMQ
    • Docker + Nginx
项目框架

image-20231105101821353

image-20231105101825302

数据库逻辑结构设计

(实体及实体关系图请见文件夹图片)

image-20231105101852910

image-20231105101858072

实体间关系的分析

image-20231105101957625

系统框架优化

  • 基于DNS对WEB站点层进行水平扩展
  • 基于Nginx反向代理对WEB站点层进行水平扩展
  • 通过Nginx集群解决反向代理层高可用问题

student-course-choosing's People

Contributors

ken-chy129 avatar rwlinno avatar

Stargazers

Rain avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.