畢業(yè)設(shè)計(jì)(論文)-基于java的網(wǎng)上書店系統(tǒng)設(shè)計(jì).doc_第1頁
畢業(yè)設(shè)計(jì)(論文)-基于java的網(wǎng)上書店系統(tǒng)設(shè)計(jì).doc_第2頁
畢業(yè)設(shè)計(jì)(論文)-基于java的網(wǎng)上書店系統(tǒng)設(shè)計(jì).doc_第3頁
畢業(yè)設(shè)計(jì)(論文)-基于java的網(wǎng)上書店系統(tǒng)設(shè)計(jì).doc_第4頁
畢業(yè)設(shè)計(jì)(論文)-基于java的網(wǎng)上書店系統(tǒng)設(shè)計(jì).doc_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1 目目 錄錄 第第 1 章章 緒論緒論2 1.1 開發(fā)背景.2 1.2 網(wǎng)上書店設(shè)計(jì)概覽.2 第第 2 章章 系統(tǒng)分析系統(tǒng)分析3 2.1 可行性分析.3 2.2 需求分析.3 2.3 系統(tǒng)的運(yùn)行環(huán)境和開發(fā)平臺(tái).3 2.3.1 硬件設(shè)備及操作系統(tǒng).3 2.3.2 系統(tǒng)開發(fā)平臺(tái).4 第第 3 章章 總體分析總體分析5 3.1 系統(tǒng)結(jié)構(gòu)圖.5 3.2 系統(tǒng)模塊圖.5 3.3 系統(tǒng)主要處理流程.5 第第 4 章章 詳細(xì)設(shè)計(jì)詳細(xì)設(shè)計(jì)7 4.1 uml設(shè)計(jì)7 4.1.1用例圖7 4.1.2 子模塊序列圖.7 4.2 數(shù)據(jù)庫設(shè)計(jì).11 4.2.1 e-r圖.11 4.2.2關(guān)系圖11 4.2.3 物理結(jié)構(gòu).12 4.3 界面設(shè)計(jì).14 第第 5 章章 測試測試16 5.1 測試過程.16 第第 6 章章 結(jié)論結(jié)論17 附錄附錄 參考文獻(xiàn)參考文獻(xiàn).18 附錄附錄 源代碼源代碼.19 2 第第 1 1 章章 緒論緒論 1.11.1 開發(fā)背景開發(fā)背景 隨著 internet 國際互聯(lián)網(wǎng)的發(fā)展,越來越多的企業(yè)開始建造自己的網(wǎng)站?;?internet 的信息服務(wù),商務(wù)服務(wù)已經(jīng)成為現(xiàn)在企業(yè)的一項(xiàng)不可缺少的內(nèi)容。很多企業(yè)都已 經(jīng)不滿足于建立一個(gè)簡單的,僅僅能夠發(fā)布信息的靜態(tài)網(wǎng)站。現(xiàn)代企業(yè)需要的是一個(gè)功能 強(qiáng)大的,能夠提供完善的電子商務(wù)服務(wù)的動(dòng)態(tài)商務(wù)網(wǎng)站。同時(shí)人們的生活方式也在隨著發(fā) 生改變,人們對于互聯(lián)網(wǎng)技術(shù)的要求已不單單是瀏覽一下網(wǎng)頁,收發(fā)電子郵件,日益忙碌 的人們開始追求足不出戶的利用互聯(lián)網(wǎng)這個(gè)強(qiáng)大的平臺(tái)來實(shí)現(xiàn)網(wǎng)上購物。對于企業(yè)來說, 無論是企業(yè)之間還是企業(yè)與客戶之間的交易,如果能夠?qū)崿F(xiàn)網(wǎng)上交易將大大提高交易速度 節(jié)約交易成本。近幾年,隨著網(wǎng)絡(luò)數(shù)據(jù)庫技術(shù)的進(jìn)一步發(fā)展,使得這一設(shè)想逐漸成為了現(xiàn) 實(shí)。基于 b/s 的系統(tǒng)開發(fā)開始已經(jīng)是當(dāng)今的總趨勢。 jsp 是十分流行的一種技術(shù),它主要是運(yùn)行在開發(fā)服務(wù)器端的腳本程序和動(dòng)態(tài)生成網(wǎng) 站的內(nèi)容。jsp 技術(shù)有 j2ee 平臺(tái)支持,發(fā)展前途不可限量??偹苤?,j2ee 平臺(tái)提供了 java 企業(yè)應(yīng)用編程接口,為企業(yè)計(jì)算以及電子商務(wù)應(yīng)用系統(tǒng)提供了有關(guān)的技術(shù)和強(qiáng)大的類 庫支持,j2ee 平臺(tái)包含十幾種技術(shù),jsp 技術(shù)正是其中的一種核心的技術(shù)。 1.21.2 網(wǎng)上書店設(shè)計(jì)概覽網(wǎng)上書店設(shè)計(jì)概覽 按照用戶類型區(qū)分的話,通常電子商務(wù)網(wǎng)站可以分為會(huì)員模塊、后臺(tái)管理模塊。電子 商務(wù)網(wǎng)站是以商務(wù)活動(dòng)為中心進(jìn)行的。書店的定義不外乎展示圖書的信息,與其他銷售通 路并無不同,從這樣的角度來看,網(wǎng)絡(luò)書店的基本功能也是如此,不過是出版品另一種形 態(tài)的宣傳或者銷售通路,甚至傳統(tǒng)店面的輔助。網(wǎng)絡(luò)書店所能與傳統(tǒng)書店服務(wù)的真正不同 之處在于打破了銷售或出版的界限。以目前的網(wǎng)絡(luò)書店形態(tài)而言,最后銷售的仍然是一本 本印制完成的出版品,消費(fèi)者從網(wǎng)站上得到的,只是這些出版物的信息,而不是“書” ,也 就是說,網(wǎng)絡(luò)書店本身只是一個(gè)出版物與消費(fèi)者的中介,而不是被消費(fèi)的主體。 3 第第 2 2 章章 系統(tǒng)分析系統(tǒng)分析 2.12.1 可行性分析可行性分析 可行性分析也稱為可行性研究,是在系統(tǒng)調(diào)查的基礎(chǔ)上,針對新系統(tǒng)的開發(fā)是否具備 必要性和可能性,對新系統(tǒng)的開發(fā)從技術(shù)、經(jīng)濟(jì)、社會(huì)的方面進(jìn)行分析和研究,以避免投 資失誤,保證新系統(tǒng)的開發(fā)成功??尚行匝芯康哪康木褪怯米钚〉拇鷥r(jià)在盡可能短的時(shí)間 確定問題是否能夠解決。該系統(tǒng)的可行性分析包括了以下幾個(gè)方面的內(nèi)容。 (1)經(jīng)濟(jì)可行性:主要是對項(xiàng)目的經(jīng)濟(jì)效益進(jìn)行評價(jià),由于系統(tǒng)所使用的服務(wù)器是免 費(fèi)的,可以從網(wǎng)上免費(fèi)下載,用的免費(fèi)的數(shù)據(jù)庫管理軟件,本系統(tǒng)開發(fā)經(jīng)費(fèi)對于作者在經(jīng) 濟(jì)上是可以接收的。所以本系統(tǒng)在經(jīng)濟(jì)上是可行的。 (2)技術(shù)可行性:技術(shù)上的可行性分析主要是分析技術(shù)條件是否順利完成開發(fā)工作, 軟硬件是否滿足開發(fā)者的需要等。該管理系統(tǒng)采用當(dāng)前新興的 brower/server 模式開發(fā)。 三層的 brower/server 體系結(jié)構(gòu)具有很多傳統(tǒng)的 client/server 體系結(jié)構(gòu)不具備的優(yōu)點(diǎn), 它把應(yīng)用系統(tǒng)帶入了一個(gè)嶄新的發(fā)展時(shí)代。數(shù)據(jù)庫服務(wù)器選用 mysql,能夠處理我們這個(gè) 小型的網(wǎng)站的數(shù)據(jù)。它的靈活易用性為數(shù)據(jù)庫編程提供了很好的條件。因此,系統(tǒng)的軟件 開發(fā)平臺(tái)已成熟可行。硬件方面,科技飛速發(fā)展的今天,硬件更新速度越來越快,容量越 來越大,可靠性越來越高,價(jià)格越來越低,其硬件平臺(tái)完全能滿足此系統(tǒng)的需要。 綜上所述,此系統(tǒng)開發(fā)目標(biāo)已明確,在技術(shù)和經(jīng)濟(jì)等方面都可行,并且投入少、見效 快。因此系統(tǒng)的開發(fā)是完全可行的。 2.22.2 需求分析需求分析 為了準(zhǔn)確的確定目標(biāo)系統(tǒng)必須做什么,了解用戶的明確需求,進(jìn)一步實(shí)現(xiàn)子系統(tǒng)的功 能。 功能描述: 1.展示圖書:展示的方式有多種,可以按圖書分類、按銷售排行榜、按上架時(shí)間等, 有層次的展示圖書,提高用戶的購買興趣。對于某本圖書,除顯示圖書信息以外, 還可以附加書評、插圖、試讀部分章節(jié),并進(jìn)行相關(guān)圖書的推薦。 2.圖書查詢:根據(jù)多種條件來查詢,比如圖書名,作者名,出版社名,出版年月。 能進(jìn)行模糊匹配,包含關(guān)鍵字的圖書都能查到。 3.購書:只有注冊用戶才能購書。為用戶提供購物車,購物車內(nèi)圖書的數(shù)量可以修 改,也可以刪除購物車?yán)镆延械膱D書。最終通過訂單確認(rèn),附加用戶的郵寄地址, 生成有效的訂單,訂單一旦生成,用戶無權(quán)限再修改。 4.評價(jià)圖書:只有注冊用戶才能對圖書進(jìn)行評價(jià),能夠?qū)ψ约旱脑u價(jià)進(jìn)行增刪改。 5.后臺(tái)管理: 用戶管理:為用戶提供注冊和登錄服務(wù)。不同角色的用戶擁有不同的訪問權(quán) 限。比如登錄用戶能修改自己的個(gè)人信息,查詢訂單歷史記錄,訂單的狀態(tài)。 而管理員則能進(jìn)行后臺(tái)管理。 圖書信息管理:錄入、修改和刪除圖書信息。 庫存管理:每天都集中進(jìn)行一次入庫和出庫的操作。 銷售管理:包括售書、銷售明細(xì)、銷售排行、銷售報(bào)表。 訂單管理:管理客戶提交的訂單,客戶“已確認(rèn)”的訂單可修改狀態(tài)為“正 在配貨” , “正在配貨”的訂單可修改狀態(tài)為“缺貨”或“已發(fā)貨” 。 2.32.3 系統(tǒng)的運(yùn)行環(huán)境和開發(fā)平臺(tái)系統(tǒng)的運(yùn)行環(huán)境和開發(fā)平臺(tái) .1 硬件設(shè)備及操作系統(tǒng)硬件設(shè)備及操作系統(tǒng) 4 服務(wù)器:intel celeron(或與此相當(dāng)?shù)?cpu)以上配置的高性能 pc 機(jī),有網(wǎng)絡(luò)接口卡 (nic),內(nèi)存應(yīng)在 512m 以上,硬盤在 80g 以上。確認(rèn)該計(jì)算機(jī)已經(jīng)安裝了 web 服務(wù)器軟件 tomcat5.0,數(shù)據(jù)庫軟件 mysql5.2。 操作系統(tǒng):windows xp/2000 客戶端:intel celeron2.53(或與此相當(dāng)?shù)?cpu)以上配置的 pc 機(jī),有網(wǎng)絡(luò)接口卡 (nic),內(nèi)存應(yīng)在 512m 以上,硬盤在 10g 以上,windowsxp/2000 操作系統(tǒng),安裝 web 瀏 覽器。 網(wǎng)絡(luò):服務(wù)器和客戶端應(yīng)有網(wǎng)絡(luò)連通,配置 tcp/ip 協(xié)議。 .2 系統(tǒng)開發(fā)平臺(tái)系統(tǒng)開發(fā)平臺(tái) 電腦配置:cpu:intel celeron2.53 內(nèi)存:ddr 512m 硬盤:80g 操作系統(tǒng):microsoft windows xp 中文版 開發(fā)環(huán)境:myeclipse6.0 web 服務(wù)平臺(tái):tomcat5.0 數(shù)據(jù)庫:mysql5.2 5 第第 3 3 章章 總體分析總體分析 3.13.1 系統(tǒng)結(jié)構(gòu)圖系統(tǒng)結(jié)構(gòu)圖 經(jīng)過需求分析階段的工作,系統(tǒng)必須“做什么”已經(jīng)清楚了,總體設(shè)計(jì)階段將站在全 局高度上,通過成本、可行性方案的比較,選擇最佳的軟件結(jié)構(gòu),從而用較低成本開發(fā)出 較高質(zhì)量的軟件系統(tǒng)。 系統(tǒng)結(jié)構(gòu)圖采用三層結(jié)構(gòu)模型,它的工作原理如圖 3.1 所示。 用戶界面層 業(yè)務(wù)處理層數(shù)據(jù)存儲(chǔ)層 數(shù)據(jù)庫 圖 3.1 三層結(jié)構(gòu)原理圖 采用三層構(gòu)架以后,用戶界面層通過統(tǒng)一的接口向業(yè)務(wù)層發(fā)送請求,業(yè)務(wù)層按自己的 邏輯規(guī)則將請求處理之后進(jìn)行數(shù)據(jù)庫操作,然后將數(shù)據(jù)庫返回的數(shù)據(jù)封裝成類的形式返回 給用戶界面層。這樣用戶界面層甚至可以不知道數(shù)據(jù)庫的結(jié)構(gòu),它只要維護(hù)與業(yè)務(wù)層之間 的接口即可。 3.23.2 系統(tǒng)模塊圖系統(tǒng)模塊圖 根據(jù)需求分析及三層架構(gòu)設(shè)計(jì)的思想,設(shè)計(jì)出系統(tǒng)功能模塊如圖 4.2 所示。 圖 3.2 系統(tǒng)功能模塊圖 3.33.3 系統(tǒng)主要處理流程系統(tǒng)主要處理流程 本系統(tǒng)的系統(tǒng)流程圖如圖 3.3 所示。 網(wǎng)上書店操作界面service 網(wǎng)上書店 書店客戶 管理員 注冊 用戶管理 庫存管理 圖書信息管理 瀏覽圖書 修改個(gè)人信息 選購圖書 評價(jià)圖書 銷售管理 訂單管理 評價(jià)管理 6 圖 3.3 系統(tǒng)流程圖 7 第第 4 4 章章 詳細(xì)設(shè)計(jì)詳細(xì)設(shè)計(jì) 通過系統(tǒng)分析,對網(wǎng)站的建設(shè)有了整體的認(rèn)識(shí),詳細(xì)設(shè)計(jì)這一塊主要是對各個(gè)功能細(xì) 節(jié)的處理和設(shè)計(jì),包括 uml 建模中的系統(tǒng)用例,類圖,以及各個(gè)子模塊的順序圖,數(shù)據(jù)庫 詳細(xì)設(shè)計(jì)中的實(shí)體 e-r 圖,物理結(jié)構(gòu)的設(shè)計(jì),以及網(wǎng)站的形象設(shè)計(jì)。這一塊結(jié)束后,對整 個(gè)網(wǎng)站實(shí)現(xiàn)的內(nèi)容就有了清楚的認(rèn)識(shí)。 4.14.1 umluml 設(shè)計(jì)設(shè)計(jì) .1 用例圖用例圖 網(wǎng)上書店的用例圖如圖 4.1 所示。 游客 會(huì)員 管理員 系系統(tǒng)統(tǒng) 瀏覽圖書 瀏覽/搜索圖書 管理購物車 管理帳號(hào) 評價(jià)圖書 管理圖書 訂單管理 注冊 登錄 信息修改 查看訂單 用戶管理 庫存管理 銷售管理 評價(jià)管理 * * * * * * * * * * * * * * * * * * * * * * * 圖 4.1 系統(tǒng)用例圖 .2 子模塊序列圖子模塊序列圖 1.會(huì)員下訂單 該用例是客戶端下在客戶登錄后可以將瀏覽選中的圖書放入購物車,根據(jù)需要選擇圖 書并下訂單,該用例的流程如下: (1)用戶指定相應(yīng)的圖書種類進(jìn)行搜索,得到相應(yīng)的圖書信息; (2)選中自己需要的圖書并選擇其定購的數(shù)量放入購物車; (3)提交下訂單請求,系統(tǒng)檢查用戶是否登錄,若用戶未登錄轉(zhuǎn)(4),否則返回個(gè)人 信息由用戶確認(rèn),轉(zhuǎn)(5); (4)用戶登錄系統(tǒng),重新進(jìn)入購物車頁面,轉(zhuǎn)(3); (5)顧客確認(rèn)自己的信息后,由系統(tǒng)數(shù)據(jù)庫記錄訂單信息更新訂單表; (6)數(shù)據(jù)庫更新成功后,返回顧客下訂單成功的消息。 8 時(shí)序圖如圖 4.2 所示。 顧客 系統(tǒng)圖書表 下訂單 訂單 2.返回登錄成功界面 5.返回搜索到的信息 6.顯示搜索到的信息 11.返回確認(rèn)個(gè)人信息界面 14.返回添加成功消息 15.顯示訂單信息 1.登錄系統(tǒng) 3.提交搜索的圖書的信息 4.查詢圖書表 7.選擇圖書及數(shù)量放入購物車 10.提交下訂單請求 12.確認(rèn)個(gè)人信息 13.更新訂單表 購物車 8.更新購物車 9.返回更新之后的購物車界面 圖4.2 下訂單時(shí)序圖 2.會(huì)員評價(jià) 該用例是客戶可以對圖書的使用、性價(jià)比等進(jìn)行評價(jià),該用例執(zhí)行的流程如下: (1)用戶提交評價(jià)的請求,系統(tǒng)檢查用戶是否登錄本系統(tǒng),若登錄,由系統(tǒng)返回評 價(jià)界面,轉(zhuǎn)(3),否則,進(jìn)入提示登錄頁面,轉(zhuǎn)(2); (2)用戶登錄系統(tǒng),轉(zhuǎn)(1); (3)用戶填寫并提交評價(jià)信息; (4)由系統(tǒng)更新數(shù)據(jù)庫中的評價(jià)信息表; (5)數(shù)據(jù)庫返回?cái)?shù)據(jù)添加成功的消息,系統(tǒng)將評價(jià)信息返回給顧客。 時(shí)序圖如圖4.3 所示。 9 顧客 系統(tǒng)評價(jià)表 2.確認(rèn)是否登錄 5.更新成功信息 6.顯示圖書的評價(jià) 圖書評價(jià) 1.提交評價(jià)請求 3.確認(rèn)登錄 4.更新評價(jià) 圖 4.3 會(huì)員評價(jià)時(shí)序圖 3.管理員修改圖書 該用例是管理員可以根據(jù)圖書信息的變動(dòng)情況可以修改圖書的相關(guān)信息,該用例的執(zhí)行流 程如下: (1)管理員登錄系統(tǒng)后,提交要搜索的圖書信息,系統(tǒng)搜索數(shù)據(jù)庫中的圖書表,向管 理員返回符合要求的圖書信息; (2)管理員選擇要修改的圖書,向系統(tǒng)提交修改請求,系統(tǒng)返回修改圖書信息的頁 面; (3)管理員修改圖書信息,并提交給系統(tǒng)處理; (4)系統(tǒng)更新數(shù)據(jù)庫中圖書表的信息,并返回修改成功的頁面。 時(shí)序圖4.3 所示。 10 管理員 系統(tǒng) 管理員修改商品 圖書表 1.提交要搜索的圖書信息 2.搜索圖書表信息 3.返回已經(jīng)搜索到的信息 4.顯示滿足記錄 5.提交修改申請 6.返回修改界面 7.提交修改信息 8.更新數(shù)據(jù)庫 9.返回?cái)?shù)據(jù)修改成功信息 10.返回修改成功信息 圖4.3 管理員修改圖書時(shí)序圖 .3 類圖類圖 如圖 4.4 類圖 user,purview,distribute 為基礎(chǔ)類,userdao 為接口,聲明了訪問數(shù)據(jù)庫的所有方法, userdaoimpl 實(shí)現(xiàn)了 userdao,為 userdao 里面的方法書寫了具體的實(shí)現(xiàn)。userservice 也是 接口,提供了實(shí)現(xiàn)業(yè)務(wù)的方法,userserviceimpl 實(shí)現(xiàn)了 userservice,為 userservice 書寫了 具體的實(shí)現(xiàn)。loginframe 類建立登錄的界面,registerframe 類建立注冊界面,在 loginframe 面板上點(diǎn)擊“登錄”按鈕進(jìn)入的都是為普通用戶注冊。userframe 是用戶登錄 進(jìn)去的界面。manageblock 是用戶管理員分配權(quán)限。 11 +getpurviewid() : int +setpurviewid(int)() : void +getuserid() : int +setuserid(int)() : void +getusername() : string +setusername(string)() : void +getuserpass() : string +setuserpass(string)() : void +getuseremail() : string +setuseremail(string)() : void +getuseraddress() : string +setuseraddress(string)() : void +getusertele() : string +setusertele(string)() : void -userid : int -username : string -userpass : string -useremail : string -useraddress : string -usertele : string -purviewid : int user +adduser(user)() : bool +finduser(user)() : user userdao userdaoimpl +judgeuser(string, string)() : user +adduser(user)() : bool userservice -dao : userdao userserviceimpl +loginframe() +actionperformed(actionevent)() : void +finduser() : void loginframe +registerframe() +actionperformed(actionevent)() : void +registeruser() : void registerframe +manageblock() manageblock +userframe(user, list)() userframe +getpurviewid() : int +getpurviewname()() : string +getpurviewdetail()() : string +setpurviewid(int)() : void +setpurviewname(string)() : void +setpurviewdetail(string)() : void -purviewid : int -purviewname : string -purviewdetail : string purview +getdistributeid()() : int +getblockid()() : int +getpurviewid()() : int +setdistributeid(int)() : void +setblockid(int)() : void +setpurviewid(int)() : void -distributeid : int -blockid : int -purviewid : int distribute 4.24.2 數(shù)據(jù)庫設(shè)計(jì)數(shù)據(jù)庫設(shè)計(jì) .1 e-re-r 圖圖 e-r 圖表示了實(shí)體之間的聯(lián)系,每個(gè)顧客可以訂購 n 本圖書,1 本圖書也可以被 n 個(gè)顧 客訂購,所以顧客與圖書之間的是多對多的聯(lián)系。每個(gè)顧客可以對 n 本書進(jìn)行評價(jià),一本 圖書對應(yīng) n 個(gè)評價(jià),因此,顧客與圖書之間又有了“評價(jià)”這個(gè)聯(lián)系表。多本圖書對應(yīng)一 個(gè)類型,圖書與圖書類型之間是 n 對 1 的關(guān)系。e-r 圖如圖 4.4。 圖 4.4 e-r 圖 .2關(guān)系圖關(guān)系圖 顧客 圖書 評價(jià) 圖書類型 訂貨 屬于 n n n n n n 1 權(quán)限 模塊 1 n 分配權(quán)限 屬于 n 12 如圖 4.5 圖 4.5 關(guān)系圖 .3 物理結(jié)構(gòu)物理結(jié)構(gòu) 在服務(wù)器上創(chuàng)建一個(gè)名為 book 的數(shù)據(jù)庫。包括以下表: 表 1 圖書表(book) 字段名字段類型長度 null 說明備注 bookidint 否圖書編號(hào)主鍵 booknamevarchar30 否圖書名稱 bookauthorvarchar20 否圖書作者 bookpubdatedatetime 否圖書出版日期 bookpublishervarchar30 圖書出版社 bookpicvarchar20 圖書封面 bookoldpricefloat5 圖書原價(jià) booknewpricefloat5 否圖書現(xiàn)價(jià) bookdetailvarchar200 圖書詳情 13 表 2 顧客表(custom) 字段名字段類型長度 null 說明備注 customidint 否顧客編號(hào)主鍵 customnamevarchar10 否顧客帳號(hào) custompassvarchar20 否顧客密碼 customemailvarchar30 顧客郵箱 customaddressvarchar60 顧客地址 customtelevarchar15 顧客聯(lián)系號(hào)碼 表 3 訂單表(ordera) 字段名字段類型長度 null 說明備注 orderidint 否訂單編號(hào)主鍵 ordercountint 否訂購的商品的數(shù)量 orderstatusint 否訂單的狀態(tài)存于購物車為 1,已 付款為 2,已發(fā)貨為 3 orderdatedatetime 訂貨日期默認(rèn)為編輯日期 ordersolvedatedatetime 送貨日期默認(rèn)為編輯日期 ordertozipint 聯(lián)系人的地區(qū)郵編 ordertotelevarchar15 聯(lián)系人號(hào)碼 ordertonamevarchar20 聯(lián)系人姓名 ordertoaddressvarchar30 聯(lián)系人地址 表 4 評價(jià)表(say) 字段名字段類型長度 null 說明備注 sayidint 否評價(jià)編號(hào)主鍵 saycontentvarchar200 否評價(jià)內(nèi)容 saytimedatetime 否評價(jià)日期默認(rèn)為編輯日期 sayyesint 否支持?jǐn)?shù)目默認(rèn)為 0 saynoint 否否定數(shù)目默認(rèn)為 0 saymoodint 讀書心情 sayplaceint 讀書地點(diǎn) 表 5 圖書類型表(catagory) bookindatedatetime 否圖書入庫日期默認(rèn)為編輯日期 bookoutdatedatetime 圖書出庫日期默認(rèn)為編輯日期 bookstatusint 圖書的狀態(tài)用于管理員設(shè)置 首頁顯示的圖書 字段名字段類型長度 null 說明備注 catagoryidint 否圖書種類編號(hào)主鍵 catagorynamevarchar20 否圖書種類名稱 catagorydetailvarchar200 圖書種類的描述 14 表 6 權(quán)限表(purview) 字段名字段類型長度 null 說明備注 purviewidint 否權(quán)限編號(hào)主鍵 purviewnamevarchar10 否權(quán)限名稱 puriviewdetailvarchar50 權(quán)限描述 表 7 分配權(quán)限表(distribute) 字段名字段類型長度 null 說明備注 distributeidint 否分配表的編號(hào)主鍵 表 8 模塊表(block) 字段名字段類型長度 null 說明備注 blockidint 否模塊編號(hào)主鍵 blocknamevarchar20 否模塊名稱 blockdetailvarchar100 模塊描述 4.34.3 界面設(shè)計(jì)界面設(shè)計(jì) .1 登錄模塊登錄模塊 登錄模塊主要對管理員登錄信息的驗(yàn)證,查詢管理員表確認(rèn)賬號(hào)和密碼無誤后即可登 錄,登錄后對相應(yīng)的模塊可以進(jìn)行管理,例如書籍管理、書籍類別管理、 訂單管理、會(huì)員 管理、系統(tǒng)管理等。 .2 書籍管理書籍管理 管理員登陸系統(tǒng)之后,點(diǎn)擊書籍管理,再點(diǎn)擊書籍列表就可以看到以分頁形式出現(xiàn)的 書籍表,在操作一欄中,可以對書籍進(jìn)行修改或刪除操作,點(diǎn)擊添加書籍即可添加新的書 籍。 添加圖書添加圖書 管理員可以增加一條書籍信息并發(fā)布。 刪除圖書刪除圖書 管理員可以點(diǎn)擊進(jìn)入書籍列表后,點(diǎn)擊刪除按鈕并確認(rèn),即可刪除書籍。 .3 訂單管理訂單管理 管理員登陸系統(tǒng)之后,點(diǎn)擊訂單管理,再點(diǎn)擊訂單列表就可以看到以分頁形式出現(xiàn)的 訂單記錄,在操作一欄中,點(diǎn)擊查看訂單內(nèi)容詳細(xì)信息,查看用戶購買的物品,管理員完 成相應(yīng)的業(yè)務(wù)操作(配送物品) ,再進(jìn)行訂單狀態(tài)的修改。 15 第第 5 5 章章 測試測試 5.15.1 測試過程測試過程 在進(jìn)行軟件測試時(shí),遇到了不少的問題,下面舉出幾個(gè)例子: 1.啟動(dòng)項(xiàng)目,訪問服務(wù)器報(bào) http400 客戶端錯(cuò)誤 解決方法:刪掉直接在工作空間復(fù)制粘貼的項(xiàng)目,必須使用 import 導(dǎo)入項(xiàng)目。 2.嚴(yán)重: ioexception while loading persisted sessions: java.io.eofexception 嚴(yán)重: exception loading sessions from persistent storage 原因:tomcat 對硬盤的 session 讀取失敗。 解決方法:將 work 下面的文件清空,主要是*.ser 文件,或者只是刪除掉 session.ser 在重新啟動(dòng) tomcat 的 webapp 的時(shí)候,禁止把 session 寫入文件。 修改 conf/context.xml 取消注釋: 3.sql 查詢語句出錯(cuò):select * from (select rownum ro,bookid, bookname, bookfunprice, bookprice, bookprep,booktime from book where rownum=? java.sql.sqlexception: ora-00936: 缺少表達(dá)式 java.sql.sqlexception: ora-01006: 賦值變量不存在 解決方法:多了一個(gè) where。認(rèn)真。 16 第 6 章 結(jié)論 經(jīng)過為期一個(gè)多星期的設(shè)計(jì),終于初步完成了老師要求的功能。因?yàn)闀r(shí)間比較緊湊, 這個(gè)網(wǎng)上書店的項(xiàng)目分作三個(gè)學(xué)期,這個(gè)學(xué)期主要是完成圖書的展示以及查詢。 這個(gè)項(xiàng)目實(shí)現(xiàn)的功能還是比較簡單,剛開始我打算用 struts+hibernate 實(shí)現(xiàn),使用 hibernate 的便利在于能夠?qū)崿F(xiàn)數(shù)據(jù)庫的反轉(zhuǎn),但是如果對它的數(shù)據(jù)持久化不了解,對配置文件中一 對多、或者多對多的關(guān)系不能靈活運(yùn)用,在界面上獲取數(shù)據(jù)的時(shí)候必定會(huì)遇到很大的麻煩。 由于培訓(xùn)過了一段時(shí)間,我在項(xiàng)目開始的前兩天,是溫習(xí)了一下 css+div,分析界面上應(yīng)該 獲取什么數(shù)據(jù),如何設(shè)計(jì) hibernate 的配置文件,又花了兩天的時(shí)間溫故知新知識(shí)點(diǎn)。到了 星期五,我的代碼部分基本實(shí)現(xiàn),用了一個(gè)最簡單的動(dòng)作,復(fù)制粘貼項(xiàng)目在工作區(qū)間,訪 問數(shù)據(jù)庫的時(shí)候就碰到了一個(gè) http400 客戶端的錯(cuò)誤,我試了好幾種方法,比如,不使用 myeclipse 自帶的 tomcat,自己配置一個(gè) tomcat6.0、jdk,又將 myeclipse6.0 換成了 8.0,在 網(wǎng)上找了些方法,還是不行,頭腦發(fā)熱,又重新用 mvc 寫,不得不說 mvc 真沒技術(shù)含量, 大片大片的代碼重復(fù),本來想寫購物車,后來,看到代碼那么不簡潔,干脆就偷懶不寫了, 省事,明年接著寫。 在整個(gè)項(xiàng)目中,學(xué)到最多的是 div+css,今年的這個(gè)界面是通過一個(gè)比較大的網(wǎng)頁整改 的,最后只留下了現(xiàn)在簡單的設(shè)計(jì), 在這個(gè)過程當(dāng)中,由于 dreamweaver 中的靜態(tài)網(wǎng)頁, 換成動(dòng)態(tài)網(wǎng)頁,在布局上有很多細(xì)節(jié)的改變,在調(diào)試布局上,真的需要不少的耐心。不過, 最后的界面還是令人滿意的。 做程序還是要經(jīng)的起折騰,其實(shí) http400 客戶端錯(cuò)誤很簡單,只需要?jiǎng)h掉直接在工作 空間復(fù)制粘貼的項(xiàng)目,必須使用 import 導(dǎo)入項(xiàng)目。但是我卻放棄了,重新來過。沒有估計(jì) 到后面帶來的困難。以后做事還是要慎重。 附錄附錄 參考文獻(xiàn)參考文獻(xiàn) 1 王行言. java 語言與面向?qū)ο蟪绦蛟O(shè)計(jì)-2 版m. 北京:清華大學(xué)出版社,2007:978-7- 302-15836-3. 17 2 張海藩. 軟件工程導(dǎo)論-5 版m. 北京:清華大學(xué)出版社,2008. 附錄附錄 源代碼源代碼 public class dbutil private preparedstatement pstmt = null; 18 private connection con = null; public dbutil() try class.forname(“com.mysql.jdbc.driver“); con=drivermanager.getconnection(“jdbc:mysql:/localhost/shoppingbook10_1“,“ root“, “root“); catch (classnotfoundexception e) e.printstacktrace(); catch (sqlexception e) e.printstacktrace(); public connection getcon() return con; public void close() if (pstmt != null) try pstmt.close(); catch (sqlexception e) e.printstacktrace(); if (con != null) try con.close(); catch (sqlexception e) e.printstacktrace(); public class bookdaoimpl implements bookdao /* * 顯示書籍 * param type * 顯示類別(熱賣,新書,降價(jià),特別推薦) * param flag * 表示是否是(熱賣,新書,降價(jià)) */ public list showbooks(int type, int flag) list all = new arraylist(); preparedstatement pstmt = null; dbutil dbutil = null; 19 resultset rs = null; string sql = null; if (type = 0) sql = “select * from tb_book“;/ 顯示所有書籍 try dbutil = new dbutil(); pstmt = dbutil.getcon().preparestatement(sql); rs = pstmt.executequery(); while (rs.next() book book = new book(); book.setbookid(rs.getint(“bookid“); book.setbookname(rs.getstring(“bookname“); book.setisbn(rs.getstring(“isbn“); book.setpages(rs.getint(“pages“); book.setauthor(rs.getstring(“author“); book.setpublisher(rs.getstring(“publisher“); book.setintroduce(rs.getstring(“introduce“); book.setprice(rs.getfloat(“price“); book.setnowprice(rs.getfloat(“nowprice“); book.setpicture(rs.getstring(“picture“); all.add(book); catch (sqlexception e) e.printstacktrace(); finally try rs.close(); pstmt.close(); dbutil.close(); catch (sqlexception e) e.printstacktrace(); else if (type = 1) / 熱賣書籍 sql = “select * from tb_book where hostbooks=?“; if (type = 2) / 新到書籍 sql = “select * from tb_book where newbooks=?“; if (type = 3) / 打折書籍 sql = “select * from tb_book where salebooks=?“; 20 if (type = 4) / 特別推薦 sql = “select * from tb_book where specialbooks=?“; try dbutil = new dbutil(); pstmt = dbutil.getcon().preparestatement(sql); pstmt.setint(1, flag); rs = pstmt.executequery(); while (rs.next() book book = new book(); book.setbookid(rs.getint(“bookid“); book.setbookname(rs.getstring(“bookname“); book.setisbn(rs.getstring(“isbn“); book.setpages(rs.getint(“pages“); book.setauthor(rs.getstring(“author“); book.setpublisher(rs.getstring(“publisher“); book.setintroduce(rs.getstring(“introduce“); book.setprice(rs.getfloat(“price“); book.setnowprice(rs.getfloat(“nowprice“); book.setpicture(rs.getstring(“picture“); all.add(book); catch (sqlexception e) e.printstacktrace(); finally try rs.close(); pstmt.close(); dbutil.close(); catch (sqlexception e) e.printstacktrace(); return all; /* * 根據(jù)書的 bookid 號(hào)來展示該書的詳細(xì)信息 * param bookid * 書籍號(hào) * return book */ public book showbookbyid(int bookid) 21 book book = new book(); preparedstatement pstmt = null; resultset rs = null; dbutil dbutil = null; string sql = “select * from tb_book where bookid=?“; try dbutil = new dbutil(); pstmt = dbutil.getcon().preparestatement(sql); pstmt.setint(1, bookid); rs = pstmt.executequery(); if (rs.next() book.setbookid(rs.getint(“bookid“); book.setbookname(rs.getstring(“bookname“); book.setintroduce(rs.getstring(“introduce“); book.setisbn(rs.getstring(“isbn“); book.setauthor(rs.getstring(“author“); book.setpages(rs.getint(“pages“); book.setpublisher(rs.getstring(“publisher“); book.setprice(rs.getfloat(“price“); book.setnowprice(rs.getfloat(“nowprice“); book.setpicture(rs.getstring(“picture“); catch (sqlexception e) e.printstacktrace(); finally try rs.close(); pstmt.close(); dbutil.close(); catch (sqlexception e) e.printstacktrace(); return book; /* * 將書本信息錄入數(shù)據(jù)庫 */ public boolean addbook(book book) boolean flag = false; preparedstatement pstmt = null; dbutil dbutil = null; string sql=“insert into tb_book values(null,?,?,?,?,?,?,?,?,?,?,? 22 null,?,?,?,?)“; try dbutil = new dbutil(); pstmt = dbutil.getcon().preparestatement(sql); pstmt.setint(1, book.getsupertypeid(); pstmt.setint(2, book.getsubtypeid(); pstmt.setstring(3, book.getbookname(); pstmt.setstring(4, book.getisbn(); pstmt.setstring(5, book.getintroduce(); pstmt.setfloat(6, book.getprice(); pstmt.setfloat(7, book.getnowprice(); pstmt.setstring(8, book.getpicture(); pstmt.setint(9, book.getpages(); pstmt.setstring(10, book.getpublisher(); pstmt.setstring(11, book.getauthor(); pstmt.setint(12, book.getnewbooks(); pstmt.setint(13, book.getsalebooks(); pstmt.setint(14, book.gethostbooks(); pstmt.setint(15, book.getbooknum(); int i = pstmt.executeupdate(); if (i != 0) return flag;/ 插入書籍成功 catch (sqlexception e) e.printstacktrace(); return flag; /* * 分頁顯示書籍 * param type * 按要求顯示相應(yīng)的書籍 * param currentpage * 顯示出來的當(dāng)前頁碼 * param pagesize * 每頁顯示數(shù)目 * return page */ public page dopage(int type, int currentpage, int pagesize) page page = new page(); system.out.println(“pagetype=“ + type); int totalnum = showbooks(type, 1).size(); system.out.println(“totalnum“ + totalnum); list pagelist = new arraylist(); 23 preparedstatement pstmt = null; resultset rs = null; dbutil dbutil = null; string sql = null; if (type = 0) / 顯示所有書籍 sql = “select * from tb_book limit “ + currentpage + “,“ + pagesize; if (type = 1) / 熱賣書籍 sql = “select * from tb_book where hostbooks=1 limit “ + currentpage + “,“ + pagesize; if (type = 2) / 新到書籍 sql = “select * from tb_book where newbooks=1 limit “ + currentpage + “,“ + pagesize; if (type = 3) / 打折書籍 sql = “select * from tb_book where salebooks=1 limit “ + currentpage + “,“ + pagesize; if (type = 4) / 特別推薦 sql = “select * from tb_book where specialbooks=1 limit “ + currentpage + “,“ + pagesize; system.out.println(“sql=“ + sql); try dbutil = new dbutil(); pstmt = dbutil.getcon().preparestatement(sql); rs = pstmt.executequery(); while (rs.next() book book = new book(); book.setbookid(rs.getint(“bookid“); book.setbookname(rs.getstring(“bookname“); book.setpicture(rs.getstring(“picture“); book.setprice(rs.getfloat(“price“); book.setnowprice(rs.getfloat(“nowprice“); pagelist.add(book); system.out.println(“pagelist=“ + pagelist.size(); catch (sqlexception e) e.printstacktrace(); finally try rs.close(); pstmt.close(); 24 dbutil.close(); catch (sqlexception e) e.printstacktrace(); page.setpagelist(pagelist); page.settotalnum(totalnum); return page; /* * 根據(jù)用戶輸入的關(guān)鍵字搜索相關(guān)書籍 * param keywords * 用戶輸入的關(guān)鍵字 */ public list searchbooks(string keywords) list searchlist = new arraylist(); preparedstatement pstmt = null; resultset rs = null; dbutil dbutil = null; string sql = “select * from tb_book where bookname like %“ + keywords + “%“; try dbutil = new dbutil(); pstmt = dbutil.getcon().preparestatement(sql); rs = pstmt.executequery(); if (rs.next() / 有相關(guān)書籍 while (rs.next() book book = new book(); book.setbookname(rs.getstring(“bookname“); book.setpicture(rs.getstring(“picture“); searchlist.add(book); else / 沒有找到相關(guān)書籍 throw new norelativebooksexception(“沒有搜索到你想找的相關(guān)書籍! !“); catch (sqlexception e) e.printstacktrace(); return searchlist; 25 /* * 分頁顯示書籍 * param currentpage * 顯示出來的當(dāng)前頁碼 * param pagesize * 每頁顯示數(shù)目 * return page */ public page do

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論