




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第14章
綜合實訓(xùn):購物車管理和訂單管理
14.1實訓(xùn)的目標(biāo)
14.2存儲結(jié)構(gòu)
14.3實訓(xùn)指導(dǎo)
小結(jié)
14.1實?訓(xùn)?的?目?標(biāo)
購物車管理功能包括如下幾個方面:
●用戶在查看圖書詳細(xì)情況的時候,可以把當(dāng)前圖書添加到購物車。
●如果用戶的購物車中有物品,則隨時可以查看購物車中的物品。
●用戶在查看購物車中物品的時候,可以修改購物車中物品的數(shù)量,也可以刪除購物車中的某件物品。
●用戶在查看購物車的時候,可以下訂單。下訂單的時候,如果不是注冊用戶,則可以讓用戶輸入訂單所需信息。訂單管理功能包括如下幾個方面:
●管理員可以查看訂單,在顯示訂單的時候先顯示訂單列表。要處理某個訂單時,可以點擊查看該訂單的詳細(xì)情況。
●在查看訂單的時候,如果要處理,則只需修改訂單狀態(tài)即可。
14.2存
儲
結(jié)
構(gòu)
訂單處理需要保存訂單信息。通常訂單需要使用兩張表保存,一張表保存訂單的基本信息,另一張表保存訂單的詳細(xì)信息。
訂單基本信息表的表結(jié)構(gòu)可以參考表14.1。
表14.1訂
單
表
表14.2訂單明細(xì)表
14.3實
訓(xùn)
指
導(dǎo)
14.3.1購物車的基本原理
讀者一定使用過超市中的購物車,顧客在超市中可以隨心所欲地向購物車中添加物品,可以隨時增加或者減少某種物品的數(shù)量,在選擇物品的過程中也可以放棄某些已經(jīng)選擇的物品。Web用戶訪問網(wǎng)站的過程可能會持續(xù)很長時間,在這個過程中必須保存購物車,但是購物車如何保存呢?在Web應(yīng)用中,可以保存信息的地方包括當(dāng)前頁面pageContext、請求request、會話session、應(yīng)用application和數(shù)據(jù)庫。pageContext保存的信息只能在當(dāng)前頁面使用,所以不能使用pageContext存儲購物車。request中保存的信息只能在本次請求中使用,因為在訪問網(wǎng)站的過程中會有很多request,所以也不能使用request存儲購物車。application中存儲的信息是所有用戶共享的,而每個購物車中存儲的信息是與個人相關(guān)的,所以也不能使用application存儲購物車。如果存儲在數(shù)據(jù)庫中,用戶在訪問的過程中需要不斷修改數(shù)據(jù)庫,并且需要記錄與哪個用戶相關(guān),管理比較麻煩,所以通常也不使用數(shù)據(jù)庫存儲購物車。而session中存儲的是與個人相關(guān)的信息,并且持續(xù)的時間會與用戶的訪問時間一樣長,所以使用session存儲購物車。
使用session存儲購物車,購物車中的物品在不斷發(fā)生變化,那么采用什么數(shù)據(jù)結(jié)構(gòu)表示購物車呢?因為購物車中可能會有很多物品,所以不能使用普通對象,必須使用集合。在Java中,集合可以使用數(shù)組和Collection框架中的集合對象表示。但是因為數(shù)組是長度固定的,而購物車中的物品是變化的,所以不能使用數(shù)組。因此通常使用Collection框架中的ArrayList或者Vector表示購物車。ArrayList或者Vector對象表示多個對象的集合,每個元素就是一個對象。ArrayList和Vector的用法非常類似。
購物車中可能會有很多物品,如何表示每種類型的物品呢?我們稱購物車中的每項物品為購物條目,通常包含物品信息和數(shù)量。在本書的應(yīng)用中物品信息就是Book對象。
購物條目可以定義如下:
publicclassBookItemimplementsSerializable
{
//圖書
privateBookbook;
//數(shù)量
privateintquantity;
publicvoidsetBook(Bookbook)
{
this.book=book;
}
publicBookgetBook()
{
returnbook;
}
publicvoidsetQuantity(intquantity)
{
this.quantity=quantity;
}
publicintgetQuantity()
{
returnquantity;
}
}
購物車的數(shù)據(jù)結(jié)構(gòu)可以參考下面的代碼:
publicclassCartimplementsjava.io.Serializable{
//圖書列表
ArrayListbooks;
//對應(yīng)的用戶
Stringuserid;
//電話
Stringphone;
//地址
Stringaddress;
//訂單編號
Stringorderid;
//添加圖書
publicArrayListaddBook(Stringbookid){
}
//刪除圖書
publicArrayListremoveBook(Stringbookid)[
}
//修改圖書數(shù)量
publicArrayListupdateBookQuantity(Stringbookid,intquantity){
}
//清空圖書
pubicvoidclear(){
}
//返回所有圖書
publicArrayListgetBooks(){
returnbooks;
}
}購物車的應(yīng)用主要有以下幾個方面:
(1)創(chuàng)建購物車:
ArrayListbooks=newArrayList();
(2)向購物車中添加訂單項:
BookItemitem=newBookItem();
books.add(item);
(3)從購物車中刪除信息:
books.remove(item);
或者
books.remove(index);
前者根據(jù)物品刪除,后者根據(jù)索引號刪除。
(4)用Java代碼遍歷購物車中的信息:
Object[]o=books.toArray();
for(inti=0;i<o.length;i++)
{
BookItemitem=(BookItem)o[i];
//對item進(jìn)行處理
}
(5)界面中使用標(biāo)準(zhǔn)標(biāo)簽庫遍歷購物車的代碼:
<c:forEachvar="item"items="booklist">
<!--每個item進(jìn)行處理-->
</c:forEach>
(6)修改購物車中的信息,需要先查找到要修改的信息,然后修改。查找可以使用遍歷的方式,修改可以使用下面的代碼:
books.set(index,item);
14.3.2購物車管理
1.為圖書瀏覽過程添加購物車功能
該功能涉及以下過程:
●在圖書信息查看界面上添加超鏈接“添加到購物車”。
●編寫JavaBean完成添加過程。
●編寫Servlet接收“添加到購物車”請求。
下面分別描述關(guān)鍵點。
(1)修改圖書信息查看界面。超鏈接的代碼是:
<ahref="目標(biāo)文件">添加到購物車</a>
其中,目標(biāo)文件是要訪問的Servlet的映射路徑。因為添加的時候需要知道書號,所以應(yīng)該把書號作為參數(shù)傳遞到服務(wù)器,可以使用“?”傳遞。格式如下:
<ahref="目標(biāo)文件?bid=${book.bid}">添加到購物車</a>
這里假設(shè)當(dāng)前圖書信息保存在book變量中。
(2)在購物車JavaBean中完成添加過程。購物車JavaBean主要用來封裝購物車信息,主要成員變量如下:
ArrayListbooks;
向購物車添加圖書需要在JavaBean中添加一個addBook方法,該方法的參數(shù)是圖書的編號,返回值是圖書列表。該方法定義如下:
publicArrayListaddBook(Stringbookid)方法體執(zhí)行的主要過程如下:
①
根據(jù)bookid查找圖書信息。
②
判斷購物車中是否已經(jīng)存在圖書:
●如果不存在,則創(chuàng)建購物車對象,然后以圖書和1(數(shù)量)構(gòu)造訂單項,然后把訂單項添加到列表中。
●如果存在,則遍歷圖書列表,查看是否有當(dāng)前圖書。如果有,就把圖書列表中該圖書對應(yīng)的訂單項的數(shù)量增加1(假設(shè)每次添加一本);如果沒有,就以圖書和1(數(shù)量)構(gòu)造訂單項,然后把訂單項添加到列表中。
③把圖書列表返回。
(3)編寫Servlet,進(jìn)行控制。Servlet主要完成控制功能,功能如下:
●接收用戶添加購物車的請求,然后獲取要添加的圖書的編號。
●從session中獲取購物車信息。
●以購物車信息為參數(shù)創(chuàng)建購物車管理JavaBean。
●以圖書編號為參數(shù)調(diào)用購物車管理JavaBean的addBook方法。
●把a(bǔ)ddBook返回的結(jié)果(購物車信息)重新保存到session中。
●跳轉(zhuǎn)到圖書查看界面。
2.添加購物車查看功能
購物車信息保存在session中,所以查看購物車信息時只需從session中獲取然后顯示即可,不需要控制文件Servlet和JavaBean。
添加購物車查看功能的步驟是:首先需要在所有相關(guān)的界面添加“查看購物車”功能超鏈接,然后編寫查看購物車界面。主要代碼如下:
<c:iftest="{emptysessionScope.booklist}">
購物車中沒有任何圖書
</c:if>
<c:iftest="{!emptysessionScope.booklist}">
購物車中物品如下
<c:setvar="totalPrice"value="0">
<table>
<tr>
<th>書名</th>
<th>數(shù)量</th>
<th>單價</th>
<th>合計</th>
</tr>
<!--booklist表示圖書列表,item表示某一種圖書
-->
<c:forEachvar="item"items="booklist">
<tr>
<!--圖書的名字
-->
<td>${item.book.bookname}</td>
<!--圖書的數(shù)量
-->
<td>${item.quantity}</td>
<!--圖書的單價
-->
<td>${item.book.price}</td>
<!--某一種圖書的總價
-->
<td>${item.book.price*item.quantity}</td>
<!--計算所有圖書的總價
-->
<c:setvar="totalPrice"value="${totalPrice+item.book.price*item.quantity}"/>
</tr>
</c:forEach>
<tr>
<tdcolomnSpan="3">總計</td>
<td>${totalPrice}</td>
</tr>
</table>
</c:if>
3.添加圖書數(shù)量修改功能
添加圖書數(shù)量修改功能時,首先應(yīng)該有修改界面,然后有接收修改請求的Servlet,最后必須有完成修改的方法。
(1)界面。應(yīng)該在查看購物車界面添加“修改”。修改的時候需要確定兩項信息:圖書編號和數(shù)量。每種類型的圖書數(shù)量都可以修改,所以需要給出與圖書種類相同的修改按鈕。
為了在點擊按鈕的時候能夠修改相應(yīng)圖書的數(shù)量,對于每種圖書都使用一個form,每個form包含相應(yīng)的按鈕、數(shù)量輸入框和編號。因為編號不能修改,所以需要使用隱藏域。
關(guān)鍵代碼參考如下:
<tr>
</formaction="目標(biāo)文件"method="post">
<td>${item.book.bookname}</td>
<td><inputtype="text"name="quantity"value="${item.quantity}"></td>
<td>${item.book.price}</td>
<td>${item.book.price*item.quantity}</td>
<inputtype="hidden"name="bookid"value="${item.book.bookid}">
<td><inputtype="submit"value="修改"></td>
<c:setvar="totalPrice"value="${totalPrice+item.book.price*item.quantity}"/>
</form>
</tr>
(2)在購物車JavaBean中添加修改數(shù)量功能。需要在購物車JavaBean中添加一個方法updateQuantity,方法的參數(shù)是圖書編號和數(shù)量,返回值是數(shù)量修改后的圖書列表,方法的定義如下:
publicArrayListupdateBookQuantity(Stringbookid,intquantity)
方法的主要執(zhí)行過程如下:
●遍歷購物車,查找要修改的圖書對應(yīng)的訂單項。
●修改該訂單項的數(shù)量。
●返回圖書列表。
(3)編寫Servlet進(jìn)行控制。Servlet主要完成以下控制功能:
●接收用戶的修改圖書數(shù)量的請求,獲取要修改的圖書的編號和數(shù)量。
●從session中獲取購物車信息。
●以購物車信息為參數(shù)創(chuàng)建購物車管理JavaBean。
●以圖書編號和數(shù)量為參數(shù)調(diào)用購物車管理JavaBean的updateBookQuantity方法。
●把updateBookQuantity方法返回的結(jié)果(購物車信息)重新保存到session中。
●跳轉(zhuǎn)到購物車信息查看界面。
4.添加購物車刪除功能
購物車刪除功能和圖書數(shù)量修改功能非常類似,并且相對更簡單。
界面的修改方法基本相同,并且刪除功能不需要輸入框。
在購物車JavaBean中編寫的刪除方法與修改方法基本相同,查找到之后刪除即可。
控制器Servlet的功能基本相同。
5.添加清空購物車功能
清空購物車就是刪除購物車中的所有訂單項,只要直接刪除session中存儲的購物車即可??梢允褂孟旅娴拇a實現(xiàn)該功能:
<c:removevar="booklist"scope="session"/>
6.添加訂單生成功能
可以在訂單查看界面添加一個訂單生成按鈕。當(dāng)用戶點擊這個按鈕的時候,給出一個界面,讓用戶輸入送貨信息。如果用戶已經(jīng)登錄,則可以把用戶信息中相關(guān)的送貨信息顯示在相應(yīng)的位置。當(dāng)用戶輸入完信息之后,點擊確定按鈕,可以生成訂單。
該功能涉及的文件如下:訂單生成預(yù)處理Servlet、送貨信息輸入界面、購物車管理JavaBean、訂單生成處理Servlet及訂單生成反饋界面。
主要功能分別描述如下。
(1)訂單生成預(yù)處理Servlet。它完成的主要功能是判斷當(dāng)前用戶是否登錄,如果登錄則獲取用戶信息,然后把用戶信息保存在request中,使用request的setAttribute方法。然后跳轉(zhuǎn)到送貨信息輸入界面。使用RequestDisatcher的forward方法。
(2)送貨信息輸入界面。送貨信息主要包括收貨人、送貨地址和聯(lián)系電話。對這些信息應(yīng)該有要求,并且需要進(jìn)行驗證。要求收貨人必須大于4位小于10位。送貨地址應(yīng)該大于10位。聯(lián)系電話可以有兩個,第一個不能為空并且必須是7位以上,只能包含數(shù)字和連字符。第二個電話可以沒有,如果有則必須是7位以上,只能包含數(shù)字和連字符。
如果用戶已經(jīng)登錄,先提取用戶信息,然后保存在變量中。參考代碼如下:
<c:iftest="{!emptyuserinfo}">
<c:setvar="username"value="${userinfo.username}"/>
<c:setvar="phone"value="${userinfo.phone}"/>
<c:setvar="address"value="${userinfo.address}"/>
</c:if>
如果用戶沒有登錄,則變量中保存空字符串:
<c:iftest="{emptyuserinfo}">
<c:setvar="username"value=""/>
<c:setvar="phone"value=""/>
<c:setvar="address"value=""/>
</c:if>
之后就可以把這些信息顯示在相應(yīng)的輸入框中,例如:
<inputtype="text"name="address"value="${address}">
需要編寫客戶端代碼對用戶輸入信息進(jìn)行驗證。
(3)在購物車管理JavaBean中添加生成訂單的方法。該方法根據(jù)購物車中的信息和用戶輸入的送貨信息生成訂單。其返回值是訂單號。
該方法的定義如下:
publicStringproduceOrder()
該方法的基本處理過程如下:
●生成訂單號??梢杂泻芏喾N方式來生成訂單號,讀者可以使用年月日加上流水號,例如20070318000001,表示2007年3月18日的第一個訂單。
●開始一個事務(wù)。因為訂單和訂單項需要單獨寫入數(shù)據(jù)庫中,多個數(shù)據(jù)庫操作組成一個事務(wù),所以需要進(jìn)行事務(wù)處理。
●在數(shù)據(jù)庫中添加訂單。把用戶編號、用戶名、地址、電話和訂單號組成一個記錄,插入到訂單表中。
●把訂單項添加到數(shù)據(jù)庫中。對于每個訂單項,需要提取圖書編號,提取圖書數(shù)量,把圖書編號、圖書數(shù)量、訂單編號插入到訂單明細(xì)表中。
●提交事務(wù)。
●返回訂單號。
(4)訂單生成處理Servlet。其主要功能是接收用戶的送貨信息,并根據(jù)session中的圖書列表生成購物車對象,然后調(diào)用購物車對象的生成訂單方法?;具^程如下:
●獲取用戶輸入信息,通過request對象的getParameter方法。
●獲取session對象。
●從session中獲取用戶選擇的圖書列表。
●根據(jù)圖書列表構(gòu)造購物車。
●把用戶輸入的送貨信息賦值給購物車對象。
●調(diào)用購物車對象的生成訂單方法。
●把訂單號保存在request中。
●重定向到訂單生成反饋界面。
(5)訂單生成反饋界面。編寫界面對用戶響應(yīng),提示用戶訂單生成并顯示訂單信息。
14.3.3訂單管理
管理員可以使用訂單管理功能查看有哪些訂單,然后選擇訂單進(jìn)行處理,必要的時候可以查詢訂單,默認(rèn)地顯示還沒有處理的訂單。
1.訂單查看功能
訂單查看通常先看訂單列表,因為訂單可能比較多,所以應(yīng)該提供分頁顯示功能。在訂單列表中不會顯示訂單的詳細(xì)信息,如果要查看某個訂單的詳細(xì)情況,就選擇該訂單,然后詳細(xì)查看該訂單的所有訂單項。所以訂單查看涉及如下文件:訂單管理JavaBean、訂單列表查看Servlet、訂單列表界面、訂單詳細(xì)信息查看Servlet及訂單詳細(xì)信息查看界面。
主要功能分別描述如下:
(1)訂單管理JavaBean。訂單查看功能中涉及兩項查詢,查詢所有訂單和查詢某個訂單的詳細(xì)信息。這兩個功能在訂單管理JavaBean中完成。
查詢訂單,即從訂單表中查詢所有沒有被處理過的訂單,這個過程與前面介紹的用戶信息查詢完全相同。對于查詢到的每個訂單,使用一個order表示,然后把這些order對象封裝到ArrayList對象中,返回這個ArrayList對象。
查詢訂單的詳細(xì)信息,是根據(jù)訂單編號查詢某個訂單的所有訂單項。該功能與查詢某一個用戶的信息非常類似。該方法返回一個order對象。
(2)訂單列表查看Servlet。這個Servlet是訂單管理功能要訪問的第一個文件,其基本處理過程如下:
●創(chuàng)建訂單管理JavaBean的對象。
●調(diào)用訂單管理JavaBean對象的查詢訂單列表的方法。
●把訂單列表保存到request中。
●重定向到訂單列表界面。
(3)訂單列表查看界面。該界面完成的主要功能如下:
●顯示所有的訂單。
●在每個訂單上面添加一個超鏈接,連接到訂單詳細(xì)信息查看Servlet。
●在界面上添加訂單查詢功能。
●訂單數(shù)量較多的時候需要提供分頁顯示功能。
(4)訂單詳細(xì)信息查看Servlet。該功能主要是根據(jù)訂單的編號,查詢該訂單所涉及的所有訂單項。其主要處理過程如下:
●從請求對象request中獲取訂單編號。
●創(chuàng)建訂單管理JavaBean的對象。
●調(diào)用詳細(xì)信息查看方法。
●把查詢到的訂單詳細(xì)信息保存在request中。
●重定向到訂單詳細(xì)信息查看界面。
(5)訂單詳細(xì)信息查看界面??梢允褂?lt;c:forEach>標(biāo)簽顯示訂單的詳細(xì)信息。
2.訂單處理功能
該功能主要針對沒有處理過的訂單,在查看這些訂單的時候進(jìn)行處理。此過程涉及3個文件:訂單詳細(xì)信息查看界面、訂單管理JavaBean及訂單處理Servlet。
(1)訂單詳細(xì)信息查看界面。在訂單詳細(xì)信息查看界面中顯示信息的時候,如果該訂單還沒有被處理,則在該界面上顯示“處理該訂單”按鈕??梢允褂?lt;c:if>標(biāo)簽進(jìn)行控制。如果該訂單已經(jīng)處理過,則不顯示該按鈕。
(2)訂單管理JavaBean。在該JavaBean中添加一個訂單處理方法,即根據(jù)訂單編號修改訂單的狀態(tài),修改完之后查詢并返回訂單的相關(guān)信息。
(3)訂單處理Servlet。其主要功能是接收訂單編號,調(diào)用訂單
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 小兒腹股溝疝的護(hù)理
- 大型商場超市春節(jié)促銷策劃書 -策劃
- 地理教學(xué)研修總結(jié)
- oem供應(yīng)商供貨協(xié)議合同范本
- 小兒推拿腺樣體肥大課件
- 醫(yī)用輸液吊橋采購合同范本
- 小兒推拿提高免疫力課件
- 關(guān)于租用土地的合同范本
- 冷鏈?zhǔn)称饭┴泤f(xié)議書模板
- 三方項目經(jīng)營合作協(xié)議書
- 維修單(標(biāo)準(zhǔn)模版)
- 市政工程占道施工方案
- GB/T 39965-2021節(jié)能量前評估計算方法
- GB/T 17449-1998包裝玻璃容器螺紋瓶口尺寸
- GB/T 12243-2021彈簧直接載荷式安全閥
- GB/T 10066.4-2004電熱設(shè)備的試驗方法第4部分:間接電阻爐
- PMC知識培訓(xùn)課件
- CJJ82-2019-園林綠化工程施工及驗收規(guī)范
- 個人信息(模板)
- 會計師事務(wù)所驗資工作底稿模板
- 婚育情況登記表
評論
0/150
提交評論