在线急等asp抽奖问题?高分求教!

gych_18 2009-09-08 09:29:59
问题:
1、每次抽奖出现重复,好比在10个数中第一次抽了个1,第二次如何避免在次抽到1,只在2-9中抽奖!

2、好比一次抽奖抽10个数,但这10个数有重复,如何避免?


代码如下:
<HTML>
<HEAD>
<TITLE> 模拟摇奖 </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
<style>


.STYLE1 {font-size: 16pt}
.STYLE2 {
color: #FF0000;
font-weight: bold;
font-size: 24px;
}
.STYLE3 {font-size: 12pt}
.STYLE4 {color: #FF0000; font-weight: bold; font-size: 36px; }
</style>

</HEAD>

<BODY>
<%
connstr="Driver={SQL Server};server=127.0.0.1;database=pubs;uid=sa;pwd=;"
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open connstr
Set rs= Server.CreateObject("ADODB.RecordSet")


%>

<% dim sql,rs,strList
sj_tj=0

sql="select phone from authors "


set rs=conn.execute(sql)
if not rs.eof then
do while not rs.eof
strList = strList&","&rs("phone")
rs.movenext()
loop
end if
rs.close

set rs=nothing
conn.close
strList =mid(strList,2,len(strList)-1)
%>


<table width="80%" border="0" align="center" cellpadding="20" cellspacing="0">
<form name="formXW" id="formXW" method="post">
<tr>
<td align="center" ><p class="STYLE4"></td>
</tr>
<tr>
<td >
<div align="right"></div>
</td>
</tr>
</form>
<tr>
<td align="center" valign="middle">
<strong>摇奖组数:
<input type='text' value='3' style='width:100px;' id='threadnumber'/>
</strong> 
<button id='confirmthread' class="STYLE1">确 定</button>    
<button class="STYLE1" id='cmd_execute'> 开始摇奖 </button>
</td>
</tr>
<tr>
<td align="center" valign="middle" id='randmizecontainer' style='font-size:20px;font-weight:bolder;'></td>
</tr>
<tr>
<td align="center" valign="middle"><div id='awardnumber'></div></td>
</tr>

</table>

<form id="form1" name="form1" action="cjjg.asp" method="POST">
<div align="right">
<p align="right"> </p>
<p align="center">
<!-- 把从数据库读出的数据放到这里来 -->
<input type="hidden" name="NoUser" id="NoUser" value="<%=strList%>">
<%
'response.write "显示:"&strList
'"&dateb&"' and '"&datee&"'"
%>
<input name="dateb" type="hidden" id="dateb" value="<%=dateb%>" size="40">
<input name="datee" type="hidden" id="datee" value="<%=datee%>" size="40">
<input name="cjfw" type="hidden" id="cjfw" value="<%=sql%>" size="40">
<input name="cjsz" type="hidden" id="cjsz" value="" size="40">
<input name="cjsz_sl" type="hidden" id="cjsz_sl" value="" size="40">
<input name="cjjg" type="hidden" id="cjjg" value="" size="40">
</p>
<p>
<SCRIPT LANGUAGE="JavaScript">
<!--
// Power By Bluedestiny
function $(obj) {return document.getElementById(obj);}
function rollaward() {};

rollaward.awardnum=null;
rollaward.total=1000;//摇奖的数组最大下标
rollaward.rollspeed=10;//摇奖速度
rollaward.threadnum=3;//默认线程数

rollaward.count=0;
rollaward.threadnumArray=[];
rollaward.rndnumArray=[];
rollaward.rndidArray=[];
rollaward.awardArray=[];
//-------------分析从数据库中读出的数据
var strUserNo = document.getElementById("NoUser");
var strList = strUserNo.value;
var strSplit = strList.split(",");
rollaward.total = strSplit.length;
//------------------------------------------
rollaward.initialize=function() {
for(var i=0;i<rollaward.total;i++)
{
rollaward.awardArray[i]=strSplit[i];
}
for(var i=0;i<rollaward.threadnum;i++)
{
var div=document.createElement('DIV');
div.id='randmizenum'+i;
div.innerHTML='000000000000';
div.runtimeStyle.border='20px solid red';
<!-- 例如这一次摇3组 三组边框的颜色!border= -->
div.runtimeStyle.width='400px';
div.runtimeStyle.margin='5px 0px 5px 0px';
<!-- 例如这一次摇3组 三组之间的间隔!margin= -->
$('randmizecontainer').appendChild(div);
rollaward.rndidArray[i]='randmizenum'+i;
}

}
rollaward.confirmthreadnum=function() {
rollaward.removethreadnum();
rollaward.threadnum=parseInt($('threadnumber').value);
rollaward.initialize();
<!-- event.srcElement.disabled=true; -->
}
rollaward.removeinterval=function()
{
for(var i=0;i<rollaward.threadnum;i++)
clearInterval(rollaward.threadnumArray[i]);
}
rollaward.removethreadnum=function()
{
for(var i=0;i<rollaward.threadnum;i++)
if($('randmizenum'+i))$('randmizenum'+i).removeNode(true);
}
rollaward.start=function() {
if(rollaward.total==0)
{
rollaward.removeinterval();
return;
}

for(var i=0;i<rollaward.threadnum;i++)
{
rollaward.rndnumArray[i]=parseInt(Math.random()*(rollaward.total));
$('randmizenum'+i).innerHTML=rollaward.awardArray[rollaward.rndnumArray[i]];
}

$('cmd_execute').value='停止摇奖';
}
rollaward.stop=function() {
rollaward.removeinterval();
rollaward.count++;
$('awardnumber').innerHTML+=' ' + rollaward.count + '等奖 中奖号码:'
$('cjsz').value+= rollaward.count +',';
$('cjsz_sl').value+=rollaward.threadnum+',';
$('awardnumber').innerHTML+='<br/>';
for(var i=0;i<rollaward.threadnum;i++)
{
$('awardnumber').innerHTML+=rollaward.awardArray[rollaward.rndnumArray[i]]+' ';
$('awardnumber').innerHTML+='<br/>';
$('cjjg').value+=rollaward.awardArray[rollaward.rndnumArray[i]]+',';
}
$('awardnumber').innerHTML+='<br/>';
$('cmd_execute').value='开始摇奖';

for(var i=rollaward.awardnum;i<rollaward.total;i++)
rollaward.awardArray[i]=rollaward.awardArray[i+1];
rollaward.total--;
rollaward.awardArray.length--;
}
function _click()
{
if(event.srcElement.value=='开始摇奖')
{
for(var i=0;i<rollaward.threadnum;i++)
rollaward.threadnumArray[i]=setInterval(rollaward.start,rollaward.rollspeed)
}
else
{
rollaward.stop();
}
}
function _unload()
{
rollaward.removethreadnum();
}
rollaward.initialize();
$('cmd_execute').attachEvent('onclick',_click);
$('confirmthread').attachEvent('onclick',rollaward.confirmthreadnum);
window.attachEvent('onbeforeunload',_unload);
//-->
</SCRIPT>
</p>
</div>
</form>

</BODY>
</Html>
...全文
168 点赞 收藏 22
写回复
22 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
gych_18 2009-09-11
代码确实不是我写的,但我也确实是来学习的,JavaScript我也看不懂,所以才来请教!
回复
gych_18 2009-09-09
我知道这个原理,可是代码怎么写啊!大哥
回复
renzaijiang 2009-09-09
抽风好了
回复
Sean918 2009-09-09
唉 。。。 又是一个把 CSDN 当作业抄袭基地的孩子。。。

看看上面的代码,再看看楼主说的话。。。

很明显这个代码不是自己写的!
回复
hongmaohouzi 2009-09-08
可以将已经出现过的号码存起来,下次跳出这个号码,就自动跳过,确保每次的号码都是不一样的。
回复
gych_18 2009-09-08
在线急等高手解答!拜谢!
回复
gych_18 2009-09-08
楼上的lihui_shine老师你好!您写的这个实例倒是这个意思,可是对应我这个实例该怎么做呢,JavaScript我真不知道该怎么着手!忘再伸援手!
回复
gych_18 2009-09-08
楼上的大哥能写个实例吗?
回复
浪尖赏花 2009-09-08
做了个例子
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>test</title>
<script>
var arr = [1,2,3,4,5,6,7,8,9,10];
function getRand(){
if(arr.length==0){
alert("摇奖完毕!");
return;
}
var i = Math.floor(Math.random()*arr.length);
alert("您摇到"+arr[i]);
arr = arr.slice(0,i).concat(arr.slice(i+1,arr.length));
}
</script>
</head>

<body>
<input type=button value="get rand" onclick="getRand()">
</body>

</html>
回复
sayfree 2009-09-08
定义一个数组,把抽出来的数同时写进数组,
下次得到随机数,判断数组里面是否存在,如果存在立即重新随即抽数,不过数组里不存在,就表示不重复。
回复
gych_18 2009-09-08
希望知道答案的朋友,能不辞辛苦,写个实例!谢谢!我对JavaScript不是很懂!
回复
liuwei_IT_love 2009-09-08
创建一个随机函数randomize,单击开始,调用这个随机函数,就像验证码,每次刷新都不一样
回复
凡夫与俗子 2009-09-08
俺也不会。顶下
回复
gych_18 2009-09-08
老大我就是不知道如何移除,跪求真经,拜谢!
回复
浪尖赏花 2009-09-08
定义一个数组,放1-10,抽取是从这个数组中抽,抽中的从该数组中移除,下次再抽就不会有了
回复
三楼の郎 2009-09-08
[Quote=引用 2 楼 gych_18 的回复:]
定义一个数组,放1-10,抽取是从这个数组中抽,抽中的从该数组中移除,下次再抽就不会有了
[/Quote]

[Quote=引用 2 楼 gych_18 的回复:]
老大我就是不知道如何移除,跪求真经,拜谢!
[/Quote]

第一次从1-10里随机抽取1个,然后把抽出来的那个和第10个互换,第二次再从1-9里随机抽取1个,然后把抽出来的那个和第9个互换,第三次再从1-8里随机抽取一个,然后再把抽出来的那个和第8个互换,循环下去直到取够数量。

这种方法可以保证不会取到重复的!
回复
gych_18 2009-09-08
难道我给出的这个程序就这么难,没人能修改的了吗?

希望知道答案的老师,能给出正解答案,小弟太笨,实在修改不了!
回复
number123456 2009-09-08
以上只是得出一组不重复的1-9数字组合,和你的代码没关系
你可以跟据你的需求,加入到人的程序代码中
回复
gych_18 2009-09-08
小弟还是不明白!请针对我的代码详细说明注释一下好吗?我该如何修改!小弟不胜感激!急等!

回复
number123456 2009-09-08
set Rand = CreateObject( "Scripting.Dictionary" )
Rand.add 1,1
Rand.add 2,2
Rand.add 3,3
Rand.add 4,4
Rand.add 5,5
Rand.add 6,6
Rand.add 7,7
Rand.add 8,8
Rand.add 9,9

for i = 1 to 9
RandIndex = RndNumber(Rand.Count,1)

Rands = Rand.Items()
RandKey = Rand.Keys()
Response.write(Rands(RandIndex-1))'输出本次的数
GetKey = RandKey(RandIndex-1)'获得键值
'Response.write "{"&RandIndex&"}"
Rand.Remove(GetKey)'从对像中删除该值

Next
Function RndNumber(MaxNum,MinNum)
Randomize
RndNumber=int((MaxNum-MinNum+1)*rnd+MinNum)
RndNumber=RndNumber
End Function


己经测试过
回复
加载更多回复
发帖
ASP
创建于2007-09-28

2.8w+

社区成员

ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
申请成为版主
帖子事件
创建了帖子
2009-09-08 09:29
社区公告
暂无公告