日期:2014-05-17  浏览次数:20733 次

JSP设计的在线考试系统
想设计一个JSP的在线考试系统,但是设计出卷时,随机出题不知道应该怎么做。哪位大哥能不能给我说下在一个题库中,随机抽取其中的试题应该怎么做,说一下这个思想就行了,谢谢了。
------解决方案--------------------
用一个随机数Random类随机生成题号咯~
------解决方案--------------------
根据类型去取记录
如:选择题,填空题,简答题,判断题。
题库记录在数据库,
然后随机出题时(不同数据库写法不一样)

select * from tiku a where a.type='题目类型' order by rank_over() fetch 10 first rows only;

如果数据库不支持随机排序

那就取出全部试题放入数组或list,然后用Math.random()*记录数 得到随机数,然后取出这个题目。
------解决方案--------------------
我做过很多在线考试系统,一般抽题,按照题型,难度,分类抽取
至于抽取题目数量,可以:
select ....(select...ORDER BY DBMS_RANDOM.RANDOM) where rownum<=?
------解决方案--------------------
Sql server:select top n * from 表 order by newid()
Access:Select top n * FROM 表 orDER BY Rnd(id) 
mysql:Select * From 表 order By rand() Limit n
------解决方案--------------------
如果做填空题的话,每个填空题里的空的个数都不同,如果以一个空两分,有10个空,应该怎么抽题来控制10个空呢?(题库里每个题的小空数不一定相同)
这个应该怎么控制呢?

在设计数据库时,填空题的表中单列一个字段记录填空题的空数,然后再抽题时,设置空的个数=10的条件
应该可以解决
------解决方案--------------------
我觉得你的按空抽题的设计思想不合理,如果真要实现的话,成本也有点高,需要考虑的细节也很多,总体感觉性价比不高。

按题抽就可以了,在组卷时,每类提的分数可以自定,比如两空的和三空的的是不同的类型,然后每个空的分数按题的分数平分就好了。没必要做的太复杂。
------解决方案--------------------
(1)随机法组卷策略
随机法组卷策略的思想是让用户选择好所需要的题型和知识点后,通过一个特定的随机函数,在试题库随机抽取试题,组成试卷。其特点是抽取效率高,试题分布均匀,非常适合学生自主学习时使用。
1) 随机法组卷策略抽取题库算法
2) 输入课程、知识点和抽取数据m
3) 将指定类型的所有试题放入一个数组中
4) 使用随机函数产生m个互不相同的随机数,用这些随机数作为数组的下标,决定抽取的试题号
5) 将抽取出来的试题显示在页面上
(2)回溯法组卷策略
回溯法的核心思想是采用深度搜索或广度搜索的方法对试题进行遍历,系统为试题设定多个约束条件,当所有约束条件均满足时,算法终止。回溯法组卷时,约束条件相互制约,当题量较小时,往往很难使这些条件都得到百分之百的满足。同时,如果约束条件过多,系统实现起来就越困难。因此,回溯法策略适用于组卷指标比较简单,出题量较小的组卷。缺点是程序结构复杂,组卷时间长。
(3)基于遗传算法的组卷策略
遗传算法核心思想是模拟自然界中生物进化思想,从一组初始解,根据一个适应度函数的规则要求,利用赌轮选择算法选择适应度较高的解作为后一代,去掉适应度低的解,在选择过程中使用变异算子对某些解进行改变,达到一定程度的“变异”功能,从剩余的优良群体中断续进行上述操作,直到找到一个比较满意的解。遗传算法适合于大规模复杂问题的求解。缺点是结构复杂,组卷时间长。
------解决方案--------------------
引用:
引用:
我觉得你的按空抽题的设计思想不合理,如果真要实现的话,成本也有点高,需要考虑的细节也很多,总体感觉性价比不高。

按题抽就可以了,在组卷时,每类提的分数可以自定,比如两空的和三空的的是不同的类型,然后每个空的分数按题的分数平分就好了。没必要做的太复杂。

你说的也有道理,但如果是每题两分,有三个空的话,那不是每个空都是0.6666666....……


在组卷时,每类提的分数可以自定,比如两空的和三空的的是不同的类型,三空的可以定3分、6分等等么
------解决方案--------------------
每道题在设置一个id(唯一),然后取随机数,根据这个随机数对应的id号取一道题出来就可以了