胡秀梅 章宇琦 吳迪 吳海峰
【摘 要】本文基于spring+ struts2+ Hibernate框架,設計實現了一套用于高校考試的排座系統(tǒng),以替代目前考試過程中的人工排座。該系統(tǒng)具有自動、快速、穩(wěn)定的特點,既避免了當前人工排座過程中由人工操作失誤而引起的各類問題,又大大減輕了教務工作者的工作量,提高了高校信息化水平。
【關鍵詞】Java Web;考試;排座
中圖分類號: TP391.13 文獻標識碼: A 文章編號: 2095-2457(2018)12-0120-003
DOI:10.19694/j.cnki.issn2095-2457.2018.12.052
0 引言
考試是高校教學過程中不可或缺的一環(huán),每學期末在考試前教務工作人員都要結合當前班級、科目、教室使用情況進行考試座位的編排。以筆者所在學校為例,全校有超過200個班級,按每個班級考10門課程計算,需要安排的場次就超過2000次。由此可見該項工作需要耗費大量的人力和時間。
目前有一些學者對考試的自動排座展開了研究。婁清[1]利用VBA在Excel中開發(fā)了普通高中的考試排座系統(tǒng),給出了詳細的模塊設計和代碼參考;李正慧[2]簡要的從排課系統(tǒng)數據庫中關鍵性數據表的設計和排課界面功能的實現等方面介紹了整個排課數據庫的設計思路;周玉芬[3]等針對高校考試的特點,用VC++編寫了一個考場隨機排座系統(tǒng),實現了考場人員座次的隨機排序、顯示和打印等功能;徐欣[4]等利用Microsoft Visual FoxPro6.0開發(fā)了一套考試隨機排位系統(tǒng),實現了考場的分配、學生座位的隨機排座、考試時間、場次安排、打印考試座位表等功能,并進行了測試和應用。
由以上調研可以看出,考試的排座問題是每個學校都面臨的重要問題,如何使其自動化實現已經得到了學者們的關注,并產生了一些相關研究成果。然而當前對排座系統(tǒng)的研究和應用還不夠深入和全面,沒有與高??荚嚢才澎`活性高、變化性大的特點相結合,研發(fā)的系統(tǒng)也主要以本地測試或者普通桌面軟件為主,無法適用于多人集中辦公的場景。
針對這個現狀,我們利用目前主流的Spring+Struts2+Hibernate三層框架技術,采取面向對象的思想,結合MVC模式實現了一套適用于高??荚嚨淖詣优抛到y(tǒng)。
1 關鍵技術
1.1 MySQL數據庫
MySQL是一種關系數據庫管理系統(tǒng),關系數據庫將數據保存在不同的表中,而不是將所有數據放在一個大倉庫內,這樣就增加了速度并提高了靈活性。MySQL所使用的 SQL 語言是用于訪問數據庫的最常用標準化語言。
1.2 三層框架
Spring框架
Spring是一個輕量級控制反轉(IoC)和面向切面(AOP)的容器框架。Spring框架是由于軟件開發(fā)的復雜性而創(chuàng)建的。Spring使用的是基本的JavaBean來完成以前只可能由EJB完成的事情。然而,Spring的用途不僅僅限于服務器端的開發(fā)。從簡單性、可測試性和松耦合性角度而言,絕大部分Java應用都可以從Spring中受益。
Struts2框架
Struts2是一個基于MVC設計模式的Web應用框架,它本質上相當于一個servlet,在MVC設計模式中,Struts2作為控制器(Controller)來建立模型與視圖的數據交互。Struts 2以WebWork為核心,采用攔截器的機制來處理用戶的請求,這樣的設計也使得業(yè)務邏輯控制器能夠與ServletAPI完全脫離開,所以Struts 2可以理解為WebWork的更新產品。
Hibernate框架
Hibernate是一個開放源代碼的對象關系映射框架,它對JDBC進行了非常輕量級的對象封裝,它將POJO與數據庫表建立映射關系,是一個全自動的orm框架,hibernate可以自動生成SQL語句,自動執(zhí)行。Hibernate可以應用在任何使用JDBC的場合,既可以在Java的客戶端程序使用,也可以在Servlet/JSP的Web應用中使用。
2 設計與實現
本系統(tǒng)分為三大模塊,即超級管理員、教務處和輔導員。超級管理員管理學院表、班級表、課程表、教室詳情表、用戶表。對這些表中的數據具有增加、修改、刪除、查看的權限。這些表都是屬于學校固定信息。同時還有對教務處、輔導員的權限的配置功能。教務處管理時間表、考試安排表。主要功能為對考試時間的安排,對全校班級對應課程考試安排的增、刪、改、查。輔導員可以查看考試安排表,安排考試排座。
整個系統(tǒng)結構如圖1 所示。
2.1 數據庫表的設計
如圖2為系統(tǒng)的數據庫表設計結構圖。每一個方塊為一個表結構,方塊上面一層為表名,下面為表的字段。表與表之間的連線代表表之間的關系。
表關系介紹:
(1)學院表關聯班級表,有了學院才會有班級,為一對多的關系;
(2)考試信息表關聯班級表、考試時間地點表、課程表,而考試時間地點表是課程和班級表聯合主鍵生成,所以班級與課程是這兩者表的主要部分,構成上面的四角關系;
(3)班級課程表則是課程表與班級表映射出來的一張表,因為兩者為多對多的關系;
(4)用戶表是一張單獨的表;
(5)考試時間地點表則從教室表獲取教室信息。
表主要字段介紹:
(1)教室詳情表中的座位詳情:(n1*m1+n2*m2+n3*m3),其中n代表有幾排,m表示每排有幾個座位,其中m =k1+k2+k3,代表每隔k個有一個過道;
(2)用戶表中的標志位:1代表超級管理員,2代表教務處,3代表輔導員;
(3)排座表的設計:學院、班級、課程、教室、人數、座次表。座次表在數據庫中以字符串的形式顯示,字符串中的書寫以鍵值對的形式書寫。例如:“01=學生A ,02=學生B…”。
(2)排座算法
智能排座算法是該系統(tǒng)的核心,該算法利用后端的動態(tài)數據,排出最優(yōu)化的座位方案,算法包含沖突檢測功能。算法流程如圖3所示。
上述算法思路清晰,結構較為簡單,實現起來比較容易,其大致流程為:
第一步,系統(tǒng)讀取后端數據庫的考試計劃、教室信息、班級信息和課程信息,并將這些數據加載到內存;
第二步,將考試計劃按照班級人數從小到大順序排列,教室容納人數按照從小到大順序排列,先安排人數少的班級,再安排人數多的班級。
第三步,遍歷考試計劃中的每一項,找到合理的教室,記錄并鎖定該時間段的對應教室使用,防止出現一教室多用。
第四步,將排好的每一項考試座次表寫入到Excel文件并存儲,供后期各學院打印下載。
(3)主要代碼
系統(tǒng)的核心代碼及相關注釋如下所示。
//班級的dao 層
StudentClassDao dao;
public void setDao(StudentClassDao dao) {
this.dao = dao;
}
//教室的dao 層
ClassroomDao dao;
public void setDao(ClassroomDao dao) {
this.dao = dao;
}
//排座功能的實現,兩個參數,一個是班級對象,一個是教室對象
public void arraySets(StudentClass studentC,Classroom classroom){
//查詢數據庫,獲取班級人數
StudentClass studentC2=dao.queryStudentClassById(studentC.id);
Integer studentClassNum=studentC2.getNum();
//查詢數據庫,獲取教室容量
Classroom classroom2=dao.queryClassroomById(classroom.id);
Integer roomNum=classroom2.getNum();
//定義一個數組,數組的長度為班級人數,此數組作為班級學生,進行編號
int sR[]=new int[studentClassNum];
for (int i = 0; i < sR.length; i++) {
sR[i]=i+1;
}
//定義一個數組,數組的長度為教室容量,此數組做為教室座位號,進行編號
int cR[] = new int[roomNum];
for (int i = 0; i < cR.length; i++) {
cR[i]=i+1;
}
Random random = new Random();
//定義一個字符串數組,用來存放教室與學生的對應關系,長度為學生數量
String[] classToStu=new String[studentClassNum];
//遍歷教室
for (int i = 0,j=0; i < sR.length && j //產生一個隨機編號,編號不大于學生最大編號 int z = random.nextInt(studentClassNum); for (int k = 0; k < sR.length; k++) { if(z==sR[k]){ classToStu[j]=i+":"+z; sR[k]=0; }else{ //是參數回歸,也就是重新這一次操作 i=i-2; j=j-1; //跳出for循環(huán) break; }}}} 3 結果測試 經過測試,系統(tǒng)可以正常運行,部分測試頁面截圖如下。 4 結語 本系統(tǒng)是根據高校教務管理人員的需求,結合高校學生信息管理的特點開發(fā)的,整個系統(tǒng)具有良好的實用性和可擴充性,已經考試應用于考試安排中,能滿足院系環(huán)境下的考試管理需求。后續(xù)研究將從界面的美觀性、功能的完整性等方面加以改進,提高系統(tǒng)易用性和普適性,更好的服務于高校信息化工作。 圖4 系統(tǒng)主界面 圖5 座次表 【參考文獻】 [1]婁青.利用VBA在Excel中開發(fā)普通高中考試排座系[J].中國教育信息化,2012. [2]李正慧.排課系統(tǒng)數據表的設計與功能的實現[J].數字技術與應用,2011. [3]周玉芬,杜猛,宋明慧.使用VC++開發(fā)考場隨機排座系統(tǒng)[J].電腦編程技巧與維護,2008. [4]徐欣,陸陽,金紅.考試排位系統(tǒng)[J].電子科技大學學報, 2003.