在線考試系統(tǒng)_第1頁
在線考試系統(tǒng)_第2頁
在線考試系統(tǒng)_第3頁
在線考試系統(tǒng)_第4頁
在線考試系統(tǒng)_第5頁
免費預覽已結束,剩余14頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、課程設計報告題 目:在線考試系統(tǒng)課程名稱:C#S程設計學 院:信息工程學院專 業(yè):軟件工程班 級:15軟件1學生姓名:馬銘璐學 號:20150305142指導教師:于啟紅成 績:開課時間:2017-2018 學年 第二 學期一、系統(tǒng)的應用背景1.1.1 系統(tǒng)的應用背景1.1.2 系統(tǒng)的功能!.1.3 系統(tǒng)預覽2.二、 系統(tǒng)概要設計 2.2.1 系統(tǒng)實現(xiàn)方案和系統(tǒng)功能模塊22.2 數(shù)據(jù)庫邏輯設計 2.三、系統(tǒng)詳細設計3.3.1 自動出題功能的設計 3.3.2 監(jiān)控操作功能的設計 4.3.3 校對評分功能的設計9.3.4 時間提醒功能的設計10四、系統(tǒng)程序設計U4.1 自動出題功能的實現(xiàn) 114.

2、2 監(jiān)控操作功能的實現(xiàn)114.3 校對評分功能的實現(xiàn)144.4 時間提醒功能的實現(xiàn)14五、總結.15.參考文獻.16.在線考試系統(tǒng)一、系統(tǒng)的應用背景1.1 系統(tǒng)的應用背景隨著計算機技術的快速發(fā)展,學校管理和教學的信息化發(fā)展也有進步,各個環(huán)節(jié)都均衡 發(fā)展,從軟硬件雙方面把學校建設成一流的信息管理、教育教學的平臺。目前設計開發(fā)的計 算機考試系統(tǒng)也是其中重要的一個方面。傳統(tǒng)的考試由于涉及到組織命題、試卷印刷、考試 安排、組織閱卷等諸多環(huán)節(jié),考試的時間周期長、效率低下。顯然,隨著考試類型的增加和 考試要求的提高,教師的工作量將會愈來愈大,并且其工作將是項煩瑣和容易出錯的事情, 可以說舊式的考試已經不能

3、適應現(xiàn)代考試的需求了。人們急切要求利用一些技術來進行計算 機考試,以緩解教師的工作負擔和提高工作效率,與此同時提高了考試的質量。其中文件操作是使用 Windows操作系統(tǒng)必須掌握的一項基本技能,已成為計算機初級操 作員考證、計算機文化基礎課考試中必考內容之一1。目前,這些考試大多采用機上考試系統(tǒng)。文件操作題必須提供考試所需的各文件夾及文件,而且對考生操作的要求需要做到實時 監(jiān)控來判斷考生操作是否正確。因此,Windows文件操作題考試應解決自動評分技術關鍵技術問題。目前,許多專家已有 計算機應用基礎考試系統(tǒng)的研究,本設計主要描述自動評分技術的實現(xiàn)。1.2 系統(tǒng)的功能界面需要達到的要求是要能顯示

4、題目,提示時間,選擇下一題,提交所有操作。界面結 構如下圖1所示:圖1界面結構圖1.3 系統(tǒng)預覽窗體上一個text控件用于顯示題目,默認顯示提示信息:考生文件夾位于 D盤stu文件夾。一個label標簽顯示分,一個label標簽顯示秒,一個button用于進入下一題, 一個button 用于提交評分,窗體的標題為“windows操作題”。實際界面圖2如下所示。16圖2實際界面二、系統(tǒng)概要設計2.1 系統(tǒng)實現(xiàn)方案和系統(tǒng)功能模塊針對需求分析提出來的運行流程,概要設計這里對自動出題、監(jiān)控操作、校對評分、時 間提醒這四項功能根據(jù)需用到的技術進行設計。2.2 數(shù)據(jù)庫邏輯設計在form窗體加載時,程序已經

5、完成操作題目、正確操作記錄的讀取。程序中使用到的數(shù) 據(jù),在各個函數(shù)方法中都可以訪問,所以定義全局變量最好。全局變量的定義所下表1所示:表1全局變量名稱類型作用初始值mintInt分鐘59curInt當前操作題號0strtextString口存放題目無studoneString口存放考生操作無sysdoneString存放正確操作無myDocsstring考生文件夾d:stuscssInt秒鐘59三、系統(tǒng)詳細設計3.1自動出題功能的設計自動出題這個功能使用到了,StreamReader這個類,在讀寫文件的過程中,F(xiàn)ilestream只可以進行以字節(jié)為單位原始數(shù)據(jù)流進行讀寫操作,為此,C#中提供了

6、功能更加強大的StreamReader來支持文件的讀寫.StreamReader可以進行以字符為單位的數(shù)據(jù)讀寫操作。我們使用到構造函數(shù) StreamReader(String string, Encoding encoding)。這里的 String 對象不是簡單的字符串而是具體文件的地址,然后根據(jù)用戶選擇編碼去讀取流中的數(shù)據(jù)。自動出題功能是是一項非常智能的功能,旨在題庫中隨機檢索出指定數(shù)量的題目,按順 序顯示出來,本設計的題庫題目不多,實現(xiàn)了題目的全部檢索,按順序顯示。題庫中題目按 通過文本的方式保存在考生文件夾的"question.dat ”文件中,每到題目的存放格式如下:題目1

7、行數(shù)n1行1行2行n1題目2行數(shù)n2行1 行2行n2題目n行數(shù)nn"question.dat”文件內容如圖3所示。程序在創(chuàng)建form對象時候,調用form對象的構造 函數(shù)通過字節(jié)流將整個文本按行讀入,首先讀入行數(shù)n,知道這個題目有幾行,接著讀入 n行字符,存放在字符串數(shù)組string口 strtext里,接著讀入下一題的行數(shù)。文件立端相©格式?;タ措姡簬椭衎1,請在聿J,文件夾;氤,炭件夾中“下查找阪總的Jpg文件,并將文件移動到“二道在考學笠住去工寵臥下崗羯 0?在若£我?決下建立之格 (2)在考生文柞夾下.查找,F長操作到看WORD文檔非文 A”文件夾!小文

8、上,將紀移動瞿 董蕓1 軒薪筋整露口的文 與將八MVFILE ”文件b移動到考生文舛歲F文任正下的噬的文檔仰/文件.并為其移動到"刪FILE/文擇夾.e出誓”兩個文文文交立 :建 *夾中 *夾 ,文文件 作* M文 選等 下二至一一 如:”報 成,4五一 元建建的 下下下下 夾頭夾夾圖3文件內容3.2監(jiān)控操作功能的設計監(jiān)控操作,需要利用到 Windows的文件變化通知,調用CreateFile 函數(shù)獲得文件夾句柄, 再調用 ReadDirectoryChangesW 獲得文件變化通知。這里要熟悉 CreateFile 和 ReadDirectoryChangesW 的使用。Creat

9、eFile 這個函數(shù)可以創(chuàng)建或打開一個對象的句柄,憑借此句柄就可以控制這些對象:控制臺對象、通信資源對象、目錄對象 (只能打開)、磁盤設備對象、文件對象、郵槽對象、 管道對象。其函數(shù)原型:HANDLE CreateFile(LPCTSTR lpFileName,DWORDdwDesiredAccess,DWORDdwShareMode,LPSECURITY_ATTRIBUTES IpSecurityAttributes,DWORDdwCreationDisposition,DWORDdwFlagsAndAttributes,HANDLE hTemplateFile);lpFileName 一個

10、指向無終結符的字符串的指針,來指明要創(chuàng)建或打開的對象的名字。dwDesiredAccess指明對象的控制模式。一個應用程序可以包含讀控制、寫控制、讀/寫控制、設備查詢控制。這個參數(shù)的取值可以是下面這些的組合如下表2所示:表 2 dwDesiredAccess 參數(shù)表參數(shù)作用0指定設備查詢控制:程序可以不訪問設備就查詢到設備屬性。GENERIC_READ指定讀控制,可以從對象中讀取數(shù)據(jù)(指針將可以移動)。GENERIC_WRITE指定寫控制,可以向對象中寫數(shù)據(jù)(指針將可以移動)。dwShareMode指定對象的共享模式。如果dwShareMode=0,表示是互斥使用的。如果CreateFile打

11、開成功,則別的程序只能等到當前程序關閉對象句柄CloseHandle后才能在打開或使用。 使用下面這些值的組合來表示對象的共享模式如下表3所示:表3 dwShareMode參數(shù)表參數(shù)作用FILE_SHARE_DELETE打開操作只有在刪除請求發(fā)生時才能返回成功FILE_SHARE_READ打開操作只有在讀控制請求發(fā)生時才能返回成功FILE_SHARE_WRITE打開操作只有在寫控制請求發(fā)生時才能返回成功IpSecurityAttributes 一個指向 SECURITY_A TTRIBUTES 結構對象的指針,決定返回的句 柄是否被子進程所繼承。如果 IpSecurityAttributes參

12、數(shù)為NULL句柄就不能被子進程繼承。dwCreationDisposition指明當打開的對象存在或不存在的時候各需怎樣處理。這個參數(shù)必 須是一下值的其中之一,參數(shù)如下表4所示:表 4 dwCreationDisposition 參數(shù)表CREATE_NEW創(chuàng)建新文件/對象(當對象已經存在是將返回失?。?。CREATE_ALWAYS總是創(chuàng)建(如果對象存在就覆蓋它,清 除當前屬性,把文件屬性和dwFlagsAndAttributes 指定的標志相結合)。OPEN_EXISTING打開文件(如果不存在就返回失?。㎡PEN_ALWAYS存在就打開;若不存在,假如dwCreationDisposition

13、 =CREATE_NE般創(chuàng)建一個新文件。TRUNCATE_EXISTING存在就打開,且清空文件內容 (至少要 有GENERIC_WRITE 權限);若義件不 存在就返回失敗。dwFlagsAndAttributes 指定文件屬性和標志。hTemplateFile把具有GENERIC_READ權限的句柄指定為一個模板文件。這個模板文件 提供了文件屬性和擴展屬性,用于創(chuàng)建文件。而ReadDirectoryChangesW如果函數(shù)成功,返回值為非零。函數(shù)原型如下所示:BOOL WINAPI ReadDirectoryChangesW(_inHANDLE_outLPVOID_inDWORD_inBO

14、OL_inDWORD_out_optLPDWORD_inout_optLPOVERLAPPED_in_optlpCompletionRoutine);hDirectory為對目錄進行監(jiān)視的句柄, 訪問權限。hDirectory,IpBuffer,nBufferLength,bWatchSubtree,dwNotifyFilter,1PBytesReturned,©Overlapped,LPOVERLAPPED_COMPLETION_ROUTINE被監(jiān)視的目錄必須打開FILE_LIST_DIRECTORY 的lpBuffer為一個指向DWORD型的緩沖區(qū),其中可以將獲取的數(shù)據(jù)結果將其返

15、回。這個緩沖區(qū)的定義是 FILE_NOTIFY_INFORMATION 結構。 這個緩沖區(qū)充滿要么同步或異步,這取決于如何打開目錄什么價值給予©Overlapped參數(shù)。nBufferLength,指lpBuffer的緩沖區(qū)的大小值,以字節(jié)為單位。bWatchSubtree,監(jiān)視子目錄.一般選擇 TRUEdwNotifyFilter ,對文件過濾的方式和標準。該過濾器的標準,功能檢查,以決定是否等待操作完成。這個參數(shù)可以是一個或多個下列值,參數(shù)如下表5所示:表 5 dwNotifyFilter 參數(shù)表參數(shù)作用FILE_NOTIFY_CHANGE_FILE_NA任何文件名改變都會查看所

16、在目錄或子ME目錄的變更,并將結果通知給等待操作返回。變化包括重命名,創(chuàng)建或刪除文件。FILE_NOTIFY_CHANGE_DIR_NAM任何目錄名稱改變都會查有所在目錄或E子目錄的變更,并將結果通知給等待操作返回。改變包括建立或刪除一個目錄。FILE_NOTIFY_CHANGE_ATTRIBUTESFILE_NOTIFY_CHANGE_SIZEFILE_NOTIFY_CHANGE_LAST_WRITEFILE_NOTIFY_CHANGE_LAST_ACCESSFILE_NOTIFY_CHANGE_CREATIONFILE_NOTIFY_CHANGE_SECURITY任何屬性變化,都會查看所在

17、目錄或子目 錄的變更,并將結果通知給等待操作返 回。任何文件大小的變化, 都會查看所在目錄 或子目錄的變更,并將結果通知給等待操 作返回。操作系統(tǒng)檢測改變文件大小,只 有當該文件被寫入到磁盤時發(fā)生。操作系統(tǒng)使用廣泛緩存,檢測時才會發(fā)生的緩 存足夠同滿。任何改變過去修改時間的文件 ,都會查 看所在目錄或子目錄的變更, 并將結果通 知給等待操作返回。操作系統(tǒng)檢測改變過 去寫的時間只有當該文件被寫入到磁盤。任何改變文件最近訪問時間, 都會查看所 在目錄或子目錄的變更, 并將結果通知給 等待操作返回。任何改變文件的創(chuàng)建時間的, 都會查看所 在目錄或子目錄的變更, 并將結果通知給 等待操作返回。任何安全

18、描述符被改變的,都會查看所在 目錄或子目錄的變更, 并將結果通知給等 待操作返回。1PBytesReturned同步調用,將接收的字節(jié)數(shù)轉入IpBuffer參數(shù)。©Overlapped 一個指針的重疊結構,提供供數(shù)據(jù)時使用的異步操作。否則,這個值為NULL。lpCompletionRoutine 一個指針一個完成例程如果在呼叫使用函數(shù)操作時已經完成或取消和調用線程是在alertable等待。狀態(tài)。ReadDirectoryChangesW 該函數(shù)用來監(jiān)控文件夾變化,基本步驟是:(1)使用CreateFile打開目錄,要取得一定權限,打開目錄的時候一定要包含F(xiàn)ILE_LIST .DIR

19、ECTORY 參數(shù);(2)然后使用該函數(shù)監(jiān)聽,收到系統(tǒng)的消息后,從 Ipbuffer里面取得Action和Filename。該函數(shù)可以同步調用或者異步調用,是同步還是異步取決于CreateFile時給的參數(shù),和該函數(shù)的第 7 個參數(shù) LPOVERLAPPED ©Overlapped :(1) 同步調用,則CreateFile時使用FILE_LIST .DIRECTORY,第7個參數(shù)設置為nil ;(2) 異步調用,則 CreateFile時還要指定 FILE _FLAG .OVERLAPPED ,第7個參數(shù)還要給個值。還有要注意的是第三個參數(shù)和第四個參數(shù)設置緩沖區(qū),最大64KB如果監(jiān)

20、視目錄下一次操作太多的文件,超過緩沖區(qū)(緩沖區(qū)溢出),就會丟失消息。創(chuàng)建線程調用ReadDirectoryChangesW ,將考生沒操作一題的記錄按指定的格式用字符串 數(shù)組變量string studoneW:存下來。3.3 校對評分功能的設計同樣這個功能使用到了,StreamReade這個類,正確的操彳記錄保存在“check.dat”文件中,存放格式如下:操彳1行數(shù)n1行1行2行n1操彳2行數(shù)n2行1行2行n2操彳n行數(shù)nn"check.dat” 文件內容如圖4所示:文件也)鐮輯11格式)查看。幫助理)10添加Old新建文件來Num刪除 8加 改修改 刪除 僚加 卷改1添加Old圖

21、圖新建文件夾 圖片之 夾心2.jp 522.j四2夾心1. jpq 21.jpq 2New修改 刪除 懿 12 添加 OldN9W新建妾任麥nme新硅文件夾MVFILE圖4文件內容程序在創(chuàng)建form對象時候,調用form對象的構造函數(shù)通過字節(jié)流將整個文本按行讀入, 首先讀入行數(shù)n,知道這個題目有幾行,接著讀入n行字符,存放在字符串數(shù)組 string口 sysdone 里,接著讀入下一題的行數(shù)。3.4 時間提醒功能的設計時間提醒的實現(xiàn)使用到.net提供的 System. Windows . Forms. timer控件,它直接繼承自 Componet. Timer控件只有綁定了 Tick事件,和

22、設置 Enabled=True后才會自動計時,停止計 時可以用Stop()控制,通過Stop()停止之后,如果想重新計時,可以用 Start()方法來啟動計 時器。Timer控件和它所在的Form屬于同一個線程;將間隔時間timeh. Interval設置為1000毫秒二1秒,在form_load()的時候調用timer. Start()方法啟動計時器,timer_Tick()方法實現(xiàn) 在每隔1秒的時間里更新label標簽,顯示剩余時間。當時間到的時候,自動評分。計時器啟動,時間變化,時間提醒功能工作流程如下圖5所示:圖5工作流程四、系統(tǒng)程序設計4.1 自動出題功能的實現(xiàn)由于全部的題目都存放在

23、字符串數(shù)組string口 strtext中,所以只要將strtext cur顯示在Text文本框上,同時更新cur的值即可,實現(xiàn)代碼如下所示:private void button2_Click(object sender, EventArgs e)if (cur < 10)cur+;textBox1.Text = strtextcur;button2.Text ="下題"4.2 監(jiān)控操作功能的實現(xiàn)直接調用概要設計提到的CreateFile和ReadDirectoryChangesW 這兩條 API, CreateFile獲 得句柄,ReadDirectoryChan

24、gesW接收句柄監(jiān)控指定的考生文件夾目錄,并將監(jiān)控的記錄按題 號保存在字符串數(shù)組 string studone中,實現(xiàn)代碼如下所示:public void myThreadMethod() IntPtr hDir = CreateFile(myDocs, FILE_LIST_DIRECTORY, FILE_SH ARE_READ | FILE_SHARE_WRITE |FILE_SHARE_DELETE, IntPtr.Zero, OPEN_EXISTING, FILE_FLAG _BACKUP_SEMANTICS, IntPtr.Zero);if (hDir = IntPtr.Zero) M

25、essageBox.Show("文件創(chuàng)建失敗"+ Marshal.GetLastWin32Error ();return;IntPtr pBuf = IntPtr.Zero;try pBuf = Marshal.AllocHGlobal(int)BUFSIZE); uint bytesReturned;while (ReadDirectoryChangesW(hDir, pBuf, BUFSIZE, true, FILE _NOTIFY_CHANGE_FILE_NAME |FILE_NOTIFY_CHANGE_DIR_NAME | FILE_NOTIFY_ CHANGE_L

26、AST_WRITE, out bytesReturned,IntPtr.Zero, IntPtr.Zero)string actions = new string "(未知操作)","添加"," 刪除","修改", "Old name ", "New name " ;IntPtr pCurrent = pBuf;while (pCurrent != IntPtr.Zero)/ Read file length (in bytes) at offset 8int fileLen

27、 = Marshal.ReadInt32(pCurrent, 8);/ Read file name (fileLen/2 characters) from offset 12string file = Marshal.PtrToStringUni(IntPtr)(12 + (int)pCurrent), fileLen / 2);/ Read action at offset 4int action = Marshal.ReadInt32(pCurrent, 4);if (action < 1 | action >= actions.Length) action = 0;if (

28、action != 3)studonecur += actionsaction + file + "rn"/ Read NextEntryOffset at offset 0 and move pointer tonext structure if neededint inc = Marshal.ReadInt32(pCurrent);pCurrent = inc != 0 ? (IntPtr)(inc + (int)pCurrent) : IntPtr.Zero;/elseConsole.WriteLine("ReadDirectoryChangesW fail

29、ed. " + Marshal.GetLastWin32Error();finallyif (pBuf != IntPtr.Zero) Marshal.FreeHGlobal(pBuf);CloseHandle(hDir);以下方法通過線程實現(xiàn),執(zhí)行于Form1_Load()方法中,實現(xiàn)代碼如下所示:Thread threadl = new Thread(myThreadMethod);thread1.Start();4.3 校對評分功能的實現(xiàn)這個功能的實現(xiàn)主要是通過比較字符串數(shù)組string口 sysdone和string口 studone 。從sysdone1到studone10

30、依次同studone1 10比較,相同則加10分。實現(xiàn)代碼如下:private void check() int grade = 0;for (i = 1; i <= 10; i+) if (string.Equals(sysdonei, studonei)grade += 10;MessageBox.Show("本次操作得分:"+ grade.ToString();4.4 時間提醒功能的實現(xiàn)時間提醒,每隔一秒鐘執(zhí)行一次timer1_Tick(),更新窗體上的時間信息,實現(xiàn)代碼如下所示:private void timer1_Tick(object sender, E

31、ventArgs e)if (mint >= 0)scss-;if (scss = 0)mint-;labell.Text = mint.ToString() + "分";scss = 59;label2.Text = scss.ToString() + "秒"; else check(); 在Form1_Load()中初始化Interval時間間隔,設定Tick事件,啟動計時器,實現(xiàn)代碼如下 所示:this.timer1.Interval = 1000;this.timer1.Tick += new System.EventHandler(this.timer1_Tick);this.timer1.Start();五、總結針對高校學生在 Windows平臺核心編程及 Windows上機操作題考試等問題,本文設計了Windows上機操作題考試軟件。主要采用C黜言,利用Visual Studio作為開發(fā)工具,對Windo

溫馨提示

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

評論

0/150

提交評論