天天看點

一個cs架構的線上考試系統

---------------------------------------------------------------------------------------------------------

注意:在這個例子裡我采用了拼SQL語句的方法,是以是不安全的,無法抵禦SQL注入式攻擊。!有時間再改進吧。

                       ——hoodlum1980           2008年10月7日12:32:14

最近很多人讨論資料庫和面向對象,使我想起這個我在暑假裡幫别人做的線上考試系統,由于需求中提到要提醒考生時間快到了,而我考慮bs不好控制(并且不熟),是以采用了是cs架構。資料庫拟采用的是sqlserver,但考慮到為了示範時部署友善,我也添加了使用access資料庫的接口(僅用于示範)。

其他需求還有随機抽取題目組成一張試卷。題目的重要屬性有題幹,選項,答案,難度,相關章節等。考試的屬性有難度,時間等。系統角色有學生,教師,管理者。

試卷的屬性有所有題目ID字元串,正确答案字元串,使用者答案字元串,所得分數等。

我希望用最快速度把它寫出來,基本功能我寫了4天以後可以在我本機上示範了。由于很多屬于資料庫操作,是以寫起來很煩瑣。。。

核心的邏輯主要是随機抽取試題,這裡我使用了在程式用random函數。當然在sql語句裡面也可以用newid()生成一個随機順序。需求中要求題目涉及面均衡,我使用把所有題目按照相關章節的順序排列,然後在裡面随機抽取來實作。是以試卷的章節分布和題庫的章節比例相一緻。但這樣可能并不一定是真正的需求,另外一種選擇是盡可能使不同章節的題目數量相同。

時間提醒,由于考試時處于緊張狀态,顯然不希望受到幹擾,是以為了不妨礙考生答題,但又能醒目的提供提醒,我引入了一個模仿msn提醒的浮出視窗(它是來源于codeproject.com上的源碼)。

程式截圖:

一個cs架構的線上考試系統

教師的登入後界面:

一個cs架構的線上考試系統

在系統中使用了一些UserControl頁面,例如題目頁面,每次裝載不同題目。使用者選擇的答案是一個字元,如果使用者已經選擇答案,則是ABCD中的一個,如果為選,則設為‘X’,表示還沒做答。(這裡都是單選題目,尚未設定多選題目的界面。)在使用者交卷時,系統檢查是否有未答題目,如果有,則提醒考生。

所有角色的測試帳号:123456 密碼:123456

教師可以增加學生,管理者可以增加教師。

最後是源代碼(code of vs03 & vs05)下載下傳的連結:

<a href="http://files.cnblogs.com/hoodlum1980/ExamSys.rar">http://files.cnblogs.com/hoodlum1980/ExamSys.rar</a>