[摘要]以春节联欢晚会电视节目手机号码抽奖为例,介绍利用Visual Basic2005设计电视节目手机号码抽奖程序的步骤和关键技术。
[关键词]VisualBasic2005 手机号码 电视抽奖
中图分类号:TP3文献标识码:A文章编号:1671-7597(2009)0510021-02
近年来,各地电视台为了增进节目与观众的互动,在节目中设置了用手机和小灵通参与节目短信投票活动,在节目举行到高潮时,邀请抽奖嘉宾开启手机号码抽奖,屏幕不停翻滚手机号码,当停止抽奖时屏幕显示中奖手机号码。本文通过一个春节联欢晚会电视节目抽奖程序为例(程序运行结果如图1所示),介绍了利用Visual Basic2005设计手机号码抽奖程序的步骤和关键技术。
一、电视节目手机号码抽奖程序的特点
电视节目手机号码抽奖程序有下列特点:(1)电视节目抽奖程序力求界面友好,窗体无标题栏和无关控件,程序操作方法要简单,当按空格键实现抽奖启动与停止;(2)手机号码数据由电信营运商提供,可能数据量大,每个号码都要有平等的机会参与抽奖,号码翻滚速度适中,翻滚的号码数据要作隐私保护(屏蔽中间4位数字),对抽中的号码要锁定并记录到数据库中。
二、电视节目手机号码抽奖程序设计
(一)程序界面设计和数据库设计
电视抽奖时一般同时会显示出几组手机号码数据,用组框(Groupbox)
控件对号码进行分组,一个手机号码有11位数字,用11个标签分开显示,本例有4组号码需要44个标签控件(第一组命名label101~label111,第二组label201~label211,其他组依此类推)。设置窗体的边框样式FormBor
DerStyle为None,实现抽奖程序运行无标题栏。设置窗体的WindowsState
属性为Maximized,实现抽奖程序运行时最大化。
考虑到手机号码数据量大和数据库表的可扩充性,选用SQL Server20
05作为手机抽奖数据库。在SQL Server环境下建立一个名为Mobile_Lotter
Y的数据库,然后建立两张数据表:(1)TphoneNumber存储待抽取的手机号码;(2)TselectedNumber存储已经抽中的手机号码。两张表都含有(Phone
Number varchar(11))字段,表示11位手机号码。
(二)数据访问技术的实现
程序中多处要访问数据库,考虑到VB2005访问SQL Server数据库的简便性,特设计一个数据库操作类CDBOperation,在类下面定义一个共享函数DBOperate()对数据库进行操作。
Public Class CDBOperation
Shared Function DBOperate(ByVal SQLString As String) As DataTable
Try
Dim SconString As String
SconString = "Data Source=(local);Initial Catalog=Mobile_Lottery;Integrated Security=SSPI"
'连接SQL Server数据库
Dim myconn As New SqlConnection
myconn.ConnectionString = SconString
myconn.Open()
Dim myComm As New SqlCommand(SQLString, myconn)
If InStr(SQLString.ToUpper, "INSERT") > 0 Or InStr(SQLString.ToUpper, "DELETE") Or InStr(SQLString.ToUpper, "UPDATE") Then '增加、删除、更新操作
myComm.ExecuteNonQuery()
myconn.Close()
Else'查询操作
myComm.ExecuteNonQuery()
Dim mydataset As New DataSet
Dim mydataApater As New SqlDataAdapter
mydataApater.TableMappings.Add("Table", "Temp")
mydataApater.SelectCommand = myComm
mydataApater.Fill(mydataset)
myconn.Close()
Return mydataset.Tables("Temp")
End If
Catch ex As SqlException
MsgBox(ex.Message)
End Try
End Function
End Class
为了避免从数据库频繁读写数据,影响抽奖程序的运行速度,在窗体启动事件中事先把手机号码数据一次性读入到全局内存数据表(mytable) 中,抽奖进行中直接从mytable中抽取,不需要频繁访问数据库。
Private Sub frmPhonenumber_Load( …… )
mytable = CDBOperation.DBOperate("select * from TPhoneNumber")
'读手机数据库到全局内存数据表mytable中。
Nend = mytable.Rows.Count1'全局变量Nend记录手机号码总条数
End Sub
(三)当按空格键开始抽奖,再按空格键停止抽奖并锁定抽中号码的程序设计
空格键是键盘中最长的一个键,如果用它来控制抽奖的启停,就会给操作软件带来方便,在程序中要设法捕捉按下空格键所触发的事件。按键按下时都会触发keypress事件,该事件传递被按键的ASCII码值,在窗体的keypress事件捕捉按下的键值,从而对程序进行控制。空格键的ASCII值是32,根据按键值e.keychar来测试是否按了空格键。程序界面设计时,计时器控件Enabled属性设置为False,即初始时未自动进行抽奖必须按空格键开始抽奖,然后按空格键停止抽奖。
Private Sub frmPhonenumber_KeyPress(……)
If Asc(e.KeyChar) = 32 Then
Timer1.Enabled = Not Timer1.Enabled
'一反一复式控制
End If
在窗体的KeyPress事件中,要测试计时器timer1.Enabled属性,如果其值为不可用(False),表明己经停止滚动(即抽中了号码),要锁定抽奖号码,把抽中的号码放到TselectedNumber表中保存,然后删除TphoneNumber表中相应的号码。
If Timer1.Enabled = False Then
Dim i As Integer
For i = 1 To 4
CDBOperation.DBOperate("insert into TSelectedNumber(PhoneNumber) values('" & WinningNumbers(i) & "') ") '把抽中的号码放到TselectedNumber表
CDBOperation.DBOperate("delete from TPhoneNumber where PhoneNumber='" & WinningNumbers(i) & "'")'删除TphoneNumber表中抽中的号码
Next
End If
(四)实现电脑屏幕不停翻滚加以隐私保护的手机号码
实现电脑屏幕不停翻滚手机号码数据,可设置计时器触发周期(滚动频率)Interval属性(单位毫秒,建议设为10,每秒钟触发100次)让计时器timer1每隔Interval周期不停地执行滚动号码。为了让每个号码都有平等的机会参与抽奖,采用随机数抽取内存数据表中的手机号码。设Nbegin起始数字,Nend表示终止数字,可以利用随机数公式n = Int(Rnd() *(Nend-Nbegin+1)+Nbegin)产生[Nbegin,Nend]的随机数,然后利用产生的随机数作为序号读取内存表mytable中相应的数据行到TempNumbers。从内存表中读取的数据是11位的手机号码,如果直接全部显示出来,会泄露手机用户的隐私,有必要对手机号码进行保护,具体的方法是只取TempNumbers串的前3位和后4位字符,中间4位的四位在界面设计时用“×”代替。
Dim i, Nbegin, n As long
Nbegin = 0
n = Int(Rnd() * (Nend - Nbegin + 1) + Nbegin)
'产生[Nbegin,Nend]之间的随机数
TempNumbers = mytable.Rows(n).Item("PhoneNumber")
'读内存数据表相应的行
WinningNumbers(1) = TempNumbers
'取TempNumbers串的前3位和后4位字符放到标签控件
label101.Text = Mid(TempNumbers, 1, 1)
Label102.Text = Mid(TempNumbers, 2, 1)
Label103.Text = Mid(TempNumbers, 3, 1)
Label108.Text = Mid(TempNumbers, 8, 1)
Label109.Text = Mid(TempNumbers, 9, 1)
Label110.Text = Mid(TempNumbers, 10, 1)
Label111.Text = Mid(TempNumbers, 11, 1)
其它组按第一组的相同的方法设计代码。
三、结束语
通过以上的分析,电视节目手机号码抽奖并不是那么神秘、那样复杂,只要我们富于丰富的想像力,就能够设计出符合需求的各种电视节目手机号码抽奖程序。
此程序在Windows xp、Visual Basic 2005、SQL Server2000环境下测试通过。
参考文献:
[1]岂兴明、矫津毅、银华强,Visual Basic.Net 项目开发宝典[M].电子工业出版社,2007.
[2]丁爱萍,Visual Basic2005程序设计[M] 人民邮电出版社,2008.
作者简介:
包宋德,湖南衡阳人,湖南娄底职业技术学院系统分析师,湖南大学在读软件硕士,研究方向:软件技术。