基于Access數據庫的抽獎系統設計_Access數據庫教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:Access數據庫安全中常見問題匯總
      本文匯總了在Access數據庫安全問題中最為常見的問題來做出解答。 問:什么是Microsoft Access 工作組,怎樣創建工作組信息文件? 答:Microsoft Access 工作組是在多用戶環境下共享數據的

      引言

      當今社會,各種各樣的抽獎活動相當普遍,抽獎活動的基本原則和主要特征是隨機性,但對于某一團體內部的抽獎活動來說,還有一個相對均衡的問題,所謂相對均衡就是指讓各個部門的中獎概率和其人數占總人數的比重大致相等。基于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語言,探討了系統初始化、抽獎的隨機性和相對均衡性等關鍵問題,滿足了抽獎的要求。進行適當調整,該系統可以應用于多種抽獎場合。

      分享:Access數據庫開發技巧(一)
        在當前數據庫領域,已有越來越多的人開始采用Access。它是一個功能強大的數據庫管理系統和MIS系統開發工具,具有界面友好、易學易用、開發簡單、接口靈活等特點。現將本人在使用Access時體

      來源:模板無憂//所屬分類:Access數據庫教程/更新時間:2008-08-22
      相關Access數據庫教程