当前位置: 首页 > news >正文

基于Java、SpringBoot和uniapp在线考试系统安卓APP和微信小程序

摘要

基于Java、SpringBoot和uniapp的在线考试系统安卓APP微信小程序是一种结合了现代Web开发技术和移动应用技术的解决方案,旨在为教育机构提供一个方便、高效和灵活的在线考试平台。该系统采用Java语言进行后端开发,使用SpringBoot框架简化企业级应用的开发流程。同时,利用uniapp框架开发跨平台的移动应用程序和微信小程序,以满足不同用户的需求。

在这个系统中,用户可以在安卓设备上安装APP或通过微信搜索小程序来访问在线考试功能。学生可以参加考试、查看成绩和学习进度,教师可以创建和管理试卷,设置考试时间限制等。

总之,基于Java、SpringBoot和uniapp的在线考试系统安卓APP微信小程序为教育机构提供了一个便捷、高效和灵活的在线考试解决方案,有助于提高教育质量和效率。

使用的技术

后端:Java语言,SpringBoot框架,MySql数据库,Maven依赖管理等;

前端:Vue.js语法的uni-app框架。

版本1实现的功能

管理员、教师、学生三种角色;

用户登录:管理员、教师和学生均可以使用自己的账号和密码进行登录APP;

人员管理:管理员可以对老师和学生的身份信息编辑、删除,老师可以对学生的身份信息进行编辑和删除;

考试记录:参与过考试的人员可以查看自己的考试记录,包括成绩和试题答案;

试卷管理:管理员和老师可以对试卷进行管理,包括添加试卷、添加试题、发布试卷等操作;

版本2在1的基础上新增如下功能

由原来的只支持APP改为支持APP和微信小程序;

管理员和教师新增PC浏览器端后台管理(移动端功能没有减少),管理员后台(用户管理、试卷管理、题库管理),教师后台(试卷管理、题库管理);

新增题库管理,试卷可以从题库选择已有的试题;

试卷添加之后可以一键自动组卷,添加试题到试卷里面去,也可以手动修改试卷的试题内容;

教师和管理员可以为试卷添加考试人员,只有被添加的人才能进行那套试卷的在线考试。

部分后端代码展示

public ResponseResult<Object> queryListWithNum(ExamPaper examPaper) {QueryWrapper<ExamPaper> queryWrapper;if(StringUtils.isNotEmpty(examPaper.getPaperName())) {queryWrapper= new QueryWrapper<ExamPaper>();queryWrapper.like("paper_name",examPaper.getPaperName());}else {queryWrapper= new QueryWrapper<ExamPaper>(examPaper);}List<ExamPaper> paperList = examPaperMapper.selectList(queryWrapper);for (ExamPaper paper:paperList){ExamTest examTest = new ExamTest();examTest.setValidFlag(1);examTest.setState(0);examTest.setPid(paper.getPid());QueryWrapper<ExamTest> queryWrapperTest = new QueryWrapper<ExamTest>(examTest);paper.setUnStartNum(examTestMapper.selectCount(queryWrapperTest));examTest.setState(1);paper.setPassNum(examTestMapper.selectCount(queryWrapperTest));examTest.setState(2);paper.setFailNum(examTestMapper.selectCount(queryWrapperTest));ExamQuestion examQuestion = new ExamQuestion();examQuestion.setValidFlag(1);examQuestion.setType(0);QueryWrapper<ExamQuestion> queryWrapperQuestion = new QueryWrapper<ExamQuestion>(examQuestion);paper.setSingleCount(examQuestionMapper.selectCount(queryWrapperQuestion));examQuestion.setType(1);paper.setMultiCount(examQuestionMapper.selectCount(queryWrapperQuestion));examQuestion.setType(2);paper.setJudgeCount(examQuestionMapper.selectCount(queryWrapperQuestion));}return new ResponseResult<Object>(ResponseCode.SUCCESS,"查询成功",paperList);}public ResponseResult<Object> autoCreatePaper(ExamPaper examPaper) {QueryWrapper<ExamPaper> queryWrapper = new QueryWrapper<ExamPaper>(examPaper);examPaper = examPaperMapper.selectOne(queryWrapper);ExamQuestion examQuestion = new ExamQuestion();examQuestion.setValidFlag(1);examQuestion.setType(0);examQuestion.setPid(examPaper.getPid().intValue());QueryWrapper<ExamQuestion> queryWrapperQuestion = new QueryWrapper<ExamQuestion>(examQuestion);examPaper.setSingleCount(examQuestionMapper.selectCount(queryWrapperQuestion));examQuestion.setType(1);examPaper.setMultiCount(examQuestionMapper.selectCount(queryWrapperQuestion));examQuestion.setType(2);examPaper.setJudgeCount(examQuestionMapper.selectCount(queryWrapperQuestion));if(examPaper.getSingleNum()>0){int limit = examPaper.getSingleNum() - examPaper.getSingleCount();if(limit > 0){List<ExamQuestion> randQue = examQuestionMapper.getRandQuestion(0,limit);autoAddItem(randQue, examPaper);}}if(examPaper.getMultiNum()>0){int limit = examPaper.getMultiNum() - examPaper.getMultiCount();if(limit > 0){List<ExamQuestion> randQue = examQuestionMapper.getRandQuestion(1,limit);autoAddItem(randQue, examPaper);}}if(examPaper.getSingleNum()>0){int limit = examPaper.getJudgeNum() - examPaper.getJudgeCount();if(limit > 0){List<ExamQuestion> randQue = examQuestionMapper.getRandQuestion(2,limit);autoAddItem(randQue, examPaper);}}return new ResponseResult<Object>(ResponseCode.SUCCESS,"创建成功");}public void autoAddItem(List<ExamQuestion> randQue,ExamPaper paper){if(randQue==null||randQue.isEmpty())return;for(ExamQuestion one:randQue){one.setPid(paper.getPid().intValue());one.setQid(null);examQuestionMapper.insert(one);}}

部分前端代码展示

<template>  <view class="container">  <view class="user-section"><image class="bg" src="/static/user-bg.jpg"></image><view class="user-info-box"><view class="portrait-box"><image style="background-color: white;" class="portrait" :src="getHead()"></image></view><view class="info-box" ><text class="username">{{ user.nickName || '游客'}}</text><view class="info-box" v-if="user.userName"><text class="username">姓名:<text class="u-tips-color">{{  user.userName }}</text></text></view><view class="info-box" v-if="user.userClass"><text class="username">班级:<text class="u-tips-color">{{  user.userClass }}</text></text></view></view></view></view><view class="u-flex u-direction-row u-row-center" v-if="!user"><view class="container"><view class="list-cell " style="text-align: center;"><text class="cell-tit" style="color: #909399;">游客无法享受购物的快乐</text></view><view class="list-cell log-out-btn" @click="toLogin"><text class="cell-tit">前往登录</text></view></view></view><view v-if="user"class="cover-container":style="[{transform: coverTransform,transition: coverTransition}]"@touchstart="coverTouchstart"@touchmove="coverTouchmove"@touchend="coverTouchend"><image class="arc" src="/static/arc.png"></image><view v-if="user.type != 2"><view class="tj-sction u-p-t-20 u-font-30" style="color: #2979ff;">管理专区</view><view class="" style="background-color: white;"><view @click="jumpToAddUser(2)" class="u-p-20 u-border-bottom">添加学生</view><view   @click="jumpToAddUser(1)" v-if="user.type==0" class="u-p-20 u-border-bottom">添加教师</view><view  @click="jumpToUsrList"  class="u-p-20 u-border-bottom">人员管理</view><view  @click="jumpToResList"  class="u-p-20">题库管理</view></view></view><!-- 浏览历史 --><view class="history-section icon"><view class="sec-header"><text>其他功能</text></view><list-cell icon="icon-shezhi1" iconColor="#e07472" title="设置" border="" @eventClick="navTo('/pages/set/set')"></list-cell><list-cell icon="icon-share" iconColor="#3f80de" title="退出登录" border="" @eventClick="toLogout"></list-cell></view></view></view>  
</template>  

演示视频

基于Java和UniAPP在线考试系统安卓APP微信小程序

相关文章:

基于Java、SpringBoot和uniapp在线考试系统安卓APP和微信小程序

摘要 基于Java、SpringBoot和uniapp的在线考试系统安卓APP微信小程序是一种结合了现代Web开发技术和移动应用技术的解决方案&#xff0c;旨在为教育机构提供一个方便、高效和灵活的在线考试平台。该系统采用Java语言进行后端开发&#xff0c;使用SpringBoot框架简化企业级应用…...

抖音a-bogus加密解析(三)

要补的环境我给提示&#xff0c;大家自行操作&#xff0c;出了问题就是因为缺环境&#xff0c;没补好 window global; // reading _u未定义 window.requestAnimationFrame function () {} // XMLHttpRequest 未定义 window.XMLHttpRequest function () {} window.onwheelx …...

IS-IS DIS

原理概述 OSPF 协议支持4种网络类型&#xff0c; IS-IS 协议只支持两种网络类型&#xff0c;即广播网络和点到点网络。与 OSPF 协议相同&#xff0c; IS-IS 协议在广播网络中会将网络视为一个伪节点( Pseudonode &#xff0c;简称 PSN )&#xff0c;并选举出一台 DIS ( Designa…...

random和range

含义&#xff1a; random(1&#xff0c;10) 不包含10&#xff0c;用于生成随机数。它可以生成浮点数或整数&#xff0c;取决于具体的使用方式。 range(0&#xff0c;1) 不包含1&#xff0c;用于生成一个整数序列。它可以生成一个指定范围内的连续整数序列。 区别在于&#x…...

研二学妹面试字节,竟倒在了ThreadLocal上,这是不要应届生还是不要女生啊?

一、写在开头 今天和一个之前研二的学妹聊天&#xff0c;聊及她上周面试字节的情况&#xff0c;着实感受到了Java后端现在找工作的压力啊&#xff0c;记得在18&#xff0c;19年的时候&#xff0c;研究生计算机专业的学生&#xff0c;背背八股文找个Java开发工作毫无问题&#x…...

Golang:gammazero/deque是一个快速环形缓冲区deque(双端队列)实现

gammazero/deque是一个快速环形缓冲区deque&#xff08;双端队列&#xff09;实现。 文档 https://github.com/gammazero/deque 安装 go get github.com/gammazero/deque代码示例 先入先出队列 package mainimport ("fmt""github.com/gammazero/deque&quo…...

C++ 时间处理-统计函数运行时间

1. 关键词2. 问题3. 解决思路4. 代码实现 4.1. timecount.h4.2. timecount.cpp 5. 测试代码6. 运行结果7. 源码地址 1. 关键词 C 时间处理 统计函数运行时间 跨平台 2. 问题 C如何简单便捷地实现“函数运行时间的统计”功能&#xff1f; 3. 解决思路 类的构造函数&#x…...

JAVA面试题大全(十五)

1、Zookeeper 是什么&#xff1f; zookper是一个分布式的&#xff0c;开放源码的分布式应用程序协调服务。是 google chubby 的开源实现&#xff0c;是 hadoop 和 hbase 的重要组件。它是一个为分布式应用提供一致性服务的软件&#xff0c;提供的功能包括&#xff1a;配置维护…...

使用python对指定文件夹下的pdf文件进行合并

使用python对指定文件夹下的pdf文件进行合并 介绍效果代码 介绍 对指定文件夹下的所有pdf文件进行合并成一个pdf文件。 效果 要合并的pdf文件&#xff0c;共计16个1页的pdf文件。 合并成功的pdf文件&#xff1a;一个16页的pdf文件。 代码 import os from PyPDF2 import …...

Day50 | 309.最佳买卖股票时机含冷冻期 714.买卖股票的最佳时机含手续费 总结

代码随想录算法训练营Day50 | 309.最佳买卖股票时机含冷冻期 714.买卖股票的最佳时机含手续费 总结 LeetCode 309.最佳买卖股票时机含冷冻期 题目链接&#xff1a;LeetCode 309.最佳买卖股票时机含冷冻期 思路&#xff1a; 四个状态。 保持持有股票&#xff0c;保持卖出股票…...

Steam在连接至服务器发生错误/连接服务器遇到问题解决办法

Steam作为全球最大的数字游戏分发平台&#xff0c;构建了一个活跃的玩家社区&#xff0c;用户可以创建个人资料&#xff0c;添加好友&#xff0c;组建群组&#xff0c;参与讨论&#xff0c;甚至直播自己的游戏过程。通过创意工坊&#xff0c;玩家还能分享自制的游戏模组、地图、…...

kafka 工作流程文件存储

爬虫组件分析 目录概述需求&#xff1a; 设计思路实现思路分析1.kafka 工作流程2.kafka 文件存储 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result,wait for…...

贪心算法4(c++)

过河的最短时间 题目描述 输入 在漆黑的夜里&#xff0c;N位旅行者来到了一座狭窄而且没有护栏的桥边。如果不借助手电筒的话&#xff0c;大家是无论如何也不敢过桥去的。不幸的是&#xff0c;N个人一共只带了一只手电筒&#xff0c;而桥窄得只够让两个人同时过&#xff0c;如果…...

【无标题】yoloV8目标检测与实例分割--目标检测onnx模型部署

1. 模型转换 ONNX Runtime 是一个开源的高性能推理引擎&#xff0c;用于部署和运行机器学习模型&#xff0c;其设计的目标是优化执行open neural network exchange &#xff08;onnx&#xff09;格式定义各模型&#xff0c;onnx是一种用于表示机器学习模型的开放标准。ONNX Ru…...

深入理解与防御跨站脚本攻击(XSS):从搭建实验环境到实战演练的全面教程

跨站脚本攻击&#xff08;XSS&#xff09;是一种常见的网络攻击手段&#xff0c;它允许攻击者在受害者的浏览器中执行恶意脚本。以下是一个XSS攻击的实操教程&#xff0c;包括搭建实验环境、编写测试程序代码、挖掘和攻击XSS漏洞的步骤。 搭建实验环境 1. 安装DVWA&#xff…...

初步认识栈和队列

Hello&#xff0c;everyone&#xff0c;今天小编讲解栈和队列的知识&#xff01;&#xff01;&#xff01; 1.栈 1.1栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。 进行数据插入和删除操作的一端 称为栈顶&…...

插件:NGUI

一、版本 安装完毕后重启一下即可&#xff0c;否则可能创建的UI元素不生效 二、使用 Label文字 1、创建Canvs 2、只有根节点的这些脚本全部展开才能鼠标右键创建UI元素 3、选择字体 Label添加打字效果 Sprite图片 1、选择图集 2、选择图集中的精灵 InvisibleWidget容器 用来…...

网络爬虫原理及其应用

你是否想知道Google 和 Bing 等搜索引擎如何收集搜索结果中显示的所有数据。这是因为搜索引擎对其档案中的所有页面建立索引&#xff0c;以便它们可以根据查询返回最相关的结果。网络爬虫使搜索引擎能够处理这个过程。 本文重点介绍了网络爬虫的重要方面、网络爬虫为何重要、其…...

串口中断原理及实现

一、串口的原理 SM0、SM1——串行口工作模式 SM0SM1模式特点00模式0移位寄存器方式&#xff0c;用于I/O口扩展01模式18位UART,波特率可变10模式29位UART,波特率为时钟频率/32或/6411模式39位UART,波特率可变 TI、RI——发送、接收中断标志位 TITI0 允许发送>TI1 发送完成后…...

课时136:变量进阶_变量实践_高级赋值

2 变量进阶 2.1 变量实践 2.1.1 高级赋值 学习目标 这一节&#xff0c;我们从 基础知识、简单实践、小结 三个方面来学习 基础知识 简介 所谓的高级赋值&#xff0c;是另外的一种变量值获取方法&#xff0c;这里涉及到更多我们学习之外的一些shell内置变量格式,其实这部分…...

Lazarus实战:利用FpSpreadsheet控件打造高效电子表格数据处理工具

1. 认识Lazarus与FpSpreadsheet的黄金组合 第一次接触Lazarus开发环境时&#xff0c;我就被它的跨平台特性和类似Delphi的快速开发体验所吸引。作为一个长期从事单机程序开发的工程师&#xff0c;我一直在寻找能够快速处理电子表格数据的解决方案。直到发现了FpSpreadsheet这个…...

解密GPCRs二级结合口袋:从β2AR到5HT2BR的偏置信号传导机制

解密GPCRs二级结合口袋&#xff1a;从β2AR到5HT2BR的偏置信号传导机制 在结构药理学领域&#xff0c;G蛋白偶联受体(GPCRs)的配体结合机制研究一直是药物开发的核心课题。传统研究多聚焦于正位结合位点(Orthosteric Binding Site, OBS)&#xff0c;而近年来&#xff0c;二级结…...

避开这些坑!Unity WebGL本地部署Nginx的5个关键配置点

Unity WebGL本地Nginx部署避坑指南&#xff1a;5个关键配置解析 当Unity开发者将项目导出为WebGL格式并在本地通过Nginx部署时&#xff0c;常常会遇到各种棘手的配置问题。本文聚焦五个最容易被忽视却至关重要的配置环节&#xff0c;帮助开发者绕过常见陷阱&#xff0c;实现顺畅…...

别再重复造轮子了 教你一招:把全球开源宝库,变成你个人的技能库

文章目录前言一、为什么说"重复造轮子"是程序员最大的浪费&#xff1f;二、全球开源宝库到底有多大&#xff1f;你可能低估了三、找轮子的艺术&#xff1a;如何从海量仓库里挖出宝藏&#xff1f;3.1 善用AI搜索&#xff0c;别再用传统方式了3.2 关注Awesome系列和 cu…...

没有后台服务的鸿蒙应用,算不算“半成品”?——本地 Service Extension 开发真香指南!

大家好&#xff0c;我是[晚风依旧似温柔]&#xff0c;新人一枚&#xff0c;欢迎大家关注~ 本文目录&#xff1a;前言一、ExtensionAbility 类型&#xff1a;先搞清“职业分工”&#xff0c;再谈用谁干活1️⃣ ExtensionAbility 大家族速览二、后台服务场景&#xff1a;哪些事儿…...

并网模式下微电网经济调度之粒子群算法探秘

并网模式下采用粒子群算法进行微电网经济调度&#xff0c;含有储能调度&#xff0c;有注释。在当今能源转型的大背景下&#xff0c;微电网作为一种高效、灵活的能源系统备受关注。在并网模式下&#xff0c;如何实现微电网的经济调度是关键问题&#xff0c;而粒子群算法&#xf…...

值类型与引用类型:别再只背“栈和堆”了,看这 个实际影响绞

基础示例&#xff1a;单工作表 Excel 转 TXT 以下是将一个 Excel 文件中的第一个工作表转换为 TXT 的完整步骤&#xff1a; 1. 加载并读取Excel文件 from spire.xls import * from spire.xls.common import * workbook Workbook() workbook.LoadFromFile("示例.xlsx"…...

# 发散创新:基于Python实现轻量级物理引擎的核心算法与实战优化在游戏开发、虚拟仿真和机

发散创新&#xff1a;基于Python实现轻量级物理引擎的核心算法与实战优化 在游戏开发、虚拟仿真和机器人控制等领域&#xff0c;物理引擎是构建真实感交互体验的关键组件。本文将带你从零开始用 Python NumPy 实现一个简化但功能完整的 2D 物理引擎原型&#xff0c;并深入剖析…...

为什么92%的AI项目在上线后遭遇备份失效?3个被忽视的元数据一致性陷阱曝光

第一章&#xff1a;AI原生软件研发容灾备份策略设计 2026奇点智能技术大会(https://ml-summit.org) AI原生软件具备模型权重动态更新、推理服务弹性伸缩、训练流水线持续迭代等特性&#xff0c;传统基于静态二进制与数据库快照的容灾方案难以覆盖模型版本、特征存储、向量索引…...

FreakStudio碌

环境安装 pip install keystone-engine capstone unicorn 这3个工具用法极其简单&#xff0c;下面通过示例来演示其用法。 Keystone 示例 from keystone import * CODE b"INC ECX; ADD EDX, ECX" try:ks Ks(KS_ARCH_X86, KS_MODE_64)encoding, count ks.asm(CODE)…...