| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1140 人关注过本帖
标题:利用VF9.0完成“摇号”怎样实现?
只看楼主 加入收藏
nmcfzxh
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2019-8-7
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:7 
利用VF9.0完成“摇号”怎样实现?
将表1.dbf中的学生以身份证号为关键字段,每次摇出20名考生(已摇出考生不再参加摇号)并写入表2.dbf。直到摇够规定的人数。
搜索更多相关主题的帖子: dbf 参加 关键字 规定 写入 
2021-08-18 17:31
nmcfzxh
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2019-8-7
收藏
得分:0 
新手学习中,幼稚之处请前辈谅解!
2021-08-18 17:32
schtg
Rank: 12Rank: 12Rank: 12
来 自:https://t.me/pump_upp
等 级:贵宾
威 望:67
帖 子:1573
专家分:3044
注 册:2012-2-29
收藏
得分:1 
提供一个思路仅供参考:第一步:将需要摇号的学生随机排序,取前20名,写入新表;第二步:删除刚才的前20名,余下学生再次随机排序,取前20名,写入新表,……直至需要的人数为止。
2021-08-19 05:45
nmcfzxh
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2019-8-7
收藏
得分:0 
谢谢!最好给代码!
2021-08-19 09:01
xuminxz
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:41
帖 子:763
专家分:2503
注 册:2011-5-8
收藏
得分:3 
在表1中,加入数值字段px n(8,7)
sele 表1
INDEX on px DESCENDING Tag px
REPLACE px WITH RAND() FOR px>=0
SELECT * FROM jsmc WHERE RECNO()<=20 AND px>=0 INTO dbf dbar
repl px with -1 for RECNO()<=20 AND px>=0
SELECT  表2
APPEND FROM ls

dBase有人接盘了。
2021-08-19 10:19
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10559
专家分:42996
注 册:2014-5-20
收藏(1)
得分:3 
这样可否:
程序代码:
CREATE CURSOR b2 (f1 I)
CREATE CURSOR b1 (f1 I)
FOR i=1 TO 100
    INSERT INTO b1 VALUES (i)
ENDFOR
RAND(-1)
FOR i=1 TO 5  && 每次摇出20名, 直到摇够规定的人数
    SELECT TOP 20 f1,RAND() r FROM b1 WHERE f1 NOT in (SELECT f1 FROM b2) ORDER BY r INTO CURSOR tmp
    SELECT b2
    APPEND FROM DBF("tmp")
ENDFOR
SELECT * FROM b2
2021-08-19 11:26
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3146
专家分:8408
注 册:2015-3-25
收藏
得分:10 
rand(-1)
create cursor 中奖(身份证 C(18),姓名 C(10),等奖 C(10))
create cursor 名单(身份证 C(18),姓名 C(10))
for i=1 to 99
insert into 名单(身份证,姓名) values ("P"+padL(i,17,"0"),padl(i,3,"0"))
endfor


*!* 抽三等奖,20
SELECT TOP 20 身份证,姓名,RAND() as 随机 FROM 名单 WHERE 身份证 NOT in (SELECT 身份证 FROM 中奖) ORDER BY 随机 INTO CURSOR t1
INSERT INTO 中奖(身份证,姓名,等奖) SELECT 身份证,姓名,"三等奖" FROM t1
SELECT 中奖
BROWSE

*!* 抽二等奖,10
SELECT TOP 10 身份证,姓名,RAND() as 随机 FROM 名单 WHERE 身份证 NOT in (SELECT 身份证 FROM 中奖) ORDER BY 随机 INTO CURSOR t1
INSERT INTO 中奖(身份证,姓名,等奖) SELECT 身份证,姓名,"二等奖" FROM t1
SELECT 中奖
BROWSE

*!* 抽一等奖,3
SELECT TOP 3 身份证,姓名,RAND() as 随机 FROM 名单 WHERE 身份证 NOT in (SELECT 身份证 FROM 中奖) ORDER BY 随机 INTO CURSOR t1
INSERT INTO 中奖(身份证,姓名,等奖) SELECT 身份证,姓名,"一等奖" FROM t1
SELECT 中奖
BROWSE
2021-08-19 12:56
XUFN
Rank: 2
等 级:论坛游民
威 望:4
帖 子:35
专家分:28
注 册:2009-1-18
收藏
得分:3 
**随机产生人员记录编号,编号是不重复的**

Re_Rand=.T.
Do While Re_Rand=.T.
   For Ivalue=1 To M_Prize_ShowPeople &&一次抽取几个人中奖
       Rand_Value(Ivalue)=Int(1+People_Total*Rand())
       Add_Rand_Value=Add_Rand_Value+"["+Alltrim(Str(Rand_Value(Ivalue)))+"]"
   Endfor
   For Each C  In Rand_Value
       If Occurs("["+Alltrim(Str(C))+"]",Add_Rand_Value)> 1 &&说明有重复
          Add_Rand_Value=""
          Re_Rand=.T.
          Exit
        Else
          Re_Rand=.F. &&一次抽取的这几个人不重复,退出Rand()
       Endif      
   Endfor
Enddo

这是一段本人很早很早以前编写的一个抽奖程序的一段代码,可以参考

[此贴子已经被作者于2021-8-19 13:46编辑过]

2021-08-19 13:42
快速回复:利用VF9.0完成“摇号”怎样实现?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015990 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved