再問運費查詢的具體實現問題

2021-07-25 21:36:28 字數 3478 閱讀 8163

之前問過乙個運費查詢帖子,主要是思路方面,因為實在基礎太差,所以再開乙個帖子問下具體怎麼實現,先把資料字段說明下,牽涉到幾個表.這裡一概不分大小寫,為了方便起見。

國家表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的指向共有四種型別,在分析之前,我們首先帶好兩個...