網(wǎng)上書店系統(tǒng)總結(jié)報(bào)告
項(xiàng)目小組:計(jì)應(yīng)1003班第五小組組員:李圣杭黃守多許明生
以下內(nèi)容:李圣杭
1、開(kāi)發(fā)結(jié)果
軟件產(chǎn)品描述
例如:
交付的軟件產(chǎn)品名稱:網(wǎng)上書店系統(tǒng)英文縮成:book
版本標(biāo)識(shí):Version1.0
子系統(tǒng):前臺(tái)購(gòu)書,后臺(tái)管理。軟件系統(tǒng)模塊清單:1、用戶注冊(cè)/登陸2、用戶信息修改3、查看商品詳情4、實(shí)現(xiàn)購(gòu)物5、查看購(gòu)物車6、圖書管理7、訂單管理8、用戶管理文檔清單:
《項(xiàng)目開(kāi)發(fā)計(jì)劃書》,《需求分析報(bào)告》,《概要設(shè)計(jì)報(bào)告》,《詳細(xì)設(shè)計(jì)報(bào)告》,《測(cè)試分析報(bào)告》。
2、開(kāi)發(fā)工作評(píng)價(jià)
對(duì)項(xiàng)目開(kāi)發(fā)過(guò)程的評(píng)價(jià)
總的來(lái)說(shuō)開(kāi)發(fā)的過(guò)程還可以,但還是有點(diǎn)不盡如人意。
第一、計(jì)劃不周全,對(duì)于問(wèn)題的想象不全面,導(dǎo)致了在開(kāi)發(fā)過(guò)程中出現(xiàn)了各種各樣的問(wèn)題,例如在頁(yè)面的開(kāi)發(fā)設(shè)計(jì)時(shí),沒(méi)考慮到與數(shù)據(jù)庫(kù)的相對(duì)應(yīng),所以在各方面都出現(xiàn)了嚴(yán)重的問(wèn)題。
第二、小組不配合,遇到一些簡(jiǎn)單的問(wèn)題自己一個(gè)根本就解決不了,導(dǎo)致了開(kāi)發(fā)的進(jìn)度慢了好多。
以下內(nèi)容:黃守多制作3、對(duì)技術(shù)方法的評(píng)價(jià)
本次項(xiàng)目開(kāi)發(fā)中運(yùn)用的技術(shù)就是jsp,通過(guò)本次項(xiàng)目,更加熟練地掌握了對(duì)于jsp的軟件應(yīng)用。
對(duì)產(chǎn)品質(zhì)量的評(píng)價(jià)總體的來(lái)說(shuō)本項(xiàng)目的系統(tǒng)功能基本上算是齊全了,但還是存在著一些小細(xì)節(jié)方面的問(wèn)題
以下內(nèi)容:許明生制作4、技術(shù)積累與經(jīng)驗(yàn)總結(jié)
技術(shù)積累:大量應(yīng)用到了表單數(shù)據(jù)的提交于獲取,熟練地掌握了request.getParameter(Stringname);方法對(duì)數(shù)據(jù)的提交與保存。還有就是對(duì)于頁(yè)面之間的鏈接以及利用session方法對(duì)商品的保存于提取。
經(jīng)驗(yàn)總結(jié):增加了項(xiàng)目開(kāi)發(fā)的經(jīng)驗(yàn),對(duì)于團(tuán)隊(duì)之間的團(tuán)結(jié)與合作,深入體會(huì)到了在團(tuán)隊(duì)開(kāi)發(fā)過(guò)程中每個(gè)隊(duì)員的重要性,以及團(tuán)隊(duì)開(kāi)發(fā)之間的統(tǒng)一性。
擴(kuò)展閱讀:網(wǎng)上書店系統(tǒng)畢業(yè)設(shè)計(jì)報(bào)告
201*屆畢業(yè)生
畢業(yè)設(shè)計(jì)
題目:基于
院系名稱:xxx專業(yè)班級(jí):xx
學(xué)生姓名:xx學(xué)號(hào):xx指導(dǎo)教師:xx教師職稱:講師
年月日
web的網(wǎng)絡(luò)書店系統(tǒng)的開(kāi)發(fā)與設(shè)計(jì)
目次
1引言項(xiàng)目開(kāi)發(fā)背景………………………………………………………………11.1項(xiàng)目選題的背景及意義…………………………………………………………………21.2國(guó)內(nèi)外研究現(xiàn)狀和發(fā)展動(dòng)態(tài)………………………………………………………………32第一章需求分析……………………………………………………………42.1用戶需求……………………………………………………………………………52.1開(kāi)發(fā)需求…………………………………………………………………………………83第二章概要設(shè)計(jì)…………………………………………………………………………113.1項(xiàng)目主體模塊設(shè)計(jì)………………………………………………………………………113.2項(xiàng)目基本功能設(shè)計(jì)………………………………………………………………………143.3項(xiàng)目數(shù)據(jù)庫(kù)設(shè)計(jì)…………………………………………………………………………164第三章數(shù)據(jù)庫(kù)設(shè)計(jì)………………………………………………………………………174.1數(shù)據(jù)庫(kù)表設(shè)計(jì)……………………………………………………………………………175第四章詳細(xì)設(shè)計(jì)……………………………………………………………205.1開(kāi)發(fā)規(guī)范…………………………………………………………………………………205.2程序設(shè)計(jì)說(shuō)明……………………………………………………………………………225.3主要代碼設(shè)計(jì)……………………………………………………………………………245.4視圖設(shè)計(jì)…………………………………………………………………………………26結(jié)論……………………………………………………………………………………40致謝……………………………………………………………………………………41參考文獻(xiàn)………………………………………………………………………………42附錄A項(xiàng)目源代碼…………………………………………………………………43
1引言
1.1論文選題的背景及意義
隨著全球經(jīng)濟(jì)一體化的逐步發(fā)展和深入,網(wǎng)絡(luò)書店已成為傳統(tǒng)書店必不可少的經(jīng)營(yíng)策略之一.目前,網(wǎng)絡(luò)書店在國(guó)際互聯(lián)網(wǎng)上可以實(shí)現(xiàn)的商務(wù)已經(jīng)多樣化,可以完成從最基本的信息展示、信息發(fā)布功能到在線交易、在線客戶服務(wù)、在線網(wǎng)站管理功能等,可以說(shuō),傳統(tǒng)書店所具備的功能幾乎都可以在互聯(lián)網(wǎng)上進(jìn)行電子化的高效動(dòng)作。雖然傳統(tǒng)書店規(guī)模有所不同,隨著網(wǎng)上交易的開(kāi)展,都將有力地改變企業(yè)的發(fā)展空間,會(huì)對(duì)企業(yè)的競(jìng)爭(zhēng)力產(chǎn)生不可忽視的影響。這些影響主要體現(xiàn)在以下方面。1、改變企業(yè)競(jìng)爭(zhēng)方式
企業(yè)上網(wǎng)不僅給消費(fèi)者和企業(yè)提供了更多的選擇消費(fèi)與開(kāi)拓銷售市場(chǎng)的機(jī)會(huì),而且也是提供了更加密切的信息交流場(chǎng)所,從而提高了企業(yè)把握市場(chǎng)和消費(fèi)者了解市場(chǎng)的能力。同時(shí)企業(yè)上網(wǎng)擴(kuò)大了企業(yè)的競(jìng)爭(zhēng)領(lǐng)域,使企業(yè)從常規(guī)的廣告競(jìng)爭(zhēng)、促銷手段等領(lǐng)域的競(jìng)爭(zhēng)擴(kuò)大到無(wú)形的虛擬競(jìng)爭(zhēng)空間。2、改變企業(yè)競(jìng)爭(zhēng)基礎(chǔ)
網(wǎng)絡(luò)書店改變了企業(yè)競(jìng)爭(zhēng)的交易成本。網(wǎng)絡(luò)書店具有投入成本低、批發(fā)數(shù)量大及用戶多的優(yōu)勢(shì)。電子商務(wù)也使企業(yè)規(guī)模影響競(jìng)爭(zhēng)力的基礎(chǔ)發(fā)生了改變。例如在傳統(tǒng)的銷售渠道中,大書商與小書商之間的競(jìng)爭(zhēng)差別很大。電子商務(wù)使大書商與小書商之間規(guī)模差距的競(jìng)爭(zhēng)變得幾乎微不足道。美國(guó)西雅圖亞馬遜公司在網(wǎng)上開(kāi)辦了一家大型書店,提供250萬(wàn)冊(cè)圖書供在線購(gòu)買。只有兩個(gè)人管理的網(wǎng)絡(luò)書店提供的書目和服務(wù),幾乎可以與200人管理的傳統(tǒng)書店提供的書目和服務(wù)一樣。3、改變企業(yè)的競(jìng)爭(zhēng)模式
網(wǎng)絡(luò)書店的經(jīng)驗(yàn)表明,如果網(wǎng)絡(luò)書店可以為顧客提供品種齊全的圖書、折扣以及靈活的條件、可靠的安全性和友好的界面,在線購(gòu)物者一般都愿意在網(wǎng)上進(jìn)行圖書交易。、
1.2論國(guó)內(nèi)外研究現(xiàn)狀和發(fā)展動(dòng)態(tài)
國(guó)外的Web商務(wù)系統(tǒng)應(yīng)用起步較早,所以應(yīng)用的領(lǐng)域比較廣,網(wǎng)絡(luò)銷售已經(jīng)在人們?nèi)粘OM(fèi)中占到一定比例,Web商務(wù)系統(tǒng)也比較成熟。人們可以以網(wǎng)絡(luò)這個(gè)載體,足不出戶就可以搜索、查詢到自己需要的信息、購(gòu)買自己需要的商品。我國(guó)電子商務(wù)的發(fā)展起源于70年代的EDI應(yīng)用,我國(guó)海關(guān)是最早引入EDI進(jìn)行報(bào)關(guān),經(jīng)過(guò)幾年的完善發(fā)展目前企業(yè)可以通過(guò)上網(wǎng)申請(qǐng)報(bào)關(guān)。電子商務(wù)概念首次引入中國(guó)實(shí)在1993年,第一筆網(wǎng)上交易發(fā)生在1996年。
1、目前我國(guó)網(wǎng)上書店的主要類型有:
由國(guó)有新華書店投資建設(shè)的網(wǎng)絡(luò)書店。一些有實(shí)力的傳統(tǒng)書店,都會(huì)建立自己的網(wǎng)站,利用網(wǎng)絡(luò)促銷,爭(zhēng)取更多的市場(chǎng)份額。它們主要依托傳統(tǒng)的圖書大廈的圖書存儲(chǔ)進(jìn)行網(wǎng)絡(luò)售書,屬于新華書店網(wǎng)絡(luò)或網(wǎng)絡(luò)的書店。
由出版社建立的網(wǎng)絡(luò)書店。因?yàn)榫W(wǎng)絡(luò)出版的緣故,出版社是最早觸網(wǎng)的,我國(guó)500多家出版社中,已建立網(wǎng)站的有349家,占62%。較好的出版社營(yíng)銷網(wǎng)站建設(shè)的特點(diǎn)是:以出版社本社出版物為網(wǎng)站核心,突出特色,訪問(wèn)速度快捷,信息及時(shí)更新,內(nèi)容的合理編排以及完善的檢索能力,較強(qiáng)的交互能力。
外貿(mào)出版公司投資建設(shè)的網(wǎng)絡(luò)書店。這一類網(wǎng)絡(luò)書店立足公司主營(yíng)業(yè)務(wù),主要對(duì)海外進(jìn)行圖書銷售,銷售量逐漸增加。
非出版業(yè)資本投資建設(shè)的網(wǎng)絡(luò)書店。如卓越網(wǎng)。
就目前情況而言,上述幾類的網(wǎng)絡(luò)書店可以分為兩大類。一類是沒(méi)有實(shí)體書店的網(wǎng)絡(luò)書店,以卓越網(wǎng)為代表,還有一類是以實(shí)體書店為支撐的。前一類書店已經(jīng)逐步銷售更多的商品,在很大程度上是以圖書為主打產(chǎn)品,開(kāi)發(fā)其它商品作為補(bǔ)充,如卓越網(wǎng)在大幅增加圖書音像品種的同時(shí),陸續(xù)增加了數(shù)碼產(chǎn)品、手機(jī)、家居、健康用品和化妝品、玩具禮品、鐘表首飾、廚具、母嬰產(chǎn)品、小家電等等。
2、網(wǎng)絡(luò)書店面臨的困境
國(guó)內(nèi)網(wǎng)絡(luò)書店的目的主要有:利用圖書銷售盈利、效仿亞馬遜提高無(wú)形資產(chǎn)價(jià)值、以拉廣告賺錢、緊跟電子商務(wù)潮流等,其中,前兩種占大多數(shù)。然而,實(shí)際情況是網(wǎng)絡(luò)書店并未達(dá)到預(yù)期的效果,有的根本沒(méi)什么訪問(wèn)量,有的雖然訪問(wèn)人數(shù)眾多,但成交有限、營(yíng)銷平淡,同時(shí)網(wǎng)上廣告也并未被大商家認(rèn)同。
3、網(wǎng)絡(luò)書店的意義
在中國(guó),網(wǎng)絡(luò)書店有發(fā)展的必要,也有發(fā)展的基礎(chǔ),發(fā)展網(wǎng)絡(luò)書店的條件也已經(jīng)成熟,但是還有幾個(gè)關(guān)鍵的問(wèn)題必須解決好:一是提供普通的信用卡網(wǎng)上支付,制定方便的銀行間結(jié)算問(wèn)題;二是成立統(tǒng)一的、最權(quán)威的認(rèn)證機(jī)構(gòu),從而解決安全問(wèn)題;三是構(gòu)建高效率的圖書配送系統(tǒng)。只有把這些問(wèn)題解決好了,才能保證網(wǎng)絡(luò)書店的蓬勃發(fā)展。
很多人看到了書這種商品網(wǎng)上銷售的諸多好處:方便購(gòu)買、金額小、風(fēng)險(xiǎn)小、用戶易決定,以及信息的完整性可以更好地幫助我們選擇,也提供了更多地選擇。
2第一章需求分析
2.1用戶需求
基于WEB的網(wǎng)絡(luò)書店系統(tǒng)主要實(shí)現(xiàn)網(wǎng)上購(gòu)書,網(wǎng)站最終實(shí)現(xiàn)用戶通過(guò)訪問(wèn)本網(wǎng)站進(jìn)行選購(gòu)自己喜歡的商品,然后網(wǎng)上下達(dá)訂單、修改訂單、結(jié)算、創(chuàng)建個(gè)人資料,修改個(gè)人資料留言等。網(wǎng)站運(yùn)行路線為用戶通過(guò)請(qǐng)求一個(gè)JSP頁(yè)面,然后后臺(tái)調(diào)用處理該功能的Servlet,Servlet接著調(diào)用底層的業(yè)務(wù)層,最終服務(wù)器根據(jù)用戶請(qǐng)求返回用戶查詢的結(jié)果。
系統(tǒng)基本要實(shí)現(xiàn)用戶注冊(cè)、用戶登錄、修改資料、下達(dá)訂單、網(wǎng)上結(jié)算、搜索等功能。本系統(tǒng)使用方便,用戶只需輸入網(wǎng)址即可進(jìn)入系統(tǒng)主界面瀏覽所有商品,注冊(cè)方便快捷,對(duì)使用者來(lái)說(shuō)無(wú)需精通計(jì)算機(jī)知識(shí)易可操作。項(xiàng)目的維護(hù)者需具備JSP知識(shí)和Java基礎(chǔ)等知識(shí),以備在擴(kuò)充和刪減網(wǎng)站功能。
對(duì)功能的規(guī)定:
商品檢索:查詢數(shù)據(jù)庫(kù)(商品返回用戶輸入文本字段表)
商品基本信息
購(gòu)買商品:添加購(gòu)物車(商返回用戶點(diǎn)擊購(gòu)買商品品)
商品信息(含件數(shù))
2.2開(kāi)發(fā)目標(biāo)
此系統(tǒng)采用MVC架構(gòu)模式,將業(yè)務(wù)層和邏輯層進(jìn)行了分離,便于日后的修改與維護(hù),維護(hù)人員只需修改部分業(yè)務(wù)即可,而且不會(huì)對(duì)系統(tǒng)其他功能產(chǎn)生影響。
用戶查詢商品時(shí)輸入必須輸入字符串否則查詢不到相關(guān)商品。
輸出信息:用戶注冊(cè)時(shí)如果輸入的內(nèi)容不匹配,將會(huì)出現(xiàn)紅色顏色的字體提示。環(huán)境方面,系統(tǒng)分辨率最好為1024*768,瀏覽器為IE最佳。數(shù)據(jù)庫(kù)編碼應(yīng)為UTF-8。故障處理:主要可能是tomcat配置問(wèn)。導(dǎo)致結(jié)果:無(wú)法運(yùn)行,系統(tǒng)提示錯(cuò)誤。軟件方面故障:根據(jù)實(shí)際的頁(yè)面業(yè)務(wù)進(jìn)行判斷。導(dǎo)致結(jié)果:頁(yè)面出錯(cuò),功能不完善或錯(cuò)亂等。網(wǎng)站流程設(shè)計(jì):
展示所有商品:Bookindex1.jsp通過(guò)點(diǎn)擊商品進(jìn)入→購(gòu)物車:shoping.jsp
若購(gòu)買商品需進(jìn)行登錄,若是不是會(huì)員需→進(jìn)入注冊(cè)頁(yè)面:register.jspregister.jsp→然后進(jìn)入登錄頁(yè)面:login.jsp→我的賬戶:userInfo.jsp→可以上傳頭像UploadImage.jsp以及進(jìn)入留言頁(yè)面liuyan.jsp以及后臺(tái)管理頁(yè)面bkLogin.jsp,添加書頁(yè)面bkAdd.jsp,后臺(tái)書本信息bkShowBookInfo.jsp以及查看日志功能.
3第二章概要設(shè)計(jì)
3.1項(xiàng)目主體模塊
用戶否是否是管理員是管理書籍和用戶可購(gòu)買享受折扣書進(jìn)庫(kù)和增刪改購(gòu)買存入購(gòu)物車用戶的注冊(cè)考核賬戶付款存入數(shù)據(jù)庫(kù)存入
3.1.1對(duì)性能的規(guī)定
a.靈活性方面,此系統(tǒng)采用MVC架構(gòu)模式,將業(yè)務(wù)層和邏輯層進(jìn)行了分離,便于日后的修改與維護(hù),維護(hù)人員只需修改部分業(yè)務(wù)即可,而且不會(huì)對(duì)系統(tǒng)其他功能產(chǎn)生影響。b.環(huán)境方面,系統(tǒng)分辨率最好為1024*768,瀏覽器為IE最佳。數(shù)據(jù)庫(kù)編碼應(yīng)為UTF-8。3.1.2輸人輸出要求
用戶查詢商品時(shí)輸入相關(guān)信息否則檢索不到相關(guān)商品。
輸出信息:用戶注冊(cè)時(shí)如果輸入的內(nèi)容不匹配,將會(huì)出現(xiàn)紅色顏色的字體提示。3.1.3數(shù)據(jù)管理能力要求
需管理的數(shù)據(jù)表:書表:book;用戶表:user;用戶消費(fèi)信息表:userRecord表;用戶賬戶表:userAccount;庫(kù)存表:stack;
其中表中各項(xiàng)數(shù)據(jù)的長(zhǎng)度一般為30.可隨實(shí)際情況進(jìn)行修改。若含有URL大小一般定為100.(也可根據(jù)實(shí)際情況進(jìn)行長(zhǎng)度修改)。3.1.4故障處理要求
環(huán)境方面故障:主要可能是tomcat配置問(wèn)。導(dǎo)致結(jié)果:無(wú)法運(yùn)行,系統(tǒng)提示錯(cuò)誤。軟件方面故障:根據(jù)實(shí)際的頁(yè)面業(yè)務(wù)進(jìn)行判斷。導(dǎo)致結(jié)果:頁(yè)面出錯(cuò),功能不完善或錯(cuò)亂等。
3.1.5其他專門要求
對(duì)于用戶需安全保密方面的信息采用MD5加密。3.2運(yùn)行環(huán)境3.2.1設(shè)備
屏幕分辨率:最佳分辨率為1024*768;3.2.2支持軟件
支持Windows、Linux等系統(tǒng)使用。3.2.3接口服務(wù)器接口:8088數(shù)據(jù)通信協(xié)議:Http3.3接口設(shè)計(jì)3.3.1內(nèi)部接口
展示所有商品:Bookindex1.jsp通過(guò)點(diǎn)擊商品進(jìn)入→購(gòu)物車:shoping.jsp
若購(gòu)買商品需進(jìn)行登錄,若是不是會(huì)員需→進(jìn)入注冊(cè)頁(yè)面:register.jspregister.jsp→然后進(jìn)入登錄頁(yè)面:login.jsp→我的賬戶:userInfo.jsp→可以上傳頭像UploadImage.jsp以及進(jìn)入留言頁(yè)面liuyan.jsp以及后臺(tái)管理頁(yè)面bkLogin.jsp,添加書頁(yè)面bkAdd.jsp,后臺(tái)書本信息bkShowBookInfo.jsp以及查看日志功能.
3.4運(yùn)行設(shè)計(jì)
3.4.1運(yùn)行模塊組合:用戶注冊(cè)
實(shí)現(xiàn)功能:本頁(yè)面要實(shí)現(xiàn)用戶注冊(cè)信息的功能,并在客戶端進(jìn)行用戶提交的基本信息的驗(yàn)證,驗(yàn)證成功后再提交到數(shù)據(jù)庫(kù)進(jìn)行驗(yàn)證。
所需用到知識(shí):jQuery表單驗(yàn)證、驗(yàn)證碼的使用、圖片代替提交按鈕、層的布局與使用,數(shù)據(jù)庫(kù)連接池。用戶登錄
實(shí)現(xiàn)功能:主要實(shí)現(xiàn)用戶登錄的功能。只需進(jìn)行簡(jiǎn)單的數(shù)據(jù)驗(yàn)證即可提交服務(wù)器,然后根據(jù)用戶提交的信息查詢數(shù)據(jù)庫(kù),如果與數(shù)據(jù)庫(kù)里的信息一致方可成功登錄系統(tǒng)。所需用到知識(shí):jQuery表單驗(yàn)證、圖片代替提交按鈕、層的布局與使用,數(shù)據(jù)庫(kù)連接池。個(gè)人信息管理
實(shí)現(xiàn)功能:管理用戶使用本站的詳細(xì)信息。包括用戶注冊(cè)相關(guān)信息等。所用到知識(shí):Servlet和JSP動(dòng)態(tài)顯示用戶登錄信息,數(shù)據(jù)庫(kù)增刪改查功能。我的購(gòu)物車
實(shí)現(xiàn)功能:動(dòng)態(tài)顯示用戶的購(gòu)物信息,統(tǒng)計(jì)用戶所購(gòu)的商品信息。
所用到知識(shí):Servlet和JSP動(dòng)態(tài)顯示用戶登錄信息,數(shù)據(jù)庫(kù)增刪改查功能。個(gè)人資料管理
實(shí)現(xiàn)功能:供用戶修改個(gè)人詳細(xì)信息。
所用到知識(shí):表單的詳細(xì)使用,數(shù)據(jù)庫(kù)連接池與數(shù)據(jù)庫(kù)更新功能。商品詳細(xì)信息頁(yè)面
實(shí)現(xiàn)功能:此頁(yè)面主要顯示用戶欲購(gòu)買的商品的詳細(xì)信息。所用知識(shí):Servlet和JSP動(dòng)態(tài)顯示用戶登錄信息,數(shù)據(jù)庫(kù)查詢。3.5系統(tǒng)數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)3.5.1邏輯結(jié)構(gòu)設(shè)計(jì)要點(diǎn)數(shù)據(jù)庫(kù)名:WBS標(biāo)示符:書表:book;用戶表:user;
用戶賬戶表:userAccount;留言表:liuyan;庫(kù)存表:stack;管理員表:super;3.5.2物理結(jié)構(gòu)設(shè)計(jì)要點(diǎn)
通過(guò)MD5加密方法實(shí)現(xiàn)用戶信息的保密,并存儲(chǔ)于數(shù)據(jù)庫(kù)內(nèi)。3.6系統(tǒng)出錯(cuò)處理設(shè)計(jì)3.6.1出錯(cuò)信息a.404請(qǐng)求錯(cuò)誤。b.505相應(yīng)錯(cuò)誤。
4第三章數(shù)據(jù)庫(kù)設(shè)計(jì)
4.1數(shù)據(jù)庫(kù)表
本項(xiàng)目采用mysql數(shù)據(jù)庫(kù)。數(shù)據(jù)表如下:4.1圖書表
書表(book)字段名idBookNameBookAuthorBookPriceBookImageURLBookLibraryIdBookPublishBookRebateBookFileBookPagesBookTotalBookCodeBookEdition字段類型intvarcharvarcharfloat(10,2)varcharintcharfloat(10)charintintcharchar字段長(zhǎng)度3030100301003030是否為空非是否為主鍵是否否否否否否否否否否否否否BookPublishTimedate
4.2用戶表
用戶表(user)字段名idusernamepasswordemailuserPicture字段類型intvarcharvarcharvarcharvarchar字段長(zhǎng)度303030100是否為空是否為主鍵是否否否否
4.3書類表
書類表(BookLibrary)字段名Id字段類型int字段長(zhǎng)度30
是否為空非是否為主鍵是否BookLibraryNamevarchar4.4用戶賬戶表
用戶賬戶表(UserAccount)字段名iduserNameBalance類型intvarchar長(zhǎng)度30是否為空非主鍵是否否外鍵float(10,2)4.5用戶消費(fèi)表
用戶消費(fèi)表(ConsumRecord)字段名iduserId
ConsumTimeBuyBookName類型intIntdatevarchar長(zhǎng)度30是否為空非主鍵是外鍵
4.6留言表
留言表(messages)
字段名iduserIdMessage
類型intintvarchar
長(zhǎng)度6300
是否為空非
主鍵是否否
外鍵
4.7留言回復(fù)表replymessage
4.8管理員表super
5第四章詳細(xì)設(shè)計(jì)
5.1開(kāi)發(fā)規(guī)范
5.1.1定義
a.包命名方法:com.jingdong.#;
(#:biz,bocodechange,controller,bo,db,fileter,listener,md5,upload,Upload.util,vo等各類包。)
b.Jsp頁(yè)面位置:所以jsp頁(yè)面均存在WEBROOT目錄下,后臺(tái)頁(yè)面放置在WEBROOT目錄下的background目錄中;
c.統(tǒng)一WebRoot各個(gè)jsp頁(yè)面均引用相對(duì)應(yīng)的文件夾的資源圖片資源統(tǒng)一在一個(gè)文件夾內(nèi)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頁(yè)面的樣式設(shè)計(jì)要與JSP頁(yè)面分離2JavaScript腳本與頁(yè)面分離
3頂部和尾部頁(yè)面只需調(diào)用即可,無(wú)需設(shè)計(jì)。(注:保持每個(gè)頁(yè)面頂部與底部的一致性)
4將自己用到的文件存在WEBROOT下的IMAGES包里,便于日后整合。5頁(yè)面名字以及包名要統(tǒng)一為上面的,便于鏈接調(diào)用以及減少后期修改時(shí)間。
6如需新增頁(yè)面或者jar文件、js或css等?梢愿鶕(jù)實(shí)際情況增加,但是務(wù)必放于指定的位置下。
7其他需要的內(nèi)容自己先定義,然后再與小組其他人員討論。
5.2程序設(shè)計(jì)說(shuō)明
5.2.1程序頁(yè)面描述JSP頁(yè)面設(shè)計(jì)
注冊(cè)頁(yè)面:register.jsp用戶登錄頁(yè)面:login.jsp管理員登陸頁(yè)面:bkLogin.jsp首頁(yè):Bookindex1.jsp展示所有商品:Bookindex1.jsp分類頁(yè)面:Bookclass.jsp高級(jí)查詢頁(yè)面:ComplexQuery.jsp錯(cuò)誤頁(yè)面:fail.jsp留言頁(yè)面:liuyan.jsp
商品詳細(xì)信息頁(yè)面:product.jsp上傳圖像頁(yè)面:UploadImage.jsp賬戶信息:userInfo.jsp
管理員添加書籍頁(yè)面:bkAdd.jsp查看系統(tǒng)運(yùn)行日志頁(yè)面:looklog.jsp
5.2.2程序業(yè)務(wù)描述
a.數(shù)據(jù)庫(kù)連接池:DBManager(已經(jīng)建立統(tǒng)一的鏈接池,可以直接調(diào)用);
b.數(shù)據(jù)庫(kù):數(shù)據(jù)庫(kù)名:WBS;書表:book;用戶表:user;用戶消費(fèi)記錄表:userRecord表;庫(kù)存表:stack表;用戶賬戶表:userAccount表;
c.前期業(yè)務(wù):主要實(shí)現(xiàn)注冊(cè)、登錄、注銷、修改密碼、驗(yàn)證碼業(yè)務(wù)、訂單的提交并著手開(kāi)始建立購(gòu)物車業(yè)務(wù)。
中期業(yè)務(wù):提取已提交的訂單信息、所有商品的分類、購(gòu)物車的完善、個(gè)人資料提交、以及搜索功能的完善、上傳業(yè)務(wù)。
后期業(yè)務(wù):添加購(gòu)物車到商品頁(yè)面、并完成其分頁(yè)業(yè)務(wù)、MD5加密業(yè)務(wù)、監(jiān)聽(tīng)和過(guò)濾業(yè)務(wù)、
后臺(tái)管理業(yè)務(wù)等。(并可以根據(jù)自己的想法提出建議再做增加)。
5.2.3功能商品檢索:查詢數(shù)據(jù)庫(kù)(商品返回用戶輸入文本字段表)
商品基本信息購(gòu)買商品:添加購(gòu)物車(商返回用戶點(diǎn)擊購(gòu)買品)商品信息(含件數(shù))
此系統(tǒng)采用MVC架構(gòu)模式,將業(yè)務(wù)層和邏輯層進(jìn)行了分離,便于日后的修改與維護(hù),維護(hù)人員只需修改部分業(yè)務(wù)即可,而且不會(huì)對(duì)系統(tǒng)其他功能產(chǎn)生影響。
5.2.4輸人輸出要求
用戶查詢商品時(shí)必須輸入,否則查詢不到相關(guān)商品。
輸出信息:用戶注冊(cè)時(shí)如果輸入的內(nèi)容不匹配,將會(huì)出現(xiàn)紅色顏色的。5.2.5接口服務(wù)器端口:8080。數(shù)據(jù)通信協(xié)議:Http。
數(shù)據(jù)庫(kù)層:com.jingdong.db連接數(shù)據(jù)庫(kù)可調(diào)用該層的類DBManagerJavabean層:com.jingdong.vo該層提供了User,等具體類Dao層:com.jingdong.dao提供了BaseDao,PublicDao等類
控制層:com.jingdong.controller可針對(duì)每一個(gè)功能創(chuàng)建相應(yīng)的servlet業(yè)務(wù)層:com.jingdong.bo可創(chuàng)建具體的業(yè)務(wù)類5.2.6限制條件服務(wù)器端口:8080。數(shù)據(jù)通信協(xié)議:Http。
屏幕分辨率:最佳分辨率為1024*768;最佳瀏覽器:IE5.2.7測(cè)試計(jì)劃
環(huán)境配置成功后,運(yùn)行各個(gè)頁(yè)面,所有按鈕功能和數(shù)據(jù)庫(kù)連接查詢等功能皆能實(shí)現(xiàn)。
5.3主要代碼設(shè)計(jì)說(shuō)明
5.3.1數(shù)據(jù)庫(kù)代碼
設(shè)置數(shù)據(jù)庫(kù)編碼信息
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;#如果商品數(shù)據(jù)庫(kù)不存在就創(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進(jìn)書折扣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書庫(kù)
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);回復(fù)留言表
createtablereplymessage(
idint(11)notnullauto_increment,contentvarchar(250)defaultnull,msgIdint(11)defaultnull,adminIdint(11)defaultnull,publishDatedatedefaultnull,primarykey(id));
5.3.2底層數(shù)據(jù)庫(kù)連接代碼
publicclassDBManager{//創(chuàng)建數(shù)據(jù)庫(kù)連接類privatestaticDBManagerdbManager=null;privateDBManager(){}
//單例模式,單次只生成一個(gè)數(shù)據(jù)庫(kù)連接對(duì)象
publicsynchronizedstaticDBManagergetInstance(){
if(dbManager==null){
dbManager=newDBManager();}
returndbManager;}
//通過(guò)數(shù)據(jù)連接池創(chuàng)建數(shù)據(jù)庫(kù)連接
publicsynchronizedstaticConnectiongetConnection()throwsSQLException,NamingException{
return((DataSource)new
InitialContext().lookup("java:comp/env/jdbc/WBS")).getConnection();}
//關(guān)閉數(shù)據(jù)庫(kù)連接方法
privatestaticvoidcloseConn(Connectionconn)throwsSQLException{
if(conn!=null){
conn.close();conn=null;}}
//關(guān)閉數(shù)據(jù)庫(kù)傳參方法
privatestaticvoidcloseStmt(PreparedStatementpstmt)throwsSQLException{
if(pstmt!=null){
pstmt.close();pstmt=null;}}
//關(guān)閉結(jié)果集方法
privatestaticvoidcloseRs(ResultSetrs)throwsSQLException{
if(rs!=null){
rs.close();rs=null;}}
//調(diào)用以上關(guān)閉方法,形成關(guān)閉總方法
publicstaticvoidclose(Connectionconn,PreparedStatementpstmt,ResultSetrs)throwsSQLException{
closeRs(rs);
closeStmt(pstmt);closeConn(conn);}}
5.3.3底層業(yè)務(wù)代碼
A、圖書展示主頁(yè)以及購(gòu)物車部分業(yè)務(wù)
publicclassShopCartBo{//添加日志
Loggerlog=Logger.getLogger("com.jingdong.controller.ShopCartBo.class");//統(tǒng)計(jì)商品表中商品的數(shù)量(即獲取總的記錄條數(shù))
publicintgetWareTotalRows()throwsNamingException,SQLException{Stringsql="selectcount(*)astotalRowsfrombook";
Map[]count=newPublicDao().getRowsMap(sql,null);//獲取所有商品數(shù)集合inttotalRows=0;
if(count!=null&&count.length>0){
totalRows=((Long)count[0].get("totalRows")).intValue();}
returntotalRows;//查詢得到的總的記錄數(shù)}
//分頁(yè)查詢/**
*startIndex當(dāng)前頁(yè)起始位置*currentPage當(dāng)前頁(yè)碼
*pageSize每頁(yè)顯示的條目數(shù)**/
publicMap[]getWarePage(intcurrentPage,intpageSize)throwsNamingException,SQLException{
//mysql的分頁(yè)查詢一般使用limit即可
Stringsql="select*fromBooklimit?,?";
//計(jì)算下一數(shù)據(jù)頁(yè)索引的開(kāi)始位置(算法:下一頁(yè)起始索引=(當(dāng)前頁(yè)-1)*每頁(yè)顯示記錄數(shù))
intstartIndex=(currentPage-1)*pageSize;ListparamList=newArrayList();
paramList.add(newInteger(startIndex));paramList.add(newInteger(pageSize));
returnnewPublicDao().getRowsMap(sql,paramList);//按startIndex與pageSize的預(yù)編譯參數(shù)傳遞,查詢分頁(yè)頁(yè)面信息}
//所有商品列表
publicMap[]queryWareList()throwsNamingException,SQLException{Stringsql="select*frombook";
returnnewPublicDao().getRowsMap(sql,null);}
//依據(jù)商品標(biāo)識(shí)號(hào)查詢出商品
publicMap[]queryAllThingById(intid,Stringsql)throwsSQLException,NamingException{
returnnewShoppingDao().queryWareList(id,sql);}
//依據(jù)商品標(biāo)識(shí)號(hào)查詢出商品
publicMap[]queryWareList(intcid)throwsNamingException,SQLException{Stringsql="select*frombookwhereid=?";ListparamList=newArrayList();paramList.add(newInteger(cid));
returnnewPublicDao().getRowsMap(sql,paramList);}
//判斷欲添加商品在購(gòu)物車中是否存在
privateBookItemisEquals(MapshoppingCart,Bookbook){BookItembookItem=null;
for(Integerkey:shoppingCart.keySet()){
bookItem=shoppingCart.get(key);//遍歷查詢判斷商品項(xiàng)是否存在if(bookItem!=null){
if(bookItem.getBook().getId()==book.getId()){bookItem.setCount(bookItem.getCount()+1);subtotal(bookItem,book);//小計(jì)金額returnbookItem;}}}
returnnull;}
//判斷數(shù)據(jù)庫(kù)中是否有欲添加的商品
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;//判斷數(shù)據(jù)庫(kù)查詢結(jié)果中商品是否存在,如果存在封裝到VO中}}
returnnull;}
//小計(jì)金額
privatevoidsubtotal(BookItembookItem,Bookbook){
bookItem.setSubtotal(bookItem.getCount()*bookItem.getBook().getBookPrice());}
//向新產(chǎn)生的商品項(xiàng)中添加商品
privatevoidaddShoppingItem(BookItembookItem,Bookbook){bookItem.setBook(book);bookItem.setCount(1);
subtotal(bookItem,book);//小計(jì)金額}
//添加購(gòu)物車
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);//數(shù)據(jù)庫(kù)中商品信息if(book!=null){
bookItem=isEquals(shoppingCart,book);//購(gòu)物車中商品項(xiàng)if(bookItem==null){
bookItem=newBookItem();
addShoppingItem(bookItem,book);
Useruser=(User)session.getAttribute("user");if(user==null||user.equals("")){
log.debug("向購(gòu)物車中添加了"+bookItem.getCount()+"本的書");}else{
log.debug(user.getUsername()+"向購(gòu)物車中添加了"+bookItem.getCount()+"本的書");}}}else{
//商品不存在
request.setAttribute("message",message);return"index.jsp";}}else{
//購(gòu)物車不存在的情況,只需判斷數(shù)據(jù)庫(kù)中商品是否存在,然后再添加商品項(xiàng)
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("向購(gòu)物車中添加了"+bookItem.getCount()+"本
的書");}else{
log.debug(user.getUsername()+"向購(gòu)物車中添加了
"+bookItem.getCount()+"本的書");}
}else{
//商品不存在
request.setAttribute("message",message);return"index.jsp";}}
shoppingCart.put(book.getId(),bookItem);//將商品編號(hào)和商品項(xiàng)添加至購(gòu)物車
session.setAttribute("shoppingcart",shoppingCart);getTotalPrice(session);}else{
//沒(méi)有創(chuàng)建會(huì)話連接
message="不能夠創(chuàng)建會(huì)話連接……";
request.setAttribute("message",message);return"fail.jsp";}
return"shoping.jsp";}
//統(tǒng)計(jì)總金額
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è)以及購(gòu)物車部分業(yè)務(wù)
publicclassShoppingBo{//驗(yàn)證用戶名密碼
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;}
//查看注冊(cè)用戶名和郵箱是否存在
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;}
//注冊(cè)用戶名密碼
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語(yǔ)句查詢商品,參數(shù)放入到ArrayList中
publicMap[]queryAllThingInWhere(Stringsql,ListparamList)throwsSQLException,NamingException{
returnnewShoppingDao().queryWareList(sql,paramList);}
//用id查詢書
publicMap[]queryBookList(intcid)throwsSQLException,NamingException{
returnnewShoppingCartDao().queryBookList(cid);}
//查看書項(xiàng)中是否有已選書籍
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;}
//小計(jì)
privatevoidsubtotal(BookItembookItem,Bookbook){
bookItem.setSubtotal(bookItem.getCount()*bookItem.getBook().getBookPrice());}
//添加書
privatevoidaddShoppingItem(BookItembookItem,Bookbook){
bookItem.setBook(book);bookItem.setCount(1);subtotal(bookItem,book);}
//向書中添加數(shù)據(jù)
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;}
//添加購(gòu)物車
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)建會(huì)話連接……";
request.setAttribute("message",message);return"fail.jsp";}
return"shoppingcartpage/shoppingcart.jsp";}
//返回商品總價(jià)
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底層數(shù)據(jù)層代碼
//javabean封裝數(shù)據(jù)庫(kù)讀取數(shù)據(jù)。
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è)務(wù)代碼
由于項(xiàng)目代碼繁多,請(qǐng)參見(jiàn)附錄A源代碼。
5.4程序設(shè)計(jì)說(shuō)明
5.4.1登錄頁(yè)面,如圖1-1-1
圖1-1-1
5.4.2用戶注冊(cè),如圖1-1-2
圖1-1-2
5.4.3留言頁(yè)面,如圖1-1-3
圖1-1-3
5.4.4購(gòu)物車,如圖1-1-4
圖1-1-4
5.4.5普通搜索,如圖1-1-5
圖1-1-5
5.4.6高級(jí)搜索,如圖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運(yùn)行日志,如圖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
結(jié)論
系統(tǒng)設(shè)計(jì)選用的開(kāi)發(fā)軟件是myeclipse,后臺(tái)數(shù)據(jù)庫(kù)為Mysql。網(wǎng)絡(luò)書店目標(biāo)是基于先進(jìn)的頁(yè)面處理和JSP技術(shù)。網(wǎng)絡(luò)書店系統(tǒng)設(shè)計(jì)不僅要考慮書店目標(biāo)的實(shí)現(xiàn),而且更要關(guān)心實(shí)現(xiàn)的過(guò)程以及用戶在這個(gè)瀏覽的過(guò)程中獲得信息以及在消費(fèi)中的安全問(wèn)題。針對(duì)Web網(wǎng)絡(luò)書店的特點(diǎn),從用戶的實(shí)際需求出發(fā),設(shè)計(jì)和規(guī)劃出一套適用的基于Web的網(wǎng)絡(luò)書店系統(tǒng),解決使用時(shí)的不便和安全隱患,將圖書銷售信息更清晰化,更便捷化。通過(guò)直觀的網(wǎng)站布局,讓用戶在獲取消費(fèi)信息和資源的前提下,擁有更簡(jiǎn)單的操作來(lái)實(shí)現(xiàn)繁雜的消費(fèi)流程。
致謝
首先,在我撰寫這篇畢業(yè)論文時(shí),我要感謝學(xué)校給我的良好教育,使我掌握很多知識(shí)。然后我要感謝眾多老師對(duì)我的大力支持,沒(méi)有老師的幫助我不可能完成這個(gè)項(xiàng)目?傊,千言萬(wàn)語(yǔ)一句話,謝謝!
參考文獻(xiàn)
[1](美)韋斯.《數(shù)據(jù)結(jié)構(gòu)與算法分析》.出版社:機(jī)械工業(yè)201*.[2]李軍.《高性能MySQL》.出版社:電子工業(yè)201*第二版.
[3](英)福塔.《MySQL必知必會(huì)》.出版社:人民郵電201*(9).[4]王志剛.《MySQL高效編程》.出版社:人民郵電201*.
[5]鄧芳偉.《基于處理分布的C/S計(jì)算模式的研究》.計(jì)算機(jī)工程與科學(xué),1999.[6]羅娜,林和平,袁福宇.《面向?qū)ο筌浖䴗y(cè)試的方法研究[J]》.東北師大學(xué)報(bào)(自然科學(xué)版),201*.
[7]田苗苗.《基于面向?qū)ο蠹夹g(shù)的軟件開(kāi)發(fā)方法[J]》.吉林師范大學(xué)學(xué)報(bào)(自然科學(xué)版),201*.
[8]Y.DanielLiang著李娜譯.《java語(yǔ)言程序設(shè)計(jì)基礎(chǔ)篇(第8版)》.北京:機(jī)械工業(yè)出版社,201*.
[9]PaulDuBois.《MySQLCookbook》,出版社:O’ReillyMedia201*.
[10]半場(chǎng)方人著,孔令峰譯.《javaScript&DynamicHTML語(yǔ)法辭典》.出版社:中國(guó)青年出版社201*.
[11]王新著,《SQL語(yǔ)法與范例詳解詞典》.出版社:機(jī)械工業(yè),201*.[12](美)?藸.《java編程思想》.出版社:機(jī)械工業(yè)201*.
[13]袁然,鄭自國(guó),來(lái)為國(guó),《java案例開(kāi)發(fā)集錦(第二版)》,電子工業(yè)出版社,201*年.
附錄A
友情提示:本文中關(guān)于《網(wǎng)上書店系統(tǒng)總結(jié)報(bào)告》給出的范例僅供您參考拓展思維使用,網(wǎng)上書店系統(tǒng)總結(jié)報(bào)告:該篇文章建議您自主創(chuàng)作。
來(lái)源:網(wǎng)絡(luò)整理 免責(zé)聲明:本文僅限學(xué)習(xí)分享,如產(chǎn)生版權(quán)問(wèn)題,請(qǐng)聯(lián)系我們及時(shí)刪除。