程序员人生 网站导航

基于Access数据库的抽奖系统设计

栏目:access时间:2014-05-29 19:10:41

  摘 要 介绍了抽奖信息管理系统的设计思路和基本原理结合Access通过软件系统开发实现了具有随机性和相对均衡性的抽奖

  关键词 抽奖系统 Access VBA 随机 相对均衡性

  引言

  当今社会各种各样的抽奖活动相当普遍抽奖活动的基本原则和主要特征是随机性但对于某一团体内部的抽奖活动来说还有一个相对均衡的问题所谓相对均衡就是指让各个部门的中奖概率和其人数占总人数的比重大致相等基于Access结合其内置VBA语言通过程序设计实现抽奖的随机通过算法研究实现抽奖的相对均衡本文主要介绍了系统原理以及主要程序的设计

  系统组成及原理

  抽奖系统主要由来宾登记奖票管理幸运抽奖获奖查询四个基本模块构成登记模块登记参加抽奖人员奖票管理模块初始化参加抽奖人员名单抽奖模块实现抽奖功能获奖查询模块查询获奖结果其中抽奖模块中可以实现奖励等级总抽奖数每一次抽奖数的控制系统架构框图如图

  图 系统架构

  系统初始化

  来宾登记模块中已经收录了参加抽奖的人员名单以及所属部门在奖票管理模块中当点击初始化按钮时通过内部程序设计首先把上次的抽奖结果清空同时利用 Rnd在参加抽奖的人员名单前随机生成一系列的序号为幸运抽奖模块中的随机抽奖做准备[]主要初始化程序代码如下:

  DoCmdSetWarnings False

  DoCmdOpenQuery "删除对奖票号" acNormal acEdit

  DoCmdOpenQuery "追加对奖票号" acNormal acEdit

  DoCmdSetWarnings True

  Set qrs = CurrentDbOpenRecordset("对奖票号")

  qrsMoveFirst

  i =

  Do While Not qrsEOF

  qrsEdit

  qrs!序号 = Int(( ) * Rnd)

  qrs!对奖号码 = i

  qrsUpdate

  i = i +

  qrsMoveNext

  Loop

  MsgBox ("对奖名单初始化完毕")

  qrsClose

  抽奖功能的实现

  通过抽奖模块实现最终抽奖功能

  通过奖励等级组合框控制抽奖等级通过抽奖数量组合框控制每批次抽奖数量通过总抽奖数组合框控制总抽奖数当奖励等级分别为一三等奖时抽奖数量和总抽奖数默认值分别

  为各组合框的具体数值也可以通过上下箭头控制抽奖界面如图

  图 抽 奖 界 面

  其程序设计比较简单主要程序如下:

  ……

  If Me!奖励等级Value = Then

  Me!总数量Value =

  End If

  If Me!奖励等级Value = Then

  Me!总数量Value =

  End If

  If Me!奖励等级Value = Then

  Me!总数量Value =

  End If

  Forms!抽奖Q_抽奖统计Requery

  If Me!奖励等级Value = Then

  Me!抽奖数量Value =

  End If

  If Me!奖励等级Value = Or Me!奖励等级Value = Then

  Me!抽奖数量Value =

  End If

  ……

  通过点击开始按钮开始抽奖同时按钮标题变为停止再次点击停止此批次抽奖同时按钮标题变为开始继续点击开始下一批次抽奖如此反复直至完成总抽奖数此时提示“抽奖总数已到”如果未完成总抽奖数就开始另外一轮抽奖则提示“抽奖限制”

  内部抽奖主要解决随机性和相对均衡两个问题系统初始化在参加抽奖人员名单前随机生成了序号通过查询“号码重排序”将参加抽奖人员名单按照序号升序排列抽奖时按照序号顺序抽奖实现了随机的要求相对均衡要求大致按照各个部门人数占总人数的百分比来分配中奖人数本系统采用各个部门占总人数的百分比乘以抽奖总数的方法来大致确定各个部门的中奖人数有小数的数字通过程序设计进行四舍五入处理需要注意的是若使所有的部门中奖人数都要用四舍五入的方法进行处理则可能出现错误为了避免这种情况需要选定一个部门使其中奖人数等于总抽奖数减去其他各个部门中奖人数之和[]抽奖模块的主要程序代码如下:

  ……

  N =

  cnt = Me!电科Value + Me!电气Value + Me!自动化Value + Me!通信Value + Me!院办Value + Me!退休Value

  Do While Me!抽奖数量Value > N And Not qrsEOF And cnt < Me!总数量Value

  电科抽奖

  ’四舍五入确定电科中奖数

  If Me!电科Value < (Int(((unit姓名之Count / cnt) * Me!总数量Value + ))) And N < Me!抽奖数量Value And cnt < Me!总数量Value Then

  If qrs单位 = "电科" And qrs!批次Value = Then

  Me!电科Value = Me!电科Value +

  qrsEdit

  qrs!奖励等级Value = Me!奖励等级Value

  qrs!批次Value = Me!批次Value

  qrsUpdate

  N = N +

  End If

  Else

  End If

  ……

  退休抽奖

  cnt = Me!电科Value + Me!电气Value + Me!自动化Value + Me!通信Value + Me!院办Value + Me!退休Value

  cnt= Me!电科Value + Me!电气Value + Me!自动化Value + Me!通信Value + Me!院办Value

  剩余数量分配给退休

  If Me!退休Value < Int((Me!总数量Value – cnt) And N < Me!抽奖数量Value And cnt < Me!总数量Value Then

  If qrs单位 = "退休" And qrs!批次Value = Then

  Me!退休Value = Me!退休Value +

  qrsEdit

  qrs!奖励等级Value = Me!奖励等级Value

  qrs!批次Value = Me!批次Value

  qrsUpdate

  N = N +

  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 =

  Else

  MsgBox ("抽奖限制")

  End If

  ……

  结论

  本系统利用Access数据库结合其内置VBA语言探讨了系统初始化抽奖的随机性和相对均衡性等关键问题满足了抽奖的要求进行适当调整该系统可以应用于多种抽奖场合

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐