网站投票系统!

旧城等待, 2022-05-25 01:54 311阅读 0赞

一、数据库脚本

  1. 需要建立两张表,脚本如下:
  2. create table VoteTitle --投票主题表
  3. (
  4. TitleID int identity primary key,--主题编号
  5. Title varchar(200) not null,--主题信息
  6. SumNumber int default 0,--主题的所有项目投票总数
  7. Mode bit default 0,--0为单选,1为复选,默认为0
  8. Status bit default 0--0表示关闭主题,1为打开主题,默认为0
  9. )
  10. go
  11. insert into VoteTitle(Title,Mode,Status)values('你对我们网站评价如何?',0,1)
  12. insert into VoteTitle(Title,Mode,Status)values('请选择你喜欢的编程语言',0,0)
  13. go
  14. create table VoteItem--投票主题项目表
  15. (
  16. ItemID int identity primary key,--项目编号
  17. Item varchar(200)not null,--项目信息
  18. Number int default 0,--项目的投票总数
  19. TitleID int references VoteTitle(TitleID)on delete cascade on update cascade
  20. --设置级联关系,当对父表中的TtileID进行删除和更新时,会影响子表
  21. )
  22. go
  23. insert into VoteItem(Item,TitleID)values('非常好','1')
  24. insert into VoteItem(Item,TitleID)values('好','1')
  25. insert into VoteItem(Item,TitleID)values('一般','1')
  26. insert into VoteItem(Item,TitleID)values('差','1')
  27. insert into VoteItem(Item,TitleID)values('很差','1')
  28. go
  29. insert into VoteItem(Item,TitleID)values('asp,net web开发语言','2')
  30. insert into VoteItem(Item,TitleID)values('C# 窗体开发语言','2')
  31. insert into VoteItem(Item,TitleID)values('html页面语言','2')
  32. insert into VoteItem(Item,TitleID)values('JS脚本语言','2')
  33. go
  34. create trigger trigger_VoteItem on VoteItem for update--建立触发器
  35. as
  36. begin
  37. if update(Number)--当项目表的投票更新时
  38. begin
  39. update VoteTitle set SumNumber=SumNumber+1 where TitleID=(select TitleID from inserted)
  40. end
  41. end
  42. --触发器结束
  43. go
  44. select * from VoteTitle
  45. select * from VoteItem
  46. go

注意,这里只进行第一个主题的讨论,也就是说默认是让用户对网站进行评价,关于投票选择喜欢语言的主题这里不演示。
表的效果图如下:

1348642910_3597.jpg

二、页面编辑,这里有两张表,第一张是显示投票的页面ShowVote.aspx,第二张是显示投票结果的页面LookVote.aspx

  1. ShowVote.aspx页面的代码如下:
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Web;
  6. using System.Web.UI;
  7. using System.Web.UI.WebControls;
  8. using System.Data.SqlClient;
  9. using System.Data;
  10. namespace VoteSystem
  11. {
  12. public partial class ShowVote : System.Web.UI.Page
  13. {
  14. protected void Page_Load(object sender, EventArgs e)
  15. {
  16. Bind();
  17. }
  18. private void Bind()
  19. { //数据库操作
  20. string str="Server=.;DataBase=Exercise;uid=sa;pwd=;";
  21. SqlConnection conn = new SqlConnection(str);
  22. string sql="select * from VoteTitle where Status=1";
  23. SqlDataAdapter da = new SqlDataAdapter(sql, conn);
  24. DataSet ds = new DataSet();
  25. da.Fill(ds, "TitleTable");
  26. sql = "select *from VoteItem where TitleID=(select TitleID from VoteTitle where Status=1)";
  27. da = new SqlDataAdapter(sql, conn);
  28. da.Fill(ds, "ItemTable");
  29. DataView dv = ds.Tables["ItemTable"].DefaultView;
  30. dv.Sort = "ItemID asc";
  31. //获取主题
  32. lblTitle.Text = ds.Tables["TitleTable"].Rows[0]["Title"].ToString();
  33. //获取启用的主题的Mode来决定是用单选框还是复选框,这里我默认的主题是进行网站评论,那么就默认是RadiobuttonList(即单选框)
  34. bool Mode = Convert.ToBoolean(ds.Tables["TitleTable"].Rows[0]["Mode"]);
  35. hfMode.Value = Mode.ToString();
  36. if (Mode)
  37. {
  38. //表示选择的是复选
  39. CheckBoxList obj = new CheckBoxList();
  40. obj.BackColor = System.Drawing.ColorTranslator.FromHtml("#EDEDED");
  41. obj.ID = "listVoteItem";
  42. obj.Width = 180;
  43. obj.DataSource = dv;
  44. obj.DataTextField = "Item";
  45. obj.DataValueField = "ItemID";
  46. obj.DataBind();
  47. Panel1.Controls.Add(obj);
  48. }
  49. else
  50. {
  51. //表示添加的是单选
  52. RadioButtonList obj = new RadioButtonList();
  53. obj.DataSource = dv;
  54. obj.ID = "listVoteItem";
  55. obj.DataTextField = "Item";
  56. obj.DataValueField = "ItemID";
  57. obj.DataBind();
  58. Panel1.Controls.Add(obj);
  59. }
  60. }
  61. //投票按钮
  62. protected void btnVote_Click(object sender, EventArgs e)
  63. {
  64. string pass = string.Empty;
  65. if (Request.Cookies["pass"] == null)
  66. {
  67. pass = "";
  68. }
  69. else
  70. {
  71. pass = Request.Cookies["pass"].Value.ToString();//读取客户端cookies
  72. }
  73. if (pass == "pass")
  74. {
  75. Response.Write("<script language='javascript'>alert('你每天只能投票一次');history.back();</script>");
  76. Response.End();
  77. }
  78. else
  79. {
  80. string str = "Server=.;DataBase=Exercise;uid=sa;pwd=;";
  81. SqlConnection conn = new SqlConnection(str);
  82. conn.Open();
  83. SqlCommand cmd = new SqlCommand();
  84. cmd.CommandType = CommandType.Text;
  85. cmd.Connection = conn;
  86. bool Mode = Convert.ToBoolean(hfMode.Value);//hfMode是隐藏控件,用于记录Mode
  87. if (Mode)
  88. {
  89. CheckBoxList rb = (CheckBoxList)Panel1.FindControl("listVoteItem");
  90. if (rb.SelectedIndex == -1)
  91. {
  92. Response.Write("<script language='javascript'>alert('你必须至少选择一项!');history.back();</script>");
  93. Response.End();
  94. }
  95. else
  96. {
  97. //表示用户进行了选择
  98. foreach (ListItem item in rb.Items)
  99. {
  100. if (item.Selected)
  101. {
  102. cmd.CommandText = "update VoteItem set Number=Number+1 where ItemID=" + item.Value.ToString();
  103. cmd.ExecuteNonQuery();
  104. }
  105. }
  106. Response.Cookies["pass"].Value = "pass";
  107. Response.Cookies["pass"].Expires = DateTime.Now.AddDays(1);
  108. Response.Write("<script language='javascript'>alert('投票成功!');history.back();</script>");
  109. Response.End();
  110. }
  111. }
  112. else
  113. {
  114. //表示添加的是单选
  115. RadioButtonList rb = (RadioButtonList)Panel1.FindControl("listVoteItem");
  116. if (rb.SelectedIndex == -1)
  117. {
  118. Response.Write("<script language='javascript'>alert('你必须至少选择一项!');history.back();</script>");
  119. Response.End();
  120. }
  121. else
  122. {
  123. //表示用户进行了选择
  124. foreach (ListItem item in rb.Items)
  125. {
  126. if (item.Selected)
  127. {
  128. cmd.CommandText = "update VoteItem set Number=Number+1 where ItemID=" + item.Value.ToString();
  129. cmd.ExecuteNonQuery();
  130. }
  131. }
  132. Response.Cookies["pass"].Value = "pass";
  133. Response.Cookies["pass"].Expires = DateTime.Now.AddDays(1);
  134. Response.Write("<script language='javascript'>alert('投票成功!');history.back();</script>");
  135. Response.End();
  136. }
  137. conn.Close();
  138. conn.Dispose();
  139. }
  140. }
  141. }
  142. //查看按钮
  143. protected void btnLook_Click(object sender, EventArgs e)
  144. {
  145. Response.Redirect("LookVote.aspx");
  146. }
  147. }
  148. }

由于LookVote.aspx页面需要有一些样式布局,毕竟要显示给用户,所以先给出Html代码,代码如下:

  1. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="LookVote.aspx.cs" Inherits="VoteSystem.LookVote" %>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head runat="server">
  5. <title></title>
  6. </head>
  7. <body>
  8. <form id="form1" runat="server">
  9. <div style="height: 382px">
  10. <asp:Label ID="lblInfo" runat="server" Text="lblInfo"></asp:Label>
  11. <br />
  12. <asp:Label ID="lblTitle" runat="server" Text="lblTitle"></asp:Label>
  13. <asp:Repeater ID="Repeater1" runat="server">
  14. <HeaderTemplate>
  15. <table style="color:#333333; text-align:left; border:0 width:90%; background-color:#b18a02;
  16. font-size:12px; font-family:宋体;"
  17. cellpadding="2" cellspacing="1">
  18. <tr style="height:25px; background-color:#FFFFFF; text-align:center;">
  19. <td style="width:50px;"> </td>
  20. <td style="width:170px;">选项</td>
  21. <td style="width:170px;">比例</td>
  22. <td style="width:170px;">票数</td>
  23. </tr>
  24. </HeaderTemplate>
  25. <ItemTemplate>
  26. <tr style="height:25px; background-color:#FFFFFF; text-align:left;">
  27. <td style=" text-align:center;"><%#DataBinder.Eval(Container.DataItem,"ItemID") %>
  28. </td>
  29. <td><%#DataBinder.Eval(Container.DataItem,"Item") %>
  30. </td>
  31. <td><%#DataBinder.Eval(Container.DataItem,"ItemPercent","<img src='Images/1.jpg' height='15' width='{0}'>") %>
  32. <%#DataBinder.Eval(Container.DataItem,"ItemPercent","{0}%") %>
  33. </td>
  34. <td style=" text-align:center;"><%#DataBinder.Eval(Container.DataItem,"Number") %>
  35. </td>
  36. </tr>
  37. </ItemTemplate>
  38. <FooterTemplate>
  39. <tr style="height:25px; background-color:#FFFFFF; text-align:center;">
  40. <td colspan="4">
  41. <asp:LinkButton ID="LinkButton1" runat="server" OnClientClick="javascript:winow.print();return false;">[打印]
  42. </asp:LinkButton>
  43. <asp:LinkButton ID="LinkButton2" runat="server" OnClientClick="javascript:winow.close();return false;">[关闭]
  44. </asp:LinkButton>
  45. </td>
  46. </tr>
  47. </table></FooterTemplate>
  48. </asp:Repeater>
  49. </div>
  50. </form>
  51. </body>
  52. </html>

其中,<%#DataBinder.Eval(Container.DataItem,”ItemPercent”,”“) %> <%#DataBinder.Eval(Container.DataItem,”ItemPercent”,”{0}%”) %>

这个单元格实现了最核心的柱形图的显示。

下面是LookVote.aspx的后台代码:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.UI;
  6. using System.Web.UI.WebControls;
  7. using System.Data;
  8. using System.Data.SqlClient;
  9. namespace VoteSystem
  10. {
  11. public partial class LookVote : System.Web.UI.Page
  12. {
  13. protected void Page_Load(object sender, EventArgs e)
  14. {
  15. string str = "Server=.;DataBase=Exercise;uid=sa;pwd=;";
  16. SqlConnection conn = new SqlConnection(str);
  17. string sql = "select a.Title,a.SumNumber,a.Mode,a.Status,b.*,case a.SumNumber when 0 then 0 else round(cast(b.Number as float)/cast(a.SumNumber as float)*100,2) end as ItemPercent from VoteTitle a,VoteItem b where a.TitleID=b.TitleID and a.Status=1";
  18. SqlDataAdapter da = new SqlDataAdapter(sql, conn);
  19. DataSet ds = new DataSet();
  20. da.Fill(ds);
  21. Repeater1.DataSource = ds.Tables[0].DefaultView;
  22. Repeater1.DataBind();
  23. lblInfo.Text = "共有" + ds.Tables[0].Rows[0]["SumNumber"].ToString() + "人参加投票";
  24. lblTitle.Text = ds.Tables[0].Rows[0]["Title"].ToString();
  25. }
  26. }
  27. }

这部分的重点是SQL语句,string sql = “select a.Title,a.SumNumber,a.Mode,a.Status,b.*,case a.SumNumber when 0 then 0 else round(cast(b.Number as float)/cast(a.SumNumber as float)*100,2) end as ItemPercent from VoteTitle a,VoteItem b where a.TitleID=b.TitleID and a.Status=1”;

为了求出百分比,必须将投票数(整型)转换为浮点型,避免整型除以整型=整型的错误结果。另外还需用 when 表达式 then 结果 这样的语句来描述特殊情况(因为如果投票数0的话,就不能用项目票数/主题总票数这种单一的公式来计算了)

原设计图如下:

投票页面的后台外观

1348644439_9652.jpg

投票结果显示的页面外观如下:

1348644547_7755.jpg

最后这个小程序的运行效果如下:

1348645058_4238.jpg

1348645063_5598.jpg

发表评论

表情:
评论列表 (有 0 条评论,311人围观)

还没有评论,来说两句吧...

相关阅读

    相关 javaweb 投票系统

    最近做了一个简单的投票系统,来分享一下 1 先来看一下目录 ![在这里插入图片描述][20191023170720554.png] 2 效果图是这样的 首页,对

    相关 投票

    在许多选举的问题上,并不是每个人都是一张票的,很多时候会由于每个人的权利不同导致每个人的话事权也不一样(可认为所拥有的票数)假设有选举人V1,V2...Vk,他们所拥有的票数分

    相关 投票管理系统

    本次做的课设是投票管理系统,主要要求如下: ![这里写图片描述][SouthEast] 本次作业用到的是java-gui,可以说现在很少有小伙伴在用了吧。(-。-)