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