网上调查统计系统的设计与实现
2010-03-20刘少卿何铤薛保民
刘少卿,何铤,薛保民
(工业和信息化部电子第五研究所,广东 广州 510610)
1 引言
互联网已成为获得信息、进行沟通的重要媒体和渠道,利用互联网来采集数据,可以在更广泛的区域内快速回收问卷,大大提高数据处理的效率,而且数据统计灵活可靠,同时节约成本。因此,设计并实现一个可靠的网上调查系统是很重要的。在此,将对笔者所开发的多数据项、问题类型多样的网上调查系统的设计与实施过程进行相应的介绍,供参考。
2 系统需求
a)总体需求
调查对象约500家全国各地区企业,在互联网上进行填报,支持多用户同时填报。调查内容有四大部分,分别为企业基本信息、人员信息、培训信息和教育信息,每部分需调查数据项约100个;调查问题有填空、选择和排序等类型。
b)用户权限需求
企业用户在网上填报的数据能够提供给管理员远程查看,管理员分为地区管理员、总管理员和系统管理员3种角色。管理员能实时地查看每个数据项的数据和汇总情况。
c)数据填写需求
调查表数据项多,有填空、单项选择、多项选择和排序等类型。
d)数据存储需求
由于数据项较多,需要具有随时保存数据的功能。如果每次保存都需要验证数据的合理性,就会给用户带来麻烦,所以需要实现随时保存数据,而且不需验证数据合理性的功能。
e)数据验证需求
需要验证所填数据的合理性,确保调查问卷的数据真实、有效。
f)数据统计需求
每个数据项都需要统计或汇总,而且需要各地区、行业等分类条件。
g)系统界面需求
需要从方便用户使用的角度来考虑,能满足用户随时随地注册、登录、填报和修改问卷。
3 工作流程描述
主要流程是设计网上调查表、发布调查平台网络地址、用户注册登录、填写调查表、提交调查表、后台数据处理以及数据统计等过程。
网上调研的工作流程可简地单描述如图1所示。
图1 网上调研流程描述
4 系统架构
本系统以B/S架构为主,程序安装和升级、程序更新只需要管理员在服务器上完成,客户端完全通过IE浏览器实现;一部分事务逻辑在前端实现,但是主要事务逻辑在服务器端实现。方便用户随时随地填报调查问卷。
a)操作系统
采用Windows 2003 Server,它比Windows 2000的安全性高,具有Windows防火墙,根据需要向互联网开设80端口。
b)WWW服务器
采用微软Internet Information Services(IIS6.0)。
c)数据库系统
采用Microsoft SQL Server 2000。从用户需求、安全性和可扩展性方面综合考虑,认为采用SQL Server 2000是最合适的选择。
d)开发语言
采用ASP动态服务器语言,SQL数据库查询语言以及Javascript、Vbscript和AJAX客户端脚本语言。
5 系统设计与功能实现
5.1 数据表设计
数据表主要包括用户表、用户权限表、调查问卷表以及其它属性表。
调查问卷表根据调查内容分为四部分,根据每一部分的内容设计一张表(如果将几部分内容都设计在一张表上,则数据项过多,表的空间有限制,也不利于数据统计)。4个调查问卷表如下:
1)Q_co_info基本信息表;
2)Q_staff_info人员信息表;
3)Q_trai_info培训情况信息表;
4)Q_tech_info教育情况信息表。
4个子表以一个调查调查问卷编号Q_NO为公共关键字 (Common Key)。调查系统各子表关系如图2所示。
图2 调查系统各子表关系
5.2 公共函数
我们可以将系统中需要经常调用到的公共程序提取出来并编成公共函数,统一存储在一个文件里(例如Function.Asp),在各个程序文件里引用这个公共文件 (例如:<!--#include file="Function.asp"-->)。以下为主要的公共函数:
a) Login ()
检查用户是否登录,如果未登录则弹出登录框要求登录。
b) ValidModuleRights( Admin_ID, Module_Alias)
检查管理员是否拥有某个模块的权限。
c) Replacestr (RepStr)
替换字符串的单引号,防止SQL注入。
d) ReplaceStrBr (RepStr)
将字符串中的回车和空格替换成相应的HTML字符。
e) ValidHostName ()
检查前后页面地址的来源是否一致。
f)IsClientConnect ()
检查客户端是否仍然保持连接请求。
g) ValidSystemModuleRights (User_ID, Module_Alias)
检查系统用户是否拥有某个系统模块的数据管理权限。
h) reInteger (Str, returnStr)
将字符值或空值转为合法数据,并可防SQL注入。
5.3 全局Session变量
在系统中经常需要用到的变量,例如用户的编号 (User_ID),我们将其存储为Session变量,只要不退出调查系统和关闭浏览器,变量就一直存在,系统可以随时提取该变量。以下为本系统主要的SESSION变量:
1)Application("ConnStr") ODBC数据源连接字符串;
2)Session ("Admin_ID") 管理员ID;
3) Session ("User_ID") 用户ID;
4)Session("Group_ID") 管理员组别ID;
5)Session("Sheng_ID") 用户区域标识ID。
5.4 数据检验
数据检验分为Javascript客户端检验程序和服务端检验程序两部分。
客户端主要检验每一个输入框所输入的数值是否符合要求,因为需要检验的项多,将检验程序独立成一个文件 (例如文件名为:Check_1.js),在表单执行时引用,引用语句如下:
<script language=" javascript" src="/js/Check_1.js" ></script>
这样就可实现使脚本程序与HTML代码分离,既方便编程,又提高页面的读取速度。
服务端检验程序是最后一个总检验,检验时系统从数据库里读取所填报的各项数值,进行求和等运算,判断是否存在数值前台矛盾的情况。例如:人员总数应等于各类人员总数之和,人员工资总额应小于企业总产值。
5.5 数据存储
数据存储上需要实现的关键是用户能随时保存数据。
为了保证数据的准确性,调查数据需要验证,但如果每次存储都验证,就会给用户带来麻烦。所以必须设计一个可以随时存储的程序,例如:如果数值型的数据用户未填或填了非法数据,就用正则表达式的方法进行过滤处理。将非法数值转换成合法数值。用这个函数:
function reInteger (Str, returnStr)
dim temp
if not isnull (Str) and Str<>"" then
dim re
set re=New RegExp
re.Pattern=" [^d]"
re.Global=True
re.IgnoreCase=True
re.MultiLine=false
temp=re.Replace (str, "")
if temp="" then temp=returnStr
else
temp=returnStr
end if
reInteger=Clng (temp)
end function
以0代替不合法的数值为例:reinteger(“用户所填数据”,0)
该函数的意思是用户如果输入的是非法数据,经过该函数处理后,将返回0。
通过以上方法,用户在填报中可以随时保存,重新登录可继续填报,点击检验按钮可以对数据进行检验。数据存储与检验功能键如图3所示。
图3 数据存储与检验功能键
5.6 数据汇总与查询统计
根据查询条件采用SQL语句进行数据汇总,例如:按地区、行业、性质多条件进行汇总。
汇总 SQL语句:select sum (字段 1), sum(字 段 1), sum(字 段 n) from table1 where sheng_id=’ 地区 ID’ and co_filed=’ 行业 ID’and co_nature=’性质ID’。单个数据与汇总数相比较,生成比例数据和平均值数据。可以用图形的方式进行展示,如图4所示。
图4 以饼图方式显示统计结果
5.7 网页制作
主要利用 ASP、HTML、Javascript、Ajax和CSS等语言实现。下面主要介绍利用程序来生成调查问卷录入界面的经验。
由于需要填写的数据表格较多,一个调查表就有近百个数据项,如果一项项地制作,就会变成重复作业,不科学,改动起来也麻烦。在这里我们采用程序来获取数据库字段并生成录入界面的方法。
获取数据库字段名称的方法是用读取数据库sql server系统表 syscolumns的记录。
采用的SQL语句如下:
SELECT name FROM syscolumns WHERE (id=OBJECT_ID (N'[表名]')) ORDER BY colid
上面语句的意思是将调查子表的所有数据项读取出来。下面利用ASP循环语句生成网页脚本。
ASP代码如下:
<%sql=" SELECT name FROM syscolumns WHERE (id=OBJECT_ID (N'[表名]')) ORDER BY colid”
rs.open sql,conn, 1, 1
do while not rs.eof
%>
<inputtype= ” text” name= ” <%=rs(“name”) %>” >
<%
Rs.movenext
loop%>
上面程序的主要意思是用ASP语言的Do While….LOOP循环语句将数据库中的字段名称读取出来而生成调查问卷的录入界面。
采用此方法,不但减少了手工制作的繁琐工作,而且在数据字段增加或删除后,录入界面也会自动更新,不需要再进行修改。
6 结束语
系统设计除了上述内容外,还需要从系统安全性、系统稳定性和数据完整性等方面考虑,并进行相应的策略设置。
通过本系统,我们完成了3次全国范围的网上调查。实践证明,系统设计具有足够的可靠性,能够顺利完成网上调查项目。
[1] 卢守东.通用网上调查系统的设计与实现 [J].广西财经学院学报,2006,19(增刊):327-329.
[2] 柏宏权.用ASP实现网上调查系统 [J].福建电脑,2002, (3): 25-26.