`

调查问卷动态生成的一点探索

阅读更多

之前做过企业内部用的调查问卷系统,因为每一年的调查内容都有差异,所以每次都要重新修改代码,所以想到了能否用程序做一个自动问卷生成系统.

 

大体的思路如下:

 

1>一套基于web的后台问卷生成系统,通过web页面录入具体的调查问卷(问题,答案,单选还是多选,还是文字回答等等),生成的问卷以json的方式ajax提交给后台系统,后台可以利用spring rest的方式接收request,然后将json串存入mango db

 

2>调查参与者根据收到的url,访问调查问卷系统(后台返回json串,前端负责显示具体的调查页面),参与具体的调查,并提交调查结果,同样也是通过json串向后台发起rest请求,然后后台将json串存入mango db

 

相关技术:

jquery,javascript,css,html

spring boot, spring restful, spring mvc

mango db

 

试验性代码如下

1>后台调查问卷生成

 

survey.html

 

<html>

<head>
	<title>Create Survey</title>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
		
	<script type="application/javascript" src="js/jquery-3.1.1.min.js"></script>
	<script type="application/javascript" src="js/survey.js"></script>
	<link rel="stylesheet" href="css/survey.css" />
</head>

<body>

<form>
  	<div class="titlebox">Give a title to your survey</div>
	<div>
		<textarea name="title" id="title" placeholder="Survey Title" rows="3" cols="40"></textarea>
	</div>

	<div>
		<textarea name="question" id="question" placeholder="Question 1" rows="3" cols="40"></textarea>
	</div>
  
	
	<div>
		<div>
			<input type="text" name="answer" id="answer" placeholder="Answer 1" size="50" />
		</div>
		
		<div class="autoadd">
			<input type="text" name="answer" id="answer" placeholder="Answer 2" size="50" />
		</div>
	</div>
  
</form>


<input type="button" id="addquestion" name="addquestion" value="Add Question" />
<input type="button" id="submit" name="submit" value="Create Survey" />

</body>

</html>

 

survey.js

$.fn.serializeObject = function()  
{  
   var o = {};  
   var a = this.serializeArray();  
   $.each(a, function() {  
       if (o[this.name]) {  
           if (!o[this.name].push) {  
               o[this.name] = [o[this.name]];  
           }  
           o[this.name].push(this.value || '');  
       } else {  
           o[this.name] = this.value || '';  
       }  
   });  
   return o;  
};	


function addanswer(){
	
	if(typeof($(this).next().html()) != "undefined") {
		return;
	}
	
	var answerNo = $(this).parent().find("input").length + 1;
	var answer = "<div class=\"autoadd\"><input type=\"text\" name=\"answer\" \
		id=\"answer\" placeholder=\"Answer " + answerNo + "\" size=\"50\" /></div>";
	
	$(this).after(answer);
	alert(answer);
	setautoadd();
}


function createsurvey(){
	 alert($("#title").val());
	 $("form").each(function(){
		 	$(this).find("#title").val($("#title").val());
        	var jsonuserinfo = $(this).serializeObject();
        	alert(jsonuserinfo);
        	alert(JSON.stringify(jsonuserinfo));
        	doAjax(JSON.stringify(jsonuserinfo));
     });
}

function setautoadd() {
	$(".autoadd").bind("paste keypress", addanswer);
}

function setevent() {
	$("#submit").click(createsurvey);
	
	$("#addquestion").click(function(){
		var qNo = $("form").length + 1;
		alert("qNo:" + qNo);
		var quan = "<form> \
			<div style=\"display:none\"> \
				<textarea name=\"title\" id=\"title\" placeholder=\"Survey Title\" rows=\"3\" cols=\"40\"></textarea> \
			</div> \
			<div> \
				<textarea name=\"question\" id=\"question\" placeholder=\"Question " + qNo + "\" rows=\"3\" cols=\"40\"></textarea> \
			</div> \
			<div> \
				<div> \
					<input type=\"text\" name=\"answer\" id=\"answer\" placeholder=\"Answer 1\" size=\"50\" /> \
				</div> \
				<div class=\"autoadd\"> \
					<input type=\"text\" name=\"answer\" id=\"answer\" placeholder=\"Answer 2\" size=\"50\" /> \
				</div> \
			</div> \
			</form>";
		alert(quan);
		$("form").last().after(quan);
		setautoadd();
	});
}
		
$(document).ready(function(){
	setautoadd();
	setevent();
});

function success(data, textStatus, jqXHR){
	alert("success" + data);
}

function doAjax(data){
	var url = 'http://localhost:8080/greeting';
	alert("data:" + data);
	$.ajax({
		type: 'post',
		url: url,
		contentType:'application/json;charset=UTF-8',
		data: data,
		success: success,
		dataType: 'text'
	});
}

 

survey.css

body {
	margin : 50px;
	background-color : #CDBA96;
}

div {
	margin : 5px;
}

.titlebox {
	font-weight:bold;
}

 

 

2>前台调查页面生成

 

surveysheet.html

<html>

<head>
	<title>Survey Sheet</title>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
		
	<script type="application/javascript" src="js/jquery-3.1.1.min.js"></script>
	<script type="application/javascript" src="js/surveysheet.js"></script>
	<link rel="stylesheet" href="css/surveysheet.css" />
</head>

<body>

<form>
<div id="sheet">

</div>

</form>

<input type="button" id="submit" name="submit" value="Submit Survey" />

</body>

 

surveysheet.js

function submitsurvey() {
	
}

$(document).ready(function(){
	
	$("#submit").click(submitsurvey);
	
	alert("ready");
	var jsonStr = '[{\
		"title" : "survey",\
		"question_no" : "1",\
		"question" : "which fruit do you like?",\
		"answer" : ["apple","orange","banana"],\
		"answer_type" : "single"\
		},\
		{\
		"title" : "survey",\
		"question_no" : "2",\
		"question" : "which color do you like?",\
		"answer" : ["yellow","red","green"],\
		"answer_type" : "free"\
		}]';
		
	alert(jsonStr);
	
	var jsonObj = $.parseJSON(jsonStr);
	//alert(jsonObj);
	
	var sheetStr = '';
	
	$.each(jsonObj, function(i,value){
		if(i == 0){
			sheetStr += "<div>" + value.title + "</div>";
		}
		sheetStr += "<div>" + value.question_no + ". " + value.question + "</div>"
		
		$.each(value.answer, function(k,v){
			if(value.answer_type == "single"){
				sheetStr += "<div><input type=\"radio\" name=\"answer\" value=\"" + k + "\">" + v + "</input></div>";
			} else {
				sheetStr += "<div><input type=\"checkbox\" name=\"answer\" value=\"" + k + "\">" + v + "</input></div>";
			}
		});
		
	});
	alert(sheetStr);
	
	$("#sheet").html(sheetStr);
});

 

App.java

package prd.survey;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * Hello world!
 *
 */
@SpringBootApplication
public class App 
{
    public static void main( String[] args )
    {
    	SpringApplication.run(App.class, args);
    }
}

 

 

 

SurveyController.java

package prd.survey;

import java.util.concurrent.atomic.AtomicLong;

import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class SurveyController {

	private static final String template = "Hello, %s!";
    private final AtomicLong counter = new AtomicLong();

    @RequestMapping(value="/greeting", method = RequestMethod.POST,consumes = "application/json")
    public Greeting greeting(@RequestBody String body) {
    	System.out.println("body:" + body);
        return new Greeting(counter.incrementAndGet(),
                            String.format(template, "John"));
    }
}

 

Greeting.java

package prd.survey;

public class Greeting {

	private final long id;
    private final String content;

    public Greeting(long id, String content) {
        this.id = id;
        this.content = content;
    }

    public long getId() {
        return id;
    }

    public String getContent() {
        return content;
    }
}

 

 

 

页面效果如下:

 



 

 



 

  • 大小: 82 KB
  • 大小: 81.2 KB
分享到:
评论

相关推荐

    问卷系统调查

    【问卷系统调查】初入IT行业的开发者们,你们好!今天我们要探讨的是一个与Java开发相关的项目——问卷系统。这个项目对于新手来说是个极好的学习起点...祝你在探索问卷系统调查的过程中收获满满,编程之路越走越宽广!

    全球企业生成式AI应用现状调研报告-英.pdf

    1. **调研对象**:该报告基于对2,835位参与生成式AI试点或实施的企业和科技领导者进行的调查。 2. **调研结果**:结果显示,尽管企业领导者对生成式AI充满信心并期待其带来的变革,但仍存在关于技术对劳动力和社会...

    调查问卷提纲.docx

    - 所有成员参与调研方案撰写、问卷设计、实地调查、数据输入与统计、结果分析和报告设计与撰写。 这个调查提纲是全面而系统的,旨在为黑人牙膏提供有关孝感地区大学生市场的真实反馈,以便制定更有效的营销策略,...

    开题报告大学问卷调研系统设计与实现 已通过开题答辩的.doc

    - 未来,随着技术的不断进步,大学问卷调研系统将进一步完善,可能集成更多智能化的功能,如自动问卷生成、智能数据分析等。 - 在教育决策、教学质量评估等方面发挥更大作用,助力教育信息化建设。 #### 四、结论...

    生成式人工智能对市场调研的影响.pptx

    - **自动生成创意概念**:生成式人工智能通过分析大量的消费者数据,能够自动生成创意概念、广告语和市场调研问卷等,大大提升了创意生成的速度和质量。 - **个性化建议**:通过分析消费者的行为模式,生成式AI能够...

    调查问卷的SPSS统计图分析.docx

    【SPSS统计图分析】在IT领域,尤其是在数据分析和研究中,SPSS(Statistical Package for the Social Sciences)是一款强大的统计分析软件,它提供了丰富的图形生成工具,使得复杂的数据可视化变得简单易懂。...

    PHP实例开发源码—LimeSurvey php问卷调查系统正式版.zip

    这个压缩包包含了LimeSurvey的源代码,供开发者研究、学习或部署自己的问卷调查平台。 在深入理解LimeSurvey之前,我们需要了解PHP的基础知识。PHP(Hypertext Preprocessor)是一种广泛使用的服务器端脚本语言,...

    自动图表化问卷调查设计表Excel图表.zip

    总之,掌握Excel的这些技巧,能够帮助我们更有效地分析问卷调查数据,并生成专业的图表报告,使得非技术背景的读者也能轻松理解复杂的数据信息。在实际操作中,不断试验和优化,找到最适合你的数据呈现方式,将有助...

    kaggle社区问卷调查分析.zip

    《kaggle社区问卷调查分析》 本次分析主要围绕kaggle社区进行,涉及的数据集是kaggle针对其用户进行的一次问卷调查的结果。通过分析`multipleChoiceResponses.csv`这个CSV文件,我们可以深入理解kaggle用户的基础...

    一种基于姿态关系特征的机器人舞蹈生成方法.pdf

    此外,调查问卷的结果表明,人们很难区分舞蹈片段是由该算法生成的还是由人类设计的。这说明该方法生成的机器人舞蹈动作在流畅性、协调性和审美上已经达到了相当高的水平。未来的研究可能会进一步提升机器人舞蹈的...

    网络营销调研报告.doc

    实验步骤详细规划了从明确问题、确定调研目标,到制定调研提纲、设计问卷、统计调查人数、选择信息服务,直至生成最终报告的全过程。这一系列步骤旨在确保调研的系统性和科学性。 四、实验结果: 实验结果部分可能...

    调查方案设计模板.doc

    【调查方案设计】\n\n本调查方案旨在深入探究大学生倦怠感的成因、表现及影响,以浙江工商大学在校学生为调查对象,通过问卷调查和访谈的方式收集数据,旨在为学校及相关机构提供策略建议,以改善大学生的学习状态。...

    ChatGPT技术的对话生成评估与用户满意度衡量方法研究与实践.docx

    通过问卷调查,我们可以收集到用户对于对话系统的整体满意度、交互体验和对话内容的质量评价等信息。而用户反馈则提供了更加细致和个性化的评估结果,通过分析用户反馈,我们可以了解到用户对于对话系统的优缺点以及...

    市场营销调研与预测1PPT教案.pptx

    6. 制定调查方案:这一阶段包括确定一手资料(原始数据)和二手资料(已存在的数据)的来源,设计调研问卷,构建问题框架,以及选择合适的抽样技术和方法。有效方案能确保信息的全面性和准确性。 通过以上知识点的...

    软件工程综合课程设计 基于Django与Vue2的问卷管理与分发系统.zip

    在本项目中,我们探索了一个综合性的软件工程课程设计,它利用Django框架和Vue2技术栈来构建一个问卷管理与分发系统。这个系统旨在提供一个高效、灵活且用户友好的平台,用于创建、编辑、分发和收集问卷调查数据。接...

    定量分析_实证分析工具_问卷数据分析Stata15_免费下载

    在社会科学中,这通常涉及收集大量数据(如问卷调查的结果),然后运用描述性统计(如平均值、中位数、标准差)和推断性统计(如t检验、卡方检验、回归分析)来探索变量之间的关系和模式。 Stata15作为实证分析工具...

    【幼儿教育】基于幼儿园主题活动的课程生成收集资料.pdf

    利用信息技术,教师可以采用电子问卷调查、在线测试、学习管理系统(LMS)等方式来收集孩子们的学习反馈,并据此进行课程调整。 8. 家长参与和沟通(Parental Involvement and Communication):在幼儿教育中,家长...

    市场调研的基本原理作用与程序.pptx

    探索性调研通常用于初步了解问题,发现新趋势,或者生成假设。描述性调研则旨在量化和详细描述市场状态,如消费者行为、市场规模等。因果性调研则关注变量之间的关系,试图确定因果关系,例如广告投入对销售额的影响...

    中国家庭跟踪调查(CFPS)2014年Stata数据,SAS数据

    中国家庭跟踪调查(CFPS,China Family Panel Studies)是一项全国性的大型社会科学研究项目,旨在长期追踪中国家庭的社会、经济和健康状况。2014年的数据集提供了对中国家庭的深入洞察,涵盖了广泛的变量,包括人口...

Global site tag (gtag.js) - Google Analytics