网上投票的制作

网上投票几乎是当今网站不可缺少的一部分,而制作的方式却有多种,大多数静态网站采用的方法是利用多个radioButton逐一添加内容来

实现,而动态网站多采用radioButtonList控件绑定数据库,从而动态获得投票内容.

1.数据库的设计(MSSQL)

如果是流量比较大的网站,则更新投票内容是频繁的工作,好的数据库设计可以让更新相对科学和容易.

先设计一个主表,它记录投票的主题与参与该投票的人数:

create database vote

use vote

create table voteMaster
(
voteID int primary key,
voteTitle varchar(100) not null,
voteSum int default 0
)

insert into voteMaster values(1,'尤文降级,米兰被剥夺欧冠,您认为判决是否合理?',0)

insert into voteMaster values(2,'您如何评价舍甫琴科告别米兰?',0)

然后设计从表,它记录了相关主题的详细项目

create table voteDetails
(
voteID int foreign key references voteMaster(voteID),
voteDetailsID int not null,
voteItem varchar(100) not null,
ItemSum int default 0,
primary key(voteID,voteDetailsID)
)

insert into voteDetails values(1,1,'非常合理',0)

insert into voteDetails values(1,2,'不太合理,判罚过重',0)

insert into voteDetails values(1,3,'说不清楚',0)

insert into voteDetails values(2,1,'迎接新的开始,米兰舍瓦双赢',0)

insert into voteDetails values(2,2,'痛失射手王,米兰将一蹶不振',0)

insert into voteDetails values(2,3,'切尔西未必好呆,舍瓦选错了',0)

insert into voteDetails values(2,4,'不好说',0)

2.得到投票主题

新建立一个DB类,用来返回数据库连接对象,这样做的好处是:如果以后数据库有变化,则只需要修改这个类

public static SqlConnection createConnection()
{
SqlConnection conn = new SqlConnection("server=.;database=vote;uid=sa;pwd=millfox");
return conn;
}

在设计好的投票栏里添加一个Lable(服务器控件)和RadioButtonList,然后编写代码动态得到主题和内容

private string voteId = "1"; //将用这个字符串变量来控制投票主题

private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面

if(!IsPostBack)
{
SqlConnection conn = DB.createConnection();
conn.Open();

//得到标题信息

string select = "SELECT voteTitle FROM voteMaster WHERE voteID="+voteId;
SqlCommand cmd = new SqlCommand(select,conn);
string voteTitle = Convert.ToString(cmd.ExecuteScalar());
this.lblTitle.Text = voteTitle;

//数据绑定到radioButtonList
string getItem = "SELECT voteDetailsID,voteItem FROM voteDetails WHERE voteID="+voteId;
SqlCommand cmdItem = new SqlCommand(getItem,conn);
SqlDataReader sdr = cmdItem.ExecuteReader();
this.rbtnItems.DataSource = sdr;
this.rbtnItems.DataTextField = "voteItem";
this.rbtnItems.DataValueField = "voteDetailsID";
this.rbtnItems.DataBind();
sdr.Close();
conn.Close();
}

}

这样绑定了数据库的Label和RadioButtonList就能显示出主题及相关内容了,而切换不同的主题,只需要修改之前定义的变量voteId的值

3.投票

投票要实现的功能,就是点击button后,相应主题的项目票数加1,主题的票数也要加1

在已添加的button(btnVote)上编写代码

private void btnVote_Click(object sender, System.EventArgs e)
{
SqlConnection conn = DB.createConnection();
conn.Open();

//更新从表中的itemSum项,条件为voteID为当前指定值,且voteDetailsID为当前选中项的值
string ItemSum = "UPDATE voteDetails SET ItemSum=ItemSum+1 WHERE voteDetailsID ="+this.rbtnItems.SelectedValue+"and voteID="+this.voteId;

SqlCommand cmd = new SqlCommand(ItemSum,conn);
cmd.ExecuteNonQuery();
conn.Close();
}

上面有个方法很常用,那就是radioButtonList的SelectedValue,它能得到当前选定项的Value值

现在发现了一个问题,那就是无法将主表中的票数与从表中的票数联系起来,而我们想要的是从表中某项的值加1,主表中的票数也要增加1,于是自然想到要添加一个Trigger

create trigger voteMaster_update on voteDetails

for update

as

begin

Update voteMaster Set voteSum=voteSum+1 Where voteID=(select voteID from inserted)

end

这样投票部分就完成了

4.查看

我们希望查看到的一般就是:各项得到的票数、多少人参与投票(即总票数)

我们先将投票页面的voteId值通过btnView(查看)传递出去

private void btnView_Click(object sender, System.EventArgs e)
{
Response.Redirect("ShowResult.aspx?voteID="+this.voteId);
}

新建一个aspx文件,编写如下代码

private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面

//得到通过btnView(查看)传递过来的参数
string getID = Request.QueryString["voteID"].ToString();

SqlConnection conn = DB.createConnection();
conn.Open();

//得到标题
string getTitle = "SELECT voteTitle FROM voteMaster WHERE voteID="+getID;

//得到总票数
string getSum = "SELECT voteSum FROM voteMaster WHERE voteID="+getID;
SqlCommand cmd = new SqlCommand(getTitle,conn);

//显示标题
this.lblTitle.Text = cmd.ExecuteScalar().ToString();

//显示总票数
cmd = new SqlCommand(getSum,conn);
this.lblSum.Text = "共有"+cmd.ExecuteScalar().ToString()+"人参加投票";

string getAll = "SELECT * FROM voteDetails WHERE voteID="+getID;
SqlCommand exec_cmd = new SqlCommand(getAll,conn);
SqlDataReader sdr = exec_cmd.ExecuteReader();

//利用DataReader的游标显示出从表中的项目与总和
while(sdr.Read())
{
Response.Write("<div align=center><font color=red>"+sdr.GetString(2)+" - "+sdr.GetInt32(3)+"票</font></div><p>");
}
sdr.Close();
conn.Close();
}

点击查看,将显示出相关信息:

非常合理 - 4票

不太合理,判罚过重 - 2票

说不清楚 - 0票

尤文降级,米兰被剥夺欧冠,您认为判决是否合理?

共有6人参加投票

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
制作一个JavaWeb投票系统,首先需要创建相应的数据库数据库可以使用关系型数据库管理系统(RDBMS)来创建,例如MySQL、Oracle或者SQL Server等。首先,我们需要确定系统所需的表的结构和字段。 一般来说,一个投票系统至少需要两个表:用户表和投票信息表。用户表用于保存用户的信息,可以包括用户ID、用户名、密码等字段;投票信息表用于保存投票的相关信息,可以包括投票ID、投票标题、投票选项、投票结果等字段。 针对用户表的创建,可以使用以下SQL语句: CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(255) NOT NULL, `password` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 针对投票信息表的创建,可以使用以下SQL语句: CREATE TABLE `vote` ( `id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(255) NOT NULL, `options` text, `result` text, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 以上代码中,CREATE TABLE用于创建表,后面的括号中定义了表的字段,字段名和字段类型通过逗号分隔,字段名后面的关键字和约束用于定义字段的属性。 表创建完成后,可以使用数据库管理工具或者编写Java代码来操作数据库,包括插入、查询、更新和删除数据等操作,以实现投票系统的功能。 在实际应用中,还可以根据具体的需求,添加其他相关的表和字段,如投票选项表、投票结果表等,以完善系统的功能和扩展性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值