之前問過乙個運費查詢帖子,主要是思路方面,因為實在基礎太差,所以再開乙個帖子問下具體怎麼實現,先把資料字段說明下,牽涉到幾個表.這裡一概不分大小寫,為了方便起見。
國家表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 其他費用,有可能是乙個數值,有可能是乙個比例,因為有些快遞還要計算什麼燃油費,費用為運費單價乘以重量後的積,也就是總運費的乙個百分比作為燃油費,真正的總運費其實是運費加這個燃油費什麼的。
資料大概說明完了,我的處理過程如下:
在論壇朋友的幫助下,查詢已經實現了選擇快遞公司後自動出現該公司所有業務型別,用單選框的形式來選擇,查詢者之需要從下拉框中選擇目的國家,快遞公司以及快遞業務類別,然後輸入查詢重量,就可以查詢這個線路這個快遞公司的這個快遞業務的運費。
查詢頁面**如下:
這裡使用了論壇朋友告訴的方法,用ajax的技術實現選擇快遞公司後自動顯示該公司的所有業務,test.asp**如下:
<%response.charset="gb2312"%>
<%
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
%>
"><%=rs3("expyewu")%>
<%
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
%>
我知道這裡面肯定很複雜,所以打算把我所有的分都給貢獻出來。
基礎太差,存在很多語法問題,請指正。
分頁查詢的具體實現
首先,我們應該定義乙個pagebean類,在類裡我們封裝分頁查詢所需要的各種屬性以及生成各屬性的get和set方法 1 當前頁 2private integer currentpage 3 總記錄數 4private integer totalcount 5 每頁顯示的記錄數 6private in...
不要再問我this的指向問題了
this的指向已經是乙個老生常談的問題,每逢面試都要去複習複習,近來鞏固js的基礎,決心徹底掌握這個知識點,一勞永逸。說明一下,為了不影響大家的思考過程,下面的 都不會去注釋答案,想知道答案,只需要去控制台執行一下。首先,分析this的指向共有四種型別,在分析之前,我們首先帶好兩個錦囊 1.函式被呼...
this指向 不要再問我 this 的指向問題了
this的指向已經是乙個老生常談的問題,每逢面試都要去複習複習,近來鞏固js的基礎,決心徹底掌握這個知識點,一勞永逸。說明一下,為了不影響大家的思考過程,下面的 都不會去注釋答案,想知道答案,只需要去控制台執行一下。四類場景逐一擊破 首先,分析this的指向共有四種型別,在分析之前,我們首先帶好兩個...