当前位置: 代码迷 >> VFP >> 关于随机抽奖的有关问题
  详细解决方案

关于随机抽奖的有关问题

热度:8637   发布时间:2013-02-26 00:00:00.0
关于随机抽奖的问题
我设计了一个现场抽奖的程序,想实现一次随机抽取5人或者10人或15人的名单。目前我实现了通过点击N次按钮实现抽取的人数,但领导要我设计出一个只要按一次按钮,就能随机抽出5人的这种情况,请教各位大侠,这种情况在表单中如何显示有多行记录在滚动的情况,还有用什么公式才能实现一次抽5人、10人、15人。

------解决方案--------------------------------------------------------
你不是已经写出来随机抽取一个的了么

重复执行你的抽取过程就可以啊

然后判断一下随机出来的结果是不是已经抽取出来了

如果抽取出来了就重新执行抽取过程

即 同一个人不能重复被抽取
------解决方案--------------------------------------------------------
重复执行你取1个的代码。



SQL code
Rand(-1)Create Cursor t1 (原表字段 i)For lni=1 To 50    Insert Into t1 Values (lni)EndforLocateBrowse && 生成的原始测试Select Top 5 1000*Rand()+1 As 随机数,* From t1 Order By 1 && 随机取5条记录*-- 至于滚动显示,也是随机取一条显示一条,再取一条再显示一条。*-- 但当按停止时,一定要再随机一下,不然看到什么一停就是这个了。
------解决方案--------------------------------------------------------
sele * from tt into cursor mytt
sele top 5 * from mytt order by rand() into mytt5
dele from tt where 姓名 in (sele 姓名 from mytt5)
------解决方案--------------------------------------------------------
这个抽奖程序我写过两个,包含答卷采集和评分

thisform.text1.value=''
thisform.check1.enabled=.f.
thisform.combo1.enabled=.f.
=rand(-1)
IF thisform.check1.value
thisform.command1.enabled=.f.
do while setjx.cjs>setjx.zjs
se=int((round(rand(),6)*thisform.keys))+1
sele cj
go se
SCAT to mj fiel xm,sfzh,dh,dwmc
Dele
PACK
thisform.keys=thisform.keys-1
SELE zj
LOCA for jx==setjx.jx
DO while !empt(sfzh)
Skip
ENDD
GATH from mj fiel xm,sfzh,dh,dwmc
REPL zjs with zjs+1 in setjx


thisform.grid1.refresh


endd
sele zj
go top
thisform.grid1.refresh
thisform.grid1.refresh
thisform.check1.enabled=.t.
thisform.combo1.enabled=.t.
thisform.command1.enabled=setjx.cjs>setjx.zjs
* thisform.command1.enabled=.t.

ELSE
IF this.caption='开始抽奖'
this.caption='中奖'

thisform.timer1.enabled=.t.


ELSE

thisform.timer1.enabled=.f.
this.caption='开始抽奖'
lockscreen=.t.
SELE cj
SCAT to mj fiel xm,sfzh,dh,dwmc
Dele
PACK
thisform.keys=thisform.keys-1
SELE zj
LOCA for jx==setjx.jx
DO while !empt(sfzh)
Skip
ENDD
GATH from mj fiel xm,sfzh,dh,dwmc
REPL zjs with zjs+1 in setjx
lockscreen=.f.
thisform.grid1.refresh
thisform.check1.enabled=.t.
thisform.combo1.enabled=.t.
thisform.command1.enabled=setjx.cjs>setjx.zjs
ENDI
ENDI

------解决方案--------------------------------------------------------
用循环。

思路是这样的:设置某个奖项的名额,选择一个奖项,按“开始抽奖”,系统随机抽出相应数目的名单。

你想一次抽五个,就设某个奖项名额是5。
你可能会说:我要三等奖30个,每次抽五个。分次循环就行
  相关解决方案