【小程序毕设】计算机考研刷题平台 uni-app|微信小程序|安卓 计算机毕业设计项目 微信小程序开发工具部署 附源码+文档+讲解

56 阅读3分钟

前言

一.开发工具简介

  • 后端开发语言:Java+Python(两个版本都支持)
  • 后端框架:Spring Boot(Spring+SpringMVC+Mybatis)+Django(两个版本都支持)
  • 前端:uni-app+微信小程序+安卓
  • 数据库:MySQL
  • 系统架构:C/S + B/S
  • 开发工具:IDEA(Java的)或者PyCharm(Python的)+微信小程序开发工具

二.系统内容简介

《计算机考研刷题平台》是一个专门针对计算机专业考研学生开发的在线刷题学习系统。该平台采用C/S架构,通过uni-app技术实现微信小程序和安卓应用的跨平台开发,为用户提供便捷的移动端学习体验。系统后端基于Spring Boot框架支持,使用MySQL数据库进行数据存储管理,确保系统的稳定性和可扩展性。平台核心功能涵盖用户管理、课程管理、试题管理、考研刷题管理、系统管理和考试管理六大模块,形成了完整的在线学习闭环。用户可以通过平台进行个性化学习计划制定、专项练习、模拟考试等操作,系统支持智能推荐、错题回顾、学习进度跟踪等功能,帮助考研学生高效备考。整个平台界面简洁直观,操作流程顺畅,充分考虑了移动端用户的使用习惯和学习需求。

三.系统功能演示

计算机考研刷题平台

四.系统界面展示

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

五.系统源码展示


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;

@Service
public class ExamManagementService {
    @Autowired
    private QuestionMapper questionMapper;
    @Autowired
    private UserExamMapper userExamMapper;
    
    private SparkSession spark = SparkSession.builder()
        .appName("ExamDataAnalysis")
        .config("spark.master", "local")
        .getOrCreate();

    public ExamResult generateExamPaper(Long userId, String subject, Integer difficulty) {
        List<Question> questionPool = questionMapper.selectBySubjectAndDifficulty(subject, difficulty);
        Collections.shuffle(questionPool);
        List<Question> selectedQuestions = questionPool.stream().limit(20).collect(Collectors.toList());
        UserExam userExam = new UserExam();
        userExam.setUserId(userId);
        userExam.setExamId(generateExamId());
        userExam.setQuestions(JSON.toJSONString(selectedQuestions));
        userExam.setStartTime(new Date());
        userExam.setStatus("ONGOING");
        userExamMapper.insert(userExam);
        return new ExamResult(userExam.getExamId(), selectedQuestions);
    }

    public ScoreResult calculateExamScore(Long examId, Map<Integer, String> userAnswers) {
        UserExam userExam = userExamMapper.selectByExamId(examId);
        List<Question> questions = JSON.parseArray(userExam.getQuestions(), Question.class);
        int correctCount = 0;
        int totalCount = questions.size();
        List<AnswerAnalysis> analysisResults = new ArrayList<>();
        for (Question question : questions) {
            String userAnswer = userAnswers.get(question.getId());
            boolean isCorrect = question.getCorrectAnswer().equals(userAnswer);
            if (isCorrect) correctCount++;
            AnswerAnalysis analysis = new AnswerAnalysis();
            analysis.setQuestionId(question.getId());
            analysis.setUserAnswer(userAnswer);
            analysis.setCorrectAnswer(question.getCorrectAnswer());
            analysis.setIsCorrect(isCorrect);
            analysis.setExplanation(question.getExplanation());
            analysisResults.add(analysis);
        }
        double score = (double) correctCount / totalCount * 100;
        userExam.setScore(score);
        userExam.setCorrectCount(correctCount);
        userExam.setEndTime(new Date());
        userExam.setStatus("COMPLETED");
        userExamMapper.updateByExamId(userExam);
        updateUserStatistics(userExam.getUserId(), correctCount, totalCount);
        return new ScoreResult(score, correctCount, totalCount, analysisResults);
    }

    public RecommendationResult getPersonalizedQuestions(Long userId) {
        UserStatistics stats = userStatisticsMapper.selectByUserId(userId);
        Dataset<Row> userDataset = spark.read()
            .format("jdbc")
            .option("url", "jdbc:mysql://localhost:3306/exam_db")
            .option("dbtable", "user_answer_records")
            .option("user", "root")
            .option("password", "password")
            .load();
        List<String> weakSubjects = identifyWeakSubjects(stats);
        List<Integer> difficultQuestionTypes = identifyDifficultTypes(userId);
        QueryWrapper<Question> queryWrapper = new QueryWrapper<>();
        queryWrapper.in("subject", weakSubjects);
        queryWrapper.in("question_type", difficultQuestionTypes);
        queryWrapper.eq("status", "ACTIVE");
        queryWrapper.orderByDesc("error_rate");
        queryWrapper.last("LIMIT 10");
        List<Question> recommendedQuestions = questionMapper.selectList(queryWrapper);
        for (Question question : recommendedQuestions) {
            RecommendRecord record = new RecommendRecord();
            record.setUserId(userId);
            record.setQuestionId(question.getId());
            record.setRecommendReason("基于错误率和薄弱知识点推荐");
            record.setCreateTime(new Date());
            recommendRecordMapper.insert(record);
        }
        return new RecommendationResult(recommendedQuestions, weakSubjects);
    }

    public StudyProgressResult getStudyProgress(Long userId) {
        UserStatistics stats = userStatisticsMapper.selectByUserId(userId);
        List<SubjectProgress> subjectProgressList = new ArrayList<>();
        Map<String, Integer> subjectQuestionCounts = questionMapper.countBySubject();
        for (Map.Entry<String, Integer> entry : subjectQuestionCounts.entrySet()) {
            String subject = entry.getKey();
            Integer totalQuestions = entry.getValue();
            Integer completedQuestions = userAnswerMapper.countCompletedByUserAndSubject(userId, subject);
            Integer correctQuestions = userAnswerMapper.countCorrectByUserAndSubject(userId, subject);
            double completionRate = (double) completedQuestions / totalQuestions * 100;
            double accuracyRate = completedQuestions > 0 ? (double) correctQuestions / completedQuestions * 100 : 0;
            SubjectProgress progress = new SubjectProgress();
            progress.setSubject(subject);
            progress.setTotalQuestions(totalQuestions);
            progress.setCompletedQuestions(completedQuestions);
            progress.setCorrectQuestions(correctQuestions);
            progress.setCompletionRate(completionRate);
            progress.setAccuracyRate(accuracyRate);
            subjectProgressList.add(progress);
        }
        int totalStudyDays = calculateStudyDays(userId);
        int continuousStudyDays = calculateContinuousStudyDays(userId);
        return new StudyProgressResult(subjectProgressList, totalStudyDays, continuousStudyDays, stats.getTotalScore());
    }
}








六.系统文档展示

在这里插入图片描述

结束

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