基于springboot vue3 在线考试系统设计与实现 源码数据库 文档

博主介绍:专注于Java(springboot ssm springcloud等开发框架) vue  .net  php phython node.js    uniapp小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作
☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟
我的博客空间发布了1000+毕设题目 方便大家学习使用
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人
更多项目地址 介绍 翰文编程-CSDN博客

系统实现预览

第4章 系统设计

系统设计是将被设计对象划分为单个模块进行构建,各个模块相互支持,相互制约,它们的组合是一个完整的系统。通过系统设计,可以最大限度地满足系统的预期目标,明确软件开发的目的

4.1 系统基本结构设计

本次系统采用springboot框架进行开发,springboot框架是一款企业界主流的软件开发技术,其简化了开发流程,大大缩减了软件开发所需的时间提高了软件的响应速度。系统总体结构图如图4-1所示

图4-1 系统总体结构图

4.2 数据库设计

数据库结构设计的好坏直接影响到在线考试系统的效率和实现的效果。本系统的数据库采用MySQL数据库MySQL是一种开放源代码的关系型数据库管理系统使用最常见的数据库管理语言SQL进行数据库管理

4.2.1 数据库E-R图设计

E-R图也可称为实体-联系图,其可以清楚的显示实体与实体之间的关系,是描述概念模型的有效方式,通过各实体间的关系方便数据库结构的设计。以下是本系统主要的实体属性图如下所示。

考试信息E-R图如图4-2所示。

4-2考试信息E-R图

考场信息E-R图如图4-3所示。

4-3考场信息E-R图

教师信息E-R图如图4-4所示。

4-4教师信息E-R图

学生信息E-R图如图4-5所示。

4-5学生信息E-R图

在线考试系统总体E-R图如图4-6所示。

4-6在线考试系统总体E-R图

4.2.2 数据库表设计

数据表是用来保存多种数据的表,它是所有数据库的核心对象,且对于软件开发有着不可替代的作用。其相关数据表如下:

4-1菜单

字段名称

类型

长度

字段说明

主键

默认值

id

bigint

主键

  主键

addtime

timestamp

创建时间

CURRENT_TIMESTAMP

menujson

longtext

4294967295

菜单

4-2考试信息

字段名称

类型

长度

字段说明

主键

默认值

id

bigint

主键

  主键

addtime

timestamp

创建时间

CURRENT_TIMESTAMP

kaoshimingcheng

varchar

200

考试名称

kaoshikemu

varchar

200

考试科目

kaoshishijian

datetime

考试时间

kaoshinianji

varchar

200

考试年级

4-3考场信息

字段名称

类型

长度

字段说明

主键

默认值

id

bigint

主键

  主键

addtime

timestamp

创建时间

CURRENT_TIMESTAMP

kaochanghao

varchar

200

考场号

kaochangrenshu

varchar

200

考场人数

changci

varchar

200

场次

jiankaolaoshi

varchar

200

监考老师

4-4教师

字段名称

类型

长度

字段说明

主键

默认值

id

bigint

主键

  主键

addtime

timestamp

创建时间

CURRENT_TIMESTAMP

jiaoshigonghao

varchar

200

教师工号

jiaoshimima

varchar

200

教师密码

jiaoshixingming

varchar

200

教师姓名

xingbie

varchar

200

性别

tupian

longtext

4294967295

图片

lianxifangshi

varchar

200

联系方式

4-5配置文件

字段名称

类型

长度

字段说明

主键

默认值

id

bigint

主键

  主键

name

varchar

100

配置参数名称

value

varchar

100

配置参数值

4-6成绩信息

字段名称

类型

长度

字段说明

主键

默认值

id

bigint

主键

  主键

addtime

timestamp

创建时间

CURRENT_TIMESTAMP

shijuanmingcheng

varchar

200

试卷名称

xuehao

varchar

200

学号

xueshengxingming

varchar

200

学生姓名

banji

varchar

200

班级

kaoshichengji

int

考试成绩

4-7token表

字段名称

类型

长度

字段说明

主键

默认值

id

bigint

主键

  主键

userid

bigint

用户id

username

varchar

100

用户名

tablename

varchar

100

表名

role

varchar

100

角色

token

varchar

200

密码

addtime

timestamp

新增时间

CURRENT_TIMESTAMP

expiratedtime

timestamp

过期时间

CURRENT_TIMESTAMP

4-8公告资讯

字段名称

类型

长度

字段说明

主键

默认值

id

bigint

主键

  主键

addtime

timestamp

创建时间

CURRENT_TIMESTAMP

title

varchar

200

标题

introduction

longtext

4294967295

简介

picture

longtext

4294967295

图片

content

longtext

4294967295

内容

4-9考试记录

字段名称

类型

长度

字段说明

主键

默认值

id

bigint

主键

  主键

addtime

timestamp

创建时间

CURRENT_TIMESTAMP

username

varchar

200

用户名

paperid

bigint

试卷id(外键)

papername

varchar

200

试卷名称

questionid

bigint

试题id(外键)

questionname

varchar

200

试题名称

options

longtext

4294967295

选项,json字符串

score

bigint

分值

answer

varchar

200

正确答案

analysis

longtext

4294967295

答案解析

myscore

bigint

试题得分

myanswer

varchar

200

考生答案

userid

bigint

用户id

4-10试题管理

字段名称

类型

长度

字段说明

主键

默认值

id

bigint

主键

  主键

addtime

timestamp

创建时间

CURRENT_TIMESTAMP

paperid

bigint

试卷id(外键)

papername

varchar

200

试卷名称

questionname

varchar

200

试题名称

options

longtext

4294967295

选项,json字符串

score

bigint

分值

answer

varchar

200

正确答案

analysis

longtext

4294967295

答案解析

type

bigint

试题类型

sequence

bigint

试题排序,值越大排越前面

4-11试卷管理

字段名称

类型

长度

字段说明

主键

默认值

id

bigint

主键

  主键

addtime

timestamp

创建时间

CURRENT_TIMESTAMP

name

varchar

200

试卷名称

time

int

考试时长(分钟)

status

varchar

200

试卷状态

4-12学生

字段名称

类型

长度

字段说明

主键

默认值

id

bigint

主键

  主键

addtime

timestamp

创建时间

CURRENT_TIMESTAMP

xuehao

varchar

200

学号

mima

varchar

200

密码

xueshengxingming

varchar

200

学生姓名

touxiang

longtext

4294967295

头像

xingbie

varchar

200

性别

banji

varchar

200

班级

lianxifangshi

varchar

200

联系方式

shenfenzhenghaoma

varchar

200

身份证号码

4-13管理员

字段名称

类型

长度

字段说明

主键

默认值

id

bigint

主键

  主键

addtime

timestamp

创建时间

CURRENT_TIMESTAMP

username

varchar

200

用户名

password

varchar

200

密码

role

varchar

200

角色

4.3 本章小结

通过本章针对在线考试系统功能的总体结构、E-R属性图和数据表的大概介绍,对在开发系统时所要涉及到的数据库进行简单设计,为下一章系统的实现做好铺垫。

第5章 系统实现

系统实现章节的主要内容主要是将系统分析和系统设计方案进行实现,按照各个系统角色进行功能介绍,系统实现就是一个真正开始编写的阶段,将前面的分析结果以及设计方案进行实现,最终做出一个符合用户需求的软件系统。

5.1前台学生功能实现

游客打开系统的网址后,首先看到的就是首页界面在这里,游客能够看到在线考试系统导航条显示首页、考试信息、考场信息、公告资讯、个人中心等。系统首页界面如5-1所示

图5-1系统首页界面

在注册流程中,学生在Vue前端填写必要信息(如学生名、密码等)并提交。前端将这些信息通过HTTP请求发送到Java后端。后端处理这些信息,检查学生名是否唯一,并将新学生数据存入MySQL数据库。完成后,后端向前端发送注册成功的确认,前端随后通知学生完成注册。这个过程实现了新学生的数据收集、验证和存储。5-2 所示

图5-2 学生注册界面

在登录流程中,学生首先在Vue前端界面输入学生名和密码。这些信息通过HTTP请求发送到Java后端。后端接收请求,通过与MySQL数据库交互验证学生凭证。如果认证成功,后端会返回给前端,允许学生访问系统。这个过程涵盖了从学生输入到系统验证和响应的全过程如图5-3所示:

图5-3 学生登录界面

点击考试信息,学生在考试信息页面搜索栏输入考试名称,进行搜索,查看考试名称、考试科目、考试时间、考试年级等信息如图5-4所示。

5-4考试信息界面图

点击考场信息,学生在考场信息页面搜索栏输入考场号、场次,进行搜索,查看考场号、考场人数、场次、监考老师等信息如图5-5所示。

5-5考场信息界面图

学生点击个人中心,在个人中心页面可以更新个人详细信息,可以对修改密码、考试管理进行详细操作;如5-6所示

5-6个人中心界面

5.2后台管理员功能模块实现

管理员登录,在登录页面选择需要登录的角色,在正确输入用户名和密码后,点击登录操作;如图5-7所示。                               

图5-7管理员登录界面

管理员进入主页面,主要功能包括首页、用户管理、考试信息管理、考场信息管理、试卷管理、试题管理、考试管理、系统管理等进行操作。管理员主页面如5-8所示

5-8管理员功能主界面

教师信息功能在视图层(view层)进行交互,比如点击“新增”按钮或填写教师信息表单。这些教师信息动作被视图层捕获并作为请求发送给相应的控制器层(control1er层)。控制器接收到这些请求后,调用服务层(service层)以执行相关的业务逻辑,例如验证输入数据的有效性和与数据库的交互。服务层处理完这些逻辑后,进一步与数据访问对象层(DAO层)交互,后者负责具体的数据操作如搜索、新增、更新或删除教师信息,并将操作结果返回给控制器。最终,控制器根据这些结果更新视图层,以便教师信息功能可以看到最新的信息或相应的操作反馈。在教师信息页面的输入栏中输入教师工号进行搜索,可以查看到教师详细信息,并根据需要进行改动或者删除等操作如图5-9所示。

5-9教师界面图

学生信息功能在视图层(view层)进行交互,比如点击“新增”按钮或填写学生信息表单。这些学生信息动作被视图层捕获并作为请求发送给相应的控制器层(control1er层)。控制器接收到这些请求后,调用服务层(service层)以执行相关的业务逻辑,例如验证输入数据的有效性和与数据库的交互。服务层处理完这些逻辑后,进一步与数据访问对象层(DAO层)交互,后者负责具体的数据操作如搜索、新增、更新或删除学生信息,并将操作结果返回给控制器。最终,控制器根据这些结果更新视图层,以便学生信息功能可以看到最新的信息或相应的操作反馈。在学生信息页面的输入栏中输入学号进行搜索,可以查看到学生详细信息,并根据需要进行改动或者删除等操作如图5-10所示。

5-10学生界面图

管理员点击考试信息管理;在考试信息管理页面通过对考试名称、考试科目、考试时间、考试年级等信息,进行搜索新增、修改、删除考试信息等操作;如图5-11所示。

图5-11考试信息管理界面图

管理员点击考场信息管理;在考场信息管理页面通过考场号、考场人数、场次、监考老师等信息,进行搜索、新增或删除考场信息等操作;如图5-12所示。

图5-12考场信息管理界面图

主要代码


<template><div><div class="app-contain"><div class="list_search_view"><el-form :model="searchQuery" class="search_form" ><div class="search_view"><div class="search_label">考场号:</div><div class="search_box"><el-input class="search_inp" v-model="searchQuery.kaochanghao" placeholder="考场号"clearable></el-input></div></div><div class="search_view"><div class="search_label">场次:</div><div class="search_box"><el-input class="search_inp" v-model="searchQuery.changci" placeholder="场次"clearable></el-input></div></div><div class="search_btn_view"><el-button class="search_btn" type="primary" @click="searchClick()" size="small">搜索</el-button></div></el-form><br><div class="btn_view"><el-button type="success" @click="addClick" v-if="btnAuth('kaochangxinxi','新增')">新增</el-button><el-button  v-if=" btnAuth('kaochangxinxi','查看')" type="info"  :disabled="selRows.length==1?false:true" @click="infoClick(null)">详情</el-button><el-button type="primary" :disabled="selRows.length==1?false:true" @click="editClick" v-if=" btnAuth('kaochangxinxi','修改')">修改</el-button><el-button type="danger" :disabled="selRows.length?false:true" @click="delClick(null)"  v-if="btnAuth('kaochangxinxi','删除')">删除</el-button></div></div><br><el-tablev-loading="listLoading"border :stripe='true'@selection-change="handleSelectionChange" ref="table"v-if="btnAuth('kaochangxinxi','查看')":data="list"@row-click="listChange"><el-table-column :resizable='true' align="left" header-align="left" type="selection" width="55" /><el-table-column label="序号" width="70" :resizable='true' :sortable='true' align="left" header-align="left"><template #default="scope">{{ scope.$index + 1}}</template></el-table-column><el-table-column:resizable='true' :sortable='true' align="left" header-align="left"label="考场号"><template #default="scope">{{scope.row.kaochanghao}}</template></el-table-column><el-table-column:resizable='true' :sortable='true' align="left" header-align="left"label="考场人数"><template #default="scope">{{scope.row.kaochangrenshu}}</template></el-table-column><el-table-column:resizable='true' :sortable='true' align="left" header-align="left"label="场次"><template #default="scope">{{scope.row.changci}}</template></el-table-column><el-table-column:resizable='true' :sortable='true' align="left" header-align="left"label="监考老师"><template #default="scope">{{scope.row.jiankaolaoshi}}</template></el-table-column><el-table-column label="操作" width="300" :resizable='true' :sortable='true' align="left" header-align="left"><template #default="scope"><el-button type="info" v-if=" btnAuth('kaochangxinxi','查看')" @click="infoClick(scope.row.id)">详情</el-button></template></el-table-column></el-table><el-pagination background:layout="layouts.join(',')":total="total" :page-size="listQuery.limit"prev-text="上一页"next-text="下一页":hide-on-single-page="false":style='{"padding":"0","margin":"20px 0 0","whiteSpace":"nowrap","color":"#333","textAlign":"center","width":"100%","fontWeight":"500"}'@size-change="sizeChange"@current-change="currentChange" @prev-click="prevClick"@next-click="nextClick"  /></div><formModel ref="formRef" @formModelChange="formModelChange"></formModel></div>
</template>
<script setup>import axios from 'axios'import {reactive,ref,getCurrentInstance,nextTick,onMounted,watch,} from 'vue'import {useRoute,useRouter} from 'vue-router'import {ElMessageBox} from 'element-plus'const context = getCurrentInstance()?.appContext.config.globalProperties;import formModel from './formModel.vue'//基础信息const tableName = 'kaochangxinxi'const formName = '考场信息'const route = useRoute()//基础信息onMounted(()=>{})//列表数据const list = ref(null)const table = ref(null)const listQuery = ref({page: 1,limit: 20,sort: 'id',order: 'desc'})const searchQuery = ref({})const selRows = ref([])const listLoading = ref(false)const listChange = (row) =>{nextTick(()=>{table.value.clearSelection()table.value.toggleRowSelection(row)})}//列表const getList = () => {listLoading.value = truelet params = JSON.parse(JSON.stringify(listQuery.value))params['sort'] = 'id'params['order'] = 'desc'if(searchQuery.value.kaochanghao&&searchQuery.value.kaochanghao!=''){params['kaochanghao'] = '%' + searchQuery.value.kaochanghao + '%'}if(searchQuery.value.changci&&searchQuery.value.changci!=''){params['changci'] = '%' + searchQuery.value.changci + '%'}context?.$http({url: `${tableName}/page`,method: 'get',params: params}).then(res => {listLoading.value = falselist.value = res.data.data.listtotal.value = Number(res.data.data.total)})}//删const delClick = (id) => {let ids = ref([])if (id) {ids.value = [id]} else {if (selRows.value.length) {for (let x in selRows.value) {ids.value.push(selRows.value[x].id)}} else {return false}}ElMessageBox.confirm(`是否删除选中${formName}`, '提示', {confirmButtonText: '是',cancelButtonText: '否',type: 'warning',}).then(() => {context?.$http({url: `${tableName}/delete`,method: 'post',data: ids.value}).then(res => {context?.$toolUtil.message('删除成功', 'success',()=>{getList()})})})}//多选const handleSelectionChange = (e) => {selRows.value = e}//列表数据//分页const total = ref(0)const layouts = ref(["prev","pager","next"])const sizeChange = (size) => {listQuery.value.limit = sizegetList()}const currentChange = (page) => {listQuery.value.page = pagegetList()}const prevClick = () => {listQuery.value.page = listQuery.value.page - 1getList()}const nextClick = () => {listQuery.value.page = listQuery.value.page + 1getList()}//分页//权限验证const btnAuth = (e,a)=>{return context?.$toolUtil.isAuth(e,a)}//搜索const searchClick = () => {listQuery.value.page = 1getList()}//表单const formRef = ref(null)const formModelChange=()=>{searchClick()}const addClick = ()=>{formRef.value.init()}const editClick = ()=>{if(selRows.value.length){formRef.value.init(selRows.value[0].id,'edit')}}const infoClick = (id=null)=>{if(id){formRef.value.init(id,'info')}else if(selRows.value.length){formRef.value.init(selRows.value[0].id,'info')}}// 表单// 预览文件const preClick = (file) =>{if(!file){context?.$toolUtil.message('文件不存在','error')}window.open(context?.$config.url + file)// const a = document.createElement('a');// a.style.display = 'none';// a.setAttribute('target', '_blank');// file && a.setAttribute('download', file);// a.href = context?.$config.url + file;// document.body.appendChild(a);// a.click();// document.body.removeChild(a);}// 下载文件const download = (file) => {if(!file){context?.$toolUtil.message('文件不存在','error')}let arr = file.replace(new RegExp('file/', "g"), "")axios.get((location.href.split(context?.$config.name).length>1 ? location.href.split(context?.$config.name)[0] :'') + context?.$config.name + '/file/download?fileName=' + arr, {headers: {token: context?.$toolUtil.storageGet('Token')},responseType: "blob"}).then(({data}) => {const binaryData = [];binaryData.push(data);const objectUrl = window.URL.createObjectURL(new Blob(binaryData, {type: 'application/pdf;chartset=UTF-8'}))const a = document.createElement('a')a.href = objectUrla.download = arr// a.click()// 下面这个写法兼容火狐a.dispatchEvent(new MouseEvent('click', {bubbles: true,cancelable: true,view: window}))window.URL.revokeObjectURL(data)})}//初始化const init = () => {getList()}init()
</script>
<style lang="scss" scoped>// 操作盒子.list_search_view {margin: 0 0 20px;display: flex;justify-content: space-between;flex-wrap: wrap;// 搜索盒子.search_form {display: flex;align-items: center;// 子盒子.search_view {margin: 0 10px 0 0;display: flex;align-items: center;// 搜索label.search_label {margin: 0 10px 0 0;color: #666;background: none;font-weight: 500;display: inline-block;width: auto;font-size: 14px;line-height: 40px;text-align: right;min-width: 100px;height: 40px;}// 搜索item.search_box {display: inline-block;width: auto;// 输入框:deep(.search_inp) {border: 1px solid #139666;border-radius: 0px;padding: 0 10px;background: #fff;width: auto;line-height: 34px;box-sizing: border-box;//去掉默认样式.el-input__wrapper{border: none;box-shadow: none;background: none;border-radius: 0;height: 100%;padding: 0;}.is-focus {box-shadow: none !important;}}}}// 搜索按钮盒子.search_btn_view {width: 20%;display: flex;padding: 0 20px;// 搜索按钮.search_btn {border: 1px solid #19a97b;cursor: pointer;border-radius: 0px;padding: 0 24px;color: #fff;background: #19a97b;width: auto;font-size: 14px;height: 36px;}// 搜索按钮-悬浮.search_btn:hover {border: 1px solid #19a97b;background: #19a97b;}}}//头部按钮盒子.btn_view {margin: 0;display: flex;// 其他:deep(.el-button--default){border: 1px solid #139666;cursor: pointer;border-radius: 0px;padding: 0 24px;margin: 0 10px 0 0;outline: none;color: #fff;background: #19a97b;width: auto;font-size: 14px;height: 36px;}// 其他-悬浮:deep(.el-button--default:hover){background: #11a274;}// 新增:deep(.el-button--success){border: 1px solid #139666;cursor: pointer;border-radius: 0px;padding: 0 24px;margin: 0 10px 0 0;outline: none;color: #fff;background: #19a97b;width: auto;font-size: 14px;height: 36px;}// 新增-悬浮:deep(.el-button--success:hover){background: #11a274;}// 修改:deep(.el-button--primary){border: 1px solid #139666;cursor: pointer;border-radius: 0px;padding: 0 24px;margin: 0 10px 0 0;outline: none;color: #fff;background: #19a97b;width: auto;font-size: 14px;height: 36px;}// 修改-悬浮:deep(.el-button--primary:hover){background: #11a274;}// 详情:deep(.el-button--info){border: 1px solid #139666;cursor: pointer;border-radius: 0px;padding: 0 24px;margin: 0 10px 0 0;outline: none;color: #fff;background: #19a97b;width: auto;font-size: 14px;height: 36px;}// 详情-悬浮:deep(.el-button--info:hover){background: #11a274;}// 删除:deep(.el-button--danger){border: 1px solid #139666;cursor: pointer;border-radius: 0px;padding: 0 24px;margin: 0 10px 0 0;outline: none;color: #fff;background: #19a97b;width: auto;font-size: 14px;height: 36px;}// 删除-悬浮:deep(.el-button--danger:hover){background: #11a274;}// 统计:deep(.el-button--warning){border: 1px solid #139666;cursor: pointer;border-radius: 0px;padding: 0 24px;margin: 0 10px 0 0;outline: none;color: #fff;background: #19a97b;width: auto;font-size: 14px;height: 36px;}// 统计-悬浮:deep(.el-button--warning:hover){background: #11a274;}}}// 表格样式.el-table {border-radius: 0px;padding: 0;background: #fff;width: 100%;border-color: #d2d2d2;border-width: 1px 0 0 1px;border-style: solid;:deep(.el-table__header-wrapper) {thead {color: #999;font-weight: 500;width: 100%;tr {background: #f8f8f8;th {padding: 4px 0;background: none;border-color: #d2d2d2;border-width: 0 1px 1px 0;border-style: solid;text-align: left;.cell {padding: 0 0 0 10px;word-wrap: normal;white-space: normal;font-weight: bold;display: flex;vertical-align: middle;font-size: 14px;line-height: 24px;text-overflow: ellipsis;word-break: break-all;width: 100%;align-items: center;position: relative;}}}}}:deep(.el-table__body-wrapper) {tbody {width: 100%;tr {background: #fff;td {padding: 6px 0;color: #555;background: #fff;border-color: #d2d2d2;border-width: 0 1px 1px 0;border-style: solid;text-align: left;.cell {padding: 0 10px;overflow: hidden;word-break: break-all;white-space: normal;line-height: 24px;text-overflow: ellipsis;// 编辑.el-button--primary {border: 0;cursor: pointer;border-radius: 4px;padding: 0 10px 0 20px;margin: 0 6px 6px 0;color: #1aa97b;background: url(http://clfile.zggen.cn/20231117/bd0ca9e6647a451391dd73561b741f07.png) no-repeat left center;width: auto;font-size: 14px;height: 20px;}// 编辑-悬浮.el-button--primary:hover {}// 详情.el-button--info {border: 0;cursor: pointer;border-radius: 4px;padding: 0 10px 0 20px;margin: 0 6px 6px 0;color: #1aa97b;background: url(http://clfile.zggen.cn/20231117/28f773099efd42f49628480b3b8136dd.png) no-repeat left center;width: auto;font-size: 14px;line-height: 22px;height: 20px;}// 详情-悬浮.el-button--info:hover {}// 删除.el-button--danger {border: 0;cursor: pointer;border-radius: 0px;padding: 0 10px 0 20px;margin: 0 6px 6px 0;color: #1aa97b;background: url(http://clfile.zggen.cn/20231117/018a8ed10a554e859786507cd78b1558.png) no-repeat left center;width: auto;font-size: 14px;height: 20px;}// 删除-悬浮.el-button--danger:hover {}// 跨表.el-button--success {border: 0;cursor: pointer;border-radius: 4px;padding: 0 10px 0 20px;margin: 0 6px 6px 0;color: #1aa97b;background: url(http://clfile.zggen.cn/20231117/e9d3ef05d1a34d9982eab7a176b193b5.png) no-repeat left center;width: auto;font-size: 14px;height: 24px;}// 跨表-悬浮.el-button--success:hover {}// 操作.el-button--warning {border: 0;cursor: pointer;border-radius: 4px;padding: 0 10px 0 20px;margin: 0 6px 6px 0;color: #1aa97b;background: url(http://clfile.zggen.cn/20231117/df2bdb7409984be2bc70f7f4a4aaa5e2.png) no-repeat left center;width: auto;font-size: 14px;height: 20px;}// 操作-悬浮.el-button--warning:hover {}}}}tr.el-table__row--striped {td {background: #f8f8f8;}}tr:hover {td {padding: 6px 0;color: #555;background: #f8f8f8;border-color: #d2d2d2;border-width: 0 1px 1px 0;border-style: solid;text-align: left;}}}}}// 分页器.el-pagination {// 总页码:deep(.el-pagination__total) {margin: 0 10px 0 0;color: #666;font-weight: 400;display: inline-block;vertical-align: top;font-size: 13px;line-height: 28px;height: 28px;}// 上一页:deep(.btn-prev) {border: none;border-radius: 0px;padding: 0 5px;margin: 0 5px;color: #fff;background: #19a97b90;display: inline-block;vertical-align: top;font-size: 13px;line-height: 26px;min-width: 35px;height: 26px;}// 下一页:deep(.btn-next) {border: none;border-radius: 0px;padding: 0 5px;margin: 0 5px;color: #fff;background: #19a97b90;display: inline-block;vertical-align: top;font-size: 13px;line-height: 26px;min-width: 35px;height: 26px;}// 上一页禁用:deep(.btn-prev:disabled) {border: none;cursor: not-allowed;border-radius: 0px;padding: 0 5px;margin: 0 5px;color: #fff;background: #19a97b90;display: inline-block;vertical-align: top;font-size: 13px;line-height: 26px;height: 26px;}// 下一页禁用:deep(.btn-next:disabled) {border: none;cursor: not-allowed;border-radius: 0px;padding: 0 5px;margin: 0 5px;color: #fff;background: #19a97b90;display: inline-block;vertical-align: top;font-size: 13px;line-height: 26px;height: 26px;}// 页码:deep(.el-pager) {padding: 0;margin: 0;display: inline-block;vertical-align: top;// 数字.number {cursor: pointer;padding: 0 4px;margin: 0 5px;color: #fff;display: inline-block;vertical-align: top;font-size: 13px;line-height: 26px;border-radius: 0px;background: #19a97b90;text-align: center;min-width: 30px;height: 26px;}// 数字悬浮.number:hover {cursor: pointer;padding: 0 4px;margin: 0 5px;color: #fff;display: inline-block;vertical-align: top;font-size: 13px;line-height: 26px;border-radius: 0px;background: #11a274;text-align: center;min-width: 30px;height: 26px;}// 选中.number.is-active {cursor: default;padding: 0 4px;margin: 0 5px;color: #fff;display: inline-block;vertical-align: top;font-size: 13px;line-height: 26px;border-radius: 0px;background: #11a274;text-align: center;min-width: 30px;height: 26px;}}// sizes:deep(.el-pagination__sizes) {display: inline-block;vertical-align: top;font-size: 13px;line-height: 28px;height: 28px;.el-select {border: 1px solid #DCDFE6;cursor: pointer;padding: 0;color: #606266;display: inline-block;font-size: 13px;line-height: 28px;border-radius: 3px;outline: 0;background: #FFF;width: 100%;text-align: center;height: 28px;}}// 跳页:deep(.el-pagination__jump) {margin: 0 0 0 24px;color: #606266;display: inline-block;vertical-align: top;font-size: 13px;line-height: 28px;height: 28px;// 输入框.el-input {border: 1px solid #DCDFE6;cursor: pointer;padding: 0 3px;color: #606266;display: inline-block;font-size: 14px;line-height: 28px;border-radius: 3px;outline: 0;background: #FFF;width: 100%;text-align: center;height: 28px;//去掉默认样式.el-input__wrapper{border: none;box-shadow: none;background: none;border-radius: 0;height: 100%;padding: 0;}.is-focus {box-shadow: none !important;}}}}
</style>

所用技术
后端技术栈:

Springboot
mybatisPlus
Mysql
Maven
前端技术栈:

Vue3
Vue-router
axios
elementPlus
微信小程序
三、环境介绍
基础环境 :IDEA, JDK1.8, Mysql5.7及以上, Maven3.6, node14, navicat,微信开发者工具

所有项目以及源代码本人均调试运行无问题 可支持远程调试运行
五、浏览地址
用户账号密码:用户账号1/123456

后台地址:http://localhost:8081

管理员账户密码:admin/admin

六、部署教程
使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并执行项目的sql文件

使用IDEA/Eclipse导入server_code项目,若为maven项目请选择maven,等待依赖下载完成
  
修改application.yml里面的数据库配置,src/main/java/com/SpringbootSchemaApplication.java启动后端项目

vscode或idea打开manage_code后台项目
 
在编译器中打开terminal,执行npm install 依赖下载完成后执行 npm run serve,执行成功后会显示访问地址

微信小程序打开wechat_code项目,编译好之后就运行成功了

大家点赞、收藏、关注、评论啦  其他的定制服务  下方联系卡片↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 或者私信作

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

电脑断网或者经常断网怎么办?

1、首先&#xff0c;按一下键盘的win R &#xff0c; 在打开的运行框内输入&#xff1a;cmd 然后按一下回车 或者 点击一下【确定】 2、在命令窗口输入&#xff1a;ipconfig/release , 然后按一下回车 作用&#xff1a;IP释放&#xff0c;相当于把网线拔了重新插上 3、接着…

佳能基于SPAD的监控摄像机MS-500入选《时代》2023最佳发明

一、产品概述 佳能MS-500是一款采用SPAD(Single Photon Avalanche Diode,单光子雪崩二极管)传感器的监控摄像机。SPAD传感器以其极高的灵敏度和在低光环境下的卓越表现而闻名,使得MS-500能够在夜晚或极暗光条件下拍摄到清晰、彩色的画面。此外,MS-500还配置了高性能的镜头…

Python异常处理中的9个常见错误及其解决办法,建议收藏

在Python编程中&#xff0c;异常处理是确保程序健壮性和可靠性的重要部分。然而&#xff0c;在使用异常处理时&#xff0c;开发者可能会犯一些常见的错误。以下是9个常见的异常处理错误及其解决办法&#xff1a; 1. 语法错误 (SyntaxError) 语法错误是最常见的错误之一。它通…

【梯级水电站调度优化】基于线性递减策略优化粒子群算法

课题名称&#xff1a; 基于改进粒子群算法的梯级水电站调度优化 改进方向&#xff1a; 线性递减策略优化粒子群PSO 代码获取方式&#xff08;付费&#xff09;&#xff1a; 相关资料&#xff1a; 1. 粒子群算法的基本原理 2. 梯级水电站调度优化模型 3. 代码注释 4. 代码…

第十一章 缓存之更新/穿透/雪崩/击穿

目录 一、什么是缓存 二、缓存更新策略 2.1. 缓存主动更新策略 2.1.1. Cache Aside模式&#xff08;主流&#xff09;‌ 2.1.2. Read/Write Through模式‌ 2.1‌.3. Write Behind模式‌ 2.1.4. 总结 三、缓存穿透 四、缓存雪崩 五、缓存击穿 本文中的图片内容部分来源…

【笔记】神领物流Day1.1.20权限管家

传智权限管家是一个通用的权限管理中台服务&#xff0c;在神领物流项目中&#xff0c;我们使用权限系统管理企业内部员工&#xff0c;比如&#xff1a;快递员、司机、管理员等。 在权限管家中可以管理用户&#xff0c;管理后台系统的菜单&#xff0c;以及角色的管理。 权限管家…

视频加字幕用什么软件最快?12款工具快速添加字幕!

对于大多数同学来讲&#xff0c;剪辑中比较头疼的就是如何给视频加字幕和唱词啦&#xff0c;特别是用Pr或者FCXP等专业剪辑软件&#xff0c;加字幕也是特别费时的&#xff0c;哪怕是有批量添加的功能orz... 虽然关于这方面的内容已经很多啦&#xff0c;但是真正全面的内容还特…

哈希闭散列的实现与机制

目录 哈希的介绍 哈希冲突 原因 影响 解决方法 实例 哈希函数 哈希函数设计原则&#xff1a; 常见哈希函数 闭散列 线性探测的实现 代码解读 1. 命名空间和枚举定义 2. 哈希表节点结构体 3. 哈希函数模板 4. 哈希表类 5. 插入、查找和删除逻辑 二次探测 哈希的…

【React】事件机制

事件机制 react 基于浏览器的事件机制自身实现了一套事件机制&#xff0c;称为合成事件。比如&#xff1a;onclick -> onClick 获取原生事件&#xff1a;e.nativeEvent onClick 并不会将事件代理函数绑定到真实的 DOM节点上&#xff0c;而是将所有的事件绑定到结构的最外层…

latex本地运行(MiKTeX+VScode)-20241006

1、安装 LaTex 主流的分发版本应该就是 TeXLive 和 MikTeX 了,这里使用 MikTex(只有几百M)—— TeXLive 太大了、默认安装全部包,可选自选部分安装单实在有些许麻烦,MikTeX 则方便得多,需要的时候可以自动安装全部包 点击跳转到 MiKTeX 官网,直接下载即可:不用担心什…

体系结构论文(五十五):Full Stack Optimization of Transformer Inference

Full Stack Optimization of Transformer Inference 一、文章介绍 背景 Transformer模型被广泛应用于各种任务&#xff0c;如计算机视觉、自然语言处理、语音识别等&#xff0c;原因是它们的准确度很高。然而&#xff0c;这些模型的复杂性和规模不断增加&#xff0c;导致它们…

连续时间傅里叶变换

一、非周期信号的表示&#xff1a;连续时间傅里叶变换 傅里叶变换对&#xff1a; 通常称为的频谱 二、傅里叶变换的收敛 1、绝对可积 2、在任何有限区间内&#xff0c;只有有限个最大值和最小值 3、在任何有限区间内&#xff0c;有有限个不连续点&#xff0c;且在每个不连…

信息安全工程师(36)访问控制主要产品与技术指标

前言 访问控制是确保系统资源安全的重要手段&#xff0c;其主要产品和技术指标对于理解和实施有效的访问控制策略至关重要。 一、访问控制主要产品 访问控制产品种类繁多&#xff0c;根据应用场景和需求的不同&#xff0c;可以分为以下几类&#xff1a; 防火墙&#xff1a; 功能…

Linux环境搭建(云服务器)

前言 Linux是一款由林纳斯托瓦兹开源的操作系统&#xff0c;时至今日拥有着丰富的讨论资源和系统完整性&#xff0c;基本普及于市场中的公司内部&#xff0c;所以有着很大的学习价值。学习Linux主要分为两大部分&#xff0c;一是学习Linux的系统操作&#xff0c;包括且不限于掌…

codetop标签树刷题(二)!!暴打面试官!!!!

个人复习用 1.二叉搜索树中第k小的元素2.删除给定值的叶子节点3.把二叉搜索树转换为累加树4.合并二叉树5.翻转二叉树6.二叉树中所有距离为k的节点7.路径总和II8.寻找重复的子树9.二叉树的序列化和反序列化 1.二叉搜索树中第k小的元素 给定二叉搜索树的根节点root&#xff0c;和…

【一起学NLP】Chapter3-使用神经网络解决问题

目录 使用神经网络解决问题Tip:数据集划分学习使用的代码Tip:epochTip:数据打乱Trainer类Tip-高速化计算 使用神经网络解决问题 import sys sys.path.append(..) # 为了引入父目录的文件而进行的设定 from dataset import spiral import matplotlib.pyplot as pltx,t spiral.…

【Spring】“请求“ 之传递单个参数、传递多个参数和传递对象

文章目录 请求1. 传递单个参数注意事项1 . **正常传递参数**2 . **不传递 age 参数**3 . **传递参数类型不匹配** 2. 传递多个参数3. 传递对象 请求 访问不同的路径&#xff0c;就是发送不同的请求。在发送请求时&#xff0c;可能会带一些参数&#xff0c;所以学习 Spring 的请…

传奇GOM引擎架设好进游戏后提示请关闭非法外挂,重新登录,如何处理?

今天在架设一个GOM引擎的版本时&#xff0c;进游戏之后刚开始是弹出一个对话框&#xff0c;提示请关闭非法外挂&#xff0c;重新登录&#xff0c;我用的是绿盟登陆器&#xff0c;同时用的也是绿盟插件&#xff0c;刚开始我以为是绿盟登录器的问题&#xff0c;于是就换成原版gom…

如何构建LSTM神经网络模型

一、了解LSTM 1. 核心思想 首先&#xff0c;LSTM 是 RNN&#xff08;循环神经网络&#xff09;的变体。它通过引入细胞状态 C(t) 贯穿于整个网络模型&#xff0c;达到长久记忆的效果&#xff0c;进而解决了 RNN 的长期依赖问题。 2. 思维导图 每个LSTM层次都有三个重要的门结构…

VMware ESXi更改https的TLS协议版本

简要概述 TLS 1.0 和 1.1 是已弃用的协议&#xff0c;具有广为人知的缺点和漏洞。应在所有接口上启用 TLS 1.2&#xff0c;并在支持的情况下禁用 SSLv3、TL 1.1 和 1.0。强制要求 TLS 1.2 可能会破坏 vSphere 的第三方集成和加载项。在实施 TLS 1.2 后仔细测试这些集成&#x…