找回密码
 注册
搜索
热搜: 超星 读书 找书
查看: 364|回复: 0

[【推荐】] 幸运观众是如此诞生的

[复制链接]
发表于 2010-3-15 02:04:27 | 显示全部楼层 |阅读模式
电视中的幸运观众是如何抽取的?其实抽取幸运观众的软件是利用随机函数制作的,该软件的用途还可以扩展,可以改造成抽奖软件,年终将至,它可以在公司员工抽奖活动中派上用场。
   周末在家的时候,我喜欢看“同一首歌”、“武林风”、“天地英雄”之类的休闲节目。最近我对节目中的抽取幸运观众产生了兴趣,研究了一下抽取的原理。我首先想到的就是,抽取的原理应该是用了随机函数,跟我以前开发过的彩票辅助软件原理是相同的,很多高级语言都支持随机函数,例如VB、C、Delphi等,所以开发的语言选择性比较大。
  其次,我考虑的是短信平台的问题。从观众发的短信中提取手机号码,然后显示出来,这肯定要用到数据库。再次,此类软件还可以改造一下。目前临年终也不远了,各种年终宴会也会举行,员工抽奖也可以用此类软件。
  在活动开始前,我们把参与活动的人员的手机号码或者座位号录入数据库中,然后在活动过程中分时间段抽奖。有些活动有外单位的贵宾参与,就要特殊考虑了,总得给贵宾面子吧,让他们也中奖一下。
  我的构想是在程序中作弊,设定当第四次或者第五次产生幸运儿时,不再使用随机函数,而强制指定贵宾的手机号码或者座位号。下面,我先教大家开发抽奖软件的基本功能(软件下载地址:http://www.shudoo.com/bzsoft),改造的工作就靠大家根据实际情况考虑了。
开发思路
   在Access中建立一张表,用来存储幸运观众的手机号码及ID,然后在程序中添加一个录入手机号码的功能(增加一条记录,ID加1),通过窗体录入一定量的手机号码后并存储到数据库中,之后在程序中添加产生幸运观众的功能。
  产生幸运观众是用随机函数产生一个数字,用这个数字去和表中记录的ID对比,如果记录中ID和随机数一致,则取出此条记录的手机号码显示在窗体上,最后根据这个手机号码查询出其归属地并显示出来。
开发步骤
  第一步:建立手机号码数据库
  观众发送手机短信后,手机号码就被写入数据库(我们这里手动输入手机号码),这就需要建立数据库保存手机号码。启动Access,建立表Person_phone,在表下面建立两个字段phone、ID。
  第二步:录入手机号码
  启动Delphi7,新建一个项目。使用Insert语句将手机号码录入数据库。为了避免录入重复的手机号码,在数据库的表中把字段phone设置为主键,或者将欲录入的手机号和数据库中的手机号进行比较,如果有雷同则给出提示,并中止录入。



  小提示:Edit输入框中只能输入1~10的数字,限制输入为数字有多种方法,比如使用函数TryStrToInt、通过判断字符(chChar)是否为数字型等。
  第三步:抽取幸运观众
  点击“开始产生”按钮,所有数据库中的手机号码均在显示框中不停滚动,为了保护幸运观众不被电话骚扰,不显示手机号码中间四位。点击“停止”按钮,产生幸运手机号码,分析手机号码的前七位,就可以得出手机用户的归属地(省市)——手机号码对应地址的数据库可以从网上下载。输入相关代码,其中关键代码如下所示(完整代码下载地址:http://www.shudoo.com/bzsoft):


  while stop do//全局变量stop为真时就不停地执行(滚动效果)
  begin
  randomize;//播下随机种子
  tmpID:=random(ID+1);//这里ID的值为表字段ID的最后一条记录的值
  ADODataSet_W.First;
  for i:=0 to ADODataSet_W.RecordCount-1 do//随机产生的ID与数据库中ID相等时,把对应的手机号码取出来送给变量tmpphone
  Edit1.Text:=tmpphone;//Edit显示变量tmpphone的值,也就是手机号码
  Application.ProcessMessages;//这句话产生了滚动效果
  stop:=false;//滚动停止
  phone:=copy(Trim(Edit1.Text),1,7);//取出手机号码的前七位用于判断手机用户的归属地
  tmpphone:=copy(Trim(Edit1.Text),8,4);//取出手机号码的最后四位
  tmp1:=copy(Trim(Edit1.Text),1,3);// 取出手机号码的前三位
  tmp2:=tmp1+'****'+tmpphone;//显示如\"139****6803\"
  Edit1.Hint:=Edit1.Text;//提示文本显示完整的手机号码
  SQL.Add(&#39;select * from sj where 号码B<=&#39;+phone +&#39; and 号码E>=&#39;+phone);
  Open;
  if RecordCount>0 then
  begin
  area:= &#39;恭喜&#39;+FieldByName(&#39;地区&#39;).AsString+ FieldByName(&#39;城市&#39;).AsString+&#39;手机尾号是&#39;+tmpphone+&#39;的朋友&#39;;
  Label1.Caption:=area;//显示\"恭喜……\"提示
  每次节目做完后需要把所有的记录清除,为下一次节目做好准备,清空所有数据可以使用ADOConnection1.Execute(&#39;delete from Person_phone&#39;)语句。
小编救急
  pcw-chendx@vip.sina.com
  在讲解手机编程时,小编建立了很多开发QQ群,有许多读者朋友在里面交流,其中谈论得较多的是开发过程中碰到的各种问题。为此,小编特意开辟了一个救急板块,无论你开发哪种程序,无论你碰到什么问题,我们都可以给你提供帮助。来信请发到pcw-chendx@vip.sina.com
关键词:斗地主洗牌
  读者来信:QQ斗地主开始前,系统将洗牌,也就是将54张扑克牌打乱,我比较好奇,它是怎么弄的?
  小编:其实所谓的洗牌只不过是一种特殊的算法。我们把54张扑克牌想象为54个不同的人,然后这54个人分别坐在编号为1~54的座位中。第一轮,随机调换2个人的位置,就像小学生换座位一样;第二轮,再随机调换2个人的位置……经过多轮随机调换位置后,扑克牌的顺序就被打乱了,执行的轮数(循环次数)越多,打乱得越彻底。
  for(i=1;i<=500;i++)
  {
  temp1=random(27)+1;
  temp2=random(27)+1;
  a[1]= puke [temp1];
  puke[temp1]= puke [temp[2];
  puke [temp2]=a[1];
  }
关键词:自动导入表记录
  开发QQ群:在MSSQL中,我的表tb_splitcutplan自动接收来自ORACLE的数据记录,接收之后,我需要把这张表的所有记录立即写入l2_splitcutplan表中,并删除表tb_splitcutplan的所有记录,请问有什么方法可以做到?
  小编:在表tb_splitcutplan中增加一个触发器,写入下面代码就可以了。
  CREATE TRIGGER triu_cutplan ON [dbo].TB_SPLITCUTPLAN
  FOR INSERT, UPDATE
  AS
  declare @test char;
  select @test=acceptplan from test;
  if @test = &#39;1&#39;
  begin
  insert into l2_splitcutplan select * from tb_splitcutplan
  end
  delete from tb_splitcutplan
关键词:禁止另存为
  开发QQ群:看了今年第40期的“小编救急”,其中有一个禁止另存为的技巧,该技巧的确有效,但我不想要那个iframe内嵌网页——要运行JavaScript才能达到禁止另存为的目的。工商银行登录页面也有禁止另存为的限制,它又是怎么做的?
  小编:禁止另存为的方法有很多,我们给的是效果最好的,工商银行也用的是同样的代码,不过它进行了额外的处理。它先设计了一个框架,在框架里调用代码。
关键词:邮箱地址
  读者来信:怎么判断邮箱地址是否有效? 没什么要求,ASP或者是JavaScript都可以。
  小编:可以用JavaScript的split函数进行字符串分割,然后将分割后的代码分别进行验证,比较麻烦,网上也有相关代码,最简单的是使用正则表达式进行判断,如在JavaScript代码中加入function isEmail(str){ var reg=/\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*/;return true else return false; },然后用isEmail()进行判断即可。
关键词:Access7
  读者来信:我装了Windows2008、IIS7、Access7,现在问题是怎样用SQL语句连接Access7的数据库?
  小编:将Provider=Microsoft.Jet.OLEDB.4.0;修改成12.0,详细语句如下:Provider=Microsoft.ACE.OLEDB.12.0;Data Source=d:\\web\\database\\myAccess2007file.accdbersist Security Info=False。
关键词:统计访问者
  开发QQ群:我想知道,如何统计网页的访问者数量,其他的我都搞定了,但“你是第X位访问者”这个我还没有弄明白怎么实现。
  小编:需要借助数据库实现,下载一段计数器的代码,然后在同一个文件夹下建立一个txtcounter.txt的文本文件,在里面填上数字,随便什么都行,就从填入的这个数据开始计数。
  

电脑报

介绍了几种常见的随机情形的实现方法,很有意思
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|网上读书园地

GMT+8, 2024-11-18 01:29 , Processed in 0.121388 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表