再问运费查询的具体实现问题

之前问过一个运费查询帖子,主要是思路方面,因为实在基础太差,所以再开一个帖子问下具体怎么实现,先把数据字段说明下,牵涉到几个表.这里一概不分大小写,为了方便起见。
国家表country字段如下
countryid
country
快递公司express表
expressid
express
快递业务expyewu表
expyewuid
expyewu
expressid (对应快递公司)
快递资费deliver表
deliverid
countryid  目的国家
expressid  快递公司
expyewuid  快递业务
charge_min 起价(或者某重量对应的价格)
weight_min 起重,也就是最低计费重量(也有可能是某个计重重量,后边会描述业务)
chargeperunit 单位重量增加的费用,比如每增加1000克增加的费用
weightperunit 续重重量,比如起重500克,每增加500克增加5元,这里的500克就是weightperunit,因为有些快递是这么来计算,而有些是纯粹的按500克、1000克、1500克、2000克这样细分很多来单独算费用的。
charge_other  其他费用,有可能是一个数值,有可能是一个比例,因为有些快递还要计算什么燃油费,费用为运费单价乘以重量后的积,也就是总运费的一个百分比作为燃油费,真正的总运费其实是运费加这个燃油费什么的。

数据大概说明完了,我的处理过程如下:
在论坛朋友的帮助下,查询已经实现了选择快递公司后自动出现该公司所有业务类型,用单选框的形式来选择,查询者之需要从下拉框中选择目的国家,快递公司以及快递业务类别,然后输入查询重量,就可以查询这个线路这个快递公司的这个快递业务的运费。

查询页面代码如下:
<form method='post' name='form1' action="yunfeicount.asp" onSubmit="return checkAddReco(this)">
    <table width='100%' border='0' align='center' cellpadding='2' cellspacing='1' class='border' >
    <tr class='title'>
    <td height='22' colspan='2'>
    <div align='center'><strong>添加快递资费</strong></div>
    </td>
    </tr>
    <tr class='tdbg'>
    <td width='280' class='tdbg5' align='right'><strong>目的国家:</strong></td>
    <td class='tdbg'><select name='CountryID' id='CountryID'>        <option value="" selected>请选择</option>
<%
          Dim Rs,Sql,RsCount
          Set Rs= Server.CreateObject("ADODB.Recordset")
          Sql="Select CountryID,Country From PE_Country Order By CountryID"
  Rs.open Sql,conn,1,1
  If Not(Rs.Bof Or Rs.Eof) Then
          RsCount=Rs.RecordCount
          for i=1 to RsCount
          %>
          <option value="<%=Rs(0)%>"><%=Rs(1)%></option>
         <%
          Rs.MoveNext
          Next
  End If
          Rs.Close
%></select></td>
    </tr>
    <tr class='tdbg'>
    <td width='280' class='tdbg5' align='right'><strong>快递公司:</strong></td>
    <td class='tdbg'><select name="ExpressID" οnchange="getsubcategory('test.asp?ExpressID='+this.value,'ajax_content');">
<option value="" selected="selected">请选择快递公司</option><%
          Dim Rs2,Sql2,RsCount2
          Set Rs2= Server.CreateObject("ADODB.Recordset")
          Sql2="Select ExpressID,Express From PE_Express Order By ExpressID"
  Rs2.open Sql2,conn,1,1
  If Not(Rs2.Bof Or Rs2.Eof) Then
          RsCount2=Rs2.RecordCount
          for i=1 to RsCount2
          %>
          <option name="ExpressID" value="<%=Rs2(0)%>"><%=Rs2(1)%></option>
         <%
          Rs2.MoveNext
          Next
  End If
          Rs2.Close
%>
</select></td>
    </tr>
    <tr class='tdbg'>
    <td width='280' class='tdbg5' align='right' valign="top"><strong>快递业务:</strong></td>
    <td class='tdbg'><div id="ajax_content">选择快递公司后,会自动显示该快递公司所有快递业务分类,请根据实际情况选择业务分类。</div></td>
    </tr>
    <tr class='tdbg'>
    <td width='280' class='tdbg5' align='right'><strong>货物重量:</strong></td>
    <td class='tdbg'><input name="Weight" type="text" id="Weight" size="25" maxlength="10">克&nbsp;</td>
    </tr>
    <tr class='tdbg'>
    <td colspan='2' align='center' class='tdbg'>
    <input  type="submit" name="SaveAddButton" id="SaveAddButton" value="查询"  style='cursor:hand;'>
    </td>
    </tr>
    </table>
    </form>
这里使用了论坛朋友告诉的方法,用ajax的技术实现选择快递公司后自动显示该公司的所有业务,test.asp代码如下:
<%Response.Charset="GB2312"%>
<!--#include file="Conn1.asp" -->
<%
          Dim Rs3,Sql3,RsCount,ExpressID
  ExpressID= Request("ExpressID")
          Set Rs3= Server.CreateObject("ADODB.Recordset")
          Sql3="Select ExpyewuID,Expyewu From PE_Expyewu Where ExpressID='"&ExpressID&"' Order By ExpyewuID"
  Rs3.open Sql3,conn,1,1
  If Not(Rs3.Bof Or Rs3.Eof) Then
          RsCount=Rs3.RecordCount
          for i=1 to RsCount
          %>
          <input type="radio" name="ExpyewuID" id="ExpyewuID" value="<%=Rs3("ExpyewuID")%>"><%=Rs3("Expyewu")%><br />
         <%
          Rs3.MoveNext
          Next
  End If
          Rs3.Close
%>

再描述下这几个快递公司的业务分类情况,有UPS\DHL\TNT\EMS\联邦快递\邮政这6家,其中EMS和邮政都是按运费等于起重价加上续重价这样来计算的,比如EMS的文件类快递业务,起重500克,发往不同国家、地区的起价不一样,比如发到香港澳门起价90元,续费重量500克,不足按500克计算,续费金额30元,发到日本韩国的则分别为:500克、115元,500克,40元(顺序为起重、起价、续重、续费),邮政的类似。

而外国快递公司不太一样,在20千克一下几乎都按0.5千克这样来递增,每个重量对应不同的国家地区不同的业务类型没有起价一说,都有个对应的价格,最后我会附图来说明这些公司的详细标准的。

我的处理思路是:

先判断查询者选择的国家和快递公司的业务类别是否存在,也就是说比如先选择了目的国家英国,然后选择了EMS,再选择了UPS的全球特快文件封和文件这个业务类别,然后输入查询重量2350克,那么处理的流程是:先判断这个快递公司的这个业务是否到达英国,也就是说快递线路是否存在,不存在的话,就提示目前没有开辟这个运输路线,就好像你要查用EMS发3000克的文件发货到冰岛要多少钱,应该先判断EMS是否有业务类别能发货到冰岛一样。

只有运输路线(由国家、快递公司、快递业务三者一起来决定,从后台来说就是有这样的一条记录存在)存在了,才有可能和必要继续判断这个输入重量属于哪种情况,是刚好这个查询重量等于计费的起重重量,还是大于这个起重重量,或者低于起重重量,低于的就按这个起重重量计算,找到这个重量对应的价格,再乘上燃油费的那个百分比,加上这个价格,获得最后的总运费。

当大于起重重量时,就要判断查询重量和哪个重量最接近,一般都是向上计算,国外的快递20千克以内多半用0.5千克这样来分段计算,最低为0.5千克,当查询重量低于0.5千克,就很好办了,按0.5千克对应的价格来计算,顶多加个燃油费什么的,当查询重量比如为1.2千克,那么就要把1.2千克当1.5千克来计算(这里很关键,我想知道怎么用程序来实现),当运费大于20千克后,他们多半按每千克多少钱来计算。

我自己写的非常丑陋的代码,运行不过去的,请高手指点补充下,只写了一点点,呵呵。

<%
Dim CountryID,ExpressID,Weight,TempWeight,TempCharge,TotalCharge
Dim Rs3,Sql3,Rs3Count
CountryID=Request.form("CountryID")
ExpressID=Request.form("ExpressID")
Weight   =Request.form("Weight")
%>
<%          
          Set Rs3= Server.CreateObject("ADODB.Recordset")
          Sql3="Select Charge_Min,Weight_Min,ChargePerUnit From PE_Deliver Where CountryID="&CountryID&" AND ExpressID="&ExpressID&" Order By DeliverID"
  Rs3.open Sql3,conn,1,1
  If Rs3.Bof Or Rs3.Eof Then
  response.write "对不起,你查询的快递公司目前不发货到您选择目的国家!"
  End If
  If Not(Rs3.Bof Or Rs3.Eof) Then
          Rs3Count=Rs3.RecordCount
          for i=1 to Rs3Count
          %>
  <%if Weight<=Rs3(1) then 
                    您选择的快递公司发往该国的货物运费为:Rs3(0)
  end if
          if Weight>Rs3(0) then
  不知道怎么写了,呵呵   
         <%
          Rs3.MoveNext
          Next
  End If
          Rs3.Close
%>

我知道这里面肯定很复杂,所以打算把我所有的分都给贡献出来。

基础太差,存在很多语法问题,请指正。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值