1.系统主要涉及以下几个表

问卷项目表(Q_Naire) 问卷题目表(Q_Problem) 题目类型表(Q_ProblmeType)

题目选项表(Q_Options) 调查结果表(Q_Answer) 参与用户表(Q_User)

2.涉及的存储过程

pNextID 获取实体表主键ID

sp_NaireAnswer 将问卷调查的结果写入结果表(通过WebService方法调用)

sp_NaireImport 通过导入的问卷数据生成问卷项目(根据Q_Naire_Import表中的问卷数据分别写入Q_Naire、Q_Problem、Q_Options中生成问卷)

sp_NaireResult 问卷调查结果数据集

3.系统实现方式

后台:主要是通过后台维护的问卷数据,根据问卷项目编号获取问卷题目以及题目类型

然后根据题目类型在后台生成相应的控件,后台控件生成通过Asp.Net实现

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Data;namespace QuestionnaireSurveySystem
{public partial class Naire : System.Web.UI.Page{/// <summary>/// 问卷编号/// </summary>public string nid = string.Empty;/// <summary>/// 用户编号/// </summary>public string uid = string.Empty;/// <summary>/// 数据库连接字符串/// </summary>private string constr = ConfigHelper.GetConfigString("System.ConnectionString");protected void Page_Load(object sender, EventArgs e){if (!Page.IsPostBack){try{if (Request.Params["uid"].ToString() != null && Request.Params["uid"].ToString().Trim() != ""){uid = Request.Params["uid"].ToString();}if (Request.Params["nid"].ToString() != null && Request.Params["nid"].ToString().Trim() != ""){nid = Request.Params["nid"].ToString();//绑定题目
                        BindNaire(nid);}}catch{Response.Redirect("Error.html");}}}/// <summary>/// 动态生成问卷表单/// </summary>/// <param name="id">问卷项目编号</param>private void BindNaire(string id){SqlConnection con = new SqlConnection(constr);con.Open();DataTable dt = new DataTable();DataTable dt2 = new DataTable();SqlDataAdapter sda = new SqlDataAdapter("SELECT b.ID AS Nid,b.Title,b.Descr,a.ID AS Pid,a.Title,d.TypeName,c.ID AS Oid,c.OptionValue FROM dbo.Q_Problem a LEFT JOIN dbo.Q_Naire b ON a.Nid=b.ID LEFT JOIN dbo.Q_Options c ON a.ID=c.Pid LEFT JOIN dbo.Q_ProblmeType d ON a.Tid=d.ID WHERE b.ID=" + id + "", con);sda.Fill(dt);SqlDataAdapter sda2 = new SqlDataAdapter("SELECT a.ID as Pid,a.Title,a.Nid,a.Tid,b.TypeName,b.Descr FROM dbo.Q_Problem a LEFT JOIN dbo.Q_ProblmeType b ON a.Tid=b.ID WHERE a.Nid=" + id + " ORDER BY a.Tid ASC", con);sda2.Fill(dt2);lbltitle.Text = dt.Rows[0]["Title"].ToString();lbldescr.Text = dt.Rows[0]["Descr"].ToString();int sid = 1;//单选题序号int mid = 1;//多选题序号int aid = 1;//问答题序号if (dt2.Rows.Count > 0){foreach (DataRow dr in dt2.Rows){switch (dr["TypeName"].ToString()){case "单选题":Label lbl = new Label();lbl.Text = sid.ToString() + "、" + dr["Title"].ToString();RadioButtonList rbl = new RadioButtonList();rbl.ID = dr["Pid"].ToString();DataRow[] drs = dt.Select("Pid=" + dr["Pid"] + "");foreach (DataRow drc in drs){ListItem li1 = new ListItem();li1.Text = drc["OptionValue"].ToString();li1.Value = drc["Oid"].ToString();rbl.Items.Add(li1);}if (sid == 1){Label lblss = new Label();lblss.Text = "单选题";lblss.Font.Bold = true;this.Panel1.Controls.Add(lblss);this.Panel1.Controls.Add(new LiteralControl("<br/>"));}this.Panel1.Controls.Add(lbl);this.Panel1.Controls.Add(new LiteralControl("<br/>"));this.Panel1.Controls.Add(rbl);this.Panel1.Controls.Add(new LiteralControl("<br/>"));sid = sid + 1;break;case "多选题":Label lbl2 = new Label();lbl2.Text = mid.ToString() + "、" + dr["Title"].ToString();CheckBoxList cbl = new CheckBoxList();cbl.ID = dr["Pid"].ToString();DataRow[] drs2 = dt.Select("Pid=" + dr["Pid"] + "");foreach (DataRow drc in drs2){ListItem li2 = new ListItem();li2.Text = drc["OptionValue"].ToString();li2.Value = drc["Oid"].ToString();cbl.Items.Add(li2);}if (mid == 1){Label lblms = new Label();lblms.Text = "多选题";lblms.Font.Bold = true;this.Panel1.Controls.Add(lblms);this.Panel1.Controls.Add(new LiteralControl("<br/>"));}this.Panel1.Controls.Add(lbl2);this.Panel1.Controls.Add(new LiteralControl("<br/>"));this.Panel1.Controls.Add(cbl);this.Panel1.Controls.Add(new LiteralControl("<br/>"));mid = mid + 1;break;case "问答题":Label lbl3 = new Label();lbl3.Text = aid.ToString() + "、" + dr["Title"].ToString();TextBox txb = new TextBox();txb.ID = dr["Pid"].ToString();txb.TextMode = TextBoxMode.MultiLine;txb.Width = Unit.Pixel(600);txb.Height = Unit.Pixel(50);if (aid == 1){Label lblas = new Label();lblas.Text = "问答题";lblas.Font.Bold = true;this.Panel1.Controls.Add(lblas);this.Panel1.Controls.Add(new LiteralControl("<br/>"));}this.Panel1.Controls.Add(lbl3);this.Panel1.Controls.Add(new LiteralControl("<br/>"));this.Panel1.Controls.Add(txb);this.Panel1.Controls.Add(new LiteralControl("<br/>"));aid = aid + 1;break;}}}//关闭连接 释放资源
            con.Close();Dispose();}}
}

前台:通过JavaScript方法获取用户选择项,作为参数传递给后台WebService方法,然后调用存储过程将问卷结果写入数据库

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Naire.aspx.cs" Inherits="QuestionnaireSurveySystem.Naire" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server"><title></title><script type="text/javascript">//获取问卷填写内容
          function GetRadioValue(){var p = document.getElementsByTagName("input");var v = "";for (var i = 0; i < p.length; i++){if (p[i].checked){v = v + p[i].name.split('$')[0] + "." + p[i].value + ",";}}var t = document.getElementsByTagName("textarea");for (var i = 0; i < t.length; i++){/*处理输入中的"."*/v = v + t[i].id + "." + t[i].value.toString().split('.').join('') + ",";}v = v.substring(0, v.length - 1);return v;}//判断是否填写完整
          function CheckSelect(){/*在使用indexOf方法前,执行一下下面的js, 原理就是如果发现数组没有indexOf方法,会添加上这个方法*/if (!Array.prototype.indexOf){Array.prototype.indexOf = function (elt /*, from*/){var len = this.length >>> 0;var from = Number(arguments[1]) || 0;from = (from < 0) ? Math.ceil(from) : Math.floor(from);if (from < 0)from += len;for (; from < len; from++){if (from in this && this[from] === elt)return from;}return -1;};}/**/var ok = false;//完成标志var no = new Array();//应完成项var nn = new Array();//已完成项var s = document.getElementsByTagName('input');//选择项for (var i = 0; i < s.length; i++){var n = s[i].name.split('$')[0].toString();if (no.indexOf(n) < 0 && s[i].type == "radio"){no.push(n)}if (no.indexOf(n) < 0 && s[i].type == "checkbox"){no.push(n)}if (s[i].checked && nn.indexOf(n) < 0 && s[i].type == "radio"){nn.push(n);}if (s[i].checked && nn.indexOf(n) < 0 && s[i].type == "checkbox"){nn.push(n);}}var t = document.getElementsByTagName("textarea");for (var i = 0; i < t.length; i++){var m = t[i].name.split('$')[0];if (no.indexOf(m) < 0){no.push(n)}if (t[i].value != null && t[i].value != ""){nn.push(n)}}if (nn.length < no.length){ok = false;}else{ok = true;}return ok;}//将填写内容写入数据库
          function Insert(){var ok = CheckSelect();if (ok){var r = GetRadioValue();if (r != ""){var f=Select();if(f){var uid=<%=uid %>;var nid=<%=nid %>;var URL = "Server/NaireService.asmx/RecordResult"var Params = "uid=" + uid + "&nid="+nid+"&val=" + r + "";  //传给WebService的参数var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");xmlhttp.Open("POST", URL, false); //用POST方法xmlhttp.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded");xmlhttp.SetRequestHeader("Content-Length", Params.length);xmlhttp.send(Params);if (xmlhttp.Status == 200){//200代表成功alert("提交成功,谢谢您的参与和支持!");//刷新页面
                              location.reload();}}else{alert("您已经完成问卷,不用重复提交!");}}else{alert("内容不可为空!");}}else{alert("所有调查项完成后才可以提交,请检查!");}}function Select(){var uid=<%=uid %>;var nid=<%=nid %>;var URL = "Server/NaireService.asmx/IsHasCarry";var Params = "uid=" + uid + "&nid="+nid+""; //传给WebService的参数var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");xmlhttp.Open("POST", URL, false); //用POST方法xmlhttp.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded");xmlhttp.SetRequestHeader("Content-Length", Params.length);xmlhttp.send(Params);if (xmlhttp.Status == 200){//200代表成功var res = xmlhttp.responseXML; //得到WebService传回的结果var strJSON = res.childNodes[1].text;var obj = eval("(" + strJSON + ")"); //转换后的JSON对象if(obj){return false;}else{return true;}}else{return false;}}</script><style id="style1" type="text/css">body{background-color: #9ECBE8}</style>
</head>
<body><form id="form1" runat="server"><table width="100%"><tr><td style="width: 25%"></td><td align="center" style="font-size: larger; font-weight: bold"><asp:Label ID="lbltitle" runat="server"></asp:Label></td><td style="width: 25%"></td></tr><tr><td style="width: 25%"></td><td align="left" class=""><asp:Label ID="lbldescr" runat="server"></asp:Label></td><td style="width: 25%"></td></tr><tr><td style="width: 25%"></td><td><hr style="border: 1px dotted #036" /></td><td style="width: 25%"></td></tr><tr><td style="width: 25%"></td><td align="left"><asp:Panel ID="Panel1" runat="server"></asp:Panel></td><td style="width: 25%"></td></tr><tr><td style="width: 25%"></td><td><hr style="border: 1px dotted #036" /></td><td style="width: 25%"></td></tr><tr><td style="width: 25%"></td><td align="left"><input type="button" value="提交" οnclick="Insert()" /><input type="button" value="重置" οnclick="javascript:location.reload()" /></td><td style="width: 25%"></td></tr></table></form>
</body>
</html>

WebService代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Data.SqlClient;
using System.Data;namespace QuestionnaireSurveySystem.Server
{/// <summary>/// NaireService 的摘要说明/// </summary>[WebService(Namespace = "http://tempuri.org/")][WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)][System.ComponentModel.ToolboxItem(false)]// 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
    [System.Web.Script.Services.ScriptService]public class NaireService : System.Web.Services.WebService{//[WebMethod]//public string HelloWorld()//{//    return "Hello World";//}private string constr = ConfigHelper.GetConfigString("System.ConnectionString");/// <summary>/// 判断用户是否有进行问卷/// </summary>/// <param name="uid"></param>/// <param name="nid"></param>/// <returns></returns>[WebMethod(Description = "判断用户是否有进行问卷")]public bool IsHasCarry(string uid, string nid){SqlConnection con = new SqlConnection(constr);con.Open();DataTable dt = new DataTable();SqlDataAdapter sda = new SqlDataAdapter("SELECT ID FROM Q_Answer WHERE Uid=" + uid + " AND Nid=" + nid + "", con);sda.Fill(dt);con.Close();if (dt.Rows.Count > 0){return true;}else{return false;}}/// <summary>/// 将问卷调查的结果写入数据库/// </summary>/// <param name="uid">用户编号</param>/// <param name="nid">项目编号</param>/// <param name="val">结果字符串</param>/// <returns></returns>[WebMethod(Description = "将问卷调查的结果写入数据库")]public int RecordResult(string uid, string nid, string val){SqlConnection con = new SqlConnection(constr);con.Open();SqlCommand cmd = new SqlCommand("exec sp_NaireAnswer " + uid + "," + nid + ",'" + val + "'", con);int i = cmd.ExecuteNonQuery();con.Close();return i;}}
}

结束语:

时间关系,只是作了简单的问卷展示页面,其他维护性页面都没有做。直接在后台数据库处理的。有兴趣的朋友可以完善下。写的很粗糙,欢迎大神拍砖。

补一张效果图

源码下载

转载请说明出处 http://www.cnblogs.com/hhwan/p/4108358.html

转载于:https://www.cnblogs.com/hhwan/p/4108358.html

简单版问卷调查系统(Asp.Net+SqlServer2008)相关推荐

  1. wxpython问卷调查界面_自己做的一个简单的问卷调查系统

    疫情期间,先来没事做,就简单的用ssm 写了一个问卷调查系统.用于我们学校得青协调查用. 这就是我做得一个首页的页面,首页做的比较简单嘻嘻. 因为刚接触ssm 框架,我首先的思路是先把整体的ssm框架 ...

  2. Java连接sql server数据库实现简单版人力资源系统

    首先展示运行界面及功能(java.数据库代码在后头): 这篇文章中红色字体所代表的的是此人力资源系统的使用顺序. 主界面,选择身份. 先选择进入薪酬专员界面,因为要先定义薪酬标准,为后续人事专员录入员 ...

  3. c语言之简单版的图书检索系统

    开发一个简单版的图书检索系统,图书信息包括:编号.作者.书名.出版社.类型.价格.出版日期. 采用简单的c语言语法,结合结构体及自定义函数实现,让大一初学者也能够看懂. 该程序可实现功能(可根据个人需 ...

  4. 一个简单的CS系统打包过程图文版

    一个简单的CS系统打包过程图文版 1.     打包内容 1.1.  此次打包的要求和特点 主工程是一个CS系统: 此CS系统运行的先决条件是要有.Net Framework 3.5: 主工程安装完成 ...

  5. win10主题更换_不用第三方软件!简单傻瓜重装纯净版win10系统教程

    众所周知,重装系统对于普通用户来说,已经算是系统维护的杀招了.数码圈有一句老话说的好,重启解决90%问题,重装解决99%问题,重买解决100%问题.由于天朝特殊的软件生态,一般来说windows系统的 ...

  6. c语言成绩查询系统源代码,C语言版简单成绩查询系统源代码概要.doc

    C语言版简单成绩查询系统源代码概要 // // main.c // xueshengchengji // // Created by lxb on 13-9-16. // Copyright (c) ...

  7. 【Java在线问卷调查】Java ssm框架在线问卷调查系统的设计与实现

    摘  要 问卷调查法是当今社会调查中被广泛使用的一项调查研究方法,它以固定的问题.固定的选项来采集大量研究调查数据,有效的帮助到各种科学社会研究.传统的纸质问卷调查虽然能实现不同的调查对象填写问卷,但 ...

  8. 问卷调查系统的设计与实现【源码:文档:教程】

    Goddess-Questionnaire女神问卷 各位大神若有项目问题可进群有小伙伴解答 女神问卷演示视频(问卷部分):https://v.youku.com/v_show/id_XNDI3Mjc5 ...

  9. linux安装ppp服务器,服务器_最简单的Linux系统上的pptpd服务器安装,1. rpm -qa|grep ppp 检查ppp版本, - phpStudy...

    最简单的Linux系统上的pptpd服务器安装 1. rpm -qa|grep ppp 检查ppp版本,必须在2.4.1-3或以上,否则下载新版本,用rpm -Uvh更新: 2.下载pptpd-1.1 ...

最新文章

  1. 如何限制上传服务器的文件容量,如何通过配置php文件限制上传文件的大小
  2. php进入目录,php文件,文件夹(目录)操作函数总结
  3. 转:Bit-Map思想与2-BitMap思想
  4. 2014年 12月15日 多线程编程
  5. CSU 1806 Toll 自适应simpson积分+最短路
  6. 【Python】参考ggplot2,Seaborn将迎来超大版本更新!
  7. 帝国cms录入表单模板php,帝国cms7.5在线表单提交制作教程
  8. Python特殊函数
  9. 一个项目部署多个节点会导致锁失效么_Redis分布式锁
  10. java main是标识符吗_main方法的认识 、通配符、java的注释、java的符(标识符)【Java基础】...
  11. 越是爱折腾的人就越容易成功
  12. 初学STM32之使用STM32CubeMX编写跑马灯程序
  13. swift下FMDB的使用
  14. 做项目管理需要哪些技能?
  15. 《世界咖啡》一书小结
  16. android 生成Excel表
  17. WordPress中文汉字用户名不能注册怎么办?
  18. C++入门:鸡兔同笼问题
  19. 关于LED金线的相关知识
  20. linux中的LNMP架构的应用-----Discuz论坛部署

热门文章

  1. 穷爸爸富爸爸读书笔记
  2. Resin 与 Tomcat 服务器对比
  3. Cision推出全新媒体关系管理工具:更精准锁定记者与意见领袖
  4. Bash编程016——用户与组(二)
  5. Kotlin第一课Hello World —— Package、main、fun、import、变量、注释
  6. NVMe系列专题之二:队列(Queue)管理
  7. 人贵有自知力和自制力...
  8. 【评测】IDT发布ZEN 或 TAO 双淬灭探针
  9. SpringMVC 教程 - Handler Method
  10. 计蒜客 幼儿园买玩具