基於Access資料庫的抽獎系統設計

來源:互聯網
上載者:User

引言

當今社會,各種各樣的抽獎活動相當普遍,抽獎活動的基本原則和主要特徵是隨機性,但對於某一團體內部的抽獎活動來說,還有一個相對均衡的問題,所謂相對均衡就是指讓各個部門的中獎機率和其人數佔總人數的比重大致相等。基於ACCESS,結合其內建VBA語言,通過程式設計實現抽獎的隨機,通過演算法研究實現抽獎的相對均衡。本文主要介紹了系統原理以及主要程式的設計。

系統組成及原理

抽獎系統主要由來賓登記、獎票管理、幸運抽獎、獲獎查詢四個基本模組構成,登記模組登記參加抽獎人員,獎票管理模組初始化參加抽獎人員名單,抽獎模組實現抽獎功能,獲獎查詢模組查詢獲獎結果。其中,抽獎模組中可以實現獎勵等級、總抽獎數、每一次抽獎數的控制。系統架構框圖如圖1。

圖1 系統架構

系統初始化

來賓登記模組中已經收錄了參加抽獎的人員名單以及所屬部門,在獎票管理模組中,當點擊初始化按鈕時通過內部程式設計首先把上次的抽獎結果清空,同時利用Rnd在參加抽獎的人員名單前隨機產生一系列的序號,為幸運抽獎模組中的隨機抽獎做準備[1]。主要初始化程式碼如下:

以下為引用的內容:
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

 
抽獎功能的實現

通過抽獎模組實現最終抽獎功能。

通過獎勵等級組合框控制抽獎等級,通過抽獎數量組合框控制每批次抽獎數量,通過總抽獎數組合框控制總抽獎數。當獎勵等級分別為一、二、三等獎時,抽獎數量和總抽獎數預設值分別為5、10、10和10、30、50。各組合框的具體數值也可以通過上下箭頭控制。抽獎介面如圖2。

圖 2 抽 獎 界 面

其程式設計比較簡單,主要程式如下:

以下為引用的內容:
……
If Me!獎勵等級.Value = 1 Then
 Me!總數量.Value = 10
End If
If Me!獎勵等級.Value = 2 Then
 Me!總數量.Value = 30
End If
If Me!獎勵等級.Value = 3 Then
 Me!總數量.Value = 50
End If
Forms!抽獎.Q_抽獎統計.Requery
If Me!獎勵等級.Value = 1 Then
 Me!抽獎數量.Value = 5
End If
If Me!獎勵等級.Value = 2 Or Me!獎勵等級.Value = 3 Then
 Me!抽獎數量.Value = 10
End If
……

通過點擊開始按鈕開始抽獎,同時按鈕標題變為停止,再次點擊停止此批次抽獎,同時按鈕標題變為開始,繼續點擊開始下一批次抽獎,如此反覆,直至完成總抽獎數,此時提示“抽獎總數已到”,如果未完成總抽獎數就開始另外一輪抽獎,則提示“抽獎限制”。

內部抽獎主要解決隨機性和相對均衡兩個問題。系統初始化在參加抽獎人員名單前隨機產生了序號,通過查詢“號碼重排序”將參加抽獎人員名單按照序號升序排列,抽獎時按照序號順序抽獎,實現了隨機的要求。相對均衡要求大致按照各個部門人數佔總人數的百分比來分配中獎人數,本系統採用各個部門佔總人數的百分比乘以抽獎總數的方法來大致確定各個部門的中獎人數,有小數的數字通過程式設計進行四捨五入處理。需要注意的是,若使所有的部門中獎人數都要用四捨五入的方法進行處理則可能出現錯誤,為了避免這種情況需要選定一個部門,使其中獎人數等於總抽獎數減去其他各個部門中獎人數之和[2]。抽獎模組的主要程式碼如下:

以下為引用的內容:

……
N = 0
cnt = Me!電科.Value + Me!電氣.Value + Me!自動化.Value + Me!通訊.Value + Me!院辦.Value + Me!退休.Value
Do While Me!抽獎數量.Value > N And Not qrs.EOF And cnt < Me!總數量.Value
 '電科抽獎
 ’四捨五入確定電科中獎數

 If Me!電科.Value < (Int(((unit1.姓名之Count / cnt1) * Me!總數量.Value + 0.5))) And N < Me!抽獎數量.Value And cnt < Me!總數量.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
 '剩餘數量分配給退休
 If Me!退休.Value < Int((Me!總數量.Value – cnt2) And N < Me!抽獎數量.Value And cnt < Me!總數量.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!總數量.Value Then
  MsgBox ("抽獎總數已到。")
  Me.可抽獎.Value = 0
 Else
  MsgBox ("抽獎限制。")
 End If
 ……

結論

本系統利用ACCESS資料庫,結合其內建VBA語言,探討了系統初始化、抽獎的隨機性和相對均衡性等關鍵問題,滿足了抽獎的要求。進行適當調整,該系統可以應用於多種抽獎場合。



相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。