基于web的在线问卷调查系统
摘要
在科学技术和社会经济不断发展的今天,人们对各种各样新奇的事物以及品质都有了更高的要求。越来越多的组织或者个人迫切希望了解人们的状态及趋向,以更好的改善自己的产品或者提供更好的服务来博得生存,于是问题调研应运而生。然而传统的问卷调查体系需要印发大量问卷调查表并组织大量人力参与,这样不仅及其消耗人力物力,也不便于后期统计分析。所以本文所研究的基于web的在线问卷调查系统就是为了解决这些问题而设计的。
本文所研究设计的基于web的在线问卷调查系统,使用Nginx做为web服务器,使用php做为后台系统开发语言,采用mysql做数据存储服务器,并对整个系统做了详细的需求分析,业务逻辑设计以及数据库的设计。系统根据使用主体的不同分为三个不同的主体:平台、客户和用户。平台拥有最高权限,可以维护平台上的用户客户列表,可以管理和维护已有的问卷列表,维护题型库等等;客户则是系统需求的主体,拥有创建问卷,维护自身问卷列表和查看问卷提交结果的功能;而用户做为潜在的客户除了可以填写提交问卷外,同样可以在系统上创建自己的问卷并发布它。
本论文循序渐进的阐述了一个功能较为完善的基于web的在线问卷调查系统的设计过程。详细介绍了它的背景、现状、研究的目的与意义以及需求的设计具体实现。
关键词 :在线问卷,web,nginx+php+mysql
第1章 绪论
研究背景
随着社会经济的发展,越来越多的时候,人们时常需要快速而有效的获得大量信息,而人力成本越来越成为不得不考虑的因素。好在对于计算机应用日益普及的今天,技术的发展使得人们在处理大批量复杂化的数据更加的得心应手。特别是各种各样的在线web系统已经让人们的生活和工作方式发生了翻天覆地的变化。例如我们无需再到线下的实体店,才能购买到自己喜欢的商品,淘宝天猫已经提供了良好的在线购物体验。
现如今,社会经济高度发展,公司、社会组织机构等经常需要通过各种问题调研了解人们的状态以及他们的意图趋向,并期望通过此举像人们提供更加优质更加人性化的产品和服务。譬如一个公司想对市场进行调查,或者教育机构想对毕业生的就业意向进行调查,在这种涉及大规模人群的调查上面,如果采用的是传统的调查方式,则必然需要印发大量调查问卷以及大量人力资源的参与,具有调查周期长,缺乏灵活性,成本高等缺点。因而更加方便快捷,节约成本,周期性短的在线问卷调查是一种很好的选择,也是未来问题调研的一个方向,因为越来越多的人倾向于方便快捷的互联网。因此在线问卷调查系统对问题调研而言,有着举足轻重的意义。
对于各类在线系统,web无疑又是最为大家所喜爱的展现形式,基于web的信息系统通常具有以下几个特性:
-
能够快速发布和及时更新信息;
-
管理、操作和统计都十分便捷;
-
具有灵活性,高可扩展性和通用性;
设计目标
开发一款基于web的在线问卷调查系统,目的是方便各类组织或个人在系统上面创建问卷,收集统计问卷信息,评估问卷调查结果,以解决各类问题调研需求,并以此提升自己的产品或服务的质量。
在使用方式上,基于web的问卷调查系统,应当使得调查者可以方便快捷的查询、新增、修改和删除自己的问卷。而被调查者则可以轻松的随时随地的完成问卷。
本文结构
本文的章节安排如下:
第一章 绪论部分,说明系统的研发背景和目标。
第二章 技术背景,简单介绍系统实现所设计到的技术知识,如php、mysql、nginx、thinkphp框架等等。
第三章 系统需求分析,对系统应该涵盖哪些功能进行需求分析。
第四章 系统及数据库设计 ,设计相应的系统应有的功能模块,程序框架及表结构。
第五章 系统详细设计与功能实现,详细的介绍系统实现。
第2章 系统与程序架构及其相关技术介绍
系统架构与程序架构
基于web的在线问卷调查系统,使用windows做为系统服务器。使用主流的nginx做为web服务器,采用php做为脚本解析语言,使用mysql做数据存储,并使用开源的thinkPHP做为系统开发框架,以此构成在线问卷调查系统的后台。系统前台则采用了基于响应式的bootstrap页面模版,配合使用html,css,javascript,jquery等主流前台开发技术,实现一整套的在线问卷调查系统。
nginx介绍
nginx是目前主流的轻量级的HTTP和反向代理服务器,也可用于IMAP/POP3/SMTP等的代理服务器。在高连接高并发的情况下,我们通常采用nginx而不是apache做为web服务器,因为nginx具有更强大的性能。同时nginx在内部直接支持了对php和Rails程序并对外提供服务。nginx因为其很好的稳定性,丰富的功能,以及占用较少的系统资源为广大web开发者所推崇所喜爱。对于我们的在线问卷调查系统而言,nginx就充当的是http服务器,用于监听80端口,当有请求到达时,调用相应的模块处理,并将结果返回给客户端。同时我们启用了它的rewtire模块,根据配置规则该模块讲到达服务器的请求,定向到一个特定的入口文件上,以方便通过php代码统一管理用户请求。
thinkPHP介绍
在早前,大多数基于B/S结构的web系统中,用户请求针对的是服务端不同的脚本文件,不同的业务逻辑,不同的模块请求对应不同的脚本文件,以此来构成一个系统。但这样的系统随着业务需求不断的扩大,弊端就日益凸显,由于代码和业务结构混乱,将增加新人的理解成本,同时带来了实现需求的沟通成本并且变得难以维护和升级。
Thinkphp 所设计的基于MVC的框架结构很好的解决了这些问题,它是一款轻量级的由国人开发的php开发框架,能满足大中小型企业的大多数的应用需求。因为thinkphp可以结合nginx的重写规则(rewrite)实现请求单入口,并包含了一整套路由分发、分层处理机制、ORM、视图处理、缓存支持等常用框架组件。这样就可以统一的管理用户请求,具有较高的可移植性和可扩展性。MVC的设计模式使得,业务逻辑与视图相分离,由控制器将其组织整合到一起,并由控制器负责处理用户请求,这样一来使得在其上进行开发变得更加方便和快捷了。
图2-1 基于ThinkPHP框架的应用程序组成和执行过程
开发相关技术介绍
php技术
PHP的全称是 Hypertext Preprocessor,也就是超文本预处理器。对于nginx服务器,由于nginx只能处理静态的文件。而我们时常又需要一些动态的业务逻辑,譬如我们经常会需要和数据库进行交互。这时候php的价值就体现出来了。Php可以做为nginx服务器模块的一部分,nginx会将动态的请求分配给php模块进行处理,php模块处理完后再将处理结果交nginx,最后由nginx在返回到客户端。
Php代码是以< ?Php 和 ?> 来标记开始和结束的。这就告诉服务器在这两个标签之间的所有内容都应该被当成php指令进行语法分析,然后被执行。当然在浏览器客户端,我们看不见任何的php代码,因为php代码仅是运行于服务器端的,浏览器客户端仅能看到普通的html文件或者由php代码输出的内容。如果php代码无任何输出,浏览器客户端将看不到任何内容。
php是一种弱类型的脚本处理语言,弱类型不是无类型,仅是在使用时无需强制定义变量的类型,因为php内部存在着优秀的类型自动转换机制。Php变量的类型主要有如下几种:string、array、boolean、integer、float、object、resource和null。由于php的特性,其中最经常使用的是string和array类型。
另外在php内部已经为广大开发者提供了非常完整的一套系统函数,开发者们要实现时,仅仅只需要简单的调用他们,以下是几个常见的php系统函数:
implode:该函数的作用是将数组以一个自定义的连接符拼接成一个字符串。因此其第一个参数是自定义的连接符,第二个参数是待处理的数组。调用举例:$str = implode("-",array("a","b","c"));
str_replace:如$str=str_replace("a","","abcabcAbca");该函数的作用是将第三个参数的字符串中包含第一个参数字符串全部代替成第二个参数字符串。
substr:字符串截取函数,$str=substr("abcdefgh",0,4);从第一个参数字符串中按照第二个参数指定的位置开始截取第三个参数指定长度的字符串。
md5:将字符串进行md5加密,在本套在线问卷调查系统中,对于用户密码的加密就使用了md5函数。
另外常见的系统函数还有很多诸如:strlen,explode,in_array等等。
php做为优秀的脚本处理语言具有这样几个特点,他是免费的且开放源码的,学习起来想对容易。并且执行效率也很高,并且目前绝大部分的各类操作系统上面都能支持php。
mysql技术
对于任何一个动态的web系统来说,数据库都是必不可少的。并且通常与php配合使用的是mysql数据库。因为mysql同样是免费开源的,并且也因它的小巧实用,深受广大php开发者的青睐。Mysql最初是由瑞典MySQL AB公司开发的。2008年1月16号的时候又被Sun公司所收购了。续剧性的是2009年,SUN又被Oracle收购了.对于Mysql的前途,大家并不抱乐观的态度,因为有趋势表明它的功能正在不断扩大,也因此变得臃肿。Mysql本身是由c,c++编写的,并且支持几乎所有的操作系统,同时它又为大部分语言如php,c,c++,C#,delphi等提供了操作它的API,支持多线程具有很好的效率,可作为大型的专业数据库来使用。
php语言本身提供了对mysql数据库的支持,仅需将mysql扩展或者mysqli扩展开启即可。这两个扩展分别提供了面向过程的和面向对象的方式访问数据库。Mysql本身也支持使用php语言与之建立数据库连接。使用php代码发送sql语句到mysql,经mysql解析执行后,将结果集以数组的形式返回给php代码。php正是通过这种方式来与mysql进行交互。
第3章 系统需求分析与设计
本套问卷调查系统,针对使用的人群分为平台,客户,普通用户三种角色。下面对这三种角色做一简要的说明:
-
平台,即为网站管理者,具有所有权。
-
客户,即为创造问卷的组织或者个人,因为普通用户也可能是潜在客户,所以普通用户也属于客户之一。
-
用户,即为填写问卷的被调查者。
需求分析
平台系统需求分析
平台,做为整个系统的管理者,具有最高的权限,需要提供诸多的功能。应具有如下几个功能:
-
用户管理功能:可以在系统上对平台管理员和已注册的用户进行列表的查看和基本信息的修改,或者删除一个已存在的用户。
-
问卷管理功能:对于客户发布的问卷,平台系统需提供问卷列表的查看和问卷基本信息修改,以及更改问卷问题,并能保存发布的功能。
-
题型管理功能:管理系统中,允许客户使用的题型列表。
-
日志功能:对一些操作做日志记录,以便误操作时候查询。
-
周边功能:除了上述主体功能外,仍提供一些额外的直观的信息展示,例如当前系统已有多少客户,多少问卷,被提交了多少次。以及最新发布的和最热门的问卷列表。
客户系统需求分析
平台为了给客户提供一个良好的问卷生成平台,需要有如下一些功能:
-
注册登录功能:用户可根据邮箱、手机或自定义昵称注册成为平台的客户或者是单纯的普通用户。
-
问卷管理功能:客户可以在系统上面,创建具体的问卷,可设定主题,并提供丰富的题型,供客户选择。编辑完问卷题目后,用户可预览问卷、保存问卷、发布问卷。
-
个人信息修改功能:客户可在系统上修改自己的个人信息,邮箱,登录密码等等。
普通用户需求分析
普通用户分为两种类型,一种是注册登录的用户,一种是游客用户。对于登录注册的用户,可能是潜在的客户同样可以在客户系统上创建自己的问卷。
另外普通用户更主要的是可以浏览网站上都有哪些问卷,以及问卷的填写和提交。
用例图
图3-1 系统用例图
第4章 系统及数据库设计
系统设计
本套在线问卷系统,采用nginx做为web服务器,并使用thinkPHP做为底层开发框架。在两者的互相配合下整个系统的执行流程入下图所示:
图3-2 系统执行流程图
客户端浏览器,像服务器发起请求,请求到达服务器端,经过niginx的重写模块(rewrite),请求被交由thinkphp入口文件index.php处理,thinkphp框架通过请求参数进行路由分发,并交由某模块的控制器处理,而控制器又调用逻辑层,并由逻辑层操作数据库,最后一层层的返回给用户客户端。
本文所设计的系统使用域名qss.codiy.net,我们在本地上配置了nginx,使得可以通过域名来访问我们的在线问卷调查系统。并且使用nginx的重写规则,将所有请求定位到单一的入口文件,方便后续的管理。
其中nginx的配置如下:
c++
server {
listen 80;
server_name qss.codiy.net;
location / {
root E:/qss/Public;
index index.php index.html index.htm;
if (!-f $request_filename) {
rewrite ^/(.*) /index.php?s=$1 last;
}
}
location ~ ^.+\.php {
root E:/qss/Public;
fastcgi_pass bakend;
fastcgi_index index.php;
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
include fastcgi.conf;
}
}
数据库设计
数据库是存放系统数据的仓库,基本上所有的应用多多少少都会用到数据库,他是系统的核心和基础,是信息系统开发和建设的重要组成部分。它提供了一整套的关于数据的存储,维护,检索等功能使得外部应用可以方便、准确、及时的从数据库中获得所需要的信息。
数据库的设计主要包含一下两个部分:
-
一是根据系统设计需求,确定数据表和表字段,以满足一定的业务需求。
-
确定每个表字段的属性等数据库信息。
表3-1 qss_admin表
序号 | 字段名 | 类型 | 长度 | 备注 |
---|---|---|---|---|
1 | id | int | 10 | 主键自增id |
2 | admin_name | varchar | 100 | 管理员名 |
3 | admin_pass | varchar | 100 | 管理员密码 |
4 | salt | varchar | 16 | 盐值 |
5 | photo | varchar | 255 | 头像url |
6 | admin_phone | varchar | 30 | 手机号 |
7 | admin_email | varchar | 30 | 邮箱 |
8 | login_ip | varchar | 30 | 登录IP |
9 | login_time | int | 10 | 最后登陆时间 |
10 | config | text | 配置(界面配置,模块配置) | |
11 | info | text | 其他信息 | |
12 | auth_level | tinyint | 1 | 权限级别,1最高 |
13 | create_time | int | 10 | 创建时间 |
如表3-1所示,该表为qss_admin表结构,用于保存平台管理员的信息
表3-2 qss_user表
序号 | 字段名 | 类型 | 长度 | 备注 |
---|---|---|---|---|
1 | id | int | 10 | 主键自增id |
2 | user_name | varchar | 100 | 用户名 |
3 | user_pass | varchar | 100 | 密码 |
4 | salt | varchar | 16 | 盐值 |
6 | user_phone | varchar | 30 | 手机号 |
7 | user_email | varchar | 30 | 邮箱 |
8 | sex | tinyint | 1 | 性别 0:男,1:女 |
9 | age | tinyint | 1 | 年龄 |
10 | birthday | int | 10 | 出生年月日 |
11 | province | int | 10 | 省份ID |
12 | city | int | 10 | 城市ID |
13 | config | text | 配置(界面配置,模块配置) | |
14 | info | text | 其他信息 | |
15 | vip_level | tinyint | 1 | 会员级别,0:非会员,1:最低 |
16 | login_ip | varchar | 30 | 登录IP |
17 | login_time | int | 10 | 最后登陆时间 |
18 | create_time | int | 10 | 创建时间 |
如表3-2所示,该表为qss_user表,用于保存客户及用户信息
表3-3 qss_questionnaire表
序号 | 字段名 | 类型 | 长度 | 备注 |
---|---|---|---|---|
1 | id | int | 10 | 主键自增id |
2 | title | varchar | 255 | 问卷名称 |
3 | type | varchar | 10 | 问卷类型ID |
4 | user_id | varchar | 10 | 所属用户ID |
5 | need_login | tinyint | 1 | 是否需要登陆 |
6 | status | tinyint | 1 | 问卷状态 1:草稿,2:发布中,3:关闭 |
7 | url | varchar | 255 | 问卷外链 |
8 | info | text | 其他信息 | |
9 | post_type | int | 10 | 提交类型 0:不限制,1:用户,2:IP |
10 | post_time | int | 10 | 参与次数 |
11 | end_type | tinyint | 1 | 结束类型 0:不限制,1:份数,2:时间 |
12 | start_time | int | 10 | 开始时间 |
13 | end_time | int | 10 | 结束时间 |
14 | end_count | int | 10 | 结束次数 |
15 | create_time | int | 10 | 创建时间 |
16 | update_time | int | 10 | 更新时间 |
如表3-3 为qss_questionnaire表,用于保存问卷相关信息
表3-4 qss_questions表
序号 | 字段名 | 类型 | 长度 | 备注 |
---|---|---|---|---|
1 | id | int | 10 | 主键自增id |
2 | type_id | int | 10 | 题型ID |
3 | user_id | int | 10 | 用户ID |
4 | qtn_id | int | 10 | 问卷ID |
5 | title | varchar | 255 | 标题 |
6 | data | text | 选项等格式为json串 | |
7 | is_require | tinyint | 1 | 1:必填,0:可空 |
8 | create_time | int | 10 | 创建时间 |
9 | update_time | int | 10 | 更新时间 |
如表3-4 为qss_questions表 关于存储问卷题目信息
表3-5 qss_ques_type表
序号 | 字段名 | 类型 | 长度 | 备注 |
---|---|---|---|---|
1 | id | int | 10 | 主键自增id |
2 | name | varchar | 30 | 题型名称 |
3 | data | text | 选项等格式为json串 | |
4 | spell | varchar | 30 | 类型英文字符 |
5 | type | tinyint | 1 | 类型 0:普通题,1:快速题,2:特殊题 |
6 | is_valid | tinyint | 1 | 是否有效 |
7 | need_level | tinyint | 1 | 需要的VIP等级 |
8 | admin_id | int | 10 | 管理员ID |
9 | color | varchar | 30 | 代表该题型的颜色 |
10 | icon | varchar | 30 | 代表该题型的图标 |
11 | create_time | int | 10 | 创建时间 |
12 | update_time | int | 10 | 更新时间 |
表3-5 为 qss_ques_type表 用于存储题型相关数据
表3-6 qss_ques_post表
序号 | 字段名 | 类型 | 长度 | 备注 |
---|---|---|---|---|
1 | id | int | 10 | 主键自增id |
2 | qtn_id | int | 10 | 问卷ID |
3 | ques_id | int | 10 | 问题ID |
4 | user_id | int | 10 | 用户ID |
5 | data | text | 提交内容json串 | |
6 | post_ip | varchar | 30 | 提交IP |
7 | post_time | int | 10 | 提交时间 |
表3-6 为qss_ques_post表 用于存储问卷提交相关信息
表3-7 qss_porvince表
序号 | 字段名 | 类型 | 长度 | 备注 |
---|---|---|---|---|
1 | id | int | 10 | 主键自增id |
2 | name | varchar | 5 | 名字 |
3 | full_spell | varchar | 20 | 全拼 |
4 | short_spell | varchar | 5 | 简拼 |
5 | first_char | varchar | 1 | 首字母 |
6 | municipality | int | 10 | 是否直辖市0不是1是:北京上海天津重庆为1 |
7 | domain | varchar | 10 | 域名 |
8 | display_order | int | 10 | 排序 |
表3-7 为qss_porvince表 用于存储省份数据
表3-8 qss_city表
序号 | 字段名 | 类型 | 长度 | 备注 |
---|---|---|---|---|
1 | id | int | 10 | 主键自增id |
2 | name | varchar | 5 | 名字 |
3 | full_name | varchar | 50 | 全称 |
4 | province_id | int | 10 | 所属省份ID |
5 | full_spell | varchar | 20 | 全拼 |
6 | short_spell | varchar | 5 | 简拼 |
7 | first_char | varchar | 1 | 首字母 |
8 | zipcode | int | 10 | 邮政编码 |
9 | municipality | int | 10 | 是否直辖市0不是1是:北京上海天津重庆为1 |
10 | city_code | varchar | 100 | 电话区号 |
10 | domain | varchar | 10 | 域名 |
8 | display_order | int | 10 | 排序 |
表3-8 为qss_city表 用于存储城市相关数据
第5章 系统详细设计与功能实现
系统项目的文件夹结构
图5-1 系统程序文件结构
文件及文件夹说明:
-
index.php 放在Public文件夹下,是程序入口文件,所有的请求均会被重写到这个文件来。
-
Public 公共静态资源文件,存放图片,布局样式单css,javascript组件。
-
Application 应用文件夹,用于放置系统的各个模块。
-
Admin 平台管理模块,放置平台管理模块的配置、代码和视图。
-
Api 业务逻辑层,放置业务逻辑实现的代码,只有业务没有视图。
-
Common 公共配置文件夹,存放公共函数库、类库,以及配置的文件夹。
-
Home 用户模块文件夹,存放用户模块的配置、代码和视图。
-
Runtime 系统缓存文件夹,存放系统执行期间产生的各种缓存文件。
-
User 客户模块文件夹,存放客户模块的配置、代码和视图。
-
ThinkPHP 为框架核心文件夹。
平台管理系统的详细设计
图5-2 平台系统分模块功能
登陆功能
为了提升安全性,用户登录采用主流的安全加密方式,即md5+salt的方式来进行登录密码校验。具体的做法是,用户注册时候生成一个随机的salt盐值。并将md5后的密码与该salt拼接,然后再次md5作为最终存放在数据库里的密码串。
用户登陆时候,从数据库中取出对应的salt,然后以同样的方式。进行加密。再将加密结果与数据库中存储的加密结果进行比对。一样则表示密码正确,通过登录验证,否则返回登录失败。
图5-3 用户登陆页
用户列表管理
/Admin/User/Index 方法调用数据库,查询出当前平台上所有的用户信息列表,并格式化处理后,以分页列表的形式返回给前台,并提供删除用户和编辑用户信息的入口,前台在拿到数据后以分页的表格形式展示出用户列表。用户可点击编辑按钮和删除按钮进行相关功能的操作。也可点击分页按钮,翻页进行查看。如下图:
图5-4 用户列表
/Admin/User/Edit方法和/Admin/User/Del方法调用数据库操作分别实现了对用户信息的修改和删除功能。Edit方法相对复杂,如果不是POST请求则意味着仅仅是加载edit页面,此时就调用数据库操作,获取用户基本信息,并加载到页面上。如果是POST请求则是用户在修改完后,提交待修改的信息,在对提交信息进行校验通过后,将更新相应的值,否则给出错误信息。
问卷管理功能
平台并不提供创建问卷的功能,问卷必须属于某个客户,仅能由客户创建。但允许平台修改客户发布的问卷信息,包括基本信息、编辑问题、进行预览、保存和发布。
/Admin/Questionnaire/Index 通过调用数据库操作获取平台中的问卷列表,并以一定的方法进行格式化,然后以分页列表的形式返回给用户浏览器,以便前台显示,并提供修改问卷基本信息、编辑问卷问题、删除问卷以及对尚未发布的问卷提供预览的入口。前台拿到数据后,则以分页表格的形式展示出来。用户可点击修改按钮对问卷基本信息进行修改,点击编辑按钮对问卷里的问题进行编辑,点击预览按钮可对尚未发布出去的问卷进行预览,点击关闭按钮可关闭发布中的问卷,如下图:
图5-5 问卷列表
/Admin/Questionnaire/Update 为修改问卷基本信息的接口。该接口提供修改问卷标题、类型、提交限制、结束类型,问卷描述等功能。方法首先判断本次请求是不是POST请求,如果不是则仅是用于加载更新页面,从数据库取出问卷基本信息,并加载到前台页面上,供用户进行修改。如果是POST请求则是用户已经修改完毕,打算提交到数据库进行保存,在对用户提交数据校验完毕后,更新到数据库。
/Admin/Questionnaire/Edit 方法如果当前编辑的问卷已存在一些问题,则会先加载出已存在的问题。然后客户可在其上新增或者删除问题。
图5-6 问题编辑页面
/Admin/Questionnaire/Del 提供删除问卷的功能。根据问卷的ID,删除指定ID的问卷,管理员系统具有高权限,可以删除任意用户的问卷。
题型管理功能
/Admin/Qtype/Index 调用数据库操作获取平台支持的题型列表数据。并使用php代码进行一定数据格式的处理,返回给前台客户端进行分页表格形式的展示,并且提供相应的修改和关闭题型的入口。
/Admin/Qtype/Edit 可通过该方法修改题型信息基本信息。
/Admin/Qtype/Del 则提供支持关闭某个题型的功能。
如下图:
图5-7 题型列表
周边功能
平台统计信息:在平台管理首页,会展示平台上的用户统计,问卷统计和提交统计等信息。
热门TOP5问卷:调用数据库,查询出平台上所用用户创建的问卷被提交次数最多的5个问卷,并在平台首页上展示。
最新NEW5问卷:查询数据库,获取平台上最新发布的5个问卷,并在平台首页上展示。
客户管理系统的详细设计
图5-8 客户管理系统功能模块
注册登录功能
用户可根据自定义的昵称和密码来注册账户,同时也可填写手机号和邮箱来进行注册。注册时密码采用md5+salt的方式进行加密。具体的算法是 md5(md5(pass)+salt)这种加密方式考虑了诸多安全因数,是比较好的一种加密方式。
第一个是存储在数据库中的密码串因为是经过salt二次加密。所以基本很难通过常规的暴力破解的方式进行破解。原因是及时你有很全的密码字典。但因为salt的不同加密的结果也大不一样。因此几乎很难被暴力破解。
第二个是我们时常需要在客户端使用cookie记住用户密码。直接记住铭文密码,显然是愚蠢的做法,因为我们知道cookie很容易就能被盗取。因为使用md5+salt的方式进行二次加密。因此我们可以将md5一次后的密码存储在客户端的cookie中,当用户登录时,仅需将该加密后的密码与salt拼接,再次md5即可。这样一来不仅保证了密码在客户端存储的安全,也保证了密码在传输过程中的安全。
问卷列表管理
问卷列表管理是客户系统的主体功能,因为客户的主要目的就是为了创建问卷。因此问卷管理模块提供了诸多人性化的问卷编辑功能。
图5-9 问卷管理功能示意图
-
调用数据库操作,获取当前登录客户所有的问卷列表(包含草稿中的,发布中的,和关闭中的问卷),同样的经过一定数据格式处理,以分页形式交给前台展示。并根据问卷状态提供相应不同的功能入口。
-
对于发布中的问卷,提供查看问卷、设置问卷基本信息、关闭问卷还有删除问卷的功能入口。
- 对于处于草稿状态的问卷。则允许编辑问卷题目、预览问卷、保存、发布问卷和删除问卷。
- 对与关闭的问卷,只允许修改基本信息和删除问卷。
客户个人信息
- 提供用户信息包括手机、邮箱、性别、生日、个人说明等信息的修改。
- 提供密码修改功能。
- 退出系统功能。
用户系统设计
网站首页宣传
在网站首页的头部提供用户注册以及用户登陆入口。用户可以点击链接进入注册或者登陆页面。
在网站首页展示当前网站上最新被发布的10条问卷调查信息,用户可以点击这些问卷,进入问卷填写页面。
在网站首页展示当前网站上最热门的10调问卷调查信息,用户可以点击这些问卷,参与到这些热门问卷的填写中。
登录注册功能
同4.3.1
问卷详情和问卷提交
为了防止平台上的问卷被恶意遍历,系统采用了独特的加密方式,将每个问卷的所有者ID和问卷ID以及创建问卷的时间拼接起来,使用如下加解密函数进行加密。经加密后生成每个问卷对应的唯一的字符串,并拼接到url中,便于用户访问。用户访问该url时,服务器接受到请求,会将该字符串再次解析成所有者ID、问卷ID以及创建时间三个信息。
图5-10 问卷加密函数
根据每个问卷的ID,从数据库取出问卷基本信息,并判断问卷是否处于发布状态,是否已满足结束条件以及该用户是否已经填写过本问卷等检测项目。如果均满足条件,则从数据库中取出本问卷的所有问题列表,并以一定形式展示到前台页面上。
允许用户通过多种途径访问问卷,并能提交问卷。问卷提交时,会先检查每个问题是否已经填写,和填写规范。对于不符合提交要求的回答,将给用户提示信息,在用户修改后,再次进行提交并检测,直到所有问题的回答均满足格式要求为止。后台在接收到提交数据后,会对每个问题的回答分别进行存储,并更新该问卷的提交信息,例如本次提交的IP和该问卷当前被提交的次数等等。
总结
本套基于web的在线问卷调查系统,采用wnmp架构,即windows+nginx+mysql+php的架构,并使用thinkphp做为底层开发框架,实现了在线问卷调查系统所应当具备的,创建问卷,发布问卷,收集提交问卷等功能。并且,本套在线问卷调查系统,将使用主体划分为三个部分,分别为平台,客户和用户。并为三个主体提供各自相应的功能,并且提供了丰富全面的题型,以供选择,因此可以适用于大部分的问题调研场景,具有较高的可用性。另外前台界面使用基于响应式的bootstrap模版,使得系统使用起来更加人性化,具备良好的用户体验。
传统的问题调研采用人力物力的方法,印发大量问卷,调动大批人员,但往往收效甚微。在线的问卷调查系统则不会出现这样的情况。另外其他传统的在线问卷调查系统,虽然也能够胜任大部分的问题调研,但往往界面丑陋,用户体验相对较差。因此本文设计的问卷调查系统具有一定的推广意义。
由于时间所限,本文所设计的在线问卷调查系统,功能并不十分完善,今后改进的重点在于,充分利用调查结果即问卷提交信息的收集,统计以及预测,致力于为客户提供一些人群状态与趋向的预测,帮助客户更好的完成问题调研,以便客户能以此创造更加人性化的产品或服务。
参考文献
- 动态WEB数据库应用研究(昆明理工大学·李玉梅)
- 基于.net技术的Web在线考试系统的设计与实现(大连海事大学·朱小社)
- 基于WEB的信访管理系统开发(电子科技大学·刘博然)
- 基于J2EE的学生网络调查系统设计与实现(吉林大学·孙弢)
- 基于.NET的健康调查问卷系统的设计与实现(大连理工大学·张亚楠)
- 河北网通用户回访定制系统的设计与实现(北京邮电大学·芦宏志)
- 网上考试和查分系统设计与实现(国防科学技术大学·王腾)
- 基于ASP.NET在线考试系统设计与实现(电子科技大学·林栩)
- 网上考试和查分系统设计与实现(国防科学技术大学·王腾)
- 基于Web的考试系统的设计与实现(哈尔滨师范大学·杜娟)
- 基于Web的在线考试系统(太原理工大学·林健)
- 河北网通用户回访定制系统的设计与实现(北京邮电大学·芦宏志)
- 组卷系统设计与实现(西安电子科技大学·金志伟)
- 网络流量统计分析系统(吉林大学·石景龙)
- 基于JSP的新闻发布系统的研究与实现(辽宁科技大学·魏欣)
本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:代码导航 ,原文地址:https://bishedaima.com/yuanma/36083.html