基于SpringBoot和VUE的前后端分離的考試系統(tǒng)設計_第1頁
基于SpringBoot和VUE的前后端分離的考試系統(tǒng)設計_第2頁
基于SpringBoot和VUE的前后端分離的考試系統(tǒng)設計_第3頁
基于SpringBoot和VUE的前后端分離的考試系統(tǒng)設計_第4頁
基于SpringBoot和VUE的前后端分離的考試系統(tǒng)設計_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

目錄TOC\o"1-2"\u前言 11.系統(tǒng)分析 11.1開發(fā)背景介紹 11.2需求分析 基于SpringBoot和VUE的前后端分離的考試系統(tǒng)設計前言隨著互聯(lián)網(wǎng)技術和在線教育的快速發(fā)展以及人們對于考試效率和異地考核有著更多的需求,越來越多的企業(yè)選擇了線上考試的方式來作為企業(yè)初試的解決方案。然而開發(fā)一款可以靈活獨立部署的在線考試系統(tǒng),不僅可以提高試題的安全性來確??荚嚨墓叫赃€可以大大降低企業(yè)的使用成本,有效的提升企業(yè)的招聘效率。1.系統(tǒng)分析1.1開發(fā)背景介紹國內(nèi)目前市面上對于在線考試的主流方案是使用一定知名度的第三方在線考試網(wǎng)站,此類網(wǎng)站有一定的發(fā)展時間,在一些基礎功能上更加豐富,如多設備適配,題型更加豐富,而且不需要進行部署,開箱即用。即便此類第三方網(wǎng)站有著這些優(yōu)點,但是仍然存在著以下不可忽視的缺點。網(wǎng)站數(shù)據(jù)安全無法得到保障選擇第三方網(wǎng)站作為考試工具,勢必要將企業(yè)的試題信息以及用戶信息存儲在第三方網(wǎng)站,一旦這些數(shù)據(jù)發(fā)生泄露事故以及其他安全問題那后果不堪設想。這些大型的第三方網(wǎng)站信息泄露的新聞也是屢見不鮮,2022年6月份,在線考試巨頭學習通被曝有一億多條的信息泄露,甚至有些學生的QQ賬號被盜,也懷疑與此事有關。在2020年到2021年的一年間,國家信息安全漏洞共享平臺就曾三次披露學習通的安全漏洞問題。(2)考試的公平性不易做到保障由于第三方網(wǎng)站的使用人數(shù)較多,導致滋生了許多前端JS腳本來進行答題,這種腳本可以自動抓取試卷的題目然后在互聯(lián)網(wǎng)上進行搜索然后回答這些題目。這樣極大程度影響了考試公平性,也對企業(yè)的招聘效率造成了影響。國外在線考試的主流方案是在招聘的時候搭建在線考試系統(tǒng),這種方案可一定程度上解決上文中使用第三方網(wǎng)站方案的缺點,但是卻喪失了如下一些優(yōu)點?;A功能不夠完善考試程序種類繁多,不同版本對于功能的支持也不一樣,無法做到一個版本實現(xiàn)全部的功能。需要獨立部署程序需要部署在服務器上才能夠運行使用,無法做到開箱即用,需要為這一塊付出一定的成本。搭建在線考試系統(tǒng)這種方案雖然存在一些缺點,但是可以通過技術手段不斷進行升級來改善,總的來說,尤其是在安全性這一塊,利大于弊,未來具有更好的發(fā)展趨勢。1.2需求分析1.2.1功能性需求(1)考生考生可注冊并登錄考試系統(tǒng),可使用個人資料功能來修改個人資料,考試報名功能來實現(xiàn)考試的報名,在線答題功能來完成試卷,系統(tǒng)會自動攔截其后臺請求,使其只能使用前臺功能,具體如圖1所示。注冊注冊個人資料考試報名在線答題登錄學生圖1考生功能用例圖(2)出題老師出題老師可使用課程管理,題目管理,試卷管理等功能來完成對課程以及試題的增刪查改功能。使用考試管理,試卷管理功能來實現(xiàn)對考試的計劃安排以及試卷的組卷,具體如圖2所示。課程管理課程管理試卷管理題目管理出題老師圖2出題老師功能用例圖(3)考務老師考務老師可使用考試管理,報名管理功能來完成考試的相關信息安排以及考生報名的處理,具體如圖3所示。報名報名管理考試管理考務老師圖3考務老師功能用例圖(4)閱卷老師閱卷老師可使用閱卷管理功能來完成對考生答卷的批改以及評分,具體如圖4所示。閱卷管理閱卷管理閱卷老師圖4閱卷老師功能用例圖(5)系統(tǒng)管理員系統(tǒng)管理員擁有上述所有功能,額外還有系統(tǒng)管理功能,可實現(xiàn)用戶管理,角色管理,菜單管理,文件管理等功能,具體如圖5所示。角色管理角色管理菜單管理文件管理其他功能用戶管理系統(tǒng)管理員圖5系統(tǒng)管理員功能用例圖1.2.2非功能性需求(1)安全性需求研發(fā)考試系統(tǒng)的目的就是幫助企業(yè)可獨立部署自己的考試系統(tǒng),防范試題泄露以及市面上常見的答題腳本,所以應采用前后端分離模式,將界面與數(shù)據(jù)做好隔離。前端界面不應與市面上常見答題網(wǎng)站重復,注意關鍵詞的規(guī)避等。應對用戶中心的敏感操作設置驗證,防止用戶名枚舉,密碼暴力破解等問題。用戶信息應使用JWT技術來進行加密確保用戶信息安全。(2)跨平臺兼容性需求該系統(tǒng)需要在不同操作系統(tǒng)上運行時,都能夠?qū)崿F(xiàn)一致性的用戶體驗和功能表現(xiàn),系統(tǒng)應該具有導入導出功能以便在不同設備上遷移數(shù)據(jù)。(3)可維護性需求軟件系統(tǒng)在設計和開發(fā)后,能夠輕松、安全地進行修改、更新、維護和擴展,以確保系統(tǒng)長期可靠地運行。1.3可行性分析基于SpringBoot和VUE的前后端分離的考試系統(tǒng)進行可行性分析。主要圍繞著技術可行性以及經(jīng)濟可行性兩個方向進行分析,技術可行性分析是對項目所使用的相關開發(fā)技術和開發(fā)工具進行分析,經(jīng)濟可行性分析則是對項目從開發(fā)到部署所需的軟硬件費用進行分析。(1)技術可行性分析系統(tǒng)整體采用的是SpringBoot和VUE的前后端分離開發(fā)模式,這也是當前企業(yè)實際開發(fā)最喜歡用的一種模式,這種模式的特點是前端和后端各自獨立開發(fā)、部署和運行,通過接口進行數(shù)據(jù)交互,開發(fā)效率較高且具有很好的靈活性。前端UI選擇了餓了么團隊開發(fā)并開源的Element-UI。數(shù)據(jù)庫使用的是MySQL數(shù)據(jù)庫,MySQL數(shù)據(jù)庫具有輕量穩(wěn)定靈活等優(yōu)點被廣大開發(fā)者青睞。開發(fā)軟件選擇了IntelliJIDEA,該軟件是目前Java開發(fā)常用的IDE,可同時開發(fā)后端以及前端程序。綜上所述,該項目在技術上可行。(2)經(jīng)濟可行性分析SpringBoot,MySQL,VUE,Element-UI等相關技術均為開源的項目,可以直接免費使用,不需要額外支付其他費用。Intellij公司針對學生有特供的Idea版本,可以免費使用。由于項目不涉及圖像渲染,故使用個人筆記本電腦即可完成開發(fā),開發(fā)成本相對較低。軟件開發(fā)完以后即可部署到服務器上,并且可根據(jù)考試周期來進行靈活租用云服務器,運行成本也比較低,由于系統(tǒng)采用的SpringBoot框架來開發(fā),該框架具有較好的擴展性,且維護一次可將源碼同步分發(fā)到其他使用該系統(tǒng)的主機上,維護成本也比較低,故在經(jīng)濟上可行。2.總體設計2.1系統(tǒng)功能模塊圖系統(tǒng)功能主要分為三大模塊,系統(tǒng)管理、考試后臺、考試前臺,每個模塊對應著不同的功能。具體的系統(tǒng)功能模塊設計如圖6所示?;诨赟pingBoot和VUE的前后端分離的考試系統(tǒng)系統(tǒng)管理考試后臺考試前臺用戶管理角色管理菜單管理文件管理課程管理題目管理試卷管理考試管理報名管理閱卷管理考試報名在線答題圖6系統(tǒng)功能模塊設計(1)系統(tǒng)管理模塊系統(tǒng)管理分為四個模塊,分別是用戶管理、角色管理、菜單管理以及文件管理。其中,用戶管理模塊支持新增/刪除用戶、修改用戶信息、查詢/設置用戶權限,以及用戶導入導出等功能。角色管理模塊則支持用戶角色信息的新增、查詢以及權限分配等操作。菜單管理模塊主要實現(xiàn)了后臺各種菜單如名稱、頁面地址、圖標和排列順序的設置。而文件管理模塊主要負責管理當前網(wǎng)站上的文件信息,包括對文件進行上傳、下載和刪除等操作。(2)考試后臺模塊該模塊功能為系統(tǒng)的核心功能模塊,主要有課程管理,題目管理,考試管理,試卷管理,報名管理,閱卷管理等六個子模塊組成。課程管理模塊可對課程信息進行新增,修改,刪除等。題目管理可實現(xiàn)題目的新增并將題目分配對應的課程id,題目的查詢,修改等。試卷管理功能可實現(xiàn)試卷的新增,刪除等做操作,并實現(xiàn)手動組卷或者自動組卷。考試管理功能則是設置相應的考試信息。(3)考生前臺模塊考生前臺模塊主要分為考試報名,考試答題兩個模塊??荚噲竺δ芸蓤竺鄬目荚嚥⒌却紕绽蠋煂徍???荚嚧痤}模塊則是可進行在線的試卷答題并實現(xiàn)試卷的提交功能。2.2系統(tǒng)流程設計(1)出題流程設計老師登錄后臺后可設置相關試題內(nèi)容,并指定對應的課程,具體詳細流程邏輯如圖7所示。開始開始N課程校驗創(chuàng)建課程完善信息結(jié)束Y圖7出題流程邏輯圖(2)學生考試流程圖學生成功登錄系統(tǒng)后可使用在線考試功能,找到對應的考試,點擊報名后等待考務老師審核,考務老師審核通過以后即可參加考試完成答題。具體詳細流程如圖8所示。開始開始報名考試審核YN作答試卷結(jié)束圖8學生考試流程邏輯圖(3)考試安排流程圖老師登錄后臺后可設置相關考試內(nèi)容,對題庫內(nèi)題目進行手動或者自動組卷,手動組卷需要在題目內(nèi)選擇對應的題目來完成組卷,自動組卷則需要輸入題目課程以及對應題目的數(shù)量,系統(tǒng)經(jīng)過數(shù)量判斷無誤后即可生成試卷,具體詳細流程如圖9所示。手動組卷手動組卷完善信息結(jié)束自動組卷開始數(shù)量判斷新建試卷圖9考試安排流程邏輯圖2.3數(shù)據(jù)庫設計數(shù)據(jù)庫方面使用的是MySQL數(shù)據(jù)庫,并將不同類的數(shù)據(jù)分為了用戶表、角色表、課程表、題目表、試卷表、考試表、考試報名表,答卷表等10張表,相關數(shù)據(jù)庫的設計情況如下所示。2.3.1關系E-R圖設計1答卷表考生填寫考務老師出題老師閱卷老師1答卷表考生填寫考務老師出題老師閱卷老師批閱編輯考試表提交考試報名表包含審核組織包含試卷表組成題目表組成課程表1NN1NNNN1NNN1N1NNN1圖10系統(tǒng)總E-R實體圖用戶信息Id(主鍵)用戶名用戶信息Id(主鍵)用戶名密碼昵稱郵箱地址注冊時間頭像電話角色圖11用戶信息實體屬性圖考試信息考試名稱考試時間持續(xù)時間I考試信息考試名稱考試時間持續(xù)時間Id(主鍵)課程號考務老師圖12考試信息實體屬性圖2.3.2數(shù)據(jù)庫表設計(1)用戶表(user)表中存放用戶的id,用戶名,密碼,昵稱,郵箱,創(chuàng)建時間,頭像地址,用戶角色等信息。用戶表的具體設計如表1所示。表1用戶表字段名稱類型長度是否為主鍵是否為空備注idint11是否表示id號usernamevarchar50否是用戶名用來登錄passwordvarchar50否是用戶密碼nicknamevarchar50否是用戶前臺昵稱emailvarchar50否是電子郵箱phonevarchar20否是電話號碼addressvarchar200否是地址create_timetimestamp否否創(chuàng)建時間avatar_urlvarchar255否是頭像地址rolevarchar50否否用戶角色(2)角色表(role)表中存放用戶角色名稱,角色信息描述以及角色的唯一標識符,標識符可用來快速定位角色。角色表的具體設計如表2所示。表2角色表字段名稱類型長度是否為主鍵是否為空備注idint11是否表示id號namevarchar50否是角色名稱descriptionvarchar255否是角色描述信息flagvarchar50否是唯一標識符(3)課程表(course)表中存放課程id,課程名稱,課程備注等信息,該表的作用是用來提供題目所屬于的課程以及考試對應的課程。課程表的具體設計如表3所示。表3課程表字段名稱類型長度是否為主鍵是否為空備注idint11是否課程id號namevarchar255否是課程名ecriptionvarchar255否是課程備注(4)題目表(question)表中存放考試題目的信息,分別為題目id,題目標題,題目類型,A選項內(nèi)容,B選項內(nèi)容,C選項內(nèi)容,D選項內(nèi)容,分值,答案,解析,出題人信息,出題的時間,課程id。題目表的具體設計如表4所示。表4題目表字段名稱類型長度是否為主鍵是否為空備注idint11是否試題id號namevarchar255否是題目名稱typeint255否是題目類型avarchar255否是A選項內(nèi)容bvarchar255否是B選項內(nèi)容cvarchar255否是C選項內(nèi)容dvarchar255否是D選項內(nèi)容scoreint11否是題目分值answervarchar255否是答案detailvarchar255否是解析user_idint11否是出題人idcourse_idint11否是課程id(5)試卷表(paper)表中存放試卷標識符,試卷名稱,試卷總分,考試時長,課程標識符,試卷表的具體設計如表5所示。表5試卷表字段名稱類型長度是否為主鍵是否為空備注idint11是否試卷id號namevarchar255否是試卷名稱scoreint11否是試卷總分durationint11否是考試時長course_idvarchar50否是課程id(6)考試表(exam)表中存放考試相關信息,分別為考試id,考試名稱,考場,考試時間,負責老師,狀態(tài),課程號,持續(xù)時長??荚嚤淼木唧w設計如表6所示。表6考試表字段名稱類型長度是否為主鍵是否為空備注idint11是否考試id號namevarchar50否是考試名稱roomvarchar255否是考場timevarchar50否是考試時間teachervarchar50否是考務老師statevarchar50否是考試狀態(tài)course_idint11否是課程iddurationint11否是持續(xù)時間(7)考試報名表(sign)表中存放考生的考試報名信息,主要有記錄id,考試id,學生id,狀態(tài)信息??荚噲竺淼木唧w設計如表7所示。表7考試報名表字段名稱類型長度是否為主鍵是否為空備注idint11是否報名id號exam_idint11否是考試id號user_idint11否是考生di號satatevarchar50否是報名狀態(tài)(8)答卷表(student_paper)表中存放考生的答卷信息,主要有答卷id,考試id,試卷內(nèi)容,學生id,提交時間,得分。答卷表的具體設計如表8所示。表8答卷表字段名稱類型長度是否為主鍵是否為空備注idint11是否答卷id號exam_idint11否是考試id號papertext否是試卷內(nèi)容user_idint11否是學生idtimevarchar50否是提交時間scoredouble11否是得分3.系統(tǒng)詳細設計與實現(xiàn)3.1系統(tǒng)管理模塊系統(tǒng)管理模塊雖不涉及考試系統(tǒng)的業(yè)務邏輯,但是確實整個系統(tǒng)最為重要的模塊,用戶管理,角色管理,菜單管理,文件管理這些子模塊相互依賴,共同組成了系統(tǒng)的核心底層。系統(tǒng)管理模塊運行效果如圖13所示。圖13系統(tǒng)管理模塊運行效果圖圖13為后臺管理的首頁,幾個展示在大屏上的信息使用的是VUE的雙向綁定技術,當用戶訪問或者刷新頁面時,會調(diào)用created()鉤子函數(shù)來向后臺發(fā)送請求,后臺接收到請求使用持久層框架MyBatisPlus來向?qū)谋磉M行查詢,然后將查詢到的信息返回到對應的域,前臺根據(jù)鉤子函數(shù)返回的結(jié)果來動態(tài)更新頁面信息,相關代碼如下。created(){this.request.post("/sign/count").then(res=>{//請求查詢未審核數(shù)量this.unSignNum=res.data;})//將未審核人數(shù)信息賦值this.request.post("/exam/count").then(res=>{//請求當前題目數(shù)量this.examNum=res.data;})//將題目數(shù)量進行賦值this.request.post("/user/count").then(res=>{//請求用戶數(shù)量this.questionNum=res.data;})//將用戶數(shù)量進行賦值}(1)用戶管理用戶管理模塊是系統(tǒng)管理模塊中的子模塊,主要負責對系統(tǒng)的用戶進行管理操作,涉及到的功能主要用:新增用戶,刪除用戶,修改用戶信息,搜索用戶,導入用戶以及導出用戶。用戶管理模塊運行效果如圖14所示。圖14用戶管理模塊運行效果圖當進入用戶管理模塊時會自動觸發(fā)load函數(shù)來加載當前用戶的信息,界面的其他按鈕也都綁定了對應的函數(shù),當用戶點擊這些按鈕的時候前端向后端發(fā)送Axios請求,后端接收到前端發(fā)來的請求后使用持久層框架MyBatis對數(shù)據(jù)庫中的user表進行查詢,并將查詢到的結(jié)果返回給前端,前端通過動態(tài)綁定來實現(xiàn)數(shù)據(jù)的實時刷新。條件搜索功能用到了動態(tài)SQL查詢,對load函數(shù)進行完善可使其增加條件搜索的功能,具體代碼如下。publicResultfindPage(IntegerpageNum,IntegerpageSize,Stringusername,Stringemail,Stringaddress){QueryWrapper<User>queryWrapper=newQueryWrapper<>();if(!"".equals(username)){queryWrapper.like("username",username);}//如果請求參數(shù)中有用戶名在查詢條件中增加對應的用戶名if(!"".equals(email)){queryWrapper.like("email",email);}//如果請求參數(shù)中有郵箱在查詢條件中增加對應的郵箱信息if(!"".equals(address)){queryWrapper.like("address",address);}//如果請求參數(shù)中有地址在查詢條件中增加對應的地址信息returnResult.success(userService.page(newPage<>(pageNum,pageSize),queryWrapper));}(2)角色管理角色管理模塊是系統(tǒng)管理模塊中的子模塊,主要負責對用戶中角色信息來進行管理操作,涉及到的功能有:新增角色信息,刪除角色信息,修改用戶信息,搜索角色信息,菜單分配。角色管理模塊運行效果如圖15所示。圖15角色管理模塊運行效果圖當進入角色管理模塊時會自動觸發(fā)load函數(shù)來加載當前系統(tǒng)角色相關的信息,新增、刪除、修改角色信息操作原理與用戶管理的原理均為一致,故不再贅述。菜單分配功能主要涉及兩個步驟,先從role_menu表中獲取已存在的權限并回顯在前端對話框中,然后將對話框中編輯完的數(shù)據(jù)提交到后臺,更新role_menu表,具體代碼如下。asyncselectMenu(role){this.roleId=role.idthis.roleFlag=role.flagthis.request.get("/menu").then(res=>{//請求菜單數(shù)據(jù)this.menuData=res.data//把后臺返回的菜單數(shù)據(jù)處理成id數(shù)組this.expends=this.menuData.map(v=>v.id)})this.menuDialogVis=truethis.request.get("/role/roleMenu/"+this.roleId).then(res=>{this.checks=res.datathis.$refs.tree.setCheckedKeys(res.data)this.ids.forEach(id=>{if(!this.checks.includes(id)){this.$refs.tree.setChecked(id,false)}})})},(3)菜單管理菜單管理模塊是系統(tǒng)管理模塊中的子模塊,主要負責對系統(tǒng)的菜單信息進行管理,涉及到的主要功能有:新增菜單信息,刪除菜單信息,搜索菜單信息,編輯菜單信息,新增子菜單信息。菜單管理模塊運行效果如圖16所示。圖16菜單管理模塊運行效果圖當進入角色管理模塊時會自動向后端發(fā)送請求,持久層框架通過查詢menu表后將得到的結(jié)果返回前端,其中新增、刪除、修改菜單信息操作原理與用戶管理的原理均為一致,故不再贅述。菜單和子菜單都屬于menu表中的記錄,子菜單的pid屬性為菜單的id號,只有當菜單的路徑和頁面路徑均為空的時候則可認為他是個父級菜單,并顯示新增子菜單選項,相關代碼如下。<el-buttontype="primary"@click="handleAdd()"v-if="!scope.row.pid&&!scope.row.path">新增子菜單<iclass="el-icon-plus"></i></el-button>(4)文件管理文件管理模塊是系統(tǒng)管理模塊中的子模塊,該模塊主要負責管理當前系統(tǒng)中的文件,涉及到的主要功能有:上傳文件,下載文件,文件搜索,文件預覽,文件刪除等。文件管理模塊運行效果圖如圖17所示。圖17文件管理模塊運行效果圖用戶進入文件管理模塊后前端會自動向后端請求當前系統(tǒng)中的文件情況,后端通過查詢file表后將表內(nèi)的結(jié)果返回前端。文件的搜索和刪除操作和用戶管理的對應功能類似,故不在概述,這里只討論文件上傳,預覽。文件上傳需要先獲取文件的md5值(MessageDigestAlgorithm5),該值可以確定文件的唯一性即同一個文件即使文件名和修改日期不同他們的md5值都是一樣的,后臺獲取到md5值之后在數(shù)據(jù)庫file表中進行查詢,如果查詢到數(shù)據(jù)庫中有相同md5值的記錄,那么說明該文件在服務器中已經(jīng)存在,所以就不需要再上傳了,只需要將上傳文件的文件名,文件類型,md5值等信息作為記錄存入file表即可。如果沒有在數(shù)據(jù)庫中查詢到與之對應的md5值,那么說明這是一個新的文件,那么需要將文件上傳到服務器,具體代碼如下。FileuploadFile=newFile(fileUploadPath+fileUUID);//定義文件的上傳路徑Stringmd5=SecureUtil.md5(file.getInputStream());//獲取文件的md5FilesdbFiles=getFileByMd5(md5);//從數(shù)據(jù)庫查詢是否存在相同的記錄if(dbFiles!=null){url=dbFiles.getUrl();//文件已存在,直接獲取存在的url來覆蓋}else{file.transferTo(uploadFile);}//不存在文件,將文件上傳到服務器文件上傳完成后對應的md5值等信息存入數(shù)據(jù)庫,具體實現(xiàn)代碼如下。//將文件信息存儲到數(shù)據(jù)庫中FilessaveFile=newFiles();saveFile.setName(originalFilename);//存儲文件名saveFile.setType(type);//存儲文件類型saveFile.setSize(size/1024);//存儲文件大小,這里為了直觀看出大小轉(zhuǎn)換為kb單位saveFile.setMd5(md5);//存儲文件的md5值saveFile.setUrl(url);//存儲文件的地址fileMapper.insert(saveFile);//保存文件本身}文件下載的原理與文件上傳相反。文件上傳到服務器時為了避免文件重名,這里使用了UUID(UniversallyUniqueIdentifier)來對文件進行命名,UUID是16個字節(jié)組成的十六進制字符串,在全球范圍內(nèi)具有唯一性。具體實現(xiàn)代碼如下。StringfileUUID=IdUtil.fastSimpleUUID()+StrUtil.DOT+type;//使用UUID來定義一個文件唯一的標識碼文件預覽則是用了kkFileView工具,該工具只需要在前端部署好,將文件的url鏈接傳入,即可實現(xiàn)文件預覽,具體代碼如下。<el-buttontype="primary"@click="preview(scope.row.url)">預覽</el-button>//前端定義預覽按鈕并綁定函數(shù)preview(url){window.open('/onlinePreview?url='+encodeURIComponent(window.btoa((url))))},//調(diào)用kkFileView來實現(xiàn)文件預覽3.2考試后臺模塊考試后臺模塊為系統(tǒng)的核心業(yè)務模塊,主要有課程管理,題目管理,考試管理,試卷管理,報名管理,閱卷管理六個子模塊,現(xiàn)將各個子模塊的設計與實現(xiàn)展示如下。(1)課程管理課程管理模塊為考試后臺模塊的子模塊,該模塊可實現(xiàn)課程分類信息的一些基礎功能,如新增,刪除,編輯以及搜索功能。課程管理模塊運行效果圖如圖18所示。圖18課程管理模塊運行效果圖用戶訪問頁面時前端自動向后端發(fā)送請求,后端收到請求后查詢數(shù)據(jù)庫中的course表,將查詢到的結(jié)果返回前端,前端將數(shù)據(jù)通過動態(tài)綁定顯示在前端,其中新增,搜索,刪除,編輯等功能與用戶管理一致,故不再概述。課程的ID號將來作為題目表的外鍵來使用,用來給題目進行分類。(2)題目管理題目管理模塊為考試后臺模塊的子模塊,該模塊可實現(xiàn)題目信息的新增,刪除,編輯以及搜索功能。題目管理模塊運行效果圖如圖19所示。圖19題目管理模塊運行效果圖用戶訪問題目管理頁面時前端自動向后端發(fā)送題目查詢請求,后端收到請求后查詢數(shù)據(jù)庫中的question表,將查詢到的結(jié)果返回前端,前端將數(shù)據(jù)通過動態(tài)綁定實時刷新,其中新增,搜索,刪除,編輯等功能與用戶管理的原理一致,故不再概述。(3)試卷管理試卷管理模塊為考試后臺模塊的子模塊,該模塊可生成考試的試卷內(nèi)容,同樣也是擁有新增,刪除,編輯,搜索功能。在編輯試卷內(nèi)容的時候提供了手動組卷和自動組卷兩種方法,試卷管理模塊運行效果圖如圖20所示。圖20試卷管理模塊運行效果圖手動組卷使用了Element-UI中的穿梭框組件,手動勾選數(shù)據(jù)后將數(shù)據(jù)更新到試卷中,即可完成手動組卷。手動組卷運行效果圖如圖21所示。圖21手動組卷運行效果圖手動組卷的后端接收到前端發(fā)來的更新組卷請求以后,首先需要刪除掉已經(jīng)存在的組卷信息,然后創(chuàng)建一個存放試題的數(shù)據(jù)集合,循環(huán)將勾選的題目數(shù)據(jù)存入到集合當中,最后將這個集合通過持久層存儲,具體實現(xiàn)代碼如下。publicResulthandPaper(@RequestBodyHandPaperDTOpaperDTO){//清空已經(jīng)存在的題目信息UpdateWrapper<PaperQuestion>updateWrapper=newUpdateWrapper<>();updateWrapper.eq("paper_id",paperDTO.getPaperId());paperQuestionService.remove(updateWrapper);List<Integer>handleQuestionIds=paperDTO.getHandleQuestionIds();List<PaperQuestion>list=newArrayList<>();for(IntegerhandleQuestionId:handleQuestionIds){list.add(paperQuestion);}paperQuestionService.saveBatch(list);returnResult.success();}自動組卷只需要輸入選擇題,判斷題,填空題的題目數(shù)量,后端接收到請求后首先查詢題庫內(nèi)的題目數(shù)量,如果輸入的題目數(shù)量比題庫里的題目數(shù)量還要多的話那么無法完成組卷,拋出錯誤來并發(fā)送給前端,如果題目數(shù)量滿足的話即可進行組卷,同樣需要先除掉原先的試卷信息,自動組卷這是使用的是隨機組卷的方法,使用的hutool工具里的randomEleList方法來獲取隨機數(shù),具體代碼如下。privateList<Integer>getEleList(intsourceSize,intresultSize){List<Integer>list=CollUtil.newArrayList();for(inti=0;i<sourceSize;i++){list.add(i);//遍歷題目并將題目插入試卷}returnRandomUtil.randomEleList(list,resultSize);//返回生成的試卷}(4)考試管理考試管理模塊為考試后臺模塊的子模塊,該模塊可生成考試的具體安排并為其指定具體考試試卷,考試試卷在試卷管理模塊生成??荚嚬芾磉\行效果圖如圖22所示。圖22考試管理運行效果圖當用戶訪問到考試管理頁面時系統(tǒng)會查詢數(shù)據(jù)庫中的exam表,并將查詢到的結(jié)果返回給前端,其中考試狀態(tài)是通過查詢考試時間和當前時間,如果當前時間早于考試時間,那么考試狀態(tài)顯示為未開始,如果當前時間在考試時間和考試時間加上持續(xù)時間之間的話,那么考試狀態(tài)則顯示為進行中否則將會顯示為已結(jié)束,具體代碼如下。privatevoidsetState(Examexam){Stringtime=exam.getTime();DateTimedateTime=DateUtil.parse(time,"yyyy-MM-ddHH:mm");Datenow=newDate();if(DateUpare(dateTime,now)<=0&&DateUpare(DateUtil.offsetMinute(dateTime,exam.getDuration()),now)>=0){//對當前時間的處于范圍進行判斷exam.setState("進行中");}elseif(DateUpare(dateTime,now)>0){exam.setState("未開始");}else{exam.setState("已結(jié)束");}}(5)報名管理報名管理模塊為考試后臺模塊的子模塊,該模塊可查詢到當前考生的報名狀態(tài),并對狀態(tài)進行審核,只有審核通過的考生才可在考試時間進入考試,審核未通過的考試無法進入考試。報名管理運行效果圖如圖23所示。圖23報名管理運行效果圖(6)閱卷管理閱卷管理模塊為考試后臺模塊的子模塊,該模塊可以為考生的答卷進行判分,客觀題系統(tǒng)可自動進行判斷,主觀題需閱卷老師進行給分,最后可核算出考生的考試分數(shù),閱卷管理運行效果圖如圖24所示。圖24閱卷管理運行效果圖其中,客觀題自動判卷的原則為,只有考生的答案與系統(tǒng)的答案一致并且數(shù)據(jù)類型也相同時,才會給到對應的分數(shù),不然需要閱卷老師進行手動賦分,具體實現(xiàn)代碼如下。if(this.paper&&this.paper.length){this.paper.forEach(item=>{//自動閱卷if(item.answer===item.studentAnswer){item.studentScore=item.score}})}當閱卷老師閱卷完成后進行提交的時候,系統(tǒng)會自動計算試卷的分數(shù)并同步更新exam表,最后實現(xiàn)試卷的批改。3.3用戶前臺模塊用戶前臺模塊主要開放給考生來使用,主要有考試報名,進行考試兩部分組成??忌诳荚嚽靶柽M行考試報名,此時考務老師會在后臺對報名進行審核,審核通過之后考生在規(guī)定的考試時間內(nèi)即可參加考試。(1)考試報名當訪問到考試中心頁面時會自動向后端請求當前的考試列表,后端通過向數(shù)據(jù)庫exam表查詢后將結(jié)果返回給前端,前端將返回后的結(jié)果進行遍歷并實時渲染到頁面,點擊報名按鈕后會向后端發(fā)送請求進行考試報名,考試報名運行效果圖如圖25所示。圖25考試報名運行效果圖考試列表隱藏進入考試按鈕,這個按鈕只有當考試報名審核通過之后且時間到了考試時間之后才會出現(xiàn),使用了VUE的v-if來進行實現(xiàn),具體代碼如下。<el-buttonv-if="item.enable&&item.state==='進行中'">開始考試</el-button>(2)進行考試當時間達到了考試的時間且報名審核通過,在考試列表會出現(xiàn)開始考試的按鈕,如圖26所示。圖26開始考試按鈕效果圖考生點擊開始考試按鈕后即可進入考試,進入的時候會加載對應的考試試卷內(nèi)容,等待作答完成點擊左下角的提交按鈕即可完成試卷的提交。如圖27所示。圖27進行考試運行效果圖前端加載試卷的時候通過v-for來實現(xiàn)對試題的遍歷加載,然后根據(jù)試題的類型進行判斷,加載對應的樣式內(nèi)容,具體代碼如下。<divv-if="item.type===1"style="margin:10px">//此處加載選擇題的樣式</div><divv-if="item.type===2"style="margin:10px">//此處加載判斷題的樣式</div><divv-if="item.type===3"style="margin:10px">//此處加載填空題的樣式</div>這里定義了當類型為1的時候加載的為選擇題,當類型為2的時候加載的是判斷題,當類型為3的時候加載的為填空題。4.4.1測試計劃系統(tǒng)測試作為質(zhì)量保證的一部分,對于沒有測試的軟件而言會面臨很大的風險,從未發(fā)布的致命錯誤到用戶界面上的小問題都有可能導致軟件的低質(zhì)量和不良用戶體驗。通過測試,可以確定代碼哪些地方存在錯誤,以便優(yōu)先處理這些錯誤,并修改代碼或添加新功能來解決它們。測試可以幫助確保軟件的穩(wěn)定性、可靠性和性能。檢測并糾正缺陷需要時間和資金。如果在測試過程中找到并糾正問題,則可以避免費用和時間上的浪費。系統(tǒng)測試通常由單元測試和集成測試兩部分促成,單元測試是針對系統(tǒng)中的單個小的功能進行的測試。它的目的是確保這些模塊按照預期執(zhí)行,以便系統(tǒng)中更高級別的模塊可以在這些基礎上構(gòu)建。集成測試是將不同的模塊組合在一起進行測試,以確保它們的協(xié)同工作是否符合預期。這種測試可能涉及到多個層級和復雜的交互,比如模塊之間的消息傳遞、數(shù)據(jù)共享等。具體的測試方案執(zhí)行又有黑盒測試和白盒測試兩種。黑盒測試是基于需求規(guī)格說明書或其他對系統(tǒng)功能的描述進行測試的。在黑盒測試中,測試人員不需要知道軟件的內(nèi)部實現(xiàn)細節(jié),只需要了解需要測試的功能或需求的輸入和輸出。白盒測試是基于軟件內(nèi)部源代碼或其他實現(xiàn)細節(jié)進行測試的。在白盒測試中,測試人員需要具備一定的編程或技術能力,可以通過代碼分支覆蓋率、路徑覆蓋率等方式來設計和執(zhí)行測試用例。兩種方案進行對比后最終選擇了黑盒測試,因為黑盒測試基于用戶角度出發(fā),對用戶體驗來說更加友好,且測試結(jié)果更加直觀。系統(tǒng)安全性測試是確保系統(tǒng)在受到各種潛在威脅時能夠保持其數(shù)據(jù)、功能和信息的機密性、完整性和可用性的過程。對于在線考試系統(tǒng)而言,安全性尤為重要,因為它涉及到用戶的個人信息、考試數(shù)據(jù)以及系統(tǒng)的公正性。所以,在系統(tǒng)功能性測試之外我們還安全了系統(tǒng)的安全性測試。4.2測試用例(1)考生考試流程測試考生的考試功能是系統(tǒng)對廣大用戶開放的功能,也是系統(tǒng)的核心業(yè)務組成部分,所以非常重要,現(xiàn)對考試流程進行測試,相關測試設計如表9所示。表9考生考試流程測試用例設計及結(jié)果序號標題測試步驟預期結(jié)果實際結(jié)果1考生報名流程驗證(1)登錄在線考試系統(tǒng)(2)進入在線考試中心頁面(3)點擊報名成功報名后會有相應的通知頁面提示“報名成功”2在線答題流程驗證(1)在考試時間內(nèi)登錄系統(tǒng)(2)點擊開始答題按鈕(3)完成試卷后提交頁面有相應的提交成功通知頁面刷新,顯示“提交成功”3不報名考試就參加考試(1)在考試時間內(nèi)登錄系統(tǒng)(2)嘗試進行答題(3)提交試卷頁面有相應的錯誤提示或者無法答題頁面并未出現(xiàn)“開始答題”按鈕(2)系統(tǒng)管理模塊測試系統(tǒng)管理模塊是系統(tǒng)的底層,也是系統(tǒng)最重要的權限,一切的業(yè)務均需要建立在系統(tǒng)管理模塊之上,所以需要著重進行測試,相關測試設計如表10所示。表10系統(tǒng)管理流程測試用例設計及結(jié)果序號標題測試步驟預期結(jié)果實際結(jié)果1用戶管理流程驗證(1)新增用戶(2)編輯用戶信息(3)刪除用戶(4)搜索用戶信息(5)導入導出用戶信息做完相應的操作后會提示操作成功,涉及到導出的應當有導出的文件。幾個步驟均提示“操作成功”,導出用戶信息成功導出“用戶信息.xls”文件2角色管理流程驗證(1)新增角色(2)編輯角色信息(3)刪除角色信息(4)搜索角色信息做完相應的操作后會提示操作成功。幾個步驟均提示“操作成功”。3菜單管理流程驗證(1)新增菜單(2)編輯菜單信息(3)刪除菜單做完相應的操作后會提示操作成功。幾個步驟均提示“操作成功”。4文件管理流程驗證(1)上傳文件(2)下載文件(3)預覽文件(4)刪除文件做完相應的操作后會提示操作成功,能夠預覽文件。幾個步驟均提示“操作成功”,成功打開文件并且預覽成功。(3)考試后臺模塊測試考試后臺模塊是考試系統(tǒng)的業(yè)務管理模塊,用戶前臺能否順利的使用與考試后臺模塊密不可分,相關測試設計如表11所示。表11考試后臺流程測試用例設計及結(jié)果序號標題測試步驟預期結(jié)果實際結(jié)果1課程管理流程驗證(1)新增課程(2)編輯課程信息(3)刪除課程(4)搜索課程信息做完相應的操作后會提示操作成功。幾個步驟均提示“操作成功”。2題目管理流程驗證(1)新增題目(2)編輯題目信息(3)刪除題目信息(4)搜索題目做完相應的操作后會提示操作成功。幾個步驟均提示“操作成功”。3試卷管理流程驗證(1)新增試卷(2)編輯試卷信息(3)手動組卷(4)自動組卷做完相應的操作后會提示操作成功,手動組卷和自動組卷可以實現(xiàn)。幾個步驟均提示“操作成功”,成功實現(xiàn)手動組卷與自動組卷。4考試管理流程驗證(1)新增考試(2)設置考卷(3)預覽試卷(4)刪除考試做完相應的操作后會提示操作成功。幾個步驟均提示“操作成功”。5報名管理流程驗證(1)報名審核能夠?qū)徍藞竺畔?。可設置審核信息通過與不通過。6閱卷管理流程驗證(1)批閱試卷(2)查看分數(shù)能夠完成試卷批閱和分數(shù)的查看。均成功完成。(4)系統(tǒng)安全性測試在系統(tǒng)安全性測試上我們選擇了兩個方向來進行

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論