黑子微
部隊軍事訓練在線抽考系統的研究與開發
黑子微
(山西省軍區數據信息室,山西 太原 030000)
針對部隊軍事訓練抽考的隨機性、公正性問題,設計在線抽考系統,提出了基于JavaScript實現的隨機抽考系統的設計思路,介紹了系統的設計原理、關鍵技術和實現方法,對當前各類開發工具進行比對分析,重點研究了抽考過程的邏輯關系,排除開發過程中遇到的邏輯錯誤和各類影響抽考公正性的情況,詳細闡述了系統架構和運作原理,為各部隊組織訓練抽考提供了幫助。
抽考系統;軍事訓練;邏輯;語言
當前,部隊軍事訓練越來越貼近實戰,各項訓練標準不斷細化,各項軍事訓練考核成為了重點問題。對于師以上單位,下轄單位多,統一組織考核難度大,機關組考周期長;作戰部隊、信通保障部隊、省軍區部隊總體呈現出駐點分散、保障多元的態勢,對于覆蓋面廣、保障范圍大的單位必須立足各部團自我考核,考核標準無法統一;由大機關統一劃分考核編組,采取“結對互考”的方式存在多種人為因素,難以嚴格按照考核標準檢查軍事訓練成果。因此各單位在組考過程中,需要一個能夠重復利用、完全隨機的在線抽考系統,實現各單位互考互評,以保證考核的公平性,提升組考效率。
現有的隨機結對考核方式,多采取乒乓球彩票搖號機、抽簽抓鬮等方式,無法讓各部團在線實時了解抽考結果。本文所研究開發的在線抽考系統,依托網頁瀏覽器,由軍事綜合信息網接入,可根據考核范圍,適時利用視頻會議系統推送各單位,系統維護無成本,重復利用率高,界面簡潔明了,抽考結果實時公布,極大節省了組考成本。
解決大機關組織考核過程中,下轄單位結對互考的隨機抽點問題,明確主考、被考單位和考核內容,節省考務工作準備時間。
考核過程中,根據單位數量劃分為輪次。每一輪次完成3次隨機抽取。流程如圖1所示。

圖1 整體構想
每一輪次分別記錄抽考結果,輪次結束后,將所有結果生成電子表格,以備公示。
XX單位在線抽考系統邏輯關系如圖2所示。

圖2 邏輯關系圖
考核準備:將參加考核單位范圍、考核內容錄入服務器端,啟動服務器,等待響應。
考核實施:啟動客戶端,點擊主考單位抽取欄,向服務器發送請求,由服務器在所有參加考核單位中抓取數據并返回,隨機抽取主考單位A;點擊被考單位抽取欄,向服務器發送請求,由服務器在剩余參加考核單位中抓取數據并返回,隨機抽取被A考核的單位B;點擊考核內容抽取欄,根據被考核單位B的單位性質、訓練內容抽取考核內容;開始下一輪次抽考,直到所有單位抽完;關閉客戶端,服務器恢復待機狀態。
考核結束:所有單位抽考完畢后,由服務器記錄輪次抽考結果,反饋到客戶端,并生成Excel表格備查。
開發流程如下:①根據組考單位需求,設計抽考程序界面,搜集本單位照片素材,進行圖像處理,確定界面風格。②根據在線抽考程序界面預留鍵位像素位置和抽考結果顯示位置,進行前端(客戶端)UI部分的開發。在開發過程中為所有鍵位預留動作函數位置,根據不同單元格像素尺寸,分別確定顯示字號。③進行服務器端的開發,為使程序更加扁平化,提高運行速度,放棄數據庫的使用,采取直接從Excel表格抓取數據的方式。④進行前端(客戶端)邏輯部分的開發,利用服務器返回的數據和預留動作函數完成數據交互。
2.5.1 開發工具的選擇
當前主流語言有Python、C++、Java、JavaScript、VisualBasic等,根據各單位運行平臺、系統實現目的的不同,選擇適應平臺多元、技術成熟、插件廣泛的語言。
2.5.2 邏輯部分的設計
存在三種不成立的情況,分別如下。
第一種情況:如果完全隨機抽取,可能存在A單位抽到了B單位,而B單位恰好抽到了A單位,即A考核B,B又考核A,這樣一來考核有失公正性。隨機互抽邏輯錯誤如圖3所示。

圖3 隨機互抽邏輯錯誤
第二種情況:假如有A、B、C、D、E共5個單位參加考核,抽取結果為A考核B,B考核C,C考核D,D考核A,剩下E只能自我考核。剩余單位自我考核邏輯錯誤如圖4所示。

圖4 剩余單位自我考核邏輯錯誤
第三種情況:假如有A、B、C、D、E共5個單位參加考核,抽取結果為A考核B,B考核C,C考核A,剩下D,E兩個單位無其他選擇,造成的結果同第一種情況。剩余單位互相考核邏輯錯誤如圖5所示。

圖5 剩余單位互相考核邏輯錯誤
2.5.3 數據的抓取
如果采用數據庫,則系統的體量增大,數據調用造成響應時間延長,延長開發周期;如果每次抽考修改服務器代碼,則抽考過程太過煩瑣專業,達不到提高組考效率的目的。本系統擬采用從Excel抓取數據,但需要解決數據從Excel表格流向服務器后臺的問題。
2.5.4 數據的交互
服務器抽考結果如何與前端(客戶端)實現往來,前端(客戶端)請求如何向后臺(服務器)發送是一個問題。
系統整體架構如圖6所示。

圖6 系統整體架構
3.1.1 客戶端部分
HTML5+CSS3:HTML5是構建Web內容的一種描述方式,意為超文本傳輸,適配目前所有主流瀏覽器,當前各類網頁都基于該標準開發。CSS3是CSS的最新版本,意為層疊樣式表,通過對自定義樣式表選擇符的引用,確定網頁各元素的外觀。HTML5和CSS3確定了網頁的內容和樣式,是前端UI部分開發的核心。
JavaScript(JS):該部分是系統開發的核心。JS是一種腳本語言,主要面向Web開發,具有函數優先、輕量化、無類型的特點,普適性好。在開發過程中,該語言主要完成抽考系統前端(客戶端)邏輯部分的編寫,同時能夠控制各單位隨機閃現的滾動效果,并根據單元格字數多少調整字號。此系統用到了JS的3個插件和技術,即jQuery、JSON、AJAX。jQuery是JS框架,能夠極大地減少代碼量,精準地選擇到每一個鍵位和顯示框;JSON主要用以完成數據的模塊化,服務器將數據轉換成JSON格式打包發送至客戶端,由客戶端轉換成JS對象,解析成字符串,在頁面顯示;AJAX主要用以完成異步數據交換,由于網頁中不同部分顯示了不同函數的返回值,在切換抽考單位的過程中,需要在不刷新整個網頁的情況下完成局部數據更新,因此必須引入此項 功能。
該部分將轉化成字符串的數據保存為集合,集合由不同數組構成,每個單位包含的信息為一個數組。數組與集合如圖7所示。

圖7 數組與集合
Tomcat:主要用以完成前端(客戶端)與后臺(服務器)之間的數據交互,需要在客戶端與服務器分別部署。對于有特別需求的單位,可以將服務器省略,將同一臺終端既作為服務器又作為客戶端,Tomcat發揮了橋梁的作用。
3.1.2 服務器部分
Java:該部分是服務器端的核心。通過Java主要完成Excel數據表內容的抓取并打包成JSON格式。由于JSON是基于JavaScript的功能,通過Java語言無法直接將數據轉換為JSON格式,因此在開發過程中需要在開發環境lib中單獨掛載JSON的jar包。
Tomcat:作用與前端(客戶端)的Tomcat相似,用以完成數據交互。
3.1.3 數據流向
數據流向:原始數據—服務器端(Java)打包數據—客戶端(JS)解析數據—客戶端頁面顯示。
3.2.1 開發工具比選
由于前端是整個系統的核心,因此優先考慮適合前端開發的語言。JavaScript普適性好,能夠與HTML5、CSS3無縫銜接。服務器端可以選擇C++、Python,但C++架構復雜,多繼承、指針等運用復雜,增大開發難度;Python與JavaScript無法通過JSON工具包實現數據交互。與之相比,Java成型時間較早,相對成熟,且與JavaScript語法結構相近,數據交互簡單,因此后臺開發用Java完成。
開發環境選擇Idea,搭配JDK采用目前免費的jdk14。Idea平臺可同時編譯并運行前端和后臺代碼,編譯方式智能程度高。
3.2.2 邏輯問題的排除
3.2.2.1 完全隨機過程中的A、B互相抽考問題
在每個單位的數組中,添加末位標識符,作為是否能夠被抽考的依據,每次抽取先對末位標識符進行判斷,如果是“Y”則表示可以進行抽取,如果是“N”則表示跳過此單位,更改末位標識符如圖8所示。抽取過程中,當A作為主考單位,抽中了B,那么在B作主考單位時,通過條件語句將A數組的末位標識符改為“N”,跳過A單位。

圖8 更改末位標識符
3.2.2.2 單剩1個單位時自考問題
該問題需要在備選單位剩余2個時進行邏輯語句設計,并且在每個單位參與完抽考后,將前述末位標識符都變更為“N”。例如,在A抽考B,B抽考C,C抽考D的情況下,主考、被考單位分別剩D、E和A、E兩個,一旦D抽考到了A,那么邏輯錯誤將出現。因此需要在此時將隨機打破,令D強制抽取E,剩余單位唯一的邏輯錯誤排除如圖9所示。

圖9 剩余單位唯一的邏輯錯誤排除
3.2.2.3 剩余最后2個單位互相抽考問題
在隨機的基礎上,對單位抽取加以限制,確保每個單位能當主考,每個單位都有機會被考。可在備選單位剩余3個時進行邏輯語句設計。例如,在A抽考B,B抽考C的情況下,一旦C隨機抽到了A,邏輯錯誤將出現。因此當C作為主考單位時將隨機打破,將A末位標識符改為“N”,令C強制抽取D或E,剩余2個單位互相抽考邏輯錯誤的排除如圖10所示。

圖10 剩余2個單位互相抽考邏輯錯誤的排除
3.2.3 數據的抓取
由于不考慮使用數據庫進行開發,因此需要掛載能夠與Java兼容,且支持從Excel表格抓取數據的工具,數據抓取需完成從Excel表抓取數據和將抓取的數據解析成JavaScript能夠讀取的內容兩個工作。需要的工具如圖11所示。
數據抓取選擇jxl.jar工具包,該工具包是由Java編寫而成,專用以操作Excel表格的工具類庫。系統主要用到了其中的Sheet接口、WorkBook類和read.biff包下的BiffException類,Sheet接口提供了全部讀、寫類方法名,WorkBook類提供了Sheet接口的具體實現方法,BiffException類提供了從Excel表格抓取數據的異常處理。
開發過程中將文件路徑傳入getWorkBook()方法獲取工作表對象,再由getSheets()方法獲取工作簿,由getRows()方法獲取每行數據,最后遍歷各行數據,完成數據抓取,具體代碼如圖12所示。

圖11 數據抓取所需工具包

圖12 數據抓取工具包的使用
抓取數據解析選擇json.jar工具包,主要用到了其中的JSONObject類和JSONArray類。
開發過程中通過操作JSONObject的實例化對象,利用其put()方法,將抓取的字符串寫入內存,再通過操作JSONArray的實例化對象,利用add()方法,將存入的JSONObject對象轉化為集合,供向前端發送使用。具體代碼如圖13所示。

圖13 數據解析工具包的使用
3.2.4 數據的交互
數據交互基于Tomcat完成,利用Tomcat自帶工具包servlet-api.jar完成數據交互。主要用到http包中的HttpServlet類、HttpServletRequest類、HttpServletResponse類和ServletException類,http包中的類用于數據發送和反饋,ServletException類用于異常處理。數據交互所需工具包如圖14所示。

圖14 數據交互所需工具包
開發過程中通過繼承HttpServlet類、執行父類構造方法和重寫doGet()方法實現數據交互。關鍵代碼如圖15所示。

圖15 數據交互工具包的使用
該系統可以保證軍事訓練抽考過程公平公正、完全隨機,排除了抽考過程中的人為因素,大大減輕了組考負擔,主考單位、被考單位、考核內容一目了然,尤其適合于建制級別高、覆蓋面廣、駐點分散的單位,可以在各單位組織抽考過程中發揮重要作用。
TP311.5
A
10.15913/j.cnki.kjycx.2021.01.005
2095-6835(2021)01-0013-04
黑子微(1992—),男,河北趙縣人,本科,助理工程師,研究方向為計算機編程、網頁設計制作、數據庫維護。
〔編輯:嚴麗琴〕