Access設(shè)計抽獎系統(tǒng)
發(fā)表時間:2023-08-09 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]一、系統(tǒng)組成及原理抽獎系統(tǒng)主要由來賓登記、獎票管理、幸運(yùn)抽獎、獲獎查詢四個基本模塊構(gòu)成,登記模塊登記參加抽獎人員,獎票管理模塊初始化參加抽獎人員名單,抽獎模塊實(shí)現(xiàn)抽獎功能,獲獎查詢模塊查詢獲獎結(jié)果。...
一、系統(tǒng)組成及原理
抽獎系統(tǒng)主要由來賓登記、獎票管理、幸運(yùn)抽獎、獲獎查詢四個基本模塊構(gòu)成,登記模塊登記參加抽獎人員,獎票管理模塊初始化參加抽獎人員名單,抽獎模塊實(shí)現(xiàn)抽獎功能,獲獎查詢模塊查詢獲獎結(jié)果。其中,抽獎模塊中可以實(shí)現(xiàn)獎勵等級、總抽獎數(shù)、每一次抽獎數(shù)的控制。系統(tǒng)架構(gòu)框圖如圖1。
圖1 系統(tǒng)架構(gòu)
二、系統(tǒng)初始化
來賓登記模塊中已經(jīng)收錄了參加抽獎的人員名單以及所屬部門,在獎票管理模塊中,當(dāng)點(diǎn)擊初始化按鈕時通過內(nèi)部程序設(shè)計首先把上次的抽獎結(jié)果清空,同時利用Rnd在參加抽獎的人員名單前隨機(jī)生成一系列的序號,為幸運(yùn)抽獎模塊中的隨機(jī)抽獎做準(zhǔn)備[1]。主要初始化程序代碼如下:
以下為引用的內(nèi)容:
DoCmd.SetWarnings False
DoCmd.OpenQuery "刪除對獎票號", acNormal, acEdit
DoCmd.OpenQuery "追加對獎票號", acNormal, acEdit
DoCmd.SetWarnings True
Set qrs = CurrentDb.OpenRecordset("對獎票號")
qrs.MoveFirst
i = 1
Do While Not qrs.EOF
qrs.Edit
qrs!序號 = Int((211 - 1) * Rnd)
qrs!對獎號碼 = i
qrs.Update
i = i + 1
qrs.MoveNext
Loop
MsgBox ("對獎名單初始化完畢。")
qrs.Close
抽獎功能的實(shí)現(xiàn)
通過抽獎模塊實(shí)現(xiàn)最終抽獎功能。
通過獎勵等級組合框控制抽獎等級,通過抽獎數(shù)量組合框控制每批次抽獎數(shù)量,通過總抽獎數(shù)組合框控制總抽獎數(shù)。當(dāng)獎勵等級分別為一、二、三等獎時,抽獎數(shù)量和總抽獎數(shù)默認(rèn)值分別為5、10、10和10、30、50。各組合框的具體數(shù)值也可以通過上下箭頭控制。抽獎界面如圖2。
圖 2 抽 獎 界 面
其程序設(shè)計比較簡單,主要程序如下:
以下為引用的內(nèi)容:
……
If Me!獎勵等級.Value = 1 Then
Me!總數(shù)量.Value = 10
End If
If Me!獎勵等級.Value = 2 Then
Me!總數(shù)量.Value = 30
End If
If Me!獎勵等級.Value = 3 Then
Me!總數(shù)量.Value = 50
End If
Forms!抽獎.Q_抽獎統(tǒng)計.Requery
If Me!獎勵等級.Value = 1 Then
Me!抽獎數(shù)量.Value = 5
End If
If Me!獎勵等級.Value = 2 Or Me!獎勵等級.Value = 3 Then
Me!抽獎數(shù)量.Value = 10
End If
……
通過點(diǎn)擊開始按鈕開始抽獎,同時按鈕標(biāo)題變?yōu)橥V梗俅吸c(diǎn)擊停止此批次抽獎,同時按鈕標(biāo)題變?yōu)殚_始,繼續(xù)點(diǎn)擊開始下一批次抽獎,如此反復(fù),直至完成總抽獎數(shù),此時提示“抽獎總數(shù)已到”,如果未完成總抽獎數(shù)就開始另外一輪抽獎,則提示“抽獎限制”。
內(nèi)部抽獎主要解決隨機(jī)性和相對均衡兩個問題。系統(tǒng)初始化在參加抽獎人員名單前隨機(jī)生成了序號,通過查詢“號碼重排序”將參加抽獎人員名單按照序號升序排列,抽獎時按照序號順序抽獎,實(shí)現(xiàn)了隨機(jī)的要求。相對均衡要求大致按照各個部門人數(shù)占總?cè)藬?shù)的百分比來分配中獎人數(shù),本系統(tǒng)采用各個部門占總?cè)藬?shù)的百分比乘以抽獎總數(shù)的方法來大致確定各個部門的中獎人數(shù),有小數(shù)的數(shù)字通過程序設(shè)計進(jìn)行四舍五入處理。需要注意的是,若使所有的部門中獎人數(shù)都要用四舍五入的方法進(jìn)行處理則可能出現(xiàn)錯誤,為了避免這種情況需要選定一個部門,使其中獎人數(shù)等于總抽獎數(shù)減去其他各個部門中獎人數(shù)之和[2]。抽獎模塊的主要程序代碼如下:
以下為引用的內(nèi)容:
N = 0
cnt = Me!電科.Value + Me!電氣.Value + Me!自動化.Value + Me!通信.Value + Me!院辦.Value + Me!退休.Value
Do While Me!抽獎數(shù)量.Value > N And Not qrs.EOF And cnt < Me!總數(shù)量.Value
'電科抽獎
’四舍五入確定電科中獎數(shù)
If Me!電科.Value < (Int(((unit1.姓名之Count / cnt1) * Me!總數(shù)量.Value + 0.5))) And N < Me!抽獎數(shù)量.Value And cnt < Me!總數(shù)量.Value Then
If qrs.單位 = "電科" And qrs!批次.Value = 0 Then
Me!電科.Value = Me!電科.Value + 1
qrs.Edit
qrs!獎勵等級.Value = Me!獎勵等級.Value
qrs!批次.Value = Me!批次.Value
qrs.Update
N = N + 1
End If
Else
End If
……
'退休抽獎
cnt = Me!電科.Value + Me!電氣.Value + Me!自動化.Value + Me!通信.Value + Me!院辦.Value + Me!退休.Value
cnt2= Me!電科.Value + Me!電氣.Value + Me!自動化.Value + Me!通信.Value + Me!院辦.Value
'剩余數(shù)量分配給退休
If Me!退休.Value < Int((Me!總數(shù)量.Value – cnt2) And N < Me!抽獎數(shù)量.Value And cnt < Me!總數(shù)量.Value Then
If qrs22.單位 = "退休" And qrs!批次.Value = 0 Then
Me!退休.Value = Me!退休.Value + 1
qrs.Edit
qrs22!獎勵等級.Value = Me!獎勵等級.Value
qrs22!批次.Value = Me!批次.Value
qrs22.Update
N = N + 1
End If
Else
End If
……
’判斷是否完成抽獎
cnt = Me!電科.Value + Me!電氣.Value + Me!自動化.Value + Me!通信.Value + Me!院辦.Value + Me!退休.Value
If cnt = Me!總數(shù)量.Value Then
MsgBox ("抽獎總數(shù)已到。")
Me.可抽獎.Value = 0
Else
MsgBox ("抽獎限制。")
End If
……
結(jié)論
本系統(tǒng)利用ACCESS數(shù)據(jù)庫,結(jié)合其內(nèi)置VBA語言,探討了系統(tǒng)初始化、抽獎的隨機(jī)性和相對均衡性等關(guān)鍵問題,滿足了抽獎的要求。進(jìn)行適當(dāng)調(diào)整,該系統(tǒng)可以應(yīng)用于多種抽獎場合。
Microsoft Access在很多地方得到廣泛使用,例如小型企業(yè),大公司的部門。