当前位置:文档之家› 支持逻辑跳转及填答约束的网络问卷调查系统设计与实现

支持逻辑跳转及填答约束的网络问卷调查系统设计与实现

支持逻辑跳转及填答约束的网络问卷调查系统设计与实现作者:卢锦运等来源:《软件导刊》2015年第01期摘要:随着互联网的普及和信息技术的迅猛发展,网络问卷调查已成为数据、资料收集的一种常用手段。

传统网络问卷调查系统普遍缺少题目逻辑跳转和用户填答校验功能,针对这一情况提出一种支持逻辑跳转和填答约束的网络问卷调查系统的实现方法。

该方法基于校验规则实现了对用户填答的约束,同时通过设置跳转逻辑增强了问卷的灵活性和适应性。

该方法在2013年重庆市基础教育质量监测教师问卷调查中得到应用,结果表明,该方法能够提高回收数据的准确性与规范性,具有较强的适用性。

关键词:网络问卷调查系统;JSON;逻辑跳转;填答约束;MongoDbDOIDOI:10.11907/rjdk.143621中图分类号:TP319文献标识码:A 文章编号文章编号:16727800(2015)0010107040 引言问卷调查是数据、资料收集的一种常用手段。

传统的问卷调查通过人工方式发放、回收、统计问卷。

随着互联网的普及和信息技术的迅猛发展,传统人工问卷调查方式越来越无法满足社会发展和人们生活的需求,网络问卷调查以其低成本、高可靠性、高效性、互动性等特点逐渐成为当前一种主流的调查方法[7]。

当前网络问卷调查实现方式主要有两种:①HTML静态页面。

这种方式将所有要调查的问题做成HTML页面后上传至服务器,当更新题目信息时需要重新更新HTML页面。

因此,静态页面方式效率低下且需要专业人员完成;②基于ASP、PHP等编程语言与数据库相结合制作而成的动态页面。

该方式效率较高,操作更为方便,是目前的主流做法。

迄今为止,市面上出现了多种网络问卷调查软件,这些软件基本可以实现数据采集功能,但是大多缺乏对用户输入数据的动态校验,从而使后期对调查数据清理的工作量巨大,同时由于无法设置跳转逻辑题而使问卷灵活性和适用性较差。

本文拟结合重庆市基础教育质量监测教师问卷调查系统的设计与实现环节探讨在网络问卷调查系统中如何实现用户填答的约束校验及题目的逻辑跳转功能。

1 系统设计1.1 系统架构三层模式具有安全性高、维护成本低、各层之间耦合度较低等优点,因此本文采用了Web 显示层、业务逻辑层和数据层(即B/S/D)的三层模式架构,如图1所示。

图1 三层模式架构Web显示层主要用于提供人机交互界面,本文中Web显示层通过JavaScript脚本语言实现以下功能:接收用户输入数据、校验用户输入数据、向服务器回传数据、根据用户填答动态生成下一题。

业务逻辑层主要接收客户端请求并将数据传给数据层,同时将处理结果返回至客户端。

本文在业务逻辑层采用三层开发框架RTC(RealThinClient SDK)。

RTC采用HTTP 协议实现数据传输,具有效率高、稳定性好等优点。

数据层主要用于存储系统使用过程中产生的数据。

传统的数据存储方式主要采用Oracle、SQL Server、MySQL等关系型数据库,然而在大数据背景下,传统关系型数据库在高并发读写、高效率存储等方面越来越显得力不从心[1]。

鉴于重庆市基础教育质量监测教师问卷调查系统要在两小时内完成数万名教师问卷调查,在高频率的数据读写操作中,为了保证系统的稳定性,本文采用了并发性高、灵活性强、支持海量数据存储的NoSQL(Not-Only SQL)存储系统MongoDb[9]。

1.2 数据库结构设计MongoDb以keyvalue形式存储数据。

相比于传统关系型数据库系统的数据库、表(table)、记录(record)3个层次,MongoDb则由数据库、集合(collection)、文档对象(Documentoriented、BSON)3个层次组成[2],其中MongoDb中的collection对应于关系型数据库里的table。

与传统关系型数据库在使用前必须定义数据存储模型不同,MongoDb的数据存储模式是自由的(schemafree),即在同一个collection里可以有不同格式或类型的文档对象[3]。

MongoDb中一个collection的实例如下:{"_id":"1","USERNAME":"Tom","PASSWORD":"123456"}{"_id":"2","USERNAME":"LILY","AGE":"10","GENDER":"female"}{"_id":"3","USERNAME":"Peter","PWD":11111}虽然MongoDb的数据存储模式自由,但在一般情况下,为了便于数据管理,同一个集合内的文档对象都会以相同格式定义存储。

结合重庆市基础教育质量监测教师问卷内容及网络问卷调查的特点,本文设计了以下几个集合:用户集合(USER_INFO)、问卷集合(SURVEYS)、问卷题目集合(SURVEY_QUESTIONS)、结果集合(SURVEY_ANS)。

用户集合主要存储教师相关信息,包括教师登录问卷系统所需的账号和密码。

问卷集合用于存储问卷基本信息,包括问卷、问卷指导语以及问卷其它相关属性。

问卷题目集合用于存储每套问卷所包含的题目信息,包括、题目类型(本文设计了单选、多选、填空、问答4种题型),以及单选或多选类型问题中可供选择的选项信息、填答约束规则、跳转逻辑设置等。

结果集合则用于存放回收的调查数据,其结构根据问卷题目动态生成。

2 关键技术设计与实现2.1 数据传输格式在大规模、高并发的Web系统应用中,选择一种合适的数据传输格式至关重要。

JSON (JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,易于阅读和编码,同时它是JavaScript规范的子集[8],因此能很好地被大部分浏览器解析,避免了不同浏览器带来的兼容性问题。

另一方面,JSON在数据传输效率方面明显优于其它数据传输格式[4,5]。

另外,本文所采用的MongoDB数据库以BSON格式存储,而BSON 是一种类JSON二进制形式的存储格式,两者之间转换较为容易。

鉴于以上几点,本文选择JSON作为问卷系统的数据传输格式。

以下是以JSON描述一道题目的示例:{"ID" : "1","TITLE" : "目前,您正在使用的手机是什么品牌?","OPTIONS":"1=IPhone;2=三星;3=华为;4=联想;5=其它","TYPE" : "多选题","ATTACH" : "2;2;;5,6;","ISREQUIRED" : "1","CONSTRAIN": "{'atype':'multchoise','minc':'1','maxc':'2','mutex':'5'}"}该JSON对象包括7个元素:①题目编号(ID)为1;②题目(TITLE)为“目前,您正在使用的手机是什么品牌?”;③选项(OPTIONS)一共包括“IPhone、三星、华为、联想、其它”等5个选项,其对应的选项值分别为“1、2、3、4、5”,5个选项以“;”连接;④题目类型(TYPE)为多选题;⑤附加题(ATTACH)存储题目的跳转逻辑;⑥是否必做题(ISREQUIRED)值为1时表示必做,0表示选做;⑦填答约束(CONSTRAIN)为此题的填答规则。

2.2 填答约束为了减轻后期对问卷调查结果数据的清理工作,需要对用户填答的数据格式加以约束才能确保回收数据格式的统一,因此在问卷发布前需要设置好问题的填答规则。

上文介绍了题目JSON数据中CONSTRAIN元素为题目的填答规则。

本文通过对CONSTRAIN值的解析,调用相关校验功能实现对用户输入的约束。

若题目无需对用户输入进行约束,则该元素对应值为空。

题目的填答规则由问卷编制人员根据实际情况进行动态设置。

本文采用模块化思想,对用户填答校验部分进行模块化设计,传入约束规则、填答结果以及题目相关信息即可获得用户填答的校验结果,如图2所示。

图2 问卷填答校验模块下面分别以填空题、多选题为例介绍对用户填答约束的实现方法。

(1)填空题的填答规则主要用于约束用户输入为统一格式的值。

如:你的年龄?若此题没有设置填答规则,用户的填答可能会五花八门:30、30岁、三十岁、30、200等各种格式甚至是非合理的答案,要使填答结果统一为合理的英文数字,且对于教师而言年龄段一般在18到70岁之间,这道题的填答规则可设置如下:{'atype':'integer','minvalue':'18','maxvalue':'70'},这个规则中atype表示只允许用户填答整数,minvalue表示允许用户输入的最小值为18,maxvalue则表示允许输入的最大值为70。

通过设置这一规则,可以约束用户的输入只能为介于18~70之间的整数。

若无需限制用户输入的最小值或最大值,则可通过将minvalue或maxvalue对应的值设为空来实现。

同样,如果要约束填答结果为小数,则设置规则中的atype为number,如果填答结果为时间格式,则设置atype为date,并可以通过设置mindate和maxdate的值限制用户输入的时间范围。

图3为此题对应的效果图。

(2)多选题的填答规则主要包括限制用户选择选项的个数以及互斥选项的设置。

以2.1中的题目为例,该题的填答规则为:{'atype':'multchoise','minc':'1','maxc':'2','mutex':'5'} 。

该规则中atype值为multchoise,表示此规则为多选题的约束规则;minc值为1,表示最少需要选择一个选项;maxc值为2,表示最多只能选择两个选项;mutex为互斥选项,其对应的值为某一选项值,表示该选项不能与其它选项同时被选中。

相关主题