投票系统设计(ASP.NET内置对象综合应用)
实训目标
1、 Page对象的事件
2、 Request对象常用方法和属性
3、 Response对象常用方法和属性
4、 能够创建网页模板
5、了解Application对象常用方法和属性
6、了解Session对象常用方法和属性
7、了解Cookie对象常用方法和属性
8、理解Application对象的生命周期、Session对象的生存期、Cookie对象的生命周期
实施步骤
1.在线投票系统登陆界面(default.aspx),这里是用匿名用户登录,不需要密码,但用户名不能为空,登录到投票页面。
图1 在线投票系统登录界面
//default.aspx.cs后台代码参考
protected void Page_Load(object sender, EventArgs
{
}
//点击按钮事件代码
protected void Button1_Click(object sender, EventArgs
{
if (TextBox1.Text != "")//如何文本框不为空才执行下面的代码
{
"username"] = TextBox1.Text.Trim();//保存Session,记住会话状态
"vote.aspx");//跳转到投票页面
}
else
{
"<script>alert('用户名不能空!')</script>");//用户名文本框为空时,弹出对话框提示
}
}
2.在线投票系统主界面(vote.aspx),用于显示登录用户的用户名,登录的IP地址,并显示投票选项单选按钮列表、投票按钮、查看结果按钮,退出登录按钮等。
用户选择具体选项进行投票,每个用户只允许投票一次!使用Cookie对象实现一个客户
只能投票一次,点击投票按钮会提示“投票成功”或者“已经投过票”。
图2在线投票系统主界面
//vote.aspx.cs代码参考
//页面加载时执行的代码
protected void Page_Load(object sender, EventArgs
{
//RadioButtonList1.Items[0].Selected = true;//设置第一项为默认选中项
if (Session["username"] != null)//判断是否有登录?
"username"] + "欢迎您!IP地址:"+Request.UserHostAddress;
else
"default.aspx");//没有登录则跳转到登录页面
}
//点击按钮事件代代码
protected void Button1_Click(object sender, EventArgs
{
if (RadioButtonList1.SelectedValue != "")//判断有没有选择?
{
//if(Request.Cookies["ip"]!=null){//判断cookie是否存在
// string newip=Request.Cookies["ip"].Value;
//if(newip==Request.UserHostAddress){//判断cookie中的IP是否相同
// Response.Write("<script>alert('你已经投票啦!')</script>");
// return;//跳出方法,结束!
// }
// }
int selectvalue = Convert.ToInt32(RadioButtonList1.SelectedValue);//获取单选按钮列表的选中项的值
switch (selectvalue)//根据不同的选择,执行不同的代码,采用switch分支结构(打开对应数据文件,改变投票数)
{
case 1://选择:1广州,2深圳,3东莞,4珠海
read2write(1);
break;
case
read2write(2);
break;
case
read2write(3);
break;
case
read2write(4);
break;
}
//保存cookie
string ip = Request.UserHostAddress;//获取IP地址
"ip"].Value = ip;//定义cookie
"ip"].Expires = DateTime.MaxValue;//设置cookie有效期,必须设置有效期才能生效
"<script>alert('投票成功!')</script>");
}
else
{
"<script>alert('必须选择!')</script>");
}
}
//自定义一个方法,根据选择不同的项目带入参数,读取不同的文本数据文件并完成写入!
public void read2write(int
{
StreamReader sr = System.IO.File.OpenText(Server.MapPath("." + "\\data\\"+i+".txt"));//打开文件
//System.IO.StreamReader sr = new System.IO.StreamReader(Server.MapPath("." + "\\data\\" + i + ".txt"));//使用这个方法也可以
Application.Lock();
"count"] = sr.ReadLine();// 读取内容
sr.Close();
int all = Convert.ToInt32(Application["count"]);
all += 1;
StreamWriter rw = System.IO.File.CreateText(Server.MapPath("." + "\\data\\" + i + ".txt"));//创建文件
//System.IO.StreamWriter rw = new System.IO.StreamWriter(Server.MapPath("." + "\\data\\" + i + ".txt"));//使用这个方法也可以
//写入内容
rw.Close();
Application.UnLock();
}
//查看结果按钮事件代码
protected void Button2_Click(object sender, EventArgs
{
"result.aspx");
}
//退出登录按钮事件代码
protected void Button3_Click(object sender, EventArgs
{
"username"] = null;//清除session,关闭会话状态
Session.Clear();
"default.aspx");
}
3.在线投票系统的投票结果查看界面(result.aspx),把结果用数字和图形显示出来。
图3在线投票系统结果查看页面
//result.aspx.cs代码参考
//页面加载事件代码
protected void Page_Load(object sender, EventArgs
{
if
{
//if (Session["username"] == null)//判断是否登录
// Response.Redirect("default.aspx");
int c1, c2, c3, c4, total;//定义变量,分别存储每一个投票选项的票数
StreamReader
File.OpenText(Server.MapPath("." + "\\data\\1.txt"));//分别读取每一个数据文件的内容
Convert.ToInt32(sr.ReadLine());
sr.Close();
File.OpenText(Server.MapPath("." + "\\data\\2.txt"));
Convert.ToInt32(sr.ReadLine());
sr.Close();
File.OpenText(Server.MapPath("." + "\\data\\3.txt"));
Convert.ToInt32(sr.ReadLine());
sr.Close();
File.OpenText(Server.MapPath("." + "\\data\\4.txt"));
Convert.ToInt32(sr.ReadLine());
sr.Close();
//计数总票数
//在label控件中显示对应的票数(赋值)
Label2.Text = c2.ToString();
Label3.Text = c3.ToString();
Label4.Text = c4.ToString();
Label5.Text = total.ToString();
//根据比例设置对应label控件的宽度
Label2.Width = 300 * c2 / total;
Label3.Width = 300 * c3 / total;
Label4.Width = 300 * c4 / total;
Label5.Width = 300 * 1;
}
}