随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识它已进入人类社会的各个领域并发挥着越来越重要的作用。作为计算机应用的一部分,在先进的计算机技术、通信技术、控制技术及IC卡技术基础上,采用系统集成方法,逐步建立一个智能化的投票系统。
本文阐述了一个功能齐全的在线投票系统的实现过程及一些关键技术。以实现在校评三好学生为主要实现目的,重点完成投票应用子系统,此系统基于.NET平台下以C#为主要编程语言,采用Visual Studio 2005为工具。后台数据库采用Microsoft Access 2003。在数据库设计中,将部分常用的数据库访问操作采用类和对象的方式。在线投票系统主要包括:投票应用子系统、投票管理子系统、用户管理子系统三个模块。
本系统在对在线投票系统进行管理时,不同权限的用户可以分别登录,包括管理员权限和普通用户权限,管理员可以对用户的个人信息进行检索、管理。为了投票的公正、公平性,还设定在线显示系统时间以及每个用户只允许投票一次。
关键词:B/S ASP.NET Microsoft Access 2003 在线投票 三好学生
目 录
摘 要
第1章 设计目的
1.1 设计目的
1.2系统需求分析
1.2.1系统总体需求分析
1.2.2开发的可行性分析
第2章 总体设计
2.1程序设计组成框图
2.2流程图
2.3数据库分析与设计
2.3.1数据库设计
第3章 详细设计
3.1 模块功能说明
3.2 登录模块
3.2.1验证用户身份
3.2.2用户注册
3.3 投票模块
3.3.1用户投票模块
3.3.2显示投票结果
3.4 输出结果模块
3.5 系统设置模块
3.5.1用户权限
3.5.2用户投票限制
3.5.3选项设置
3.5.4 新增候选人
第4章 系统实现
4.1数据库的操作
4.2 母版页的运用
4.3站点地图的使用
4.4 主要源程序
第5章 优缺点及改进
第6章 结束语(心得体会)
在追求管理效率的今天,仅仅靠原始的手工管理或简单的单机管理,管理部门面对大量的信息,无法有效率地将其中的重要部分提取出来,并做出相应的判断和处理。投票管理者的决策只能依据手工表数据,在浪费大量人力、物力的同时无法做到实时监控,难以保证数据的准确性和及时性。因此,先进的管理思想就成为了一个可望而不可及的目标。投票工作非常急需一套既有先进管理思想的系统,作为实现目标和提高现有投票管理水平的一种重要手段。
网上投票系统的开发可以更好的把市场的信息更准确更快速的反馈给客户,使信息的来源更广泛,从而提高信息的准确性。运用此系统可以降低企业为市场调查而消耗的人力和物力,利用节省的资源提高产品的质量,增强竞争力。
一个网站不断发展的前提就是众多用户的支持,一个好的网站一定要注意与用户之间信息的交流。能够有效得到用户反馈的信息,并及时对网站内容进行改进,这也是一个网站持续发展的基础。也正是由于以上原因,网络上各式各样的投票系统层出不穷。
网络在线投票是目前网上比较常见的一个功能,利用此功能可以提直接在互联网上直接投票,并及时查看投票结果。利用此系统,用户投票比较方便还可以查看并分析投票结果,从中获得对自己有用的信息。
1.2.1系统总体需求分析
此投票系统是模拟平时选举先进的方式(如从10人中选举3名先进人员。得票多者当选)。
该系统要求至少有四个页面:分别为登录页面,投票页面,统计投票结果页面,系统设置页面等。该系统需要的数据库由自己设计并建立。
登录页面主要是确定投票人身份和投票资格,防止重复投票。
投票网页:有所有候选人列表(至少10人),有必要的投票说明和要求,如只能选几人(由系统设置),如选3人,选定3人后,网上提交。多选和少选都不能提交,要给出提示。某用户网上投票后,再次进入系统时不能再投票。
获得投票统计结果网页:投票完毕后,可通过该网页获得投票统计结果,按得票多少排列投票结果名单。要求只有系统管理员(投票组织者)才能调用该网页。
1.2.2开发的可行性分析
- 技术可行性 :
(1)操作系统: Windows XP 及以上服务器版本;
(2)数据库管理系统:Microsoft Access 2003;
(3)编程工具:编程软件为 Visual Studio 2005,编程语言选用 C#。
- 操作可行性:
本在线投票系统的用户只需懂得运用互联网络者均可以使用,此系统在网站中的使用频度预计非常的频繁;该系统属于实用型网站,需要对数据的处理,比如对投票票数的统计并把结果反馈给投票者,故对数据的及时更新要求较高,保证数据的真实性。该系统在任何操作系统下都可以运行,但必须装有 Microsoft Access 2003数据库。
该系统的操作包括:多选投票、删除投票人、添加投票人、修改投票人信息查看投票结果、增加候选人、删除候选人。
多选投票:用户只能从多个选项中选取定项进行投票。
添加投票人:管理员对大学生进行添加。
删除投票人:管理员对大学生进行删除。
修改投票人信息:对投票人信息进行修改。
增加候选人:管理员对候选人进行添加。
删除候选人;管理员对候选人进行删除。
查看投票结果:投票者和管理者查看投票结果。
图2-1 程序设计组成框图
图2-2 管理员流程图
图2-3 普通用户流程图
2.3.1数据库设计
此系统中包含三张表:admin表(用户表)、shxs表(三好学生表)、admin表(用户表)包含的字段:
- id(编码):用于唯一识别用户,用户不可以重复。
- name(用户名):用户的代号。
- pwd(密码):用户登录系统的密码。
- qx(权限):权限有两种:“管理员”和“普通用户”,系统根据权限来现在不同用户的操作。
- pand(是否投票):用于判断用户能否进行投票,此属性的值有两个:0和1,“0”表示可以进行投票,“1”表示可以投票,管理员的类型和已经投票用户的类型都为“1”。
图2-4 admin表的设计
图2-5 admin表的内容
- shxs表(三好学生表)包含的字段:
- sname(学生姓名):候选人的姓名信息。
- sid(学生编码):用于唯一标识候选学生。
- count(得票数):某一候选人的得票数。
- bj(备注):对候选人信息进行备注。
图2-6 shxs表的设计
图2-7 shxs表的内容
本系统共有4个模块:登录模块、投票模块、结果输出模块、系统管理模块。每个系统的用户都需要登录系统才能实现功能。对于没有用户名的用户还提供给了注册功能。管理员对系统进行总体管理,可以添加用户、更改权限、新增候选人等,用户进行投票后可以看到总的结果,管理员也可以查看投票的最终结果。
3.2.1验证用户身份
本系统包含两类用户:管理员和普通用户。两类用户拥有的权限不同,因此可以操作的页面也不同,并且为了安全,系统应该验证用户的身份。
图3-1 验证用户信息
3.2.2用户注册
本系统由于是站在学校的投票系统的角度设计的,所以注册不能由任何学生自行注册,必须由管理员添加用户。
图3-2填写注册信息
3.3.1用户投票模块
1、显示要投票的内容。
图3-3投票页面
2、用户投票,并将结果写入数据库,然后再显示投票的结果。每个用户投票一次,每次只能投三张票,多选、少选都有提示信息。
图3-4 少选的提示信息
图3-5 多选的提示信息
3.3.2显示投票结果
在用户投票之后,若用户正确投票则会自动显示总的投票结果。此页面使用了数据源控件,显示在GridView控件里面。
图3-6 显示投票结果
管理员登录后可以查看当前的投票结果,此功能是由Gridview代码实现的,单击票数可以按票数多少排序。
图3-7显示投票最终结果
3.5.1用户权限
在数据库中设置了一个判断值,通过此值来判断用户是否有权投票。字段为“pand”,若此值为0则可以投票,若此值为1则不允许投票。若用户投票后,系统自动将用户的字段值改为1。
3.5.2用户投票限制
每个用户只允许投票3票。
3.5.3选项设置
管理员可以通过页面直接对候选人信息进行编辑,并新增候选人。
图3-8管理候选人信息
3.5.4 新增候选人
管理员可以新增候选人。
此系统中对数据库的操作是通过类来实现的。我们编写了类“DB”,类里包含有链接数据库的方法creatcon,用于之后页面的数据库连接。
public class DB
{
public DB()
{
}
public static OleDbConnection createcon()
{
return new OleDbConnection("Provider=Microsoft.Jet.OleDB.4.0;" + @"Data Source=F:网上投票系统DB_vote.mdb");
}
此系统共有9个页面,其中8个页面运用了模板页,运用母版页不仅可以节省开发时间,而且可以实现网站的统一,使外观更加美观。在母版页中添加的信息完全可以显示在每个调用模板页的页面中。
图4-1 母版页1
图4-2 母版页2
本网站使用了站点地图,达到了导航和页面跳转的目的,使网站的逻辑性更强,更方便用户使用。
<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
<siteMapNode url="manage.aspx" title="管理主页" description="">
<siteMapNode url="usermanage.aspx" title="用户管理" description="" >
<siteMapNode url="userchange.aspx" title="新增用户" description="" />
</siteMapNode>
<siteMapNode url="candimanage.aspx" title="候选人管理" description="" >
<siteMapNode url="candichange.aspx" title="新增候选人" description="" />
</siteMapNode>
<siteMapNode url="resultchange.aspx" title="结果投票显示" description="" />
</siteMapNode>
</siteMap>
(1)DB类
public class DB
{
public DB()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public static OleDbConnection createcon()
{
return new OleDbConnection("Provider=Microsoft.Jet.OleDB.4.0;" + @"Data Source=F:网上投票系统DB_vote.mdb");
}
}
(2)Login
public partial class _Default : System.Web.UI.Page
{
OleDbConnection con = DB.createcon();
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
string name = this.TextBox1.Text.ToString();
string pwd = this.TextBox2.Text.ToString();
con.Open();
OleDbCommand sqlcom = new OleDbCommand("select * from admin where id='" + name + "' and pwd='" + pwd + "'and qx='"+this .DropDownList1.SelectedValue+"'",
con);
OleDbDataReader reader = sqlcom.ExecuteReader ();
if (this.DropDownList1.SelectedIndex == 0)
{
if (reader.Read())
{
Session["name"] = reader["name"];
Response.Redirect("vote.aspx");
}
else
{
Label3.Text = "您输入错误或没有此权限,请重新输入";
}
}
else if (this.DropDownList1.SelectedIndex == 1)
{
if (reader.Read())
{
Session["name"] = reader["name"];
Response.Redirect("manage.aspx");
}
else
{
Label3.Text = "您输入错误或没有此权限,请重新输入";
}
}
}
protected void Button2_Click(object sender, EventArgs e)
{
this.TextBox1.Text = "";
this.TextBox2.Text = "";
}
}
(3)Userchange
public partial class userchange : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
OleDbConnection con = DB.createcon();
con.Open();
string sqlcom = "select name from admin where [id]='" + TextBox1.Text + "'";
OleDbCommand com=new OleDbCommand (sqlcom, con);
OleDbDataReader rader=com .ExecuteReader ();
if (rader.Read())
{
rader.Close();
Response.Write("<script>alert("该用户已存在!");</script>");
}
else
{
if (DropDownList1.SelectedIndex == 1)
{
rader.Close();
string sqlstr = "insert into admin (id,name,pwd,qx,pand) values('" + TextBox1.Text + "','" + TextBox5.Text + "','" + TextBox2.Text + "','管理员','1')";
OleDbCommand co=new OleDbCommand (sqlstr, con);
co.ExecuteNonQuery();
}
else
{
rader.Close();
string sqlsr = "insert into admin (id,name,pwd,qx,pand) values('" + TextBox1.Text + "','" + TextBox5.Text + "','" + TextBox2.Text + "','普通用户','0')";
OleDbCommand cm= new OleDbCommand (sqlsr, con);
cm.ExecuteNonQuery();
}
con.Close();
Response.Write("<script>alert("注册成功!");</script>");
}
}
}
(4) Candichange
public partial class userchange : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
OleDbConnection con = DB.createcon();
con.Open();
string sqlcom = "select sid from shxs where sid='" + TextBox1.Text + "'or sname='" + TextBox5.Text + "'";
OleDbCommand com=new OleDbCommand (sqlcom, con);
OleDbDataReader reader=com .ExecuteReader ();
if(reader .Read ())
{
reader .Close ();
Response.Write("<script>alert("该用户编号或姓名已存在!");</script>");
}
else
{
reader.Close();
string sqlstr = "insert into shxs (sid,sname,bj,[count]) values('" + TextBox1.Text + "','" + TextBox5.Text + "','" + TextBox4.Text + "','0')";
OleDbCommand co=new OleDbCommand (sqlstr, con);
co.ExecuteNonQuery();
con.Close();
Response.Write("<script>alert("添加成功!");</script>");
}
}
protected void Button2_Click(object sender, EventArgs e)
{
this.TextBox1.Text = "";
this.TextBox4.Text = "";
this.TextBox5.Text = "";
}
}
(5)Vote
public partial class vote : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
OleDbConnection con = DB.createcon();
con.Open();
string str = "select pand ,name from admin where name ='" + Session["name"] + "'";
OleDbCommand com = new OleDbCommand(str, con);
OleDbDataReader rader = com.ExecuteReader();
rader.Read();
int k = Convert.ToInt16(rader["pand"].ToString());
rader.Close();
if (k == 0)
{
int m = 0;
for (int n = 0; n <= this.GridView1.Rows.Count - 1; n++)
{
CheckBox rad = (CheckBox)this.GridView1.Rows[n].FindControl("CheckBox1");
if (rad.Checked)
{
m = m + 1;
}
}
if (m == 3)
{
for (int i = 0; i <= this.GridView1.Rows.Count - 1; i++)
{
CheckBox radio = (CheckBox)this.GridView1.Rows[i].FindControl("CheckBox1");
if (radio.Checked)
{
string id;
id = GridView1.Rows[i].Cells[1].Text;
OleDbConnection coon = DB.createcon();
coon.Open();
string strl = "update shxs set [count]=[count]+1 where sid='" + id + "'";
OleDbCommand comn =new OleDbCommand (strl,coon );
comn.ExecuteNonQuery();
}
}
OleDbCommand comm = new OleDbCommand("update admin set pand=pand+1 where name ='" + Session["name"] + "'", con);
comm.ExecuteNonQuery();
con.Close();
Response.Write("<script>alert("投票成功!");</script>");
Response.Redirect("showvote.aspx");
}
if (m < 5)
{
Response.Write("<script>alert("你少选了!");</script>");
}
else
{
Response.Write("<script>alert("你多选了!");</script>");
}
}
else
{
Response.Write("<script>alert("你已选过了!");</script>");
}
}
}