关于随机抽奖的问题

acdee2011 2011-12-28 02:06:07
我设计了一个现场抽奖的程序,想实现一次随机抽取5人或者10人或15人的名单。目前我实现了通过点击N次按钮实现抽取的人数,但领导要我设计出一个只要按一次按钮,就能随机抽出5人的这种情况,请教各位大侠,这种情况在表单中如何显示有多行记录在滚动的情况,还有用什么公式才能实现一次抽5人、10人、15人。
...全文
177 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
dfwxj 2011-12-29
  • 打赏
  • 举报
回复
用循环。

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

你想一次抽五个,就设某个奖项名额是5。
你可能会说:我要三等奖30个,每次抽五个。分次循环就行
acdee2011 2011-12-29
  • 打赏
  • 举报
回复
我想实现按一次“开始抽奖”,当点击“停止抽奖”是,让程序执行5次这样的操作,这样用语句如何实现?
dfwxj 2011-12-29
  • 打赏
  • 举报
回复
这个抽奖程序我写过两个,包含答卷采集和评分

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
acdee2011 2011-12-28
  • 打赏
  • 举报
回复
各位高手,谁手头有这样的抽奖程序,能否发给我一个用来借鉴一下。拜托了。
jxjdzwang5555 2011-12-28
  • 打赏
  • 举报
回复
sele * from tt into cursor mytt
sele top 5 * from mytt order by rand() into mytt5
dele from tt where 姓名 in (sele 姓名 from mytt5)
十豆三 2011-12-28
  • 打赏
  • 举报
回复
重复执行你取1个的代码。



Rand(-1)

Create Cursor t1 (原表字段 i)
For lni=1 To 50
Insert Into t1 Values (lni)
Endfor
Locate
Browse && 生成的原始测试

Select Top 5 1000*Rand()+1 As 随机数,* From t1 Order By 1 && 随机取5条记录

*-- 至于滚动显示,也是随机取一条显示一条,再取一条再显示一条。
*-- 但当按停止时,一定要再随机一下,不然看到什么一停就是这个了。
acdee2011 2011-12-28
  • 打赏
  • 举报
回复
怎么重复执行抽取过程?是在timer事件中用循环语句还是在抽奖的按钮中用循环语句?我的编程水平不太高,麻烦各位高手了。
taohua300 2011-12-28
  • 打赏
  • 举报
回复
你不是已经写出来随机抽取一个的了么

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

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

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

即 同一个人不能重复被抽取

2,749

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧