基于Access的抽奖系统设计基于Access的抽奖系统设计
于国防 张宁 付海燕 孙鹏
(中国矿业大学 信电学院,江苏 徐州 221008)
介绍了抽奖信息管理系统的设计思路和基本原理,结合Access,通过软件系统开发,实现了具有随机性和相对均衡性的抽奖。
抽奖系统 Access VBA 随机 相对均衡性
当今社会,各种各样的抽奖活动相当普遍,抽奖活动的基本原则和主要特征是随机性,但对于某一团
体内部的抽奖活动来说,还有一个相对均衡的问题,所谓相对均衡就是指让各个部门的中奖概率和其人数
占总人数的比重大致相等。基于Access,结合其内置VB...
基于Access的抽奖系统设计
于国防 张宁 付海燕 孙鹏
(中国矿业大学 信电学院,江苏 徐州 221008)
介绍了抽奖信息管理系统的设计思路和基本原理,结合Access,通过软件系统开发,实现了具有随机性和相对均衡性的抽奖。
抽奖系统 Access VBA 随机 相对均衡性
当今社会,各种各样的抽奖活动相当普遍,抽奖活动的基本原则和主要特征是随机性,但对于某一团
体内部的抽奖活动来说,还有一个相对均衡的问题,所谓相对均衡就是指让各个部门的中奖概率和其人数
占总人数的比重大致相等。基于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语言,探讨了系统初始化、抽奖的随机性和相对均衡性等
关键问题,满足了抽奖的要求。进行适当调整,该系统可以应用于多种抽奖场合。
[1] 数据库高效开发范例应用 陈可欣编著 中国青年出版社 2005 [2] 中文版程序设计与应用 徐国平,郭力平主编 清华大学出版社 1998
:于国防(1965- ),男,江苏徐州人,博士,副教授,研究方向为计算机网络与通讯,网络安全.
张 宁(1981- ),男,江苏徐州人,硕士,研究方向为信号与信息处理.
本文档为【基于Access的抽奖系统设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。