当前位置: 首页 > 图文教程 > 网络编程 > ASP > 一个基于ASP的标题广告管理系统(三)

ASP
基于ASP的收发文管理系统的设计与实现
用ASP制作张扬个性的调查系统
使用XMLHTTP制作域名查询系统
Delphi编写组件封装asp代码的基本步骤
采用XMLHTTP编写一个天气预报的程序
菜鸟详听ASP中也能解压缩rar文件
用Asp+XmlHttp实现RssReader功能
纯ASP代码之公历转农历实现(含属相)
纯ASP代码之公历转农历实现(含属相)--例子代码
多个域名后缀同时查询的域名查询系统
实现有管理功能的ASP留言板
Jmail发信的实例,模块化随时调用
纯ASP(VBscript)写的全球IP地址搜索程序
数字和字母组合并生成图片的验证码祥解
金额大小写转换的asp完全无错版本
用ASP学做一个在线调查
利用客户端js实现汉字简体繁体转换
ASP操作XML文件的完整实例
浅谈TeeChart组件在ASP中的应用
在VB中利用Word宏命令开发ASP组件

一个基于ASP的标题广告管理系统(三)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 123 ::
收藏到网摘: n/a

  三、显示广告

   这部分程序主要有如下四个目的:第一,参考各个广告的显示等级,随机选择本次显示的广告;第二,更新数据库中该广告的显示次数;第三,输出标题广告的HTML代码;第四,在数据库历史表中保存显示和点击历史纪录。

   实现上述功能的脚本主要有两个:

ShowBanner.asp:确定本次调用要显示的广告,更新显示次数记录,生成标题广告的HTML代码。
Redirect.asp:重定向页面。ShowBanner.asp生成的广告HTML代码将调用该脚本,由该脚本记录点击历史数据、重定向到广告客户指定的页面。
   本文下载包中的ShowBanner.asp同时也是一个广告显示示例页面,每次刷新该页面可以显示出不同的广告。下面我们按照ShowBanner.asp的执行过程,介绍其中的关键步骤。

   ㈠ 计算显示等级总和

   本系统采用的广告选择算法是:首先计算出当前所有可用广告的显示等级总和,然后根据这个和值生成一个随机数,再根据这个随机数来确定本次显示的广告。下面的代码用于计算可用广告的显示等级总和:

 nTotalWeight = 0
 strSql = "SELECT SUM( Weight ) As SumWeight FROM " + _
     "Advertisement WHERE Status=1"
 rs.Open strSql, cn
 If not rs.EOF and not rs.BOF Then
     nTotalWeight = rs.Fields( "SumWeight" )
     ' nTotalWeight有可能为空值
     If IsNull( nTotalWeight ) Then
         nTotalWeight = 1
     End If
 End If
   在计算出nTotalWeight之后,我们可以根据该值生成一个随机数,如下所示:

 Randomize
 nRandomNumber = Int( Rnd * nTotalWeight ) + 1
   程序将从数据库读取可用广告记录(参见下面的代码),累计已读取记录的weight总和,当这个新的总和超过这里生成的随机数时,就将当前记录作为本次显示的广告。

   ㈡ 分析可用广告记录

   接下来的任务是执行一个查询,提取所有可用广告记录。如前所述,在遍历这些可用广告记录时,记录已读取记录的weight值总和nWeightCount ,当nWeightCount 等于或大于前面生成的随机数nRandomNumber时,程序就认为找到了本次要显示的广告。具体如下:

 strSql = "SELECT * FROM Advertisement WHERE Status=1"
 rs.Close
 rs.Open strSql, cn
 bDone = false
 ' 已读取记录的Weight值总和
 nWeightCount = 0
 
 ' 清除变量
 strImageURL = ""
 strAltText = ""
 strLink = ""
 nImageWidth = 0
 nImageHeight = 0
 nWeight = 0
 nAdID = 0
 nAdvertiserID = 0
 nViewLimit = 0
 nImpressions = 0
     
 While not rs.EOF and not rs.BOF and not bDone
     ' 将数据库值赋给变量
     ' 这种算法不利于效率,但简化了控制结构
     strImageURL = rs.Fields( "ImageURL" )
     strAltText = rs.Fields( "AltText" )
     strLink = rs.Fields( "Link" )
     nImageWidth = rs.Fields( "ImageWidth" )
     nImageHeight = rs.Fields( "ImageHeight" )
     nWeight = rs.Fields( "Weight" )
     nAdID = rs.Fields( "AdID" )
     nAdvertiserID = rs.Fields( "AdvertiserID" )
     nViewLimit = rs.Fields( "ViewLimit" )
     nImpressions = rs.Fields( "Impressions" )
     nWeightCount = nWeightCount + nWeight
     rs.MoveNext
     ' nWeightCount是否等于或大于随机变量值
     If nWeightCount >= nRandomNumber or rs.EOF Then
         bDone= true
     End If
 Wend
   ㈢ 更新当前广告的显示次数

   在确定本次要显示的广告之后,程序就可以更新该广告记录的Impressions字段。如果新的Impressions值超过了显示次数限制(nViewLimit),还必需设置Status字段为0(即本广告不可再显示)。实现代码如下:

 nStatus = 1
 nImpressions = nImpressions + 1
 If nImpressions