孫雪
摘要: 在一些大型活動中,為了吸引參與者,通常會有抽獎環(huán)節(jié)。隨著計算機的普及,電視、網(wǎng)絡(luò)等媒體的廣泛傳播,“電腦抽獎”的方式越來越多地出現(xiàn),而“電腦抽獎軟件”也有著很好的使用價值。該文通過分析這種軟件的實現(xiàn)原理,利用SQL Server 2000和VB設(shè)計并實現(xiàn)了一個電腦抽獎軟件,為讀者提供了設(shè)計和實現(xiàn)這種軟件的思路。
關(guān)鍵詞:SQL Server 2000;電腦抽獎;VB
中圖分類號:TP311 文獻標(biāo)識碼:A 文章編號:1009-3044(2016)25-0003-02
1引言
在一些大型活動中,為了吸引參與者,通常會有抽獎環(huán)節(jié)。傳統(tǒng)的抽獎方式是將能唯一標(biāo)識參與者的號碼,比如身份證號、參會的順序號等,打亂順序地放入一個抽獎箱中。在活動的抽獎環(huán)節(jié)中,由組織者監(jiān)督,抽獎嘉賓隨機地在抽獎箱中抽出一個或幾個號碼,那么這些號碼對應(yīng)的參與者就是獲獎?wù)?。如今,隨著計算機的普及,電視、互聯(lián)網(wǎng)等媒體的廣泛傳播,越來越多地出現(xiàn)了電腦抽獎的方式。特別是在一些大型的電視活動中,通常會通過抽出參與觀眾的身份證號或電話號碼來產(chǎn)生幸運觀眾。電腦抽獎的方式想必讀者都見到過,并且有許多人也參與過類似的活動。那么,像這種電腦抽獎的軟件是如何設(shè)計和實現(xiàn)的呢?本文筆者通過自己設(shè)計的電腦抽獎軟件,來為大家提供一個設(shè)計和實現(xiàn)這種軟件的思路。
2電腦抽獎軟件的總體設(shè)計
電腦抽獎的過程就是把傳統(tǒng)的抽獎過程用計算機實現(xiàn)了。傳統(tǒng)的抽獎是把參與者的信息放進抽獎箱,而電腦抽獎則是要把其數(shù)據(jù)放到數(shù)據(jù)庫中;在傳統(tǒng)的抽獎中由抽獎嘉賓在抽獎箱中隨機地抽出獲獎?wù)撸陔娔X抽獎中則是由抽獎嘉賓通過按鍵或點擊按鈕進行“開始”和“暫?!?,隨機地從數(shù)據(jù)庫中提取幸運者的。
由此可見,設(shè)計電腦抽獎軟件的總體思路是:
(1)首先組織者通過信息的錄入界面,向數(shù)據(jù)庫中錄入?yún)⑴c者的信息。
(2)當(dāng)數(shù)據(jù)庫中有了數(shù)據(jù)以后就可以進行抽獎了,這時需要有一個抽獎界面,抽獎嘉賓通過按鍵或點擊“開始”按鈕進行抽獎。在抽獎中,通常屏幕上會有號碼在不停地翻動,這些號碼就是實時地在數(shù)據(jù)庫中隨機讀取的數(shù)據(jù)。當(dāng)抽獎嘉賓再次按鍵或點擊“暫?!卑粹o時,會有一個號碼停在屏幕上,那么這個號碼所對應(yīng)的參與者就是這個環(huán)節(jié)的幸運者。
(3)產(chǎn)生了獲獎?wù)吆笮枰獙@獎?wù)叩脑敿毿畔⒂涗浵聛?,為了活動以后方便?lián)系;同時還要將獲獎?wù)咝畔臄?shù)據(jù)庫中刪除,為了下一環(huán)節(jié)的抽獎時不至于重復(fù)抽取。
由設(shè)計思路可知,電腦抽獎軟件有兩大部分組成:后臺數(shù)據(jù)庫和前臺用戶界面。
后臺數(shù)據(jù)庫主要用來存儲參與者的信息,包括參與者的標(biāo)識號、姓名、年齡、性別、電話、聯(lián)系地址等。
前臺顯示界面是為用戶提供一個良好的人機界面平臺,方便用戶操作。它主要由信息錄入界面和電腦抽獎界面組成?!靶畔浫虢缑妗笔菫榱朔奖憬M織者向數(shù)據(jù)庫中輸入數(shù)據(jù)而設(shè)計的,“電腦抽獎界面”是用來展示抽獎的過程和結(jié)果。
3電腦抽獎軟件的實現(xiàn)
根據(jù)軟件的設(shè)計思路,在實現(xiàn)中,選用SQL Server 2000作為后臺數(shù)據(jù)庫,選用比較容易掌握和方便使用的面向?qū)ο蟮母呒壵Z言VB來做前臺顯示界面,這里使用了Visual Basic 6.0作為設(shè)計工具。
3.1 數(shù)據(jù)庫的設(shè)計實現(xiàn)
在SQL Server 2000查詢分析器中使用T-SQL語句建立數(shù)據(jù)庫和數(shù)據(jù)表。用下面語句建立數(shù)據(jù)庫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)識號;username、usersex、userage、usertel、useraddr分別表示參與者的姓名、性別、年齡、電話、聯(lián)系地址。
3.2 利用VB設(shè)計實現(xiàn)前臺界面
利用VB設(shè)計前臺界面,需要設(shè)計兩個界面,分別是“信息錄入界面”和“電腦抽獎界面”。在界面的設(shè)計中用到的主要控件有:標(biāo)簽(label)、按鈕(button)、文本框(textBox)、計時器(timer)。
界面布置好以后,就要設(shè)計程序。程序設(shè)計有兩個關(guān)鍵點,一個是VB和SQL Server 2000數(shù)據(jù)庫的連接,另一個是timer控件的使用。
VB和SQL Server 2000數(shù)據(jù)庫的連接,這里采用了ADO的方式來連接SQL Server數(shù)據(jù)庫。若要在VB中使用ADO對象,需要在工程中添加ADO控件,具體方法是單擊“工程”菜單上“部件”命令,打開“部件”對話框,在列表中選擇“Microsoft ADO Data Control 6.0 (OLEDB)”,點“確定”,此時ADO控件就顯示在工具箱中。將“ADO控件”拖動到需要連接數(shù)據(jù)庫的界面上,由于兩個界面都需要連接數(shù)據(jù)庫,所以兩個界面都需要有ADO控件。設(shè)置ADO控件的屬性,通過在“數(shù)據(jù)庫鏈接屬性”中選擇數(shù)據(jù)庫服務(wù)器、登陸方式以及所用數(shù)據(jù)庫的名稱,經(jīng)過“測試連接”后測試成功,則返回如圖1屬性對話框中的連接字符串。由于兩個窗體都需要和數(shù)據(jù)庫進行操作,所以在每個窗體的Form_load事件中都需要首先打開與數(shù)據(jù)庫的連接,語句如下:
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對話框中生成的連接字符串。
下面就可以使用語句來操作數(shù)據(jù)庫。在“信息錄入界面”中需要向數(shù)據(jù)庫中插入數(shù)據(jù),則需要在插入數(shù)據(jù)的按鈕cmdInsert的click事件中寫入如下程序來向數(shù)據(jù)庫中插入數(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
在“電腦抽獎界面”中,當(dāng)抽獎嘉賓點擊“開始”按鈕時開始抽獎,這時需要從數(shù)據(jù)庫中隨機地讀取數(shù)據(jù),并能在界面上顯示數(shù)據(jù)變化的效果,此時就需要VB中制作動畫效果的一個很重要的控件——Timer控件。Timer控件的重要屬性有,“Enabled”表示計時器是否工作以及“Interval”表示給定的時間間隔,這里是以毫秒(ms)為單位。Timer控件的一個最重要的事件是Timer事件,表示每過一個Interval就會自動地激發(fā)Timer事件。在本程序中,由于要不停地從數(shù)據(jù)庫中隨機讀取userid,所以需要用到Timer控件,使用時要適當(dāng)設(shè)置Interval屬性的值,這里根據(jù)需要將Interval設(shè)置成了50ms,Timer的Enabled屬性初始化為“False”。當(dāng)嘉賓按“開始”按鈕時,計時器開始工作,即在開始按鈕cmdStart的click事件中要將計時器設(shè)置為可用“tmrCount.Enabled = True”。開始抽獎即每過50ms隨機地從數(shù)據(jù)庫中讀取一個userid并顯示,則在Timer事件中需要寫如下代碼:
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
程序利用隨機函數(shù)Randomize首先進行初始化。接著要執(zhí)行一個查詢語句“select top 1 * from information order by newid()”,這條語句的作用是在sqlserver中隨機讀取一條記錄。執(zhí)行完查詢后需要利用“l(fā)blRandom.Caption = rs.Fields(0)”語句將userid顯示到界面上。此程序每過50ms運行一次,這樣界面上就會顯示出號碼在不停翻動的效果。
當(dāng)抽獎嘉賓點擊“暫?!卑粹o時,計時器停止工作,這時就會有一個userid顯示在界面上,那么這個userid對應(yīng)的參與者就是獲獎?wù)摺W詈蟪绦蛞龅氖瘴补ぷ魇?,將顯示在界面上的userid所對應(yīng)的用戶信息寫入到一個記事本文件中,同時將對應(yīng)的信息從數(shù)據(jù)庫中刪除,并關(guān)閉數(shù)據(jù)庫的連接。所以暫停按鈕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é)束語
在計算機網(wǎng)絡(luò)、電視等媒體如此發(fā)達的今天,電腦抽獎具有很強的實用價值,與傳統(tǒng)的抽獎方式相比,它既能節(jié)約資源又能提高效率。本文筆者分析了電腦抽獎軟件的原理,并利用SQL Server 2000數(shù)據(jù)庫和Visual Basic 6.0設(shè)計并實現(xiàn)了一個電腦抽獎程序,為讀者提供了設(shè)計并實現(xiàn)這種軟件的思路。
參考文獻:
[1] 張俊玲,王秀英.數(shù)據(jù)庫原理與應(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.