作者簡介:全棧開發工程,從事Java、Python、前端、小程式方面的開發和研究,對大資料應用與開發比較感興趣,
主要内容:Java項目、前端項目、Python項目、小程式開發、大資料項目、單片機
收藏點贊不迷路 關注作者有好處
文末擷取源碼
感謝您的關注,請收藏以免忘記,點贊以示鼓勵,評論給以建議,愛你喲
作者首頁:程式設計千紙鶴
作者簡介:Java、前端、Python開發多年,做過高程,項目經理,架構師
主要内容:Java項目開發、畢業設計開發、面試技術整理、最新技術分享
收藏點贊不迷路 關注作者有好處
文末獲得源碼
項目編号:BS-GX-052
前言:
随着現代社會的不斷發展,越來越多的業務趨向于線上實作。在教育學習領域,傳統的學習發展模式已經不能完全滿足當今時代的發展。在過去,學生的題目練習總是依賴于紙質化,具有一定的空間和時間限制,而由于試題冊的大量印刷在一定程度上也造成了資源的浪費。為此,實作一套網上題庫系統能夠大大提升學生試題訓練的效率,可以讓使用者随時随地打開題庫進行訓練,再結合适當的組卷算法在短時間内随機生成一套符合要求的試題,達到了資源的合理利用。本系統是基于Web的題庫系統,采用B/S三層架構模式、jQuery、MySQL等技術實作對整個系統的完善。适用性強、易于操作。
一,項目簡介
随着網絡技術的深入發展,網際網路在學習領域越來越占據優勢地位。特别的,近幾年受疫情影響,高校為不影響教學程序,積極響應教育部号召,組織開展線上教學[1],保障學生即使身在家中,也能每天按時按量地學習到新知識,保障了教學的連貫性和完整性。那麼,通過線上學習掌握知識後,該如何讓學生加深對知識的了解呢?衆所周知,鞏固和強化已學知識是非常重要的,任何知識隻有在實際運用中才能強化和加深對它的記憶和了解。是以做題越多,印象越深,做題就越有感覺。就像開車一樣,即使你知道怎樣開車,如果缺少了鍛煉這一環節,那你就永遠也達不到熟練駕駛的開車境界。在這樣的背景下,題庫系統應運而生。
題庫系統一直是學校教育系統的一個重要組成部分,國内外高校目前也有很多各式各樣的題庫系統。但是目前已有的題庫系統形式過于單一,專業性強,不滿足于各個學科的通用性。現階段,對于一名大學生而言,無論是專業技術還是個人能力,社會的高速發展都給予了他們更高的要求。在校期間,他們需要不斷地通過考試來提升鍛煉自己,由于現在資訊的過分零散化,學生往往需要通過多種方式去搜集不同的試題,而這樣繁瑣的工作就大大地浪費了學生的有效學習時間。提高和改進搜集題庫的效率成為學生共同追求的一個原則。對于學校來說,許多院校都開展了教務管理系統、成績管理、課程評價、虛拟課堂,以及各種形式複雜多樣的現代化網上教學系統。但出于某些因素,大部分院校還是采取了傳統的人工考試方法。這樣的考核方式要求老師從業人員自動出考卷、進行考核、布置考場、人工監考、人工收卷、批閱試題和解析試題等。教師為了尋找出一本優質的備考試卷,往往需要到處找考題,根據考核大綱要求以及學生所掌握的知識,按照個人經驗進行重新整合,确定考題比例和難易程度,但現在的大部分高校一個老師往往需要帶幾個不同的班級,師資力量不夠充沛,而這一系列看似簡單的過程卻需要耗費教師大量的精力和資源,而且在出試卷、改試卷的過程中也不可避免的會因為個人主觀因素而造成最後試卷分數的偏差,進而影響考試結果的準确性[2]。
本系統是基于Web的大學生題庫測試系統。使用這套題庫測試系統,不僅可以使學生的學習效率得到很大程度提升,而且可以讓教師把更多的時間投入到教學和課堂中,有利于提高教學品質。也因為随機組卷算法的實作,本系統在維護考試公平公正方面也能起到很大作用[3]。既便于重複使用,也符合了節能減排的發展趨勢。
基于目前題庫考試系統與傳統考試形式中存在的多種問題與不足,為設計出一套基于Web的大學生題庫管理系統,保證系統的實作是符合目前社會的需要,現對系統有關需求分析如下:
(1)建立統一的題庫
題庫建設的好壞直接關系到評價的最終結果。題庫的建設應采取專人工作、協同工作的模式,讓各科教師通過各種途徑搜集出所任課的不同類型練習題,然後對題目進行分類整理,再發送給學科負責人稽核校隊後由管理者對題目進行上傳,最終形成原始題庫。
(2)學科全面性
不同的試題應該涵蓋課程中的所有知識點,如果題目數量過多,最好将不同種類題目進行區分,将不同的試題分别儲存在不同的科目中。
(3)随機組卷
系統可以随時從題庫中随機抽取不同類型以及不同難度的題目自動生成一套完整的試卷,組卷過程可包含手動選題、自動生成兩種形式,充分展現使用者的個性化要求,確定試題的公平公正。教師在利用題庫系統對學生進行考核時可以根據考核标準來設定試卷的整體結構以及每類試題容量,在對班級整體進行考核時,可以設定每個人抽取的每套卷具有相同的難度而題目本身又是相異的。
(4)系統安全可靠
随着科技的快速發展,人們對個人資訊的安全性要求也越來越高,是以無論是哪一個系統都不得不把安全性放在首要地位。本系統在必要的時候可以通過對資料庫進行加密處理來保證系統資訊的安全[11]。首先在進入系統時,應當采用不同的識别方式,為不同身份的使用者分别開放不同的功能,将權限劃厘清楚。
基于該題庫管理系統的設計初衷,對題庫系統的核心功能規劃如下:
(1)使用者注冊登入功能:為系統提供識别驗證使用者身份資訊的功能。
(2)課程修改功能:友善使用者對課程的添加、删除和檢視。
(3)使用者管理功能:上級使用者可以對下級使用者進行檢視、删除、增加等相關操作。
(4)題庫管理功能:使用者可以自行選擇所需要進行訓練的題庫。
(5)試卷管理功能:對已完成的試卷進行浏覽檢視或成績分析。
(6)個人管理功能:提供給使用者進行個人資訊修改的功能。
該系統的主要使用群體包括老師、學生、和管理者。下面對這些使用者的主要功能進行說明。
管理者是該系統的最進階使用者,具有管理者登陸、添加對低權限使用者管理的功能,如添加檢視教師、學生、班級、課程等功能,如圖2所示。
對使用教師身份登陸系統的使用者配置設定的權限包括對題庫進行管理,根據不同的要求進行組卷選擇,對測試結果的分析和統計以及學生教學資料的管理。如圖3所示
學生主要對題庫,試卷、個人資料等進行操作。學生子產品功能如圖4所示。
系統總的功能子產品如下圖所示:
二,環境介紹
語言環境:Java: jdk1.8
資料庫:Mysql: mysql5.7
應用伺服器:Tomcat: tomcat8.5.31
開發工具:IDEA或eclipse
開發技術:Javaweb技術
三,系統展示
本題庫系統采用簡潔的界面,緻力于為使用者帶來良好的體驗。系統首頁如圖19所示。
圖19 系統首頁圖
6.1 系統登入注冊子產品實作
6.1.1 使用者注冊功能子產品的實作
使用者在進入網站首頁後點選“登入”按鈕進入注冊登入頁面,在該頁面,若是第一次登入可點選下方“注冊”,在跳轉頁面後選擇使用者身份、輸入賬号密碼以及性别後點選“注冊”,即可完成注冊。注冊頁面如圖20所示。
圖20 注冊頁面
6.1.2 使用者登入功能子產品的實作
使用者在登陸網頁上根據提示選擇自己的身份,然後在框内輸入賬号密碼和驗證碼,最後單擊“登入”,待資訊驗證成功後即可完成登入。登入頁面如圖21所示。
圖21 登陸頁面
6.2 管理者功能子產品實作
6.2.1 學生管理子產品的實作
(1)添加學生功能子產品的實作
作為進階使用者的管理者,可以手動為系統添加學生使用者,在該頁面中按照提示框的信心将學生資訊進行錄入點選“送出”按鈕即可完成添加學生;在需要批量導入學生資訊時可以點選“批量導入”,将儲存學生資訊的檔案導入即可。添加學生頁面如圖22所示。
圖22 添加學生頁面
(2)學生清單功能子產品的實作
在該頁面下可以對所有學生的資訊進行檢視,修改,或删除,當需要快速定位到某一位學生時可以點選上方“搜尋”按鈕。學生清單頁面如圖23所示。
圖23 學生清單頁面
(3)導出學生資訊功能子產品的實作
該系統能将班上的學生資訊進行一鍵輸出,在輸出時需要對學生基本資訊進行選擇,然後單擊“導出”或者“全部導出”按鈕。導出學生資訊頁面如圖24所示。
圖24 導出學生資訊頁面
6.2.2 教師管理功能子產品的實作
(1)添加教師功能子產品的實作
添加教師資訊時,可以在該頁面按照提示框内資訊将教師資訊一一填寫,點選“送出”即可,以檔案形式導入時可以在批量導入後選擇檔案點選批量導入。添加教師頁面如圖25所示。
圖25 添加教師頁面
(2)教師清單功能子產品的實作
在該頁面下,輸入教師的相關資訊後點選“送出”即可,教師清單頁面如圖26所示。
圖26 教師清單
6.2.3 班級管理功能子產品的實作
(1)添加班級功能子產品的實作
在添加班級時進入該頁面,輸入班級名稱、專業、年級資訊,然後單擊“送出”按鈕,完成新班級的加入,添加班級頁面如圖27所示。
圖27 添加班級頁面
(2)班級清單頁面功能的實作
在該頁面實作所有班級資訊的查詢,可以準确的看到班級所屬專業和年級。班級清單頁面如圖28所示。
圖28 班級清單頁面
6.2.4 課程管理功能子產品的實作
(1)添加課程功能子產品的實作
輸入課程名稱、班級,後點選“送出”按鈕,就可以完成新增課程。添加課程頁面如圖29所示。
圖29 添加課程頁面
(2)課程清單功能子產品的實作
浏覽所有的課程咨詢,可以對其更改,删除等。課程清單頁面如圖30所示。
圖30 課程清單頁面
四,核心代碼展示
package top.tmithy.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import top.tmithy.daomain.AdminUser;
import top.tmithy.service.AdminUserService;
@WebServlet("/adminUserServlet")
public class AdminUserServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private AdminUserService adminUserService = new AdminUserService();
private AdminUser adminUser = new AdminUser();
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String action = request.getParameter("action");
if ("login".equals(action)) {
login(request, response);
}
}
private void login(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
request.setCharacterEncoding("UTF-8");
/*
* 1.判斷驗證碼是否輸入正确
* 2.擷取表單資訊;
* 3.驗證表單資訊的合法性,調用Service層驗證賬号密碼的正确性;
* 4.正确,儲存使用者資訊跳轉至index.jsp;
* 5.失敗,跳轉至login.jsp。
*/
//1.判斷驗證碼是否輸入正确
String vcode = request.getParameter("vcode");
String csode = (String)request.getSession().getAttribute("vscode");
if(!vcode.equalsIgnoreCase(csode)) {
request.setAttribute("msg", "<script>alert('登入失敗,驗證碼錯誤!');window.location.herf='"+ request.getContextPath() +"/login.jsp';</script>");
}
// 2.擷取表單資訊;
String username = request.getParameter("username");
String password = request.getParameter("password");
// 3.驗證表單驗證表單資訊的合法性,調用Service層驗證賬号密碼的正确性;
adminUser = adminUserService.VerifyInfo(username, password);
if (adminUser != null) {
// 4.正确,儲存使用者資訊跳轉至index.jsp;
request.getSession().setAttribute("role", "0");
request.getSession().setAttribute("user", adminUser);
request.setAttribute("msg", "<script>alert('登入成功!'); window.location.href='" + request.getContextPath()
+ "/admin/index.jsp';</script>");
request.getRequestDispatcher("msg.jsp").forward(request, response);
} else {
// 5.失敗,跳轉至login.jsp。
request.setAttribute("msg", "<script>alert('登入失敗,賬号或密碼錯誤!'); window.location.href='" + request.getContextPath()
+ "/login.jsp';</script>");
request.getRequestDispatcher("msg.jsp").forward(request, response);
}
}
}
package top.tmithy.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import top.tmithy.daomain.TeacherUser;
import top.tmithy.service.TeaUserService;
@WebServlet("/teaUserServlet")
public class TeaUserServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private TeaUserService teaUserService = new TeaUserService();
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String action = request.getParameter("action");
if ("login".equals(action)) {
login(request, response);
}
}
private void login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/*
* 1.判斷驗證碼是否輸入正确
* 2.擷取表單資訊;
* 3.驗證表單資訊的合法性,調用service層判斷使用者名和密碼的正确性;
* 4.正确,跳轉至index.jsp;
* 5.錯誤,跳轉至login.jsp。
*/
//1.判斷驗證碼是否輸入正确
String vcode = request.getParameter("vcode");
String csode = (String)request.getSession().getAttribute("vscode");
if(!vcode.equalsIgnoreCase(csode)) {
request.setAttribute("msg", "<script>alert('登入失敗,驗證碼錯誤!'); window.location.href='" + request.getContextPath()
+ "/login.jsp';</script>");
request.getRequestDispatcher("msg.jsp").forward(request, response);
}
// 2.擷取表單資訊;
String username = request.getParameter("username");
String password = request.getParameter("password");
// 3.驗證表單資訊的合法性,調用service層判斷使用者名和密碼的正确性;
TeacherUser teacherUser = teaUserService.VerifyInfo(username, password);
if (teacherUser != null) {
// 4.正确,跳轉至index.jsp;
request.getSession().setAttribute("role", "1");
request.getSession().setAttribute("user", teacherUser);
request.setAttribute("msg", "<script>alert('登入成功!'); window.location.href='" + request.getContextPath()
+ "/teacher/index.jsp';</script>");
request.getRequestDispatcher("msg.jsp").forward(request, response);
} else {
// 5.錯誤,跳轉至login.jsp。
request.setAttribute("msg", "<script>alert('登入失敗,賬号或密碼錯誤!'); window.location.href='" + request.getContextPath()
+ "/login.jsp';</script>");
request.getRequestDispatcher("msg.jsp").forward(request, response);
}
}
}
五,項目總結
題庫測試系統在以後的發展主要展現在以下幾個方面:
(1)智能随機組卷[6]。目前為止各個題庫系統中随機組卷功能已經做得越來越完善。在使用者抽取題目的時候,題庫系統可以根據使用者自定義的題目難度系數以及題目類型去随機地抽取相比對的試題,計算機算法保障題目抽取的随機性與連貫性。在使用者需求不斷更新,計算機算法不斷進步的同時,題庫管理系統日後的發展一定會日新月異。
(2)人臉識别測試[7]。近年來人工智能已經越來越進入大衆視野,随處可見的智能家居,智能機器人等,人工智能産品已經慢慢成為我們生活中不可或缺的一部分。在付款時,我們甚至不需要攜帶任何東西,隻需将面部放在收銀系統的鏡頭前便可輕松付款;在裝入了智能門鎖的家庭,也早早實作了鑰匙自由,隻需人臉識别便可省去攜帶鑰匙的麻煩。對于此,人臉識别勢必也将繼續運用到題庫管理系統中,這樣的舉措,将大大提升考試的公平性。現今,已經有許多的考試系統中運用了人臉識别系統,如駕照考試,國語考試等。這更加彰顯了人臉識别系統在題庫管理系統中的應用前景。
(3)智能批閱試卷。由于主觀題的開放性,一個題目往往會有很多個答案,甚至有些主觀題存在言之成理即可的現象,這就造成了大多數的題庫管理系統都存在隻針對客觀題進行判别的弊端,剩下很少一部分系統會對主觀題進行系統自動判别卻也不夠準确。對于這樣的技術缺口更加激勵着軟體工程從業人員繼續探索的決心。争取将這樣的題庫系統适用于所有的題型,設計出一組更加完美的算法可以根據答題的語境和語義以及題目的個性化要求對作答内容進行判别,使題庫系統變得更加人性化和普遍化。這也是未來題庫系統迫切需要發展的關鍵所在。
(4)測試結果的智能分析。目前題庫系統生成的報告都是基本的學生姓名、班級、成績、排名等資訊。随着使用者需求的不斷擴大,一些使用者可能需要統計某一類型題目的正确率或從不同的角度更加深入分析此次測試的整體情況等。而完善這些技術就需要更進階别的基于資料倉庫挖掘技術的報告分析技術。