随机抽题考试系统

数据库设计,如下图:

o_%E5%A4%96%E9%94%AE1.jpg

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

o_login.jpg

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

o_DropDownListandIsPostBack.jpg

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

o_SingleProblem.jpg

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

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

o_Selecttop.jpg

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

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

o_savepaper.jpg

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

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

o_CommandNA%E5%89%8D%E7%BD%AE.jpg

后置代码如图:

o_CommandNA%E5%90%8E%E7%BD%AE.jpg

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

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

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

o_GridViewRows.jpg

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

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

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

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

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

o_GridViewBind.jpg

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

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

o_Excel1.jpg

o_Excel2.jpg

o_Excel3.jpg

具体可参考sun_blue_sky的博客。

源码下载

转载于:https://www.cnblogs.com/hanmeimei/archive/2011/02/18/RadomOnlineExam.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值