• 沒有找到結果。

6-1.1 建立資料庫

在 Microsoft Access 建立一個名為 Store1 的資料庫,分別建立 Car、CarOrder、Category、OrderDetail、VIP 五個資料表,如下圖 所示。

圖 6-1 store1 資料庫

● Car 資料表是汽車零件資料表單,用來存放汽車零件的詳細資料,

設計內容如下圖所示:

圖 6-2 car 資料表

● Category 資料表是汽車零件分類表單,用來紀錄汽車零件分 類資料,針對每一個分類給定一個編號,設計內容如下圖所示:

圖 6-3 Category 資料表

● OrderDetail 資料表是訂單明細的資料表單,用以紀錄訂單編 號、書籍編號及數量,並紀錄其是否有被確認訂購,設計內容如 下圖所示:

圖 6-4 OrderDetail 資料表

● VIP 資料集是會員基本的資料表單,包括會員的資本資料及登入 密碼,設計內容如下圖所示:

圖 6-5 VIP 資料表

以上五個資料表,因為要確定是唯一值而且還要與其他的關聯表建 立關聯,均設計一個自動編號的欄位及設成主索引。

之後再編輯資料庫的關聯:

一個零件可能有很多張訂單,Car 與 Category 是一對多的關係。

一個分類包含很多種零件,Car 與 Category 是多對一的關係。

一張訂單可能包含很多訂單明細,CarOrder 與 OrderDetail 是一 對多的關係。

一個人可能有很多訂單,VIP 與 CarOrder 是一對多的關係。

其資料庫的關聯圖如下所示:

圖 6-6 store1 資料庫關聯圖

利用資料庫建立一連串的查詢,來幫助節省一些程式的計算。

在此設計六個查詢:

● BLtotal:紀錄每張訂單消費的總金額。

● CarDetail:紀錄所有放入購物車的汽車零件及其數量(只放入購 物車)。

● notDcheck:紀錄為確認市否定購即離開的紀錄(以放入購物車但 未確定是否購買即離開)。

● ShopState:紀錄每個人購買分類的零件總數量及總金額。

● SumTotal:紀錄每個人的消費總金額。

6-1.2 頁面設計

購物車的首頁為 index.htm,首頁設計為框架頁主要包含左框架的功 能頁(Func.jsp)及右框架展示頁(Content.htm),把右框架命名為 mainFram。

<frame src="Func.jsp" name="leftFrame" scrolling="" noresize>

<frame src="Content.htm" name="mainFrame">

如下圖所示:

圖 6-7 購物車首頁 index.htm

Content.htm

在此設計一個加入會員的圖檔(join.jsp)並且連結到 NewVip.jsp

<a href="NewVip.jsp"><img src="images/join.jpg" ></a>

增加兩個文字輸入方塊,一個是名稱為 VipPhone 型態為 text,另一 個名稱為 VipPW 型態為 password。

<input name="VipPhone" type="text" id="VipPhone" size="10">

<input name="VipPW" type="password" id="VipPW" size="10">

Func.jsp

在此頁設計顯示出產品分類的動態資料,所以必須聯繫(Bindings) Store1 資料庫的 Category 資料集,因為資料不只一筆,所以我們設 計為 Repeat Gegion(重複區域),如此一來表格內的資料會隨著資料 庫變動的動態資料。

<% while ((Category_hasData)&&(Repeat1__numRows-- != 0)) { %>

當功能頁中點選某分類的動態資料超連結之後,便顯示相關的資料所 在目的的網頁,判別方式是以網址傳參數值的方式進行,而傳遞的參 數則是分類的編號(Category.ID)的值,名稱為 CategoryID。

圖 6-8 設定 CategoryID

Getcar.jsp

Content.htm 會員登入後,判斷是否為會員並領取購物車。由於 Getcar.jsp 程式需要先檢查身份,故建立 SQL 語法使用 WHERE 條件 判斷,並設定『MMColParam1』與『MMColParam2』這兩個變數,這兩 個變數是由 Content.htm 輸入的電話及密碼傳送的參數值。

圖 6-9 Getcar.jsp Vip 資料集

建立 Session 物件,將使用者 ID 設定在 Session 中,並取名為 VipID

<%session.setAttribute("VipID",VipID); %>

領取購物車之後,會員資料可以更改,插入 Application(應用程式) 的 Record Update Form(紀錄修改表單)。

如下圖所示:

圖 6-10 Getcar.jsp 記錄修改表單

Gotobuy.jsp

利用 Getcar.jsp 傳過來的 VipID (session) 找出客戶詳細資料,顯 示在 VIP 表格中,如下圖所示:

圖 6-11 Gotobuy.jsp Vip 資料集

身分確認之後,插入紀錄至 CarOrder 資料表,插入後前往 Content2.jsp 並且傳 VipID 給 Content2.jsp。

Content2.jsp

建立 Vip、SumTotal、SumNum、SumState、CarOrder 五個資料集,

並且都是以 VipID (session) 為篩選器,找出 Store1 資料庫的資料 其中 SumTotal、SumNum、SumState 所用到的 3 個查詢為

SumTotal 查詢:紀錄每個人來店消費的總金額。

圖 6-12 Sumtotal 查詢

SumNum 查詢:紀錄每個人來店消費的次數。

圖 6-13 SumNum 查詢

SumState 查詢:紀錄每個人購買分類的零件總數量及總金額。

圖 6-14 ShopState 查詢

領取完購物車之後,在建立一個 session 物件,取得訂單編號。

session.setAttribute("BOID",CarOrder.getString("ID"))

NewVip.jsp

用來新增會員資料,加入一個 Vip 資料集,插入 Application (應 用程式) 的 lnsert Record insertion Form (紀錄插入表單),如下 圖所示:

圖 6-15 NeqVip.jsp 記錄插入表單

Cars1.jsp

點選 Func.jsp 的動態資料之後,所顯示出來的零件詳細資料。

利用 Func.jsp 所傳送過來的參數 CategoryID 為 URL/Form Variable 篩選器,所顯示出來的零件詳細資料,建立三個資料集 Cars、

category、CateTotal。

圖 6-16 Car1.jsp Cars 資料集 圖 6-17 Car1.jsp category 資料集

圖 6-18 Car1.jsp CateTotal 資料集

插入 OrderID (帳單編號)、CarID (零件編號)、Quity (數量) 至 OrderDetail 資料表中,並且設定 OrderID、CarID 為隱藏欄位。

再加入一個數量的設計,讓客戶可以選擇數量:

<select name="Qty" id="Qty">

<% int i;

for (i=1;i<=20;i++) { %>

<option value="<%=i%>"><%=i%></option>

<% }%>

</select>

從 Server Behavior (伺服器行為) 的 Recordset Paging(資料集分 頁) 來設定翻頁行為。

設計完成後如下圖所示:

圖 6-19 car.jsp

CostTotal.jsp

查詢目前選購商品的項目。

建立四個資料集 Vip、Order、noDcheck、OrderTotal 資料集,其中 Vip 資料集的篩選條件為 session 變數 VipID,其他三個資料集 Order、noDcheck、OrderTotal 的篩選條件皆為 session 變數 BOID,

其中所用到的查詢為:

●CarDetail 查詢:紀錄所有放入購物車的汽車零件及其數量,其中 的總計(BLTotal) 用([Cars].[Price]*[OrderDetail].[Quity]) 運算式計算得來。

圖 6-20 CarDetail 查詢

● notDcheck:紀錄為未確認是否訂購即離開的紀錄。

圖 6-21 notDcheck 查詢

● BLtotal:紀錄每張訂單消費的總金額。

圖 6-22 BLtotal 查詢

再設計 notDcheck 查詢有資料的時候顯示前往櫃檯結帳,並指向 BellList.jsp,若無資料時顯示繳費清單,並指向 Amount.jsp。

當 Order 資料集找不到 session 變數 BOID,也就是沒有資料進來時,

沒有領取購物車。再設計當非會員登入時,顯示錯誤訊息

<% if (session.getAttribute("VipID") == null) {response.sendRedirect("login.jsp");} %>

設計完成之後如下圖所示:

圖 6-23 CostTotal.jsp

BellList.jsp

此為再次確認商品明細,經過兩次確認後的資料才會寫進資料集 OrderDetail。

設計 CarList 資料集篩選條件為 session 變數 BOID ,其資料來源為 notDcheck 查詢,利用 Record Update Form(紀錄更新表單),增加一 個資料集 OrderDetail 其資料來源為 OrderDetail 表,此時再比對

如下圖所示:

圖 6-24 BellList.jsp OrderDetail 資料集

兩個更新物件,一個為 Quity(數量)另一個為 Trade(選取方塊)。更 新後前往 BellList.jsp。

圖 6-25 BellList.jsp 插入更新表單

當 Carlist 無資料,也就是 notDcheck 查詢無資料時顯示您的商品已 經全部確認。

Amount.jsp

顯示出繳費清單。

設計四個資料集 Vip、CarOrder、BLtotal、CarList。其中 Vip 資料 集的篩選條件為 session 變數 VipID,其他三個資料集 CarOrder、

BLtotal、CarList 篩選條件皆為 session 變數 BOID,然後再使用 session.invalidate();清除 session 已強迫使用者登出。

圖 6-26 Amount.jsp

login.jsp

會員沒登入時,卻想要購買商品即顯示此頁,設計為三秒後自動前往 首頁。

<meta http-equiv="refresh" content="3;URL=Content.htm">

login-fail2.jsp

註冊會員時,註冊資料若不其全集顯示並告知註冊錯誤,設計為三秒 後前往首頁。

<meta http-equiv="refresh" content="3;URL=Content.htm">

6-2 實作留言版

實作一個訪客留言版,讓大家可以另用它來傳達一些訊息,如此 一來可以吸引大量的訪客登入留言,增加訪客人數。設計一個觀看留 言版的留言版檢視頁 guestbook.jap,和新增留言頁 add_gbook.jsp。

留言版程式的架構圖

訪 客 流 言 板

留 言 檢 視 頁 gu estb o ok .jsp

新 增 留 言 頁 ad d -g bo o k.jsp

6-2.1 建立資料庫

使用資料庫,把留言版的資料全部儲存下來,設計一個資料庫

guestbook.mbd,可以用來儲存姓名、性別、個人網頁、電子郵件、

msn 信箱、留言內容、留言日期、及訪客 IP,其如下圖所示:

圖 6-27 guestbook 資料表

其中『PostDate』欄位,使用內建函數 Now(),Now()函數會傳回電 腦現在的日期時間。

6-2.2 留言版頁面設計 guestbook.jsp

設計一個 guestbook 資料集,然後要把最新的留言顯示在最前面,在 Sort(排序) 選擇『PostDate』欄位,排序方法設為『Descendind』(遞 減排序)。如下圖所示:

圖 6-28 guestbook.jsp guestbook 資料表

並設計為重複區域,且一次是顯示 10 筆資料,此段程式碼是用 while 迴圈把資料表中的每一筆資料顯示出來,直到 guestbook_hasData 傳 回 false(假)的時候才結束。

<% while ((guestbook_hasData)&&(Repeat1__numRows-- != 0)) { %>

...內容

<%

Repeat1__index++;

guestbook_hasData = guestbook.next();

}

%>

設定留言版的主畫面可以顯示現在瀏覽的位置和筆數,使用

『Recordset Navigation Status』(資料集狀態瀏覽列),並指定到

Bar』(資料集導覽按鈕),設計完成後如下圖所示:

圖 6-29 ghostbook.jsp

Addguestbook.jsp

新增留言機制,讓訪客有新增留言的功能。

使用『Record Inserting Form』(新增資料表單),指定要連接的資 料表為 guestbook,其中在 IP 欄位設為『Hidden』隱藏欄位型態,

因為這部份要用 JSP 物件自動取得對方的 IP 位址。使用 request 物 件的 request.getRemoteAddr()方法,來設定自動取得使用者的 IP 位址。

6-3 實作線上討論區

實作討論區,分為一般使用者和管理者。

線上討論區系統程式架構圖

線上討論區系統

一般使用者 介面

討論區主題頁 board.jsp

發表討論主題頁 add-topic.jsp

觀看主題頁 viewtopic.jsp

回應討論主題 retopic.jsp

管理者介面

登入 login1.jsp

管理者檢視頁 aminnboard.jsp

討論區資料維護頁 editboard.jsp

修改主題內容頁 upd-topic.jsp

修改回應內容頁 upd- reply.jsp

刪除主題內容頁 deltopic.jsp

刪除回應內容頁 delreply.jsp

6-3.1 建立資料庫

建立一個 board 的資料庫,分別建立 Topic、Reply、Username 資料 表,Topic 資料表是用來存放與討論主題相關的資料表,而 Reply 資 料表則是用來儲存與回應主題相關的資料表,Username 資料表用來

儲存管理者資料。其中一個主題有可能有很多的回應文章,所以在資 料庫關聯圖裡面 Topic 資料表對應 Reply 資料表為一對多的關係。

圖 6-30 Topic 資料表

圖 6-31 Reply 資料表

6-3.2 討論區頁面設計 board.jsp

因為有可能會有很多討論主題,所以各資料行設有底色來區分,以免 過多的資料列出反而讓使用者更眼花僚亂,設計當類別欄位中若為特 急件時就用紅色字顯示,再設計一個關鍵字查詢功能,以方便使用者 查詢欲找的文章。建立名為 board 資料集指定到 Topic 資料表,使用 Repeat Region (重覆區域)使其資料可以一次顯示 10 筆資料,再加 入翻頁功能,插入應用程式的 Recordset Navigation Bar (插入導 覽列),因為在 while 判斷式(Dreamweaver 用來計算重複區域)有一 個不段累計 <% Repeat_index++;%>,所以只需將編號欄位程式碼寫 成<%= Pepeat1_index %>即可顯示為第幾篇的回應,再來新增表格欄 位中的底色,要先定義 color 變數來存放顏色的變數,設計當表格是 奇數行的時候顯示一種顏色,偶數行時則顯示另一種顏色。

<%

if((Repeat1__index % 2)==0){

color = "DDFFFF";

}else{

color = "FEFFFF"; }

%>

如果資料欄位的值是像(“特急件”)的話,就將字的顏色改用紅色表 示並使用粗體字顯示。

<% board_data = board.getObject("TopicType");

if(board_data.equals("特急件"))

out.print("<font color='#ff0000'>"+"<b>" );

out.print(board_data);

out.print("</font>");

%>

在做關鍵字查詢時,建立一個 board 資料表並下達 SQL 語法的 WHERE 條件判斷,設定『QueryName』、『Keyword』兩個變數來接收使用者查 詢時,所選擇的查詢類型與關鍵字的值,如下圖所示:

圖 6-32 board.jsp bosrd 資料集

當點選討論主題的動態資料超連結之後,便顯示相關的主題的相關內 容,判別方式是以網址傳參數值的方式進行,而傳遞的參數則是主題 的編號(Topic.TopicID)的值,參數名稱為 TopicID。

Add_topic.jsp

發表新主題,直接新增 Insert Record linsertion Form (新增表單

相關文件