首页 理论教育 ASP程序设计教程:在线统计投票结果

ASP程序设计教程:在线统计投票结果

时间:2023-11-20 理论教育 版权反馈
【摘要】:在写入选票信息的同时,还统计出了最新的选票总数,为下一步计算候选项目的得票率做好准备。当前的选票统计完毕后,还要把统计结果输出到客户端的浏览器上,实现投票结果的在线显示。图10-3投票提交成功后的页面在显示投票结果时,有一点要注意,就是显示内容的规范化,比如“得票数”应该用科学计数法来表示,也就是显示数值每三位用西文的逗号隔开。

ASP程序设计教程:在线统计投票结果

“提交投票结果”的ASP 文件的主要任务是:从客户端取回投票结果,把它添加到相应项目的选票数中,接着算出目前各候选项目的投票数所占的百分比并将此结果显示给投票者。这个工作流程看似简单,但由于采用文本文件作为选票信息的存储媒质,所以还有几个特殊的问题需要解决。

首先,要从文本文件中取得每个项目的名称和选票数。问题是在文本文件的每一行虽然存储着两项内容:选票名称和选票数,可是在文件里它们不是分离的两个字段;而是每一行里的一个完整的字符串。这样,如何分别取出每一行内容里的项目名称和选票数是第一个需要解决的问题。

当然解决这个问题也不难,在VBScript 中有大量的内部函数可以帮助简便地解决问题。虽然在文本文件中,每一行的内容是一个完整的字符串,但是可以利用VBScript中的分割字符串函数,取出需要的内容。它们是:Left函数和Right函数。

Left函数的作用是返回指定数目的从字符串的左边算起的字符,语法是:

其中,string 是字符串表达式,其最左边的字符被返回。如果string 参数中包含Null,则返回Null;而length 是数值表达式,指明要返回的字符数目。如果是0,返回零长度的字符串("");如果大于或等于string参数中的字符总数,则返回整个字符串。

Right 函数的作用是从字符串右边返回指定数目的字符,语法是:

其中,string和length的定义与Left 函数相同。

利用字符串分割函数从文本文件中取出投票信息后,按照类型把它们分别保存在数组中。解决了读取选票信息的问题之后,还有一个问题需要解决。现在已经从文本文件中取出了各个项目的选票数,但是它们是字符串而且可能包含着空格字符。而进行统计选票所需的选票数必须是数值类型的数据,这样才可以对它们进行四则运算。所以下面要解决的问题是进行必要数据类型转换。

在VBScript 中,针对不同的数据类型,有相应的数据类型转换函数。在本例中,将选票数设置为最大不超过8 位数字,也就是最多不超过1 亿张选票。而且还要利用每个候选项目的选票数和总的选票数计算出该候选项目的得票率,由于要做除法运算所以得票率必然以小数的形式表示。考虑到上述因素,将从文本文件中截取的代表选票数的字符串转换为双精度的数据类型。这一操作过程可以由VBScript中的CDbl函数来完成。

在程序中,事先定义了三个数组分别用来保存候选项目名称、每个项目的选票数和得票率。其中,name 和count 数组的大小被定义为保存6 个值是因为文本文件的字符串“投票时间”和相应的时间数值也分别保存在这两个数组里。由于已经建立了相应的文本文件(result.txt),所以在打开文件之前要先获得存放该文件的真实路径。在ASP中,server.MapPath方法可以输出文件的绝对路径。做好这些准备工作后,就进行建立FileSystemObject 对象实例、打开文本文件、读取选票信息等工作。当文件里的内容被逐行读出后,再来判断从客户端取回的选票属于哪一个候选项目并将该项目的选票数加1。选票统计完毕后,接下来的工作要把最新的统计结果写回文本文件保存起来。

此时,以只写模式再次打开保存选票信息的文本文件,将最新的选票信息逐行写入文件中。这里要注意的是,由于在上一步要计算候选项目的选票数,把从文件中取出的字符串转换为双精度的数据类型;而现在写回文本文件的内容必须是字符串,所以在保存信息之前还要把相应的内容转换为字符串的形式,这样才可以进行正常的写文件操作。否则,会发生数据类型不匹配的错误。在写入选票信息的同时,还统计出了最新的选票总数,为下一步计算候选项目的得票率做好准备。最后,取出当前的系统时间作为本次投票的时间写入文本文件中,当“查看投票结果”的ASP文件运行时,会用到此数据。(www.xing528.com)

统计选票的最后一步工作是算出各候选项目的得票率。在前面,已经做好了各项准备工作,所以这个步骤实现起来比较简单。

当前的选票统计完毕后,还要把统计结果输出到客户端的浏览器上,实现投票结果的在线显示。显示效果如图10-3所示。

图10-3 投票提交成功后的页面

在显示投票结果时,有一点要注意,就是显示内容的规范化,比如“得票数”应该用科学计数法来表示,也就是显示数值每三位用西文的逗号隔开。还有,“得票率”必须以百分比的形式表示出来。在VBScript 中,提供了相应的数值格式化函数解决上述问题,用到的函数是FormatNumber 函数和FormatPercent 函数。

FormatNumber 函数可以把表达式格式化为具体要求的数值。FormatNumber 函数的语法项里有许多参数可以选用,不过最常用的有两个参数:expression 是必选参数,即要被格式化的表达式;NumDigitsAfterDecimal 是可选参数,用来指示小数点右侧显示位数的数值。显示的“得票数”应该为整数,所以该参数取0;

FormatPercent 函数可以把表达式格式化为尾随有% 符号的数值。它的常用参数和FormatNumber 函数相同,不过这里的NumDigitsAfterDecimal 参数取为2,即小数点后保留两位数字。

下面是“提交投票结果”的ASP 文件的完整代码,供大家参考:

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈