之前问过一个运费查询帖子,主要是思路方面,因为实在基础太差,所以再开一个帖子问下具体怎么实现,先把数据字段说明下,牵涉到几个表.这里一概不分大小写,为了方便起见。
国家表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">克 </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
%>
我知道这里面肯定很复杂,所以打算把我所有的分都给贡献出来。
基础太差,存在很多语法问题,请指正。
国家表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">克 </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
%>
我知道这里面肯定很复杂,所以打算把我所有的分都给贡献出来。
基础太差,存在很多语法问题,请指正。