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

ASP
一个ASP版的图片浏览管理器
无组件上传图片至SQLSERVER数据库
利用Jmail.Message发送邮件
用Web页面执行客户端程序
多图片上传到指定的目录并存到数据库
dreamweaverMX通用分页代码研究
下拉菜单输入,根据输入内容自动定位
中文的无组件文件上传ASP函数
一个利用adsi得到局域网信息的asp文件
根据需要动态include不同的文件
让自定义文件下载支持断点续传
用数组实现数据记录的批量录入方法
上传的进度条 实时反映上传情况
用ASP动态生成javascript的表单验证代码
ASP 编程中20个非常有用的例子
ASP生成Word文档的又一方法
用asp解析图片地址,并将其保存。
利用ASP的文件操作实现用户管理
创建 Visual Basic COM 组件在 ASP 中使用
调试 ASP 中使用的 Visual Basic COM 组件

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 68 ::
收藏到网摘: 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