【正文】
用戶類型 varchar(6) 否 表 315 答案表 列名 字段說明 數(shù)據(jù)類型 主鍵 允許空 S_number 學(xué)號 varchar(10) 是 A 選擇題答案 varchar(100) 否 √ B 判斷題答案 varchar(100) 否 √ C 程序題答案 varchar(100) 否 √ 表 316 程序題答案表 列名 字段名稱 數(shù)據(jù)類型 主鍵 允許空 Id 答案編號 varchar(20) 是 S_number 學(xué)號 varchar(10) 否 Answer 試題答案 varchar(1000) 否 √ Score 試題得分 Decimal(4,1) 否 √ Remarks 評語 varchar(1000) 否 √ 表 317 座次表 列名 字段說明 數(shù)據(jù)類型 主鍵 允許空 ZuociId 座次號 Int 是 S_name 考生姓 名 varchar(10) 否 Kname 考場名稱 varchar(50) 否 status 狀態(tài) varchar(10) 否 √ remaintime 剩余考試時間 varchar(4) 否 √ ( 3) 通過優(yōu)化方法將其轉(zhuǎn)化為優(yōu)化的數(shù)據(jù)模型 邏輯模型設(shè)計的結(jié)果并不是惟一的。為了進一步提高數(shù)據(jù)庫應(yīng)用的性能,還應(yīng)該根據(jù)應(yīng)用的需要對邏輯數(shù)據(jù)模型進行適當(dāng)?shù)男薷暮驼{(diào)整,這就是數(shù)據(jù)模型的優(yōu)化。關(guān)系數(shù)據(jù)模型的優(yōu)化通常以規(guī)范化理論為指導(dǎo),并考慮系統(tǒng)的性能 。 物理 結(jié)構(gòu) 設(shè)計 對于關(guān)系 數(shù)據(jù)庫系統(tǒng),數(shù)據(jù)的存儲結(jié)構(gòu)與存取方法是由 DBMS 決定并自動實現(xiàn)的,要做的就是:必須考慮在網(wǎng)絡(luò)環(huán)境下數(shù)據(jù)庫的分布及索引結(jié)構(gòu)(選擇操作效率較高的索引方式)。如:數(shù)據(jù)的訪問權(quán)限,數(shù)據(jù)的共享性,總體設(shè)計 20 安全性等。系統(tǒng)類圖如圖 34 所示。 學(xué) 號 : c h a r 姓 名 : c h a r 班 級 名 : c h a r 專 業(yè) : c h a r 院 系 : c h a r考 生 考 場 名 稱 : c h a r 地 址 : c h a r 容 量 : i n t考 場 院 系 : c h a r部 門 系 名 稱 : c h a r 專 業(yè) : c h a r專 業(yè) 班 級 名 : c h a r 專 業(yè) : c h a r班 級 學(xué) 號 : c h a r 選 擇 題 成 績 : d e c i m a l 判 斷 題 成 績 : d e c i m a l 程 序 題 成 績 : d e c i m a l 總 成 績 : d e c i m a l成 績 表 學(xué) 號 : c h a r 選 擇 題 : c h a r 判 斷 題 : c h a r 程 序 題 : c h a r答 案 試 卷 編 號 : c h a r 選 擇 題 : c h a r 判 斷 題 : c h a r 程 序 題 : c h a r 模 板 編 號 : c h a r試 題 學(xué) 號 : c h a r 座 次 號 : c h a r 登 錄 狀 態(tài) : c h a r 考 場 名 稱 : c h a r 剩 余 時 間 : c h a r座 次 試 卷 編 號 : c h a r 學(xué) 號 : c h a r試 卷 試 題 類 型 : c h a r 試 題 數(shù) 目 : i n t 分 值 : d e c i m a l 模 板 編 號 : c h a r試 題 模 板 擁 有* 屬 于* 屬 于* 擁 有* 擁 有* 屬 于* 屬 于* 擁 有* 擁 有* 屬 于* 擁 有* 屬 于* 擁 有* 屬 于* 擁 有* 屬 于* 擁 有* 屬 于*圖 34 考試系統(tǒng)類圖 1 21 Made by SQH ……………………………裝……………………………………訂…………………………………線…………………………… 4 詳細設(shè)計與實現(xiàn) 功能模塊設(shè)計和實現(xiàn) 登錄模塊 在完成系統(tǒng)時,可預(yù)先將用戶名,口令和用戶類型存放在數(shù)據(jù)庫的用戶信息表中,用戶登錄時必須輸入用戶名, 口令 和用戶類型(考生登錄則需輸入考號 和姓名),此時系統(tǒng)將 執(zhí)行一次數(shù)據(jù)庫的查詢,驗證用戶身份 是否正確 。為了 保證 考試系統(tǒng)的安全,確保系統(tǒng)用戶的個人信息,防止非法用戶登錄,系統(tǒng)在登錄界面設(shè)置了用戶登錄密碼機制。本系統(tǒng)的登錄機制分兩部分: 服務(wù)器端 登錄模塊和 考生 登錄模塊 (即客戶端登錄模塊) 。用戶登錄模塊的工作流程圖如圖 41 所示。 開 始考 生 登 錄 界 面輸 入 考 號 、 姓 名是 否 正 確進 入 考 試 界 面結(jié) 束是 否 開 始用 戶 登 錄 界 面輸 入 用 戶 名 、 密碼 、 用 戶 類 型是 否 正 確 進 入 管 理 界 面結(jié) 束是 否 圖 41 用戶登錄 流程圖 服務(wù)器端 登錄 界面如圖 42 所示。 詳細設(shè)計與分析 22 圖 42 用戶登錄界面 考生 登錄 界面如圖 43 所示。 圖 43 考生 登錄界面 試題信息模塊 對于在線考試系統(tǒng),試題庫的合理與否成為該系統(tǒng)成功與否的基礎(chǔ) 。對于計算機類考試 , 命題具有相當(dāng)大的難度。命題技術(shù)是建立試題庫的關(guān)鍵 , 對于客觀題如選擇 題 、判斷 題 比較容易 , 但對于程序設(shè)計題型具有一定的難度。解決方案是首先確定命題與評分技術(shù)的關(guān)系 ,使得所有客觀題必須能機器評分。在建立試題庫時,應(yīng)考慮到試題 難度 、組卷 評估的正確與合理性 ,保證試題的難易程度符合考生的能力,然后 需要通過組卷模塊1 23 Made by SQH ……………………………裝……………………………………訂…………………………………線…………………………… 將試題分發(fā)給考生 , 所以題庫的題目數(shù)量必須保證在難度的劃分后 , 仍然能夠 滿足組卷的需求。 該系統(tǒng)的試題信息模塊分為選擇題、判斷題、程序設(shè)計題三個界面,可以對三種類型的題分別進行添加、刪除、修改。在管理員錄入試題時,要選擇試題難度(簡單,一般,難)。 對已錄入的試題 可以進行 查詢統(tǒng)計 ,根據(jù)給定的條件 ( 如 試題類型、 難度系數(shù)、試題內(nèi)容 ) 檢索出試題 ; 并 為了方便錄入現(xiàn)有的試題文檔,系統(tǒng)具有將 excel 中的試題導(dǎo)入數(shù)據(jù)庫的功能 。系統(tǒng)還可以將數(shù)據(jù)庫中的試題按照常用的試題格式,導(dǎo)出到 word 中,便于進行非上機考試使用。讀取 excel 文件的函數(shù)如下: public DataSet ExcelToDS(string Path) { string strConn = Provider=。 + Data Source= + Path + 。 + Extended Properties=Excel 。 //打開數(shù)據(jù)鏈接,得到一個數(shù)據(jù)集 OleDbConnection conn = new OleDbConnection(strConn)。 if ( == ) ()。 string strExcel = 。 OleDbDataAdapter myCommand = null。 //創(chuàng)建一個 DataSet 對象 DataSet ds = null。 strExcel = select * from [sheet1$]。 myCommand = new OleDbDataAdapter(strExcel, strConn)。 ds = new DataSet()。 (ds, table1)。 if ( == ) 詳細設(shè)計與分析 24 ()。 return ds。 } 試題信息界面如圖 44 所示。 圖 44 試題信息 界面 考生信息模塊 學(xué)生信息主要包括有學(xué)生所在學(xué)院、專業(yè)、班級、學(xué)號、姓名。考生信息模塊完成對學(xué)生信息的添加、修改、刪除、 查詢 等功能。可以通過 查詢 功能查詢學(xué)生信息,也可以按照院系、專業(yè)、班級查看學(xué)生信息。 模塊中的學(xué)生信息都是通過一個 datagridview 顯示給用戶的,用戶可以通過鼠標單擊表格中的 一行來 顯示 該行的 詳細信息。 系統(tǒng)中提供了將 datagridview 中的信息導(dǎo)出的 excel,和從 excel 導(dǎo)入到datagridview 的功能。用戶可 以選擇性的導(dǎo)入、導(dǎo)出學(xué)生信息。系統(tǒng)也提供1 25 Made by SQH ……………………………裝……………………………………訂…………………………………線…………………………… 了學(xué)生信息的 excel 模板。 導(dǎo)出到 excel 的主要函數(shù)如下: //利用二維數(shù)組批量寫入 string[,] arr = new string[rowCount, 5]。 //存放學(xué)生基本信息 Double[,] arr1 = new Double[rowCount, 4]。 //存放學(xué)生成績 for (int j = 0。 j rowCount。 j++) { for (int k = 0。 k 5。 k++) { arr[j, k] = gridView. Rows[j]. Cells[k]. Value. ToString(). Trim()。 } for (int i = 5。 i colCount。 i++) { arr1[j, i 5] = ([j]. Cells[i]. ())。 } } //添加學(xué)生基本信息 range = ()[2, 1]。 range = (rowCount, 5)。 = arr。 //添加學(xué)生成績 range = ()[2, 6]。 range = (rowCount, 4)。 = arr1。 詳細設(shè)計與分析 26 考生信息界面如圖 45 所示。 圖 45 考生信息 界面 試題模板模塊 為了方便應(yīng)用,該模塊可以添加多個試題模板,每個模板有一個模板編號。模板主要涉及到每份試卷中選擇題、判斷題、程序設(shè)計題三種題型的試題數(shù)量,每題分值。試題數(shù)量和每題分值可以通過下拉框選擇,可以用戶自己輸入。對已存在的模板可以進行修改、刪除。并可以安照模板編號搜索模板信息。系統(tǒng)采用了錯誤處理機制,在添加數(shù)據(jù)之前對題數(shù)、分值進行判斷,題數(shù)只能輸入正整數(shù),分值只能輸入數(shù)字,否則提示錯誤。模板編號是由程序生成的,每次從數(shù)據(jù)庫中 選取存在的最大編號,取字符串的前 1 到 7 位并加 1,然后結(jié)合編號字符,得到當(dāng)前編號。 判斷是否為正整數(shù)的正則表達式: ^[+]?\d+$; 判斷是只否為數(shù)字的正則表達式: ^\d+$。 自動編號算法如下: // P_str_sqlstr SQL語句 。P_str_table 數(shù)據(jù)表名 。P_str_tbColumn 數(shù)據(jù)表字段 。P_str_codeIndex 編號前的字符串 。P_str_codeNu