999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

SQL考試隨機組卷改卷系統的設計和實現

2015-04-29 00:00:00龍瓊芳
科技資訊 2015年1期

作者簡介:

龍瓊芳(1982年2月),女,漢族,湖南攸縣人,現任教于廣東省東莞市經濟貿易學校計算機科組,講師,碩士學位,研究方向:軟件工程。

摘要:針對SQL(結構化查詢語言)課程操作考試的組卷和閱卷中的實際問題,對VB訪問SQL Server 2000 數據庫使用的ADO技術進行了闡述,論述采用VB結合SQL Server 2000實現SQL考試隨機組卷改卷系統設計的依據和實現方法,并給出了系統開發過程中所需的一些關鍵技術的程序代碼。

關鍵詞:ADO VB SQL 隨機組卷 自動閱卷

中圖分類號:G712文獻標識碼:A 文章編號:1672-3791(2012)01(a)-0000-00

1 問題的提出

SQL是結構化查詢語言的簡稱,課程目標是要求學生掌握在SQL Server 2000中編寫查詢的能力,在教學過程中每次課每個學生都需要完成大量的練習,由于每一個查詢都是一個獨立的“.sql”文件,因此如果采用人工檢查的方式不但工作量大而且容易出錯。而使用計算機輔助改題不但速度快而且效率高。

此外,為了避免考試的時候相鄰學生互相抄襲、減少考生作弊的情況,用計算機生成試卷也利實行隨機組卷。

2 設計思想、關鍵技術和關鍵問題

SQL課程練習和考試都在SQL Server 2000 下完成,每一個小題都是一個獨立的“.sql”文件。因此改卷的過程就是驗證每一個“.sql”文件在SQL Server 2000環境下執行的結果是否正確的過程。SQL練習和考試的題目都是一個個獨立的查詢要求,例如:請查詢“學生課程”數據庫中姓“何”或“蘇”的教師且學時數大于70的教師名和學時數。因此出卷的過程就是將一組難度分布合理的查詢題目列出來。為了能夠單獨使用組卷和改卷兩個模塊,例如平時練習時題目是固定的只需要使用改卷部分,這兩個模塊并不整合在一起而是獨立開來的。

系統包括試題數據庫、題庫數據庫、改卷程序、組卷程序,其中,試題數據庫是指題目本身進行查詢或修改操作的數據庫,題庫數據庫是存放所有試題的數據庫,改卷程序和組卷程序均由Visual Basic 6.0編寫,標準答案和學生答案均為一組“.sql”文件,生成的試卷可以選擇文本文檔或者word文檔。

2.1 Visual Basic訪問SQL Server數據庫技術

使用Visual Basic作為前端開發語言,與SQL Server接口有幾種常用的方法,即:數據訪問對象/Jet、為ODBC API編程、使用SQL Server的Visual Basic庫(VBSQL)為DB庫的API編程、ADO 數據對象(Active Data Objects)。以上幾種訪問SQL Server的方法各有各的特點。DAOs方法是基于對象的,因而便于使用,但是它是從Visual Basic到SQL Server最慢的連接方式。ODBC API和VBSQL方法從本質上講是基于程序的。ODBC API方法通用性好,允許最強的互操作性,編程簡單,但速度慢于VBSQL方法。VBSQL方法通過VBSQL控件,提供了重要的SQL Server前端應用程序所需的靈活性、強大功能和良好性能。它具有真正的事件驅動及錯誤處理能力,完全支持異步處理、游標和計算列等。這些都是VBSQL方法超出其它方法的優勢,但其編程稍復雜。

2.2 ADO技術

ADO向我們提供了一個熟悉的,高層的對OLE DB的Automation封裝接口。對那些熟悉RDO的程序員來說,你可以把OLE DB比作是ODBC驅動程序。如同RDO對象是ODBC驅動程序接口一樣,ADO對象是OLE DB的接口;如同不同的數據庫系統需要它們自己的ODBC驅動程序一樣,不同的數據源要求它們自己的OLE DB提供者(OLE DB provider)。

ADO向VB程序員提供了很多好處。包括易于使用,熟悉的界面,高速度以及較低的內存占用。同傳統的數據對象層次(DAO和RDO)不同,ADO可以獨立創建。因此你可以只創建一個”Connection”對象,但是可以有多個、獨立的”Recordset”對象來使用它。

2.3 改卷的依據

檢驗學生答案是否正確有兩種方法:

②判定過程

判定過程即分析學生的“.sql”文件是否正確。例如:請查詢“學生課程”數據庫中姓“何”或“蘇”的教師且學時數大于70的教師名和學時數。

標準的答案應該為:

use 學生課程

select 教師名,學時數

from 授課表

where (教師名 like ‘何%’or 教師名 like ‘蘇%’)and(學時數>70)

go

如果學生的答案與標準答案一致則判定該題得分。方法是讀取學生的“.sql”文件和標準答案的“.sql”文件,進行比對。這種方法的優點在于實現簡單,執行的效率高,改題速度快,但是也有一些缺點。

A.比對的過程中有些字符甚至語句是結果無關的。例如這里的“use 學生課程”,在實際做題時本條語句若缺不影響查詢。因此對比前應先把學生答案和標準答案中這些結果無關的語句刪除。再如學生若在“from”和“授課表”中間插入了若干空格,由于這些空格不影響語句的執行,因此對比前應也先把學生答案和標準答案中這些空格刪除。但是如果學生答案是“fr om”,在“fr”和“om”中間插入了若干空格則應視為錯誤答案,因為這在查詢中將影響查詢的結果。因此像這樣位置不同時有可能結果無關也可能結果相關的字符在實際處理起來比較困難。這種情況一般是學生的誤操作導致,學生只要在做題之后執行查詢檢查一下就能發現,因此這種情況發生的概率非常小,不過仍有可能。

B.有些查詢可能有多種方法實現,例如上面的查詢也可以編寫查詢如下

use 學生課程

select 教師名,學時數

from 授課表

where (教師名 like ‘何%’ and 學時數>70)or (教師名 like ‘蘇%’ and 學時數>70)

go

加下劃線的部分有了較大的改變,但實際與where (教師名 like ‘何%’or 教師名 like ‘蘇%’)and(學時數>70)是一樣的。這樣有多種方法實現的查詢在練習和考試中非常多。

因此,使用判定過程的方法有可能導致判斷錯誤。原因A導致原本錯誤的答案判為正確,而原因B導致原本正確的答案判為錯誤。

② 判定結果

判定結果與判定過程正好相反,不關心學生是如何編寫“.sql”文件的,而是執行“.sql”文件然后判斷結果是否與標準答案的執行結果相同。

這種方法可以避免上述的原因A和原因B所導致的錯誤判斷,是比較理想的判斷方法。只要仔細的設置試題數據庫中的記錄和數據就能使得不同的查詢具有不同的結果記錄集合,因而可以避免不同的查詢結果相同,也就不會出現錯判的現象。

但是這種方法也有缺點,由于要對比學生答案的執行結果和標準答案的執行結果,就必須至少訪問試題數據庫兩次,這樣改卷的速度必然會慢很多。

綜合分析以上兩種判定方法的優缺點,可以設定先用判定過程比對兩個答案,若比對結果不相同再進行結果判定。這樣既兼顧了改卷的速度又可較大限度的避免錯判。

2.4 試題的設置

根據考試和改卷的需要,試題的設置需要遵循以下原則:

2.4.1 難易結合,涵蓋所有知識點

對試題根據考查的知識點和難易程度進行分類,隨機抽題時依據這種分類進行組卷,使得得到的試卷能夠覆蓋大部分知識點并可以兼顧難易不同程度的比例。這樣可以避免不同學生抽取的試卷難度不一、考查知識點較偏等問題,使得生成的試卷真正反映學生的實際掌握情況。

2.4.2 試題之間沒有交叉干擾

前面的試題不能影響后續試題的完成結果。例如,如果有試題要更新學號為“200009001”的學生記錄,則之前不能有刪除查詢刪除該記錄,也不能有更新查詢修改該學生的學號。

因此正確安排題目的順序非常重要,也可以在題庫數據庫中設置一字段使得某些題目不能同時被抽中。

因此在隨機抽題組成的一份試卷中,選擇查詢的試題要在前,動作查詢的試題應放在選擇查詢后,且所有的動作查詢試題所操作的記錄均不能相同。

2.4.3 所有查詢結果集合要包括特征記錄和邊緣記錄

采用判定結果方法驗證答案的時候,如果試題數據庫中的記錄數量不夠、或者沒有特征記錄、或者沒有邊緣記錄、或者這些記錄不完整,都會導致判斷錯誤。

查詢得到的是一個記錄集合,在這個記錄集合中,有些記錄位于集合中間被稱為特征記錄,有些位于集合邊緣被稱為邊緣記錄。特征記錄反映了這個查詢的一般性,而邊緣記錄反映了這個查詢的特殊性。

例如:1、查找成績小于等于80的學生記錄。在結果集合中成績為70的記錄就是一個特征記錄;而成績為80的就是這個查詢的邊緣記錄。

再如:2、查找成績大于60的學生記錄。在結果集合中成績為70的記錄就是一個特征記錄;而成績為60的記錄雖然不在結果集合中,但位于集合的邊緣,它也是一個邊緣記錄。

在以上兩個例子中:如果例1的試題數據庫中沒有成績為80的記錄,則如果學生的實際查詢為“查找成績小于80的學生記錄”所得到的結果集合將與預期的結果集合相同。如果例2的試題數據庫中沒有成績為60的記錄,一旦學生的實際查詢為“查找成績大于等于60的學生記錄” 所得到的結果集合也會與預期的結果集合相同。這樣就會產生誤判。

因此,在設計試題數據庫的時候,一定要分析試題本身,找出所有的邊緣特征記錄和一定數量的特征記錄。試題數據庫必須涵蓋這些記錄,采用結果判定才不會出現錯判的情況。

3 隨機組卷程序的設計和實現

組卷程序重點包括連接題庫數據庫,抽取試題,最后斷開題庫數據庫等操作。

3.1 連接題庫數據庫的代碼

(其中Text1.Text為題庫數據庫所在服務器名或IP)

‘創建對象

Dim objcn As Connection

Dim objcom As Command

Dim objrs As Recordset

‘實例化對象

Set objcn = New Connection

Set objcom = New Command

Set objrs = New Recordset

‘創建數據庫連接

objcn.Provider = “SQLOLEDB”

objcn.ConnectionString = “User ID=sa;PWD=;Data Source=” + Text1.Text + “;Initial Catalog=SQL期末考試試題”

RichTextBox1.Text = “SQL期末考試試題” vbCrLf

3.2 斷開題庫數據庫的代碼

‘斷開連接

objcn.Close

‘釋放連接

Set objcn = Nothing

3.3抽取試題的代碼如下:(以生成第一大題的代碼為例)

‘生成第一大題

For i = 1 To 12

Label1: Randomize ‘ 對隨機數生成器做初始化的動作。

MyValue = Int((102 * Rnd) + 1001) ‘ 生成 1001 到 1102 之間的隨機數值。

For j = 1 To i – 1

If one(j) = MyValue Then

GoTo Label1:

End If

Next j

one(i) = MyValue

Next i

4 改卷程序的設計和實現

改卷程序依次讀取學生的.sql文件,全部讀取并改卷后退出。

4.1 讀取學生文件和初始化學生文件代碼如下:

‘讀取學生文件

Open Dir1.Path “\” title For Input As #1

Do While Not EOF(1)

Line Input #1, s_add

‘將大寫字母轉換為小寫字母

s_add = LCase(s_add)

‘去除go

s_add = Replace(s_add, “go”, “”)

s_stu_show = s_stu_show + s_add + Chr(13) + Chr(10)

‘去除空格

s_add = Replace(s_add, “ “, “”)

‘去除引號

s_add = Replace(s_add, “’”, “”)

‘去除回車

‘s_add = Replace(s_add, “’”, “”)

If pos = InStr(1, s_add, “/*”) < 0 Then

‘獲取文檔內容

s_stu = s_stu + s_add

End If

Loop

Close #1

4.2 判斷結果集合是否相同代碼如下:

'分別執行兩個語句,判斷結果是否相同

temp = \"Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=\" + temp + \";Data Source=\" + Text4.Text

Adodc1.ConnectionString = temp

Adodc2.ConnectionString = temp

Adodc1.Enabled = True

Adodc1.Enabled = True

Adodc1.RecordSource = s_stu_show

Adodc2.RecordSource = s_ansr_show

Adodc1.Refresh

On Error GoTo tag2:

Adodc2.Refresh

5 總結和展望

在期中考試和期末考試以及部分平時練習中使用了這個組卷改卷系統,運行良好,無故障,改卷的效率也有很大的提高,基本達到了最初的目的。但由于時間倉促,本系統有很多有待改進的地方,主要總結如下:

1、系統的安全性較差。在程序中實現了拒絕學生重復抽題的代碼,這在一定程度上避免了學生人為選題的操作,有一定的安全考慮。并且考試的時候題庫數據庫位于教師機上,抽題領卷在學生機器上,但是由于數據庫所在的一端并沒有編寫服務器代碼,學生通過領卷程序直接訪問教師機上的題庫數據庫,造成了數據的安全性較差。若將題庫數據庫、領卷程序、服務程序分置三臺機器上則可大大提高安全性能。同時也可避免一部分較聰明的學生直接訪問題庫數據庫的可能。

2、系統的應用范圍較窄。本系統是針對SQL一門課程設計和編寫的,因此講授完本門課程后該系統很難修改應用到其它課程的組卷和改卷中來。且一旦試題改動了,試題數據庫也要隨之改動(原因見二.4.③),使得擴充試題比較難。如果能夠找到一種方法自動尋找邊緣記錄,則擴充試題后可自動調整試題數據庫,則應用的范圍將大大擴展。

參考文獻

[1] 宋琦凡,付敬平.《使用Visual Basic開發數據庫應用軟件》.北京:電子工業出版社

[2] Evangelos Petroutsos. 《Visual Basic從入門到精通》.北京:電子工業出版社

[3] 孟小峰.《開放數據庫互連—ODBC 2.0使用大全》.北京:清華大學出版社

[4] 廖衛東,趙軍.《Visual Basic編程手冊》.北京:機械工業出版社

[5] 《電腦編程技巧與維護》

主站蜘蛛池模板: 亚洲a免费| 尤物成AV人片在线观看| 人妻少妇久久久久久97人妻| 中文字幕人妻无码系列第三区| 青青草原国产一区二区| 毛片视频网址| 国产成人亚洲欧美激情| 精品91视频| 狠狠色综合久久狠狠色综合| 国产一级小视频| 国产成人毛片| 欧美另类一区| 午夜毛片免费看| 亚洲精品国产成人7777| 久久综合丝袜日本网| 国产xxxxx免费视频| www.亚洲天堂| 激情午夜婷婷| 欧美在线三级| 国产69精品久久久久孕妇大杂乱| 日本在线欧美在线| 日韩成人在线网站| 日韩免费无码人妻系列| 亚洲视频在线网| 久久综合亚洲鲁鲁九月天| 99久久精品国产精品亚洲| 国产乱码精品一区二区三区中文| 午夜一级做a爰片久久毛片| 免费人成在线观看视频色| 99视频在线观看免费| 黄色成年视频| 婷婷色丁香综合激情| 91久久天天躁狠狠躁夜夜| 日韩欧美国产成人| 污视频日本| 毛片免费高清免费| 久久窝窝国产精品午夜看片| 99青青青精品视频在线| 日本福利视频网站| 四虎影视8848永久精品| 88av在线看| 国产精品区网红主播在线观看| 黄色国产在线| 亚洲黄色激情网站| 又粗又硬又大又爽免费视频播放| 999精品视频在线| 国产精品无码久久久久AV| 日本道中文字幕久久一区| 国产成人精品无码一区二| 精品久久高清| 欧美日韩精品一区二区在线线| 亚洲人成人伊人成综合网无码| 亚洲精品无码抽插日韩| 国产一区亚洲一区| 久久久久久尹人网香蕉| 91福利片| 99国产精品一区二区| 欧美国产日韩另类| 97国产在线观看| 国产一级二级在线观看| 国产精品无码在线看| 午夜视频免费试看| 午夜日韩久久影院| 欧美性猛交一区二区三区| 91偷拍一区| 亚洲天堂免费观看| 中文字幕无线码一区| 国产a v无码专区亚洲av| 婷婷色丁香综合激情| 欧美亚洲国产视频| 国产内射一区亚洲| 久996视频精品免费观看| 人妻中文字幕无码久久一区| 人人看人人鲁狠狠高清| 国产精品毛片一区| 亚洲色图欧美| 91蝌蚪视频在线观看| 久久久91人妻无码精品蜜桃HD| 91久久国产综合精品女同我| www.youjizz.com久久| 在线欧美日韩| 亚洲福利视频一区二区|