问卷调查系统_问卷调查系统设计思路 - CSDN
精华内容
参与话题
  • 基于web的在线问卷调查系统

    热门讨论 2020-07-30 06:05:18
    第一章 网上问卷调查技术与发展简介 3 1.1问卷调查的特点 3 1.2网上问卷调查的特点 4 1.3网上问卷的基本解决方案 4 1.3 Struts概述 4 第二章 开发工具及系统架构简介 6 1.1 编程语言简介 6 1.2 J2EE平台简介 6 1.3 ...
  • 基于Javaweb的问卷调查系统(附带数据库)

    万次阅读 多人点赞 2020-03-05 11:16:57
    本项目是基于Javaweb的调查问卷系统,里面包含了数据库,只要把项目跟数据库导入即可。以下是调查问卷的需求,整个项目是围绕着以下项目来做的,以下的功能也全都可以实现。 可以接受私人定做项目,互相学习,有...

    本项目是基于Javaweb的调查问卷系统,里面包含了数据库,只要把项目跟数据库导入即可。以下是调查问卷的需求,整个项目是围绕着以下项目来做的,以下的功能也全都可以实现。

    如果你喜欢请关注我,会让你意外收获!

    需求:

    1、普通用户登录和管理员登录;

    2、发布调查问卷以及填写调查问卷;

    3、对调查问卷进行分析,比如 A 选项被选中占本题的百分之几;

    4、要求后台可以对数据进行一个分析以及控制;

    5、用户登录密码保存到数据库要求加密。

     

    以下是这个系统部分效果图:

    (1)首页(部分)

    ----------------------------------------------------------------------------------------------------------------------------------

    (2)发布调查问卷

    ----------------------------------------------------------------------------------------------------------------------------------

    (3)填写调查问卷

     

    ----------------------------------------------------------------------------------------------------------------------------------

     

    ----------------------------------------------------------------------------------------------------------------------------------

    (4)分析调查问卷

    ----------------------------------------------------------------------------------------------------------------------------------

    (5)后台页面

    <!DOCTYPE-HTML>
    <html>
    <head>
      <title>程序员写照</title>
    </head>
    <body>
      <h1>一款游戏一包烟,一台电脑一下午。</h1>
      <h2>一盒泡面一壶水,一顿能管一整天。</h2>
      <h3><a href="https://mp.csdn.net/console/editor/html/80443893">源码请前往CSDN平台下载</a></h3>
      <%
         if(CSDN Can Not Download){
           String +Q = "1159928833";  
         }else{
           System.out.print(+Q)
         }
      %>
    </body>
    </html>

     

    展开全文
  • 问卷调查系统的设计与实现

    万次阅读 2020-06-05 20:25:46
    程序下载链接: https://download.csdn.net/download/qq_30615201/11223278 河北农业大学 本科毕业设计说明书 题 目: 问卷调查系统的设计与实现 学 院: ...

    程序下载链接:

    https://download.csdn.net/download/qq_30615201/11223278

    河北农业大学

     本科毕业设计说明书

     

     

     

          题    目:    问卷调查系统的设计与实现    

            学    院:                                                  

            专业班级:                                                  

            学    号:                                                  

            学生姓名:             崔胜利             

            指导教师姓名:                                                  

            指导教师职称:                                                  

     

     

       2019年  5 月 23 日

     

    摘要

    传统模式下,发起者需要提前制作问卷、试卷,统一作答,过后统一阅卷处理,不仅会消耗大量人力物力,还由于人工方式的局限性,常常存在各种不可避免的失误。由此可见,传统方式已经不能满足现代工作环境的需求。近年来,随着移动互联网浪潮中全面信息化的普及和发展,2018年中国移动端智能设备使用率达到68%远远高于PC端,移动互联的佼佼者莫过于微信,微信月活用户已经达到10亿,目前在国内市场依旧有着非常大的增长潜力。因此,整合现有的资源提供移动端基于微信小程序的在线问卷调查平台,解决新形势下传统模式的弊端,成为办公信息化和提高工作效率的必然选择。

    本文介绍了一个B/S结构下微信小程序的在线问卷调查系统,其后台可在主流浏览器上进行操作,前台采用微信小程序。它使用集成框架Spring+Sring MVC+MyBatis,存储数据库选用关系型数据库MySql,缓存数据库采用非关系型数据库Redis,服务器选用Apache Tomcat和Nginx相结合的方式。它的代码部分主要开发工具为IntelliJ IDEA和微信开发者工具。以图表的方式实现对问卷结果的数据分析。代码部分实现了前端问卷调查系统和后端管理系统的分离。采用Redis数据库做高速缓存提高访问效率。利用FFmpeg将MP4视频转为m3u8格式实现在线播放视频。

    关键词:微信小程序;问卷调查;在线投票;在线考试

     

     

    Abstract

    In the traditional mode, the initiator needs to make questionnaires and test papers in advance, and make a unified answer. After the unified review, it will not only consume a lot of manpower and material resources, but also due to the limitations of manual methods, there are often inevitable mistakes. It can be seen that the traditional way can no longer meet the needs of the modern working environment. In recent years, with the popularization and development of comprehensive information in the wave of mobile Internet, the use rate of smart devices in China's mobile terminals reached 68% in 2018, which is much higher than that of PCs. The leader of mobile internet is WeChat, WeChat monthly users have already It has reached 1 billion and currently has a very large growth potential in the domestic market. Therefore, integrating existing resources to provide mobile-based online questionnaire survey platform based on WeChat applet, to solve the drawbacks of the traditional model under the new situation, has become an inevitable choice for office informationization and work efficiency.

       This question introduces an online questionnaire survey system of WeChat applet under the B/S structure. The background can be operated on the mainstream browser, and the WeChat applet is used in the foreground. It uses the integration framework Spring+Sring MVC+MyBatis, the storage database uses the relational database MySql, the cache database uses the non-relational database Redis, and the server uses the combination of Apache Tomcat and Nginx. Its main part of the code development tools are IntelliJ IDEA and WeChat Developer Tools. Data analysis of the questionnaire results was carried out graphically. The code part realizes the separation of the front-end questionnaire system and the back-end management system. Using the Redis database for caching improves access efficiency. Use FFmpeg to convert MP4 video to m3u8 format to play video online.

    Keywords: WeChat applet; questionnaire survey; online voting; online exam.

     

    目录

    1绪论... 1

    1.1 项目背景及意义... 1

    1.2 国内外现状分析... 1

    1.3 基本目标和研究内容... 1

    1.4 论文内容组织安排... 1

    2可行性分析与需求分析... 3

    2.1 可行性分析... 3

    2.2 需求分析... 3

    2.2.1 功能性需求分析... 3

    2.2.2 非功能性需求分析... 4

    3系统设计... 5

    3.1系统架构... 5

    3.2 流程设计... 7

    3.3 数据库设计... 8

    4系统实现... 13

    4.1系统的开发与实施环境... 13

    4.2 核心技术简介... 13

    4.3 底层接口和类的封装... 14

    4.3.1公共类的实现... 14

    4.3.2关于ResultResponse统一接口参数的实现... 15

    4.3.3关于数据分页的实现... 15

    4.3.4关于自定义的验证方式和校验工具类的实现... 16

    4.3.5关于微信小程序端的js封装... 17

    4.4 前端系统的实现... 18

    4.4.1界面UI实现... 18

    4.4.2问卷添加页面... 18

    4.4.3问卷题型实现... 19

    4.4.4投票页面实现... 19

    4.4.5数据分析的实现... 20

    4.4.6其他部分效果实现... 21

    4.5 后端管理的实现... 22

    4.5.1用户登录的实现... 22

    4.5.2资源管理的实现... 22

    4.5.3验证方式的实现... 23

    结束语... 24

    参考文献... 25

    致谢... 26

     

     

     

     

     

     

    1绪论

    1.1 项目背景及意义

    随着用户对全方位多维度海量数据的需求日益增长,问卷调查作为获得数据的重要途径,在很多领域的运用已经十分广泛。反观传统问卷调查,地域限制、灵活性限制、人工失误这些不可避免的缺陷,使得用户需求与传统问卷的矛盾日益凸显。在校园里,存在各种信息统计,经常会有各种各样的问卷表单,师生需要在此消耗极大的精力和时间。随着我国移动互联技术的浪潮,智能设备用户的增长,给问卷调查带来全新的改革方案,那就是在线问卷调查。在线问卷成本低、时效性强、跨地域、表现形式丰富、覆盖范围广,可极大程度上减少人力资源的使用,满足了用户基本需求。微信小程序的问卷调查系统有很强的实用性。

    1.2 国内外现状分析

    问卷调查系统在国外起步较早例如:SurveySavvy于2009年推出,是一款易于使用的桌版问卷调查工具。SurveySavvy的SavvyConnect提供触手可及的调查。此外,SurveySavvy的VIP计划使用安全,先进的技术在用户上网时收集数据。SurveySavvy的用户在网上冲浪并获得额外的付费研究机会时获得现金奖励[1]。

    目前随着我国网络环境的发展和完善,在线问卷调查系统带来的便利开始崭露头角,大有可能取代传统的问卷调查模式的趋势。目前在线问卷调查平台正在从小型化逐渐转向全方面多维度的高信息化。近年来国内出现了一大批问卷星,腾讯问卷,调查派等等优秀的在线问卷调查平台。他们都具有良好的的跨平台性支持PC、移动WEB、微信小程序三种平台。以为问卷星为例,它支持丰富的题型高达32种,不仅实现了调查问卷的制作和发布更是对收集到的数据加以分析利用,数据统计结果以环状图、饼状图、柱状图等可读性较强的图表形式展示给用户,在方便用户对结果数据分析的同时降低对用户软件操作和数据分析能力的要求。

    1.3 基本目标和研究内容

    本课题意在为问卷、投票活动发起者提供移动端基于微信小程序的在线问卷调查系统,让被调查用户能够快速便捷的完成问卷调查。问卷调查结束自动统计整理分析问卷结果数据,反馈给发起者结果报表,以图表的形式实现对结果的数据分析。以此为目标研究内容如下:考察市场现有的在线问卷调查系统,明确系统范围确定模块边界。具体开发实施完成系统数据库、业务逻辑、后台管理页面、前台小程序页面的实现。进行系统测试与BUG调试后发布项目,根据用户反馈优化功能。

    1.4 论文内容组织安排

    本论文按照软件开发过程逐章编写,本文共分为四个章节:

    第一章绪论。本章主要描述了项目背景及意义,国内现状分析以及目标和研究内容。

    第二章可行性分析与需求分析。本章从经济、技术两个角度进行可行性分析,从软件都有哪些用户分别需要什么功能进行功能性需求分析,从软件的性能需求、UI设计、平台兼容性方面分析了非功能性需求。

    第三章系统设计。本章先论述了系统综合架构,然后画出了软件流程图,模块划分图,最后进行数据库设计。

    第四章系统实现。本章先阐述开发和实施环境和所涉及到的技术,然后到具体功能代码的实现,最后介绍前台UI实现和后台功能实现。

     

     

    2可行性分析与需求分析

    2.1 可行性分析

    软件开发可行性的分析主要从:经济可行性、技术可行性、操作可行性、社会可行性、组织可行性等方面进行分析,本节将从经济、技术方面进行可行性分析,为后期设计、开发、维护工作提供可行性理论依据。

    (1)经济可行性:从经济效益来分析,软件的开发的持续投入较低。系统服务器采用Apache Tomcat及Nginx[2],数据库采用MySql[3]及Redis[4]。这些软件也都是绿色开源软件,不需要支付额外费用。软件运行对服务器硬件资源的要求较低。系统所带来的的经济效益远超过它的开发成本,所以具有经济可行性。

    (2)技术可行性:技术层面腾讯提供微信小程序的开发工具和官方文档、Java基于SSM框架的系统技术也比较成熟且有丰富的资料可供参考、百度提供用于数据分析的工具EChart[5]并提供技术支持和官方API文档说明。且本人在此之前已经参与实现过数个基于微信的小程序参与实现数个SSM框架系统,有充分的开发经验。

    2.2 需求分析

    2.2.1 功能性需求分析

    为实现本系统目标,系统应具有前台页面和后台页面两大部分。后台需要具备管理和维护系统、用户权限分配管理功能的管理员称之为超级管理员,由超级管理员创建并指定权限的管理管理员称为活动管理员。前台需要实现发起问卷、发起投票、数据分析、答卷和投票的功能,前台用户均采用微信用户信息,用户在发起问卷、发起投票、数据分析时被称为活动发起者,在投票或答卷是被称为被调查者。

    后台用户分为活动管理员和超级管理员两种角色。超级管理员拥有后端的全部权限负责维护和管理系统,超级管理员有角色管理的权限可以管理其他管理员。活动管理员负责处理违规被举报的活动,活动管理员的权限由超级管理员指定和分配。

    (1)超级管理员功能需求

    1后台权限控制

    管理后台用户,管理后台角色,可为用户分配多种角色,每个角色可以拥有多个菜单权限,一个菜单可以被多个角色使用。

    2系统设置

    具备对系统名称的管理,系统服务邮箱的配置,系统介绍视频的编辑。

    3前台权限管理

    配置前台用户的访问权限,管理前台角色。

    前台用户分为调查活动发起者和活动被调查者。活动发起者发布和管理个人的调查问卷和投票、被调查者参与投票问卷活动发表评论。

    (2)活动管理员功能需求:

    1投票管理、问卷管理

    实现管理员对用户发起的问卷调查的控制,处理用户投诉举报。

    (1)被调查者功能需求:

    1活动大厅

    展示公开的投票活动,展示公开的问卷活动以供用户投票作答。

    2个人中心

    设置投票浏览历史、问卷浏览历史、我参与的投票、我参与的问卷。

    3问卷部分

    问卷作答页面。

    4投票部分

    查询投票详情、为候选项进行拉票评论、投票页面。

    5综合部分

    用户权限不足时跳转到未授权界面,提供分享界面和活动海报便于用户在多渠道宣传、观看问卷调查系统的介绍视频 。

    (2)活动发起者功能需求:

    1个人中心

    设置我发起的投票、我发起的问卷。

    2问卷部分

    复制问卷模板、提供草稿保存、添加问卷、管理问卷题目、问卷预览、编辑问卷、暂停问卷、统计问卷、查询问卷详情、通过图表的形式查看问卷数据分析、提供自动发送问卷统计结果的选择。

    3投票部分

    添加投票、提供草稿保存、管理投票候选项、报名成为候选项、编辑投票、暂停投票、统计投票、通过图表的形式查看问卷数据分析、投票页面。

    2.2.2 非功能性需求分析

    (1)安全性需求:数据库数据定时备份、不同用户访问权限控制、密码加密、使用Https协议提供数据传输的安全,使用恰当的安全策略在满足基本信息安全的情况下,最大程度上提高用户舒适度,做到预防Ddos攻击和防止sql注入式攻击[6]。

    (2)稳定性需求:系统本身具备可移植能力适应多种环境,满足Windows 或Linux两种系统,提供并发处理措施配置服务器集群,常用的不经常变化的数据放入缓存数据库提高访问效率。

    (3)界面需求:用户界面友好美观,提供丰富的提示提高交互性,方便使用,可操作性强,页面加载跳转等提供加载动画,常见异常错误界面美化。

    (4)兼容性需求:本系统中考虑到用户群体的广泛性,其使用的设备有很大差异:设备操作系统差异,主要要兼容IOS、Android两大平台、屏幕尺寸差异,要实现移动端的响应式布局[7]。

     

     

    3系统设计

    3.1系统架构

    后台用户通过浏览器访问进行后台管理,前台用户通过微信小程序进行操作,使用MySql作为主数据库,为提高访问效率采用Redis作为缓存服务器。

    MVC设计模式是Model(实体)、View(视图层)、Controller(控制层)的简称,是一种软件设计中经典的设计模式。在该系统实现基于该思想改进控制层将其分为Controller(页面跳转控制层)和Servive(逻辑控制层)Dao(数据库操作层),使用json数据通讯达到前后分离的效果[8]。

    系统架构图如图3.1所示。

    图3.1  系统框架图

    问卷调查系统包括四个子系统。每个子系统又进行了模块划分为日后的开发和维护提供方便。子系统分为Basics基础子系统、Manage权限子系统、Wx微信服务子系统、Wenjuan调查子系统:

    1. Basics基础子系统

    该子系统主要负责基础模块的集合例如数据校验模块负责数据的处理和验证、文件管理模块负责系统文件资源的上传和下载功能有文件管理的功能、基础模块封装底层实现类和接口供其他模块调用和继承。

    1. Manage权限子系统

    该子系统主要负责用户权限管理功能的实现,有资源管理、角色管理、用户管理以及为角色分配资源为用户分配角色的功能。子系统内部实现了Shiro框架下实现权限认证管理,前台部分基于Url的权限访问控制,后台采用基于Url加标签的权限控制。

    1. Wx微信服务子系统

    该子系统主要负责与微信的数据交互功能。在前端部分它实现了获取微信用户的OpenId和微信用户登录及获取微信用户详细信息的功能,在后端它通过定时任务框架Quartz实现了每1.5小时一次向微信服务器获取小程序accessToken的功能,以确保与其他微信接口之间的通讯顺畅。

    1. Wenjuan调查子系统

    该子系统主要实现了投票管理、问卷管理、数据分析的功能是该系统的核心业务子系统。该子系统的功能主要在微信小程序端实现,它采用百度ECharts做数据分析为用户提供良好数据展示效果。

    问卷调查系统系统模块划分图如图3.2所示。

    图3.2  系统模块划分图

    3.2 流程设计

    后台采用多用户多角色多资源的关系设计,用户和角色为多对多关系,角色和资源为多对多关系,实体表与实体表之间采用存储id方式的弱关联。前台用户分为用户和微信用户,其关系为一对一关系[3]。

    前台用户登录流程图如图3.3所示。

    图3.3  前台用户登录流程图

    后台用户登录流程图如图3.4所示。

    图3.4  后台用户登录流程图

    3.3 数据库设计

    问卷调查系统下属的四个子系统总使用数据表27个,各表名称及功能如表3.1所示。

    表3.1系统数据库列表

    表名称

    说明

    basics_file

    文件索引表,用于保存前台的图片信息

    manage_api

    后台页面Api接口表,用于权限系统中url的允许

    manage_environment

    系统环境配置表,保存系统名称,邮件服务,系统介绍视频

    manage_frontlink

    前台链接表,存储前台需角色方能访问的用户资源权限url

    manage_frontrole

    前台用户角色表,记录前台用户角色分配

    manage_link_role

    前台链接角色关系表,存储角色和前台url的多对多关系

    manage_resource

    后台按钮资源表,保存后台用户的按钮资源

    manage_resource_role

    后台按钮资源角色关系表,存储后台角色和按钮资源的多对多关系

    manage_role

    后台用户角色表,用于后台用户角色的管理[9]

    manage_subscriber

    前台用户表,用于记录前台用户信息

    manage_subscriber_role

    前台用户角色关系表,存储前台用户和前台角色的多对多关系

    续表3.1

    manage_user

    后台用户表,后台管理员信息表

    manage_user_role

    后台用户角色关系表,存储后台管理员与后台角色的多对多关系

    wj_candidate

    投票候选项表,保存投票活动的候选项

    wj_check

    填空验证规则表,记录问卷填空题题型的内容验证规则

    wj_choice

    选择题选项表,存储问卷中选择题的选项内容

    wj_comment

    评论信息表,存储系统中评论及评论关系表

    wj_commentrecord

    评论点赞记录表,记录用户对评论的点赞,拍砖

    wj_problem

    问卷问题表,保存问卷调查的问卷的问题

    wj_question

    问卷调查表,保存问卷调查活动信息

    wj_vote

    投票表,存储投票活动信息

    wj_voterecord

    投票记录表,记录用户对投票候选项的投票记录

    wx_param

    微信参数表,配置微信的参数,用于与微信开方接口通讯

    wj_answer

    用户答题答案表,存储用户对每道题的答案

    wj_reply

    用户问卷表,记录存储用户参加作答的问卷

    wj_footprint

    足迹表,用于记录用户的访问浏览记录

    wx_user

    微信用户表,存储从微信接口获取到的用户信息

    以下主要介绍5个核心表。

    (1)文件索引表basics_file,为用户上传的文件或图片提供数据索引方便使用和查找详情如表3.2所示。

    表3.2 文件索引表basics_file

    字段

    数据类型

    长度

    是否为空

    主键

    说明

    id   

    bigint

    20

    自增长字段

    createTime

    timestamp

     

    创建时间

    state

    int

    2

    状态

    realName

    varchar

    1024

    文件真实名称

    uniName

    varchar

    1024

    唯一名称

    filePath

    varchar

    1024

    文件路径

    fileType

    varchar

    32

    文件类型

    imgFlag

    int

    2

    是否是图片

    surface

    varchar

    64

    数据库表名

    nature

    varchar

    64

    字段名称

    surfaceId

    bigint

    20

    数据库表信息Id

    (2)评论信息表wj_comment,属于Wenjuan调查子系统用户存储用户评论详情如表3.3所示。

     

    表3.3 评论信息表wj_comment

    字段

    数据类型

    长度

    是否为空

    主键

    说明

    id   

    bigint

    20

    自增长字段

    createTime

    timestamp

     

    创建时间

    state

    int

    2

    状态

    comment

    varchar

    2048

    评论内容

    useless

    bigint

    8

    拍砖 数量

    fabulous

    bigint

    8

    点赞 数量

    subscriberId

    bigint

    20

    主人表 id

    subscriberSurface

    varchar

    64

    主人表 名称

    subscriberNature

    varchar

    64

    主人表 文字信息段

    surface

    varchar

    64

    被评论表 表名

    nature

    varchar

    64

    被评论表 字段名

    surfaceId

    bigint

    20

    被评论标 id

    costSurface

    varchar

    64

    代价表 表名

    costNature

    varchar

    64

    代价表 字段名称

    costSurfaceId

    bigint

    20

    代价表 id

    (3)投票表wj_vote,属于Wenjuan调查子系统,记录投票活动内容的38个字段详情如表3.4所示。

    表3.4投票表wj_vote

    字段

    数据类型

    长度

    是否为空

    主键

    说明

    id   

    bigint

    20

    自增长字段

    createTime

    timestamp

     

    创建时间

    state

    int

    2

    状态

    Name

    varchar

    64

    投票活动名称

    Cover

    varchar

    512

    活动封面图片id列表

    introduce

    varchar

    2048

    投票活动介绍

    imgIntroduce

    varchar

    512

    活动介绍图片id列表

    themeColor

    varchar

    10

    活动1600万主题色

    repeatFlag

    int

    2

    是否重复多日投票

    frequency

    int

    3

    每日投票次数

    restrictFlag

    int

    2

    是否限制IP和地区

    province

    varchar

    64

    限制地区省份

    City

    varchar

    64

    限制地区城市

    district

    varchar

    64

    限制地区区县

    ipWxUserFrequency

    int

    3

    每个IP允许的用户数

    overt

    int

    2

    是否公开投票

    comment

    int

    2

    是否开启评论

    续表3.4

    Outside

    int

    2

    是否公开报名

    sponsor

    int

    2

    是否显示主办方

    sponsorName

    varchar

    48

    主办方名称

    sponsorPhone

    varchar

    16

    主办方电话

    reward

    int

    2

    设置奖励

    rewardDesc

    varchar

    2048

    奖励说明

    rewarImg

    varchar

    512

    奖励图片  id列表

    startTime

    timestamp

     

    开始时间

    endTime

    timestamp

     

    结束时间

    voteType

    int

    2

    1文字2 图片3 图文

    unusual

    int

    2

    管理标志

    unusualEplain

    varchar

    256

    异常原因

    reportEplain

    varchar

    256

    举报信息

    rWxUserId

    bigint

    20

    举报人 id

    wxUserId

    bigint

    20

    发起人id

    candidateNum

    int

    3

    候选数量

    candidateIndex

    int

    3

    候选项序号

    supNum

    int

    20

    投票活动总票数

    voteDataStr

    text

     

    投票活动Json字符串

    voteCode

    varchar

    16

    投票活动密码

    suspend

    int

    2

    是否暂停

    (4)候选项表wj_candidate,用于保存投票活动的各个候选项详情如表3.5所示。

    表3.5候选项表wj_candidate

    字段

    数据类型

    长度

    是否为空

    主键

    说明

    id   

    bigint

    20

    自增长字段

    createTime

    timestamp

     

    创建时间

    state

    int

    2

    状态

    orderNum

    int

    5

    排序号候选项选手号

    cover

    varchar

    512

    活动封面图片id列表

    introduce

    varchar

    1024

    候选项介绍

    imgIntroduce

    varchar

    512

    选项介绍图片id列表

    name

    varchar

    64

    候选项名称

    supNum

    int

    20

    选项票数

    useFlag

    int

    2

    拒绝,审核中,通过

    voteId

    bigint

    20

    投票活动id

    voteType

    int

    3

    投票类型

    wxUserId

    bigint

    20

    报名人微信用户id

     

    续表3.5

    comment

    varchar

    3

    评论数量

    (5)问题表wj_problem,用于记录问卷中各个题目详情如表3.6所示。

    表3.6 问题表wj_problem

    字段

    数据类型

    长度

    是否为空

    主键

    说明

    id   

    bigint

    20

    自增长字段

    createTime

    timestamp

     

    创建时间

    state

    int

    2

    状态

    name

    varchar

    256

    问题问题表

    questionId

    bigint

    20

    所属问卷id

    orderNum

    int

    5

    题号

    qType

    varchar

    26

    问题类型

    cover

    varchar

    1024

    题目封面id列表

    must

    int

    2

    是否必须作答

    choicesNunber

    int

    4

    选择题选项数量

    answerNumber

    int

    4

    选择题答案数量

    lineNumber

    int

    2

    简答题文本框行数

    checkType

    varchar

    32

    填空检查类型

    checkId

    bigint

    20

    填空检查id

    maxFen

    int

    2

    评分题最高分

    score

    int

    3

    本题分数

    genre

    int

    2

    类型

    wxUserId

    bigint

    20

    所属用户id

    examineFlag

    int

    2

    是否考试题目

     

     

     

    4系统实现

    4.1系统的开发与实施环境

    系统的开发环境如下:

    (1)技术平台: J2EE[10]

    (2)开发软件:IntelliJ IDEA 、微信开发者工具

    (3)开发语言:Java[11]、Jsp、微信小程序

    (4)web服务器:Tomcat 7

    (5)数据库:MySql 5.5、Redis 3.2

    (6)版本控制:Tortoise SVN

    (7)Jar包管理:Maven 3.5

    (8)操作系统:Windows 10 专业版

    实施环境:

    (1)数据库:MySql 5.5、Redis 3.2

    (2)web服务器:Tomcat 7 、Nginx[12]

    (3)操作系统:Windows Server 2012

    4.2 核心技术简介

    本系统所涉及的技术如表4.1所示。

    表4.1核心技术

    技术名称

    说明

    Apache Shiro

    用于做权限控制的轻量级框架,在本系统中采用基于url和基于标签的控制方式[13]

    MyBatis

    是一款持久层框架,用于操作数据库

    Spring MVC

    属SpringFrameWor的子产品,将Web层进行职责分层帮助开发者敏捷开发。

    Spring

    开源的实现IOC容器和AOP的耦合性轻量级框架[14]

    Apache POI

    操作Microsoft Office文件的开源库,用于为excel文件的生成和读取等操作

    Quartz

    由java编写的开源作业调度框架,Wx微信服务子系统以每1.5小时频率向微信请求accessToken

    Common Email

    是对java自带的mail模块的封装,轻松的实现不同类型邮件发送,为用户发送报表[15]

    Apache Log4j

    一个强有力的日志操作包,用于系统日志的记录

    Google zxing

    谷歌发布的用来识别多种格式条形码的开源项目

    FFmpeg

    用来操作音频、视频的开源计算机程序,用于将上传后的MP4视频转化为m3u8格式

    JQuery

    是一个 JavaScript 库,封装了大量js原生代码方便开发者使用

    Layer

    一个基于JQuery的弹出层插件,可自定义页面,提示消息,对话框

    Ajaxfileupload

    是异步文件上传插件,项目已停止维护,为兼容JQuery版本在项目用有修改部分源码

    JQuery Validate

    一款文本数据验证的插件,方便在前端校验数据减少服务器负荷

    Ztree

    是一款轻量级的树结构框架,用于按钮菜单树的操作和实现树型显示数据

    H-ui

    轻量级前端框架,简单免费,兼容性好,用于做后台管理页面的布局设计

    续表4.1

    ECharts

    百度推出的一款数据分析与数据可视化插件,用于数据分析和报表

    BMap

    百度地图推出的小程序端的地图插件,用于定位用户信息,分析用户特征

    4.3 底层接口和类的封装

    4.3.1公共类的实现

    在本系统中改进MVC的三层架构将控制层细分为页面跳转控制层、逻辑控制层、数据操作层。对于在数据操作层对数据库的操作,逻辑控制层中增、删、改、查、检验实体对象的逻辑中常用的业务需求是很多的每个实体类的操作十分雷同。于是为方便起见,我们对各个实体类对数据库的访问操作做了进一步的提取。利用java中提供的泛型和继承得出BasicsAdminMapper数据访问层公共类,各个实体dao操作类均继承该公共类,以提高代码的复用性。基于泛型和反射的知识,对逻辑控制层做提取得到BasicsService逻辑控制层公共类。

    BasicsService公共类实现如表4.2所示。

    表4.2 BasicsService公共类实现

    方法名称

    说明

    getBasicsAdminMapper()

    抽象方法钩子函数,子类中实现让父类也可以使用子类的属性

    addSave(E pojo)

    添加实方法,方法中调用验证方法通过后会自定设置状态插入数据库

    editSave(E pojo)

    抽象方法由子类实现

    delete(Long id)

    对象的逻辑删除,修改状态字段state的值为0表示停用,提供了id为String类型的重载

    deleteByPrimaryKey(Long id)

    对象的物理删除,直接从数据库中删除,提供了id为String类型的重载

    selectByPrimaryKey(Long id)

    根据id查找对象并返回,提供了id为String类型的重载

    listByAttribute(String attribute, String checkVal)

    根据属性查找 只找 状态为启用的 state=1

    istByAttrValueMap(Map<String,String>attrValue, int state)

    传递一个字段、值Map,状态生成需要查询的sql语句并执行返回结果列表

    listByAttrValueMap(Map<String,String> attrValue)

    传递一个字段、值Map,默认状态为1成需要查询的sql语句

    listByAttributeResponse(String attribute)

    根据属性查找 只找 状态为启用的 state=1,返回值ResultResponse在后边介绍

    listJson(TableUploadUtil tableUploadUtil)

    根据分页条件计算页数,查询当前页内容列表,返回值TableReturnUtil在后详细介绍

    loadCheckAttributeIsExistence(String attribute, String checkVal, Long checkId)

    用于对象某字段的字段值已存在的判断,checkId为0存在即为存在,checkId为当前实体对象id会判断存在的值是否是本身的

    续表4.2

    checkInfo(E pojo)

    在将对象持久化入数据库之前,做对象实体的属性验证功能,用到自定义的多种验证规则后边详述

    BasicsAdminMapper公共类实现由表4.3所示。

    表4.3 BasicsAdminMapper公共类实现

    方法名称

    说明

    insert(T record)

    用于实体T的添加,其中采用主键返回策略将自动id返回给

    updateByPrimaryKey(T record)

    实体类T的更新工作,更新主键id为关键不能改变

    deleteByPrimaryKey(Long id)

    实体类T的删除,这个方法是实体类的物理删除方法

    selectByPrimaryKey(Long id)

    实体类T根据id的查询,返回一个T的一个实体对象使用频率极高

    listByAttribute(String attribute, String checkVal, Integer state)

    利用MyBatis中$和#两种符号的功能差异实现,可以用来查询指定字段、指定字段值的实体列表

    listByAttrValueMap( String attrValueMap, Integer state)

    原理与listByAttribute方法相同,这可以查询多个指定字段的指定值,使用时切忌数据库表中要存在这些字段

    getCount(TableUploadUtil tableUploadUtil)

    根据分页信息查询返回所有复合条数的数据数量,用于统一的数据列表分页,TableUploadUtil类会在后边详细叙述

    listPageObjs(TableUploadUtil tableUploadUtil)

    根据条件查询分页中当前页的数据,返回实体类T的对象列表

    4.3.2关于ResultResponse统一接口参数的实现

    系统采用前后分离的方式,最有效的实现方式就是通过权限token和json数据通讯,采用接口的方式,常存在不同接口间返回值的差异带来的不必要麻烦,为此系统中统一设计接口返回值达到接口返回值的一致性规范性,为使用提供便利。

    ResultResponse统一接口如表4.4所示。

    表4.4 ResultResponse统一接口

    字段名称

    说明

    String resultMsg

    返回信息提示用于对话框提示用户

    String resultCode

    结果码:200操作正常400返回操作异常401权限不足

    Object data

    成功后存放用户请求的数据

    4.3.3关于数据分页的实现

    系统中分页的实现主要有两种方式:方法一,页面一次将全部数据请求到页面缓存,用前台分页插件做分页,显示当前页的内容;方法二,采用数据库分页技术,每次请求得到符合条件的数量和当前页应显示的数据信息。方法一请求次数少但大量数据可能存在浪费过剩还有带来带宽占用过大的问题,方法二虽然请求次数高于方法一但每一条数据都是用户选择的,没有数据过剩的情况,大大降低带宽的占用提高访问速度。综上所述结合本项目的海量数据问题我们选择第二种实现方式。前端使用jquery.dataTables插件做分页的页面渲染,后端我们设计了适用于该插件的分页请求参数类TableUploadUtil和分页结果返回类TableReturnUtil。

    分页请求类如表4.5所示。

    表4.5 TableUploadUtil分页请求参数类

    字段名称

    说明

    int start

    开始记录数

    int draw

    前台传过来的要请求的页数

    int length

    每页记录数,分页大小默认为10

    String searchdetail

    搜索条件值

    String searchdeAttribute

    搜索条件属性

    String sql

    附加搜索sql

    分页结果返回类如表4.6所示。

    表4.6 TableReturnUtil分页结果返回类

    字段名称

    说明

    long pageLength

    分页大小默认为10,用于微信小程序分页

    int draw

    当前页数

    long length

    每页记录数,分页大小默认为10

    long pageNum

    符合条件的总页数,用于微信小程序分页

    long recordsTotal

    符合条件的信息总条数

    Object data

    当前页数据信息

    4.3.4关于自定义的验证方式和校验工具类的实现

    在项目中大多数需要用到数据验证,确保数据库的安全防止sql注入攻击和规范用户输入信息,数据校验多采用两种实现思路:一、前端的数据校验,可以有效减少后端验证带来的带宽占用问题减少对后端接口的请求,但是不能拦截技术人员绕过前言验证的攻击;二、在后端中做数据校验可以有效解决数据安全性问题。在本系统中采用二者结合的方式前端验证作为验证的第一道防线减少对后端的请求,用后端验证作为数据安全和数据规范保证数据完整性的最后一道屏障。前端验证使用jquery-validation插件。后端验证定义了运行时的CheckAnnotation,该类包括:type()方法默认值为“required”用于确定验证类型、message()方法返回验证失败的提示信息、attribute()方法确定要验证的数实体属性。在CheckAnnotationUtil类中存有验证类型与数据校验类的方法名称,通过反射的方式动态执行验证方法。系统实现了RegexUtil类作为数据校验的工具类。以此实现验证规则通过在实体类属性上加一个CheckAnnotation的简单方式实现多种多样的数据校验。RegexUtil数据校验类表如表4.7所示。

     

    表4.7 RegexUtil数据校验类

    字段名称

    说明

    htmlFilter(String inputString)

    过滤html代码

    isContainsSpecialChar(String text)

    是否包含中英文特殊字符,除英文"-_"字符外

    isChineseChar(String text)

    判断中文字符(包括汉字和符号)

    isEnglish(String text)

    判断英文字符(a-zA-Z)

    isZipCode(String text)

    邮政编码验证

    isIdCardNo(String text)

    第二代身份证号码验证

    isMobile(String text)

    手机号码验证

    isPhone(String text)

    电话号码验证

    isNumeric(String str)

    验证手机号或电话号码

    isDigits(String str)

    只能输入数字

    isEmail(String str)

    匹配Email地址验证

    4.3.5关于微信小程序端的js封装

    微信小程序在2016年内测,正式发布于2017年,相比于其他 技术平台起步较晚,但是借助腾讯公司的超大用户基数,势头迅猛发展迅速。微信小程序支持JavaScript的ES6标准,web上的js插件经过简单修改,即可在微信小程序上使用。为统一开发本系统封装了:dateTimePicker.js用于为时间picker提供最高年月日时分秒6级的时间选择数据;redis.js用于统一管理操作微信小程序缓存;bmapLocation.js结合百度官方bmap接口类实现对用户的定位和位置服务;dialog.js用户消息提示和弹出式对话框的操作;urls.js配置微信小程序用于和后端服务接口地址;util.js提供常用的操作如访问服务器api、时间字符串操作等等;

    Dialog对话框如表4.8所示。

    表4.8 dialog.js对话框的方法

    方法名称

    说明

    warnModalBack(title, content, callback)

    带确认按钮的对话框,其中callback为回调函数

    warnModal(title, content)

    带确认按钮的提示框

    warnModalError(content)

    带确认按钮的错误提示框

    warnModalSuccess(content)

    带确认按钮的成功提示框

    warnModalTrueBack(title, content, callback)

    带“是”“否”按钮的询问框,callback为回调函数

    showToastAutoError(title)

    带错误图片自动消失的提示框

    showToastAutoSuccess(title)

    带成功图片自动消失的提示框

    showToastSuccess(title)

    微信原装的成功提示框

    showToastLoading(title)

    微信原装的加载动画对话框

    4.4 前端系统的实现

    4.4.1界面UI实现

    为能给用户提供一套简洁大气UI,本系统规定:

    (1)不同页面统一字体大小为30rpx。

    (2)Icon主题颜色色值为# 1296DB、大小为32rpx。

    (3)页面统一背景颜色为#F3F3F3。

    (4)页面标题颜色色值#FFF、页面标题背景颜色色值#336799。

    (5)核心按钮均采用#1262DB至#12CADB的椭圆动态背景渐变色。

    4.4.2问卷添加页面

    问卷添加页面以选项卡效果呈现。页面分为活动内容、问卷设置、题目项三部分。利用上一步下一步按钮进行切换,每次下一步被触发时将会触发隐藏任务保存草稿,当用户中途退出程序后再次进入时询问用户是否使用草稿。

    问卷添加页面界面效果如图4.1所示。

    图4.1  问卷添加页面

    (1)活动部分包括设置问卷封面(必须上传)、问卷名称(1到20个字之间)、问卷介绍(不能为空)、问卷图片介绍(任意张)

    (2)问卷设置部分包括设置主题颜色(默认#000000)的弹出式拾色器、问卷开始时间和结束时间、设置地区和IP限制的开关、省市区三级联动选择器(默认北京市-北京-东城区)、数字按钮组的同IP微信用户数量(默认为1)、提供是否公开是否可以评论是否显示主办方的开关,主办方名称(在开启显示主办方的开关时不能为空),主办方电话(在开启显示主办方的开关时必须为手机号)

    (3)题目项部分包括设置是否试卷类型的开关(默认为关)、添加题目的按钮(试卷模式下只能添加单选题和多选题)、点击可选中某题目将显示该题的编辑复制上移下移删除按钮、提供预览功能为方便用户操作、发布问卷后清除草稿询问用户是否跳转到问卷答题页面是则跳转否则后退回个人中心。

    4.4.3问卷题型实现

    问卷提供单选题、多选题、填空题、简答题、评分题、定位题、位置题、文件题、图片题九种题型可供用户选择进而设计具有强大功能的问卷。

    (1)单选题界面提供题目图片的上传、选项图片的上传、可以选择被调查者是否必须作答、单选题选项数量不能低于2个、在选择问卷模式为试卷后必须设置其中一个为正确答案。

    (2)多选题提供题目选项的图片上传、选择是否必须作答、选项数量不能低于两个、在选择问卷模式为试卷后必须至少设置其中两个为正确答案。

    (3)填空题可上传题目图片、设置是否必须作答、可在手机号、邮箱、二代身份证号等选择一种验证方式限制被调查者输入信息。

    (4)简答题提供题目的图片上传、选择是否必答、选择显示时多行文本的行数。

    (5)评分题可设置题目图片、在2-10之间选择设置最高分、选择被调查者是否必须作答。

    (6)定位题、位置题、文件题、图片题这四种题型默认为必答题。

    问卷各类型问题界面效果如图4.2所示

    图4.2  问卷各类型问题

    4.4.4投票页面实现

    投票的添加部分与问卷的添加页面雷同,不再赘述。投票详情页面部分主要包括详情页面、活动详情页面、候选选投票页面、选项报名页面、候选项管理页面。

    详情页面需要根据发起者设置是否开启评论进而选择是否显示评论点赞部分,候选项显示主要有根据选手号显示和根据排行榜显示,排行榜显示时前三名分别采用金银铜三个icon其余选手则为排名名次。根据投票类型的不同,选手号列表显示效果不同,文字类投票会采用文字瀑布流的形式显示,图片和图文类型均采用图片显示。

    投票UI设计 具体界面如图所示。

    图4.3  投票UI设计

    4.4.5数据分析的实现

    在完成问卷活动结束后对数据分析处理是一个重要的功能。本系统提供五种类型的图表:仪表盘用于时间进度图显示活动进度、折线图根据活动时间长短显示各时段用户答卷数分布、饼状图用于对单选题的选择数量分析、柱状图显示多选题个选项的选择率、地图用于定位用户具体位置。具体页面如下图4.4和图4.5所示。

    图4.4  数据分析页面1

    图4.5  数据分析页面2

    4.4.6其他部分效果实现

    在用户权限不足时会自动跳转到401权限不足页面,提醒用户到登录界面切换账号登录。本系统提供介绍视频供用户学习使用本系统,在视频介绍页面即可查看。由于微信小程序不能直接播放m3u8格式的视频,介绍页面采用web-view标签将服务器视频播放页面导入的方法实现。

    部分在其他效果如图4.6所示。

    图4.6  其他部分页面

    4.5 后端管理的实现

    4.5.1用户登录的实现

    后台管理利用Shiro框架采用Url加标签级的权限控制方式利用Redis数据库做用户权限的高速缓存,用户全部权限存储Redis中有效期为10分钟,Key的生成规则如下:"session_"+LoginType.ADMIN.toString()+"_"+us.getUserName()+"_"+us.getUserPassword()。LoginType.ADMIN.toString()为用户的登录类型、us.getUserName()为用户名称、us.getUserPassword()为用户密码。当用户权限不足或session过期时自动跳转到登录页面,当Key权限过期时自动加载刷新当前用户的权限放入Redis缓存。登录后跳转到后台主页默认加载欢迎页面。

    登录页面下图4.7所示。

    图4.7  登录页面

    4.5.2资源管理的实现

    本系统按钮资源、角色、用户之间为多对多对多关系两两之间采用关联表进行关联。可任意创建角色分配资源也可以创建用户分配角色超级管理员角色拥有全部权限。

    资源列表页面如下图4.8所示。

    图4.8  资源列表页面

    4.5.3验证方式的实现

    本系统填空题验证通过正则表达式实现共有:非空、手机、邮箱、姓名、身份证、日期、含零整数、非零整数、QQ九种。超级管理员可以后期对验证方式进行管理。

    验证列表页面如下图4.9所示。

    图4.9  验证列表页面

    结束语

    在学校领导的安排下和指导老师的帮助下,我们进行了数月的毕业设计工作。完成了从系统分析到考察现有软件再到设计开发一款基于微信小程序的工作。完成了发布问卷投票、和数据收集、数据分析的功能设计。我深深地感受到了,单单在课本上学知识是没有用的,必须贴合实际,在学中应用,在应用中在继续学习,只有这样形成良好循环,才能学以致用,提高自身的学习能力和学习效率。

    本系统有如下优点:

    (1)设计之初采用了前后分离的模式为以后跨平台提供了扩展基础。

    (2)使用Shiro采用Url加标签级的权限控制方式利用Redis数据库做高速缓存。

    (3)本系统用Nginx配合Toncat服务器实现简易的负载均衡

    (4)采用微信小程序端的百度EChart实现对问卷结果的数据分析

    (5)使用FFmpeg软件将MP4格式的视频转为m3u8格式视频并,实现前端页面对视频的分步加载和播放。

    此次毕业设计程序凝聚了我这本科两年专科三年学习的大部分内容,更是对全部知识的最后一次重大检阅。由于此次毕业设计过程中认识不足对程序编写部分出现过于低估,导致毕设后期时间严重不足,难免带来设计上的缺陷和不足,敬请老师们同学们指出。

     

     

    参考文献

    [1]surveysavvy[EB/OL] .https://www.surveysavvy.com/,2019

    [2]nginx浅谈之负载均衡[EB/OL].http://baijiahao.baidu.com/s?id=1602357706924342625,2019

    [3]孙晨霞等.数据库应用技术 [M].北京邮电大学出版社,2010

    [4]L Carlson.Redis in Action[M]. Manning Publications,2015

    [5]ECharts[EB/OL].https://echarts.baidu.com/,2019

    [6]鲍旭华,洪海,曹志华.破坏之王-DDoS攻击与防范深度剖析[M] .机械工业出版社,2014

    [7]Reto Meier.Professional Android 2 Application Development[M]. Birmingham, 2010 

    [8]贺松平.基于MVC模式的B/S架构的研究与应用[M],2009

    [9]赵利庆.Java Web架构中数据库优化模式的研究与实现[M],2015

    [10]赵强. J2EE应用开发(第二版)[M].电子工业出版社,2008

    [11]Bruce Eckel.Thinking in Java[M].Upper Saddle River, New Jersey, 2006

    [12]戎伟,张双.Struts-Java流行服务器、框架、工具及整合应用[M].人民邮电出版社,2006

    [13]Shiro从入门到精通[M] 程序员大本营,2016

    [14]Craig Walls,Ryan BreidenBach.Spring In Action[M].Manning Publications,2006

    [15]宋佳颖.基于Java的邮件接收系统分析[M],2015

    致谢

    历经数月的毕设的各项工作已经趋近尾声。我也即将告别这深爱得校园走向社会的大门。我一定牢记自己是一个农大人一个师大人的责任和担当,谨遵老师们的教诲,严以律己,不忘使命砥砺前行。

    在这里,我要深深地感谢我这五年的老师们和与我朝夕相处帮助我的同学们,我的个人成长与他们所有人是密切相关的,没有他们的帮助,就没有了成长之后的我。

    程序下载链接:

    数据库下载连接https://download.csdn.net/download/qq_30615201/12498161

    程序下载连接https://download.csdn.net/download/qq_30615201/11223278

    展开全文
  • 开源问卷调查系统

    2020-07-29 14:19:59
    开源调查问卷系统,可以进行二次开发的系统,表结构设计详细。
  • 基于Web的在线问卷调查系统源码

    热门讨论 2020-07-30 23:33:23
    基于Web的在线问卷调查系统源码,里面包括数据库文件,源码。搭配好java环境之后可以直接运行
  • 在线问卷调查系统分析与实现

    千次阅读 2018-04-21 17:06:58
    基于java在线问卷调查系统分析与实现emmmm本系统带程序说明书 有需要的可以去我上传的资源里面找,找不到的话,评论我,或者站内私信留下邮箱,我看到机会给你发,也可以主动联系我博客名。因为最近太忙一直没有上传...

    基于java在线问卷调查系统分析与实现

     J2EE是java2 渠道企业版(Java 2 Platform,Enterprise Edition),J2EE是一种不同于传统开发的技能架构,存在许多组件,主要可简化且标准运用体系的开发与部下,进而进步可移植性、安全与再用价值。它克服了传统的,树立客户端、效劳端方式的弊端,通过阅读器拜访效劳器的方式,契合了广阔用户的操作习气,运用户操作很便利。

    1.3.5 Struts2

          Struts2是一个典型的MVC架构,给软件开发带来很大的便利。MVC是一种规划方式,它强制性地使运用程序的输入、处理和输出分隔。运用MVC方式,运用程序被分红三个核心部件:模型(Model,即M)、视图(View,即V)、控制器(Controller,即C)。它们各自处理自己的使命。

    1.4 Struts2 架构流程图

    1.3.7 SQL Server 2005

    SQL Server为联络型数据库办理体系,具有杰出的伸缩性,可跨过多处理器的效劳器等多种渠道运用。运用SQL Server2005,可以在数据库层开发Web效劳,将SQL Server当作一个超文本传输协议侦听器,并且为网络效劳中心运用软件供给一个新式的数据存储功用。



    第二章 需求剖析

    2.1 可行性剖析

    对每一个体系,在开发之前都应该剖析其可行性,从不同的方面进行剖析,是对体系整体功用的区分,一方面考虑体系是否得以完成,另一方面在经济上是否可行,在保证体统的完整性的情况下,也要效益最大化,使得经济可持续发展。

    2.1.1 技能可行性

    本体系JSP页面由HTML代码和嵌入其间的java代码所组成,效劳器在页面被客户端恳求今后对这些java代码进行处理,然后将生成的HTML页面回来给阅读器。

    2.1.2 经济可行性

    体系的开发大大节约了人力、物力,一方面使得查询的工作效率进步,另一方面使得办公无纸化得以完成,避免了纸张的糟蹋,节省了经济的开销。

    2.1.3 操作可行性

    本体系的与传统的问卷流程相似,关于用户来说,操作简略,操作界面简略。使得数据可以得到敏捷的计算,保证数据的可靠性、准确性。

    2.2 体系用户用例图

    2.2.1 办理员用例图

    办理员具有权限,可对体系中用到的问卷,进行相应的改动,办理注册的用户,查看统的成果,进行数据剖析,详细的功用如下图2.1所示:

    2.1 办理员用例图

    2.2.2 普通用户用例图

    普通用户通过注册加入体系后,完成在线参加问卷调、阅读公告信息等功用。

      
     


    2.2 普通用户用例图

     

    2.3功用模块需求剖析

    2.3  办理员用户功用模块图









     

    2.4 普通用户功用模块图

    2.4 规划思维

    规划的思维应遵从以下几点:

    1. 选用B/S规划方式,通过网页完成前台与后台的交互,满意了大多数人的习气,操作简略

    2. 简略的页面,便利用户了解,对体系的功用敏捷把握,简略操作。

    3. 把功用模块化,使得体系的功用区分清晰,模块化使得体系的功用逐个完成,利于体系开发的进程。

    2.5 性能需求

    2.5.1 体系的安全性

        安全性对任何一个项目都是有必要存在的,项目的安全保证了信息不被走漏,保证信息不被随意更改,每一个具有自己的权限,别人不得运用,保证了个人信息的安全性。

    2.5.2 数据的完整性

    1   每条信息都有对应的值

    2   各种数据在不同记载中的一致性

    3   相同数据在不同记载中的一致性

     

     

     

     

     

     

     

     

     

    第三章 体系剖析与规划

    3.1 数据库的剖析与规划

    对恣意体系,避免不了对数据的存储,因此触及到数据库,保存用户发生的数据。数据库的剖析,数据库的规划一般通过规划。需求剖析、概念规划、逻辑规划、物理规划5个过程。

    3.1.1 数据库的概念结构规划

    数据库的概念结构规划选用实体—联络(E-R)模型规划办法。E-R模型法的组成元素有:实体、属性、联络,E-R模型用E-R图表示,是提示用户工作环境中所触及的事物,属性则是对实体特性的描绘。



    blob.png

    blob.png

    blob.png
    展开全文
  • 问卷调查系统

    2020-01-10 16:19:39
    题目: a.txt: ABCDACBDACBDACBDACBD DACBCDACBDACBDACBDDA DACBDACBDDACBCDCBDCC ABCDACBDACBDACBDACBD DACBCDACBDACBDACBDDA DACBDACBDDACBCDCBDCC ABCDACBDACBDACBDACBD DACBCDACBDACBDACBDDA ...

    题目:

    题目

    a.txt:

    ABCDACBDACBDACBDACBD
    DACBCDACBDACBDACBDDA
    DACBDACBDDACBCDCBDCC
    ABCDACBDACBDACBDACBD
    DACBCDACBDACBDACBDDA
    DACBDACBDDACBCDCBDCC
    ABCDACBDACBDACBDACBD
    DACBCDACBDACBDACBDDA
    DACBDACBDD#CBDCBDCC
    ABCDACBDACBDACBDACBD
    DACBCDACBD
    CBDACBDDA
    DACBDACBDDACBCDCBDCC
    ABCDACBDACBDACBDACBD
    DACBCDACBDACBDACBDDA
    DACBDACBDD#CBCDCBDCC
    ABCDACBDACBDACBDACBD
    DACBCDACBDACBDACBDDA
    DACBDACBDDACBCDCBDCC
    ABCDACBDACBDACBDACBD
    DACBCDACBDACBDACBDDA
    DACBDACBDDACBCDCBDCC
    ABCDACBDACBDACBDACBD
    DACBCDACBDACBDACBDDA
    DACBDACBDDACBCDCBDCC
    ABCDACBDACBDACBDACBD
    DACBCDACBDACBDACBDDA
    DACBDACBDDACBCDCBDCC
    ABCDACBDACBDACBDACBD
    DACBCDACBDACBDACBDDA
    DACBDACBDDACBCDCBDCC
    ABCDACBDACBDACBDACBD
    DACBCDACBDACBDACBDDA
    DACBDACBDDACBCDCBDCC
    ABCDACBDACBDACBDACBD
    DACBCDACBDACBDACBDDA
    DACBDACBDDACBCDCBDCC
    ABCDACBDACBDACBDACBD
    DACBCDACBDACBDACBDDA
    DACBDACBDDACBCDCBDCC
    ABCDACBDACBDACBDACBD
    DACBCDACBDACBDACBDDA
    DACBDACBDDACBCDCBDCC
    ABCDACBDACBDACBDACBD
    DACBCDACBDACBDACBDDA
    DACBDACBDDACBCDCBDCC
    ABCDACBDACBDACBDACBD
    DACBCDACBDACBDACBDDA
    DACBDACBDDACBCDCBDCC
    DACBCDACBDACBDACBDDA
    DACBDACBDDACBCDCBDCC

    q.txt:

    1.mlc4Nfq1v83YUVce A.B32PCVARmlL3x4Bj B.dcMQqZLp8f29Q2R1 C.ItMPAvw62ODdrlMc D.kwkU4zVhHKtbm5ry
    2.O5RGVUvX9yv3IaFSLCABwoxhW A.T9vfkIIpLFuLmo9 B.OSSjNbaa0Jxz4 C.bvZ9WWPjJAHrc D.Bgh06T7jqBCe
    3.MzaWxDAu9kjG A.fLUN44n5sON B.NyBgLNKY8 C.3NCVr3P5IqK4 D.QuC66tdJ2IWx2bI3
    4.xHsxBaC3YWx A.iAR3LF5mCFrESdQ9FXne4VS8ol B.K2uuLg3TqnGdBT C.4BlrheYO38RMwhabzt5 D.zz6SJY3VSsqOR7MMmxxk223KEfA95
    5.U885OQrPsby A.E42pLaNUCaDJAap3yBZMHdOz B.UqEA2dJ24SkTVV46rlZHAfMNHTT C.5n6ODdtd15U80tB4RWef54 D.R53h4UAWmzZLPkp
    6.ALOdiBrrRZnUo A.ZkQ2D9NJoNqUA4YHWoCFJ B.l69TCZVmKdBU0 C.hOy9bJN5mV8vKSS D.lWWxrZlAKx5vQWms3WQDTBMIoYtnUR2Vy16a
    7.mlc4Nfq1v83YUVce A.B32PCVARmlL3x4Bj B.dcMQqZLp8f29Q2R1 C.ItMPAvw62ODdrlMc D.kwkU4zVhHKtbm5ry
    8.O5RGVUvX9yv3IaFSLCABwoxhW A.T9vfkIIpLFuLmo9 B.OSSjNbaa0Jxz4 C.bvZ9WWPjJAHrc D.Bgh06T7LjqBCe
    9.MzaWxDAu9kjG A.fLUN44n5sON B.NyBgLNKY8 C.3NCVr3P5IqK4 D.QuC66tdJ2IWx2bI3
    10.xHsxBaC3YWx A.iAR3LF5mCFrESdQ9FXne4VS8ol B.K2uuLg3TqnGdBT C.4BlrheYO38RMwhabzt5 D.zz6SJY3VSsqOR7MMmxxk223KEfA95
    11.U885OQrPsby A.E42pLaNUCaDJAap3yBZMHdOz B.UqEA2dJ24SkTVV46rlZHAfMNHTT C.5n6ODdtd15U80tB4RWef54 D.R53h4UAWmzZLPkp
    12.ALOdiBrrRZnUo A.ZkQ2D9NJoNqUA4YHWoCFJ B.l69TCZVmKdBU0 C.hOy9bJN5mV8vKSS D.lWWxrZlAKx5vYQWms3WQDTBMIoYtnUR2Vy16a
    13.mlc4Nfq1v83YUVce A.B32PCVARmlL3x4Bj B.dcMQqZLp8f29Q2R1 C.ItMPAvw62ODdrlMc D.kwkU4zVhHKtbm5ry
    14.O5RGVUvX9yv3IaFSLCABwoxhW A.T9vfkIIpLFuLmo9 B.OSSjNbaa0Jxz4 C.bvZ9WWPjJAHrc D.Bgh06T7LjqBCe
    15.MzaWxDAu9kjG A.fLUN44n5sON B.NyBgLNKY8 C.3NCVr3P5IqK4 D.QuC66tdJ2IWx2bI3
    16.xHsxBaC3YWx A.iAR3LF5mCFrESdQ9FXne4VS8ol B.K2uuLg3TqnGdBT C.4BlrheYO38RMwhabzt5 D.zz6SJY3VSsqOR7Mmxxk223KEfA95
    17.U885OQrPsby A.E42pLaNUCaDJAap3yBZMHdOz B.UqEA2dJ24SkTVV46rlZHAfMNHTT C.5n6ODdtd15U80tB4RWef54 D.R53h4UAWmzZLPkp
    18.ALOdiBrrRZnUo A.ZkQ2D9NJoNqUA4YHWoCFJ B.l69TCZVmKdBU0 C.hOy9bJN5mV8vKSS D.lWWxrZlAKx5vYQWms3WQDTBMIoYtnUR2Vy16a
    19.mlc4Nfq1v83YUVce A.B32PCVARmlL3x4Bj B.dcMQqZLp8f29Q2R1 C.ItMPAvw62ODdrlMc D.kwkU4zVhHKtbm5ry
    20.O5RGVUvX9yv3IaFSLCABwoxhW A.T9vfkIIpLFuLmo9 B.OSSjNbaa0Jxz4 C.bvZ9WWPjJAHrc D.Bgh06T7LjqBCe

    代码:

    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<Windows.h>
    
    struct Question
    {
    	//20道题,包括题目是5个字符串,每个字符串最长80个Byte。第一维表示题号(0号单元弃用),第二维表示题目和选项。
    	char qusetion[21][5][81];
    };
    struct Answer
    {
    	//某个选项为*代表多选,为#代表未选,其他字母为选项以外的答案(0号单元弃用)
    	char answer[21];	//	选项
    	int state;	//	是否有效
    };
    void ReadQuestion(Question& q);	//	从文件读取问卷题目
    void ReadAnswer(Answer a[]);	//	从文件读取问卷选项
    void IsValid(Answer a[]);	//	判断是否为有效问卷
    void StatisticAnswer(Answer a[]);	//	统计每一题中四个选项数量
    void StatisticDistribution(Question& q);	//	某一题的选项分布查询
    void SearchQquestion(Question& q);	//	显示题目
    void Interaction(Answer a[], Question& q);	//	人机交互界面
    
    static int allNumber = 0;//问卷调查总数
    static int validNumber = 0;//有效的问卷调查数
    static int perQueChoNum[21][5];//每个题四个选项的数量(0号单元弃用)
    int main() 
    {
    	Question q;	//	问卷调查问题
    	Answer a[100];	//回收的问卷调查
    	ReadQuestion(q);	//读取问卷调查的问题到q
    	ReadAnswer(a);	//读取问卷调查的结果到a[]
    	Interaction(a,q);	//人机交互界面
    }
    void ReadQuestion(Question& q)	//读取问卷调查的问题到q
    {
    	int i = 1;	//	初始化循环计数标志
    	char q0[81], q1[81], q2[81], q3[81], q4[81];	//定义存储题目和选项的临时变量
    
    	FILE * fp;	
    	fp = fopen("q.txt", "r");	//以只读方式打开
    	while (fscanf(fp, "%s %s %s %s %s\n", q0,q1,q2,q3,q4) != EOF)	//读到文件尾停止
    	{
    		strcpy(q.qusetion[i][0], q0);
    		strcpy(q.qusetion[i][1], q1);
    		strcpy(q.qusetion[i][2], q2);
    		strcpy(q.qusetion[i][3], q3);
    		strcpy(q.qusetion[i][4], q4);
    		i++;
    	}
    	fclose(fp);
    }
    
    void ReadAnswer(Answer a[])	//读取问卷调查结果
    {
    	int i = 1;	//	循环计数标志
    	int j = 0;	
    	char t[21];	//	定义存储答案的临时变量
    	FILE * fp;
    	fp = fopen("a.txt", "r");
    
    	while (fscanf(fp, "%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\n",
    		&t[1],&t[2], &t[3], &t[4], &t[5], &t[6], &t[7], &t[8], &t[9], &t[10], &t[11], &t[12], &t[13], &t[14],
    		&t[15], &t[16], &t[17], &t[18], &t[19], &t[20]) != EOF)
    	{
    		for ( i = 1; i < 21; i++)	//给每个结果赋值
    		{
    			a[j].answer[i] = t[i];
    		}
    		j++;
    		allNumber++;//问卷总数
    	}
    	validNumber = allNumber;	//此时默认有效问卷数等于问卷总数,在后面在进行具体计算
    	fclose(fp);
    }
    
    void IsValid(Answer a[])//统计有效问卷数
    {
    	int i, j;
    
    	for (i = 0; i < allNumber; i++)
    	{
    		for (j = 1; j < 21; j++)
    		{
    			if (a[i].answer[j] < 'A' || a[i].answer[j] > 'D')	//如果选项不属于A~D则为无效问卷
    			{
    				a[i].state = 0;	//置为无效
    				validNumber--;	//有效人数--
    				break;
    			}
    		}
    	}
    	printf("一共有问卷 %d 份,其中有效问卷 %d 份。\n",allNumber,validNumber);
    	system("pause");
    }
    
    void StatisticAnswer(Answer a[])//	统计每一题中四个选项数量
    {
    	int i, j;
    
    	for (i = 0; i < allNumber; i++)	//遍历所有问卷
    	{
    		
    		if (!(a[i].state == 0))	//如果问卷有效
    		{
    			for (j = 1; j < 21; j++)	//遍历所有问卷的答案
    			{
    				switch (a[i].answer[j])
    				{
    				case 'A':
    					perQueChoNum[j][1]++;//第j个问题的A选项+1
    					break;
    				case 'B':
    					perQueChoNum[j][2]++;//第j个问题的B选项+1
    					break;
    				case 'C':
    					perQueChoNum[j][3]++;//第j个问题的C选项+1
    					break;
    				case 'D':
    					perQueChoNum[j][4]++;//第j个问题的D选项+1
    					break;
    				default:
    					break;
    				}
    			}
    		}
    		
    	}
    	for ( i = 1; i < 21; i++)
    	{
    		printf("第 %d 题,选A的有 %d 份,选B的有 %d 份,选C的有 %d 份 ,选D的有 %d 份。\n", 
    			i, perQueChoNum[i][1], perQueChoNum[i][2], perQueChoNum[i][3], perQueChoNum[i][4]);
    	}
    	system("pause");
    }
    
    void StatisticDistribution(Question& q)//	某一题的选项分布查询
    {
    	int n = 0;	//题号
    	float A, B, C, D;	//ABCD选项的概率
    	printf("请输入要查询的题号:\n");
    	scanf("%d",&n);
    	A = (float)(100.0 * perQueChoNum[n][1] / (perQueChoNum[n][1] + perQueChoNum[n][2] + perQueChoNum[n][3] + perQueChoNum[n][4]));	//计算A的概率
    	B = (float)(100.0 * perQueChoNum[n][2] / (perQueChoNum[n][1] + perQueChoNum[n][2] + perQueChoNum[n][3] + perQueChoNum[n][4]));
    	C = (float)(100.0 * perQueChoNum[n][3] / (perQueChoNum[n][1] + perQueChoNum[n][2] + perQueChoNum[n][3] + perQueChoNum[n][4]));
    	D = (float)(100.0 * perQueChoNum[n][4] / (perQueChoNum[n][1] + perQueChoNum[n][2] + perQueChoNum[n][3] + perQueChoNum[n][4]));
    	system("cls");//清屏
    	printf("题目:%s\n",q.qusetion[n][0]);	//打印题目
    	printf("选择:%s 的占",q.qusetion[n][1]);	//打印选项A
    	printf("%.2f %%\n", A);
    	printf("选择:%s 的占", q.qusetion[n][2]);
    	printf("%.2f %%\n", B);
    	printf("选择:%s 的占", q.qusetion[n][3]);
    	printf("%.2f %%\n", C);
    	printf("选择:%s 的占", q.qusetion[n][4]);
    	printf("%.2f %%\n", D);
    	system("pause");
    }
    
    void SearchQquestion(Question& q)
    {
    	int n = 0;	//题号
    	printf("请输入要查询的题号:\n");
    	scanf("%d", &n);
    	system("cls");//清屏
    	printf("题目:%s\n", q.qusetion[n][0]);//打印题目
    	printf("选项:%s\n", q.qusetion[n][1]);
    	printf("选项:%s\n", q.qusetion[n][2]);
    	printf("选项:%s\n", q.qusetion[n][3]);
    	printf("选项:%s\n", q.qusetion[n][4]);
    	system("pause");
    }
    
    void Interaction(Answer a[], Question& q)
    {
    	int n;
    	system("cls");
    	printf("0.退出。\n");
    	printf("1.统计回收答卷的总数和有效答卷数。\n");
    	printf("2.统计有效答卷中每一题四种选项的数量。\n");
    	printf("3.有效答卷中单题的选项分布查询。\n");
    	printf("4.卷面内容查询。\n");
    	printf("请输入要查询的内容:\n");
    	scanf("%d",&n);
    	system("cls");
    	switch (n)
    	{
    	case 0:
    		exit(0);
    		break;
    	case 1:
    		IsValid(a);
    		Interaction(a, q);	//递归
    		break;
    	case 2:
    		StatisticAnswer(a);
    		Interaction(a, q);	//递归
    		break;
    	case 3:
    		StatisticDistribution(q);
    		Interaction(a, q);	//递归
    		break;
    	case 4:
    		SearchQquestion(q);
    		Interaction(a, q);	//递归
    		break;
    	default:
    		break;
    	}
    }
    
    
    展开全文
  • 在线问卷调查系统

    2020-07-21 09:56:40
    采用mvc结构开发的,利用了jsp、servlet、javabean,采用jdbc作为数据库连接,采用mysql数据库。
  • 在线答题-问卷调查系统 前段时间公司要开一个安全会议,要现场在线答题,网上的问卷调查网站很多,但涉及到公司内部信息,并且题型还需要自定义,所以打算自己做一个,要求就是直接输入姓名,手机号,公司就能进行...
  • 1:后台增加调查主题公开控制,设置为公开,则前端用户可以直接查看对应的调查问卷调查结果; 2:前台调查结果与后台的管理员针对问卷的选择题项目使用百分比柱状图显示;
  • 本人的毕业设计全部内容(有朋友反应缺失文件,这是误解哈,所有文件都在这个包里了,请仔细阅读说明文档),包括论文和源代码,主题为基于J2EE的网络问卷调查系统设计,该问卷调查系统全部用JSP/SERVLET实现,采用...
  • .net 问卷调查系统

    热门讨论 2020-07-30 23:32:31
    .net 问卷调查系统,简单实用 源代码提供 希望大家一块完善
  • 超强自定义问卷调查系统

    热门讨论 2020-07-28 23:33:20
    可自定义制作生成绝大多数产品问卷调查反馈系统 可自由编辑界面,所有用户界面均采用纯Html页面(模版生成) 随时可对使用中投票调查进行更改,随时查看和分析调查结果。 多种投票限制方式,自由设置。 完美实现第3方...
  • asp.net问卷调查系统

    热门讨论 2020-07-22 09:40:52
    简单的应用ASP.NET实现一个单选与多选投票系统,里面带有数据库,洗希望喜欢
  • ASP.NET 实现的在线问卷调查系统

    热门讨论 2020-07-30 23:33:35
    ASP.NET 实现的在线问卷调查系统,大家下载把
  • 校无忧问卷调查系统是指利用互联网手段通过网站上的在线调查表获得用户反馈信息。是一个适用于政府、教育机构、学校、企事业单位在互联网上进行信息互动与反馈收集的网上调研平台,可以满足这些机构开展深入网络调研...
  • 基于J2EE的问卷调查系统设计

    热门讨论 2020-06-03 23:32:27
    问卷调查,J2EE,设计 基于J2EE的问卷调查系统设计 程序代码
  • 基于ssm的问卷调查系统,可以用来做毕设设计和课程设计,用的技术是java web jQuery springmvc,mybatis
  • 问卷调查系统(c#)

    2020-07-17 17:52:47
    用c#写的问卷调查系统,包括问卷的创建,题目创建,选项的创建。前台根据问卷题目类型动态生成页面
  • PHP网上问卷调查系统,源码,建议有点Php基础的朋友使用。实现单选,复选,留言等功能。
1 2 3 4 5 ... 20
收藏数 13,843
精华内容 5,537
关键字:

问卷调查系统