test.asp
<%
    ' 通过Session对象中的非对象变量Pass来判断是用户是否合法登陆,
    ' 如没有通过Login.asp进行用户名和口令验证则视为非法用户,将
    ' 用户引导到Login.asp进行验证
  If Session("Pass"

 <> 1 Then
    Response.Redirect "Login.asp"
  End If
  s=10            ' 试卷题数
  redim a(s, 5)
  if not IsArray(Session("[脏话,已过滤]i"

) then
      ' 使用Connection对象打开数据库文件
    Set objConn = Server.CreateObject("ADODB.Connection"

    objConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                       "Data Source=" & Server.MapPath("Exercise.mdb"

    objConn.Open
      ' 建立Recordset对象并返回表Topic所有记录,每一条记录为一道考试题
    strSQL = "SELECT * FROM Topic"
    Set objRS = Server.CreateObject("ADODB.Recordset"

    objRS.Open strSQL, objConn, 1, 1
    zs=objRS.RecordCount
    redim t(zs)
    objRS.MoveFirst
    for each j in t
      j=0
    next
      ' 随机抽取题号
    Randomize timer
    for j=1 to s
      k=int(rnd*zs+1)
      do while t(k)<>0
        k=int(rnd*s+1)
      loop
      t(k)=1    ' 第k题被选中
    next
    j=1:i=1
      ' 循环选取数据集objRS中的部分记录存放到数组中
    Do While Not objRS.Eof
      if t(j)=1 then
        a(i,1)=objRS("Question"

        a(i,2)=objRS("A"

        a(i,3)=objRS("B"

        a(i,4)=objRS("C"

        a(i,5)=objRS("D"

        i=i+1
      end if
      j=j+1
      objRS.MoveNext
    Loop
    b=a
    For i=1 to s
      redim f(4)
      for each j in f
        j=0
      next
      For k=1 to 4        ' 这个循环在数组f()中存放随机排列的1、2、3、4
        j=Int(rnd*4+1)
        Do While f(j)<>0
          j=Int(rnd*4+1)
        Loop
        f(j)=k
        if k=1 then f(0)=j    ' f(0)中存放的是正确答案的序号
      Next
      a(i,0)=f(0)            ' a(i,0)中存放的是正确答案的序号
      For k=2 to 5            ' 重新调整选项顺序
        a(i,k)=b(i,f(k-1)+1)
      Next
    Next
    Session("[脏话,已过滤]i"

=a
  end if
  Session("no"

=1
%>
<HTML>
  <HEAD><TITLE>网上考试</TITLE></HEAD>
  <FRAMESET rows=125,*>
    <FRAME src="Test1.asp">
    <FRAME src="Test2.asp" name="Bottom">
  </FRAMESET>
</HTML>
test1.asp
<%@ Language=VBScript%> 
<HTML>
  <HEAD><TITLE>考试答题页面</TITLE></HEAD>
    <SCRIPT LANGUAGE=vbscript>    ' 这里定义了一个显示剩余时间的子程序
      Public m
      Sub tick(k)
        m=k-1
        t1.value = TimeSerial(0,0,m)
        if m =0 then exit sub
        window.settimeout "tick(m)",1000     '设定Window对象执行函数tick()的定时间隔为1秒
      End Sub
    </SCRIPT>
  </HEAD>
     <!--定义Window对象的load事件(加载该网页时)执行函数tick(),
         继而引发函数tick()中的window.setTimeout("tick();",1000)
         语句,从而使网页能在1秒内刷新一次时间-->
  <BODY onload =tick(10*10) bgcolor=LightYellow>
    <Center><FONT size=6 face=方正舒体 color= blue>网 上 考 试</FONT><HR>
    <FONT size=3 color= blue>考生编号:<%=Session("User"

%></FONT>
        剩余时间:<INPUT type=text name=t1 size=10>
  </BODY>
</HTML>
test2.asp
<%@ Language=VBScript%> 
<HTML>
  <HEAD><TITLE>考试答题页面</TITLE></HEAD>
  <BODY bgcolor=LightYellow>
<%
  s=2            ' 试卷题数
  redim a(s, 5)
  if not IsArray(Session("[脏话,已过滤]i"

) then
      ' 使用Connection对象打开数据库文件
    Set objConn = Server.CreateObject("ADODB.Connection"

    objConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                       "Data Source=" & Server.MapPath("Exercise.mdb"

    objConn.Open
      ' 建立Recordset对象并返回表Topic所有记录,每一条记录为一道考试题
    strSQL = "SELECT * FROM Topic1"
    Set objRS = Server.CreateObject("ADODB.Recordset"

    objRS.Open strSQL, objConn, 1, 1
    zs=objRS.RecordCount
    redim t(zs)
    objRS.MoveFirst
    for each j in t
      j=0
    next
      ' 随机抽取题号
    Randomize timer
    for j=1 to s
      k=int(rnd*zs+1)
      do while t(k)<>0
        k=int(rnd*s+1)
      loop
      t(k)=1    ' 第k题被选中
    next
    j=1:i=1
      ' 循环选取数据集objRS中的部分记录存放到数组中
    Do While Not objRS.Eof
      if t(j)=1 then
        a(i,1)=objRS("Question"

        a(i,2)=objRS("A"

        a(i,3)=objRS("B"

        a(i,4)=objRS("C"

        a(i,5)=objRS("D"

        i=i+1
      end if
      j=j+1
      objRS.MoveNext
    Loop
    b=a
    For i=1 to s
      redim f(4)
      for each j in f
        j=0
      next
      For k=1 to 4        ' 这个循环在数组f()中存放随机排列的1、2、3、4
        j=Int(rnd*4+1)
        Do While f(j)<>0
          j=Int(rnd*4+1)
        Loop
        f(j)=k
        if k=1 then f(0)=j    ' f(0)中存放的是正确答案的序号
      Next
      a(i,0)=f(0)            ' a(i,0)中存放的是正确答案的序号
      For k=2 to 5            ' 重新调整选项顺序
        a(i,k)=b(i,f(k-1)+1)
      Next
    Next
    Session("[脏话,已过滤]i"

=a
  end if
    ' 用临时变量i递增来生成客户端表单中的输入变量Ans1,Ans2,...
  for i=1 to s
%>
    <FORM action=Result.asp method=post>
      <TABLE border=0 cellPadding=1 cellSpacing=1 width=100% bordercolor="#0099FF">
        <TR><TD>  <%=i & "." & Session("[脏话,已过滤]i"

(i,1)%>
        <TR bgcolor="#99CCFF"> 
          <TD><INPUT name=Ans<%=i%> type=radio value="1" checked><%=Session("[脏话,已过滤]i"

(i,2)%>
        <TR bgcolor="#CCCCFF">
          <TD><INPUT name=Ans<%=i%> type=radio value="2"><%=Session("[脏话,已过滤]i"

(i,3)%>
        <TR bgcolor="#99CCFF">
          <TD><INPUT name=Ans<%=i%> type=radio value="3"><%=Session("[脏话,已过滤]i"

(i,4)%>
        <TR bgcolor="#CCCCFF">
          <TD><INPUT name=Ans<%=i%> type=radio value="4"><%=Session("[脏话,已过滤]i"

(i,5)%>
        <TR><TD align=Right>
      </TABLE>
<% next %>
<INPUT type=submit value=提交>
    </FORM>
  </BODY>
</HTML>
上面三个文件中要改的问题有以下几个:
1.如何改变题量就是出5题或3题时计算总分如何算?
2.到时间自动交圈的完成?
3.在同一台计算机上注册的人都是出的同一套题,能否让在同一台计算机上每次时入出不同的题?
4.考试的人如果是0分就还能再考能否改一下?
下面是评分
<%@ Language=VBScript %> 
<%
  '定义变量,对象
  Dim Name, Score
  Dim Correct, RSCount
  Dim objConn, objRS, objRS1  
    ' 通过Session对象获取用户名
  Name = Session("User"

  Correct = 0
  RSCount = 0
  If Session("Pass"

 <> 1 Then
    Response.Redirect "Login.asp"
  End If
%>
<HTML> 
  <HEAD><TITLE>评分页面</TITLE></HEAD>
  <BODY bgcolor=LightYellow>
    <TABLE align=center>
      <TR><TD>正确答案:
<%
  s=UBound(Session("[脏话,已过滤]i"

)
    ' 给出正确答案并评分
    ' 循环将所有答案进行评分
  For i=1 to s
    Response.Write Session("[脏话,已过滤]i"

(i,0) & " "
    f=Cint(Request.Form(i))
    a=Session("[脏话,已过滤]i"

(i,0)
    If f = a then
      Correct = Correct + 1
    End If
  Next
    ' 输出成绩到客户端
  Response.Write "<TR><TD>你的答案: "
  Score = Int(Correct / s * 100)
  For i = 1 To Request.Form.Count
    Response.Write Cint(Request.Form(i)) & " "
  Next
  Response.Write "<P>你的成绩:" & score & " <B>"
  If Score < 60 Then Response.Write "<FONT color=red>不及格!</FONT>"
  If Score >= 60 And Score < 80 Then Response.Write "<FONT color=blue>及格</FONT>"
  If Score >= 80 And Score <= 100 Then Response.Write "<FONT color=blue>优秀!</FONT>"
  Response.Write "</B>"
    ' 记录成绩到数据库
    ' 使用Connection对象打开数据库文件
  Set objConn = Server.CreateObject("ADODB.Connection"

  objConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=" & Server.MapPath("Exercise.mdb"

  objConn.Open
  Set objRS = Server.CreateObject("ADODB.Recordset"

  strSQL = "update Student set 成绩=" & score & " where 编号='" & name &"'"
  objRS.Open strSQL, objConn, 1, 2
    ' 释放资源
  objConn.Close
  Set objRS = Nothing
  Set objConn = Nothing
    ' 有些用户可能会通过浏览器的“返回”按钮回到Test.asp界面,将答案
    ' 修改后重新提交,因此增加如下逻辑判断是否已经提交过答案,这里的
    ' Session对象中的Pass变量是否为1代表用户在登陆考试系统后是否按过
    ' “提交”按钮,如果按过,在Result.asp的最后一条语句Session("Pass"

=0
    ' 会将Pass变量置0,以示本次测试结束
  Session("Pass"

 = 0
%>
      <TR><TD height=40><A href="Login.asp" TARGET=_parent>返回首页</A>
    </TABLE>
  </BODY>
</HTML>