用VB設計“投票評選”程序的簡單方法

發表于:2007-05-25來源:作者:點擊數: 標簽:設計方法程序投票評選簡單
簡介: 正逢2005年年末,國內各媒體都掀起了2005年度XXXX投票評選的熱潮,就拿 CC TV央視來說,各種命題的投票評選活動就不下十多項;對這樣題目在編程中如何實現呢?我想主要從三個方面入手;第一,解決好參加評比候選人數據裝入;第二,采集好投票人有效點
 簡介:

  正逢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控件代碼

clearcase/" target="_blank" >cccccc" width="90%" align="center" bgcolor="#e3e3e3" border="1">
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 & ")"
 Next J
 '--更新A05_start表1的內容
 '--V_sum1為視圖文件其格式:Select 姓名 Sum(票數) AS "票數" From A05_Piao Where flag is Null GROUP
By 姓名
 mConn.Execute " Update A05_start Set A05_start.票數 = A05_start.票數 + V_sum1.票數 From
 A05_start,v_sum1 Where A05_start.姓名 = V_sum1.姓名 "
 mConn.Execute " Update A05_piao Set flag=1" '參與過的標記
 Call A_abc '記票后清除各個數組及變量供采集數據用
 lstFields.Clear '記票后清空ListBox控件。
 Call p_abc '記票后重新裝入20位候選人物信息
 Text1.Text = "" '記票后清空“身份證”輸入框中信息
 lstFields.SetFocus '記票后焦點移到ListBox中
End Sub

  4.界面的設置程序代碼

  <1>.投票窗體設置,窗體名:FrmXP

Option Explicit
 Dim mConn As ADODB.Connection
 Dim RS As New ADODB.Recordset
 DIM StrCnn As String '連接字符串
 Dim A_name() As String '定義姓名數組
 Dim A_No() As Integer '定義編號數組
 Dim A_TF() As String '邏輯值判斷(鼠標的點擊過程)
 Dim I, J, P,P1 As Integer

  <2>.數據庫的連接

Private Sub Form_Load()
 Set mConn = New Connection
 StrCnn="Provider=SQLoledb;DataSource=USER2;Userid=sa;pwd=;Initial atalog=My_data"
 mConn.CursorLocation = adUseClient '設置為客戶端
 mConn.Open StrCnn
 Call p_abc '此過程為裝入“候選20位”數據
 Call A_abc '此過程清空各個數組及變量采集數據用
End Sub

  <3>.使用控件清單

  標簽控件2個,命令按鈕控件4個,文本框控件1個,列表框控件1個。

  <4>.模塊的主要"引用"

  VB和SQL Server2000下模塊引用[ADO]:Microsoft ActiveX Data Object 2.6 Library

  三、對【結果】【重填】【看圖片】按鈕的說明

  1.【結果】按鈕下將調用“前八名結果”圖形窗體

frm_GRP.show vbmodal

  此界面的代碼比較簡單,即:將獲取票數前八名的候選人物姓名和票數裝入到Mschart控件,以直方圖形式體現,圖形為動態(隨票數而變化),圖形窗體與程序代碼略掉。

  2.【重填】主要清空身份證文本框和重新將20位候選人數據裝入。

  3.【看圖片】按鈕下將調用“20位中國經濟年度人物”圖片窗體 如圖2所示

frm_Pic.show vbmodal

  此窗體是將“中國經濟年度人物”姓名和圖片數據讀到frm_Pic界面的控件中,以下三種:

  圖像Image(0...19);

  圖片框picture(0…19);

  標簽label2(0..,19)控件;

  在數據庫表1的循環中,將圖片數據和姓名裝入到符合其下標的控件中,請見如圖2所示,此處代碼較長,故略掉。


圖片2

  四、 編后語

  用VB設計"投票評比"程序的簡單方法中,關鍵要思路清楚、考慮周到、設計合理到位。首先,做到文中表1與表2數據關系準確(基于數據采集的準確上)。其次,讓參與投票的人士在操作程序上感到方便,快捷。最后,在設計類似程序時一定要理論聯系實際,結合你現場的具體環境,抓好整個流程的關鍵環節、以點代面、活學活用、讓參與投票使用者都喜歡。

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97