




已閱讀5頁,還剩32頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1 目目 錄錄 第第 1 章章 緒論緒論2 1.1 開發(fā)背景.2 1.2 網(wǎng)上書店設計概覽.2 第第 2 章章 系統(tǒng)分析系統(tǒng)分析3 2.1 可行性分析.3 2.2 需求分析.3 2.3 系統(tǒng)的運行環(huán)境和開發(fā)平臺.3 2.3.1 硬件設備及操作系統(tǒng).3 2.3.2 系統(tǒng)開發(fā)平臺.4 第第 3 章章 總體分析總體分析5 3.1 系統(tǒng)結構圖.5 3.2 系統(tǒng)模塊圖.5 3.3 系統(tǒng)主要處理流程.5 第第 4 章章 詳細設計詳細設計7 4.1 uml設計7 4.1.1用例圖7 4.1.2 子模塊序列圖.7 4.2 數(shù)據(jù)庫設計.11 4.2.1 e-r圖.11 4.2.2關系圖11 4.2.3 物理結構.12 4.3 界面設計.14 第第 5 章章 測試測試16 5.1 測試過程.16 第第 6 章章 結論結論17 附錄附錄 參考文獻參考文獻.18 附錄附錄 源代碼源代碼.19 2 第第 1 1 章章 緒論緒論 1.11.1 開發(fā)背景開發(fā)背景 隨著 internet 國際互聯(lián)網(wǎng)的發(fā)展,越來越多的企業(yè)開始建造自己的網(wǎng)站?;?internet 的信息服務,商務服務已經(jīng)成為現(xiàn)在企業(yè)的一項不可缺少的內(nèi)容。很多企業(yè)都已 經(jīng)不滿足于建立一個簡單的,僅僅能夠發(fā)布信息的靜態(tài)網(wǎng)站?,F(xiàn)代企業(yè)需要的是一個功能 強大的,能夠提供完善的電子商務服務的動態(tài)商務網(wǎng)站。同時人們的生活方式也在隨著發(fā) 生改變,人們對于互聯(lián)網(wǎng)技術的要求已不單單是瀏覽一下網(wǎng)頁,收發(fā)電子郵件,日益忙碌 的人們開始追求足不出戶的利用互聯(lián)網(wǎng)這個強大的平臺來實現(xiàn)網(wǎng)上購物。對于企業(yè)來說, 無論是企業(yè)之間還是企業(yè)與客戶之間的交易,如果能夠?qū)崿F(xiàn)網(wǎng)上交易將大大提高交易速度 節(jié)約交易成本。近幾年,隨著網(wǎng)絡數(shù)據(jù)庫技術的進一步發(fā)展,使得這一設想逐漸成為了現(xiàn) 實?;?b/s 的系統(tǒng)開發(fā)開始已經(jīng)是當今的總趨勢。 jsp 是十分流行的一種技術,它主要是運行在開發(fā)服務器端的腳本程序和動態(tài)生成網(wǎng) 站的內(nèi)容。jsp 技術有 j2ee 平臺支持,發(fā)展前途不可限量??偹苤?,j2ee 平臺提供了 java 企業(yè)應用編程接口,為企業(yè)計算以及電子商務應用系統(tǒng)提供了有關的技術和強大的類 庫支持,j2ee 平臺包含十幾種技術,jsp 技術正是其中的一種核心的技術。 1.21.2 網(wǎng)上書店設計概覽網(wǎng)上書店設計概覽 按照用戶類型區(qū)分的話,通常電子商務網(wǎng)站可以分為會員模塊、后臺管理模塊。電子 商務網(wǎng)站是以商務活動為中心進行的。書店的定義不外乎展示圖書的信息,與其他銷售通 路并無不同,從這樣的角度來看,網(wǎng)絡書店的基本功能也是如此,不過是出版品另一種形 態(tài)的宣傳或者銷售通路,甚至傳統(tǒng)店面的輔助。網(wǎng)絡書店所能與傳統(tǒng)書店服務的真正不同 之處在于打破了銷售或出版的界限。以目前的網(wǎng)絡書店形態(tài)而言,最后銷售的仍然是一本 本印制完成的出版品,消費者從網(wǎng)站上得到的,只是這些出版物的信息,而不是“書” ,也 就是說,網(wǎng)絡書店本身只是一個出版物與消費者的中介,而不是被消費的主體。 3 第第 2 2 章章 系統(tǒng)分析系統(tǒng)分析 2.12.1 可行性分析可行性分析 可行性分析也稱為可行性研究,是在系統(tǒng)調(diào)查的基礎上,針對新系統(tǒng)的開發(fā)是否具備 必要性和可能性,對新系統(tǒng)的開發(fā)從技術、經(jīng)濟、社會的方面進行分析和研究,以避免投 資失誤,保證新系統(tǒng)的開發(fā)成功。可行性研究的目的就是用最小的代價在盡可能短的時間 確定問題是否能夠解決。該系統(tǒng)的可行性分析包括了以下幾個方面的內(nèi)容。 (1)經(jīng)濟可行性:主要是對項目的經(jīng)濟效益進行評價,由于系統(tǒng)所使用的服務器是免 費的,可以從網(wǎng)上免費下載,用的免費的數(shù)據(jù)庫管理軟件,本系統(tǒng)開發(fā)經(jīng)費對于作者在經(jīng) 濟上是可以接收的。所以本系統(tǒng)在經(jīng)濟上是可行的。 (2)技術可行性:技術上的可行性分析主要是分析技術條件是否順利完成開發(fā)工作, 軟硬件是否滿足開發(fā)者的需要等。該管理系統(tǒng)采用當前新興的 brower/server 模式開發(fā)。 三層的 brower/server 體系結構具有很多傳統(tǒng)的 client/server 體系結構不具備的優(yōu)點, 它把應用系統(tǒng)帶入了一個嶄新的發(fā)展時代。數(shù)據(jù)庫服務器選用 mysql,能夠處理我們這個 小型的網(wǎng)站的數(shù)據(jù)。它的靈活易用性為數(shù)據(jù)庫編程提供了很好的條件。因此,系統(tǒng)的軟件 開發(fā)平臺已成熟可行。硬件方面,科技飛速發(fā)展的今天,硬件更新速度越來越快,容量越 來越大,可靠性越來越高,價格越來越低,其硬件平臺完全能滿足此系統(tǒng)的需要。 綜上所述,此系統(tǒng)開發(fā)目標已明確,在技術和經(jīng)濟等方面都可行,并且投入少、見效 快。因此系統(tǒng)的開發(fā)是完全可行的。 2.22.2 需求分析需求分析 為了準確的確定目標系統(tǒng)必須做什么,了解用戶的明確需求,進一步實現(xiàn)子系統(tǒng)的功 能。 功能描述: 1.展示圖書:展示的方式有多種,可以按圖書分類、按銷售排行榜、按上架時間等, 有層次的展示圖書,提高用戶的購買興趣。對于某本圖書,除顯示圖書信息以外, 還可以附加書評、插圖、試讀部分章節(jié),并進行相關圖書的推薦。 2.圖書查詢:根據(jù)多種條件來查詢,比如圖書名,作者名,出版社名,出版年月。 能進行模糊匹配,包含關鍵字的圖書都能查到。 3.購書:只有注冊用戶才能購書。為用戶提供購物車,購物車內(nèi)圖書的數(shù)量可以修 改,也可以刪除購物車里已有的圖書。最終通過訂單確認,附加用戶的郵寄地址, 生成有效的訂單,訂單一旦生成,用戶無權限再修改。 4.評價圖書:只有注冊用戶才能對圖書進行評價,能夠?qū)ψ约旱脑u價進行增刪改。 5.后臺管理: 用戶管理:為用戶提供注冊和登錄服務。不同角色的用戶擁有不同的訪問權 限。比如登錄用戶能修改自己的個人信息,查詢訂單歷史記錄,訂單的狀態(tài)。 而管理員則能進行后臺管理。 圖書信息管理:錄入、修改和刪除圖書信息。 庫存管理:每天都集中進行一次入庫和出庫的操作。 銷售管理:包括售書、銷售明細、銷售排行、銷售報表。 訂單管理:管理客戶提交的訂單,客戶“已確認”的訂單可修改狀態(tài)為“正 在配貨” , “正在配貨”的訂單可修改狀態(tài)為“缺貨”或“已發(fā)貨” 。 2.32.3 系統(tǒng)的運行環(huán)境和開發(fā)平臺系統(tǒng)的運行環(huán)境和開發(fā)平臺 .1 硬件設備及操作系統(tǒng)硬件設備及操作系統(tǒng) 4 服務器:intel celeron(或與此相當?shù)?cpu)以上配置的高性能 pc 機,有網(wǎng)絡接口卡 (nic),內(nèi)存應在 512m 以上,硬盤在 80g 以上。確認該計算機已經(jīng)安裝了 web 服務器軟件 tomcat5.0,數(shù)據(jù)庫軟件 mysql5.2。 操作系統(tǒng):windows xp/2000 客戶端:intel celeron2.53(或與此相當?shù)?cpu)以上配置的 pc 機,有網(wǎng)絡接口卡 (nic),內(nèi)存應在 512m 以上,硬盤在 10g 以上,windowsxp/2000 操作系統(tǒng),安裝 web 瀏 覽器。 網(wǎng)絡:服務器和客戶端應有網(wǎng)絡連通,配置 tcp/ip 協(xié)議。 .2 系統(tǒng)開發(fā)平臺系統(tǒng)開發(fā)平臺 電腦配置:cpu:intel celeron2.53 內(nèi)存:ddr 512m 硬盤:80g 操作系統(tǒng):microsoft windows xp 中文版 開發(fā)環(huán)境:myeclipse6.0 web 服務平臺:tomcat5.0 數(shù)據(jù)庫:mysql5.2 5 第第 3 3 章章 總體分析總體分析 3.13.1 系統(tǒng)結構圖系統(tǒng)結構圖 經(jīng)過需求分析階段的工作,系統(tǒng)必須“做什么”已經(jīng)清楚了,總體設計階段將站在全 局高度上,通過成本、可行性方案的比較,選擇最佳的軟件結構,從而用較低成本開發(fā)出 較高質(zhì)量的軟件系統(tǒng)。 系統(tǒng)結構圖采用三層結構模型,它的工作原理如圖 3.1 所示。 用戶界面層 業(yè)務處理層數(shù)據(jù)存儲層 數(shù)據(jù)庫 圖 3.1 三層結構原理圖 采用三層構架以后,用戶界面層通過統(tǒng)一的接口向業(yè)務層發(fā)送請求,業(yè)務層按自己的 邏輯規(guī)則將請求處理之后進行數(shù)據(jù)庫操作,然后將數(shù)據(jù)庫返回的數(shù)據(jù)封裝成類的形式返回 給用戶界面層。這樣用戶界面層甚至可以不知道數(shù)據(jù)庫的結構,它只要維護與業(yè)務層之間 的接口即可。 3.23.2 系統(tǒng)模塊圖系統(tǒng)模塊圖 根據(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)上書店 書店客戶 管理員 注冊 用戶管理 庫存管理 圖書信息管理 瀏覽圖書 修改個人信息 選購圖書 評價圖書 銷售管理 訂單管理 評價管理 6 圖 3.3 系統(tǒng)流程圖 7 第第 4 4 章章 詳細設計詳細設計 通過系統(tǒng)分析,對網(wǎng)站的建設有了整體的認識,詳細設計這一塊主要是對各個功能細 節(jié)的處理和設計,包括 uml 建模中的系統(tǒng)用例,類圖,以及各個子模塊的順序圖,數(shù)據(jù)庫 詳細設計中的實體 e-r 圖,物理結構的設計,以及網(wǎng)站的形象設計。這一塊結束后,對整 個網(wǎng)站實現(xiàn)的內(nèi)容就有了清楚的認識。 4.14.1 umluml 設計設計 .1 用例圖用例圖 網(wǎng)上書店的用例圖如圖 4.1 所示。 游客 會員 管理員 系系統(tǒng)統(tǒng) 瀏覽圖書 瀏覽/搜索圖書 管理購物車 管理帳號 評價圖書 管理圖書 訂單管理 注冊 登錄 信息修改 查看訂單 用戶管理 庫存管理 銷售管理 評價管理 * * * * * * * * * * * * * * * * * * * * * * * 圖 4.1 系統(tǒng)用例圖 .2 子模塊序列圖子模塊序列圖 1.會員下訂單 該用例是客戶端下在客戶登錄后可以將瀏覽選中的圖書放入購物車,根據(jù)需要選擇圖 書并下訂單,該用例的流程如下: (1)用戶指定相應的圖書種類進行搜索,得到相應的圖書信息; (2)選中自己需要的圖書并選擇其定購的數(shù)量放入購物車; (3)提交下訂單請求,系統(tǒng)檢查用戶是否登錄,若用戶未登錄轉(4),否則返回個人 信息由用戶確認,轉(5); (4)用戶登錄系統(tǒng),重新進入購物車頁面,轉(3); (5)顧客確認自己的信息后,由系統(tǒng)數(shù)據(jù)庫記錄訂單信息更新訂單表; (6)數(shù)據(jù)庫更新成功后,返回顧客下訂單成功的消息。 8 時序圖如圖 4.2 所示。 顧客 系統(tǒng)圖書表 下訂單 訂單 2.返回登錄成功界面 5.返回搜索到的信息 6.顯示搜索到的信息 11.返回確認個人信息界面 14.返回添加成功消息 15.顯示訂單信息 1.登錄系統(tǒng) 3.提交搜索的圖書的信息 4.查詢圖書表 7.選擇圖書及數(shù)量放入購物車 10.提交下訂單請求 12.確認個人信息 13.更新訂單表 購物車 8.更新購物車 9.返回更新之后的購物車界面 圖4.2 下訂單時序圖 2.會員評價 該用例是客戶可以對圖書的使用、性價比等進行評價,該用例執(zhí)行的流程如下: (1)用戶提交評價的請求,系統(tǒng)檢查用戶是否登錄本系統(tǒng),若登錄,由系統(tǒng)返回評 價界面,轉(3),否則,進入提示登錄頁面,轉(2); (2)用戶登錄系統(tǒng),轉(1); (3)用戶填寫并提交評價信息; (4)由系統(tǒng)更新數(shù)據(jù)庫中的評價信息表; (5)數(shù)據(jù)庫返回數(shù)據(jù)添加成功的消息,系統(tǒng)將評價信息返回給顧客。 時序圖如圖4.3 所示。 9 顧客 系統(tǒng)評價表 2.確認是否登錄 5.更新成功信息 6.顯示圖書的評價 圖書評價 1.提交評價請求 3.確認登錄 4.更新評價 圖 4.3 會員評價時序圖 3.管理員修改圖書 該用例是管理員可以根據(jù)圖書信息的變動情況可以修改圖書的相關信息,該用例的執(zhí)行流 程如下: (1)管理員登錄系統(tǒng)后,提交要搜索的圖書信息,系統(tǒng)搜索數(shù)據(jù)庫中的圖書表,向管 理員返回符合要求的圖書信息; (2)管理員選擇要修改的圖書,向系統(tǒng)提交修改請求,系統(tǒng)返回修改圖書信息的頁 面; (3)管理員修改圖書信息,并提交給系統(tǒng)處理; (4)系統(tǒng)更新數(shù)據(jù)庫中圖書表的信息,并返回修改成功的頁面。 時序圖4.3 所示。 10 管理員 系統(tǒng) 管理員修改商品 圖書表 1.提交要搜索的圖書信息 2.搜索圖書表信息 3.返回已經(jīng)搜索到的信息 4.顯示滿足記錄 5.提交修改申請 6.返回修改界面 7.提交修改信息 8.更新數(shù)據(jù)庫 9.返回數(shù)據(jù)修改成功信息 10.返回修改成功信息 圖4.3 管理員修改圖書時序圖 .3 類圖類圖 如圖 4.4 類圖 user,purview,distribute 為基礎類,userdao 為接口,聲明了訪問數(shù)據(jù)庫的所有方法, userdaoimpl 實現(xiàn)了 userdao,為 userdao 里面的方法書寫了具體的實現(xiàn)。userservice 也是 接口,提供了實現(xiàn)業(yè)務的方法,userserviceimpl 實現(xiàn)了 userservice,為 userservice 書寫了 具體的實現(xiàn)。loginframe 類建立登錄的界面,registerframe 類建立注冊界面,在 loginframe 面板上點擊“登錄”按鈕進入的都是為普通用戶注冊。userframe 是用戶登錄 進去的界面。manageblock 是用戶管理員分配權限。 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ù)庫設計 .1 e-re-r 圖圖 e-r 圖表示了實體之間的聯(lián)系,每個顧客可以訂購 n 本圖書,1 本圖書也可以被 n 個顧 客訂購,所以顧客與圖書之間的是多對多的聯(lián)系。每個顧客可以對 n 本書進行評價,一本 圖書對應 n 個評價,因此,顧客與圖書之間又有了“評價”這個聯(lián)系表。多本圖書對應一 個類型,圖書與圖書類型之間是 n 對 1 的關系。e-r 圖如圖 4.4。 圖 4.4 e-r 圖 .2關系圖關系圖 顧客 圖書 評價 圖書類型 訂貨 屬于 n n n n n n 1 權限 模塊 1 n 分配權限 屬于 n 12 如圖 4.5 圖 4.5 關系圖 .3 物理結構物理結構 在服務器上創(chuàng)建一個名為 book 的數(shù)據(jù)庫。包括以下表: 表 1 圖書表(book) 字段名字段類型長度 null 說明備注 bookidint 否圖書編號主鍵 booknamevarchar30 否圖書名稱 bookauthorvarchar20 否圖書作者 bookpubdatedatetime 否圖書出版日期 bookpublishervarchar30 圖書出版社 bookpicvarchar20 圖書封面 bookoldpricefloat5 圖書原價 booknewpricefloat5 否圖書現(xiàn)價 bookdetailvarchar200 圖書詳情 13 表 2 顧客表(custom) 字段名字段類型長度 null 說明備注 customidint 否顧客編號主鍵 customnamevarchar10 否顧客帳號 custompassvarchar20 否顧客密碼 customemailvarchar30 顧客郵箱 customaddressvarchar60 顧客地址 customtelevarchar15 顧客聯(lián)系號碼 表 3 訂單表(ordera) 字段名字段類型長度 null 說明備注 orderidint 否訂單編號主鍵 ordercountint 否訂購的商品的數(shù)量 orderstatusint 否訂單的狀態(tài)存于購物車為 1,已 付款為 2,已發(fā)貨為 3 orderdatedatetime 訂貨日期默認為編輯日期 ordersolvedatedatetime 送貨日期默認為編輯日期 ordertozipint 聯(lián)系人的地區(qū)郵編 ordertotelevarchar15 聯(lián)系人號碼 ordertonamevarchar20 聯(lián)系人姓名 ordertoaddressvarchar30 聯(lián)系人地址 表 4 評價表(say) 字段名字段類型長度 null 說明備注 sayidint 否評價編號主鍵 saycontentvarchar200 否評價內(nèi)容 saytimedatetime 否評價日期默認為編輯日期 sayyesint 否支持數(shù)目默認為 0 saynoint 否否定數(shù)目默認為 0 saymoodint 讀書心情 sayplaceint 讀書地點 表 5 圖書類型表(catagory) bookindatedatetime 否圖書入庫日期默認為編輯日期 bookoutdatedatetime 圖書出庫日期默認為編輯日期 bookstatusint 圖書的狀態(tài)用于管理員設置 首頁顯示的圖書 字段名字段類型長度 null 說明備注 catagoryidint 否圖書種類編號主鍵 catagorynamevarchar20 否圖書種類名稱 catagorydetailvarchar200 圖書種類的描述 14 表 6 權限表(purview) 字段名字段類型長度 null 說明備注 purviewidint 否權限編號主鍵 purviewnamevarchar10 否權限名稱 puriviewdetailvarchar50 權限描述 表 7 分配權限表(distribute) 字段名字段類型長度 null 說明備注 distributeidint 否分配表的編號主鍵 表 8 模塊表(block) 字段名字段類型長度 null 說明備注 blockidint 否模塊編號主鍵 blocknamevarchar20 否模塊名稱 blockdetailvarchar100 模塊描述 4.34.3 界面設計界面設計 .1 登錄模塊登錄模塊 登錄模塊主要對管理員登錄信息的驗證,查詢管理員表確認賬號和密碼無誤后即可登 錄,登錄后對相應的模塊可以進行管理,例如書籍管理、書籍類別管理、 訂單管理、會員 管理、系統(tǒng)管理等。 .2 書籍管理書籍管理 管理員登陸系統(tǒng)之后,點擊書籍管理,再點擊書籍列表就可以看到以分頁形式出現(xiàn)的 書籍表,在操作一欄中,可以對書籍進行修改或刪除操作,點擊添加書籍即可添加新的書 籍。 添加圖書添加圖書 管理員可以增加一條書籍信息并發(fā)布。 刪除圖書刪除圖書 管理員可以點擊進入書籍列表后,點擊刪除按鈕并確認,即可刪除書籍。 .3 訂單管理訂單管理 管理員登陸系統(tǒng)之后,點擊訂單管理,再點擊訂單列表就可以看到以分頁形式出現(xiàn)的 訂單記錄,在操作一欄中,點擊查看訂單內(nèi)容詳細信息,查看用戶購買的物品,管理員完 成相應的業(yè)務操作(配送物品) ,再進行訂單狀態(tài)的修改。 15 第第 5 5 章章 測試測試 5.15.1 測試過程測試過程 在進行軟件測試時,遇到了不少的問題,下面舉出幾個例子: 1.啟動項目,訪問服務器報 http400 客戶端錯誤 解決方法:刪掉直接在工作空間復制粘貼的項目,必須使用 import 導入項目。 2.嚴重: ioexception while loading persisted sessions: java.io.eofexception 嚴重: exception loading sessions from persistent storage 原因:tomcat 對硬盤的 session 讀取失敗。 解決方法:將 work 下面的文件清空,主要是*.ser 文件,或者只是刪除掉 session.ser 在重新啟動 tomcat 的 webapp 的時候,禁止把 session 寫入文件。 修改 conf/context.xml 取消注釋: 3.sql 查詢語句出錯:select * from (select rownum ro,bookid, bookname, bookfunprice, bookprice, bookprep,booktime from book where rownum=? java.sql.sqlexception: ora-00936: 缺少表達式 java.sql.sqlexception: ora-01006: 賦值變量不存在 解決方法:多了一個 where。認真。 16 第 6 章 結論 經(jīng)過為期一個多星期的設計,終于初步完成了老師要求的功能。因為時間比較緊湊, 這個網(wǎng)上書店的項目分作三個學期,這個學期主要是完成圖書的展示以及查詢。 這個項目實現(xiàn)的功能還是比較簡單,剛開始我打算用 struts+hibernate 實現(xiàn),使用 hibernate 的便利在于能夠?qū)崿F(xiàn)數(shù)據(jù)庫的反轉,但是如果對它的數(shù)據(jù)持久化不了解,對配置文件中一 對多、或者多對多的關系不能靈活運用,在界面上獲取數(shù)據(jù)的時候必定會遇到很大的麻煩。 由于培訓過了一段時間,我在項目開始的前兩天,是溫習了一下 css+div,分析界面上應該 獲取什么數(shù)據(jù),如何設計 hibernate 的配置文件,又花了兩天的時間溫故知新知識點。到了 星期五,我的代碼部分基本實現(xiàn),用了一個最簡單的動作,復制粘貼項目在工作區(qū)間,訪 問數(shù)據(jù)庫的時候就碰到了一個 http400 客戶端的錯誤,我試了好幾種方法,比如,不使用 myeclipse 自帶的 tomcat,自己配置一個 tomcat6.0、jdk,又將 myeclipse6.0 換成了 8.0,在 網(wǎng)上找了些方法,還是不行,頭腦發(fā)熱,又重新用 mvc 寫,不得不說 mvc 真沒技術含量, 大片大片的代碼重復,本來想寫購物車,后來,看到代碼那么不簡潔,干脆就偷懶不寫了, 省事,明年接著寫。 在整個項目中,學到最多的是 div+css,今年的這個界面是通過一個比較大的網(wǎng)頁整改 的,最后只留下了現(xiàn)在簡單的設計, 在這個過程當中,由于 dreamweaver 中的靜態(tài)網(wǎng)頁, 換成動態(tài)網(wǎng)頁,在布局上有很多細節(jié)的改變,在調(diào)試布局上,真的需要不少的耐心。不過, 最后的界面還是令人滿意的。 做程序還是要經(jīng)的起折騰,其實 http400 客戶端錯誤很簡單,只需要刪掉直接在工作 空間復制粘貼的項目,必須使用 import 導入項目。但是我卻放棄了,重新來過。沒有估計 到后面帶來的困難。以后做事還是要慎重。 附錄附錄 參考文獻參考文獻 1 王行言. java 語言與面向?qū)ο蟪绦蛟O計-2 版m. 北京:清華大學出版社,2007:978-7- 302-15836-3. 17 2 張海藩. 軟件工程導論-5 版m. 北京:清華大學出版社,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 * 顯示類別(熱賣,新書,降價,特別推薦) * param flag * 表示是否是(熱賣,新書,降價) */ 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 號來展示該書的詳細信息 * param bookid * 書籍號 * 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 * 按要求顯示相應的書籍 * param currentpage * 顯示出來的當前頁碼 * 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ù)用戶輸入的關鍵字搜索相關書籍 * param keywords * 用戶輸入的關鍵字 */ 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() / 有相關書籍 while (rs.next() book book = new book(); book.setbookname(rs.getstring(“bookname“); book.setpicture(rs.getstring(“picture“); searchlist.add(book); else / 沒有找到相關書籍 throw new norelativebooksexception(“沒有搜索到你想找的相關書籍! !“); catch (sqlexception e) e.printstacktrace(); return searchlist; 25 /* * 分頁顯示書籍 * param currentpage * 顯示出來的當前頁碼 * param pagesize * 每頁顯示數(shù)目 * return page */ public page do
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 股東公司投資退出補充協(xié)議范本
- 文化產(chǎn)業(yè)股權質(zhì)押擔保協(xié)議書
- 高端家庭保姆服務合同模板
- 股權贈與協(xié)議書-跨境投資股權贈與與稅務籌劃合同
- 祠堂公園改造方案
- 專題11 反比例函數(shù)-中考一輪復習收官測試卷(含答案)
- 林地承包分期方案
- 外出防水補漏方案
- 活動費用預算方案模板
- 水利細部結構結算方案
- 國家開放大學??啤稒C械制圖》形考任務1-4試題及答案
- DB34∕T 4004-2021 埋地聚乙烯燃氣管道定期檢驗規(guī)則
- 裝修代賣合同范本
- 高大模板安全施工施工方法及工藝要求
- 九年級上冊英語書譯林版單詞表
- 車庫業(yè)主與租賃者安裝充電樁協(xié)議書
- 臺球廳桌球俱樂部創(chuàng)業(yè)計劃書課件模板
- 醫(yī)務人員技術檔案
- 人工智能創(chuàng)業(yè)項目計劃書
- 2023年鐵嶺市三支一扶筆試真題
- 肺結節(jié)手術的術后護理措施
評論
0/150
提交評論