在線考試系統(tǒng)課程設(shè)計_第1頁
在線考試系統(tǒng)課程設(shè)計_第2頁
在線考試系統(tǒng)課程設(shè)計_第3頁
在線考試系統(tǒng)課程設(shè)計_第4頁
在線考試系統(tǒng)課程設(shè)計_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、一、需求分析 計算機技術(shù)沒有應(yīng)用到考試上時,組織一次考試只是要經(jīng)過五步:人工出題,考生考試,人工閱卷,成績評估和試卷分析,這是一項十分繁瑣和容易出錯的工作,教師的工作量非常的大。很明顯,傳統(tǒng)的考試方式已經(jīng)不再適應(yīng)現(xiàn)代考試的需要。如今,信息技術(shù)的迅猛發(fā)展,應(yīng)用不斷擴大,教學(xué)和虛擬大學(xué)等相繼出現(xiàn),這些應(yīng)用正逐步深入到千家萬戶,人們迫切要求利用這些技術(shù)來進行在線考試,以減少教師的工作負擔(dān)并提高工作效率,同時提高考試的質(zhì)量,從而使考試更趨于公正,客觀,更加激發(fā)學(xué)生的興趣。例如,目前許多國際著名的計算機公司所舉辦的各種認證考試絕大部分是采用這種形式。二、數(shù)據(jù)庫設(shè)計1, 概念模型設(shè)計(ER圖)是否參加了考

2、試用戶密碼用戶賬號用戶類型型 用戶信息是否已經(jīng)登錄用戶姓名試題題目試題答案試題編號試題類型試題類型名稱 填空題分值填空題比例編號判斷題分值判斷題比例型編號選擇題分值選擇題比例號選項A選項B選項F選項E選項D選項C試題題庫試題類型試題類型編號 參數(shù)編號考試時間 系統(tǒng)參數(shù)選項F學(xué)生考試試卷試卷類型題庫中的編號題目在試卷中的編號題目答案選項A選項C選項B選項D選項E考生答案學(xué)生成績考生編號考生成績選擇題成績判斷題成績填空題成績2、E-R圖轉(zhuǎn)為邏輯模型的方法及過程在sql中創(chuàng)建一個新的數(shù)據(jù)庫CET6,以ER圖中的實體的名稱創(chuàng)建表。設(shè)計表時,以該ER圖中的屬性為列名,根據(jù)實際情況確定其數(shù)據(jù)類型和長度,在

3、必須唯一的列名處設(shè)計主鍵。在sql中一共建立七個表來實現(xiàn)CET6模擬考試系統(tǒng)應(yīng)用程序數(shù)據(jù)的連接。其中,UserType表示數(shù)據(jù)類型,0表示學(xué)生,1表示管理員。UserId表示用戶賬號,UserName表示用戶姓名,UserPsw表示用戶密碼。HaveIn,HaveTest分別表示用戶是否登錄和參加考試。TypeId,TypeName分別表示試題類型和試題類型名。XZT_BL,XZT_FZ分別表示選擇題的分值和比例。判斷題和填空題類推。StudentId表示考生考號,TopicId、PaperTopId分別表示試題在題庫和試卷中的編號。TopicName、TopicAnswer表示試題題目和答案

4、。3、邏輯模型TB_User(用戶信息表)TB_TestType(試題類型表)TB_Param(系統(tǒng)參數(shù)表)TB_StuTest(學(xué)生考試試卷表)TB_Grade(學(xué)生分數(shù)表)TB_Test(試題安排)TB_StuTest(學(xué)生考試試卷表)4、數(shù)據(jù)庫評價 首先,用sql設(shè)計數(shù)據(jù)庫比較穩(wěn)定,對數(shù)據(jù)的要求也比較嚴格。這樣在編碼階段數(shù)據(jù)這一塊就基本沒有不合理的數(shù)據(jù)出現(xiàn)在應(yīng)用程序上。減少了運行會出現(xiàn)的錯誤。但是sql與應(yīng)用程序的鏈接有時比較繁瑣而且不易成功。三、編碼實現(xiàn)1, 登錄模塊1) 用戶的不同類型進入到不同的界面,主要有一個combox控件,用于選擇用戶類型。兩個TextBox控件,Txt_id

5、用于輸入賬號,Txt_Pse用于輸入密碼。三個commandButton控件:cmd_In用于登錄系統(tǒng),Cmd_Again用于清空用戶信息重新輸入,Cmd_Quit用于退出系統(tǒng)。2) 程序流程圖登錄輸入用戶類型進入學(xué)生界面進入管理員界面輸入用戶名密碼輸入用戶名密碼結(jié)束登錄學(xué)生管理員錯誤錯誤3) 登錄模塊代碼Option ExplicitPublic B As Boolean '用戶的登錄信息是否正確Private Sub PD()'判斷用戶登錄信息是否正確,正確B=true,否則B=falseDim rs As New ADODB.Recordset '聲明rs為記錄集

6、對象If Trim(Txt_Id.Text) = "" Then '如果沒有輸入帳號MsgBox "沒有輸入用戶賬號,請您正確填寫!", vbOKCancel + vbCritical Txt_Id.SetFocus '設(shè)置焦點在問本框Txt_Id上ElseIf Trim(Txt_Psw.Text) = "" Then '如果密碼為空 MsgBox "沒有輸入密碼,請您正確填寫!", vbOKCancel + vbCritical Txt_Psw.SetFocus '設(shè)置焦點在問本框

7、Txt_Psw上Else ' Cmd_In.Default = True '設(shè)置Cmd_In按Enter鍵觸發(fā)Click事件Sql = "select * from TB_User where UserId='" & Trim(Txt_Id.Text) & "'" & _"and UserType='" & Cbx_UserType.ListIndex & "' " & _"and UserPsw='&

8、quot; & Trim(Txt_Psw.Text) & "' " '把查詢用戶信息的SQL語句賦給變量Sql rs.Open Sql, cnn, adOpenStatic, adLockReadOnly '以只讀的方式靜態(tài)的打開Sql執(zhí)行的結(jié)果的記錄集 If Not rs.RecordCount > 0 Then '如果記錄集為空 Select Case MsgBox("用戶賬號或密碼不正確,請您正確填寫!", vbOKCancel + vbCritical) '顯示提示信息 Case vb

9、OK '如果選擇了是 B = False Txt_Id.Text = "" '帳號清空 Txt_Psw.Text = "" '密碼清空 Txt_Id.SetFocus '是輸入帳號的文本框獲得焦點 Case Else '選擇了取消 End '結(jié)束程序 End Select Cmd_In.Default = False '設(shè)置Cmd_In不是Enter的默認按鈕ElseIf rs.Fields("HaveIn") = 0 Then '如果記錄集不為空且此帳號沒被其他用戶使用

10、 B = True '用戶的登錄信息正確 cnn.Execute "update TB_User set HaveIn=1 " & _"where UserId='" & Trim(Txt_Id.Text) & "'" & _"and UserType='" & Cbx_UserType.ListIndex & "'" '設(shè)置HaveIn字段為1,限制其他用戶用此帳戶登錄 UsId = Trim(Tx

11、t_Id.Text) '記錄用戶的帳號 Else '如果記錄集不為空但此帳號正在被其他用戶使用 MsgBox "用戶已經(jīng)登錄!", vbOKOnly + vbCritical '顯示提示信息 B = False '用戶的登錄信息錯誤 Txt_Id.Text = "" '帳號清空 Txt_Psw.Text = "" '密碼清空 Txt_Id.SetFocus '是輸入帳號的文本框獲得焦點 Cmd_In.Default = False '設(shè)置Cmd_In不是Enter的默認按

12、鈕 End If rs.Close '關(guān)閉記錄集End IfEnd SubPrivate Sub Cbx_UserType_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then '如果輸入的字符是Enter鍵 Txt_Id.SetFocus '設(shè)置輸入帳號的文本框獲得焦點 Else '如果輸入的是其它字符 KeyAscii = 0 '返回值為空即不輸入任何字符 End IfEnd SubPrivate Sub Cmd_Again_Click() '用戶信息輸入錯誤,選擇了“重輸”按鈕,開始重新輸入

13、。 Call Form_LoadEnd SubPrivate Sub Cmd_In_Click() '用戶填寫信息完畢,單擊“確定”按鈕,開始登錄On Error GoTo Err1 '出現(xiàn)錯誤轉(zhuǎn)向錯誤處理 Dim rs As New ADODB.Recordset '聲明rs為記錄集對象 Select Case Cbx_UserType.ListIndex 'Select語句的條件是Cbx_UserType的ListIndex屬性 Case 0 '如果選中的是第一條記錄即考生 Call PD '判斷考生的帳號和密碼是否正確 If B = Tru

14、e Then '如果考生的帳號和密碼正確 Sql = "select HaveTest from TB_User where UserType=0" & _ "and UserId='" & Trim(Txt_Id.Text) & "'" '判斷考生是否參加過考試 rs.Open Sql, cnn, adOpenStatic, adLockReadOnly '執(zhí)行SQL語句 If rs.Fields("HaveTest") = False Then &

15、#39;如果考生沒有參加過考試 Sql = "delete from TB_Grade where StuId=" & _ "'" & Trim(Txt_Id.Text) & "'" '刪除成績表中考生原有的記錄 cnn.Execute Sql '執(zhí)行SQL語句 Sql = "insert into TB_Grade(StuId) values" & _ "('" & Trim(Txt_Id.Text) &

16、"')" '把考生的帳號插入到成績表中 cnn.Execute Sql '執(zhí)行SQL語句 End If frm_Stu.Show '顯示考生窗口 Unload Me '卸載本窗體 End If Case 1 If Txt_Id.Text = "admin" And Txt_Psw = "admin" Then '設(shè)置超級用戶 Unload Me '卸載本窗體 frm_Manager.Show '顯示管理員窗體 Else '如果不是超級用戶 Call PD '

17、;判斷管理員的帳號和密碼是否正確 If B = True Then '如果帳號和密碼正確 Unload Me '卸載本窗體 frm_Manager.Show '顯示管理員窗體 End If End If Case Else '不過沒有選擇用戶的身份 MsgBox "您沒有選擇身份,請選擇!", vbOKCancel + vbCritical '提示選擇身份 Cbx_UserType.SetFocus '組合框Cbx_UserType獲得焦點 End Select Exit Sub '跳出Sub過程Err1: ErrMe

18、ssageBox "打開窗口失敗" '顯示出錯信息 frm_Login.Show '顯示登錄窗體End SubPrivate Sub Cmd_Quit_Click() If MsgBox("真的要退出 " & Me.Caption & " 嗎?", vbYesNo + vbInformation) = vbNo Then Exit Sub End If '彈出對話框詢問是否退出系統(tǒng) End '退出系統(tǒng)End SubPrivate Sub Form_Load() Cbx_UserType.

19、Text = "請選擇身份" Txt_Id.Text = "" Txt_Psw.Text = ""End SubPrivate Sub Txt_Id_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then '判斷如果用戶輸入的是Enter鍵 Txt_Psw.SetFocus '設(shè)置Txt_Psw獲得焦點 End IfEnd SubPrivate Sub Txt_Psw_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then

20、Call Cmd_In_Click End IfEnd Sub2、管理員模塊1)在窗體上添加一個SSTab控件,上面添加三個commandButton控件,分別為選擇題,填空題,判斷題。添加一個DataGrid控件顯示試題,添加一個Ado控件鏈接數(shù)據(jù)庫。編寫菜單實現(xiàn)各種管理的功能。2)管理員用戶管理修改系統(tǒng)系數(shù)題庫維護查詢考生成績結(jié)束程序3) 代碼Option ExplicitDim Sql As String '聲明模塊級變量Private Declare Function ShellExecute Lib "shell32.dll" Alias "Sh

21、ellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As Long, ByVal lpDirectory As Long, ByVal nShowCmd As Long) As LongPrivate Function FunAdo(ByVal str As String) '構(gòu)造連接ADO的函數(shù)On Error GoTo Err1 '執(zhí)行過程中如果發(fā)生錯誤轉(zhuǎn)向錯誤處理 With Ado1 '使用Wit

22、h結(jié)構(gòu) .Visible = False 'Ado不可見 .ConnectionString = cnn.ConnectionString '設(shè)置Ado的連接字符串 .CommandType = adCmdText '設(shè)置Ado的命令類型 .RecordSource = str '設(shè)置Ado的記錄源 .Refresh '刷新Ado的記錄集 End With '結(jié)束With結(jié)構(gòu) Exit Function '結(jié)束函數(shù)Err1: ErrMessageBox "與數(shù)據(jù)庫連接失??!" '顯示錯誤信息 Me.Show &

23、#39;顯示窗口End FunctionPrivate Sub Cmd_Cancel_Click() Call Form_Unload(1)End SubPrivate Sub Cmd_PDT_Click() Sql = "select 類型號=tb_testtype.Typeid,題號=(tb_topicstor.topicid)," & _ "題目名稱=topicname,答案=topicanswer " & _ "from tb_topicstor,tb_testtype where tb_testtype.typeid=

24、tb_topicstor.typeid and typename='判斷題'" Call FunAdo(Sql) DG.Columns(0).Width = 700 DG.Columns(1).Width = 500 DG.Columns(2).Width = 4000 DG.Columns(3).Width = 500End SubPrivate Sub Cmd_TKT_Click() Sql = "select 類型號=tb_testtype.Typeid,題號=(tb_topicstor.topicid)," & _ "題目

25、名稱=topicname,答案=topicanswer " & _ "from tb_topicstor,tb_testtype where tb_testtype.typeid=tb_topicstor.typeid and typename='填空題'" Call FunAdo(Sql) DG.Columns(0).Width = 700 DG.Columns(1).Width = 500 DG.Columns(2).Width = 4000End SubPrivate Sub Cmd_XZT_Click() Sql = "s

26、elect 類型號=tb_testtype.Typeid,題號=(tb_topicstor.topicid)," & _ "題目名稱=topicname,答案=topicanswer,A,B,C,D,E,F " & _ "from tb_topicstor,tb_testtype where tb_testtype.typeid=tb_topicstor.typeid " & _ "and typename='" & Cmd_XZT.Caption & "'&

27、quot; '把查看選擇題的SQL語句賦給變量Sql Call FunAdo(Sql) '調(diào)用函數(shù)執(zhí)行SQL語句 DG.Columns(0).Width = 700 '設(shè)置DataGrid的第1列列寬 DG.Columns(1).Width = 500 '設(shè)置DataGrid的第2列列寬 DG.Columns(2).Width = 4000 '設(shè)置DataGrid的第3列列寬 DG.Columns(3).Width = 500 '設(shè)置DataGrid的第4列列寬End SubPrivate Sub DG_DblClick() If frm_Man

28、ager.Ado1.Recordset.Fields("題號") = "" Then '如果試題不存在 MsgBox "不存在記錄,請您先添加記錄", vbOKOnly '提示沒有記錄 Exit Sub '跳出Sub過程 Else '如果題庫中有試題 Me.Enabled = False '管理窗體不可以用 Bkm = Ado1.Recordset.Bookmark '記錄當前DataGrid的指針的位置 End IfEnd SubPrivate Sub Form_Load() Call

29、 Cmd_XZT_ClickEnd SubPrivate Sub Form_Unload(Cancel As Integer) If MsgBox("真的要退出 " & Me.Caption & " 嗎?", vbYesNo + vbInformation) = vbNo Then '彈出消息對話框詢問是否退出系統(tǒng) Cancel = True '如果消息對話框返回值為常數(shù)vbNo,系統(tǒng)返回值為True Else cnn.Execute "update tb_user set havein=0 where user

30、id='" & UsId & "'and UserType='1'" End '如果消息對話框返回值為常數(shù)vbNo,系統(tǒng)返回值為False,結(jié)束程序 End IfEnd SubPrivate Sub Men_About_Click() frm_About.ShowEnd SubPrivate Sub Men_Help_Click() SendKeys "F1"End SubPrivate Sub Men_SelGrd_Click() frm_SelGrd.Show '打開查分窗體

31、Me.Hide '隱藏管理員窗體End SubPrivate Sub select_Click() '設(shè)定參數(shù) On Error GoTo Endsub frm_param.Show Me.HideEndsub:End SubPrivateSub T_AddPDT_Click() On Error GoTo Endsub frm_PDT.Show Me.HideEndsub:End SubPrivateSub T_AddTKT_Click()On Error GoTo Endsub frm_TKT.Show Me.HideEndsub:End SubPrivate Sub T_

32、AddXZT_Click()On Error GoTo Endsub frm_XZT.Show Me.HideEndsub:End SubPrivate Sub T_Exit_Click() Unload MeEnd SubPrivate Sub T_Update_Click()On Error GoTo Endsub Me.Enabled = FalseEndsub:End SubPrivate Sub User_Click() On Error GoTo Endsub frm_UpdateUser.Show Me.HideEndsub:End Sub3、學(xué)生窗體1)2)考生是否已經(jīng)參加考試

33、查詢成績修改密碼修改密碼開始考試退出系統(tǒng)3)Option ExplicitDim HaveTest As IntegerPrivate Sub Begin_Click() Call CmdOk_ClickEnd SubPrivate Sub CmdOk_Click()On Error GoTo Err1 frm_Test.Show Me.Hide Exit SubErr1: ErrMessageBox "考試窗口打開出錯"End SubPrivate Sub CmdQuit_Click() Unload MeEnd SubPrivate Sub Form_Load() Di

34、m rs As New ADODB.Recordset '聲明認識rs為記錄集對象 Sql = "select havetest from tb_user where usertype=0" & _ "and userid='" & UsId & "'" '把查詢是否參加考試的標識字段賦給變量Sql rs.Open Sql, cnn, adOpenStatic, adLockReadOnly '執(zhí)行SQL語句 HaveTest = rs.Fields("Have

35、Test") ShowButtonEnd SubPrivate Sub Form_Unload(Cancel As Integer) If MsgBox("真的要退出" & Me.Caption & " 嗎?", vbYesNo + vbInformation) = vbNo Then '彈出對話框詢問是否退出系統(tǒng) Cancel = 1 Else cnn.Execute "update tb_user set havein=0 where userid='" & UsId &

36、"'and UserType='0'" End End IfEnd SubPrivate Sub Img_PswCancel_Click() Pte_StuPsw.Visible = False ShowButtonEnd SubPrivate Sub Img_PswOk_Click()On Error GoTo Err1 '如果發(fā)生錯誤轉(zhuǎn)向錯誤處理 Dim rs As New ADODB.Recordset '聲明認識rs為記錄集對象 Sql = "select * from TB_User where UserId=&#

37、39;" & UsId & "' " & _ "and UserType='0' and UserPsw='" & Txt_StuPsw.Text & "' " '把驗證密碼的SQL語句賦給變量Sql rs.Open Sql, cnn, adOpenStatic, adLockReadOnly '執(zhí)行SQL語句 If Not rs.RecordCount > 0 Then '如果密碼不正確 If MsgBox(&qu

38、ot;密碼不正確,請您重新填寫!", vbOKCancel + vbCritical) = vbCancel Then '彈出提示框 Pte_StuPsw.Visible = False '如果單擊取消回到開始考試的界面 Else '如果單擊確定 Txt_StuPsw.Text = "" '清空Txt_StuPsw Txt_StuPsw.SetFocus '設(shè)置Txt_StuPsw獲得焦點 End If Else Pte_UpdatePsw.Visible = True '顯示修改密碼的圖片框 Txt_Id.Text

39、 = UsId '用戶帳號中顯示用戶的帳號 Pte_StuPsw.Visible = False '隱藏輸入驗證碼的圖片框 Txt_Psw.Text = "" '清空Txt_Psw Txt_SecPsw.Text = "" Txt_Psw.SetFocus '設(shè)置Txt_Psw獲得焦點 End If Exit Sub '結(jié)束結(jié)束Sub過程Err1: ErrMessageBox "校對密碼出錯" '顯示出錯信息End SubPrivate Sub Img_Ok_Click()On Erro

40、r GoTo Err1 '如果發(fā)生錯誤就轉(zhuǎn)向錯誤處理 If Trim(Txt_Psw.Text) = "" Then '如果密碼為空 MsgBox "密碼不能為空!", vbOKOnly + vbCritical '提示輸入密碼 ElseIf Trim(Txt_Psw.Text) <> Trim(Txt_SecPsw.Text) Then '如果兩次密碼不同 MsgBox "您兩次輸入的密碼不一樣!", vbOKOnly + vbCritical '提示重新輸入密碼 Txt_Psw.

41、Text = "" '清空Txt_Psw Txt_SecPsw.Text = "" '清空Txt_SecPsw Txt_Psw.SetFocus '設(shè)置Txt_Psw獲得焦點 Else '如果兩次輸入的密碼相同且不為空 Sql = "update tb_user set userpsw='" & Txt_Psw.Text & "'" & _ "where userid='" & UsId & &quo

42、t;' " '修改密碼 cnn.Execute Sql '把密碼寫入數(shù)據(jù)庫 MsgBox "修改成功!", vbOKOnly + vbInformation '提示修改成功 Pte_UpdatePsw.Visible = False 'Pte_UpdatePsw不可見 ShowButton End If Exit Sub '跳出Sub過程Err1: ErrMessageBox "密碼修改出錯" '顯示提示信息 Call Form_LoadEnd SubPrivate Sub Img_Aga

43、in_Click() Txt_Psw.Text = "" Txt_SecPsw.Text = "" Txt_Psw.SetFocusEnd SubPrivate Sub Img_Cancel_Click() Pte_UpdatePsw.Visible = False ShowButtonEnd SubPrivate Sub Men_AboutTest_Click() frm_Dialog.ShowEnd SubPrivate Sub Men_Help_Click() SendKeys "F1"End SubPrivate Sub Men_Sele_Click()On Error GoTo Err1 Dim rs As New ADODB.Recordset Sql = "select grade from t

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論