孫雪
摘要: 在一些大型活動(dòng)中,為了吸引參與者,通常會(huì)有抽獎(jiǎng)環(huán)節(jié)。隨著計(jì)算機(jī)的普及,電視、網(wǎng)絡(luò)等媒體的廣泛傳播,“電腦抽獎(jiǎng)”的方式越來(lái)越多地出現(xiàn),而“電腦抽獎(jiǎng)軟件”也有著很好的使用價(jià)值。該文通過(guò)分析這種軟件的實(shí)現(xiàn)原理,利用SQL Server 2000和VB設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)電腦抽獎(jiǎng)軟件,為讀者提供了設(shè)計(jì)和實(shí)現(xiàn)這種軟件的思路。
關(guān)鍵詞:SQL Server 2000;電腦抽獎(jiǎng);VB
中圖分類(lèi)號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2016)25-0003-02
1引言
在一些大型活動(dòng)中,為了吸引參與者,通常會(huì)有抽獎(jiǎng)環(huán)節(jié)。傳統(tǒng)的抽獎(jiǎng)方式是將能唯一標(biāo)識(shí)參與者的號(hào)碼,比如身份證號(hào)、參會(huì)的順序號(hào)等,打亂順序地放入一個(gè)抽獎(jiǎng)箱中。在活動(dòng)的抽獎(jiǎng)環(huán)節(jié)中,由組織者監(jiān)督,抽獎(jiǎng)嘉賓隨機(jī)地在抽獎(jiǎng)箱中抽出一個(gè)或幾個(gè)號(hào)碼,那么這些號(hào)碼對(duì)應(yīng)的參與者就是獲獎(jiǎng)?wù)?。如今,隨著計(jì)算機(jī)的普及,電視、互聯(lián)網(wǎng)等媒體的廣泛傳播,越來(lái)越多地出現(xiàn)了電腦抽獎(jiǎng)的方式。特別是在一些大型的電視活動(dòng)中,通常會(huì)通過(guò)抽出參與觀眾的身份證號(hào)或電話(huà)號(hào)碼來(lái)產(chǎn)生幸運(yùn)觀眾。電腦抽獎(jiǎng)的方式想必讀者都見(jiàn)到過(guò),并且有許多人也參與過(guò)類(lèi)似的活動(dòng)。那么,像這種電腦抽獎(jiǎng)的軟件是如何設(shè)計(jì)和實(shí)現(xiàn)的呢?本文筆者通過(guò)自己設(shè)計(jì)的電腦抽獎(jiǎng)軟件,來(lái)為大家提供一個(gè)設(shè)計(jì)和實(shí)現(xiàn)這種軟件的思路。
2電腦抽獎(jiǎng)軟件的總體設(shè)計(jì)
電腦抽獎(jiǎng)的過(guò)程就是把傳統(tǒng)的抽獎(jiǎng)過(guò)程用計(jì)算機(jī)實(shí)現(xiàn)了。傳統(tǒng)的抽獎(jiǎng)是把參與者的信息放進(jìn)抽獎(jiǎng)箱,而電腦抽獎(jiǎng)則是要把其數(shù)據(jù)放到數(shù)據(jù)庫(kù)中;在傳統(tǒng)的抽獎(jiǎng)中由抽獎(jiǎng)嘉賓在抽獎(jiǎng)箱中隨機(jī)地抽出獲獎(jiǎng)?wù)撸陔娔X抽獎(jiǎng)中則是由抽獎(jiǎng)嘉賓通過(guò)按鍵或點(diǎn)擊按鈕進(jìn)行“開(kāi)始”和“暫?!?,隨機(jī)地從數(shù)據(jù)庫(kù)中提取幸運(yùn)者的。
由此可見(jiàn),設(shè)計(jì)電腦抽獎(jiǎng)軟件的總體思路是:
(1)首先組織者通過(guò)信息的錄入界面,向數(shù)據(jù)庫(kù)中錄入?yún)⑴c者的信息。
(2)當(dāng)數(shù)據(jù)庫(kù)中有了數(shù)據(jù)以后就可以進(jìn)行抽獎(jiǎng)了,這時(shí)需要有一個(gè)抽獎(jiǎng)界面,抽獎(jiǎng)嘉賓通過(guò)按鍵或點(diǎn)擊“開(kāi)始”按鈕進(jìn)行抽獎(jiǎng)。在抽獎(jiǎng)中,通常屏幕上會(huì)有號(hào)碼在不停地翻動(dòng),這些號(hào)碼就是實(shí)時(shí)地在數(shù)據(jù)庫(kù)中隨機(jī)讀取的數(shù)據(jù)。當(dāng)抽獎(jiǎng)嘉賓再次按鍵或點(diǎn)擊“暫?!卑粹o時(shí),會(huì)有一個(gè)號(hào)碼停在屏幕上,那么這個(gè)號(hào)碼所對(duì)應(yīng)的參與者就是這個(gè)環(huán)節(jié)的幸運(yùn)者。
(3)產(chǎn)生了獲獎(jiǎng)?wù)吆笮枰獙@獎(jiǎng)?wù)叩脑敿?xì)信息記錄下來(lái),為了活動(dòng)以后方便聯(lián)系;同時(shí)還要將獲獎(jiǎng)?wù)咝畔臄?shù)據(jù)庫(kù)中刪除,為了下一環(huán)節(jié)的抽獎(jiǎng)時(shí)不至于重復(fù)抽取。
由設(shè)計(jì)思路可知,電腦抽獎(jiǎng)軟件有兩大部分組成:后臺(tái)數(shù)據(jù)庫(kù)和前臺(tái)用戶(hù)界面。
后臺(tái)數(shù)據(jù)庫(kù)主要用來(lái)存儲(chǔ)參與者的信息,包括參與者的標(biāo)識(shí)號(hào)、姓名、年齡、性別、電話(huà)、聯(lián)系地址等。
前臺(tái)顯示界面是為用戶(hù)提供一個(gè)良好的人機(jī)界面平臺(tái),方便用戶(hù)操作。它主要由信息錄入界面和電腦抽獎(jiǎng)界面組成。“信息錄入界面”是為了方便組織者向數(shù)據(jù)庫(kù)中輸入數(shù)據(jù)而設(shè)計(jì)的,“電腦抽獎(jiǎng)界面”是用來(lái)展示抽獎(jiǎng)的過(guò)程和結(jié)果。
3電腦抽獎(jiǎng)軟件的實(shí)現(xiàn)
根據(jù)軟件的設(shè)計(jì)思路,在實(shí)現(xiàn)中,選用SQL Server 2000作為后臺(tái)數(shù)據(jù)庫(kù),選用比較容易掌握和方便使用的面向?qū)ο蟮母呒?jí)語(yǔ)言VB來(lái)做前臺(tái)顯示界面,這里使用了Visual Basic 6.0作為設(shè)計(jì)工具。
3.1 數(shù)據(jù)庫(kù)的設(shè)計(jì)實(shí)現(xiàn)
在SQL Server 2000查詢(xún)分析器中使用T-SQL語(yǔ)句建立數(shù)據(jù)庫(kù)和數(shù)據(jù)表。用下面語(yǔ)句建立數(shù)據(jù)庫(kù)InfoDB:create database InfoDB。在InfoDB中建立數(shù)據(jù)表Information:
create table InfoDB.dbo.information
(
userid varchar(26) primary key,
username varchar(30) not null,
usersex varchar(5) not null check (usersex in(男,女)),
userage varchar(10) not null check (userage between 1 and 150),
usertel varchar(30) not null,
useraddr varchar(50) not null
)
其中userid為主鍵,表示參與者的標(biāo)識(shí)號(hào);username、usersex、userage、usertel、useraddr分別表示參與者的姓名、性別、年齡、電話(huà)、聯(lián)系地址。
3.2 利用VB設(shè)計(jì)實(shí)現(xiàn)前臺(tái)界面
利用VB設(shè)計(jì)前臺(tái)界面,需要設(shè)計(jì)兩個(gè)界面,分別是“信息錄入界面”和“電腦抽獎(jiǎng)界面”。在界面的設(shè)計(jì)中用到的主要控件有:標(biāo)簽(label)、按鈕(button)、文本框(textBox)、計(jì)時(shí)器(timer)。
界面布置好以后,就要設(shè)計(jì)程序。程序設(shè)計(jì)有兩個(gè)關(guān)鍵點(diǎn),一個(gè)是VB和SQL Server 2000數(shù)據(jù)庫(kù)的連接,另一個(gè)是timer控件的使用。
VB和SQL Server 2000數(shù)據(jù)庫(kù)的連接,這里采用了ADO的方式來(lái)連接SQL Server數(shù)據(jù)庫(kù)。若要在VB中使用ADO對(duì)象,需要在工程中添加ADO控件,具體方法是單擊“工程”菜單上“部件”命令,打開(kāi)“部件”對(duì)話(huà)框,在列表中選擇“Microsoft ADO Data Control 6.0 (OLEDB)”,點(diǎn)“確定”,此時(shí)ADO控件就顯示在工具箱中。將“ADO控件”拖動(dòng)到需要連接數(shù)據(jù)庫(kù)的界面上,由于兩個(gè)界面都需要連接數(shù)據(jù)庫(kù),所以?xún)蓚€(gè)界面都需要有ADO控件。設(shè)置ADO控件的屬性,通過(guò)在“數(shù)據(jù)庫(kù)鏈接屬性”中選擇數(shù)據(jù)庫(kù)服務(wù)器、登陸方式以及所用數(shù)據(jù)庫(kù)的名稱(chēng),經(jīng)過(guò)“測(cè)試連接”后測(cè)試成功,則返回如圖1屬性對(duì)話(huà)框中的連接字符串。由于兩個(gè)窗體都需要和數(shù)據(jù)庫(kù)進(jìn)行操作,所以在每個(gè)窗體的Form_load事件中都需要首先打開(kāi)與數(shù)據(jù)庫(kù)的連接,語(yǔ)句如下:
Set con = New ADODB.Connection
con.ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;User ID=sa;Initial Catalog=InfoDB"
con.Open
其中“con.ConnectionString”就是圖1對(duì)話(huà)框中生成的連接字符串。
下面就可以使用語(yǔ)句來(lái)操作數(shù)據(jù)庫(kù)。在“信息錄入界面”中需要向數(shù)據(jù)庫(kù)中插入數(shù)據(jù),則需要在插入數(shù)據(jù)的按鈕cmdInsert的click事件中寫(xiě)入如下程序來(lái)向數(shù)據(jù)庫(kù)中插入數(shù)據(jù)。
Set com = New ADODB.Command
com.ActiveConnection = con
com.CommandText = "insert into information values
(" & txtUserid.Text & ",
" & txtUsername.Text & ",
" & cboUsersex.Text & ",
" & txtUserage.Text & ",
" & txtUsertel.Text & ",
" & txtUseraddr.Text & ")"
com.Execute
在“電腦抽獎(jiǎng)界面”中,當(dāng)抽獎(jiǎng)嘉賓點(diǎn)擊“開(kāi)始”按鈕時(shí)開(kāi)始抽獎(jiǎng),這時(shí)需要從數(shù)據(jù)庫(kù)中隨機(jī)地讀取數(shù)據(jù),并能在界面上顯示數(shù)據(jù)變化的效果,此時(shí)就需要VB中制作動(dòng)畫(huà)效果的一個(gè)很重要的控件——Timer控件。Timer控件的重要屬性有,“Enabled”表示計(jì)時(shí)器是否工作以及“Interval”表示給定的時(shí)間間隔,這里是以毫秒(ms)為單位。Timer控件的一個(gè)最重要的事件是Timer事件,表示每過(guò)一個(gè)Interval就會(huì)自動(dòng)地激發(fā)Timer事件。在本程序中,由于要不停地從數(shù)據(jù)庫(kù)中隨機(jī)讀取userid,所以需要用到Timer控件,使用時(shí)要適當(dāng)設(shè)置Interval屬性的值,這里根據(jù)需要將Interval設(shè)置成了50ms,Timer的Enabled屬性初始化為“False”。當(dāng)嘉賓按“開(kāi)始”按鈕時(shí),計(jì)時(shí)器開(kāi)始工作,即在開(kāi)始按鈕cmdStart的click事件中要將計(jì)時(shí)器設(shè)置為可用“tmrCount.Enabled = True”。開(kāi)始抽獎(jiǎng)即每過(guò)50ms隨機(jī)地從數(shù)據(jù)庫(kù)中讀取一個(gè)userid并顯示,則在Timer事件中需要寫(xiě)如下代碼:
Private Sub tmrCount_Timer()
Dim strsql As String
Dim str As String
Randomize
strsql = "select top 1 * from information order by newid()"
Set rs = New ADODB.Recordset
rs.ActiveConnection = con
rs.LockType = adLockOptimistic
rs.CursorType = adOpenDynamic
rs.Source = strsql
rs.Open
lblRandom.Caption = rs.Fields(0)
End Sub
程序利用隨機(jī)函數(shù)Randomize首先進(jìn)行初始化。接著要執(zhí)行一個(gè)查詢(xún)語(yǔ)句“select top 1 * from information order by newid()”,這條語(yǔ)句的作用是在sqlserver中隨機(jī)讀取一條記錄。執(zhí)行完查詢(xún)后需要利用“l(fā)blRandom.Caption = rs.Fields(0)”語(yǔ)句將userid顯示到界面上。此程序每過(guò)50ms運(yùn)行一次,這樣界面上就會(huì)顯示出號(hào)碼在不停翻動(dòng)的效果。
當(dāng)抽獎(jiǎng)嘉賓點(diǎn)擊“暫?!卑粹o時(shí),計(jì)時(shí)器停止工作,這時(shí)就會(huì)有一個(gè)userid顯示在界面上,那么這個(gè)userid對(duì)應(yīng)的參與者就是獲獎(jiǎng)?wù)?。最后程序要做的收尾工作是,將顯示在界面上的userid所對(duì)應(yīng)的用戶(hù)信息寫(xiě)入到一個(gè)記事本文件中,同時(shí)將對(duì)應(yīng)的信息從數(shù)據(jù)庫(kù)中刪除,并關(guān)閉數(shù)據(jù)庫(kù)的連接。所以暫停按鈕cmdPause的click事件的代碼如下:
Private Sub cmdPause_Click()
Dim strsql As String
tmrCount.Enabled = False
Open App.Path + "\result.txt" For Append As #1
Print #1, filestr & rs("userid") & " " & rs("username") & " " & rs("usersex") & " " & rs("userage") & " " & rs("usertel") & " " & rs("useraddr")
Set com = New ADODB.Command
com.ActiveConnection = con
strsql = "delete from information where userid =" & rs("userid") & ""
com.CommandText = strsql
com.Execute
Close #1
rs.Close
End Sub
4結(jié)束語(yǔ)
在計(jì)算機(jī)網(wǎng)絡(luò)、電視等媒體如此發(fā)達(dá)的今天,電腦抽獎(jiǎng)具有很強(qiáng)的實(shí)用價(jià)值,與傳統(tǒng)的抽獎(jiǎng)方式相比,它既能節(jié)約資源又能提高效率。本文筆者分析了電腦抽獎(jiǎng)軟件的原理,并利用SQL Server 2000數(shù)據(jù)庫(kù)和Visual Basic 6.0設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)電腦抽獎(jiǎng)程序,為讀者提供了設(shè)計(jì)并實(shí)現(xiàn)這種軟件的思路。
參考文獻(xiàn):
[1] 張俊玲,王秀英.數(shù)據(jù)庫(kù)原理與應(yīng)用[M].清華大學(xué)出版社,2010,7(2).
[2] Daniela F,Donald K,Ioana M.Integrating Keyword Search into XML Query Processing[J]. Computer Network,2000,33(6):25-28.