小弟现在做一考试系统,请问哪位大哥在随机抽题方面有好的算法请贴出来供小弟参考一下,非常感激
解决方案 »
- 【求助】delphi中如何把字符串数组转化为字符串
- dbgrid问题?
- 第一次来贵宝地求教,还请各位大侠多多帮忙
- MySql数据库的稳定性值得怀疑!
- 请问大家有做企业报帐管理系统的吗,谈谈感想,人人有分.
- 各位,请问哪里有DevExpress FlowChart的源码下载,多谢了!
- 这个问题也许我不该问!幼稚了点吧?!
- delphi下如何实现屏幕的调节亮度功能
- Label1.Caption:=Floattostr(Query1.ParamByName('winindex').asfloat) 有什么问题么,为什么系统提示数据库无'winindex'?
- 对象视察器属性设置里,有的属性后有两点,点可进入设置,VCL是怎么处理的?
- 漂亮的软件界面是怎么做的?
- storedproc的问题。
begin
Randomize;
Title:=RandomRange(1,1000); //比如你有1000题,给每题一个编号1..1000,然后在这1000随时抽出题号来就可以了
end;
先得到系统时间,得到时、分、秒、毫秒的值,再相加得到一变量time,
再得到题库中最大题数maxid,通过
while i<总题数 do
begin
select * from 题库 where id=random(time mod maxid);//每个人每次抽的题都随机
i++;
end;
但这样的话,某个人在某次考试中会可能抽到两道一样的题。
不知大家有什么好办法
memo1.clear;
i:=1;
randomize;
while i<n do begin//n用于记录需要抽题的数目
t:=random(table1.recordcount)+1;
flag:=true;
for j:= 1 to i do if t=check[j] then flag:=false;
if flag=true then
begin
check[i]:=t;
table1.recno:=t;
i:=i+1;
memo1.lines.add(talbe1.fields[x].asstring);//显示题目的内容
end;
end;
table1.recordcount是题目的总数,table1.recno是库中的第几条记录!
那样的话,第二个人抽出的每道题都跟第一个人一样。我试过不行。
比如,第一个人通过random得到题库中题号为2,6,32,24这几道题的话,第二个人通过random也会是2,6,32,24这几道题
同上面一样,你的代码只实现了某一个人抽的题是随机的,但在一个考试系统中,同时在线考试的人有很多,你的代码不能保证每个人之间抽的题不同。
random函数在重复执行时每次随机的几个数都是相同的,不信你们试一试。
Randomize;
Title:=RandomRange(1,1000);
end;
我想重复了也没有关系吧.我想的这样就可以了.
用dongyexue写的那个过程,第一个人抽10道题,循环10次,第二个人也抽10道,就循环20次,取11~20的题目,更好的办法我就没想到了.
还想到一个办法就是,now(),然后定义一些规则,转换成你规定范围内的数字,然后来取数,应该就不会重复了,具体代码我就不写了!:)