返回作品

学生课程系统

创建于 2025 年 1 月 11 日

标签
  • 若依 RuoYi
  • Spring Boot
  • MyBatis-Plus
  • mybatis-plus-join
  • MySQL
  • Redis
  • Vue 2
  • Element UI
  • ECharts
  • Druid

项目介绍

学生课程系统是基于若依 RuoYi 3.8.8 后台管理框架二次开发的教务管理系统,业务代码集中在 com.ruoyi.sch 包下,前端为若依标准 ruoyi-ui(Vue 2 + Element UI)并新增 views/sch 业务页面。项目围绕”课程—学生—教师”三角色核心关系展开:课程可挂接教师与学期,学生通过选课关系(sch_course_student)加入课程并录入成绩,授课节次(sch_course_detail)承载每次课的时间,学生出勤(sch_course_detail_student)记录每节课的签到状态,作业(sch_course_task / sch_course_task_student)则完成发布与提交的闭环。种子数据预置英语、数学、哲学、历史、经济学、语文六门课程与多名学生、教师,开箱即可体验完整教学流程。

除标准管理页面外,项目还实现了 BigScreenController 教学数据大屏接口:按课程聚合选课人数、节次数、作业数,计算作业提交率、成绩通过率与出勤率,并按 90-100 / 80-90 / 70-80 / 60-70 / 60 以下五档统计分数段分布,为 ECharts 图表提供数据源;同时配套 sch_weather 气象数据模块,记录地区、天气、最低/最高温度,供大屏绘制温度曲线。

项目架构

后端为若依标准的 Controller-Service-Mapper 三层结构(ruoyi-admin 模块),Spring Boot 2.5.15 + Java 8,持久层使用 MyBatis-Plus 3.5.4ServiceImpl 基类 + LambdaQueryWrapper),并引入 mybatis-plus-joincom.github.yulichang)实现多表联查:例如 SchCourseServiceImpl.selectSchCourseList 通过 MPJLambdaWrappersch_coursesys_userleftJoin,一次查询直接带出教师的 userNamenickNameSchCourseDetailStudentServiceImpl 则一次联查课程详情、课程、用户三张表,把节次、开课时间与学生姓名拼装进出勤列表。BigScreenController 大量使用 lambdaQuery() 链式计数与流式过滤(如按 is_open 过滤开课数、按 scorepass_score 比较统计通过率),配合 Hutool 的 NumberUtil.div 计算百分比。

数据库(sql/20250111-stu.sql)共十张 sch_ 业务表:sch_course(课程,含 is_open 开课标记与 pass_score 通过分)、sch_course_student(选课与成绩,user_id + course_id + score)、sch_course_detail(授课节次,order_num 节次号 + start_time 开课时间)、sch_course_detail_student(出勤签到,is_sign 标记)、sch_course_task / sch_course_task_student(作业发布与提交)、sch_student(学籍,school_status 在校/毕业)、sch_teachersch_term(学期)与 sch_weather(气象数据),整体沿用若依 sys_user 用户体系,通过 user_id 外键关联学生与教师档案。

核心功能

  • 课程管理views/sch/course/index.vue):课程列表支持按课程名称、教师、学期、是否开课筛选,展示课程名、通过分、教师、学年与开课状态;行内操作提供”学生选课""授课""发布作业”三个业务入口——“学生选课”弹出多选学生对话框,“授课”进入该课程的节次管理子页面(course/detail.vue,维护节次与开课时间),“发布作业”直接填写作业内容生成 sch_course_task 记录。
  • 选课与成绩views/sch/courseStudent/index.vue):维护课程-学生关系并录入成绩;SchCourseStudentServiceImpl.batchAdd 实现”设置学生”的批量重建——先按 courseId 清空旧关系,再遍历 userIds 逐一插入,保证名单与前端多选框严格一致;列表通过 MPJ 联查展示学生名、课程名与分数。
  • 出勤签到views/sch/courseDetailStudent/index.vue):按节次维护每个学生的签到状态(is_sign1 表示签到),支持按课程、学生、签到状态过滤,是课程出勤率统计的数据基础。
  • 作业提交views/sch/courseTaskStudent/index.vue):按学生-课程维度查看作业与”学生提交”内容,教师可回填学生作业记录;BigScreenController.homeworkstudent_home_work is not null 统计提交数与提交率。
  • 教学数据大屏BigScreenController):学生统计(总数/在校/毕业)、教师统计(教师数/开课数/节次数)、课程统计(课程数/开课率/选课总数)、作业提交率汇总,以及按课程维度的成绩通过率、分数段分布、近十次课出勤率趋势、选课人数/节次数/作业数对比与气象最高温曲线等 ECharts 数据接口。
  • 学生/教师/学期/气象管理:学生档案维护学籍状态(在校/毕业),教师档案对接 sys_user,学期维护学年信息(如”2024-2025下学期”),气象数据记录地区、天气类型与温度区间,供大屏筛选地区绘制温度曲线。

功能截图

暂无运行截图。

快速上手

项目为若依标准多模块 Maven 工程(ruoyi-admin / ruoyi-common / ruoyi-framework / ruoyi-system / ruoyi-ui)。后端:导入工程后修改 ruoyi-admin/src/main/resources/application-druid.yml 的 MySQL 连接,依次执行 sql/ry_20240629.sql(若依基础库)、sql/20250111-stu.sql(业务表与种子数据),启动 RuoYiApplication 即运行后端服务。前端:进入 ruoyi-ui 执行 npm installnpm run dev,默认通过代理访问后端 8080 端口;使用若依默认账号 admin/admin123 登录后,在系统菜单中挂载 sch 业务菜单即可进入课程、选课、出勤、作业、大屏等页面。

总结

项目展示了在若依框架上快速搭建教育业务系统的典型路径:复用 sys_user 用户体系与 RBAC 权限,新增的十张业务表以 user_id 外键挂接到统一账号模型上,通过 mybatis-plus-join 的 MPJLambdaWrapper 在 Service 层轻松拼装多表 VO,避免了大量手写 SQL。最具学习价值的有两点:一是”设置学生”的先清后插批量重建模式,用简单的两条语句解决了多选名单的一致性问题;二是 BigScreenController 把课程、选课、出勤、作业、成绩五类业务数据统一收敛为图表接口,借助 lambdaQuery 流式统计与 Hutool 数值计算,让原本分散的管理页面数据形成可视化的教学分析视图。整体代码分层清晰、注释规范,适合作为若依二次开发与教务管理系统课程设计的参考范本。