随机抽题考试系统

数据库设计,如下图:

登录的时候选择试卷进行考试,如下图:

后台获取所有试卷绑定到DropDownList上的代码要写在if(!IsPostBack){}里,否则每次回发,都会致使DropDownList重新绑定,这样无论选择哪套试卷,最终只会选择第一套(默认为选中)试卷。大致代码,如下图:

选中一套试卷核对用户名密码正确后会进入考试界面,利用GridView列出选中试卷的单选题的大致代码,如下图:

有时在利用<%#Eval()%>绑定时会抛出"字符文本中字符太多"的异常,这是由于双引号与单引号的位置不对而引起的,具体可参考wangpei的博客。

管理员在进行组卷时使用的是随机组卷的方法,使用的是SQLSERVER数据库的order by newid()函数,大致代码,如下图:

不过select top后面不能跟参数,需要使用拼接字符串的方式,貌似SQLSERVER2008已经解决了这个问题,具体可参考CSDN。当top后面的数超过记录数时回读取全部记录。

当随机选完题目后,可点保存按钮保存当前试卷,大致代码,如下图:

这里用到了scope_identity()函数来获得刚刚插入的一行记录的Identity标识字段,具体可参考MSDN 。关于cast()函数可参考archive的博客。

在管理员管理试卷时,可点击详细...进入相关的试卷页面查看试卷内容,试卷的名称与试卷的ID分别是通过绑定到LinkButton的CommandName和CommandArgument传到后置代码里的,前置代码,如下图:

后置代码如图:

触发按钮的Click事件的话可如上图那样获得CommandName属性和CommandArgument属性,如果触发的
是Command事件,可通过上图注释掉的部分那样的方式获得。

按钮控件的CommandName属性和CommandArgument属性本来是用来传递命令名称及命令参数到后置代
码然后根据名称及参数来做相应逻辑处理的,具体可参考MSDN

用户进入考试页面时要显示每种题型的分数,位于GridView里<HeaderTemplate>里的<Label>要获得
<ItemTemplate>里绑定了分数字段的<Label>的值,后置代码,如下图:

GridView的HeaderRow和Rows属性分别可以获得其标题行和数据行集合。

GridView拥有多种数据行和标题行。

由于GridView可以有多列,所以数据行所对应的列不像DataList那样只有一个ItemTemplate(DataList的标头行对应的列是HeaderTemplate),GridView有很多类型的列<TemplateField><BoundField><CheckBoxField>等,每一种列都有自己的标头行,数据行。
<TemplateField>列的标头行除了像其他列那样通过其HeaderText属性设置标头文字外,如果想在标头行放置控件,可以通过添加标头行<HeaderTemplate>。<TemplateField>列的数据行和DataList一样是<ItemTemplate>。

这些数据行及其内的控件将不断的动态生成直至所有的数据都绑定完。

当用户做完试卷按交卷按钮后,系统会自动判卷。但由于是回发,所以GridView里的数据行会又一次绑定数据,所以里面的所有控件会重新生成一次,有绑定字段的控件还会重新绑定一次数据,所以GridView绑定控件的代码也要写在if(!IsPostBack){}里。大致代码,如下图:

但如果使用数据源控件为数据绑定控件提供数据的话,回发后,这些控件会保存其回发前的状态。

管理员在维护用户成绩时,可以将用户成绩导出为Excel文件。导出Excel文件有多种方法,这里使用的方法需要提前准备一个模板Excel文件,但这种方法不需要安装office办公软件,大致代码,如下图:

具体可参考sun_blue_sky的博客。

源码下载

posted @ 2011-02-18 23:40  何塞穆里尼奥  阅读(978)  评论(0编辑  收藏  举报