前言
- 💖💖作者:计算机程序员小杨
- 💙💙个人简介:我是一名计算机相关专业的从业者,擅长Java、微信小程序、Python、Golang、安卓Android等多个IT方向。会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。热爱技术,喜欢钻研新工具和框架,也乐于通过代码解决实际问题,大家有技术代码这一块的问题可以问我!
- 💛💛想说的话:感谢大家的关注与支持!
- 💕💕文末获取源码联系 计算机程序员小杨
- 💜💜
- 网站实战项目
- 安卓/小程序实战项目
- 大数据实战项目
- 深度学习实战项目
- 计算机毕业设计选题
- 💜💜
一.开发工具简介
- 后端开发语言:Java
- 后端框架:Spring Boot(Spring+SpringMVC+Mybatis)
- 前端:微信小程序
- 数据库:MySQL
- 系统架构:C/S
- 开发工具:IDEA
二.系统内容简介
本高校班务管理小程序是基于Spring Boot框架和微信小程序技术开发的教学辅助管理系统,采用Java语言构建后端服务,结合MySQL数据库实现数据持久化存储。系统涵盖了高校日常班级管理的核心业务流程,包括教师与学生信息管理、专业年级班级的组织架构管理、课程信息与课表的统筹安排、考勤签到与请假审批的流程化处理、作业布置提交及成绩评定的全流程跟踪、考试成绩的统计分析以及班务通知的及时发布等功能模块。通过C/S架构设计,系统实现了教师端的管理操作与学生端的互动参与,为高校班级日常事务处理提供了数字化解决方案,有效提升了班级管理效率,简化了传统纸质化办公流程,为师生提供了便捷的移动端操作体验。
三.系统功能演示
四.系统界面展示
五.系统源码展示
import org.apache.spark.sql.SparkSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Map;
import java.util.List;
@RestController
public class CoreBusinessController {
@Autowired
private AttendanceMapper attendanceMapper;
@Autowired
private AssignmentMapper assignmentMapper;
@Autowired
private GradeMapper gradeMapper;
private SparkSession spark = SparkSession.builder()
.appName("ClassManagementSystem")
.config("spark.master", "local[*]")
.getOrCreate();
@PostMapping("/attendance/checkin")
public Map<String, Object> processAttendanceCheckin(@RequestBody AttendanceRequest request) {
Map<String, Object> result = new HashMap<>();
LocalDateTime currentTime = LocalDateTime.now();
LocalDateTime classStartTime = request.getClassStartTime();
LocalDateTime lateThreshold = classStartTime.plusMinutes(10);
AttendanceRecord record = new AttendanceRecord();
record.setStudentId(request.getStudentId());
record.setCourseId(request.getCourseId());
record.setCheckinTime(currentTime);
record.setClassDate(request.getClassDate());
if (currentTime.isBefore(classStartTime.minusMinutes(30))) {
record.setStatus("早到");
result.put("message", "签到成功,您来得太早了");
} else if (currentTime.isBefore(lateThreshold)) {
record.setStatus("正常");
result.put("message", "签到成功");
} else if (currentTime.isBefore(classStartTime.plusMinutes(30))) {
record.setStatus("迟到");
result.put("message", "签到成功,但您已迟到");
} else {
record.setStatus("严重迟到");
result.put("message", "签到失败,迟到时间过长");
}
int insertResult = attendanceMapper.insertAttendanceRecord(record);
if (insertResult > 0) {
StudentAttendanceStats stats = attendanceMapper.getStudentAttendanceStats(request.getStudentId(), request.getCourseId());
double attendanceRate = (double) stats.getNormalCount() / stats.getTotalCount() * 100;
if (attendanceRate < 70) {
result.put("warning", "您的出勤率已低于70%,请注意");
}
result.put("success", true);
result.put("attendanceRate", String.format("%.1f%%", attendanceRate));
} else {
result.put("success", false);
result.put("message", "签到失败,请重试");
}
return result;
}
@PostMapping("/assignment/submit")
public Map<String, Object> processAssignmentSubmission(@RequestBody AssignmentSubmission submission) {
Map<String, Object> result = new HashMap<>();
LocalDateTime currentTime = LocalDateTime.now();
Assignment assignment = assignmentMapper.getAssignmentById(submission.getAssignmentId());
if (assignment == null) {
result.put("success", false);
result.put("message", "作业不存在");
return result;
}
LocalDateTime deadline = assignment.getDeadline();
boolean isLate = currentTime.isAfter(deadline);
AssignmentSubmissionRecord record = new AssignmentSubmissionRecord();
record.setAssignmentId(submission.getAssignmentId());
record.setStudentId(submission.getStudentId());
record.setSubmissionContent(submission.getContent());
record.setSubmissionTime(currentTime);
record.setFileUrl(submission.getFileUrl());
record.setIsLate(isLate);
if (isLate) {
long hoursLate = java.time.Duration.between(deadline, currentTime).toHours();
record.setLateHours(hoursLate);
if (hoursLate <= 24) {
record.setLatePenalty(0.1);
} else if (hoursLate <= 48) {
record.setLatePenalty(0.2);
} else {
record.setLatePenalty(0.3);
}
} else {
record.setLatePenalty(0.0);
}
AssignmentSubmissionRecord existingSubmission = assignmentMapper.getSubmissionByStudentAndAssignment(
submission.getStudentId(), submission.getAssignmentId());
if (existingSubmission != null) {
if (!assignment.getAllowResubmit()) {
result.put("success", false);
result.put("message", "此作业不允许重复提交");
return result;
}
record.setSubmissionVersion(existingSubmission.getSubmissionVersion() + 1);
assignmentMapper.updateSubmissionRecord(record);
} else {
record.setSubmissionVersion(1);
assignmentMapper.insertSubmissionRecord(record);
}
int submissionCount = assignmentMapper.getSubmissionCountByAssignment(submission.getAssignmentId());
int totalStudents = assignmentMapper.getStudentCountInClass(assignment.getClassId());
double submissionRate = (double) submissionCount / totalStudents * 100;
result.put("success", true);
result.put("message", isLate ? "作业提交成功,但已超过截止时间" : "作业提交成功");
result.put("submissionRate", String.format("%.1f%%", submissionRate));
result.put("version", record.getSubmissionVersion());
return result;
}
@PostMapping("/grade/calculate")
public Map<String, Object> processGradeCalculation(@RequestBody GradeCalculationRequest request) {
Map<String, Object> result = new HashMap<>();
List<StudentScore> scores = gradeMapper.getStudentScoresByCourse(request.getCourseId());
if (scores.isEmpty()) {
result.put("success", false);
result.put("message", "暂无学生成绩数据");
return result;
}
double totalScore = 0;
double maxScore = 0;
double minScore = 100;
int passCount = 0;
int excellentCount = 0;
for (StudentScore score : scores) {
double finalScore = calculateFinalScore(score, request.getWeights());
totalScore += finalScore;
maxScore = Math.max(maxScore, finalScore);
minScore = Math.min(minScore, finalScore);
if (finalScore >= 60) passCount++;
if (finalScore >= 85) excellentCount++;
GradeRecord gradeRecord = new GradeRecord();
gradeRecord.setStudentId(score.getStudentId());
gradeRecord.setCourseId(request.getCourseId());
gradeRecord.setFinalScore(finalScore);
gradeRecord.setGradeLevel(determineGradeLevel(finalScore));
gradeRecord.setCalculationTime(LocalDateTime.now());
gradeMapper.insertOrUpdateGrade(gradeRecord);
}
double averageScore = totalScore / scores.size();
double passRate = (double) passCount / scores.size() * 100;
double excellentRate = (double) excellentCount / scores.size() * 100;
GradeStatistics statistics = new GradeStatistics();
statistics.setCourseId(request.getCourseId());
statistics.setAverageScore(averageScore);
statistics.setMaxScore(maxScore);
statistics.setMinScore(minScore);
statistics.setPassRate(passRate);
statistics.setExcellentRate(excellentRate);
statistics.setStudentCount(scores.size());
statistics.setStatisticsDate(LocalDateTime.now());
gradeMapper.insertGradeStatistics(statistics);
result.put("success", true);
result.put("averageScore", String.format("%.2f", averageScore));
result.put("passRate", String.format("%.1f%%", passRate));
result.put("excellentRate", String.format("%.1f%%", excellentRate));
result.put("maxScore", maxScore);
result.put("minScore", minScore);
result.put("processedCount", scores.size());
return result;
}
private double calculateFinalScore(StudentScore score, ScoreWeights weights) {
double assignmentScore = score.getAssignmentScore() * weights.getAssignmentWeight();
double attendanceScore = score.getAttendanceScore() * weights.getAttendanceWeight();
double examScore = score.getExamScore() * weights.getExamWeight();
return assignmentScore + attendanceScore + examScore;
}
private String determineGradeLevel(double score) {
if (score >= 90) return "优秀";
else if (score >= 80) return "良好";
else if (score >= 70) return "中等";
else if (score >= 60) return "及格";
else return "不及格";
}
}
六.系统文档展示
结束
💕💕文末获取源码联系 计算机程序员小杨