标题:[求助]现在用asp和access开发一个网上考试系统
只看楼主
liujun1314
Rank: 1
等 级:新手上路
帖 子:58
专家分:0
注 册:2007-9-18
得分:0 
回复:(hmhz)这样的随机是不行的,提取出来的虽然没...

那要怎么去写呢,帮哈撒啊,谢谢!


2007-11-18 19:34
hmhz
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:30
帖 子:1890
专家分:503
注 册:2006-12-17
得分:0 

这不是我写的,是我群里的Starry Sky帮你写的,叫我帮他优化的,你试试套用一下看看
[CODE]<%
'该方法得事先知道数据库里题目的总数,a(8)中的8为题目总数
dim n 'n是选取的题目的数量
n=3
set conn=server.CreateObject("adodb.connection")
conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("kaoshi.mdb")
set rs=server.CreateObject("adodb.recordset")
sqlstr="select id from test"
rs.open sqlstr,conn,1,1
if not rs.eof then
dim a(8),b(3),ansstr,cnt
cnt=rs.recordcount
ansstr=""
i=0
while not rs.eof
a(i)=rs("id")
i=i+1
rs.movenext
wend
rs.close
randomize()
for i=0 to n-1

c=(rnd()*cnt) mod cnt
if i>0 then
for k=0 to i-1
while b(k)=c
c=(rnd()*cnt) mod cnt
wend
next
end if
b(i)=c
sqlstr="select * from test where id ="& a(c)
rs.open sqlstr,conn,1,1
if not rs.eof then
response.write("问题:"&rs("question")&"&nbsp;&nbsp;A:"&rs("A")&"&nbsp;&nbsp;B:"&rs("B")&"&nbsp;&nbsp;C:"&rs("C")&"&nbsp;&nbsp;D:"&rs("D")&"<br>")
ansstr=ansstr&"|"&rs("ans")
end if
rs.close
next
response.Cookies("answer")=ansstr
'用户答题后,把用户的答案跟cookie中的答案比较,计算出得分,然后再把得分存回数据库
else
response.write("你选的题目数量大于数据库里的题目总数!")
end if
set rs=nothing
conn.close
set conn=nothing
%>[/CODE]


[编程论坛] ASP超级群:49158383  敲门暗号:ASP编程
龍艺博客 http://www.
2007-11-18 21:34
liujun1314
Rank: 1
等 级:新手上路
帖 子:58
专家分:0
注 册:2007-9-18
得分:0 
回复:(hmhz)这不是我写的,是我群里的Starry Sky帮...

谢谢!我昨天知道了,
但 ansstr=ansstr&"|"&rs("ans")
不知道什么意思了!


2007-11-19 08:43
hmhz
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:30
帖 子:1890
专家分:503
注 册:2006-12-17
得分:0 

这个是把内容保存到cookie里,然后使用数组读出

[此贴子已经被作者于2007-11-19 9:15:07编辑过]


[编程论坛] ASP超级群:49158383  敲门暗号:ASP编程
龍艺博客 http://www.
2007-11-19 09:12
liujun1314
Rank: 1
等 级:新手上路
帖 子:58
专家分:0
注 册:2007-9-18
得分:0 
回复:(hmhz)这不是我写的,是我群里的Starry Sky帮...
不用开始就知道总题吧,可以用rs.recordcount得到啊,

2007-11-19 09:18
Kettyjin1983
Rank: 1
等 级:新手上路
帖 子:303
专家分:0
注 册:2007-8-17
得分:0 

我这里有随即产生考试试题的代码,我研究了很久,有那么一点懂了。
Dim num(),k,i,x,j,ans()
redim num (totalq)
redim ans (totalq)

k = 1
Randomize

For i = 1 To totalq
x = Round(Rnd * totalrec)
'totalrec指的是随即产生多少道替
For j = 1 To k
If num(j) = x Then
i = i - 1
Exit For
End If
Next
If j > k Then
num(k) = x
k = k + 1
End If
Next

2007-11-19 14:26
关小彤
Rank: 1
等 级:新手上路
帖 子:114
专家分:0
注 册:2006-12-7
得分:0 
我的是用随机函数实现的随即抽题

<%sql="select * from "&papername&" where type='单项选择'"
danxuan=""
tihao1=""
set rs1=conn.execute(sql)
dim i
i=0
do while not rs1.eof
i=i+1
rs1.movenext
loop
count=i '得到单选题总数
randomize
for i=1 to singlecount
temp=int(count*rnd) '对生成随机数进行处理
sql="select * from "&papername&" where type='单项选择'"
set rs=server.createobject("adodb.recordset")
rs.open sql,conn,3,2
rs.move temp%>

[此贴子已经被作者于2007-11-19 16:06:27编辑过]


2007-11-19 16:04
liujun1314
Rank: 1
等 级:新手上路
帖 子:58
专家分:0
注 册:2007-9-18
得分:0 
回复:(hmhz)这不是我写的,是我群里的Starry Sky帮...
这个随机选题有重复的,!黑马!

2007-11-20 08:37
liujun1314
Rank: 1
等 级:新手上路
帖 子:58
专家分:0
注 册:2007-9-18
得分:0 
回复:(Kettyjin1983)我这里有随即产生考试试题的代...
谢谢, !我好好研究哈!

2007-11-20 08:38
Kettyjin1983
Rank: 1
等 级:新手上路
帖 子:303
专家分:0
注 册:2007-8-17
得分:0 

回复:(hmhz)这不是我写的,是我群里的Starry Sky帮...
<%
'该方法得事先知道数据库里题目的总数,a(8)中的8为题目总数
dim n 'n是选取的题目的数量
n=3
set conn=server.CreateObject("adodb.connection")
conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("kaoshi.mdb")
set rs=server.CreateObject("adodb.recordset")
sqlstr="select id from test"
rs.open sqlstr,conn,1,1
if not rs.eof then
dim a(8),b(3),ansstr,cnt
cnt=rs.recordcount
ansstr=""
i=0
while not rs.eof
a(i)=rs("id")
i=i+1
rs.movenext
wend
rs.close
randomize()
for i=0 to n-1

c=(rnd()*cnt) mod cnt
if i>0 then
for k=0 to i-1
while b(k)=c
c=(rnd()*cnt) mod cnt
wend
i =i+1'个人觉得加这么一句应该不会有重复了吧。
next
end if
b(i)=c
sqlstr="select * from test where id ="& a(c)
rs.open sqlstr,conn,1,1
if not rs.eof then
response.write("问题:"&rs("question")&"&nbsp;&nbsp;A:"&rs("A")&"&nbsp;&nbsp;B:"&rs("B")&"&nbsp;&nbsp;C:"&rs("C")&"&nbsp;&nbsp;D:"&rs("D")&"<br>")
ansstr=ansstr&"|"&rs("ans")
end if
rs.close
next
response.Cookies("answer")=ansstr
'用户答题后,把用户的答案跟cookie中的答案比较,计算出得分,然后再把得分存回数据库
else
response.write("你选的题目数量大于数据库里的题目总数!")
end if
set rs=nothing
conn.close
set conn=nothing
%>

2007-11-20 14:23



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-186831-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.100791 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved