徐庭松
摘 要 本文描述了基于抽獎系統(tǒng)的設計與實現(xiàn),通過前期的需求分析、系統(tǒng)流程設計、系統(tǒng)功能設計,軟件選擇PB(powerbuilder 9.0)作為系統(tǒng)開發(fā)工具,使用ACCESS作為數(shù)據(jù)庫開發(fā)此系統(tǒng),由于抽獎系統(tǒng)是一個獨立的軟件,所以采用單機版的數(shù)據(jù)庫,安裝簡便,界面友好,容易移植,目前使用效果好。
【關鍵詞】PB ACCESS 抽獎 隨機記錄數(shù)
1 引言
我院為了豐富職工文化生活,每年春節(jié)臨近時都舉行晚會,在晚會過程中為了活躍氣氛,有多次抽獎機會,分別抽出一等獎,二等獎,三等獎近400多名,往年都是把全院近700多人名單打印出來,折疊放在暗箱,由院領導分批次抽取,一個一個讀出,占用時間長,而且職工懷疑有不透明的暗箱操作的嫌疑,今年根據(jù)醫(yī)院工會要求,由我院信息科著手開發(fā)抽獎系統(tǒng),這個任務由我全權負責開發(fā),利用了2天時間完成任務,現(xiàn)將經(jīng)驗分享各位。
2 設計目標
本系統(tǒng)能夠根據(jù)選擇獎項不同,在數(shù)據(jù)庫中隨機抽取10個人數(shù),展示在屏幕上,由操作員點開始與停止,抽出10名幸運觀眾。被抽取的幸運觀眾將在待抽取的數(shù)據(jù)庫中打上標識,在下次抽取中不再被選,以保證幸運觀眾不重復,同時保證待抽取的觀眾被抽取的機率相等。
3 數(shù)據(jù)庫表結構
由于本系統(tǒng)操作簡單,數(shù)據(jù)庫僅有2張表,一張Person_table全體職工表,一張Person_selected,獲獎員工表,表結構分別如下:
3.1 Person_table表字段
Person_id 員工ID,Person_name 員工姓名,Person_Sex 員工性別,Cecked 中獎標志(0,為未中,1為中獎)
3.2 Person_selected表字段
Person_id 員工ID,Person_name 員工姓名,Person_Sex 員工性別,Jiang_X 獎項
4 程序設計
4.1 編程思想
PowerBuilder美國Sybase公司研制的一種新型、快速開發(fā)工具,是客戶機/服務器結構下,基于Windows3.x、Windows95和WindowsNT的一個集成化開發(fā)工具。它包含一個直觀的圖形界面和可擴展的面向?qū)ο蟮木幊陶Z言PowerScript,提供與當前流行的大型數(shù)據(jù)庫的接口,并通過ODBC與單機數(shù)據(jù)庫相連。
4.2 系統(tǒng)的實現(xiàn)
4.2.1 員工基本信息的建立
由于是單機版,采用微軟的ACCESS數(shù)據(jù)庫,對于一個近千人的單位,足夠使用,剛開始我采用的是SQL2000數(shù)據(jù)庫。在開發(fā)過程中感覺非常不便,單機還要安裝SQL數(shù)據(jù)庫,待抽獎人員還要開發(fā)錄入,修改,刪除的功能,時間緊,來不及,最重要是操作非常煩瑣,后決定采用易操作的ACCESS數(shù)據(jù)庫。
首先建立待抽獎數(shù)據(jù)庫,表結構如圖1。
表結構建立后,將EXCEL里將待抽取的人員按數(shù)據(jù)庫的結構復制至數(shù)據(jù)庫表中,注意表中Checked 設置為0,待抽取狀態(tài),如圖2。
建立空表結構Person_selected,用于插入中獎員工記錄,保存便于導出,表結構如圖3。
中獎后記錄如圖4。
4.2.2 隨機記錄的產(chǎn)生
經(jīng)查詢資料,在網(wǎng)上搜索到:四種數(shù)據(jù)庫隨機獲取10條數(shù)據(jù)的方法
SQL Server:
SELECT TOP 10 * FROM T_USER ORDER BY NEWID()
ORACLE:
SELECT * FROM (SELECT * FROM T_USER ORDER BY DBMS_RANDOM.RANDOM()) WHERE RONUM <= 10
MySQL:
SELECT * FROM T_USER ORDER BY RAND() LIMIT 10
Access:
SELECT TOP 10 * FROM T_USER ORDER BY rnd([一個自動編號字段])
4.2.3 代碼實現(xiàn)
窗口主要控件:
a、下拉列表框控件ddlb_1,顯示待選擇的獎項:如:一等獎,二等獎等;
b、靜態(tài)文本框statictext控件,存放待抽取人數(shù),各類獎項中獎人數(shù)及按秒滾動的人員姓名框,如圖5。
c、在主窗口的timer事件中加入隨機抽取記錄腳本,定義游標等,因為一屏只顯示10位員工,所以只隨機抽取10條記錄:
DECLARE C1 CURSOR FOR
select top 10 person_id,person_name from Person_table where checked='0' order by rnd(person_id);
OPEN C1;
FOR LI_ROW=1 TO 10
FETCH C1 INTO :p_id[li_row],:name[li_row];
NEXT
CLOSE C1;
st_1.text= name[1]
st_2.text= name[2]
st_3.text= name[3]
st_4.text= name[4]
st_5.text= name[5]
st_6.text= name[6]
st_7.text= name[7]
st_8.text= name[8]
st_9.text= name[9]
st_10.text= name[10]
d、開始,停止命令控件,實現(xiàn)timer(0.01)不停滾動,點擊停止,展現(xiàn)中獎人員姓名,同時保存到中獎人員表中,供舉辦單位導出,打印,部分重要代碼如下:
if this.text ='開始' then
this.text ='停止'
timer(0.01)
else
this.text ='開始'
timer(0) --停止?jié)L動
if sqlca.sqlcode <> 0 then
ErrMessage('數(shù)據(jù)庫出現(xiàn)問題!')
return 1
end if
if checked = 1 then
infomessage("此號碼已經(jīng)抽到過并且已經(jīng)做了保存!" )
return
end if
--保存中獎員工記錄:
insert into lottery_selected (person_id,person_name,checked,Jiang_X,registerdate)
values(:p_id[ll_row],:name[ll_row],'1',:ls_jx,:ldt_now);
運行主界面如圖6。
當點停止時,10個員工名單自動保存至中獎表中,再點開始,將進行下一輪的抽取工作。
點中獎按鈕,并有導出功能,如圖7。
5 結束語
本系統(tǒng)經(jīng)過測試,完全在各32位的系統(tǒng)運行,院領導非常滿意,社會效果好。
參考文獻
[1]魏莉.數(shù)據(jù)庫驅(qū)動的標準化制圖技術研究[D].中國地質(zhì)大學(北京),2015.
[2]溫瑩.稅銀聯(lián)網(wǎng)地稅端子系統(tǒng)的設計與實現(xiàn)[D].中國石油大學,2008.
[3]韓亮.綜合統(tǒng)計信息智能管理系統(tǒng)的設計與開發(fā)[D].大連理工大學,2006.
作者單位
1.淮安市康復醫(yī)院 江蘇省淮安市 211600
2.金湖縣人民醫(yī)院 江蘇省淮安市 211600