发布网友 发布时间:2024-10-23 16:34
共6个回答
热心网友 时间:1分钟前
问题很好,实用性很强, 我给你写写我的思路 大家共同进步
首先说说如何生成问卷系统
在数据库见一个表,假如表名叫questions_tb ,表里存放了全部题目,字段大致为 id,题目标题,题目内容,题目类型(单选或多选),用户类型(不同的问卷有不同的用户,默认为空),题目标记选择(0表示没选,1表示选择,生成问卷时用,这里全部是0)
出题目的人生成问卷页面
可以用gridview来显示questions_tb ,但是还要在gridview添加一列checkbox列,用于选择题目,这个是用于和字段题目标记选择来对应的。另外还要有一个textbox或者dropdownlist这个在gridview外的来确定用户类型
生成问卷按钮后台代码这样写
大致如下 foreach (GridViewRow gr in GridView1.Rows)
{
string 用户=DropDownList1.SelectedValue;//获取用户类型
int qid= Convert.ToInt32( GridView1.DataKeys[ gr.RowIndex]);//获取更新行id
if (((CheckBox)gr.FindControl("checkbox1")).Checked == true)
{ 执行更新函数,最好是三层的代码来编写,这里只要写上表现层函数就行了,更新sql字符串为"update questions_tb set 题目标记选择=1,用户类型=用户 where id=qid"}
}
}
这样就循环更新完数据库了,也就生成了问卷
用户填写问卷页面
这个要略微复杂一点,假如问卷有单选和多选两种题型,建议用两个gridview来显示,根据题目类型,题目标记选择,用户类型来执行select语句,这个不难吧,然后在单选题的gridview里加一列RadioButtonList标记A,B,C多选题的gridview里加一列CheckBoxList标记A,B,C,这样用户就可以答题了,问卷提交, 提交到数据库的答案表中,字段可以id,用户名(考试人),单选题所有答案,多选题答案,假如这四个个字段,
方法还是用上面的方法循环遍历gridview,依次累加RadioButtonList的SelectedValue;譬如A,A,B,C,C,A,C依次累加CheckBoxList的SelectedValue不过循环遍历gridview的同时里面也得对CheckBoxList的listitem做循环,因为他是多选的,累加后结果譬如AC,ABC,B,BC...
字符串累加函数只要做个技巧让他们中间个开个逗号就可以了,这个也不难吧。提交的时候insert into 答案(用户名,单选题所有答案,多选题答案)values(,,,)这样基本上就完成了,采用这种建表的思想可以节省数据库资源,假如几万人参与调查,只能将他们的答案写于一个表中。
今天降温天很冷 我来写思路 手冻得通红 一定可以实现你所说的功能的,因为我曾做个类似的项目。
希望能得到你的分 呵呵
热心网友 时间:2分钟前
写入xml文件如果用来做数据统计是不合适的,用来做试卷倒是非常合适,比如有如下一个试卷:
<试卷 title="你吃了吗?" endDate="" author="" guid="">
<ques title="品种" score="5" type="多项" guid="">
<item value="1">大米</item>
<item value="2">面粉</item>
<item value="3">米田共</item>
</ques>
<ques title="性别" score="5" type="单选" guid="">
<item value="1">男</item>
<item value="2">女</item>
<item value="3">未知</item>
</ques>
<ques title="年龄" score="5" type="单选" guid="">
<item value="1">1-20</item>
<item value="3">20-40</item>
<item value="4">40-60</item>
<item value="5">60-100</item>
<item value="6">100-?</item>
<item value="7">胚胎</item>
<item value="8">未知</item>
</ques>
<ques title="你对房价和CPI如何看待?" score="20" type="问答" guid="" />
<ques title="中国最大的房地产是谁?" score="60" type="单选" guid="">
<item>地方</item>
</ques>
</试卷>
这就是一个试卷了,至于要如何解析成你要的格式,这个属于技术问题,这里只讨论思路。
数据该如何保存呢
1.数据库字段,用最简单的方法
主键, 试卷guid, 问题guid, 问题value, score, 创建用户, 创建时间, 创建IP
2.页面值的收集问题
因为试卷页面是自动生成的,所以你可以随意了。
<input id="品种_1" name="品种" guid="" value="1" type="checkbox">
<input id="性别_1" name="性别" guid="" type="radio">
你对房价和CPI如何看待?<input id="你对房价和CPI如何看待?" guid="" type="text">
checkbox可以得到多个值 1,2,3,5
使用分开插入 "1,2,3,5".Split(',')
查询方法 where 试卷guid=? and 问题guid=? and 问题value=?
在页面用jQuery可以实现你需要的所有功能
点击按钮 ajax.post(url,data,callback);
public enum QesType{ 多选, 单选, 问答 };
public interface QesInsert{
bool Insert(Guid 试卷guid);//问题上传
}
public abstract class 问题基类 : QesInsert {//问题对象
public string Title{get;set;}//问题标题
public QesType Type{get;set;}//问题类型
public string Value{get;set;}//问题值
public int Score{get;set;}//问题分数
public Guid Guid{get;set;}//问题主键
public abstract bool Insert(Guid 试卷guid);//实现接口
}
public class 试卷{
public string Title{get;set;}
public string Author{get;set;}
public DateTime EndDate{get;set;}
public Guid Guid{get;set;}
public IList<问题基类> Question{get;set;}
public 试卷(){
Question = new List<问题>();
}
}
public class 多选问题 : 问题基类{
public 多选问题(){
this.Type = QesType.多选;
}
//具体实现接口
public bool Insert(Guid 试卷guid){
string[] value = this.Value.Split(',');
foreach(string i in value){
Sql.Insert()//执行数据库插入操作。
}
}
}
热心网友 时间:4分钟前
不用全部写入数据库,因为你已经知道答案.
只需要把答案用固定的比如x或Y来代表答案写入数据库.
当然在读出的时候当你读到X的时候你在显示的时候转化为答案就行了.
热心网友 时间:6分钟前
可以通过循环页面上的控件,打比方是写在textbox里面 就可以通过循环页面控件,然后判断是否是textbox 如果是则取值
热心网友 时间:6分钟前
就像百度知道这个页面,你的问题在Panel_A中,所有回复在Panel_B中,此时我实在回复你的问题,我正在Panel_C中写东西.
这3个panel就可以理解成"问题类型"(单选,多选,填空....)
(感觉你不懂数据库,确切的说是数据库设计)
方法一:用户每填写完毕一道题,就自动记录结果.
方法二:循环访问每个Panel中子控件,然后读取"用户填写的结果",记录到数据库.
加载页面时候,要从数据库读取试题,然后根据类型添加到不同的Panel中,如:单选题,放在RadioPanel中,问题的题目用label显示,然后用RadioButton显示选项.
foreach(var control in RadioPanel.Children)
RadioButton radio = control as RadioButton;
//...
第二个方法是你希望的,可是这个需要的数据库设计,
热心网友 时间:1分钟前
功能到好实现,但是不知道用户制作问卷是不是保存模板了?我的意思是用户制作出个问卷,改问卷的名称以及内容地址保存在数据库没?只要把问卷里所有的问题类型的控件的name设置成相同的,在后台代码中Request就可以了,不管用户问卷设置多少个问题都可以全部取到,然后将这些数据组合在一起,读取的时候先读取问卷模板,然后在分解数据,然后在顺序的填充就可以了!