基于SpringBoot+VUE(PC端+小程序端)的智能在线考试系统毕业设计
作者主頁(yè):編程千紙鶴
作者簡(jiǎn)介:Java、前端、Python開(kāi)發(fā)多年,做過(guò)高程,項(xiàng)目經(jīng)理,架構(gòu)師
主要內(nèi)容:Java項(xiàng)目開(kāi)發(fā)、畢業(yè)設(shè)計(jì)開(kāi)發(fā)、面試技術(shù)整理、最新技術(shù)分享
收藏點(diǎn)贊不迷路? 關(guān)注作者有好處
文末獲得源碼
項(xiàng)目編號(hào):
一,項(xiàng)目簡(jiǎn)介
隨著計(jì)算機(jī)技術(shù)的不斷發(fā)展,我們的日常生活和工作都與計(jì)算機(jī)技術(shù)的關(guān)系越來(lái)越密切。計(jì)算機(jī)技術(shù)的發(fā)展改變了我們?nèi)粘5纳詈凸ぷ髁?xí)慣,也改變了社會(huì)的發(fā)展速度,使得我們的生活更加便利和高效。伴隨著計(jì)算機(jī)技術(shù)發(fā)展起來(lái)的互聯(lián)網(wǎng)技術(shù)將我們的生活帶領(lǐng)進(jìn)信息化時(shí)代,改變了我們的學(xué)習(xí)和工作環(huán)境,例如我們經(jīng)常面對(duì)的考試也隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展產(chǎn)生了改變,伴隨著信息技術(shù)的發(fā)展,在線無(wú)紙化的考試系統(tǒng)應(yīng)運(yùn)而生,不僅徹底改變了傳統(tǒng)紙質(zhì)考試的習(xí)慣和環(huán)境,更是提高了考試效率,保證了考試效果,達(dá)到了考試目的[1]。傳統(tǒng)的紙質(zhì)考試具有很多局限性和不足,主要包括以下幾點(diǎn):
1.傳統(tǒng)紙質(zhì)考試需要較多的人力資源和時(shí)間資源進(jìn)行題目的設(shè)定,同時(shí)題目的難易程度和考核價(jià)值水平很難達(dá)到基本的要求;
2.傳統(tǒng)紙質(zhì)考試的閱卷采用人工的方式,人工閱卷難免會(huì)出現(xiàn)閱卷差錯(cuò)或者分?jǐn)?shù)合算差錯(cuò),這也會(huì)對(duì)考試的效果造成影響;
3.傳統(tǒng)紙質(zhì)考試的人工閱卷模式也會(huì)浪費(fèi)大量的人力資源和時(shí)間資源,不能保證工作效率和工作質(zhì)量;
4.傳統(tǒng)紙質(zhì)考試對(duì)考試的總結(jié)能力較差,不能夠全面具體的分析考試結(jié)果,教師也很難得到基本的考試結(jié)果分析的數(shù)據(jù)信息,而這些數(shù)據(jù)信息是提高教學(xué)質(zhì)量和教學(xué)效果的關(guān)鍵因素;
5.傳統(tǒng)紙質(zhì)考試對(duì)考試時(shí)間以及考試紀(jì)律的要求不能達(dá)到統(tǒng)一,這也會(huì)影響到考試的公平性。根據(jù)以上分析的傳統(tǒng)紙質(zhì)考試的不足之處,新型的結(jié)合計(jì)算機(jī)技術(shù)以及互聯(lián)網(wǎng)技術(shù)的在線考試系統(tǒng)應(yīng)運(yùn)而生,不僅通過(guò)一種新的技術(shù)解決了傳統(tǒng)紙質(zhì)考試的基本問(wèn)題,還提供了一種新的考試思路和考試?yán)砟?#xff0c;糾正了傳統(tǒng)紙質(zhì)考試的弊端,提供更加合理有效的考試過(guò)程。
二,環(huán)境介紹
三,技術(shù)說(shuō)明
| spring-boot 2.1.6.RELEASE | vue 采用新版,使用了vue-cli4搭建的系統(tǒng) | iView 主題樣式 |
| spring-boot-security 用戶登錄驗(yàn)證 | element-ui 最流行的vue UI框架 | |
| undertow web容器 | vue-element-admin 模版 | |
| mybatis/mybatis_plus | echarts 圖表統(tǒng)計(jì) | |
| hikari 速度最快的數(shù)據(jù)庫(kù)連接池 | ueditor 題目編輯器 |
四,功能列表
4.1 學(xué)生系統(tǒng)功能
| 登錄 | 用戶名、密碼 |
| 注冊(cè) | 年級(jí)、用戶名、密碼 |
| 任務(wù)中心 | 管理員發(fā)布的年級(jí)任務(wù),每個(gè)學(xué)生只能做一次 |
| 考試 | 題干支持文本、圖片、數(shù)學(xué)公式、表格等,學(xué)生答題支持:文本 |
| 固定試卷 | 可重復(fù)練習(xí)、自行批改的試卷 |
| 時(shí)段試卷 | 在時(shí)間限制內(nèi),可重復(fù)練習(xí)、自行批改的試卷 |
| 考試記錄 | 查看答卷記錄和試卷信息 |
| 錯(cuò)題本 | 答錯(cuò)題目會(huì)自動(dòng)進(jìn)入錯(cuò)題本,顯示題目基本信息 |
| 個(gè)人信息 | 顯示學(xué)生個(gè)人資料 |
| 更新信息 | 修改個(gè)人資料、頭像 |
| 個(gè)人動(dòng)態(tài) | 顯示用戶最近的個(gè)人動(dòng)態(tài) |
| 消息中心 | 用于接收管理員發(fā)送的消息 |
4.2 管理系統(tǒng)功能
| 登錄 | 用戶名、密碼 |
| 主頁(yè) | 試卷總數(shù)、題目總數(shù)、用戶活躍度、題目月數(shù)量 |
| 學(xué)生列表 | 顯示系統(tǒng)所有的學(xué)生,新增、修改、刪除、禁用 |
| 管理員列表 | 顯示系統(tǒng)所有的管理員,新增、修改、刪除、禁用 |
| 學(xué)科列表 | 學(xué)科查詢、修改、刪除 |
| 學(xué)科創(chuàng)編 | 創(chuàng)建學(xué)科 |
| 試卷列表 | 試卷查詢、修改、刪除 |
| 試卷創(chuàng)編 | 創(chuàng)建的試卷為時(shí)段試卷、固定試卷、任務(wù)試卷 |
| 題目列表 | 題目查詢、修改、刪除 |
| 題目創(chuàng)建 | 題目支持單選題、多選題、判斷題、填空題、簡(jiǎn)答題,題干支持文本、圖片、表格、數(shù)學(xué)公式 |
| 任務(wù)列表 | 任務(wù)查詢、修改、刪除 |
| 消息列表 | 顯示已發(fā)送的消息,消息已讀人數(shù)等信息 |
| 消息發(fā)送 | 發(fā)送消息給多個(gè)用戶 |
| 用戶日志 | 顯示所有用戶日志 |
| 個(gè)人資料 | 顯示管理員用戶名、真實(shí)姓名 |
| 時(shí)間線 | 顯示管理員創(chuàng)建時(shí)間 |
| 修改資料 | 修改姓名、手機(jī)號(hào) |
4.3 小程序功能
| 登錄 | 用戶登錄登出功能,登錄會(huì)自動(dòng)綁定微信賬號(hào),登出會(huì)解綁 |
| 注冊(cè) | 年級(jí)、用戶名、密碼 |
| 任務(wù)中心 | 管理員發(fā)布的年級(jí)任務(wù),每個(gè)學(xué)生只能做一次 |
| 考試 | 題干支持文本、圖片、數(shù)學(xué)公式、表格等,學(xué)生答題支持:文本 |
| 固定試卷 | 可重復(fù)練習(xí)、自行批改的試卷 |
| 時(shí)段試卷 | 在時(shí)間限制內(nèi),可重復(fù)練習(xí)、自行批改的試卷 |
| 考試記錄 | 查看答卷記錄和試卷信息 |
| 錯(cuò)題本 | 答錯(cuò)題目會(huì)自動(dòng)進(jìn)入錯(cuò)題本,顯示題目基本信息 |
| 個(gè)人信息 | 顯示學(xué)生個(gè)人資料 |
| 更新信息 | 修改個(gè)人資料、頭像 |
| 個(gè)人動(dòng)態(tài) | 顯示用戶最近的個(gè)人動(dòng)態(tài) |
| 消息中心 | 用于接收管理員發(fā)送的消息 |
五,數(shù)據(jù)庫(kù)設(shè)計(jì)
僅展示部分?jǐn)?shù)據(jù)庫(kù)字段設(shè)計(jì)
5.1?試卷表
| id | int | |
| name | varchar | 試卷名稱 |
| subject_id | int | 學(xué)科 |
| paper_type | int | 試卷類型( 1.固定試卷 4.時(shí)段試卷 6.任務(wù)試卷 ) |
| grade_level | int | 年級(jí) |
| score | int | 試卷總分(千分制) |
| question_count | int | 題目數(shù)量 |
| suggest_time | int | 建議時(shí)長(zhǎng)(分鐘) |
| limit_start_time | datetime | 時(shí)段試卷 開(kāi)始時(shí)間 |
| limit_end_time | datetime | 時(shí)段試卷 結(jié)束時(shí)間 |
| frame_text_content_id | int | 試卷框架 內(nèi)容為JSON |
| create_user | int | |
| create_time | datetime | |
| deleted | bit | |
| task_exam_id | int |
5.2 試卷答案表
| id | int | |
| exam_paper_id | int | |
| paper_name | varchar | 試卷名稱 |
| paper_type | int | 試卷類型( 1.固定試卷 4.時(shí)段試卷 6.任務(wù)試卷 ) |
| subject_id | int | 學(xué)科 |
| system_score | int | 系統(tǒng)判定得分 |
| user_score | int | 最終得分(千分制) |
| paper_score | int | 試卷總分 |
| question_correct | int | 做對(duì)題目數(shù)量 |
| question_count | int | 題目總數(shù)量 |
| do_time | int | 做題時(shí)間(秒) |
| status | int | 試卷狀態(tài)(1待判分 2完成) |
| create_user | int | 學(xué)生 |
| create_time | datetime | 提交時(shí)間 |
| task_exam_id | int |
5.3 題目表
| id | int | |
| question_type | int | 1.單選題 2.多選題 3.判斷題 4.填空題 5.簡(jiǎn)答題 |
| subject_id | int | 學(xué)科 |
| score | int | 題目總分(千分制) |
| grade_level | int | 級(jí)別 |
| difficult | int | 題目難度 |
| correct | text | 正確答案 |
| info_text_content_id | int | 題目 填空、 題干、解析、答案等信息 |
| create_user | int | 創(chuàng)建人 |
| status | int | 1.正常 |
| create_time | datetime | 創(chuàng)建時(shí)間 |
| deleted | bit |
5.4 學(xué)科表
| id | int | |
| name | varchar | 語(yǔ)文 數(shù)學(xué) 英語(yǔ) 等 |
| level | int | 年級(jí) (1-12) 小學(xué) 初中 高中 大學(xué) |
| level_name | varchar | 一年級(jí)、二年級(jí)等 |
| item_order | int | 排序 |
| deleted | bit |
5.5 用戶表
| id | int | |
| user_uuid | varchar | |
| user_name | varchar | 用戶名 |
| password | varchar | |
| real_name | varchar | 真實(shí)姓名 |
| age | int | |
| sex | int | 1.男 2女 |
| birth_day | datetime | |
| user_level | int | 學(xué)生年級(jí)(1-12) |
| phone | varchar | |
| role | int | 1.學(xué)生 3.管理員 |
| status | int | 1.啟用 2禁用 |
| image_path | varchar | 頭像地址 |
| create_time | datetime | |
| modify_time | datetime | |
| last_active_time | datetime | |
| deleted | bit | 是否刪除 |
| wx_open_id | varchar | 微信openId |
5.6 用戶日志表
| id | int | |
| user_id | int | 用戶id |
| user_name | varchar | 用戶名 |
| real_name | varchar | 真實(shí)姓名 |
| content | text | 內(nèi)容 |
| create_time | datetime | 時(shí)間 |
其他表的設(shè)計(jì)省略............
六,系統(tǒng)展示
6.1 后臺(tái)管理
主頁(yè)
用戶管理?
試卷管理
題目管理?
添加題目
添加試卷?
?
任務(wù)管理
教育管理?
成績(jī)管理
?6.2 學(xué)生端
首頁(yè)登錄與注冊(cè)
學(xué)生端首頁(yè)?
試卷中心?
考試記錄?
錯(cuò)題本
?個(gè)人中心
6.3 小程序端
登錄與注冊(cè)
?
首頁(yè)?
試卷考試?
考試記錄?
我的?
七,核心代碼展示
@Service public class TaskExamServiceImpl extends BaseServiceImpl<TaskExam> implements TaskExamService {protected final static ModelMapper modelMapper = ModelMapperSingle.Instance();private final TaskExamMapper taskExamMapper;private final TextContentService textContentService;private final ExamPaperMapper examPaperMapper;@Autowiredpublic TaskExamServiceImpl(TaskExamMapper taskExamMapper, TextContentService textContentService, ExamPaperMapper examPaperMapper) {super(taskExamMapper);this.taskExamMapper = taskExamMapper;this.textContentService = textContentService;this.examPaperMapper = examPaperMapper;}@Overridepublic PageInfo<TaskExam> page(TaskPageRequestVM requestVM) {return PageHelper.startPage(requestVM.getPageIndex(), requestVM.getPageSize(), "id desc").doSelectPageInfo(() ->taskExamMapper.page(requestVM));}@Override@Transactionalpublic void edit(TaskRequestVM model, User user) {ActionEnum actionEnum = (model.getId() == null) ? ActionEnum.ADD : ActionEnum.UPDATE;TaskExam taskExam = null;if (actionEnum == ActionEnum.ADD) {Date now = new Date();taskExam = modelMapper.map(model, TaskExam.class);taskExam.setCreateUser(user.getId());taskExam.setCreateUserName(user.getUserName());taskExam.setCreateTime(now);taskExam.setDeleted(false);//保存任務(wù)結(jié)構(gòu)TextContent textContent = textContentService.jsonConvertInsert(model.getPaperItems(), now, p -> {TaskItemObject taskItemObject = new TaskItemObject();taskItemObject.setExamPaperId(p.getId());taskItemObject.setExamPaperName(p.getName());return taskItemObject;});textContentService.insertByFilter(textContent);taskExam.setFrameTextContentId(textContent.getId());taskExamMapper.insertSelective(taskExam);} else {taskExam = taskExamMapper.selectByPrimaryKey(model.getId());modelMapper.map(model, taskExam);TextContent textContent = textContentService.selectById(taskExam.getFrameTextContentId());//清空試卷任務(wù)的試卷Id,后面會(huì)統(tǒng)一設(shè)置List<Integer> paperIds = JsonUtil.toJsonListObject(textContent.getContent(), TaskItemObject.class).stream().map(d -> d.getExamPaperId()).collect(Collectors.toList());examPaperMapper.clearTaskPaper(paperIds);//更新任務(wù)結(jié)構(gòu)textContentService.jsonConvertUpdate(textContent, model.getPaperItems(), p -> {TaskItemObject taskItemObject = new TaskItemObject();taskItemObject.setExamPaperId(p.getId());taskItemObject.setExamPaperName(p.getName());return taskItemObject;});textContentService.updateByIdFilter(textContent);taskExamMapper.updateByPrimaryKeySelective(taskExam);}//更新試卷的taskIdList<Integer> paperIds = model.getPaperItems().stream().map(d -> d.getId()).collect(Collectors.toList());examPaperMapper.updateTaskPaper(taskExam.getId(), paperIds);model.setId(taskExam.getId());}@Overridepublic TaskRequestVM taskExamToVM(Integer id) {TaskExam taskExam = taskExamMapper.selectByPrimaryKey(id);TaskRequestVM vm = modelMapper.map(taskExam, TaskRequestVM.class);TextContent textContent = textContentService.selectById(taskExam.getFrameTextContentId());List<ExamResponseVM> examResponseVMS = JsonUtil.toJsonListObject(textContent.getContent(), TaskItemObject.class).stream().map(tk -> {ExamPaper examPaper = examPaperMapper.selectByPrimaryKey(tk.getExamPaperId());ExamResponseVM examResponseVM = modelMapper.map(examPaper, ExamResponseVM.class);examResponseVM.setCreateTime(DateTimeUtil.dateFormat(examPaper.getCreateTime()));return examResponseVM;}).collect(Collectors.toList());vm.setPaperItems(examResponseVMS);return vm;}@Overridepublic List<TaskExam> getByGradeLevel(Integer gradeLevel) {return taskExamMapper.getByGradeLevel(gradeLevel);} } @Service public class AuthenticationServiceImpl implements AuthenticationService {private final UserService userService;private final SystemConfig systemConfig;@Autowiredpublic AuthenticationServiceImpl(UserService userService, SystemConfig systemConfig) {this.userService = userService;this.systemConfig = systemConfig;}/*** @param username username* @param password password* @return boolean*/@Overridepublic boolean authUser(String username, String password) {User user = userService.getUserByUserName(username);return authUser(user, username, password);}@Overridepublic boolean authUser(User user, String username, String password) {if (user == null) {return false;}String encodePwd = user.getPassword();if (null == encodePwd || encodePwd.length() == 0) {return false;}String pwd = pwdDecode(encodePwd);return pwd.equals(password);}@Overridepublic String pwdEncode(String password) {return RsaUtil.rsaEncode(systemConfig.getPwdKey().getPublicKey(), password);}@Overridepublic String pwdDecode(String encodePwd) {return RsaUtil.rsaDecode(systemConfig.getPwdKey().getPrivateKey(), encodePwd);}} <view class="exam-page"><view class="view-wrap"><view class="exam-count-down">{{remainTimeStr}}</view></view><view class="view-wrap-hidden"></view><view><view class="exam-name-title"><h1>{{form.name}}</h1></view><form bindsubmit='formSubmit'><i-panel title="{{titleItem.name}}" wx:for="{{form.titleItems}}" wx:for-item="titleItem" wx:key="{{titleItem.name}}" i-class="exam-panel-title"><i-cell-group i-class="exam-cell"><i-cell wx:for="{{titleItem.questionItems}}" wx:key="{{titleItem.id}}" wx:for-item="questionItem"><view wx:if="{{questionItem.questionType === 1}}"><rich-text nodes="{{questionItem.itemOrder}}. {{questionItem.title}}" /><radio-group class="radio-group" name="{{questionItem.itemOrder}}_{{questionItem.id}}_{{questionItem.questionType}}"><label class="radio" wx:for="{{questionItem.items}}" wx:key="{{questionItem.prefix}}" wx:for-item="radioItem" class="exam-radio-item-label"><radio color="#2d8cf0" value="{{radioItem.prefix}}" checked="{{radioItem.checked}}" class="exam-item-left" /><rich-text nodes="{{radioItem.prefix}}. {{radioItem.content}}" class="exam-item-left" /></label></radio-group></view><view wx:elif="{{questionItem.questionType === 2}}"><rich-text nodes="{{questionItem.itemOrder}}. {{questionItem.title}}" class="exam-item-left" style="line-height:35px" /><checkbox-group class="exam-item-left" style="margin-left:10px" name="{{questionItem.itemOrder}}_{{questionItem.id}}_{{questionItem.questionType}}"><label wx:for="{{questionItem.items}}" wx:key="{{questionItem.prefix}}" wx:for-item="radioItem" class="exam-radio-item-label"><checkbox color="#2d8cf0" value="{{radioItem.prefix}}" checked="{{radioItem.checked}}" class="exam-item-left" /><rich-text nodes="{{radioItem.prefix}}. {{radioItem.content}}" class="exam-item-left" /></label></checkbox-group></view><view wx:elif="{{questionItem.questionType === 3}}"><rich-text nodes="{{questionItem.itemOrder}}. {{questionItem.title}}" class="exam-item-left" style="line-height:35px" /><radio-group class="radio-group" class="exam-item-left" style="margin-left:10px" name="{{questionItem.itemOrder}}_{{questionItem.id}}_{{questionItem.questionType}}"><label class="radio" wx:for="{{questionItem.items}}" wx:key="{{questionItem.prefix}}" wx:for-item="radioItem" class="exam-radio-item-label"><radio color="#2d8cf0" value="{{radioItem.prefix}}" checked="{{radioItem.checked}}" class="exam-item-left" /><rich-text nodes="{{radioItem.content}}" class="exam-item-left" /></label></radio-group></view><view wx:elif="{{questionItem.questionType === 4}}"><rich-text nodes="{{questionItem.itemOrder}}. {{questionItem.title}}" /><view class="exam-input-contain" wx:for="{{questionItem.items}}" wx:key="{{questionItem.prefix}}" wx:for-item="inputItem" wx:for-index="idx"><view class="exam-input-contain-label">{{inputItem.prefix}}</view><input class="exam-input-contain-content" maxlength="-1" name="{{questionItem.itemOrder}}_{{questionItem.id}}_{{questionItem.questionType}}_{{idx}}" /></view></view><view wx:else><rich-text nodes="{{questionItem.itemOrder}}. {{questionItem.title}}" /><view class="exam-textarea-contain"><textarea placeholder="答案" maxlength="-1" name="{{questionItem.itemOrder}}_{{questionItem.id}}_{{questionItem.questionType}}"></textarea></view></view></i-cell></i-cell-group></i-panel><view><button class="i-btn i-btn-primary i-btn-square" form-type='submit'>提交</button></view><i-action-sheet visible="true" visible="{{timeOutShow}}" mask-closable="{{ false }}"><view slot="header" style="padding: 16px"><view class="exam-timeout-title">考試試卷結(jié)束,請(qǐng)?zhí)峤辉嚲?#xff01;</view><button class="i-btn i-btn-primary i-btn-square" form-type='submit'>提交</button></view></i-action-sheet></form><i-modal title="考試結(jié)果" visible="{{modalShow}}" bind:ok="returnRecord" bind:cancel="returnRecord"><view>得分:{{result}}</view></i-modal><i-spin size="large" fix wx:if="{{ spinShow }}"></i-spin><i-message id="message" /></view> </view>八,項(xiàng)目部署
8.1 目錄結(jié)構(gòu)
獲取到源碼進(jìn)行解壓后,文件列表如下:
?8.2 導(dǎo)入數(shù)據(jù)庫(kù)
打開(kāi)Navicat(或者其他數(shù)據(jù)庫(kù)連接工具也可),導(dǎo)入資料中的sql文件。
8.3 后端源碼部署
8.3.1 導(dǎo)入源碼
打開(kāi)idea,新建工程【可以任意目錄】。把解壓后的xzs目錄復(fù)制到創(chuàng)建好的idea工程中。進(jìn)行導(dǎo)入。
導(dǎo)入進(jìn)來(lái)之后,idea會(huì)進(jìn)行編譯。編譯之后沒(méi)有出現(xiàn)錯(cuò)誤說(shuō)明導(dǎo)入成功。
8.3.2 修改配置文件
修改數(shù)據(jù)庫(kù)連接配置,在application-dev.yml配置文件中修改成自己的數(shù)據(jù)庫(kù)名和自己的密碼。
8.3.3 啟動(dòng)項(xiàng)目?
SpringBoot的程序啟動(dòng)類,相信大部分小伙伴們都知道該怎么啟動(dòng)。不過(guò)在這里還是要寫(xiě)一下,以防個(gè)別小伙伴不知道。在src下找到XzsApplication啟動(dòng)類,在該類中進(jìn)行右鍵運(yùn)行即可。最后查看控制臺(tái)有沒(méi)有報(bào)錯(cuò)信息。沒(méi)有報(bào)錯(cuò)信息,啟動(dòng)成功。
?上面說(shuō)明啟動(dòng)成功
8.4 管理員端和學(xué)生端部署
管理員端和學(xué)生端部署操作都是一樣的,在這里以管理員端為例進(jìn)行演示。
打開(kāi)vscode【用其他前端開(kāi)發(fā)工具打開(kāi)也可】,導(dǎo)入資料中的vue目錄下的xzs-admin工程,學(xué)生端是xzs-student。打開(kāi)vscode的終端,進(jìn)行安裝依賴和啟動(dòng)項(xiàng)目。
8.4.1 安裝依賴
命令:npm install
?
8.4.2 啟動(dòng)項(xiàng)目
命令:npm run serve
?
?運(yùn)行成功,端口號(hào)8002
8.5 小程序端部署
8.5.1 微信小程序開(kāi)發(fā)工具下載與安裝
開(kāi)發(fā)工具的官方下載地址為:https://mp.weixin.qq.com/debug/wxadoc/dev/devtools/download.html。
不支持Windows XP和Windows 7系統(tǒng),建議使用WIN10。我這里選擇Windows 64版本的安裝包。
安裝過(guò)程比較簡(jiǎn)單,不用設(shè)置什么,按照提示來(lái)就行了。下面是每一步詳細(xì)截圖
?
?
?8.5.2 項(xiàng)目部署
?打開(kāi)微信開(kāi)發(fā)工具---> 選擇導(dǎo)入--->找到資料中的wx目錄,導(dǎo)入xzs_student
?
?到這一步會(huì)提示,輸入appId,如果自己有就寫(xiě)自己的,沒(méi)有的話,點(diǎn)擊測(cè)試,使用測(cè)試號(hào)
?導(dǎo)入進(jìn)來(lái)之后,會(huì)自動(dòng)提示是否運(yùn)行,選擇【信任并運(yùn)行】
運(yùn)行成功 。到此整個(gè)項(xiàng)目部署就已經(jīng)完成了
九,項(xiàng)目總結(jié)
該項(xiàng)目是PC端+小程序端。Java做為后端支持。代碼結(jié)構(gòu)規(guī)整,源碼容易閱讀,功能完善,非常適合做為畢設(shè)來(lái)使用。
總結(jié)
以上是生活随笔為你收集整理的基于SpringBoot+VUE(PC端+小程序端)的智能在线考试系统毕业设计的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 手绘vs码绘 动态对比
- 下一篇: 自定义协议的命令解析器