用ASP設(shè)計(jì)購(gòu)物推車(chē)
你一定去過(guò)超級(jí)市場(chǎng)吧。在那里你可以推著推車(chē),將中意的商品放進(jìn)推車(chē),或者把推車(chē)?yán)锏纳唐啡〕鰜?lái)重新放到貨架,最后你推著推車(chē)去結(jié)賬。
那么,在網(wǎng)上超市,客戶(hù)也應(yīng)該可以在瀏覽商品目錄時(shí),將中意的商品放進(jìn)"電子推車(chē)"。電子推車(chē)是超級(jí)市場(chǎng)推車(chē)的電子化。在網(wǎng)上商店里,這種電子推車(chē)又稱(chēng)為"購(gòu)物推車(chē)",英文是shopping cart。
購(gòu)物推車(chē)的設(shè)計(jì)目標(biāo)
從程序員的觀點(diǎn)來(lái)看,購(gòu)物推車(chē)是維護(hù)購(gòu)物者商品選購(gòu)、允許察看、允許修改的一個(gè)對(duì)象。購(gòu)物推車(chē)本身是一個(gè)非常簡(jiǎn)單的程序,但開(kāi)發(fā)者要考慮它將連接到商品目錄子系統(tǒng)、訂單子系統(tǒng)、客戶(hù)賬號(hào)子系統(tǒng)、站點(diǎn)管理子系統(tǒng)等等,形成功能完整的網(wǎng)上商店。
下面是購(gòu)物推車(chē)的設(shè)計(jì)目標(biāo):
1、 持續(xù)性:購(gòu)物推車(chē)應(yīng)該從它的前一次會(huì)話(huà)中記住其內(nèi)容。
2、 購(gòu)物推車(chē)和客戶(hù)相關(guān),而不是和客戶(hù)的電腦相關(guān)??蛻?hù)可以從另外的電腦或?yàn)g覽器來(lái)訪(fǎng)問(wèn)購(gòu)物推車(chē)。
3、 當(dāng)新的商品被加入推車(chē)或者從推車(chē)去掉時(shí),推車(chē)的內(nèi)容可以被顯示給用戶(hù)。
4、 推車(chē)可以容納很多甚至無(wú)限的商品。
系統(tǒng)設(shè)計(jì)/流程設(shè)計(jì)
在編寫(xiě)我們的購(gòu)物推車(chē)之前,我們看看它的系統(tǒng)架構(gòu)和流程。
如果客戶(hù)從商品目錄中選擇了一件商品,這時(shí)我們傳遞客戶(hù)的請(qǐng)求到proxy.asp,同時(shí)傳遞的是動(dòng)作變量"增加商品"。proxy.asp讀取這個(gè)變量,并決定執(zhí)行購(gòu)物推車(chē)的哪個(gè)動(dòng)作。這些動(dòng)作包括:增加商品、更新商品數(shù)量、移除商品或者察看購(gòu)物推車(chē)。
有些動(dòng)作被作為內(nèi)部調(diào)用。如創(chuàng)建推車(chē)之前,我們需要檢查推車(chē)是否已經(jīng)存在(checkcart)。在增加、刪除或者更新商品及其數(shù)量時(shí),我們要確認(rèn)此商品是否已經(jīng)存在于我們的購(gòu)物推車(chē)之中(checkitem)。下面我們將為購(gòu)物推車(chē)設(shè)計(jì)8個(gè)方法,分別是:
viewitem 察看推車(chē)
checkcart 檢查推車(chē)
createcart 創(chuàng)建推車(chē)
additem(id, qty), 增加商品
removeitem(id) 刪除商品
updateitem(id, qty), 更新數(shù)量
removeall 全部清空
checkitem(id) 商品檢查
購(gòu)物推車(chē)的設(shè)計(jì)
購(gòu)物推車(chē)需要三個(gè)要素:一個(gè)vbscript 5的類(lèi)class cartkit,一個(gè)多維數(shù)組mudcart,一個(gè)session變量session("cart")。
這個(gè)vbscript 類(lèi),我們稱(chēng)為cartkit,包含了8個(gè)方法,如上表所示。在本文我們只用了id和qty,分別表示商品編號(hào)和數(shù)量。
這樣我們就可以用一個(gè)二維數(shù)組來(lái)表達(dá)這個(gè)推車(chē),象下面這樣:
商品編號(hào) 商品數(shù)量
id-1 23
id-3 10
id-23 6
id-2 1
然后我們把這個(gè)二維數(shù)組保存到session變量中就可以了。
購(gòu)物推車(chē)類(lèi)cartkit的設(shè)計(jì)
請(qǐng)下載:cartkit.asp
createcart設(shè)計(jì):
請(qǐng)看程序代碼:
class cartkit rem 開(kāi)始類(lèi)cartkit的定義
sub createcart()
if isarray(session("cart")) = false then
dim mudcart(19,1)
session("cart") = mudcart
end if
end sub
其中:session("cart")保存的就是推車(chē)的內(nèi)容。如果推車(chē)不存在,我們就定義一個(gè)二維數(shù)組mudcart來(lái)表達(dá)推車(chē),并將它保存到session("cart")中。
checkcart設(shè)計(jì):
本函數(shù)判斷cart是否已經(jīng)創(chuàng)建。比較簡(jiǎn)單。
function checkcart()
if isarray(session("cart")) then
checkcart=true
else
checkcart=false
end if
end function
checkitem設(shè)計(jì):
請(qǐng)看代碼:
function checkitem(id)
if checkcart=true then
varmudcart = session("cart")
for i = lbound(varmudcart)to ubound(varmudcart)
if varmudcart(i,0) = id then
checkitem=true
exit function
elseif varmudcart(i,0) <> id then
checkitem=false
end if
next
end if
end function
首先判斷推車(chē)是否存在。然后將商品的編號(hào)id和購(gòu)物推車(chē)中的商品編號(hào)逐一比較。如果有相等的,返回真。否則為假。
additem(id,qty)設(shè)計(jì):
請(qǐng)參考本文的附件cartkit.asp,這里介紹的函數(shù)我們把它們封裝到一個(gè)名為cartkit的class中。下面的代碼段首先創(chuàng)建了一個(gè)cartkit對(duì)象,然后檢查推車(chē)是否已經(jīng)存在。如果不存在,就創(chuàng)建推車(chē)并新增商品;否則,檢查商品編號(hào)是否已經(jīng)存在于cart中。如果是,就更新數(shù)量;否則,新增商品。
function additem(id, qty)
set cartobj = new cartkit
varcartstatus = cartobj.checkcart
if varcartstatus=false then
cartobj.createcart
mudcart=session("cart")
mudcart(0,0)=id
mudcart(0,1)=qty
session("cart")=mudcart
exit function
elseif varcartstatus=true then
if cartobj.checkitem(id) = true then
cartobj.updateitem id,qty
elseif cartobj.checkitem(id) = false then
mudcart = session("cart")
for i = lbound(mudcart) to ubound(mudcart)
if mudcart(i,0) = "" then
mudcart(i,0) = id
mudcart(i,1) = qty
session("cart") = mudcart
exit function
end if
next
end if
end if
end function
updateitem設(shè)計(jì):
function updateitem(id, qty)
mudcart = session("cart")
for i = lbound(mudcart) to ubound(mudcart)
if mudcart(i,0) = id then
mudcart(i,1) = qty
session("cart")=mudcart
exit function
end if
next
end function
viewitem設(shè)計(jì):
function viewitem()
mudcart=session("cart")
if isarray(mudcart) then
%>
相關(guān)文章
asp快速開(kāi)發(fā)方法之?dāng)?shù)據(jù)操作實(shí)例代碼
asp快速開(kāi)發(fā)方法之?dāng)?shù)據(jù)操作實(shí)例代碼...2007-08-08ASP的Error對(duì)象知識(shí)簡(jiǎn)析
這篇文章主要介紹了ASP的Error對(duì)象,需要的朋友可以參考下2015-09-09chr(9)、chr(10)、chr(13)、chr(32)、chr(34)講解
chr(9)、chr(10)、chr(13)、chr(32)、chr(34)講解...2007-03-03