用VB设计“投票评选”程序的简单方法

2008-02-23 06:39:03来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

简介:

  正逢2005年年末,国内各媒体都掀起了“2005年度XXXX投票评选”的热潮,就拿CCTV央视来说,各种命题的“投票评选”活动就不下十多项;对这样题目在编程中如何实现呢?我想主要从三个方面入手;第一,解决好参加评比候选人数据装入;第二,采集好投票人有效点击次数的相关信息;第三,确保参加评比候选人获票数与投票人的投出票数的一致性。掌握好这三点后,其它问题就会迎刃而解。使用Delphi、PB、VB等语言得到较理想编程设计与实施。

  为了简便起见下面将以“2005CCTV中国经济年度人物评选人气榜”的信息为数据源,把用VB、SQL Server 2000数据库设计“投票评选”程序的简单方法介绍给大家。如图1所示,为“投票评选”窗体界面,下面分三个问题介绍:


图片1

  一、用VB设计“投票评选”程序的流程及要点

  1.2005年参加评比候选人数据的装入

  <1>.在数据库中创建[候选代表获票表-(简称:表1)]和[投票参与表-(简称:表2)]

  表1:A05_Start 数据结构 表2: A05_Piao 数据结构
  表1字段有:[姓名、单位、职务、图片、长度、票数] 记录数:20条。
  表2字段有:[身份、序号、姓名、票数、Flag] 记录数:若干。

  <2>. 将“中国经济年度人物候选人20位”数据装入ListBox控件中在ADO的连接方式下进行SQL Server2000数据库连接;将已经编辑通过的数据源表中所有记录项(包括:姓名、单位、职务)信息,按姓氏笔画为序地读到FrmXP窗体的ListBox控件中,请见如图1所示。

  2.采集好投票评比人有效点击次数的相关信息

  【参与投票为有效】的充分必要条件是①.满10票才算有效投票;②.填入身份证号的位数合法。接收这样的数据信息才视为“有效”,才能记录“在案”。

  <1>.数据采集需简捷明快

  对公众参与操作的程序界面,要允许参与人使用鼠标“可反复地点击[选择],可打“√”可去掉“√”,以最终符合“满10票才算有效投票”为原则。

  在ListBox控件中采集数据据的范围及算法:

  范围:①总点击次数;②.有效点击次数;③.收集候选人姓名;④.收集候选人序

  号;⑤.收集打“√”可去掉“√”状态。

  算法:这里与算法相关项是【②.有效点击次数】如:在姓名前点击:(加上“√”= 真)设置为1;后来在点击过的姓名前:(去掉“√”=假)设置为-1。

  即:【有效点击次数】------初值等于零;

  如果,点击:(加上“√”=真)?有效点击数=有效点击数 1

  如果,点击:(去掉“√”=假)?有效点击数=有效点击数-1

  程序中要求此数据不允许小于10,这样就明确了对参与者出错的提示条件。

  3.确保参加评选的候选人获票数与投票人的投票数的一致性

  在正确数据采集的基础上,确保【获票数】与【投票数】一致性问题能用较简单地利用SQL语句进行处理,可随时显示获票【结果】。

  <1>.审核参与者身份证号合法性,主要包括:旧证(15位)新证(18位)。

  <2>.利用“视图”将每一次有效数据,按“候选人姓名”分组求和,计算出票数。

  <3>.使用SQL语句的更新操作:Update A05_start set 票数=票数 视图.票数 条件:两个表的姓名相等。

  二、用VB设计“投票评选”程序主要代码

  1.将“候选人物20位”数据的装入ListBox控件代码

Sub p_abc()
 RS.Open " Select 姓名,职务,单位From A05_start Order By id", mConn, adOpenStatic
 Dim iSize, iNo As Long
 Dim Lname As String
 iNo = RS.RecordCount
 If iNo = 0 Then
  MsgBox "数据库中的数据项不能为空,请重新设置", vbOKOnly, "信息提示"
  Exit Sub
 End If
 Do While Not RS.EOF
  iSize = 0
  iSize = Len(RS.Fields("姓名"))
  Lname = RS.Fields("姓名")
  lstFields.AddItem Lname Space(2) RS.Fields("单位") RS.Fields("职务")
  RS.MoveNext
  Lname = ""
 Loop
 lstFields.ListIndex = -1
 RS.Close
End Sub
  2.采集数据ListBox控件下的程序代码

Private Sub lstFields_ItemCheck(Item As Integer) '现场采集的过程
 P = P 1 '获取总次数
 A_name(P) = Mid(lstFields.List(lstFields.ListIndex), 1, 3) '获取姓名
 A_No(P) = lstFields.ListIndex '获取序号
 A_TF(P) = lstFields.Selected(lstFields.ListIndex) '获取逻辑值
 If A_TF(P) = "True" Then '获取有效的点击次数
  P1 = P1 1
 Else
  P1 = P1 - 1
 End If
'End Sub
  3.更新“候选人”获票数据的主要程序代码(【投票】按钮下)

Private Sub Command2_Click()
 Dim P_No, lNo As Integer
 Dim P_name As String
 ……
 '此处略掉部分代码,它们主要有:
 ①.判断身份证号(旧15)位或(新18)位
 ②.判断[身份证号]的位数有误的提示
 ③.判断[满10票为有效投票]的提示
 RS.Open " Select * From A05_piao Where 身份='" & Text1.Text & "' Order By id", mConn, adOpenStatic
 lNo = 0
 lNo = RS.RecordCount
 RS.Close
 If lNo > 0 Then
  MsgBox "对不起,您已经投过票,谢谢合作!!!", vbOKOnly, " > 操作信息提示 <"
  Text1.SetFocus
  Exit Sub
 End If
 For J = 1 To P '根据现场采集总次数,将数据插入表2
  If A_No(J) >= 0 Then
   P_name = A_name(J)
   If A_TF(J) = "True" Then
    P_No = 1 '首此点击为 “勾”时为:1
   Else
    P_No = -1 '原已点后去掉“勾”时为:-1
   End If
  End If
  mConn.Execute "Insert Into A05_piao (身份,序号,姓名,票数) VALUES ('" & Text1.Text & "'," & A_No(J) & ",'"
& A_name(J) & "'," & P_No & ")"

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:对VB6的后期绑定和前期绑定的一点看法

下一篇:定时提醒你休息的脚本