前言
- 💖💖作者:计算机程序员小杨
- 💙💙个人简介:我是一名计算机相关专业的从业者,擅长Java、微信小程序、Python、Golang、安卓Android等多个IT方向。会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。热爱技术,喜欢钻研新工具和框架,也乐于通过代码解决实际问题,大家有技术代码这一块的问题可以问我!
- 💛💛想说的话:感谢大家的关注与支持!
- 💕💕文末获取源码联系 计算机程序员小杨
- 💜💜
- 网站实战项目
- 安卓/小程序实战项目
- 大数据实战项目
- 深度学习实战项目
- 计算机毕业设计选题
- 💜💜
一.开发工具简介
- 后端开发语言: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());
}
}
六.系统文档展示
结束
💕💕文末获取源码联系 计算机程序员小杨