黑子微
部队军事训练在线抽考系统的研究与开发
黑子微
(山西省军区数据信息室,山西 太原 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—),男,河北赵县人,本科,助理工程师,研究方向为计算机编程、网页设计制作、数据库维护。
〔编辑:严丽琴〕