2024年6月20日发(作者:)
2010年6月
Jun.2010
桂林师范高等专科学校学报
Journal of Guilin Normal College
第24卷第2期(总第82期)
(Sum No.82) Vo1.24 No.2
基于ASP的在线投票系统的设计与实现
梁霄波
(桂林师范高等专科学校效学与计算机科学系,广西桂林5410O1)
[摘要]分析了基于ASP技术的在线投票系统的基本功能、结构,以及实现该系统的关键技术。
综合运用本系统的各种编程方法和技巧,可以设计出各种动态网站以及网络数据库管理系统。
[关键词] 在线投票;ASP;Access数据
[中图分类号]TP39[文献标识码]A[文章编号]1001—7070(2010)02--0176--05
1概述
数据库。但是Access也具有安全性低、处理大量数据
在线投票系统是网站中常用的模块,可用来调查
时性能急剧下降等缺点,如果希望将用Access数据
访问者对网站的意见,对某个热门话题进行调查,企
库开发的程序转换为SQL Server这样的大型数据库
业对某个项目或产品的调查等。本文介绍了使用ASP
也非常简单,只要利用sQL Server的导入功能将
技术实现与客户端用户进行交互,对Access数据库
Access数据库转化为SQL Server数据库。
进行各种管理操作,实现用户在线投票和对投票项目
本系统在Access2003中新建一个数据库vote.
进行管理的方法。
mdb,数据库中包含1个表:vote表用于存放投票主
题信息。数据表的结构图如表1所示:
2在线投票系统分析
表1 vote.mdb数据库各数据表结构
2.1系统模块结构
在线投票系统具有用户投票和后台管理两大模
块。在用户投票模块中,用户可以选择投票项目进行
投票,并查看投票结果。在后台管理模块中可以实现:
查看当前系统所有投票项目、添加投票项目、删除投
票项目、修改投票项目等功能,其模块结构如图1所
示。在系统主页Index.asp中制作两个超级链接——
“投票”和“管理”,分别进入两个模块。系统工作流程
如图2所示。
系统
主
]
页
——
-.{ 囊蓁耋霪
图1系统模块结构图
2.2数据库设计
Access具有界面友好、易操作等特点,对于中小
型系统非常适合,因此本系统选用Access作为后台
图2系统工作流程图
[收稿日期"1201O—o3—2o
[作者简介]梁霄波(1983一 ),男,广西鹿寨县人,理学学士,桂林师范高等专科学校数学与计算机科学系助教。
176
梁霄波 基于ASP的在线投票系统的设计与实现 2010年6月
3 系统关键技术的具体实现
3.1连接数据库的实现
在一个动态网站里连接数据库和关闭数据库是
经常要进行的操作,因此把这部分代码单独保存在一
第二部分是根据主页传过来的voteid,用
RecordSet对象的Open方法以SQL语句作为数据源
打开记录集。代码如下:
sqlstr=”select*from vote where voteid=”&
Trim(Request.QueryString(”voteid”))
rs.open sqlstr,conn,1
个名为conn.asp的文件中,当其他的文件需要连接
数据库时直接使用<!一一#include file=”conn.
asp"一一>命令将其包含进来即可。为了便于灵活调
用,在文件中定义两个子过程OpenConn和
第三部分在网页中插入表单和表单元素,设计与
用户交互的界面,获取用户的投票信息。将表单的标
记设置为:
CloseConn,分别用于连接和关闭数据库。Conn.asp
文件代码如下:
Dim Conn,Connstr,Sqlstr,Rs
Sub OpenConn
Set Conn=Server.CreateObject(”
A DoDB.Connection")
set Rs—server.createobject(”ADODB.
recordset”)
connstr一 Provider—Microsoft.Jet.
oLEDB.4.0;Data Source= &Server.MapPath(”
VOTE.MDB”)
End Sub
Sub CloseConn
rs.Close
conn.Close
set rs=NoThing
set conn=NoThing
End Sub
3.2显示投票内容的实现
显示投票内容页面的运行效果如图3所示:
■懿慝圆糊嘲鳗嘲豳瞄篦踊 坦箍霸霭罾强
口巴襄罗那
口国际米兰
口曼联
口里昂
口波尔多
口拜仁
口
口中央陆军
提示:本投票最多遘撑2碴.最雪运替l璜.
I 墓 l 悫I
图3显示投票内容页面的运行效果
投票内容都保存在后台数据库vote.mdb的数据
表vote中,要在网页上显示某个投票的具体内容,程
序包含三个部分:
第一部分是连接数据库,用<!一一#include
file=”conn.asp”一一>命令调用conn.asp"文件,并
且调用其中的OpenConn过程连接数据库。代码为:
Call OpenConn。
<form action一”result.asp?voteid一< =
voteid >&vote=yes”method=”post”></form
>
其中的action属性表示当用户提交表单时将信
息传递给result.asp文件处理,并将本投票的编号
voteid和“vote”参数(该参数决定是投票操作还是查
看操作)传递到处理文件。
在表单标记之间输出投票的具体信息和表单元
素,并使用一个4行1列的表格进行布局,具体代码如
下表2所示:
表2显示投票内容的表格及代码
< =rS(“title”)%>
口投票选项
提示:本投票最多选择< =rs(“votemax”) >项.最少选择
<%=rs(“votemin ) >项。
 ̄input name= type=”submit”value= 投票 />
<input type= button value= 查看 onClick= window.
1ocation- ̄’result.asp?voteid=< =voteid >”/>
第1、3行利用Response对象的Write方法的省
略格式< 一rs(“字段名称”) >输出数据库中保
存的投票信息。第4行插入一个提交按钮和一个查看
结果按钮,点击查看按钮将跳转到result.asp文件并
传递本投票的编号voteid值。第2行要输出投票的各
个选项,其内容和项数都由数据表Vote中的content
字段的值决定。本程序将投票项目的各个选项作为一
个字符串保存在数据表的content字段中,各选项之
间用“l”分隔,因此content字段的内容读取出来后,
要使用split函数将各选项拆分出来,然后利用一个
for each…next循环实现投票选项的显示。程序主要
代码如下:
< Dim cont,contTemp,j
j一0
contTemp—split(votecontent,”I”)’拆分投票
选项,将结果存入临时数组contTemt
For each cont in contTemp‘循环输出投票选项
】77
2010年6月
内容
>
桂林师范高等专科学校学报 第24卷第2期(总第82期)
If Request(”vote”)一”yes”Then’判断用户是
否是投票进人本页的
selvote=Trim(Request.Form(”selvote”))’获
<tr><td><input type一 checkbox”name
=”selvote”value=”< 一j >”>< =cont
></td></tr>
取用户的表单投票数据
< j=j+1
next >
for i一0 to optnum--1’根据用户的投票更新各
个选项的票数
if instr(selvote,i)<>0 then
3.3处理投票并查看投票结果的实现
用户进行了投票操作后,要将投票信息写入数据
库,并将最新投票结果显示出来,运行效果如图4所示。
arVoteNum(i)一arVoteNum(i)+1
end if
next
序粤 造项 桂弗田,百分比 翼觳
1 巴塞,弗 ●●_-____-2J.鲥 】8
2 田荐米兰 一2I.∞‘ l8
3 量曩 —■8.鼎 7
4 蔓暴 ____________0… 20
5 赢尔多 —●8.“ T
6 晖仁 一4.孵 4
7 啊纛I一 一t.“ 4
B 争央墙军 ●4.略 4
图4显示投票结果页面的运行效果
在投票结果中使用柱形图直观地显示了各投票
选项的票数的对比,还显示了各选项具体的得票数、
所占的百分比等内容。程序包含以下几个部分:
第一部分是连接数据库,并根据传入的投票编号
voteid从数据表vote中查询数据,并将结果存入记录
集对象rs中。此处代码与显示投票内容中的第一、二
部分类似。
第二部分首先读取数据表中当前投票各个字段
值,存入相应变量,然后将各个选项的票数分离之后
存入arVoteNum数组中。主要代码如下:
Title=rs.fields(”title”)
……
’如上,分别获取数据表中各个字段值存
入相应变量
dim arVoteNum(optnum)’定义存放各个选项
票数的数组
if voteResult<>"”then’从数据库中获取各个
选项的票数存入arVoteNum数组
Dim arTemp
arTemp=Split(voteResuh,”l,,)
For i=0 to UBound(arTemp)
arVoteNum(i)--arTemp(i)
Next
end if
第三部分判断用户如果是投票之后进入本页的,
则需要将用户选择的选项的票数加1,并保存到数据
库中。代码如下:
178
’将结果写入数据库
voteResuh="”
for i一0 to optnum--l
voteresuh—voteResult ̄cstr(arVoteNum(i))
&,,I”
next
voteResuh = mid (voteresuh, 1,len
(voteResult)一1)’将最后多余的l符号去掉
rs.Fields(”result )=voteResuh’更新数据库
rs.Update
end if
第四部分统计各选项的得票数总和,用于计算每
个选项得票数所占的百分比。代码如下:
voteCount=0’统计总票数
For i=0 to optnum-1
voteCount=voteCount+arVoteNum(i)
Next
第五部分在表格输出投票结果。以柱形图的形式
表示票数的多少,使用了一个1o像素宽的图片作为
柱形图,通过用选项的得票数来控制其Width属性,
便可以得到不同长度的柱形图。运行结果如图4所
示,具体代码如下表3所示:
其中表格的第3行首先使用split函数将投票项
目的各选项分离,然后使用循环结构将所有选项显示
出来,主要代码如下所示:
< Dim cont,eontTemp,j
j一0
contTemp=split(votecontent,”I”)
For each cont in contTemp >
……
’循环输出一行,详细代码如上表第3行
所示
< j—j+1
next%>
梁霄波 基于ASP的在线投票系统的设计与实现 2010年6月
3.4删除投票的实现
删除投票要分两步实现。
第一步,在管理投票主界面中分页显示每一条投
票记录,并给每条记录制作如下删除超级链接:
<a href一”delvote.asp?voteid:< rs(”
voteid”)%> ̄page一< 一P ̄//o>”onClick一”
return confirm(’是否将此投票删除?’)”>删除</a
>
使得点击“删除”超级链接之后将投票编号
voteid和分页之后该条记录所在的页码传递到删除
页delvote.asp,并弹出删除确定对话框。
第二步,在删除页delvote.asp中,首先获取要删
除投票记录的编号和当前页码,然后执行一条SQL
的删除命令,将数据表vote的相应记录删除,再返回
管理页面,并将页码传回,以便回到原来所在页继续
操作。程序主要代码如下:
voteid=Trim(Request。QueryString(”
voteid”))
page=Trim(Request.QueryString(”page”))
strsql:”DELETE * FRoM Vote WHERE
voteid一”&voteid
conn.execute(strsqI)
response.Redirect”manavote.asp?page=”
&page
3.5新增投票的实现
新增投票要分两步实现。
第一步,在管理投票主界面中制作“添加投票”表
单,设置表单的action属性为“addvote.asp”。表单设
计如图5所示:
■●I■・
■多5嘀 r●B庶.
德器臻 n 目灶蝴 ;
麓器 ∞最_蛆.崃 _“ 一 :
瞳l蕞目t
●十控聃目占一忏.用冒事井■
柏■项目中 也曾譬 。I 罕开.
图5添加投票项目表单
第二步,在addvote.asp文件中,首先获取新增投
票的信息,然后利用RecordSet对象的AddNew方法
向数据表新增一条记录,接着弹出操作成功提示框,
最后返回管理页面。程序主要代码如下:
voteTitle ̄Request.Form(”voteTitle”)
……
’如上,分别获取新增投票的信息
Dim arTemp
arTemp---Split(voteContent,”J”)
optNum=UBound(arTemp)+1’求出投票选
项的数量
Call OpenConn
strsql:”SELECT Top 1*FROM Vote
rs.Open strsql,conn,3,2
rs.AddNew
rs.Fields("title")voteTitle
……
’如上,分别写入数据表相应字段
rs.Update
Call CloseConn
response.write(”<script language=
’Javascript’>alert(’添加投票成功!’);window.
1ocation.replace('manavote.asp’);</script>”)
3.6修改投票的实现
修改投票要分三步实现。
第一步,在管理投票主界面中给每条投票记录制
作如下修改超级链接:
<a href=”editvote.asp?voteid一< 一rs(”
voteid”) >&page一< =P >”>修改</a>
第二步,在editvote.asp文件中根据管理投票页
传过来投票编号voteid,从数据表vote读取相应的记
录并显示在表单中。要将数据显示在表单中,对于各
个表单元素来说方法不一样。对于单行文本框,只要
给value属性赋值就可以了,如<input name一”
voteTitle”type=”text”value一”< =rs(”title")
>”>;对于多行文本框,将数据直接写在其双标签
之间即可,如 ̄textarea name一”voteContent"cols
=”40”rows一”6”>< =rs(”content”) ></
】79
2010年6月 桂林师范高等专科学校学报 第24卷第2期(总第82期)
textarea>。
组件ADO的内部对象实现对后台数据库的各种操
第三步,在表单中修改信息以后,再根据新的数
作。经测试,系统运行正确。但是系统还有不少考虑
据更新数据表vote的相应记录,然后返回管理页面。
不够周到、需要改进的地方,例如,在安全性方面,在
主要代码如下:
进入管理页面之前应该有一个身份验证,只有具有管
voteTitle=Request.Form(”voteTitle”)
理员的用户名和密码才能进入修改;在容错性方面,
……
’如上,分别获取修改之后的投票的信息
应当有效地限制同一用户在短时间内的投票次数,这
Dim contTemp
样才能更好地保证投票数据的真实性。
contTemp=Split(voteContent,”I”)
voteNurn=UBound(contTemp)+1
rs.Fields("title")=voteTitle
[参考文献]
……
’如上,分别写入数据表相应字段
rs.Update
1-13
邹于丰.基于ASP的留言板系统的设计与实现[J].电脑
response.write”<script>location.href=
知识与技术,2010,(1):113—115.
’manavote.asp?page一”&page& ’;</script>”
[2] 尚俊杰.网络程序设计——ASP[M].北京:清华大学出
版社,2009.
4结束语
[3-1 邹于丰.案例教学法在网络程序设计ASP课程中的应用
[J].电脑知识与技术,2008,(8):2443—2445.
本系统主要运用了表单来收集用户的信息;使用 [4]
伍云辉.ASP实例自学手册:通过322个例子掌握Web
ASP的内部对象Request和Response的各种方法实
开发捷径[M]。北京:电子工业出版社,2008.
现与客户端的用户进行交互;使用ASP的数据存取
Design and Realization of Online Voting System Based on ASP
Liang Xiaobo
(Dept.of Mathematics and Computer Science of Guilin Normal College,Guilin,Guangxi 541001,China)
Abstract:The fundamental function,structure and the key technologies of the online voting system are
analyzed and discussed based on ASP.Comprehensively utilizing various programming methods of the
system,the various dynamic websites and Network Data Base Management System can be designed.
Keywords:Online Voting;ASP;Access database
(责任编辑陈小凤)
18O
发布者:admin,转转请注明出处:http://www.yc00.com/news/1718861834a2753141.html
评论列表(0条)