简单版问卷调查系统(Asp.Net+SqlServer2008)
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)相关推荐
- wxpython问卷调查界面_自己做的一个简单的问卷调查系统
疫情期间,先来没事做,就简单的用ssm 写了一个问卷调查系统.用于我们学校得青协调查用. 这就是我做得一个首页的页面,首页做的比较简单嘻嘻. 因为刚接触ssm 框架,我首先的思路是先把整体的ssm框架 ...
- Java连接sql server数据库实现简单版人力资源系统
首先展示运行界面及功能(java.数据库代码在后头): 这篇文章中红色字体所代表的的是此人力资源系统的使用顺序. 主界面,选择身份. 先选择进入薪酬专员界面,因为要先定义薪酬标准,为后续人事专员录入员 ...
- c语言之简单版的图书检索系统
开发一个简单版的图书检索系统,图书信息包括:编号.作者.书名.出版社.类型.价格.出版日期. 采用简单的c语言语法,结合结构体及自定义函数实现,让大一初学者也能够看懂. 该程序可实现功能(可根据个人需 ...
- 一个简单的CS系统打包过程图文版
一个简单的CS系统打包过程图文版 1. 打包内容 1.1. 此次打包的要求和特点 主工程是一个CS系统: 此CS系统运行的先决条件是要有.Net Framework 3.5: 主工程安装完成 ...
- win10主题更换_不用第三方软件!简单傻瓜重装纯净版win10系统教程
众所周知,重装系统对于普通用户来说,已经算是系统维护的杀招了.数码圈有一句老话说的好,重启解决90%问题,重装解决99%问题,重买解决100%问题.由于天朝特殊的软件生态,一般来说windows系统的 ...
- c语言成绩查询系统源代码,C语言版简单成绩查询系统源代码概要.doc
C语言版简单成绩查询系统源代码概要 // // main.c // xueshengchengji // // Created by lxb on 13-9-16. // Copyright (c) ...
- 【Java在线问卷调查】Java ssm框架在线问卷调查系统的设计与实现
摘 要 问卷调查法是当今社会调查中被广泛使用的一项调查研究方法,它以固定的问题.固定的选项来采集大量研究调查数据,有效的帮助到各种科学社会研究.传统的纸质问卷调查虽然能实现不同的调查对象填写问卷,但 ...
- 问卷调查系统的设计与实现【源码:文档:教程】
Goddess-Questionnaire女神问卷 各位大神若有项目问题可进群有小伙伴解答 女神问卷演示视频(问卷部分):https://v.youku.com/v_show/id_XNDI3Mjc5 ...
- 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 ...
最新文章
- 如何限制上传服务器的文件容量,如何通过配置php文件限制上传文件的大小
- php进入目录,php文件,文件夹(目录)操作函数总结
- 转:Bit-Map思想与2-BitMap思想
- 2014年 12月15日 多线程编程
- CSU 1806 Toll 自适应simpson积分+最短路
- 【Python】参考ggplot2,Seaborn将迎来超大版本更新!
- 帝国cms录入表单模板php,帝国cms7.5在线表单提交制作教程
- Python特殊函数
- 一个项目部署多个节点会导致锁失效么_Redis分布式锁
- java main是标识符吗_main方法的认识 、通配符、java的注释、java的符(标识符)【Java基础】...
- 越是爱折腾的人就越容易成功
- 初学STM32之使用STM32CubeMX编写跑马灯程序
- swift下FMDB的使用
- 做项目管理需要哪些技能?
- 《世界咖啡》一书小结
- android 生成Excel表
- WordPress中文汉字用户名不能注册怎么办?
- C++入门:鸡兔同笼问题
- 关于LED金线的相关知识
- linux中的LNMP架构的应用-----Discuz论坛部署