網上考試系統

來源:互聯網
上載者:User

基於資料庫的B/S網上考試系統得到廣泛地應用,現以ASP.net(C#)+SQL server(或ACCESS)為例說明開發網上考試系統的實現方法。

  一、資料庫的設計如:
 

 

 

 

      二、考生登入:

  在此處將考生資訊插入表StuInfo,此處要防止考生重複登入!給指定唯一的考號,並將考號欄位ExamId(c)設為主鍵,當重複登入時,用Catch捕獲錯誤,給出相應提示,部分代碼如下(login.aspx):

  三、試題產生:

  1、防止考生重新整理頁面:

  由於載入試題頁面時將從資料庫中隨機抽取試題,所以應防止考生重新整理面頁(重新整理頁面會重建新的試題)。方法是將表StuInfo中的LogYn欄位預設值設為0,載入試題後設為1,交卷評分後設為2,載入試題頁面時進行相應檢查,以防止頁面的重新整理,代碼如下(exam.aspx):

  2、隨機產生試題:

  網上考試系統的關鍵是試題的隨機產生,即對於不同的電腦訪問系統時將從題庫中隨機地抽取不同的試題。

  在此我們可使用SQL語句"select top n * from exam order by newid()"從題庫中隨機抽取n條記錄,其中newid()產生 uniqueidentifier 值(若是ACCESS資料庫則用"select top n * from mc order by rnd(id)",其中id為自動編號欄位)。

  在exam.aspx頁面上放置一個Panel容器控制項,以便動態產生綁定到試題的控制項,並將從表exam中隨機產生的試題答案寫入表StuInfo表中的mca欄位,代碼如下(exam.aspx):

四、交卷評分:

  當使用者點擊交卷按鈕後,應將使用者的答題結果與試題答案進行比對,並給出相應的分值寫入資料表,最後將表StuInfo中的LogYn欄位設定為2,顯示考試得分,代碼如下(exam.aspx):

限於篇幅,在此只列出了實現網上考試系統的幾個要點,讀者可根據自已的需要進一步完善相應的資料驗證、後台管理及介面設計。

核心代碼如下:

Exam.aspx:

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="exam.aspx.vb" Inherits="exam" %>

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

    <title>網路考試系統</title>

</head>

<body>

    <form id="form1" runat="server">

    <div>

        <asp:Label ID="Label1" runat="server" ></asp:Label>

        一、單選題

        <asp:Panel ID="myPanel" runat="server" Height="550px" Width="840px">

            </asp:Panel>

        <asp:Button ID="Button1" runat="server" Text="Button" />

    </div>

    </form>

</body>

</html>

Exam.aspx.vb:

Imports System

Imports System.Data

Imports System.Data.SqlClient

Imports System.Data.SqlClient.SqlException

Partial Class exam

    Inherits System.Web.UI.Page

    Dim strConn, strsql2, mcStr As String

    Public ddateandtime As Date

    Dim myconn As SqlConnection

    Dim QuestCmd As SqlCommand

    Dim DS As DataSet

    Public dr As SqlDataReader

    Dim i, j As Integer

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        strConn = System.Configuration.ConfigurationManager.AppSettings("connstring")

        myconn = New SqlConnection(strConn)

        myconn.Close()

        If Not IsPostBack Then

            If Session("id") Is Nothing Then

                Label1.Text = "尚未登陸,不能考試!"

                Response.Redirect("login.aspx")

            Else

                strsql2 = "select LogYn from StuInfo where ExamId= '" + Session("Id").ToString() + "'"

                dr = GetDataReader(strsql2)

                If dr.Read() Then

                    If dr("LogYn").ToString().Trim().Equals("1") Or dr("LogYn").ToString().Trim().Equals("2") Then

                        Label1.Text = "不能重新整理!請與管理員聯絡,重新登入!"

                    Else

                        myconn.Close()

                        strsql2 = "update StuInfo set LogYn='1'" '已成功載入試題

                        ExecuteSQL(strsql2)

                    End If

                End If

            End If

            myconn.Close()

            createxam(5,1)

            createxam(5,2)

        myconn.Close()

    End Sub

    Function GetDataReader(ByVal Sql As String) As SqlDataReader

        Dim myCmd As SqlCommand

        myCmd = New SqlCommand(Sql, myconn)

        myconn.Open()

        GetDataReader = myCmd.ExecuteReader()

    End Function

    Sub ExecuteSQL(ByVal Sql As String)

        Dim myCmd As SqlCommand

        myCmd = New SqlCommand(Sql, myConn)

        myConn.Open()

        myCmd.ExecuteNonQuery()

        myConn.Close()

    End Sub

   Sub createxam(byval num as interger,byval ltype as integer)

            strsql2 = "select top ” & num &” * from mc where type=” & ltype &” order by newid()"

            dr = GetDataReader(strsql2)

            i = 1

            Do While dr.Read()

                Dim LitTxt As Literal = New Literal()

                Dim LitBl As Literal = New Literal()

               If ltype=1 then

                       Dim ChkMc As RadioButtonList = New RadioButtonList()

               Else

                       Dim ChkMc As CheckBoxList = New CheckBoxList()

               End if

                ChkMc.ID = "ChkMc" + i.ToString()

                LitTxt.Text = i.ToString() + "、 " + Server.HtmlEncode(dr("Question").ToString()) + "<BR><Blockquote>"

                LitBl.Text = "</Blockquote>"

                ChkMc.Font.Size = 12

                For j = 1 To 4

                    ChkMc.Items.Add(Server.HtmlEncode(dr("Choice" + j.ToString()).ToString()))

                    ChkMc.Items(j - 1).Value = j.ToString()

                Next

                mcStr += dr("Answer").ToString().Trim() 'mcStr是儲存隨機產生試題答案的字串變數

                myPanel.Controls.Add(LitTxt)

                myPanel.Controls.Add(ChkMc)

                myPanel.Controls.Add(LitBl)

                i = i + 1

            Loop

   End sub

End Class

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.