在线投票评选系统.docx
《在线投票评选系统.docx》由会员分享,可在线阅读,更多相关《在线投票评选系统.docx(36页珍藏版)》请在冰豆网上搜索。
在线投票评选系统
河北大学工商学院
本科生毕业论文(设计)
题目:
在线投票评选系统的设计与实现
学部信息科学与工程
学科门类工学
专业网络工程
学号**********
姓名杨建夫
指导教师蔡红云
2013年5月20日
在线投票评选系统的设计与实现
摘要
随着计算机技术的迅速发展,在线投票评选系统在逐渐的替代传统的投票方式,在线投票评选系统以其快捷、方便、良好的及时性等优势已经成为各大门户网站中的重要模块,发挥着不可或缺的重要作用。
腾讯、新浪、搜狐等门户网站都在自己的网站中加入了在线投票评选模块,这样能够更加有效获得用户对信息的反馈,扩大了信息的交流范围。
本系统采用ASP.NET技术,以Windows7操作系统作为开发平台,采用VisualStudio2008,SqlServer2005等工具进行开发。
在线投票评选系统可以根据投票主题不同,可在多个候选项目中进行一个或多个投票,并能根据投票结果进行多种方式的统计,实现对投票信息的有效管理。
主要模块包括:
用户管理模块、投票主题管理模块、候选对象管理模块、投票模块、投票统计等。
关键词:
在线投票;ASP.NET;VisualStudio2008
TheDesignandDevelopmentofOlineVoteSystem
ABSTRACT
Withtherapiddevelopmentofcomputertechnology,onlinevotingsystemgraduallyreplacethetraditionalvotingsystem,onlinevotingsystemwithitsfast,convenient,goodtimelinessadvantagehasbecomeanimportantmoduleofeachbigportal,playsanimportantrole.Forexample,Tencent,Sohu,Sinaandotherportalsareintheirownwebsitetojointheonlinevotingmodule.Thiscaneffectivelygetuserfeedbackinformation,expandingtheinformationcommunication.ThesystemusesASP.NETtechnology,withWindows7operatingsystemasthedevelopmentplatform,andusesVisualStudio2008,SQLServer2005developmenttools.Onlinevotingsystemcanaccordingtothedifferentvotingtheme,canbeoneorapluralityofvotesinapluralityofcandidateprojects,andbeabletocarryoutstatisticsinvariouswaysaccordingtotheresultsofthevote,toachieveeffectivemanagementofthevotinginformation.Notethemodulesinclude:
usermanagementmodule,votingthememanagementmodule,managementmodule,themodulecandidatevote,votingstatistics.
Keywords:
onlinevoting;ASP.NET;VisualStudio2008
1引言
1.1课题背景和意义
随着计算机技术的迅猛发展,尤其是网络技术的高速发展,带动了信息的广泛交流。
传统的投票和调查方式不能快速准确的将各种实时信息反馈给我们,因此我们需要一个基于互联网技术的在线投票评选系统。
在线投票评选系统不仅具有传统投票和调查的全部功能,而且更具有时效高和范围广的优点,其直观灵活的投票形式更符合人们的需要。
从互联网到校园网、企业局域网。
各种在线投投票系统随处可见。
并且,随着互联网技术的发展,在线投票评选系统将会发挥越来越重要的作用。
1.2国内外发展现状
在计算机网络高速发展的今天,互联网已成为人们获取信息的重要来源。
投票系统是各大主流网站的重要模块之一。
国外的网站例如亚马逊;国内的有腾讯的QQ空间、搜狐、新浪等大型网站。
目前的大部分投票网站都是基于ASP/JAVASCRIPT环境下开发用ASP.NET设计的,数据库采用sqlserver/mysql/access/oracle等多种版本的数据库。
支持多种类型投票、支持后台管理、支持新闻发布、支持投票限制、支持用户意见反馈。
将动态网页和数据库结合,通过应用程序来处理网络投票,提高投票统计的效率和准确性,并且可以有效的防止人为的作弊的行为。
这是目前较为流行的做法。
1.3课题目标
对在线投票评选系统进行设计与研究,设计出以SQLServer2005为后台数据库基于ASP.NET技术的B/S模型的在线投票系统。
在线投票系统主要的功能模块如下:
(1)投票主页
投票主页上设有投票首页、最新投票、过期投票、投票管理等链接。
主页上还会显示投票新闻和热门投票等内容。
(2)添加投票
管理员可以添加新的投票,包括投票主题、主题简介、起始时间等。
(3)投票模块
是否多次投票可以通过用户的cookie信息来判断,每个用户只能对同一主题投一次票。
投票分为单选投票和多选投票。
(4)投票管理
管理员可以对投票主题、投票选项等内容进行删除、修改、查询。
2需求分析
2.1系统目标及特点
在互联网技术迅猛发展的时代,用户对信息及时反馈的需求越来越迫切。
本系统的目标就是将用户比较关注的信息通过在线投票的方式最后将信息以图形化的方式及时反馈给用户。
本系统具有以下几个主要特色:
(1)界面清新美观,用户在浏览网页时能够感到清新愉快;
(2)有效管理,信息反馈及时。
本系统分为前台用户参与页面和后台管理员操作页面,将动态网页与html静态网页技术相结合。
在提高用户的UI体验时,并将信息数据进行及时的动态统计;(3)操作简单,系统成本低;(4)功能全面。
2.2模块功能需求
本系统应满足投票用户的需求以及网站管理人员的需求,主要功能要求如下:
(1)添加投票:
管理员登陆后台管理界面,输入验证码、用户名、密码进行身份验证。
验证通过,进入添加投票页面进行添加。
添加投票时管理员可以选择投票类型(投票分为单选投票和多选投票)。
添加页面上包含:
主题简介、起止时间、候选对象。
如果添加成功系统给出添加成功提示。
如果添加失败同样系统也会给出提示。
(2)投票管理:
点击投票管理后进入管理员登录界面,要求输入用户名、密码、验证码,输入成功后进入管理员管理页面。
该界面支持投票主题的模糊查询。
管理员可以对想要编辑,删除的投票主题进行查询,然后进行相关操作。
管理员可以修改已经添加的投票的投票主题、主题简介、起始时间等。
当管理员删除某个投票主题时会删除和该主题有关的所有数据库信息。
(3)投票模块:
用户登录时获取用户的cookie信息,根据用户cookie信息来判断用户是否对同一主题重复投票。
如果用户第一次对一个投票主题投票,那么系统允许用户进行投票,并记录用户这次投票记录。
如果用户已经对这个投票主题投过票了,当他重复点击投票时系统提示已经投过票,不允许重复投票。
并且不执行投票操作。
(4)查看投票:
当管理员添加或者编辑一条投票记录。
点击查看投票后显示最新的投票信息。
(5)验证码:
随机生成一串随机数,然后将产生的随机数转换成图片的形式并显示出来。
(6)联系我们:
当用户点击联系我们时,弹出基于FoxMail邮件系统的电子邮件,用户可以通过发送电子邮件的方式对本网站提出意见和建议。
2.3数据流图
系统顶层数据流图如图2-1所示:
图2-1 系统顶层数据流图
3总体设计
本章将对在线投票评选系统进行总体设计,包括系统模块结构图、各个功能模块的概要设计,为后面的详细设计做好准备。
3.1总体设计
投票用户和管理员分别登录系统的前台界面和后台界面,完成不同的操作,系统结构如图3-1所示:
图3-1系统结构图
3.2系统模块结构
在线投票评选系统按功能分为4个模块:
投票主页模块、后台管理模块、后台登陆模块、投票模块。
系统模块图如图3-2所示:
图3-2系统模块图
3.3模块设计
(1)投票主页模块
该模块分为包含最新投票、过期投票等页面的链接、热门投票、投票新闻等内容。
投票主页模块图如图3-3所示:
图3-3 投票主页模块图
(2)投票模块
该模块包含多选投票、单选投票、投票显示、重复投票验证等内容,如图3-4所示:
图3-4 投票模块图
(3)后台登陆模块
该模块包含账号、密码验证、验证码验证,如图3-5所示:
图3-5 后台登陆模块图
(4)后台管理模块
该模块包含添加投票(含单选票和多选票)、修改投票信息、删除投票,如图3-6所示:
图3-6后台管理模块图
4详细设计
本章将对在线投票评选系统E-R图、投票信息表、管理员信息表结构进行设计。
数据库采用SQLSERVER2005数据库,并将数据名命名为onlinevote。
4.1系统E-R图
通过需求分析可知,系统涉及管理员、投票项目和投票选项等实体,系统E-R图如图4-1所示。
图4-1系统E-R图
4.2系统表结构
通过前面的分析可知,数据库中涉及到的表有管理员信息、单选票项目表、多选票项目表、单选票投票选项表、多选票投票选项表,分别如表4-1和4-5所示。
表4-1 管理员信息表
字段名称
类型
是否主键
描述
id
int
是
管理员编号
username
varchar
账号名称
password
varchar
密码
表4-2单选票项目表
字段名称
类型
是否主键
描述
voteid
int
是
主题编号
votethem
nvarchar
投票主题
jianjie
text
主题简介
time
nvarchar
起止时间
表4-3单选投票选项表
字段名称
类型
是否主键
描述
voteitemid
int
是
选项编号编号
voteid
int
主题标号
votecontent
nvarchar
选项内容
votetotal
int
投票数
表4-4多选投票项目表
字段名称
类型
是否主键
描述
voteid
int
是
主题编号
votetheme
nvarchar
投票主题
jianjie
nvarchar
主题简介
time
nvarchar
起止时间
表4-5多选投票选项表
字段名称
类型
是否主键
描述
voteitemid
int
是
选项编号编号
voteid
int
主题标号
votecontent
nvarchar
选项内容
votetotal
int
投票数
5系统实现
本章将对系统的各个模块的具体实现进行分析和设计。
包括程序流程图、关键代码的实现等。
系统的流程图如图5-1所示:
图5-1 系统流程图
5.1公共类的编写
在项目开发中,良好的类设计能够使系统结构更清晰,并且可以加强代码的重用性和易维护性。
在本系统中建立了一个公共类,用来执行各种数据库操作以及公共方法。
(1)GetCon()用于连接sqlserver数据库。
publicstaticSqlConnectionGetCon()
{
ReturnnewSqlConnection(ConfigurationManager.AppSettings["ConnectionString"]);
}
(2)sqlex(stringstr)用于执行更新和删除数据表中的数据。
publicstaticboolsqlex(stringstr)
{//连接数据库
SqlConnectioncon=database.GetCon();
//打开数据库
con.Open();
SqlCommandcmd=newSqlCommand(str,con);
try
{执行sql语句并返回受影响的行数
cmd.ExecuteNonQuery();
returntrue;
}
catch(Exceptione)
{
returnfalse;
}
finally
{//释放数据库连接
con.Dispose();
}
}
(3)reDs(stringstr)用于执行系统中的查询语句。
publicstaticDataSetreDs(stringstr)
{//实例化数据库连接
SqlConnectioncon=database.GetCon();
//获取数据集
SqlDataAdaptersda=newSqlDataAdapter(str,con);
DataSetds=newDataSet();
//填充数据集
sda.Fill(ds);
returnds;
}
5.2系统模块设计
该部分将详细的分析和设计系统中各个模块的实现过程。
包含模块功能描述、模块运行流程、模块的流程图、模块关键代码。
(1)后台登陆模块
模块功能:
用于区分普通用户和管理员用户,对管理员身份进行验证登陆,便于管理员对后台投票项目的管理。
模块运行流程:
1:
输入用户名、密码、验证码,点击登陆。
2:
验证登陆信息,如果验证通过跳转到homepage.aspx。
验证失败,提示错误信息,不做跳转。
3:
验证通过,跳转到后台管理界面进行投票管理。
后台登录模块流程图如图5-2所示:
图5-2后台登陆流程图
模块关键代码:
stringusername=this.txtusername.Text.Trim();
stringpassword=this.txtpassword.Text.Trim();
stringnum=this.txtnum.Text.Trim();
if(Session["ValidateNum"].ToString()==num.ToUpper())
{
//获取用户信息SqlConnectioncon=newSqlConnection("server=.;uid=sa;pwd=;database=onlinevote;");
con.Open();
SqlCommandcmd=newSqlCommand("select*fromdbuserwhereusername='"+username+"'andpassword='"+password+"'",con);
SqlDataReaderdr=cmd.ExecuteReader();
dr.Read();
if(dr.HasRows)//通过dr中是否包含行判断用户是否通过身份验证
{
Session["username"]=username;
Session["password"]=password;
Response.Redirect("~/homepage.aspx");//跳转到主页
}
else
{
Response.Write("");
}
dr.Close();
con.Close();
}
else
{
Response.Write("");
}
(2)添加投票模块
模块功能:
管理员添加新的投票主题、投票项、主题简介、起止时间用于发起新的投票。
模块运行流程:
1:
管理员通过身份验证登陆后台管理系统。
2:
进入添加投票页面,并选择添加投票主题类型。
分为单选投票和多选投票。
3:
按照页面提示,添加投票信息。
完成添加后提交数据,查看投票页面会即时显示出新添加的投票。
添加投票流程图如图5-3所示:
图5-3添加投票流程图
模块关键代码:
//添加投票主题
id=Autoid("dbvote","voteid");
stringP_Str_Title=this.txttheme.Text.Trim();
stringP_Str_jianjie=this.txtjianjie.Text.Trim();
stringP_Str_time=this.txtthemetime.Text.Trim();
if(id!
=null)
{
boolP_Bl_reVal=database.sqlex("insertintodbvote(voteid,votetheme,jianjie,time)values("+id+",'"+P_Str_Title+"','"+P_Str_jianjie+"','"+P_Str_time+"')");
if(P_Bl_reVal)
{//set(false);
Response.Write("");
}
else
{
Response.Write("");
}
}
//添加投票项
stringP_Str_itemid=Autoid("voteitem","voteitemid");
stringP_Str_voteid=id;
stringP_Str_voteContent=this.txtitem.Text.Trim();
stringP_Str_cmdtxt="insertintovoteitem(voteitemid,voteid,votecontent)values("+P_Str_itemid+","+P_Str_voteid+",'"+P_Str_voteContent+"')";
if(P_Str_itemid!
=null)
{
boolP_Bl_reVal=database.sqlex(P_Str_cmdtxt);
if(P_Bl_reVal)
{
Bind(P_Str_voteid);//绑定ListBox
Response.Write("");
this.txtitem.Text="";
}
else
{
Response.Write("");
}
}
(3)投票模块
模块功能:
对用户所投的票进行统计,并防止用户对同一主题重复投票。
模块运行流程:
1:
在用户投票之前对用户的cookie进行判断。
读取用户的cookie值然后对该值进行比较。
2:
如果读取的cookie值为空,则表示该用户从未对改主题投过票。
那么就创建新的cookie对象,并设置过期时间。
3:
如果该用户已经对同一个主题投过票了,那么就要做出判断,并给出错误提示并不执行投票操作。
投票流程图如图5-3所示:
图5-3 投票流程图
模块关键代码:
//投票防作弊
HttpCookiemakecookie=newHttpCookie("Vote"+M_Str_voteID);//制造cookie
HttpCookiereadcookie=Request.Cookies["Vote"+M_Str_voteID];//读出cookie
if(readcookie==null)//从未投过票
{
makecookie.Values.Add("VoteItem","<"+M_Str_voteID+">");//设置其值
makecookie.Expires=DateTime.MaxValue;//设置过期时间
}
else//已经投过票
{
stringP_Str_AllItem=readcookie.Values["VoteItem"].ToString();//读取已投票的项
if(P_Str_AllItem.IndexOf("<"+M_Str_voteID+">")==-1)//未对该主题投过票
{
makecookie.Values.Add("VoteItem",readcookie.Values["VoteItem"]+"<"+M_Str_voteID+">");
}
else//已对该主题投过票
{
Response.Write("alert('该主题你已经成功投过票,不能重新投票!
');");
return;
}
}
//执行投票操作,票数加1
stringP_Str_voteItemid=this.RadioButtonList1.SelectedValue;
//stringP_Str_voteItemid=this.RadioButtonList1.s
stringP_Str_cmdtxt="updatevoteitemsetvotetotal=votetotal+1wherevoteitemid="+P_Str_voteItemid+"andvoteid="+M_Str_voteID;
boolP_Bl_reVal=database.sqlex(P_Str_cmdtxt);
if(P_Bl_reVal)
{
Response.AppendCookie(makecookie);//写入Cookie
Response.Write("