基于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微信小程序

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/15367.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringCloud微服务之Nacos、Feign、GateWay详解

SpringCloud微服务之Nacos、Feign、GateWay详解 1、Nacos配置管理1.1、统一配置管理1.1.1、在nacos中添加配置文件1.1.2、从微服务拉取配置 1.2、配置热更新1.2.1、方式一1.2.2、方式二 1.3、配置共享1.3.1、配置共享的优先级 1.4、搭建nacos集群1.4.1、初始化数据库1.4.2、下载…

plt多子图设置

import matplotlib.pyplot as plt# 使用 subplots 函数创建一个 2x3 的子图网格 fig, axs plt.subplots(nrows2, ncols3, figsize(16, 10)) # 调整 figsize 来改变图像大小# 遍历每个子图&#xff0c;并绘制一些内容&#xff08;这里只是简单的示例&#xff09; for ax in ax…

React与Vue的区别?

一、区别: 1. 语法 Vue采用自己特有的模板语法&#xff1b; React是单向的&#xff0c;采用jsx语法创建react元素。 2.监听数据变化的实现原理不同 Vue2.0 通过Object.defineproperty()方法的getter/setter属性, 实现数据劫持, 每次修改完数据会触发diff算法(双端对比) …

VUE 页面生命周期基本知识点

在 Vue.js 中&#xff0c;页面生命周期&#xff08;更准确地说是组件生命周期&#xff09;指的是组件从创建到销毁的一系列过程。了解这些生命周期钩子可以帮助我们更好地管理组件的状态和行为。以下是 Vue 组件的主要生命周期钩子&#xff1a; beforeCreate 在实例初始化之后&…

vue使用element plus组件上传服务器

在Vue项目中使用Element Plus组件上传文件到服务器&#xff0c;你可以使用ElUpload组件。以下是一个简单的示例&#xff0c;展示了如何使用ElUpload组件来上传文件&#xff0c;并将其保存到服务器。 首先&#xff0c;确保你已经安装了Element Plus。 npm install element-plu…

从入门到精通:详解Linux进程管理

前言 在这篇文章中&#xff0c;我将带领大家深入学习和理解Linux系统中的进程管理。无论你是初学者还是有一定经验的开发者&#xff0c;相信这篇文章都会对你有所帮助。我们将详细讲解冯诺依曼体系结构、操作系统概念、进程管理、进程调度、进程状态、环境变量、内存管理以及其…

C语言之函数和函数库以及自己制作静态动态链接库并使用

一&#xff1a;函数的本质 1&#xff1a;C语言为什么会有函数 &#xff08;1&#xff09;整个程序分为多个源文件&#xff0c;一个文件分为多个函数&#xff0c;一个函数分成多个语句&#xff0c;这就是整个程序的组织形式。这样的组织好处在于&#xff1a;分化问题、、便于程序…

分布式版本控制工具 git

git 是什么 分布式版本控制工具。github 是代码托管平台。 git 有什么用 保存文件的所有修改记录。使用版本号&#xff08;sha1 哈希值&#xff09; 进行区分。随时可浏览历史版本记录。可还原到历史指定版本。对比不同版本的文件差异。 为什么要使用 git 多人协作开发一个大…

SQL 优化

SQL 优化是指通过各种手段提高 SQL 查询的执行效率,减少资源消耗,提高数据库的整体性能。以下是一些详细的 SQL 优化方法,包括索引优化、查询优化、数据库设计优化等。 1. 索引优化 创建适当的索引: 单列索引:在查询中频繁使用的单个列上创建索引。多列索引(复合索引):…

STM32手写超频到128M函数

今天学习了野火的STM32教程学会了如何设置STM32的时钟频率&#xff0c;步骤比较详细&#xff0c;也很容易理解&#xff0c;就是视频教程不能跳着看&#xff0c;只能一节节的看&#xff0c;不然会知识不连贯&#xff0c;造成有些知识不理解&#xff0c;连续着看还是没有什么难度…

docker-file 网络

docker挂载 1.绑定挂载&#xff08;Bind Mounts&#xff09;&#xff1a;绑定挂载是将主机上的文件或目录挂载到容器中。 docker run -v /host/path:/container/path image_name 2.卷挂载&#xff08;Volume Mounts&#xff09;&#xff1a;卷挂载将 Docker 数据卷挂载到容器中…

【CTF Web】CTFShow web4 Writeup(SQL注入+PHP+字符型注入)

web4 1 管理员阿呆又失败了&#xff0c;这次一定要堵住漏洞 解法 注意到&#xff1a; <!-- flag in id 1000 -->拦截很多种字符&#xff0c;连 select 也不给用了。 if(preg_match("/or|\-|\\\|\/|\\*|\<|\>|\!|x|hex|\(|\)|\|select/i",$id)){die(&q…

yolov8推理由avi改为mp4

修改\ultralytics-main\ultralytics\engine\predictor.py&#xff0c;即可 # Ultralytics YOLO &#x1f680;, AGPL-3.0 license """ Run prediction on images, videos, directories, globs, YouTube, webcam, streams, etc.Usage - sources:$ yolo modepred…

Android开发-Android开发中的TCP与UDP通信策略的实现

Android 开发中的 TCP 与 UDP 通信策略的实现 1. 前言2. 准备工作3. Kotlin 中 TCP 通信实现客户端代码示例&#xff1a;服务器代码示例&#xff1a; 4. Kotlin 中 UDP 通信实现客户端代码示例&#xff1a;服务器代码示例&#xff1a; 5. TCP 与 UDP 应用场景分析TCP 实现可靠传…

搭建访问阿里云百炼大模型环境

最近这波大降价&#xff0c;还有限时免费&#xff0c;还不赶快试试在线大模型&#xff1f;下面整理访问百炼平台的千问模型方法。 创建RAM子账号并授权 创建RAM子账号 1. “访问控制RAM”入口&#xff08;控制台URL&#xff09; 然后点击进入“RAM管理控制台” 2. 添加用户 …

vue 区分多环境打包

需求&#xff1a;区分不同的环境&#xff08;测试、正式环境&#xff09;&#xff0c;接口文档地址不同&#xff1b; 配置步骤&#xff1a; 1、在根目录下面新建 .env.xxx 文件&#xff08;xxx 根据环境不同配置&#xff09; 文件中一定要配置的参数项为&#xff1a;NODE_ENV…

【Python搞定车载自动化测试】——Python实现CAN总线Bootloader刷写(含Python源码)

系列文章目录 【Python搞定车载自动化测试】系列文章目录汇总 文章目录 系列文章目录&#x1f4af;&#x1f4af;&#x1f4af; 前言&#x1f4af;&#x1f4af;&#x1f4af;一、环境搭建1.软件环境2.硬件环境 二、目录结构三、源码展示1.诊断基础函数方法2.诊断业务函数方法…

python 火焰检测

在日常生活,总是离不开火,有时候我们需要预防火灾发生,但是我们又不可能一直盯着,这时候我们就需要一款程序帮我们盯着,一旦发生火灾从而告知我们,今天就带大家编写这么一款应用。 安装需要的库 pip install opencv-python 代码实现 import cv2 # Library for…

qmt量化教程4----订阅全推数据

文章链接 qmt量化教程4----订阅全推数据 (qq.com) 上次写了订阅单股数据的教程 量化教程3---miniqmt当作第三方库设置&#xff0c;提供源代码 全推就主动推送&#xff0c;当行情有变化就会触发回调函数&#xff0c;推送实时数据&#xff0c;可以理解为数据驱动类型&#xff0…

mysql中使用 mysqldump 实现跨机器备份|数据同步

1.如果同步数据库&#xff0c;必须先创建数据库&#xff1a; mysqldump -h 192.168.1.10 --lock-tablesfalse -uroot -proot db_name | mysql -h127.0.0.1 -uroot -proot db_name2.过滤掉不想要的表(没试过&#xff0c;但是试过转为sql文件的) mysqldump -h 192.168.1.10 --…