Board logo

標題: [教學] (實戰專題) 自動化票選程式 票選使用介面篇 [打印本頁]

作者: 小誌    時間: 2010-5-24 00:07     標題: (實戰專題) 自動化票選程式 票選使用介面篇

當我們在『自動化票選程式』之『管理介面』中,更動了票選項目,將影響我們票選『使用介面』的程式網頁顯示內容,為了因應管理介面對票選項目變動的可能性,我們在使用介面的程式設計時是不可以使用固定欄位抬頭的顯示方式!也就是說當我們要讀取資料庫資料時必須採用『Fields集合物件』的觀念來存取欄位資料。

 關於預防重複投票的方法我們乃是使用Cookies物件的方式來設計,預防重複投票的方法原理請參考筆者之前所發表之範例「線上票選」,本範例示範的重點為配合『管理介面』中更動票選項目後『使用介面』的程式網頁如何因應的程式設計方法!!

投票程式網頁
使用者介面的組成共分為二個部分!
vote3.asp:用來顯示目前的票選結果以及進行投票動作的程式機制,votesave3.asp:進行儲存新投票結果的程式機制,當然還有一個資料庫,不過這個資料庫與管理介面使用的是同一個。我們先來看看投票程式網頁程式設計的變動部分:

計算總投票數
 我們之前計算總投票數的方式是資料錄中所有的欄位值加總起來,而且是以欄位抬頭為讀取欄位值的依據,如下圖綠色部分程式敘述:

[attach]845[/attach]

可是現在我們的票選程式是可以隨時改變票選項目(也就是原來的欄位抬頭),同時資料庫的設計方式也由橫向格式改為直向的設計方式,如下圖!

[attach]846[/attach]

因此,我們要計算總投票數必須改用下列方式:


[attach]847[/attach]
作者: 小誌    時間: 2010-5-24 00:11

設定票數長條圖圖片顯示寬度
 在得到總投票人數的數據資料後,接著就是進行票選圖形型的顯示寬度設定,如下圖所示。

[attach]848[/attach]



計算出各個票選項目圖片寬度值後,利用For--Next迴圈的方式配合HTML表格標籤敘述來建立票選按鈕、輸出票選項目名稱與得票圖形及目前票數,見下圖。

[attach]849[/attach]




提示:



Vote3.asp
  1. <%
  2. er=Request.Cookies("er")
  3. IF err="" then err=empty
  4. '建立資料庫連結物件
  5.         Set conobject = Server.CreateObject("ADODB.Connection")
  6.         DBPath = Server.MapPath("vote.mdb")
  7. '連結資料庫       
  8.         conobject.Open "Driver={Microsoft Access Driver (*.mdb)};DBQ="&DBPath
  9. '建立資料庫存取物件       
  10.         Set RS=Server.CreateObject("ADODB.Recordset")
  11. '打開資料表       
  12.         RS.Open "Select * from student",conobject,1,1
  13.        
  14. '計算總投票數
  15. Rs.MoveFirst       
  16. VotePeople=0
  17. For Itemline=0 To Rs.recordcount-1
  18.       For Item=0 To Rs.Fields.Count-1
  19.        VotePeople=Votepeople+Rs.Fields(1).Value
  20.       Next
  21.           Rs.MoveNext
  22.           If Rs.Eof Then Exit For
  23. Next          
  24. '設定得票率圖表寬度
  25. Rs.MoveFirst
  26. Dim linelong(4)
  27. For Itemline=0 To Rs.recordcount-1
  28.       For Item=0 To Rs.Fields.Count-1
  29.                         IF Votepeople+Rs.Fields(1).Value >0 Then
  30.                                 linelong(Itemline) = 500*Rs.Fields(1).Value/VotePeople
  31.                         End If
  32.       Next
  33. Rs.MoveNext
  34. If Rs.Eof Then Exit For
  35. Next               

  36. '投票檢查
  37. IF Request.Cookies("checkvote")="yes" then
  38. msg="你已經投過票了!只能觀看投票結果!"
  39. VoteButton="no"

  40. ElseIF er="yes" Then
  41. Response.Cookies("er")="no"
  42. msg="之前的投票無效,請選擇一位候選人重新投票"
  43. VoteButton="yes"

  44. Else
  45. Response.Cookies("checkvote")="yes"
  46. msg="你的一票選模範生"
  47. VoteButton="yes"
  48. End IF
  49. %>
  50. <CENTER>
  51. <P><img border="0" src="logo.gif"><br>
  52. <font color="#0000FF"><%=msg%></font></P>
  53. <form method="POST" action="votesave3.asp">
  54.   <table border="1">
  55.     <tr>
  56.       <td bgcolor="#FF3399"><font color="#FFFFFF">圈票處</font></td>
  57.       <td bgcolor="#FF3399"><font color="#FFFFFF">候選人</font></td>
  58.       <td bgcolor="#FF3399"><font color="#FFFFFF">得票數</font></td>
  59.     </tr>
  60.      <%   

  61. Rs.MoveFirst
  62. For Itemline=0 To Rs.recordcount-1
  63.       Response.Write "<TR>"
  64.              Response.Write "<TD><input type=radio name=vote  value=" & Itemline & "></TD>"
  65.              Response.Write chr(10)
  66.              Response.Write "<TD>" & Rs.Fields(0).Value & "</TD>"
  67.              Response.Write chr(10)
  68.         Response.Write "<TD><img border=0 src=vote.gif Height=5 Width=" & linelong(Itemline) & ">"
  69.              Response.Write chr(10)
  70.         Response.Write Rs.Fields(1).Value & "票</TD>"
  71.              Response.Write chr(10)
  72.       Response.Write "</TR>"
  73.           Rs.MoveNext
  74.           'If Rs.Eof Then Exit For
  75. Next          
  76.    
  77.     %>
  78.   </table>
  79. <%IF VoteButton="yes" then %>
  80. <p><input type="submit" value="投下神聖的一票"></p>
  81. <% End IF %>
  82. </form>
  83. </CENTER>
複製代碼

作者: 小誌    時間: 2010-5-24 00:17

存取特定資料錄
當我們開啟資料庫資料表後,目前作用中的資料錄位置就會是在第一筆資料上,那如果我們要讀取的資料位置在第50筆資料錄上,哪怎麼辦?基礎的解決方式是利用MoveNext方法將作用中的資料錄位置一筆一筆的往下移動,但是,有一個更簡便的方法:使用AbsolutePosition屬性,AbsolutePosition屬性可以立即將我們作用中的資料錄位置移動指定比數的資料上,其使用格式如下。

[attach]852[/attach]

注意:


投票結果儲存程式
投票結果儲存程式『votesave3.asp』,在本程式中完全沒有網頁資料的顯示,本程式只負責將投票程式網頁中所傳送過來的投票資料資料更新到資料庫中,然後將連結轉向回投票程式網頁。

[attach]851[/attach]

將接收來自投票程式網頁中表單所傳送過來的投票資料值(vote變數的值),作為Select Case 敘述的比對依據。



Votesave3.asp
  1. <%
  2. '判斷是否有正確投票
  3. vote=Request("vote")
  4. IF vote=empty then
  5. Response.Cookies("er")="yes"
  6. Response.Cookies("checkvote")="no"
  7. Response.Redirect "vote3.asp"
  8. Else
  9. Response.Cookies("checkvote")="yes"
  10. '建立資料庫連結物件
  11.         Set conobject = Server.CreateObject("ADODB.Connection")
  12.         DBPath = Server.MapPath("vote.mdb")
  13. '連結資料庫       
  14.         conobject.Open "Driver={Microsoft Access Driver (*.mdb)};DBQ="&DBPath
  15. '建立資料庫存取物件       
  16.         Set RS=Server.CreateObject("ADODB.Recordset")
  17. '打開資料表       
  18.         RS.Open "Select * from student",conobject,1,3
  19. '更新投票結果        
  20. Select case vote
  21.         case 0
  22.                  RS.absoluteposition=1
  23.                  Rs(1)=Rs(1)+1
  24.         case 1
  25.                  RS.absoluteposition=2
  26.                  Rs(1)=Rs(1)+1
  27.         case 2
  28.                  RS.absoluteposition=3
  29.                  Rs(1)=Rs(1)+1
  30.         case 3
  31.                  RS.absoluteposition=4
  32.                  Rs(1)=Rs(1)+1
  33.     case 4
  34.                  RS.absoluteposition=5
  35.                  Rs(1)=Rs(1)+1
  36. end Select
  37. RS.UPdate
  38. End If
  39. Rs.Close
  40. Conobject.Close
  41. Response.Redirect "vote3.asp"

  42. %>
複製代碼
雖然這個程式可以執行,但是還是有一個缺點呦!這個缺點由您來發現,發現後寫個E-mail給小誌,還要告訴小誌你的解決辦法喔!第一個告訴小誌的,我會刊登在網站上,然後A一份禮物給你(因為小誌沒財力,所以只好……呵)。


(實戰專題) 自動化票選程式 票選使用介面篇完整範例壓縮檔:[attach]853[/attach]




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)