随机抽取试题的四种算法(网上考试系统编制心得).docVIP

随机抽取试题的四种算法(网上考试系统编制心得).doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
随机抽取试题的四种算法(网上考试系统编制心得)

随机抽取试题的四种算法 (网上考试系统编制心得) 因为教学的需要,我决定编写一个asp+ms sql2000的网上考试系统,其功能主要为:实现判断题、单项多项选择题和填空题的在线自动答题、改卷;并将学生的错误答案记入数据库,供教师分析。在编写从题库中随机抽取试题这一模块的算法上,却颇费了一番周折,现将解决过程记录如下,以供大家参考。 为了便于说明问题,文中提供的代码中的变量pd为从题库中要抽取出来考试的试题数量,数据库表名与字段名我都使用了中文,并仅以判断题为例。 算法一 由于不知道如何实现从题库中随机抽取试题的sql语句,我在网上下载了几个免费的考试系统进行研究,找到了第一种算法,其思路为先将数据库中所有数据读出,获得试题的总数后,生成一个1~(试题的总数-考试的试题数量)之间的随机数,然后从这里开始读出数据: % set rs=server.CreateObject(ADODB.RecordSet) sql=select * from 判断题 order by id asc rs.open sql,conn,1,1 mycound=rs.Recordcount 取得试题总数 randomize 初始化随机数种子值 n=fix((mycound-pd+1)*Rnd+1) rs.move n ‘指针移到n这个随机数这个位置 for i=1 to pd session(pdda)=session(pdda)rs(正确答案)| ‘用session来记录标准答案 ‘输出试题及答案% tr td width=10% %=i%、%=rs(题目内容)%/td td align=center width=10% select name=cate%=i% option selected value=True对/option option value=False错/option/select /td /tr % rs.movenext next rs.close% 这种算法基本上可以实现随机抽取试题,并让每个学生的试题和每一次刷新以后的试题都不相同,但是它的最大不足在于试题的先后顺序总是相同,特别是题库中试题不多的时候,学生几乎可以用背答案方法来应付考试了。虽然可以通过改变数据的排序方式来改变试题的先后顺序,但变化总是不大。 算法二 第二种算法的思路很简单,就是不断生成1~题库中的试题总数之间的随机数,然后到数据库中读取这条记录,直到满足考试的试题量为止。 % set rs=server.CreateObject(ADODB.RecordSet) sql=select * from 判断题 order by id asc rs.open sql,conn,1,1 mycound=rs.Recordcount 取得题库中的试题总数 rs.close for i=1 to pd randomize sid=int((mycound +1)*rnd+1) ‘生成1~题库中的试题总数之间的随机数 set rs=conn.execute(select * from判断题where id=sid) while rs.eof randomize sid=int((mycound +1)*rnd+1) set rs=conn.execute(select * from判断题where id=sid) ‘如果数据库中找不到这条试题,就继续生成随机数读取试题。 wend session(pdda)=session(pdda)rs(正确答案)| ‘用session来记录标准答案 ‘输出试题及答案% tr td width=10% %=i%、%=rs(题目内容)%/td td align=center width=10% select name=cate%=i% option selected value=True对/option option value=False错/option/select /td /tr % next % 这种算法应该是真正意义上的随机抽取试题,但是遗憾的是如果在题库中题量不多的情况下,很容易会在数据库中读取重复的试题,虽然也可以再使用一个变量或数组来储存已经读取过的试题id来解决试题重复的问题,算法就过于繁琐,我认为并不可取的。 算法三 由于第二种算法容易造成试题重复,为了避免系统产生重复的随机数,我试着将题库中试题总数均分为kp个范围,让每个范围个产生一个随机数,这样就有效地避免了随机数重复。 % set rs=server.CreateObje

文档评论(0)

2105194781 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档