<?xml version="1.0" encoding="utf-8"?>
<!-- If you are running a bot please visit this policy page outlining rules you must respect. http://www.livejournal.com/bots/ -->
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:lj="http://www.livejournal.com">
  <id>urn:lj:livejournal.com:atom1:frankey521</id>
  <title>frankey521</title>
  <subtitle>frankey521</subtitle>
  <author>
    <name>frankey521</name>
  </author>
  <link rel="alternate" type="text/html" href="http://frankey521.livejournal.com/"/>
  <link rel="self" type="text/xml" href="http://frankey521.livejournal.com/data/atom"/>
  <updated>2006-08-17T12:26:07Z</updated>
  <lj:journal userid="10873640" username="frankey521" type="personal"/>
  <link rel="service.feed" type="application/x.atom+xml" href="http://frankey521.livejournal.com/data/atom" title="frankey521"/>
  <link rel="hub" href="http://pubsubhubbub.appspot.com/"/>
  <entry>
    <id>urn:lj:livejournal.com:atom1:frankey521:1872</id>
    <link rel="alternate" type="text/html" href="http://frankey521.livejournal.com/1872.html"/>
    <link rel="self" type="text/xml" href="http://frankey521.livejournal.com/data/atom/?itemid=1872"/>
    <title>frankey</title>
    <published>2006-08-17T12:26:07Z</published>
    <updated>2006-08-17T12:26:07Z</updated>
    <content type="html">&lt;div&gt;&lt;a href="http://www.livejournal.com/poll/?id=797763"&gt;View Poll: frankey&lt;/a&gt;&lt;/div&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:frankey521:1711</id>
    <link rel="alternate" type="text/html" href="http://frankey521.livejournal.com/1711.html"/>
    <link rel="self" type="text/xml" href="http://frankey521.livejournal.com/data/atom/?itemid=1711"/>
    <title>补充</title>
    <published>2006-08-11T12:44:31Z</published>
    <updated>2006-08-11T12:44:31Z</updated>
    <content type="html">&amp;lt;%''''获取参数。action表示动作，分别对应上面的功能。''''根据动作来转向相应的子程序''''登录子程序''''退出登录子程序''''执行增加调查问题子程序''''执行增加调查答案子程序''''执行修改调查子程序 问题和答案一起修改''''执行删除调查问题子程序''''执行删除调查答案子程序&lt;html&gt;&amp;lt;%''''判断是否登录，没有则显示登录表单''''根据动作显示相应表单''''显示所有调查子程序''''显示单个调查子程序。问题和答案一起显示''''显示增加调查子程序。''''显示登录表单%&amp;gt;&lt;/html&gt; 　　六、代码编写　　做好了流程设计后，写代码就比较有条理了。让我们从简单的开始。在编写代码之前，我们要先在数据库里输入一些记录，以便做测试。先加入一条调查问题，和几个调查答案，并手工输入一些统计信息。　我们先来写显示调查表单的surveycode.asp 这个文件要在其它页面中被调用，所以我们写成JS和VBS混用的方式。调用的时候可以把它放在某个表格中，用下面的语句：　　按照上面的流程，在显示表单前，先要判断一下调查是否存在，是否在进行中。另外，在表单中要提交一个隐藏的参数，来表示调查的问题编号(id)，答案提交的时候，提交的是答案的编号vote_no　　文件名 surveycode.asp&amp;lt;%id=request.querystring("id")if id&amp;lt;&amp;gt;"" then ''''如果有参数opendb my ''''联接数据库sql="select * from survey where survey_id="&amp; id ''''查询语句searchtable my,sql,rs ''''查询数据库if not rs.eof then ''''如果有这个调查记录question=rs("survey_question") ''''读出问题surveytype=rs("survey_type") ''''读出答案类型stime=rs("survey_stime") ''''读出开始时间etime=rs("survey_etime") ''''读出结束时间closetable rs ''''关闭表if stime&lt;div class='ljparseerror'&gt;[&lt;b&gt;Error:&lt;/b&gt; Irreparable invalid markup ('&amp;lt;now()&amp;gt;') in entry.  Owner must fix manually.  Raw contents below.]&lt;br /&gt;&lt;br /&gt;&lt;div style="width: 95%; overflow: auto"&gt;&amp;lt;%&amp;#39;&amp;#39;&amp;#39;&amp;#39;获取参数。action表示动作，分别对应上面的功能。&amp;#39;&amp;#39;&amp;#39;&amp;#39;根据动作来转向相应的子程序&amp;#39;&amp;#39;&amp;#39;&amp;#39;登录子程序&amp;#39;&amp;#39;&amp;#39;&amp;#39;退出登录子程序&amp;#39;&amp;#39;&amp;#39;&amp;#39;执行增加调查问题子程序&amp;#39;&amp;#39;&amp;#39;&amp;#39;执行增加调查答案子程序&amp;#39;&amp;#39;&amp;#39;&amp;#39;执行修改调查子程序 问题和答案一起修改&amp;#39;&amp;#39;&amp;#39;&amp;#39;执行删除调查问题子程序&amp;#39;&amp;#39;&amp;#39;&amp;#39;执行删除调查答案子程序&amp;lt;html&amp;gt;&amp;lt;%&amp;#39;&amp;#39;&amp;#39;&amp;#39;判断是否登录，没有则显示登录表单&amp;#39;&amp;#39;&amp;#39;&amp;#39;根据动作显示相应表单&amp;#39;&amp;#39;&amp;#39;&amp;#39;显示所有调查子程序&amp;#39;&amp;#39;&amp;#39;&amp;#39;显示单个调查子程序。问题和答案一起显示&amp;#39;&amp;#39;&amp;#39;&amp;#39;显示增加调查子程序。&amp;#39;&amp;#39;&amp;#39;&amp;#39;显示登录表单%&amp;gt;&amp;lt;/html&amp;gt; 　　六、代码编写　　做好了流程设计后，写代码就比较有条理了。让我们从简单的开始。在编写代码之前，我们要先在数据库里输入一些记录，以便做测试。先加入一条调查问题，和几个调查答案，并手工输入一些统计信息。　我们先来写显示调查表单的surveycode.asp 这个文件要在其它页面中被调用，所以我们写成JS和VBS混用的方式。调用的时候可以把它放在某个表格中，用下面的语句：&amp;lt;SCRIPT Language=&amp;quot;JavaScript&amp;quot; SRC=&amp;quot;surveycode.asp?id=1&amp;quot;&amp;gt;&amp;lt;/SCRIPT&amp;gt;　　按照上面的流程，在显示表单前，先要判断一下调查是否存在，是否在进行中。另外，在表单中要提交一个隐藏的参数，来表示调查的问题编号(id)，答案提交的时候，提交的是答案的编号vote_no　　文件名 surveycode.asp&amp;lt;!--#include file=&amp;quot;inc.asp&amp;quot; --&amp;gt;&amp;lt;%id=request.querystring(&amp;quot;id&amp;quot;)if id&amp;lt;&amp;gt;&amp;quot;&amp;quot; then &amp;#39;&amp;#39;&amp;#39;&amp;#39;如果有参数opendb my &amp;#39;&amp;#39;&amp;#39;&amp;#39;联接数据库sql=&amp;quot;select * from survey where survey_id=&amp;quot;&amp;amp; id &amp;#39;&amp;#39;&amp;#39;&amp;#39;查询语句searchtable my,sql,rs &amp;#39;&amp;#39;&amp;#39;&amp;#39;查询数据库if not rs.eof then &amp;#39;&amp;#39;&amp;#39;&amp;#39;如果有这个调查记录question=rs(&amp;quot;survey_question&amp;quot;) &amp;#39;&amp;#39;&amp;#39;&amp;#39;读出问题surveytype=rs(&amp;quot;survey_type&amp;quot;) &amp;#39;&amp;#39;&amp;#39;&amp;#39;读出答案类型stime=rs(&amp;quot;survey_stime&amp;quot;) &amp;#39;&amp;#39;&amp;#39;&amp;#39;读出开始时间etime=rs(&amp;quot;survey_etime&amp;quot;) &amp;#39;&amp;#39;&amp;#39;&amp;#39;读出结束时间closetable rs &amp;#39;&amp;#39;&amp;#39;&amp;#39;关闭表if stime&amp;lt;now() and etime&amp;gt;now() then &amp;#39;&amp;#39;&amp;#39;&amp;#39;如果调查正在进行中&amp;#39;&amp;#39;&amp;#39;&amp;#39;下面输出调查表单&amp;#39;&amp;#39;&amp;#39;&amp;#39;先输出表单和问题,表单提交到survey_vote.asp%&amp;gt;document.write(&amp;quot;&amp;lt;form action=&amp;#39;&amp;#39;&amp;#39;&amp;#39;survey_vote.asp&amp;#39;&amp;#39;&amp;#39;&amp;#39; target=&amp;#39;&amp;#39;&amp;#39;&amp;#39;_blank&amp;#39;&amp;#39;&amp;#39;&amp;#39; method=&amp;#39;&amp;#39;&amp;#39;&amp;#39;post&amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;gt;&amp;quot;);document.write(&amp;quot;&amp;lt;table border=&amp;#39;&amp;#39;&amp;#39;&amp;#39;1&amp;#39;&amp;#39;&amp;#39;&amp;#39; cellpadding=&amp;#39;&amp;#39;&amp;#39;&amp;#39;2&amp;#39;&amp;#39;&amp;#39;&amp;#39; cellspacing=0&amp;#39;&amp;#39;&amp;#39;&amp;#39; bordercolorligh=&amp;#39;&amp;#39;&amp;#39;&amp;#39;#000000&amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;quot;);document.write(&amp;quot; bordercolordark=&amp;#39;&amp;#39;&amp;#39;&amp;#39;#ffffff&amp;#39;&amp;#39;&amp;#39;&amp;#39; width=&amp;#39;&amp;#39;&amp;#39;&amp;#39;100%&amp;#39;&amp;#39;&amp;#39;&amp;#39; align=&amp;#39;&amp;#39;&amp;#39;&amp;#39;center&amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;gt;&amp;lt;tbody&amp;gt;&amp;quot;);document.write(&amp;quot;&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;#39;&amp;#39;&amp;#39;&amp;#39;2&amp;#39;&amp;#39;&amp;#39;&amp;#39; align=&amp;#39;&amp;#39;&amp;#39;&amp;#39;center&amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;gt;&amp;lt;b&amp;gt;&amp;lt;%=server.htmlencode(question)%&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;quot;);&amp;lt;%sql=&amp;quot;select vote_no,vote_answer from survey_vote where vote_id=&amp;quot;&amp;amp;id &amp;#39;&amp;#39;&amp;#39;&amp;#39;查询答案的SQLsearchtable my,sql,rs &amp;#39;&amp;#39;&amp;#39;&amp;#39;执行查询if not rs.eof then &amp;#39;&amp;#39;&amp;#39;&amp;#39;如果有答案，就输出for i=1 to rs.recordcount%&amp;gt; document.write(&amp;quot;&amp;lt;tr&amp;gt;&amp;lt;td align=&amp;#39;&amp;#39;&amp;#39;&amp;#39;right&amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;gt;&amp;lt;input name=&amp;#39;&amp;#39;&amp;#39;&amp;#39;res&amp;#39;&amp;#39;&amp;#39;&amp;#39; type=&amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;quot;);&amp;lt;%if surveytype then &amp;#39;&amp;#39;&amp;#39;&amp;#39;判断类型，显示单选或者多选%&amp;gt;document.write(&amp;quot;checkbox&amp;quot;);&amp;lt;%else%&amp;gt; document.write(&amp;quot;radio&amp;quot;);&amp;lt;%end if &amp;#39;&amp;#39;&amp;#39;&amp;#39;下面这句输出答案的文字和提交的值(vote_no)%&amp;gt;document.write(&amp;quot;&amp;#39;&amp;#39;&amp;#39;&amp;#39; value=&amp;lt;%=rs(&amp;quot;vote_no&amp;quot;)%&amp;gt;&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;%=rs(&amp;quot;vote_answer&amp;quot;)%&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;quot;);&amp;lt;%rs.movenextnext&amp;#39;&amp;#39;&amp;#39;&amp;#39;下面几句输出一个隐藏的参数，传递问题编号(id)&amp;#39;&amp;#39;&amp;#39;&amp;#39;并用一个JS函数来定义点击查看后的链接%&amp;gt;document.write(&amp;quot;&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;#39;&amp;#39;&amp;#39;&amp;#39;2&amp;#39;&amp;#39;&amp;#39;&amp;#39; align=&amp;#39;&amp;#39;&amp;#39;&amp;#39;center&amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;gt;&amp;lt;input type=&amp;#39;&amp;#39;&amp;#39;&amp;#39;hidden&amp;#39;&amp;#39;&amp;#39;&amp;#39; name=&amp;#39;&amp;#39;&amp;#39;&amp;#39;id&amp;#39;&amp;#39;&amp;#39;&amp;#39; value=&amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;lt;%=id%&amp;gt;&amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;gt;&amp;quot;);document.write(&amp;quot;&amp;lt;input type=&amp;#39;&amp;#39;&amp;#39;&amp;#39;submit&amp;#39;&amp;#39;&amp;#39;&amp;#39; class=button value=&amp;#39;&amp;#39;&amp;#39;&amp;#39;投票&amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;gt; &amp;quot;);document.write(&amp;quot;&amp;lt;input type=button class=button value=&amp;#39;&amp;#39;&amp;#39;&amp;#39;查看&amp;#39;&amp;#39;&amp;#39;&amp;#39; onclick=&amp;#39;&amp;#39;&amp;#39;&amp;#39;jump(&amp;lt;%=id%&amp;gt;)&amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;gt;&amp;quot;);document.write(&amp;quot;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/tbody&amp;gt;&amp;lt;/table&amp;gt;&amp;lt;/form&amp;gt;&amp;quot;);function jump(id){window.open(&amp;quot;survey_vote.asp?id=&amp;quot;+id,&amp;quot;survey&amp;quot;)}&amp;lt;%end ifend ifend ifclosetable rsclosedb myend if%&amp;gt; 　　在surveycode.asp完成后，我们实现上已经确定了以下几点：　　1、在survey_vote.asp中，如果querystring参数id有值，则是查看结果；　　2、在survey_vote.asp中，如果form参数id有值，则要先进行统计；　　3、在survey_vote.asp中，提交来的form参数res是答案的编号vote_no;　　七、统计结果　　首先我们来完成与surveycode.asp最密切相关的显示统计结果survey_vote.asp文件。在上一篇的结尾，我们已经说明了在surveycode.asp中确定的一些参数。　　统计结果 survey_vote.asp&amp;lt;!--#include file=&amp;quot;inc.asp&amp;quot; --&amp;gt;&amp;lt;html&amp;gt;&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;调查统计结果&amp;lt;/title&amp;gt;&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;main.css&amp;quot; type=&amp;quot;text/css&amp;quot;&amp;gt;&amp;lt;/head&amp;gt;&amp;lt;body&amp;gt;&amp;lt;%&amp;#39;&amp;#39;&amp;#39;&amp;#39;上一句先加入包含文件，引用函数。id=request.querystring(&amp;quot;id&amp;quot;) &amp;#39;&amp;#39;&amp;#39;&amp;#39;获取querystring参数idopendb my &amp;#39;&amp;#39;&amp;#39;&amp;#39;连接数据库if id=&amp;quot;&amp;quot; then &amp;#39;&amp;#39;&amp;#39;&amp;#39;如果没有，则不是直接看结果id=request.form(&amp;quot;id&amp;quot;) &amp;#39;&amp;#39;&amp;#39;&amp;#39;获取form参数idif id&amp;lt;&amp;gt;&amp;quot;&amp;quot; then &amp;#39;&amp;#39;&amp;#39;&amp;#39;如果有值，则是要先统计surveycount() &amp;#39;&amp;#39;&amp;#39;&amp;#39;调用统计子程序end ifend ifif id&amp;lt;&amp;gt;&amp;quot;&amp;quot; thendisp_survey() &amp;#39;&amp;#39;&amp;#39;&amp;#39;不管是哪种，最后都显示结果end ifclosedb my &amp;#39;&amp;#39;&amp;#39;&amp;#39;关闭数据库&amp;#39;&amp;#39;&amp;#39;&amp;#39;-----统计子程序-----sub surveycount()if session(&amp;quot;survey_ok&amp;quot;)=&amp;quot;&amp;quot; then &amp;#39;&amp;#39;&amp;#39;&amp;#39;如果还没投票no=request.form(&amp;quot;res&amp;quot;) &amp;#39;&amp;#39;&amp;#39;&amp;#39;得到答案的编号if no&amp;lt;&amp;gt;&amp;quot;&amp;quot; then&amp;#39;&amp;#39;&amp;#39;&amp;#39;定义SQL语句，让提交的答案数量+1sql=&amp;quot;update survey_vote set vote_count=vote_count+1 where vote_no= in (&amp;quot; &amp;amp; no &amp;amp;&amp;quot;)&amp;quot;my.execute sqlend ifsession(&amp;quot;survey_ok&amp;quot;)=&amp;quot;ok&amp;quot;end ifend sub&amp;#39;&amp;#39;&amp;#39;&amp;#39;------------------&amp;#39;&amp;#39;&amp;#39;&amp;#39;---显示结果子程序---sub disp_survey()&amp;#39;&amp;#39;&amp;#39;&amp;#39;定义SQL语句，得到调查的问题sql=&amp;quot;select survey_question from survey where survey_id=&amp;quot; &amp;amp; idsearchtable my,sql,rs &amp;#39;&amp;#39;&amp;#39;&amp;#39;执行查询question=rs(&amp;quot;survey_question&amp;quot;) &amp;#39;&amp;#39;&amp;#39;&amp;#39;把问题存到question中closetable rs &amp;#39;&amp;#39;&amp;#39;&amp;#39;关闭表&amp;#39;&amp;#39;&amp;#39;&amp;#39;定义SQL语句，得到答案的数量总和sql=&amp;quot;select sum(vote_count) as total from survey_vote where vote_id=&amp;quot;&amp;amp; idsearchtable my,sql,rstotal=rs(&amp;quot;total&amp;quot;)closetable rs &amp;#39;&amp;#39;&amp;#39;&amp;#39;关闭表&amp;#39;&amp;#39;&amp;#39;&amp;#39;定义SQL语句，得到所有的答案文本部份及投票数sql=&amp;quot;select vote_answer,vote_count from survey_vote where vote_id=&amp;quot; &amp;amp; idsearchtable my,sql,rs &amp;#39;&amp;#39;&amp;#39;&amp;#39;执行查询&amp;#39;&amp;#39;&amp;#39;&amp;#39;下面用表格来输出统计表%&amp;gt;&amp;lt;table width=&amp;quot;500&amp;quot; border=&amp;quot;1&amp;quot; align=&amp;quot;center&amp;quot; cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot;bordercolorligh=&amp;quot;#000000&amp;quot; bordercolordark=&amp;quot;#ffffff&amp;quot;&amp;gt;&amp;lt;tr&amp;gt; &amp;lt;td colspan=&amp;quot;4&amp;quot; align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;b&amp;gt;调查统计结果&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt; &amp;lt;td colspan=&amp;quot;4&amp;quot;&amp;gt;&amp;lt;b&amp;gt;调查问题：&amp;lt;%=question%&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;tr &amp;gt; &amp;lt;td width=&amp;quot;150&amp;quot; align=&amp;quot;center&amp;quot; height=&amp;quot;20&amp;quot;&amp;gt;答案&amp;lt;/td&amp;gt;&amp;lt;td width=&amp;quot;150&amp;quot; align=&amp;quot;center&amp;quot; height=&amp;quot;20&amp;quot;&amp;gt;投票率&amp;lt;/td&amp;gt;&amp;lt;td width=&amp;quot;100&amp;quot; align=&amp;quot;center&amp;quot; height=&amp;quot;20&amp;quot;&amp;gt;比例&amp;lt;/td&amp;gt;&amp;lt;td width=&amp;quot;100&amp;quot; align=&amp;quot;center&amp;quot; height=&amp;quot;20&amp;quot;&amp;gt;票数&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;%do while not rs.eofif total=0 thenpercent=0 &amp;#39;&amp;#39;&amp;#39;&amp;#39;如果没人投票，则百分比为0elsepercent=int(rs(&amp;quot;vote_count&amp;quot;)/total*10000)/100 &amp;#39;&amp;#39;&amp;#39;&amp;#39;计算百分比end if%&amp;gt;&amp;lt;tr&amp;gt; &amp;lt;td width=&amp;quot;150&amp;quot; align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;%=rs(&amp;quot;vote_answer&amp;quot;)%&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td width=&amp;quot;150&amp;quot; align=&amp;quot;left&amp;quot;&amp;gt; &amp;lt;table border=&amp;quot;0&amp;quot; width=&amp;quot;&amp;lt;%=percent%&amp;gt;&amp;quot; bgcolor=&amp;quot;#CCCC00&amp;quot; height=&amp;quot;10&amp;quot;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td width=&amp;quot;100&amp;quot; align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;%=percent%&amp;gt;%&amp;lt;/td&amp;gt;&amp;lt;td width=&amp;quot;100&amp;quot; align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;%=rs(&amp;quot;vote_count&amp;quot;)%&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;%rs.movenextloop%&amp;gt;&amp;lt;tr&amp;gt; &amp;lt;td colspan=&amp;quot;4&amp;quot;&amp;gt; 至 &amp;lt;%=now()%&amp;gt; 止，共有 &amp;lt;%=total%&amp;gt; 张投票 &amp;lt;a href=&amp;quot;javascript:window.close()&amp;quot;&amp;gt;关闭窗口&amp;lt;/a&amp;gt; &amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&amp;lt;%closetable rs &amp;#39;&amp;#39;&amp;#39;&amp;#39;关闭表end sub&amp;#39;&amp;#39;&amp;#39;&amp;#39;------------------%&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt; 　　在显示投票过程中，我们用session变量survey_ok来表示是否已经投过票。另外，这显示统计中，引用CSS文件来控制表格的样式，你们可以根据自己的要求自己加入。　　八、列出所有调查的状态　　现在我们来完成survey.asp，它的主要任务是列出所有的调查状态，包括：　　1、调查的问题，链接到投票表单页面（直接写在本页中）；　　2、调查的起启时间；　　3、调查的结束时间；　　4、调查的进行状态：未开始、进行中、已结束；　　5、调查的投票数；　　6、调查的类型，单选还是多选；　　7、另外给出一个链接查看投票结果；　　根据这些要求，查询相应的表就可以了，有些语句，比如得到投票总数，SQL语句其实在上面的survey_vote.asp中已经写过了。　　列出所有调查的状态 survey.asp&amp;lt;!--#include file=&amp;quot;inc.asp&amp;quot; --&amp;gt;&amp;lt;html&amp;gt;&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;在线调查列表&amp;lt;/title&amp;gt;&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;main.css&amp;quot; type=&amp;quot;text/css&amp;quot;&amp;gt;&amp;lt;/head&amp;gt;&amp;lt;body&amp;gt;&amp;lt;%id=request.querystring(&amp;quot;id&amp;quot;) &amp;#39;&amp;#39;&amp;#39;&amp;#39;获取参数if id&amp;lt;&amp;gt;&amp;quot;&amp;quot; then &amp;#39;&amp;#39;&amp;#39;&amp;#39;如果有参数，则显示这个调查表单response.write &amp;quot;&amp;lt;SCRIPT Language=&amp;#39;&amp;#39;&amp;#39;&amp;#39;JavaScript&amp;#39;&amp;#39;&amp;#39;&amp;#39; SRC=&amp;#39;&amp;#39;&amp;#39;&amp;#39;surveycode.asp?id=&amp;quot;&amp;amp;id&amp;amp;&amp;quot;&amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;gt;&amp;lt;/SCRIPT&amp;gt;&amp;quot;else &amp;#39;&amp;#39;&amp;#39;&amp;#39;否则调用子程序显示状态disstat() end if&amp;#39;&amp;#39;&amp;#39;&amp;#39;-----显示状态子程序----sub disstat()opendb my &amp;#39;&amp;#39;&amp;#39;&amp;#39;连接数据库opentable my,&amp;quot;survey&amp;quot;,rs &amp;#39;&amp;#39;&amp;#39;&amp;#39;直接打开表&amp;#39;&amp;#39;&amp;#39;&amp;#39;下面用表格显示每个记录&amp;#39;&amp;#39;&amp;#39;&amp;#39;先显示表头%&amp;gt;&amp;lt;table width=&amp;quot;760&amp;quot; border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot;align=&amp;quot;center&amp;quot; bordercolorligh=&amp;quot;#000000&amp;quot; bordercolordark=&amp;quot;#ffffff&amp;quot;&amp;gt;&amp;lt;tr&amp;gt; &amp;lt;td colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;b&amp;gt;在线调查列表&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;tr &amp;gt; &amp;lt;td width=&amp;quot;50&amp;quot; align=&amp;quot;center&amp;quot; height=&amp;quot;20&amp;quot;&amp;gt;编号&amp;lt;/td&amp;gt;&amp;lt;td width=&amp;quot;200&amp;quot; align=&amp;quot;center&amp;quot; height=&amp;quot;20&amp;quot;&amp;gt;调查问题&amp;lt;/td&amp;gt;&amp;lt;td width=&amp;quot;50&amp;quot; align=&amp;quot;center&amp;quot; height=&amp;quot;20&amp;quot;&amp;gt;类型&amp;lt;/td&amp;gt;&amp;lt;td width=&amp;quot;140&amp;quot; align=&amp;quot;center&amp;quot; height=&amp;quot;20&amp;quot;&amp;gt;起启时间&amp;lt;/td&amp;gt;&amp;lt;td width=&amp;quot;140&amp;quot; align=&amp;quot;center&amp;quot; height=&amp;quot;20&amp;quot;&amp;gt;结束时间&amp;lt;/td&amp;gt;&amp;lt;td width=&amp;quot;50&amp;quot; align=&amp;quot;center&amp;quot; height=&amp;quot;20&amp;quot;&amp;gt;状态&amp;lt;/td&amp;gt;&amp;lt;td width=&amp;quot;80&amp;quot; align=&amp;quot;center&amp;quot; height=&amp;quot;20&amp;quot;&amp;gt;已投票数&amp;lt;/td&amp;gt;&amp;lt;td width=&amp;quot;50&amp;quot; align=&amp;quot;center&amp;quot; height=&amp;quot;20&amp;quot;&amp;gt;查看&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;%&amp;#39;&amp;#39;&amp;#39;&amp;#39;下面输出每个记录do while not rs.eof&amp;#39;&amp;#39;&amp;#39;&amp;#39;先读出每个字段id=rs(&amp;quot;survey_id&amp;quot;)question=rs(&amp;quot;survey_question&amp;quot;)&amp;#39;&amp;#39;&amp;#39;&amp;#39;读出类型if rs(&amp;quot;survey_type&amp;quot;) thenstype=&amp;quot;多选&amp;quot;elsestype=&amp;quot;单选&amp;quot;end ifstime=rs(&amp;quot;survey_stime&amp;quot;)etime=rs(&amp;quot;survey_etime&amp;quot;)&amp;#39;&amp;#39;&amp;#39;&amp;#39;判断状态if now()&amp;lt;stime thenstat=&amp;quot;未开始&amp;quot;elseif now&amp;lt;etime thenstat=&amp;quot;进行中&amp;quot;elsestat=&amp;quot;已结束&amp;quot;end ifend if&amp;#39;&amp;#39;&amp;#39;&amp;#39;定义SQL语句，得到答案的数量总和sql=&amp;quot;select sum(vote_count) as total from survey_vote where vote_id=&amp;quot;&amp;amp; idsearchtable my,sql,tmprs &amp;#39;&amp;#39;&amp;#39;&amp;#39;查询total=tmprs(&amp;quot;total&amp;quot;)closetable tmprs &amp;#39;&amp;#39;&amp;#39;&amp;#39;关闭表&amp;#39;&amp;#39;&amp;#39;&amp;#39;下面输出一条记录%&amp;gt;&amp;lt;tr &amp;gt; &amp;lt;td align=&amp;quot;center&amp;quot; height=&amp;quot;20&amp;quot;&amp;gt;&amp;lt;%=id%&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td height=&amp;quot;20&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;survey.asp?id=&amp;lt;%=id%&amp;gt;&amp;quot;&amp;gt;&amp;lt;%=question%&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td align=&amp;quot;center&amp;quot; height=&amp;quot;20&amp;quot;&amp;gt;&amp;lt;%=stype%&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td align=&amp;quot;center&amp;quot; height=&amp;quot;20&amp;quot;&amp;gt;&amp;lt;%=stime%&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td align=&amp;quot;center&amp;quot; height=&amp;quot;20&amp;quot;&amp;gt;&amp;lt;%=etime%&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td align=&amp;quot;center&amp;quot; height=&amp;quot;20&amp;quot;&amp;gt;&amp;lt;%=stat%&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td align=&amp;quot;center&amp;quot; height=&amp;quot;20&amp;quot;&amp;gt;&amp;lt;%=total%&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td align=&amp;quot;center&amp;quot; height=&amp;quot;20&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;survey_vote.asp?id=&amp;lt;%=id%&amp;gt;&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;查看&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;%rs.movenext &amp;#39;&amp;#39;&amp;#39;&amp;#39;移动到下一条，循环loop%&amp;gt;&amp;lt;/table&amp;gt;&amp;lt;%closetable rs &amp;#39;&amp;#39;&amp;#39;&amp;#39;关闭表closedb my &amp;#39;&amp;#39;&amp;#39;&amp;#39;关闭数据库end sub&amp;#39;&amp;#39;&amp;#39;&amp;#39;----------------------%&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt; 　　九、后台管理　　在后台管理页面survey_manage.asp中，前面我们已经列出来它所要实现的管理功能。管理的流程是先显示出所有调查，对于还没有开始的调查，可以进行修改、删除；对于已经结束的调查，可以删除，不能修改；对于正在进行的调查，只能修改它的结束时间。用一个参数action来表示动作，含义如下：　　1、无参数。表示第一次进入，显示登录表单　　2、login 表示执行登录　　3、logout 表示执行退出登录　　4、showaddquestion 表示显示增加一个调查　　5、showsurvey 表示显示一个调查　　6、doaddsurvey 表示执行增加一个调查　　7、doaddanswer 表示执行增加一个答案　　8、dodelsurvey 表示删除一个调查　　9、dodelanswer 表示删除一个答案　　10、domodify 表示修改一个调查及答案&lt;/div&gt;&lt;/div&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:frankey521:1410</id>
    <link rel="alternate" type="text/html" href="http://frankey521.livejournal.com/1410.html"/>
    <link rel="self" type="text/xml" href="http://frankey521.livejournal.com/data/atom/?itemid=1410"/>
    <title>在线调查系统</title>
    <published>2006-08-11T12:41:57Z</published>
    <updated>2006-08-11T12:41:57Z</updated>
    <content type="html">asp制作在线调查系统关于在线调查大家一定不会陌生吧，给出一个问题和数个答案，让用户填写，然后把结果保存到数据库，自动进行统计，最后给出个统计的图。这期的跟我学做就来做一个在线调查系统。 　　&lt;br /&gt;一、功能设计　　&lt;br /&gt;这么简单的系统也要做功能设计？有的人也许会觉得奇怪，不过话说回来不管怎么样的系统，先做功能设计总是能对系统有个比较清析的了解。让我们来看看在线调查的功能吧。基本的功能上面已经说了，就是要给出一个问题和数个答案，然后统计，最后给出图。在这个基础上，我们可以考虑给一个调查加上一个时间段（有效期），在这个时间段里调查是有效的，过了这段时间就自动结束这个调查。另外，我们可以指定一个用户一次只能提交一次答案。如果你要限制得更多，可以指定一个IP只能提交一次答案，不过，这样可能一个网吧里的人只能有一个提交了。对于调查里的问题，有些可能是单选题，而有些可能是多选 题。最后来说说统计的图，在统计图里要给出答案、每个答案的投票人数，并要显示出每个答案投票数所占的比例。一般用横的图就可以了，也比较容易实现，当然，如果你要改成竖的，也可以。　　现在根据上面总结出在线调查的功能如下：　　1、数据保存在ACCESS 2000 数据库中；　　2、每个用户一次访问可以投票一次　　3、给出每个调查的统计情况，用统计图来显示　　4、每个调查都有个有效期，过期后自动结束。结束了的调查只能查看结果。　　5、管理员可以增加调查，修改调查的答案（增加、修改、删除，修改类型）。　　6、对于已经结束的调查，管理员只能删除调查，而不能修改答案。　　7、只有一个管理员（单用户）　　二、数据库设计　　现在来设计数据库，根据功能要求，至少要有三个表，一是管理员表，二是调查表，三是调查结果表。数据库文件名为survey.mdb 可以改为.asp 如果改的话，请在ASP程序中作相应的修改。表一、 管理员表 表名: manage-----------------------------------------------------------------字段 类型 长度 说明-----------------------------------------------------------------manage_id 自动编号 - 在这里没用到，日后扩展用manage_username 文本 15 管理员用户名manage_password 文本 15 管理员密码-----------------------------------------------------------------　　建立manage表后加入一条新记录，填入你的管理员用户名和密码，在这里填入的是xmxoxo表二、 调查表 表名: survey-----------------------------------------------------------------字段 类型 长度 说明-----------------------------------------------------------------survey_id 自动编号 - 递增、主键、有索引无重复survey_question 文本 255 调查问题survey_type 是否 - 类型，否:单选 是:多选survey_stime 日期 - 长日期，开始时间survey_etime 日期 - 长日期，结束时间-----------------------------------------------------------------　　表三、调查结束表 表名:survey_vote-----------------------------------------------------------------字段 类型 长度 说明-----------------------------------------------------------------vote_no 自动编号 - 递增、主键、有索引无重复vote_id 长整型 - 有索引有重复，小数位0vote_answer 文本 100 调查答案vote_count 长整型 - 投票数-----------------------------------------------------------------　　其中，survey_vote表和survey表的id字段有多对一的关系。并不一定要建立这个关系，但是建立关系会使思路更明确。　　三、包含文件　　这里所要用到的函数并不多，主要是对数据库进行操作的，如果要防止输入时的HTML等代码，直接用server.htmlencode进行处理就可以了，所以不需要一个专门的函数来处理。我们可以沿用上一篇《跟我学》系列《跟我学做树型菜单》里的包含文件。　　共用函数文件，文件名：inc.asp&amp;lt;%''''*******************************************************************''''通用数据库ASP函数''''*******************************************************************''''数据库常数databasename="survey.mdb" ''''数据库名,如果改名的话，在这里修改就行了''''*******************************************************************''''打开数据库sub opendb(connect)set connect=server.CreateObject("ADODB.connection") connect.ConnectionString="DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" &amp;_server.MapPath(databasename)connect.Open strconnend sub''''*******************************************************************''''关闭数据库sub closedb(connect)connect.closeset connect=nothingend sub''''*******************************************************************''''打开单个表读sub opentable(connect,tbname,myrs)set myrs=server.createobject("ADODB.recordset") rssql="select * from " &amp; tbnamemyrs.open rssql,connect,1,1end sub''''*******************************************************************''''关闭临时表sub closetable(rs)rs.closeset rs=nothingend sub''''*******************************************************************''''查询数据库sub searchtable(connect,sql,rs)set rs=server.createobject("ADODB.recordset") rs.open sql,connect,1,1end sub''''*******************************************************************''''查询并更改数据库sub changetable(connect,sql,rs)set rs=server.createobject("ADODB.recordset") rs.open sql,connect,1,3end sub''''*******************************************************************''''显示信息 用于调试Sub w(msg)response.write msgend sub''''*******************************************************************''''程序中断 用于调试sub userstop()response.endend sub%&amp;gt; 　　四、文件设计　　按照传统的思路，我们总是把在线调查设计成三个部份，一、是显示调查表；二、是显示调查统计结果；三是后台管理。而在实际应用中，我们会发现，显示调查表往往是在某个网页中的，显示结果一般也是弹出一个窗口来。后台管理则是通过另一个链接或者登录表单转向到的。为了更方便地使用在线调查，我们把显示调查表部分写成一个JS脚本，让需要显示调查表的网页通过引用脚本的方式来自由地调用它。好，看看文件设计　　1、inc.asp 包含文件。主要的函数库　　2、surveycode.asp 显示调查表程序。在主网页中使用脚本来调用它。　　3、survey.asp 调查表列表程序。列出所有调查的状态。　　4、survey_vote.asp 显示调查统计结果程序。带上参数表示调查的问题。　　5、survey_manage.asp 管理程序。 　　在这里，我们略过了页面设计，因为风格设计不是我们所要说的内容，所以关于网页的风格，布局，CSS 等等，请大家自己设计。　　五、文件流程　　先写出程序的主要流程，可以比较方便于日后修改和扩展、移植。在这里比较重要的是要在程序中写哪些子程序，如何安排这些子程序。　　1、surveycode.asp 显示调查表单&amp;lt;%''''获取querystring参数，id 表示调查编号''''判断参数正确性''''判断调查是否在有效期中。''''读取调查问题、类型''''输出调查答案，并生成调查表单''''关闭数据库及表%&amp;gt; 　　2、survey.asp 显示所有调查状态&amp;lt;%''''读取数据库%&amp;gt;&lt;html&gt;''''显示所有调查状态，并加入链接&lt;/html&gt; 　　3、survey_vote.asp 显示统计结果。　　这里有两个功能，一是没有提交的显示，二是提交了答案后进行统计，然后显示结果。如果不带参数，就是第一种方式。也可以分为两个文件来完成。&amp;lt;%''''获取参数。id 表示调查编号 所有数据来自form''''判断是否有参数，有则先进行统计''''没有则直接显示''''统计子程序%&amp;gt;&lt;html&gt;''''显示子程序&lt;/html&gt; 　　4、survey_manage.asp 管理程序。　　管理部份比较复杂，要实现较多的功能。先来列一下管理的功能：　　1)管理员登录。只有登录后才能进行管理　　2)退出登录。完成管理后安全退出。　　对调查的管理有：　　3)增加一个调查。同时要增加调查答案　　4)修改一个调查。修改内容，时间，类型，调查答案的内容、增加、删除　　5)删除一个调查。不能删除正在进行的调查。　　针对这些功能，来设计它的流程</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:frankey521:1231</id>
    <link rel="alternate" type="text/html" href="http://frankey521.livejournal.com/1231.html"/>
    <link rel="self" type="text/xml" href="http://frankey521.livejournal.com/data/atom/?itemid=1231"/>
    <title>学习SPSS的几点笔记</title>
    <published>2006-08-10T12:54:30Z</published>
    <updated>2006-08-10T12:54:30Z</updated>
    <category term="spss"/>
    <content type="html">utilities-------variable...查询数据库变量&lt;br /&gt;&lt;br /&gt;多项选择题分析使用&lt;br /&gt;analyze----multiple----define multiple response sets&lt;br /&gt;tables----multiple     &lt;br /&gt;&lt;br /&gt;将字符型变量变成数值型&lt;br /&gt;transform -----automatic recode  或者  rank cases</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:frankey521:947</id>
    <link rel="alternate" type="text/html" href="http://frankey521.livejournal.com/947.html"/>
    <link rel="self" type="text/xml" href="http://frankey521.livejournal.com/data/atom/?itemid=947"/>
    <title>标签不知道如何 使用</title>
    <published>2006-08-09T19:09:20Z</published>
    <updated>2006-08-09T19:09:20Z</updated>
    <category term="question"/>
    <content type="html">谁知道可以告诉我 谢谢！&lt;br /&gt;who can tell me how to use the tags ?</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:frankey521:595</id>
    <link rel="alternate" type="text/html" href="http://frankey521.livejournal.com/595.html"/>
    <link rel="self" type="text/xml" href="http://frankey521.livejournal.com/data/atom/?itemid=595"/>
    <title>test</title>
    <published>2006-08-09T16:13:37Z</published>
    <updated>2006-08-09T16:13:37Z</updated>
    <category term="current events"/>
    <content type="html">test</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:frankey521:367</id>
    <link rel="alternate" type="text/html" href="http://frankey521.livejournal.com/367.html"/>
    <link rel="self" type="text/xml" href="http://frankey521.livejournal.com/data/atom/?itemid=367"/>
    <title>验证成功信息</title>
    <published>2006-08-09T16:06:06Z</published>
    <updated>2006-08-09T16:06:06Z</updated>
    <content type="html">成功&lt;br /&gt;Thanks! The email address for frankey521 has now been verified（核实）. From here, you may be interested （有益的，得到帮助的） in doing the following things:&lt;br /&gt;&lt;br /&gt;Log In -- So you don't have to enter your username and password everywhere.&lt;br /&gt;Edit Information （资料）-- Fill out your user profile and set various settings.&lt;br /&gt;Customize Journal -- Customize the look of your journal&lt;br /&gt;Update Journal （更新） -- Write in your journal.</content>
  </entry>
</feed>
