文章查询
 请输入查询关键字:
  
    
 
  本期导读>>
 

利用asp制作学校多选项调查投票系统
杭州市萧山区高桥初中    夏维功

    开学初期,我校要在校园网上开展“十佳生”评选活动,一共有27位学生候选人。由于网上找不到这么多选项的免费调查投票系统,于是我就自己动手编制。结果,我用了一天的时间,制作了一个调查投票系统。该系统能防止一人多投、重复注册投票等问题,很好地解决了多选项投票的问题。现不敢独享,贡献出来,一起进步。
    本软件在Windows98+PWS4.0上运行通过。用Macromedia公司的Dreamweaver Ultradev4.0编写。
    一、投票系统的文件功能
    我根据投票的实际情况,建立了6个文件,分别是default.asp、update.asp、studentxinxi.asp、thank.asp、toupiaoxuesheng.asp。它们的作用分别是:
default.asp—投票系统的主界面,用于投票。
update.asp—default.asp的后台程序,主要接受投票,并对此进行处理。这是本系统的关键程序。
    studentxinxi.asp—default.asp的辅助程序,主要显示27名候选人的个人资料和他们各自获得的选票数。
    thank.asp—帮助文件,也是一个提供多重链接的界面,用来链接其他文件。该文件只有在合法用户进行合法投票后才能被看到。
    toupiaoxuesheng.asp—系统使用者参考文件,用来显示整个投票情况。
    二、建表
    建立这样的投票系统,利用access2000就已经足够了。方法如下:
    建立一个数据库,命名为chengji.mdb。在其中建立两个表,分别命名为表techangsheng、表student。前者用来反映特长生的情况。后者用来规定参加投票调查的学生。


    三、数据库链接
    建立一个文件,命名为conchengji.asp,做为数据库的链接文件,在该文件中输入
    〈%
    MM_conchengji_STRING="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\internet\gqschool\chengji.mdb;Persist Security Info=False"
    %〉

    当然,这儿的路径应改成数据库文件存放的路径。
    有了这个链接文件,我们在需要数据库链接的地方,就不必输入一大段文字,而只要用句子来调用该文件就可以了。
    四、建立default.asp文件
    default.asp文件主要是提供投票界面。现一共有27名候选人,这就需要在该界面中给出各自的复选框。为减少麻烦,只建立一个复选框就够了。
    利用Ultradev4.0软件建立数据库中的特长生表记录集Recordset1。代码如下:
  <%
  set Recordset1 = Server.CreateObject("ADODB.Recordset")
  Recordset1.ActiveConnection = MM_conchengji_STRING
  Recordset1.Source = "SELECT * FROM techangsheng ORDER BY Class ASC"
  Recordset1.Open()
  %>
    然后建立一个form表单,插入两个文本域,分别作为学生的姓名和学号输入,他们的属性分别是Name和Code。
    插入一个复选框,改名为checkbox, 将它的Value属性改为:<%=(Recordset1.Fields.Item ("Id").Value)%>,在复选框后边加入<%=(Recordset1.Fields.Item("Name").Value)%>">。
    利用Ultradev中的服务器行为,建立repeat region行为,选中全部记录。这一步主要是将所有的特长生显示出来,并提供他的信息链接。
    最后,插入提交按钮,将其action属性改为“update.asp”。
    五、建立update.asp后台处理文件

图一

    如图1,建立记录集Recordset1。该记录集调用了default.asp提交的表单内容,用该表单内容来判断参加投票学生的真实身份。如果该学生填写的内容不真实,就拒绝他参加下面的投票。为了防止学生冒名顶替,我们还设置了学号。这样基本上可以起到防范作用,为投票结果增加可靠性。
    该记录集的代码如下:
' <%
         if(request.form("checkbox") <> "") then Command1__strid = request.form("checkbox")
         if Recordset1.eof then
               response.write "请你输入你的真名和你的班级,不得弄虚作假,一旦发现要追究责任。如果你的名字是两个字的话,请在姓和名之间用空格"
               response.end
       else if Recordset1.Fields.Item("toupiao").Value<>"" then
           response.write "你已经投过一次票,不允许重复投票"
           response.end
else
            Recordset1.Fields.Item("toupiao").Value=Command1__strid
Recordset1.update
set Command1 = Server.CreateObject("ADODB.Command")
Command1.ActiveConnection = MM_conchengji_STRING
Command1.CommandText = "UPDATE techangsheng  SET dengji=dengji+1  WHERE Id in (" + Replace(Command1__strid, "'", "''") + ")"
Command1.CommandType = 1
Command1.CommandTimeout = 0
Command1.Prepared = true
Command1.Execute()
response.redirect "xinxi.asp"
response.end
end if    %>
    六、建立xinxi.asp文件
    利用该文件,可以查看整个候选人的得票情况,并建立他们的柱形图。方法如下:
    首先建立一个关于techangsheng 的记录集 Recordset1,如图2。其中班级、姓名、投票数、性别、主要事迹、假期活动考察结果等都是动态数据。在投票结果栏中,红色滑标的宽度是随着投票数得分的变化而变化的。

图二

    再将记录集Recordset1中的dengji字段绑定到红色滑标的“width”上,如图3。这样,红色滑标就会随着候选人等级的提高而变化。

图三

    最后,显示出27名候选人的情况。只要全选上面的表格,用服务器行为的repeat region动作,如图4。

图四

    七、建立studentxinxi.asp文件
    这个文件的建立基本跟xinxi.asp文件差不多,因此把xinxi.asp文件复制一份,改名为studentxinxi.asp,再稍微做点修改就可以了。
    首先,去掉 repeat region 服务器行为。因为这里查看的是一个特定的候选人,而不是所有的候选人。其次,对Recordset1记录集做如下修改:
'    <%
Dim Recordset1__MMColParam
Recordset1__MMColParam = "%"
if (Request.QueryString("studentid") <>"")then Recordset1__MMColParam
=Request.QueryString("studentid")
%>   ’ 定义一个变量,接受default.asp 传来的特长生学号。
<%
set Recordset1 = Server.CreateObject("ADODB.Recordset")
Recordset1.ActiveConnection = MM_conchengji_STRING
Recordset1.Source = "SELECT * FROM techangsheng WHERE Id = '" +
Replace(Recordset1__MMColParam, "'", "''") + "'"
Recordset1.Open()
%>
    八、toupiaoxuesheng.asp文件
    建立一个关于表student的记录集。因为student表中学生很多,不可能全部显示出来,只能显示已参加投票学生的投票状态,再用同样的方法做个repeat region的动作就可以了。该记录集代码如下:
<%
Dim Recordset1__ss
Recordset1__ss = ""
%>
<%
set Recordset1 = Server.CreateObject("ADODB.Recordset")
Recordset1.ActiveConnection = MM_conchengji_STRING
Recordset1.Source = "SELECT *  FROM student  WHERE toupiao<>'" +
Replace(Recordset1__ss, "'", "''") + "'"
Recordset1.Open()
%>
    好了,一切OK。在实际使用中,效果很好。



你的评论   所有评论
昵称:
评论: