基于移动终端的实验室安全教育考试系统开发
2019-08-22倪红军
倪红军,李 豪,朱 瑶
(南京师范大学泰州学院,江苏 泰州 225300)
0 引 言
随着应用型人才培养的需要,应用型本科大学的实践课占比越来越高,从而为实验室的管理也带来了一些问题,其中实验室的安全教育问题尤为突出。目前大多数高校的实验室安全教育和考试平台采用传统的PC端Web网站,但是随着移动互联网技术的发展,传统的PC端Web网站需要向移动终端迁移。虽然传统的Web网站能够在移动终端的浏览器上打开,但是也存在两个方面的缺陷:
(1)由于屏幕尺寸、设计风格、网页内容展现等兼容性的问题,使移动终端用户体验不佳;
(2)实验室安全教育和考试必须在在线状态下才能进入系统完成,学生集中在线容易造成系统过载,受时间和空间的限制[1-4]。
针对目前基于Web平台的实验室安全教育考试系统的缺陷,设计开发一个基于移动终端的实验室安全教育考试系统具有重要的理论意义和应用价值。
1 基于移动终端的实验室安全教育考试系统功能构建
1.1 系统功能的构建
实验室安全教育考试系统包括4个功能模块,即登录模块、学习模块、考试模块和回看模块。
(1)登录模块:学生输入学号、密码并从学习模式、测试模式或回看模式中选择一种操作模式后,系统会根据学号判断学生的专业类别,然后从题库中选择符合学生专业类别的实验室安全教育考试题库。
(2)学习模块:显示对应专业题库中的题目和标准答案,以便学生在这个模块中学习与本专业相关的实验室安全知识。
(3)考试模块:从对应专业的题库中随机抽取50道题(其中35道判断题、15道选择题)组成实验室安全考试试卷,学生在30分钟内完成后可即时判断正误,并保存考试时间、考生答案和考试成绩。每一位学生可以考3次,以最高分为最终成绩上传校园网服务器。
(4)回看模块:学生可以查看每次考试试卷的试题、考生答案和标准答案,以便学生对做错的题目反复学习,从而更好地掌握实验室安全知识。
1.2 安全知识题库的构建
不同学科或专业的实验室对实验室安全教育和考核的内容一般不可能完全相同,所以在设计安全知识题库时,要根据学校的实际情况进行分类[5-8]。以南京师范大学泰州学院实验室安全教育考试内容为例,全校的实验室安全教育内容可以分为4类,即面向公共计算机实验室、文科类实验室、经管类实验室和音体美艺术类实验室的通识类安全知识,面向电子信息类实验室的电子信息类安全知识,面向电力能源类实验室的电力能源类安全知识,面向化学生物工程类实验室的化生类安全知识。通识类安全知识题库内容主要涉及防火防盗安全、用电用水安全等常规安全管理,由资产与实验室管理处负责;电子信息类、电力能源类和化学生物类安全知识涉及内容具有较强的专业性,题库分别由信息工程学院、电力学院和化学与生物工程学院负责。
2 基于移动终端的实验室安全教育考试系统实现
目前,使用最多的移动终端采用的是Google公司的Android平台,下面以Android平台为例介绍移动终端的实验室安全教育考试系统的实现过程。
2.1 数据库设计与连接
该系统采用了Android系统为开发者提供的一个轻量级数据库——SQLite。由于SQLite是进程内的数据库引擎,因此不存在数据库的客户端和服务器端。使用时一般只需要附带上它的一个动态库,就可以使用它的全部功能,而且其运算速度快、占用资源少,很适合在移动终端设备上使用[9-10]。SQLite采用动态数据类型,使用时会根据存入的具体值自动判断其数据类型,通常包含NULL、INTEGER(整数)、REAL(浮点数)、TEXT(字符串文本)和BLOB(二进制对象)五种数据类型。
2.1.1 数据库设计
SQLite通过文件来保存数据库,一个文件就是一个数据库,一个数据库可以包含多个表。为了便于维护和管理数据库文件,应用程序的数据库文件通常保存在移动终端设备的外部存储器上。当第一次运行考试系统时会自动连接网络下载数据库文件并保存到外部存储器的指定位置[11-13]。该系统的数据库school.db包含学生信息表stud(表结构如表1所示)和题库表tiku(表结构如表2所示)。
表2 题库信息表(tiku)结构
2.1.2 数据库连接
Android系统提供了创建和使用SQLite数据库的API,这些API被封装在SQLiteDatabase类中,该类中提供了数据库操作的常用方法。下面的代码表示打开移动终端设备外部存储器中DB文件夹中的school.db数据库文件,数据库打开后,就可以使用SQLiteDatabase类中增、删、改、查等方法对数据库文件进行操作。
String sdpath=Environment.getExternalStorageDirectory().toString();
String filename=sdpath+File.separator+"DB"+File.separator+"school.db";
SQLiteDatabase sqLiteDatabase=SQLiteDatabase.openOrCreateDatabase(filename,null);
2.2 登录模块的实现
登录模块的界面如图1所示。界面采用RelativeLayout布局方式,在布局文件的最上部和最下部都使用了ImageView组件显示图片,中间使用了2个EditText组件分别用于输入学生的学号和密码,使用了1个Spinner组件用于选择操作模式,使用了2个Button组件用于登录和退出。
图1 登录界面
当登录界面运行后就应该加载Spinner组件中的内容(学习模式、考试模式和回看模式),并实现单击选择登录模式事件,即在登录模块的Activity中用如下代码实现:
private SpinnerspinnerMode;
private String[] modes=new String[]{“学习模式”,“考试模式”,“回看模式”};
privateint modeId=0;//0-学习模式,1-考试模式,2-回看模式
ArrayAdapter
spinnerMode.setAdapter(modeArray);
spinnerMode.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public voidonItemSelected(AdapterView> parent,View view,int position,long id) {
modeId=position;//操作模式
}
});
当单击“登录”按钮后,首先对输入的学号和密码进行正确性判断,同时根据学号检索出该学生的所属院系。如果输入的学号和密码正确,就根据选择的登录模式启动相应Activity,并将学号和所属院系通过Intent传递给对应的Activity,以便对应Activity启动时加载对应类别的题库。“登录”按钮的单击监听事件关键代码如下:
Cursor cursor=sqLiteDatabase.query(“stud”,new String[]{“stunumber”,“stupwd”,“studep”},“stunumber=? and stupwd=?”,new String[]{username, usepwd},null,null,null);
if(cursor.getCount()>0) {//用户名和密码正确
Intent intent=new Intent();
switch (modeId) {
case 0://学习模式
intent=new Intent(MainActivity.this, StudyActivity.class);
……;//将学号、所属院系通过intent传递给学习模式Activity
MainActivity.this.startActivity(intent);
break;
case 1://考试模式
……
case2://回看模式
……
}else {//用户名或密码不正确
……//给出错误提示信息
}
2.3 考试模块的实现
考试模式界面如图2所示。
图2 考试模块界面
进入考试模式后屏幕的显示模式设置为横屏显示效果,即修改配置文件AndroidManifest.xml,代码如下:
2.3.1 组 卷
考试模式启动时就需要打开数据库文件,同时根据登录模块传递来的所属院系(studep)从题库表(tiku)中查询出所有符合条件的判断题和选择题,并保存到对应的Cursor中;然后从对应的Cursor中分别筛选出35道判断题和15道选择题的试题编号保存的ArrayList中组成该学生的考试试卷,其关键代码如下:
jcursor=sqLiteDatabase.query("tiku",new String[]{“tino”,“ticontent”,“titype”,“ti1”,“ti2”,“ti3”,“ti4”,“tianswer”,“ticlassid”},“titype=? and ticlassid=?”,new String[]{‘0’,studep},null,null,null);//判断题
for (int i=0;i<35;i++) {//生成35道判断题
int index=(int) (0+Math.random()*cursor.getCount());
while (indexAL.contains(index)) {//取不重复的试题编号
index=(int) (0+Math.random()* cursor.getCount());
}
indexAL.add(index);//试题编号
answerAL.add(“”);//存放标准答案
userAL.add(“”);//存放考生答案
}
……//15道单选题实现代码类似
2.3.2 显示题目
由于做完一道题后可能会继续显示下一道题目,也可能会向前翻看做过的题目,所以该系统在实现题目显示功能时定义了一个showTimu(Cursor cursor,int index)方法,根据传递的题型和索引号显示题目内容和选项。其关键代码如下:
voidshowTimu(Cursor cursor,int index) {
cursor.moveToPosition(index);
tvTimut.setText((showIndex+1)+“、”+cursor.getString(1)); //题目内容
tv1t.setText(“A.”+cursor.getString(3)); //选项A
……//选项B、C、D实现代码类似
Stringtvanswer=cursor.getString(7); //答案
answerAL.set(showIndex,tvanswer);//将标准答案添加到answerAL的showIndex位置
}
当考生单击图2中所示的A、B等选项时会调用showTimu()方法显示下一道题相关内容,并将当前单击的选项保存到存放考生答案的ArrayList(userAL)中;当考生单击“重做前一题”按钮时会调用showTimu()方法显示前面一道题相关内容。
2.3.3 试卷评分
考试时间一到或者单击“提交试卷”按钮后,考试界面上的试题选项全部禁用,并将学生作答的答案与试卷的标准答案逐一比对。如果答案相同,则计2分,并保存学生学号、本次考试试卷的试题编号、标准答案、考生答案和考试时间。其关键代码如下:
tv1t.setEnabled(false);//一旦交卷,选项A禁止使用
……//选项B、C、D禁止使用代码类似
int score=0;
for (int i=0;i if(userAL.get(i).toString().length()!=0&& answerAL.get(i).equals(userAL.get(i))) score=score+2; } Toast.makeText(TestActivity.this,“你的得分为:”+score,Toast.LENGTH_SHORT).show(); ContentValues values=new ContentValues(); values.put(“testids”,indexAL.toString());//试题编号 ……//标准答案、考生答案、当前时间、分类实现代码等类似 String whereClause=“stunumber=?”;//更新条件以登录的学号为依据 String[]whereArgs={studnumber};//登录界面通过Intent传递来的学号 sqLiteDatabase.update(“stud”,values,whereClause,whereArgs); 学习模式界面如图3所示,学习模式界面启动时根据登录模块传递来的所属院系(studep)从题库表(tiku)中查询出所有符合条件的试题并保存到对应的Cursor中,然后将试题内容、选项和标准答案显示在对应位置,通过“向前学习”、“向后学习”按钮实现显示前一道题目和后一道题目。 图3 学习模块界面 回看模式界面如图4所示,回看界面启动时根据登录模块传递来的学号从学生信息表(stud)查询该学生的试卷信息,也就是该学生的试卷题目索引号、标准答案和考生答案;同时将tiku表中的所有题目信息保存在Cursor中,然后通过单击“向前查看”和“向后查看”按钮将试卷题目索引号对应的题目内容、选项、标准答案和考生答案显示到对应的组件上。 图4 回看模块界面 随着移动应用开发技术的发展,应用于移动终端设备的移动App为实验室的安全教育和考试工作开辟了一个新的途径和新的思路。学生在进入实验室之前通过移动终端进行必要的实验室安全知识学习和考试,可以进一步提高他们的安全防范意识,极大地减少实验室管理过程中人为因素的安全隐患[14-15]。在移动互联网技术的支持下,开发的基于Android平台的实验室安全教育考试系统,可以让学生通过移动终端随时随地进行学习和考试,一方面大大提高了学习效率,另一方面可以从根本上预防和减少实验室安全事故的发生。2.4 其他模块的实现
3 结束语