網上書店系統(tǒng)總結報告
項目小組:計應1003班第五小組組員:李圣杭黃守多許明生
以下內容:李圣杭
1、開發(fā)結果
軟件產品描述
例如:
交付的軟件產品名稱:網上書店系統(tǒng)英文縮成:book
版本標識:Version1.0
子系統(tǒng):前臺購書,后臺管理。軟件系統(tǒng)模塊清單:1、用戶注冊/登陸2、用戶信息修改3、查看商品詳情4、實現購物5、查看購物車6、圖書管理7、訂單管理8、用戶管理文檔清單:
《項目開發(fā)計劃書》,《需求分析報告》,《概要設計報告》,《詳細設計報告》,《測試分析報告》。
2、開發(fā)工作評價
對項目開發(fā)過程的評價
總的來說開發(fā)的過程還可以,但還是有點不盡如人意。
第一、計劃不周全,對于問題的想象不全面,導致了在開發(fā)過程中出現了各種各樣的問題,例如在頁面的開發(fā)設計時,沒考慮到與數據庫的相對應,所以在各方面都出現了嚴重的問題。
第二、小組不配合,遇到一些簡單的問題自己一個根本就解決不了,導致了開發(fā)的進度慢了好多。
以下內容:黃守多制作3、對技術方法的評價
本次項目開發(fā)中運用的技術就是jsp,通過本次項目,更加熟練地掌握了對于jsp的軟件應用。
對產品質量的評價總體的來說本項目的系統(tǒng)功能基本上算是齊全了,但還是存在著一些小細節(jié)方面的問題
以下內容:許明生制作4、技術積累與經驗總結
技術積累:大量應用到了表單數據的提交于獲取,熟練地掌握了request.getParameter(Stringname);方法對數據的提交與保存。還有就是對于頁面之間的鏈接以及利用session方法對商品的保存于提取。
經驗總結:增加了項目開發(fā)的經驗,對于團隊之間的團結與合作,深入體會到了在團隊開發(fā)過程中每個隊員的重要性,以及團隊開發(fā)之間的統(tǒng)一性。
擴展閱讀:網上書店系統(tǒng)畢業(yè)設計報告
201*屆畢業(yè)生
畢業(yè)設計
題目:基于
院系名稱:xxx專業(yè)班級:xx
學生姓名:xx學號:xx指導教師:xx教師職稱:講師
年月日
web的網絡書店系統(tǒng)的開發(fā)與設計
目次
1引言項目開發(fā)背景………………………………………………………………11.1項目選題的背景及意義…………………………………………………………………21.2國內外研究現狀和發(fā)展動態(tài)………………………………………………………………32第一章需求分析……………………………………………………………42.1用戶需求……………………………………………………………………………52.1開發(fā)需求…………………………………………………………………………………83第二章概要設計…………………………………………………………………………113.1項目主體模塊設計………………………………………………………………………113.2項目基本功能設計………………………………………………………………………143.3項目數據庫設計…………………………………………………………………………164第三章數據庫設計………………………………………………………………………174.1數據庫表設計……………………………………………………………………………175第四章詳細設計……………………………………………………………205.1開發(fā)規(guī)范…………………………………………………………………………………205.2程序設計說明……………………………………………………………………………225.3主要代碼設計……………………………………………………………………………245.4視圖設計…………………………………………………………………………………26結論……………………………………………………………………………………40致謝……………………………………………………………………………………41參考文獻………………………………………………………………………………42附錄A項目源代碼…………………………………………………………………43
1引言
1.1論文選題的背景及意義
隨著全球經濟一體化的逐步發(fā)展和深入,網絡書店已成為傳統(tǒng)書店必不可少的經營策略之一.目前,網絡書店在國際互聯網上可以實現的商務已經多樣化,可以完成從最基本的信息展示、信息發(fā)布功能到在線交易、在線客戶服務、在線網站管理功能等,可以說,傳統(tǒng)書店所具備的功能幾乎都可以在互聯網上進行電子化的高效動作。雖然傳統(tǒng)書店規(guī)模有所不同,隨著網上交易的開展,都將有力地改變企業(yè)的發(fā)展空間,會對企業(yè)的競爭力產生不可忽視的影響。這些影響主要體現在以下方面。1、改變企業(yè)競爭方式
企業(yè)上網不僅給消費者和企業(yè)提供了更多的選擇消費與開拓銷售市場的機會,而且也是提供了更加密切的信息交流場所,從而提高了企業(yè)把握市場和消費者了解市場的能力。同時企業(yè)上網擴大了企業(yè)的競爭領域,使企業(yè)從常規(guī)的廣告競爭、促銷手段等領域的競爭擴大到無形的虛擬競爭空間。2、改變企業(yè)競爭基礎
網絡書店改變了企業(yè)競爭的交易成本。網絡書店具有投入成本低、批發(fā)數量大及用戶多的優(yōu)勢。電子商務也使企業(yè)規(guī)模影響競爭力的基礎發(fā)生了改變。例如在傳統(tǒng)的銷售渠道中,大書商與小書商之間的競爭差別很大。電子商務使大書商與小書商之間規(guī)模差距的競爭變得幾乎微不足道。美國西雅圖亞馬遜公司在網上開辦了一家大型書店,提供250萬冊圖書供在線購買。只有兩個人管理的網絡書店提供的書目和服務,幾乎可以與200人管理的傳統(tǒng)書店提供的書目和服務一樣。3、改變企業(yè)的競爭模式
網絡書店的經驗表明,如果網絡書店可以為顧客提供品種齊全的圖書、折扣以及靈活的條件、可靠的安全性和友好的界面,在線購物者一般都愿意在網上進行圖書交易。、
1.2論國內外研究現狀和發(fā)展動態(tài)
國外的Web商務系統(tǒng)應用起步較早,所以應用的領域比較廣,網絡銷售已經在人們日常消費中占到一定比例,Web商務系統(tǒng)也比較成熟。人們可以以網絡這個載體,足不出戶就可以搜索、查詢到自己需要的信息、購買自己需要的商品。我國電子商務的發(fā)展起源于70年代的EDI應用,我國海關是最早引入EDI進行報關,經過幾年的完善發(fā)展目前企業(yè)可以通過上網申請報關。電子商務概念首次引入中國實在1993年,第一筆網上交易發(fā)生在1996年。
1、目前我國網上書店的主要類型有:
由國有新華書店投資建設的網絡書店。一些有實力的傳統(tǒng)書店,都會建立自己的網站,利用網絡促銷,爭取更多的市場份額。它們主要依托傳統(tǒng)的圖書大廈的圖書存儲進行網絡售書,屬于新華書店網絡或網絡的書店。
由出版社建立的網絡書店。因為網絡出版的緣故,出版社是最早觸網的,我國500多家出版社中,已建立網站的有349家,占62%。較好的出版社營銷網站建設的特點是:以出版社本社出版物為網站核心,突出特色,訪問速度快捷,信息及時更新,內容的合理編排以及完善的檢索能力,較強的交互能力。
外貿出版公司投資建設的網絡書店。這一類網絡書店立足公司主營業(yè)務,主要對海外進行圖書銷售,銷售量逐漸增加。
非出版業(yè)資本投資建設的網絡書店。如卓越網。
就目前情況而言,上述幾類的網絡書店可以分為兩大類。一類是沒有實體書店的網絡書店,以卓越網為代表,還有一類是以實體書店為支撐的。前一類書店已經逐步銷售更多的商品,在很大程度上是以圖書為主打產品,開發(fā)其它商品作為補充,如卓越網在大幅增加圖書音像品種的同時,陸續(xù)增加了數碼產品、手機、家居、健康用品和化妝品、玩具禮品、鐘表首飾、廚具、母嬰產品、小家電等等。
2、網絡書店面臨的困境
國內網絡書店的目的主要有:利用圖書銷售盈利、效仿亞馬遜提高無形資產價值、以拉廣告賺錢、緊跟電子商務潮流等,其中,前兩種占大多數。然而,實際情況是網絡書店并未達到預期的效果,有的根本沒什么訪問量,有的雖然訪問人數眾多,但成交有限、營銷平淡,同時網上廣告也并未被大商家認同。
3、網絡書店的意義
在中國,網絡書店有發(fā)展的必要,也有發(fā)展的基礎,發(fā)展網絡書店的條件也已經成熟,但是還有幾個關鍵的問題必須解決好:一是提供普通的信用卡網上支付,制定方便的銀行間結算問題;二是成立統(tǒng)一的、最權威的認證機構,從而解決安全問題;三是構建高效率的圖書配送系統(tǒng)。只有把這些問題解決好了,才能保證網絡書店的蓬勃發(fā)展。
很多人看到了書這種商品網上銷售的諸多好處:方便購買、金額小、風險小、用戶易決定,以及信息的完整性可以更好地幫助我們選擇,也提供了更多地選擇。
2第一章需求分析
2.1用戶需求
基于WEB的網絡書店系統(tǒng)主要實現網上購書,網站最終實現用戶通過訪問本網站進行選購自己喜歡的商品,然后網上下達訂單、修改訂單、結算、創(chuàng)建個人資料,修改個人資料留言等。網站運行路線為用戶通過請求一個JSP頁面,然后后臺調用處理該功能的Servlet,Servlet接著調用底層的業(yè)務層,最終服務器根據用戶請求返回用戶查詢的結果。
系統(tǒng)基本要實現用戶注冊、用戶登錄、修改資料、下達訂單、網上結算、搜索等功能。本系統(tǒng)使用方便,用戶只需輸入網址即可進入系統(tǒng)主界面瀏覽所有商品,注冊方便快捷,對使用者來說無需精通計算機知識易可操作。項目的維護者需具備JSP知識和Java基礎等知識,以備在擴充和刪減網站功能。
對功能的規(guī)定:
商品檢索:查詢數據庫(商品返回用戶輸入文本字段表)
商品基本信息
購買商品:添加購物車(商返回用戶點擊購買商品品)
商品信息(含件數)
2.2開發(fā)目標
此系統(tǒng)采用MVC架構模式,將業(yè)務層和邏輯層進行了分離,便于日后的修改與維護,維護人員只需修改部分業(yè)務即可,而且不會對系統(tǒng)其他功能產生影響。
用戶查詢商品時輸入必須輸入字符串否則查詢不到相關商品。
輸出信息:用戶注冊時如果輸入的內容不匹配,將會出現紅色顏色的字體提示。環(huán)境方面,系統(tǒng)分辨率最好為1024*768,瀏覽器為IE最佳。數據庫編碼應為UTF-8。故障處理:主要可能是tomcat配置問。導致結果:無法運行,系統(tǒng)提示錯誤。軟件方面故障:根據實際的頁面業(yè)務進行判斷。導致結果:頁面出錯,功能不完善或錯亂等。網站流程設計:
展示所有商品:Bookindex1.jsp通過點擊商品進入→購物車:shoping.jsp
若購買商品需進行登錄,若是不是會員需→進入注冊頁面:register.jspregister.jsp→然后進入登錄頁面:login.jsp→我的賬戶:userInfo.jsp→可以上傳頭像UploadImage.jsp以及進入留言頁面liuyan.jsp以及后臺管理頁面bkLogin.jsp,添加書頁面bkAdd.jsp,后臺書本信息bkShowBookInfo.jsp以及查看日志功能.
3第二章概要設計
3.1項目主體模塊
用戶否是否是管理員是管理書籍和用戶可購買享受折扣書進庫和增刪改購買存入購物車用戶的注冊考核賬戶付款存入數據庫存入
3.1.1對性能的規(guī)定
a.靈活性方面,此系統(tǒng)采用MVC架構模式,將業(yè)務層和邏輯層進行了分離,便于日后的修改與維護,維護人員只需修改部分業(yè)務即可,而且不會對系統(tǒng)其他功能產生影響。b.環(huán)境方面,系統(tǒng)分辨率最好為1024*768,瀏覽器為IE最佳。數據庫編碼應為UTF-8。3.1.2輸人輸出要求
用戶查詢商品時輸入相關信息否則檢索不到相關商品。
輸出信息:用戶注冊時如果輸入的內容不匹配,將會出現紅色顏色的字體提示。3.1.3數據管理能力要求
需管理的數據表:書表:book;用戶表:user;用戶消費信息表:userRecord表;用戶賬戶表:userAccount;庫存表:stack;
其中表中各項數據的長度一般為30.可隨實際情況進行修改。若含有URL大小一般定為100.(也可根據實際情況進行長度修改)。3.1.4故障處理要求
環(huán)境方面故障:主要可能是tomcat配置問。導致結果:無法運行,系統(tǒng)提示錯誤。軟件方面故障:根據實際的頁面業(yè)務進行判斷。導致結果:頁面出錯,功能不完善或錯亂等。
3.1.5其他專門要求
對于用戶需安全保密方面的信息采用MD5加密。3.2運行環(huán)境3.2.1設備
屏幕分辨率:最佳分辨率為1024*768;3.2.2支持軟件
支持Windows、Linux等系統(tǒng)使用。3.2.3接口服務器接口:8088數據通信協議:Http3.3接口設計3.3.1內部接口
展示所有商品:Bookindex1.jsp通過點擊商品進入→購物車:shoping.jsp
若購買商品需進行登錄,若是不是會員需→進入注冊頁面:register.jspregister.jsp→然后進入登錄頁面:login.jsp→我的賬戶:userInfo.jsp→可以上傳頭像UploadImage.jsp以及進入留言頁面liuyan.jsp以及后臺管理頁面bkLogin.jsp,添加書頁面bkAdd.jsp,后臺書本信息bkShowBookInfo.jsp以及查看日志功能.
3.4運行設計
3.4.1運行模塊組合:用戶注冊
實現功能:本頁面要實現用戶注冊信息的功能,并在客戶端進行用戶提交的基本信息的驗證,驗證成功后再提交到數據庫進行驗證。
所需用到知識:jQuery表單驗證、驗證碼的使用、圖片代替提交按鈕、層的布局與使用,數據庫連接池。用戶登錄
實現功能:主要實現用戶登錄的功能。只需進行簡單的數據驗證即可提交服務器,然后根據用戶提交的信息查詢數據庫,如果與數據庫里的信息一致方可成功登錄系統(tǒng)。所需用到知識:jQuery表單驗證、圖片代替提交按鈕、層的布局與使用,數據庫連接池。個人信息管理
實現功能:管理用戶使用本站的詳細信息。包括用戶注冊相關信息等。所用到知識:Servlet和JSP動態(tài)顯示用戶登錄信息,數據庫增刪改查功能。我的購物車
實現功能:動態(tài)顯示用戶的購物信息,統(tǒng)計用戶所購的商品信息。
所用到知識:Servlet和JSP動態(tài)顯示用戶登錄信息,數據庫增刪改查功能。個人資料管理
實現功能:供用戶修改個人詳細信息。
所用到知識:表單的詳細使用,數據庫連接池與數據庫更新功能。商品詳細信息頁面
實現功能:此頁面主要顯示用戶欲購買的商品的詳細信息。所用知識:Servlet和JSP動態(tài)顯示用戶登錄信息,數據庫查詢。3.5系統(tǒng)數據結構設計3.5.1邏輯結構設計要點數據庫名:WBS標示符:書表:book;用戶表:user;
用戶賬戶表:userAccount;留言表:liuyan;庫存表:stack;管理員表:super;3.5.2物理結構設計要點
通過MD5加密方法實現用戶信息的保密,并存儲于數據庫內。3.6系統(tǒng)出錯處理設計3.6.1出錯信息a.404請求錯誤。b.505相應錯誤。
4第三章數據庫設計
4.1數據庫表
本項目采用mysql數據庫。數據表如下:4.1圖書表
書表(book)字段名idBookNameBookAuthorBookPriceBookImageURLBookLibraryIdBookPublishBookRebateBookFileBookPagesBookTotalBookCodeBookEdition字段類型intvarcharvarcharfloat(10,2)varcharintcharfloat(10)charintintcharchar字段長度3030100301003030是否為空非是否為主鍵是否否否否否否否否否否否否否BookPublishTimedate
4.2用戶表
用戶表(user)字段名idusernamepasswordemailuserPicture字段類型intvarcharvarcharvarcharvarchar字段長度303030100是否為空是否為主鍵是否否否否
4.3書類表
書類表(BookLibrary)字段名Id字段類型int字段長度30
是否為空非是否為主鍵是否BookLibraryNamevarchar4.4用戶賬戶表
用戶賬戶表(UserAccount)字段名iduserNameBalance類型intvarchar長度30是否為空非主鍵是否否外鍵float(10,2)4.5用戶消費表
用戶消費表(ConsumRecord)字段名iduserId
ConsumTimeBuyBookName類型intIntdatevarchar長度30是否為空非主鍵是外鍵
4.6留言表
留言表(messages)
字段名iduserIdMessage
類型intintvarchar
長度6300
是否為空非
主鍵是否否
外鍵
4.7留言回復表replymessage
4.8管理員表super
5第四章詳細設計
5.1開發(fā)規(guī)范
5.1.1定義
a.包命名方法:com.jingdong.#;
(#:biz,bocodechange,controller,bo,db,fileter,listener,md5,upload,Upload.util,vo等各類包。)
b.Jsp頁面位置:所以jsp頁面均存在WEBROOT目錄下,后臺頁面放置在WEBROOT目錄下的background目錄中;
c.統(tǒng)一WebRoot各個jsp頁面均引用相對應的文件夾的資源圖片資源統(tǒng)一在一個文件夾內d.在WebRoot/WEB-INF/lib下存放需要的jar文件。commons-collections-3.2.1.jar,commons-fileupload-1.2.2.jar,commons-io-2.0.1.jar,commons-logging-1.1.1.jar,cos.jar,FileUpload.jar,filters-2.0.235.jar,jcaptcha-api-1.0.jar,
jcaptcha-2.0-alpha-1-SNAPSHOT.jar,
jcaptcha-integration-simple-servlet-2.0-alpha-1-SNAPSHOT.jar,kaptcha-2.3.2.jar,mysql.jar;
*注:1所有JSP頁面的樣式設計要與JSP頁面分離2JavaScript腳本與頁面分離
3頂部和尾部頁面只需調用即可,無需設計。(注:保持每個頁面頂部與底部的一致性)
4將自己用到的文件存在WEBROOT下的IMAGES包里,便于日后整合。5頁面名字以及包名要統(tǒng)一為上面的,便于鏈接調用以及減少后期修改時間。
6如需新增頁面或者jar文件、js或css等。可以根據實際情況增加,但是務必放于指定的位置下。
7其他需要的內容自己先定義,然后再與小組其他人員討論。
5.2程序設計說明
5.2.1程序頁面描述JSP頁面設計
注冊頁面:register.jsp用戶登錄頁面:login.jsp管理員登陸頁面:bkLogin.jsp首頁:Bookindex1.jsp展示所有商品:Bookindex1.jsp分類頁面:Bookclass.jsp高級查詢頁面:ComplexQuery.jsp錯誤頁面:fail.jsp留言頁面:liuyan.jsp
商品詳細信息頁面:product.jsp上傳圖像頁面:UploadImage.jsp賬戶信息:userInfo.jsp
管理員添加書籍頁面:bkAdd.jsp查看系統(tǒng)運行日志頁面:looklog.jsp
5.2.2程序業(yè)務描述
a.數據庫連接池:DBManager(已經建立統(tǒng)一的鏈接池,可以直接調用);
b.數據庫:數據庫名:WBS;書表:book;用戶表:user;用戶消費記錄表:userRecord表;庫存表:stack表;用戶賬戶表:userAccount表;
c.前期業(yè)務:主要實現注冊、登錄、注銷、修改密碼、驗證碼業(yè)務、訂單的提交并著手開始建立購物車業(yè)務。
中期業(yè)務:提取已提交的訂單信息、所有商品的分類、購物車的完善、個人資料提交、以及搜索功能的完善、上傳業(yè)務。
后期業(yè)務:添加購物車到商品頁面、并完成其分頁業(yè)務、MD5加密業(yè)務、監(jiān)聽和過濾業(yè)務、
后臺管理業(yè)務等。(并可以根據自己的想法提出建議再做增加)。
5.2.3功能商品檢索:查詢數據庫(商品返回用戶輸入文本字段表)
商品基本信息購買商品:添加購物車(商返回用戶點擊購買品)商品信息(含件數)
此系統(tǒng)采用MVC架構模式,將業(yè)務層和邏輯層進行了分離,便于日后的修改與維護,維護人員只需修改部分業(yè)務即可,而且不會對系統(tǒng)其他功能產生影響。
5.2.4輸人輸出要求
用戶查詢商品時必須輸入,否則查詢不到相關商品。
輸出信息:用戶注冊時如果輸入的內容不匹配,將會出現紅色顏色的。5.2.5接口服務器端口:8080。數據通信協議:Http。
數據庫層:com.jingdong.db連接數據庫可調用該層的類DBManagerJavabean層:com.jingdong.vo該層提供了User,等具體類Dao層:com.jingdong.dao提供了BaseDao,PublicDao等類
控制層:com.jingdong.controller可針對每一個功能創(chuàng)建相應的servlet業(yè)務層:com.jingdong.bo可創(chuàng)建具體的業(yè)務類5.2.6限制條件服務器端口:8080。數據通信協議:Http。
屏幕分辨率:最佳分辨率為1024*768;最佳瀏覽器:IE5.2.7測試計劃
環(huán)境配置成功后,運行各個頁面,所有按鈕功能和數據庫連接查詢等功能皆能實現。
5.3主要代碼設計說明
5.3.1數據庫代碼
設置數據庫編碼信息
setcharacter_set_database=utf8;setcharacter_set_server=utf8;
setcharacter_set_connection=utf8;setcharacter_set_client=utf8;setcharacter_set_results=utf8;
setcollation_connection=utf8_bin;setcollation_database=utf8_bin;setcollation_server=utf8_bin;dropdatabaseifexistsWBS;#如果商品數據庫不存在就創(chuàng)建之createdatabaseifnotexistsWBS
characterset"utf8"collate"utf8_general_ci";
useWBS;
創(chuàng)建BookLibrary表
createtableBookLibrary(idintauto_increment,
BookLibraryNamevarchar(30),primarykey(id));
創(chuàng)建BookPublish表
createtableBookPublish(idintauto_increment,BookPublishNamevarchar(30),BookPublishAddressvarchar(60),BookPublishTellvarchar(30),BookPublishPersonvarchar(30),primarykey(id));
創(chuàng)建Book表BookRebate書本折扣BookCode條形碼BookEdition版次createtableBook(idintauto_increment,BookNamevarchar(30),BookAuthorvarchar(30),BookPricefloat(10,2),BookImageURLvarchar(100),BookLibraryIdint,
BookPublishchar(30),BookPublishTimedate,
BookRebatefloat(10),BookFilechar(100),BookPagesint,BookTotalint,
BookCodechar(30),BookEditionchar(30),primarykey(id));
創(chuàng)建user表
createtableuser(idintauto_increment,
usernamevarchar(30)notnull,passwordvarchar(30)notnull,emailvarchar(30)notnull,userPicturevarchar(100),primarykey(id));
創(chuàng)建SellList表
createtableSellList(idintauto_increment,BookIdint,SellTimedate,BookAmountint,primarykey(id));
創(chuàng)建EnterBookList表EnterBookRebate進書折扣createtableEnterBookList(idintauto_increment,BookIdint,BookEnterdate,BookAmountint,
EnterBookRebatefloat(10),primarykey(id));
創(chuàng)建UserAccount表
createtableUserAccount(idintauto_increment,userNamevarchar(30),Balancefloat(10,2),primarykey(id));
創(chuàng)建ConsumRecord表
createtableConsumRecord(idintauto_increment,userIdint,
ConsumTimedate,
BuyBookNamevarchar(30),primarykey(id),
foreignkey(userId)referencesuser(id)ondeletecascadeonupdatecascade);
創(chuàng)建Message表
createtableMessage(idintauto_increment,MessageInfovarchar(100),primarykey(id));
創(chuàng)建Stack表Stack書庫
createtableStack(idintauto_increment,BookLibraryIdint,BookIdint,
BookAmountint,primarykey(id),
foreignkey(BookLibraryId)referencesBookLibrary(id)ondeletecascadeonupdatecascade,
foreignkey(BookId)referencesBook(id)ondeletecascadeonupdatecascade);
BookList表書目錄表createtableBookList(
idintprimarykeynotnullauto_increment,bookIdint,
list1char(60),list2char(60),list3char(60),list4char(60),list5char(60));管理員表
createtableSuper(
idintauto_increment,
usernamevarchar(30)notnull,passwordvarchar(100)notnull,emailvarchar(30)notnull,userPicturevarchar(100),primarykey(id));留言表
createtableLiuYan(
idintauto_increment,userIdintnotnull,
Messagevarchar(300)notnull,primarykey(id),
foreignkey(userId)referencesuser(id)ondeletecascadeonupdatecascade);回復留言表
createtablereplymessage(
idint(11)notnullauto_increment,contentvarchar(250)defaultnull,msgIdint(11)defaultnull,adminIdint(11)defaultnull,publishDatedatedefaultnull,primarykey(id));
5.3.2底層數據庫連接代碼
publicclassDBManager{//創(chuàng)建數據庫連接類privatestaticDBManagerdbManager=null;privateDBManager(){}
//單例模式,單次只生成一個數據庫連接對象
publicsynchronizedstaticDBManagergetInstance(){
if(dbManager==null){
dbManager=newDBManager();}
returndbManager;}
//通過數據連接池創(chuàng)建數據庫連接
publicsynchronizedstaticConnectiongetConnection()throwsSQLException,NamingException{
return((DataSource)new
InitialContext().lookup("java:comp/env/jdbc/WBS")).getConnection();}
//關閉數據庫連接方法
privatestaticvoidcloseConn(Connectionconn)throwsSQLException{
if(conn!=null){
conn.close();conn=null;}}
//關閉數據庫傳參方法
privatestaticvoidcloseStmt(PreparedStatementpstmt)throwsSQLException{
if(pstmt!=null){
pstmt.close();pstmt=null;}}
//關閉結果集方法
privatestaticvoidcloseRs(ResultSetrs)throwsSQLException{
if(rs!=null){
rs.close();rs=null;}}
//調用以上關閉方法,形成關閉總方法
publicstaticvoidclose(Connectionconn,PreparedStatementpstmt,ResultSetrs)throwsSQLException{
closeRs(rs);
closeStmt(pstmt);closeConn(conn);}}
5.3.3底層業(yè)務代碼
A、圖書展示主頁以及購物車部分業(yè)務
publicclassShopCartBo{//添加日志
Loggerlog=Logger.getLogger("com.jingdong.controller.ShopCartBo.class");//統(tǒng)計商品表中商品的數量(即獲取總的記錄條數)
publicintgetWareTotalRows()throwsNamingException,SQLException{Stringsql="selectcount(*)astotalRowsfrombook";
Map[]count=newPublicDao().getRowsMap(sql,null);//獲取所有商品數集合inttotalRows=0;
if(count!=null&&count.length>0){
totalRows=((Long)count[0].get("totalRows")).intValue();}
returntotalRows;//查詢得到的總的記錄數}
//分頁查詢/**
*startIndex當前頁起始位置*currentPage當前頁碼
*pageSize每頁顯示的條目數**/
publicMap[]getWarePage(intcurrentPage,intpageSize)throwsNamingException,SQLException{
//mysql的分頁查詢一般使用limit即可
Stringsql="select*fromBooklimit?,?";
//計算下一數據頁索引的開始位置(算法:下一頁起始索引=(當前頁-1)*每頁顯示記錄數)
intstartIndex=(currentPage-1)*pageSize;ListparamList=newArrayList();
paramList.add(newInteger(startIndex));paramList.add(newInteger(pageSize));
returnnewPublicDao().getRowsMap(sql,paramList);//按startIndex與pageSize的預編譯參數傳遞,查詢分頁頁面信息}
//所有商品列表
publicMap[]queryWareList()throwsNamingException,SQLException{Stringsql="select*frombook";
returnnewPublicDao().getRowsMap(sql,null);}
//依據商品標識號查詢出商品
publicMap[]queryAllThingById(intid,Stringsql)throwsSQLException,NamingException{
returnnewShoppingDao().queryWareList(id,sql);}
//依據商品標識號查詢出商品
publicMap[]queryWareList(intcid)throwsNamingException,SQLException{Stringsql="select*frombookwhereid=?";ListparamList=newArrayList();paramList.add(newInteger(cid));
returnnewPublicDao().getRowsMap(sql,paramList);}
//判斷欲添加商品在購物車中是否存在
privateBookItemisEquals(MapshoppingCart,Bookbook){BookItembookItem=null;
for(Integerkey:shoppingCart.keySet()){
bookItem=shoppingCart.get(key);//遍歷查詢判斷商品項是否存在if(bookItem!=null){
if(bookItem.getBook().getId()==book.getId()){bookItem.setCount(bookItem.getCount()+1);subtotal(bookItem,book);//小計金額returnbookItem;}}}
returnnull;}
//判斷數據庫中是否有欲添加的商品
privateBookisEquals(Map[]map,intid){if(map!=null&&map.length>0){if(map[0]!=null){
Bookbook=newBook();
book.setId((Integer)map[0].get("id"));
book.setBookPrice((Float)map[0].get("BookPrice"));book.setBookName(map[0].get("BookName").toString());
returnbook;//判斷數據庫查詢結果中商品是否存在,如果存在封裝到VO中}}
returnnull;}
//小計金額
privatevoidsubtotal(BookItembookItem,Bookbook){
bookItem.setSubtotal(bookItem.getCount()*bookItem.getBook().getBookPrice());}
//向新產生的商品項中添加商品
privatevoidaddShoppingItem(BookItembookItem,Bookbook){bookItem.setBook(book);bookItem.setCount(1);
subtotal(bookItem,book);//小計金額}
//添加購物車
publicStringaddShoppingCar(HttpSessionsession,intid,HttpServletRequest
request)throwsNamingException,SQLException{Stringmessage="商品不存在";
MapshoppingCart=null;BookItembookItem=null;Bookbook=null;
Stringsql="select*frombookwhereid=?";Map[]map=queryAllThingById(id,sql);if(session!=null){
shoppingCart=(Map)session.getAttribute("shoppingcart");if(shoppingCart!=null&&shoppingCart.size()>0){book=isEquals(map,id);//數據庫中商品信息if(book!=null){
bookItem=isEquals(shoppingCart,book);//購物車中商品項if(bookItem==null){
bookItem=newBookItem();
addShoppingItem(bookItem,book);
Useruser=(User)session.getAttribute("user");if(user==null||user.equals("")){
log.debug("向購物車中添加了"+bookItem.getCount()+"本的書");}else{
log.debug(user.getUsername()+"向購物車中添加了"+bookItem.getCount()+"本的書");}}}else{
//商品不存在
request.setAttribute("message",message);return"index.jsp";}}else{
//購物車不存在的情況,只需判斷數據庫中商品是否存在,然后再添加商品項
shoppingCart=newHashMap();bookItem=newBookItem();book=isEquals(map,id);if(book!=null){
addShoppingItem(bookItem,book);
Useruser=(User)session.getAttribute("user");if(user==null||user.equals("")){
log.debug("向購物車中添加了"+bookItem.getCount()+"本
的書");}else{
log.debug(user.getUsername()+"向購物車中添加了
"+bookItem.getCount()+"本的書");}
}else{
//商品不存在
request.setAttribute("message",message);return"index.jsp";}}
shoppingCart.put(book.getId(),bookItem);//將商品編號和商品項添加至購物車
session.setAttribute("shoppingcart",shoppingCart);getTotalPrice(session);}else{
//沒有創(chuàng)建會話連接
message="不能夠創(chuàng)建會話連接……";
request.setAttribute("message",message);return"fail.jsp";}
return"shoping.jsp";}
//統(tǒng)計總金額
publicvoidgetTotalPrice(HttpSessionsession){doublesum=0.0d;Map
shoppingCar=(Map)session.getAttribute("shoppingcart");if(shoppingCar!=null&&shoppingCar.size()>0){for(Integerkey:shoppingCar.keySet()){
sum+=(double)shoppingCar.get(key).getBook().getBookPrice()*(double)shoppingCar.get(key).getCount();}}
session.setAttribute("sum",sum);}}
B、圖書展示主頁以及購物車部分業(yè)務
publicclassShoppingBo{//驗證用戶名密碼
publicUsercheckUser(Stringusername,Stringpassword)throwsSQLException,
NamingException{
Stringsql="select*fromuserwhereusername=?";ArrayListparamList=newArrayList();paramList.add(username);
Map[]userMap=newShoppingBo().queryAllThingInWhere(sql,paramList);if(userMap==null||userMap.length==0){
returnnull;}
if(userMap!=null||userMap.length>0){
Stringpwd=(String)userMap[0].get("password");Useruser=newUser();
user.setId((Integer)userMap[0].get("id"));user.setUsername(username);user.setPassword(pwd);
Stringemail=(String)userMap[0].get("email");
if(userMap[0].get("userPicture")!=null){
user.setUserPicture((String)userMap[0].get("userPicture"));}
user.setEmail(email);
returnuser;}
returnnull;}
//篩選管理員
publicSuperBocheckSuper(Stringusername,Stringpassword)throwsSQLException,NamingException{
Stringsql="selectpasswordfromSuperwhereusername=?";ArrayListparamList=newArrayList();paramList.add(username);
Map[]userMap=newShoppingBo().queryAllThingInWhere(sql,paramList);if(userMap==null||userMap.length==0){
returnnull;}
if(userMap!=null||userMap.length>0){
Stringpwd=(String)userMap[0].get("password");SuperBosup=newSuperBo();sup.setUsername(username);sup.setPassword(pwd);
if(userMap[0].get("userPicture")!=null){
sup.setUserPicture((String)userMap[0].get("userPicture"));}
returnsup;}
returnnull;}
//查看注冊用戶名和郵箱是否存在
publicbooleanisregisterUser(Stringusername,Stringemail)throwsSQLException,NamingException{
Stringsql="select*fromuserwhereusername=?oremail=?";ArrayListparamList=newArrayList();paramList.add(username);paramList.add(email);
Map[]userMap=newShoppingBo().queryAllThingInWhere(sql,paramList);if(userMap==null||userMap.length==0){
returnfalse;}
if(userMap!=null||userMap.length>0){
returntrue;}
returnfalse;}
//注冊用戶名密碼
publicintregisterUser(Stringsql,ListparamList)throwsSQLException,NamingException{
returnnewShoppingDao().updateWareList(sql,paramList);}
//插入圖書
publicintinertintoConsumRecord(Stringsql,ListparamList)throwsSQLException,NamingException{
returnnewShoppingDao().updateWareList(sql,paramList);
}
//插入用戶賬戶
publicintiertintoUserAccount(Stringsql,ListparamList)throwsSQLException,NamingException{
returnnewShoppingDao().updateWareList(sql,paramList);}
//插入圖像
publicintinertintoUser(Stringsql,ListparamList)throwsSQLException,NamingException{
returnnewShoppingDao().updateWareList(sql,paramList);}
//插入留言
publicintinertintoLiuYan(Stringsql,ListparamList)throwsSQLException,NamingException{
returnnewShoppingDao().updateWareList(sql,paramList);}
//用Id查詢商品
publicMap[]queryAllThingById(intid,Stringsql)throwsSQLException,NamingException{
returnnewShoppingDao().queryWareList(id,sql);}
//直接查詢商品
publicMap[]queryAllThing(Stringsql)throwsSQLException,NamingException{
returnnewShoppingDao().queryWareList(sql);}
//用where語句查詢商品,參數放入到ArrayList中
publicMap[]queryAllThingInWhere(Stringsql,ListparamList)throwsSQLException,NamingException{
returnnewShoppingDao().queryWareList(sql,paramList);}
//用id查詢書
publicMap[]queryBookList(intcid)throwsSQLException,NamingException{
returnnewShoppingCartDao().queryBookList(cid);}
//查看書項中是否有已選書籍
privateBookItemisEquals(MapshoppingCart,Bookbook){
BookItembookItem=null;
for(Integerkey:shoppingCart.keySet()){
bookItem=shoppingCart.get(key);if(bookItem!=null){
if(bookItem.getBook().getId()==book.getId()){
bookItem.setCount(bookItem.getCount()+1);subtotal(bookItem,book);returnbookItem;}}}
returnnull;}
//小計
privatevoidsubtotal(BookItembookItem,Bookbook){
bookItem.setSubtotal(bookItem.getCount()*bookItem.getBook().getBookPrice());}
//添加書
privatevoidaddShoppingItem(BookItembookItem,Bookbook){
bookItem.setBook(book);bookItem.setCount(1);subtotal(bookItem,book);}
//向書中添加數據
privateBookisEquals(Map[]map,intid){
if(map!=null&&map.length>0){
if(map[0]!=null){
Bookbook=newBook();
book.setId((Integer)map[0].get("id"));
book.setBookImageURL((String)map[0].get("BookImageURL"));book.setBookLibraryId((Integer)map[0].get("BookLibraryId"));
book.setBookPublish((String)map[0].get("BookPublish"));book.setBookName((String)map[0].get("BookName"));book.setBookAuthor((String)map[0].get("BookAuthor"));
book.setBookPublishTime((Date)map[0].get("BookPublishTime"));
book.setBookPrice((Float)map[0].get("BookPrice"));
book.setBookRebate((Float)map[0].get("BookRebate"));book.setBookFile((String)map[0].get("BookFile"));book.setBookPages((Integer)map[0].get("BookPages"));book.setBookTotal((Integer)map[0].get("BookTotal"));book.setBookCode((String)map[0].get("BookCode"));
book.setBookEdition((String)map[0].get("BookEdition"));
returnbook;}}
returnnull;}
//添加購物車
publicStringaddShoppingCar(HttpSessionsession,intid,HttpServletRequestrequest)throwsSQLException,NamingException{
Stringmessage="商品不存在";
MapshoppingCart=null;BookItembookItem=null;Bookbook=null;
Map[]map=queryBookList(id);if(session!=null){
shoppingCart=(Map)session.getAttribute("shoppingcart");
if(shoppingCart!=null&&shoppingCart.size()>0){
book=isEquals(map,id);if(book!=null){
bookItem=isEquals(shoppingCart,book);if(bookItem==null){
bookItem=newBookItem();
addShoppingItem(bookItem,book);
}}else{
request.setAttribute("message",message);return"fail.jsp";}}else{
shoppingCart=newHashMap();bookItem=newBookItem();book=isEquals(map,id);if(book!=null){
addShoppingItem(bookItem,book);}else{
request.setAttribute("message",message);return"fail.jsp";}}
shoppingCart.put(book.getId(),bookItem);
session.setAttribute("shoppingcart",shoppingCart);getTotalPrice(session);}else{
message="不能夠創(chuàng)建會話連接……";
request.setAttribute("message",message);return"fail.jsp";}
return"shoppingcartpage/shoppingcart.jsp";}
//返回商品總價
publicvoidgetTotalPrice(HttpSessionsession){
doublesum=0.0d;
Map
shoppingCar=(Map)session.getAttribute("shoppingcart");if(shoppingCar!=null&&shoppingCar.size()>0){
for(Integerkey:shoppingCar.keySet()){
sum+=shoppingCar.get(key).getBook().getBookPrice()*shoppingCar.get(key).getCount();
}
}}session.setAttribute("sum",sum);}
5.3.4底層數據層代碼
//javabean封裝數據庫讀取數據。
publicclassBookimplementsSerializable{
privateintid;
privateStringbookImageURL;privateStringbookName;privateintbookLibraryId;privateStringbookPublish;privateStringbookAuthor;privateDatebookPublishTime;privatefloatbookPrice;privatefloatbookRebate;privateStringbookFile;privateintbookPages;privateintbookTotal;privateStringbookCode;privateStringbookEdition;publicintgetId(){returnid;}
publicvoidsetId(intid){this.id=id;}
publicStringgetBookImageURL(){returnbookImageURL;}
publicvoidsetBookImageURL(StringbookImageURL){this.bookImageURL=bookImageURL;}
publicStringgetBookName(){returnbookName;}
publicvoidsetBookName(StringbookName){this.bookName=bookName;}
publicintgetBookLibraryId(){returnbookLibraryId;}
publicvoidsetBookLibraryId(intbookLibraryId){
this.bookLibraryId=bookLibraryId;}
publicStringgetBookPublish(){returnbookPublish;}
publicvoidsetBookPublish(StringbookPublish){this.bookPublish=bookPublish;}
publicStringgetBookAuthor(){returnbookAuthor;}
publicvoidsetBookAuthor(StringbookAuthor){this.bookAuthor=bookAuthor;}
publicDategetBookPublishTime(){returnbookPublishTime;}
publicvoidsetBookPublishTime(DatebookPublishTime){this.bookPublishTime=bookPublishTime;}
publicfloatgetBookPrice(){returnbookPrice;}
publicvoidsetBookPrice(floatbookPrice){this.bookPrice=bookPrice;}
publicfloatgetBookRebate(){returnbookRebate;}
publicvoidsetBookRebate(floatbookRebate){this.bookRebate=bookRebate;}
publicStringgetBookFile(){returnbookFile;}
publicvoidsetBookFile(StringbookFile){this.bookFile=bookFile;}
publicintgetBookPages(){returnbookPages;}
publicvoidsetBookPages(intbookPages){this.bookPages=bookPages;}
publicintgetBookTotal(){
}
returnbookTotal;}
publicvoidsetBookTotal(intbookTotal){this.bookTotal=bookTotal;}
publicStringgetBookCode(){returnbookCode;}
publicvoidsetBookCode(StringbookCode){this.bookCode=bookCode;}
publicStringgetBookEdition(){returnbookEdition;}
publicvoidsetBookEdition(StringbookEdition){this.bookEdition=bookEdition;}
5.3.5底層業(yè)務代碼
由于項目代碼繁多,請參見附錄A源代碼。
5.4程序設計說明
5.4.1登錄頁面,如圖1-1-1
圖1-1-1
5.4.2用戶注冊,如圖1-1-2
圖1-1-2
5.4.3留言頁面,如圖1-1-3
圖1-1-3
5.4.4購物車,如圖1-1-4
圖1-1-4
5.4.5普通搜索,如圖1-1-5
圖1-1-5
5.4.6高級搜索,如圖1-1-6
圖1-1-6
5.4.7圖書信息,如圖1-1-7
圖1-1-7
5.4.8頭像上傳,如圖1-1-8
圖1-1-8
5.4.9賬戶信息,如圖1-1-9
圖1-1-9
5.4.10管理員登錄,如圖1-2-1
圖1-2-1
5.4.11管理員主界面,如圖1-2-2
圖1-2-2
5.4.12運行日志,如圖1-2-3
圖1-2-3
5.4.13管理員圖書列表,如圖1-2-4
圖1-2-4
5.4.14管理員添加圖書,如圖1-2-5
圖1-2-5
5.4.15管理員留言列表,如圖1-2-6
圖1-2-6
5.4.16管理員退出系統(tǒng),如圖1-2-7
圖1-2-7
結論
系統(tǒng)設計選用的開發(fā)軟件是myeclipse,后臺數據庫為Mysql。網絡書店目標是基于先進的頁面處理和JSP技術。網絡書店系統(tǒng)設計不僅要考慮書店目標的實現,而且更要關心實現的過程以及用戶在這個瀏覽的過程中獲得信息以及在消費中的安全問題。針對Web網絡書店的特點,從用戶的實際需求出發(fā),設計和規(guī)劃出一套適用的基于Web的網絡書店系統(tǒng),解決使用時的不便和安全隱患,將圖書銷售信息更清晰化,更便捷化。通過直觀的網站布局,讓用戶在獲取消費信息和資源的前提下,擁有更簡單的操作來實現繁雜的消費流程。
致謝
首先,在我撰寫這篇畢業(yè)論文時,我要感謝學校給我的良好教育,使我掌握很多知識。然后我要感謝眾多老師對我的大力支持,沒有老師的幫助我不可能完成這個項目。總之,千言萬語一句話,謝謝!
參考文獻
[1](美)韋斯.《數據結構與算法分析》.出版社:機械工業(yè)201*.[2]李軍.《高性能MySQL》.出版社:電子工業(yè)201*第二版.
[3](英)福塔.《MySQL必知必會》.出版社:人民郵電201*(9).[4]王志剛.《MySQL高效編程》.出版社:人民郵電201*.
[5]鄧芳偉.《基于處理分布的C/S計算模式的研究》.計算機工程與科學,1999.[6]羅娜,林和平,袁福宇.《面向對象軟件測試的方法研究[J]》.東北師大學報(自然科學版),201*.
[7]田苗苗.《基于面向對象技術的軟件開發(fā)方法[J]》.吉林師范大學學報(自然科學版),201*.
[8]Y.DanielLiang著李娜譯.《java語言程序設計基礎篇(第8版)》.北京:機械工業(yè)出版社,201*.
[9]PaulDuBois.《MySQLCookbook》,出版社:O’ReillyMedia201*.
[10]半場方人著,孔令峰譯.《javaScript&DynamicHTML語法辭典》.出版社:中國青年出版社201*.
[11]王新著,《SQL語法與范例詳解詞典》.出版社:機械工業(yè),201*.[12](美)?藸.《java編程思想》.出版社:機械工業(yè)201*.
[13]袁然,鄭自國,來為國,《java案例開發(fā)集錦(第二版)》,電子工業(yè)出版社,201*年.
附錄A
友情提示:本文中關于《網上書店系統(tǒng)總結報告》給出的范例僅供您參考拓展思維使用,網上書店系統(tǒng)總結報告:該篇文章建議您自主創(chuàng)作。
來源:網絡整理 免責聲明:本文僅限學習分享,如產生版權問題,請聯系我們及時刪除。