💖💖作者:计算机毕业设计杰瑞
💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我!
💛💛想说的话:感谢大家的关注与支持!
💜💜
目录
- 基于SpringBoot的一体化教务与学业质量管理系统介绍
- 基于SpringBoot的一体化教务与学业质量管理系统演示视频
- 基于SpringBoot的一体化教务与学业质量管理系统演示图片
- 基于SpringBoot的一体化教务与学业质量管理系统代码展示
- 基于SpringBoot的一体化教务与学业质量管理系统文档展示
基于SpringBoot的一体化教务与学业质量管理系统介绍
基于SpringBoot的一体化教务与学业质量管理系统是一套面向高校教务管理与学业质量监测场景设计的B/S架构应用系统,后端采用SpringBoot框架整合Spring、SpringMVC与MyBatis完成业务逻辑处理与数据持久化,前端基于Vue与ElementUI构建交互界面,数据库使用MySQL进行数据存储,同时提供Python与Django版本的对应实现。系统围绕教务运行与学业质量两条主线展开,功能涵盖系统首页、学生信息管理、班级管理、课程分类、课程信息、学业质量数据、看板、公告资讯、公告资讯分类、轮播图管理、智能学习AI、个人中心与修改密码等模块。学生信息管理与班级管理共同构成基础数据底座,课程分类与课程信息支撑教学计划维护,学业质量数据模块负责采集与整理学生学习表现相关记录,看板模块对教务运行状态与学业质量指标进行可视化呈现,公告资讯及其分类与轮播图管理承担信息发布与展示职责,智能学习AI模块则尝试在学业数据分析基础上提供辅助学习支持。系统整体强调教务数据与学业质量数据的统一管理,力求在同一个平台内完成从基础信息维护、课程管理到学业质量分析与信息发布的完整流程,适合作为计算机专业毕业设计课题进行功能设计与技术实现。
基于SpringBoot的一体化教务与学业质量管理系统演示视频
基于SpringBoot的一体化教务与学业质量管理系统演示图片








基于SpringBoot的一体化教务与学业质量管理系统代码展示
java
import org.apache.spark.sql.SparkSession;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Map;
import java.util.HashMap;
import java.util.stream.Collectors;
@Service
public class AcademicQualityService {
@Autowired
private AcademicQualityMapper academicQualityMapper;
@Autowired
private StudentMapper studentMapper;
@Autowired
private CourseMapper courseMapper;
private SparkSession sparkSession = SparkSession.builder().appName("AcademicQualityAnalysis").master("local[*]").config("spark.sql.shuffle.partitions", "2").getOrCreate();
@Transactional
public Map<String, Object> analyzeStudentQuality(Integer studentId) {
Map<String, Object> resultMap = new HashMap<>();
Student student = studentMapper.selectById(studentId);
if (student == null) {
resultMap.put("status", "error");
resultMap.put("message", "学生信息不存在");
return resultMap;
}
List<AcademicQuality> qualityList = academicQualityMapper.selectByStudentId(studentId);
if (qualityList == null || qualityList.isEmpty()) {
resultMap.put("status", "error");
resultMap.put("message", "该学生暂无学业质量数据");
return resultMap;
}
Dataset<Row> qualityDF = sparkSession.createDataFrame(qualityList, AcademicQuality.class);
qualityDF.createOrReplaceTempView("academic_quality");
Dataset<Row> avgScoreDF = sparkSession.sql("SELECT course_category, AVG(score) AS avg_score, COUNT(*) AS course_count FROM academic_quality GROUP BY course_category ORDER BY avg_score DESC");
List<Row> avgScoreRows = avgScoreDF.collectAsList();
List<Map<String, Object>> categoryAvgList = avgScoreRows.stream().map(row -> {
Map<String, Object> item = new HashMap<>();
item.put("courseCategory", row.getString("course_category"));
item.put("avgScore", row.getDouble("avg_score"));
item.put("courseCount", row.getLong("course_count"));
return item;
}).collect(Collectors.toList());
double totalAvg = qualityList.stream().mapToDouble(AcademicQuality::getScore).average().orElse(0.0);
long passCount = qualityList.stream().filter(q -> q.getScore() >= 60).count();
double passRate = qualityList.isEmpty() ? 0.0 : (double) passCount / qualityList.size() * 100;
resultMap.put("status", "success");
resultMap.put("studentName", student.getName());
resultMap.put("totalAvg", totalAvg);
resultMap.put("passRate", passRate);
resultMap.put("categoryAvgList", categoryAvgList);
resultMap.put("qualityCount", qualityList.size());
return resultMap;
}
@Transactional
public Map<String, Object> buildQualityDashboard(Integer classId) {
Map<String, Object> dashboardMap = new HashMap<>();
List<Student> studentList = studentMapper.selectByClassId(classId);
if (studentList == null || studentList.isEmpty()) {
dashboardMap.put("status", "error");
dashboardMap.put("message", "该班级暂无学生数据");
return dashboardMap;
}
List<Integer> studentIds = studentList.stream().map(Student::getId).collect(Collectors.toList());
List<AcademicQuality> allQualityList = academicQualityMapper.selectByStudentIds(studentIds);
if (allQualityList == null || allQualityList.isEmpty()) {
dashboardMap.put("status", "error");
dashboardMap.put("message", "该班级暂无学业质量数据");
return dashboardMap;
}
Dataset<Row> allQualityDF = sparkSession.createDataFrame(allQualityList, AcademicQuality.class);
allQualityDF.createOrReplaceTempView("class_quality");
Dataset<Row> classStatDF = sparkSession.sql("SELECT student_id, AVG(score) AS avg_score, SUM(CASE WHEN score >= 60 THEN 1 ELSE 0 END) AS pass_count, COUNT(*) AS total_count FROM class_quality GROUP BY student_id");
List<Row> classStatRows = classStatDF.collectAsList();
List<Map<String, Object>> studentStatList = classStatRows.stream().map(row -> {
Map<String, Object> item = new HashMap<>();
item.put("studentId", row.getInt("student_id"));
item.put("avgScore", row.getDouble("avg_score"));
item.put("passCount", row.getLong("pass_count"));
item.put("totalCount", row.getLong("total_count"));
double rate = row.getLong("total_count") == 0 ? 0.0 : (double) row.getLong("pass_count") / row.getLong("total_count") * 100;
item.put("passRate", rate);
return item;
}).collect(Collectors.toList());
double classAvg = allQualityList.stream().mapToDouble(AcademicQuality::getScore).average().orElse(0.0);
long classPassCount = allQualityList.stream().filter(q -> q.getScore() >= 60).count();
double classPassRate = allQualityList.isEmpty() ? 0.0 : (double) classPassCount / allQualityList.size() * 100;
dashboardMap.put("status", "success");
dashboardMap.put("classId", classId);
dashboardMap.put("classAvg", classAvg);
dashboardMap.put("classPassRate", classPassRate);
dashboardMap.put("studentStatList", studentStatList);
dashboardMap.put("studentCount", studentList.size());
return dashboardMap;
}
@Transactional
public Map<String, Object> getCourseQualityRank(Integer courseId) {
Map<String, Object> rankMap = new HashMap<>();
Course course = courseMapper.selectById(courseId);
if (course == null) {
rankMap.put("status", "error");
rankMap.put("message", "课程信息不存在");
return rankMap;
}
List<AcademicQuality> courseQualityList = academicQualityMapper.selectByCourseId(courseId);
if (courseQualityList == null || courseQualityList.isEmpty()) {
rankMap.put("status", "error");
rankMap.put("message", "该课程暂无学业质量数据");
return rankMap;
}
Dataset<Row> courseQualityDF = sparkSession.createDataFrame(courseQualityList, AcademicQuality.class);
courseQualityDF.createOrReplaceTempView("course_quality");
Dataset<Row> rankDF = sparkSession.sql("SELECT student_id, score, RANK() OVER (ORDER BY score DESC) AS rank_no FROM course_quality");
List<Row> rankRows = rankDF.collectAsList();
List<Map<String, Object>> rankList = rankRows.stream().map(row -> {
Map<String, Object> item = new HashMap<>();
item.put("studentId", row.getInt("student_id"));
item.put("score", row.getDouble("score"));
item.put("rankNo", row.getInt("rank_no"));
return item;
}).collect(Collectors.toList());
double courseAvg = courseQualityList.stream().mapToDouble(AcademicQuality::getScore).average().orElse(0.0);
double maxScore = courseQualityList.stream().mapToDouble(AcademicQuality::getScore).max().orElse(0.0);
double minScore = courseQualityList.stream().mapToDouble(AcademicQuality::getScore).min().orElse(0.0);
rankMap.put("status", "success");
rankMap.put("courseName", course.getCourseName());
rankMap.put("courseAvg", courseAvg);
rankMap.put("maxScore", maxScore);
rankMap.put("minScore", minScore);
rankMap.put("rankList", rankList);
rankMap.put("studentCount", courseQualityList.size());
return rankMap;
}
}
基于SpringBoot的一体化教务与学业质量管理系统文档展示

💖💖作者:计算机毕业设计杰瑞
💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我!
💛💛想说的话:感谢大家的关注与支持!
💜💜