高手救我(在线等),急!急!急!

都图软件工作室 2003-09-18 06:12:56
我要做的是在线考试系统,现在的问题是怎样随机选题,要求如下:
有两个表:题库(tuku)=试题编号(ID)+试题分类(fr)+ …………
试题分类表(zsfr)=分类号(ID)+设置题数(ss)+…… (设置题数总和为100)

现要在题库中随机选出100题,这100题又要与“试题分类表”中的设置题数相符。
...全文
71 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
你们的方法我都没用,我已经解决了这个问题,我的分呀,白送了
yang505412 2003-09-29
  • 打赏
  • 举报
回复
呵呵
UP
cheny1234 2003-09-19
  • 打赏
  • 举报
回复
支持changechange(改了又改) ( )
我曾经这样做:

(SELECT TOP 4 * FROM dbo_problems WHERE sty1=0 and sty2=1 ORDER BY rnd(problemid))
union
(SELECT TOP 4 * FROM dbo_problems WHERE sty1=0 and sty2=2 ORDER BY rnd(problemid))
union
(SELECT TOP 4 * FROM dbo_problems WHERE sty1=0 and sty2=3 ORDER BY rnd(problemid))
union
(SELECT TOP 4 * FROM dbo_problems WHERE sty1=0 and sty2=4 ORDER BY rnd(problemid))
union
(SELECT TOP 14 * FROM dbo_problems WHERE sty1=0 and sty2=5 ORDER BY rnd(problemid))
UNION (SELECT TOP 20 * FROM dbo_problems WHERE sty1=3 ORDER BY rnd(problemid));
changechange 2003-09-18
  • 打赏
  • 举报
回复
在Access中直接用 select top 10 * from tablename order by rnd(id)即可,然后每种类型都执行一条, top 10 代表选10条不重复记录, top 20代表选20条不重复记录

请举一反三
zjcxc 2003-09-18
  • 打赏
  • 举报
回复
sql server中可以用下面的方法搞定:

declare @sql varchar(8000)
set @sql=''
select @sql=@sql+' union all select top '+cast(ss as varchar)+' *
from tuku where fr='+cast(id as varchar)+' order by newid()'
from zsfr
set @sql=substring(@sql,12,8000)
exec(@sql)

JohannWX 2003-09-18
  • 打赏
  • 举报
回复
上面的仁兄思路很对,但是好象光在讲vb,我来补充点衔接的方法,应该在“题库”表里面加入字段“是否选中”(Selected),也是让它选中就设为1。然后建立一个数据集变量(比如说叫res),打开数据集以后

do while j < 10 '只选十题
res.move int(rnd(1)* 100 + 1)

if res!selected <> 1 then
res!Selected = 1
j = j + 1
'这里将题目显示到窗体上(怎么显示我就不写了)
end if

wend

最后你在把所有的题初始化(让下次还可选中所有的题)
res.movefirst

for i = 1 to 100
res!Selected = 0
res.movenext
next i

由于上面的仁兄程序写的较详细,所以我只写了一点思路,希望对你有帮助!
lisen101 2003-09-18
  • 打赏
  • 举报
回复
关键还是不重复随机数的选取问题,其它的自己匹配吧!

实现的方法有很多,下面只是一种。先建立一组标志,如果选中了就设置为1。每次选数时,先判断标志是否为1,如果不为1,则选中,否则忽略选择下一个。下面是例子:
Dim n(1 To 370), i, j, q

For i = 1 To 370
n(i) = 0
Next
j = 0
Randomize Timer
While j < 10
q = Int(Rnd(1) * 369 + 1)
If n(q) = 0 Then
Print q
n(q) = 1
j = j + 1
End If
Wend

7,713

社区成员

发帖
与我相关
我的任务
社区描述
Microsoft Office Access是由微软发布的关系数据库管理系统。它结合了 MicrosoftJet Database Engine 和 图形用户界面两项特点。
社区管理员
  • Access
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧