黃良斌
(南通紡織職業(yè)技術(shù)學(xué)院 信息系,江蘇 南通 226007)
每年學(xué)生在進(jìn)行畢業(yè)論文答辯時(shí)均要遇到如何確定答辯順序的問(wèn)題。以前學(xué)校的做法,沒(méi)有體現(xiàn)公正、公平、公開(kāi),為了確定答辯順序也浪費(fèi)了大量的精力與時(shí)間。
通過(guò)網(wǎng)絡(luò)軟件就可以解決當(dāng)前抽號(hào)問(wèn)題,做到一人只能自己抽一次號(hào)[1]。在抽號(hào)完成時(shí)計(jì)算機(jī)自動(dòng)記錄抽號(hào)人所抽取的號(hào)碼,并立即回饋給抽號(hào)人自己。學(xué)生也可以提前知道自己的答辯順序號(hào),方便自己的日程安排。
數(shù)據(jù)庫(kù)的設(shè)計(jì)非常重要,一個(gè)良好的數(shù)據(jù)庫(kù)的設(shè)計(jì)可以簡(jiǎn)化程序設(shè)計(jì),加快程序的響應(yīng)時(shí)間,提高安全性能與效率。本例采用SQL Server 2000數(shù)據(jù)庫(kù)。SQL Server 2000是微軟公司發(fā)布的一種性能優(yōu)越的面向客戶機(jī)/服務(wù)器的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)[2]。利用數(shù)據(jù)庫(kù)的字段名可以為數(shù)字的特點(diǎn),把字段名建立成如1、2、3、4……100,假設(shè)其班級(jí)參加抽號(hào)的總?cè)藬?shù)不超過(guò)100,如果總?cè)藬?shù)要增加,可以按此方法增加數(shù)據(jù)庫(kù)字段名,其數(shù)據(jù)庫(kù)結(jié)構(gòu)與程序抽號(hào)保存結(jié)果如表1、表2所示。
表1 數(shù)據(jù)結(jié)構(gòu)表
表2 抽號(hào)結(jié)果匯總表
畢業(yè)答辯順序號(hào)的抽號(hào)程序總體分為學(xué)生用戶與教師用戶兩部分。學(xué)生用戶個(gè)體采用自己的用戶名與密碼登錄,登錄后即可進(jìn)行抽號(hào),在抽號(hào)之前,可以看到全班至目前為此已經(jīng)完成抽號(hào)的情況,每人限抽號(hào)一次,抽號(hào)完成后即在頁(yè)面上顯示抽號(hào)結(jié)果,且不能修改抽號(hào)結(jié)果,以體現(xiàn)公平。其程序總體設(shè)計(jì)流程圖如圖1所示。
圖1 系統(tǒng)流程圖
進(jìn)入抽號(hào)程序的第一步是獲得抽號(hào)的總?cè)藬?shù),學(xué)校的每個(gè)自然班的總?cè)藬?shù)是個(gè)動(dòng)態(tài)的過(guò)程,程序登錄后,即要獲得班級(jí)的總?cè)藬?shù),這也是數(shù)據(jù)庫(kù)字段名的最大值的確定過(guò)程,以便在抽號(hào)時(shí)得到一個(gè)范圍值。
開(kāi)始抽號(hào)之后的第一步是取剩余號(hào),即從數(shù)據(jù)庫(kù)中查看每個(gè)字段內(nèi)是否有姓名,如果沒(méi)有,則該號(hào)未參加過(guò)抽號(hào),可以從字段的名稱來(lái)得到號(hào)碼,把剩余為空的字段名匯總得到一個(gè)數(shù)組[3]。
根據(jù)數(shù)組的最大下標(biāo),開(kāi)始在數(shù)組內(nèi)隨機(jī)抽一個(gè)數(shù)字,把這個(gè)數(shù)作為數(shù)據(jù)庫(kù)的字段名來(lái)查看是否為空,如果為空則寫入;如果不空,則剛剛有人成功參與了抽號(hào),所以這個(gè)號(hào)不能用,必須重新取號(hào)再重新抽號(hào),直至抽號(hào)完成。具體部分程序如下所示:
”定義一個(gè)未知數(shù)組
DimmyArray()
”找出沒(méi)有參與抽號(hào)的總?cè)藬?shù)
S=0”總?cè)藬?shù)變量
for i=3 to studentnumber+2”因字段偏移,故從第3個(gè)字段開(kāi)始讀取,第1~3字段分別為班級(jí)、系部、學(xué)校
if RT.fields(i)=“”or isnull(RT.fields(i))then S=S+1
next
”根據(jù)未抽號(hào)的總?cè)藬?shù),重新定義數(shù)組大小并賦值Redim myArray(S)
i=0”數(shù)組下標(biāo)變量
for j=3 to studentnumber+2”因字段偏移,故從第3個(gè)字段開(kāi)始讀取,第1~3字段分別為班級(jí)、系部、學(xué)校
if RT.fields(j)=“”or isnull(RT.fields(j))then
myArray(i)=RT.fields(j).name”把未抽的號(hào)記入數(shù)組,號(hào)即字段名稱
i=i+1
end if
next
”開(kāi)始進(jìn)入抽號(hào)程序
for i=0 to S-1
Randomize”初始化隨機(jī)數(shù)生成器
”把隨機(jī)數(shù)作為數(shù)組下標(biāo)得到抽的號(hào)碼
numberRT=myArray(int(S*rnd))
if RT(numberRT)= “”or isnull(RT(numberRT))then”判斷是否有人抽了這個(gè)號(hào),如果是空,則寫入
sql= “update tablename set[” &numberRT&“]='” &Session(“NAME”)&“‘where classname='”&classname&“‘a(chǎn)nd partname='”&partname&“‘a(chǎn)nd schoolname='” &schoolname&“'”
con.execute(sql)
exit for
end if
next
依靠數(shù)據(jù)庫(kù)本身的字段名來(lái)實(shí)現(xiàn)抽號(hào)過(guò)程,可以簡(jiǎn)化程序設(shè)計(jì),提高程序的響應(yīng)時(shí)間與效率,在用戶總數(shù)不是太多的情況下,采用此方式有著一定優(yōu)勢(shì)。
[1]王正敏,劉厚泉.抽號(hào)建模的實(shí)現(xiàn)與探討[J].微計(jì)算機(jī)信息,2007,23(33):195-196.
[2]宋陽(yáng),嚴(yán)平,曹彤.基于ASP、SQL Server 2000實(shí)現(xiàn)的Web文獻(xiàn)檢索系統(tǒng)及其查詢優(yōu)化[J].計(jì)算機(jī)應(yīng)用與軟件,2006,23(10):25-28.
[3]張琳,程敏熙.基于ASP的實(shí)驗(yàn)考試抽簽系統(tǒng)[J].中山大學(xué)學(xué)報(bào)論叢,2006,26(1):27-31.