【小程序】高校班务管理小程序 uni-app|微信小程序|安卓 计算机毕业设计项目 微信小程序开发工具部署 附源码+文档+讲解

46 阅读4分钟

前言

一.开发工具简介

  • 后端开发语言: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 "不及格";
    }
}

六.系统文档展示

在这里插入图片描述

结束

💕💕文末获取源码联系 计算机程序员小杨