基于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.pswp.cn/web/15367.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/15367.shtml
英文地址,請注明出處:http://en.pswp.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 --…