網(wǎng)上書店畢業(yè)論文
《網(wǎng)上書店畢業(yè)論文》由會員分享,可在線閱讀,更多相關(guān)《網(wǎng)上書店畢業(yè)論文(39頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、 網(wǎng)上書店Online BookStore System姓 名: 學(xué) 號: 指導(dǎo)教師: 專業(yè)名稱: 計(jì)算及應(yīng)用技術(shù) 所在系部: 信息工程系 二一二年六月畢業(yè)論文(設(shè)計(jì))開題報(bào)告姓名 班級 指導(dǎo)教師 學(xué)號20103042畢業(yè)論文(設(shè)計(jì))題目網(wǎng)上書店1.選題目的和意義:一、選題目的:隨著 Internet 技術(shù)的發(fā)展,人們的日常生活已經(jīng)離不開網(wǎng)絡(luò)。未來社會人們的生活和工作將越來越依賴于數(shù)字技術(shù)的發(fā)展,越來越數(shù)字化、網(wǎng)絡(luò)化、電子化、虛擬化。電子商務(wù)也隨著網(wǎng)絡(luò)的發(fā)展日益和人們的生活貼近。網(wǎng)上購物也成為了電子商務(wù)的一個(gè)時(shí)尚,而網(wǎng)上書店是最普遍,也最流行的一個(gè)動態(tài)的電子商務(wù)網(wǎng)站,它使每一位顧客不用出門在家
2、里就能夠通過上網(wǎng)來輕松購買自己喜愛的書籍。為此本人選擇網(wǎng)上書店系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)此題目。二、選題意義:網(wǎng)上書店為人們提供了更廣闊的環(huán)境:人們不受時(shí)間的限制,不受空間的限制,不受傳統(tǒng)購物的諸多限制,可以隨時(shí)隨地在網(wǎng)上交易。更廣闊的市場:在網(wǎng)上這個(gè)世界將會變得很小,一個(gè)商家可以面對全球的消費(fèi)者,而一個(gè)消費(fèi)者可以在全球的任何一家商家購物。更快速的流通和低廉的價(jià)格:電子商務(wù)減少了商品流通的中間環(huán)節(jié),節(jié)省了大量的開支,從而也大大降低了商品流通和交易的成本。更符合時(shí)代的要求:如今人們越來越追求時(shí)尚、講究個(gè)性,注重購物的環(huán)境,網(wǎng)上購物,更能體現(xiàn)個(gè)性化的購物過程。具體安排進(jìn)度:2011 年 3 月 1 日30
3、日,選好課題,查找資料,編寫提綱;2011 年 4 月 1 日20 日,了解論文的格式,咨詢指導(dǎo)老師從哪方面入手,進(jìn)行寫的狀態(tài)形成初稿,形成初稿;2011 年 4 月 21 日5 月 10 日,提交初稿,在指導(dǎo)老師的指導(dǎo)下,形成二稿;2011 年 5 月 11 日5 月 31 日,提交二稿,在老師的指導(dǎo)下修改定稿并準(zhǔn)備答辯。 2 摘要摘要JAVA 語言是目前 Internet 上大型的 WEB 應(yīng)用程序開發(fā)時(shí)使用得最熱門的編程語言,本文描述了JAVA 和 JSP 技術(shù)的特點(diǎn)以及在互聯(lián)網(wǎng)上的使用情況,介紹這兩種技術(shù)的重要編程方法和兩者之關(guān)的聯(lián)系,同時(shí)也會應(yīng)用相關(guān)的 Struts 框架,并完成一個(gè)
4、基于這種技術(shù)的網(wǎng)上書店系統(tǒng)?!娟P(guān)鍵字】JAVA, Struts, Servlet, JSP, 網(wǎng)絡(luò)編程, 電子商務(wù), 網(wǎng)上書店AbstractAt present JAVA is the hottest programming language for WEB development, This text described the characteristics of JAVA and JSP technology and the state of operating on Internet, It introduced the relationship between them and t
5、he important programming method of the double technology, And also show the Struts technology, And work out an online bookstore system base on this kind of technology. Keywords: JAVA, Struts, Servlet, JSP, web program, internet, bookshop 3 前 言 隨著 Internet 國際互聯(lián)網(wǎng)的發(fā)展,越來越多的企業(yè)開始建造自己的網(wǎng)站?;贗nternet 的信息服務(wù),商
6、務(wù)服務(wù)已經(jīng)成為現(xiàn)代企業(yè)一項(xiàng)不可缺少的內(nèi)容。很多企業(yè)都已不滿足于建立一個(gè)簡單的僅僅能夠發(fā)布信息的靜態(tài)網(wǎng)站。現(xiàn)代企業(yè)需要的是一個(gè)功能強(qiáng)大的,能提供完善的電子商務(wù)服務(wù)的動態(tài)商務(wù)網(wǎng)站。JSP 是 Sun 公司推出的一種網(wǎng)站開發(fā)技術(shù),Sun 公司借助自己在 Java 上的不凡造詣,又把人們引進(jìn) JSP 時(shí)代,JSP 即 Java Server Page,它可以在 Servlet 和JavaBean 的支持下,完成功能強(qiáng)大的 Web 應(yīng)用程序。所以,在我的畢業(yè)設(shè)計(jì)中,我采用了 JSP 作為開發(fā)工具,構(gòu)建了一個(gè)能實(shí)現(xiàn)簡單的小型動態(tài)商務(wù)網(wǎng)站網(wǎng)上書店。該系統(tǒng)能實(shí)現(xiàn)用戶的注冊、登錄功能;能夠?qū)崿F(xiàn)商品的查詢,訂購等
7、功能。該系統(tǒng)基本上具備一個(gè)網(wǎng)上商品銷售系統(tǒng)應(yīng)該具備的功能,該設(shè)計(jì)項(xiàng)目基本上體現(xiàn)了構(gòu)建一個(gè)動態(tài)商務(wù)網(wǎng)站所需要的技術(shù)。通過這次的畢業(yè)設(shè)計(jì),我了解了目前流行的動態(tài)商務(wù)網(wǎng)站的構(gòu)成和運(yùn)作原理,掌握了用 JSP 構(gòu)建動態(tài)網(wǎng)站的相關(guān)知識和技術(shù)原理,鍛煉了自己的動手實(shí)踐能力。更重要的是,通過這次的畢業(yè)設(shè)計(jì),我培養(yǎng)出了刻苦鉆研的學(xué)習(xí)精神和嚴(yán)肅認(rèn)真的學(xué)習(xí)態(tài)度,這對我以后的學(xué)習(xí)和工作有很大的益處。在這次畢業(yè)設(shè)計(jì)過程中,我得到了指導(dǎo)老師李家兵老師和其他同組同學(xué)的悉心指導(dǎo)。在此,我對他們表示衷心的感謝! 4 第一章第一章 概述概述1.11.1 開發(fā)背景開發(fā)背景隨著時(shí)代的發(fā)展,信息技術(shù)、Internet/Intranet
8、 技術(shù)、數(shù)據(jù)庫技術(shù)的不斷發(fā)展完善,網(wǎng)絡(luò)進(jìn)程的加快,傳統(tǒng)的購物方式也越來越不能滿足人們快節(jié)奏的生活需求,使得企業(yè)的 IT 部門已經(jīng)認(rèn)識到 Internet 的優(yōu)勢,電子商務(wù)就是在這樣一個(gè)背景下產(chǎn)生發(fā)展起來的。伴隨著電子商務(wù)技術(shù)的不斷成熟,電子商務(wù)的功能也越來越強(qiáng)大,注冊用戶可以在網(wǎng)上搜索購買到自己想要的各種商品,初步讓人們體會到了足不出戶,便可隨意購物的快感。我的畢業(yè)設(shè)計(jì)也就正是一個(gè)電子商務(wù)系統(tǒng)的開發(fā)-網(wǎng)上商品銷售系統(tǒng)。1.21.2 JSPJSP 簡介簡介JSP(Java Server Pages)是由 Sun Microsystems 公司倡導(dǎo)、許多公司參與一起建立的一種動態(tài)網(wǎng)頁技術(shù)標(biāo)準(zhǔn),JS
9、P 技術(shù)在 Servlet 技術(shù)基礎(chǔ)上發(fā)展起來的,它正在飛速發(fā)展中,現(xiàn)已成為 Java 服務(wù)器編程的重要組成部分。它雖然還未成型,但是它必將和 J2EE(Java 2 Enterprise Edition)一起發(fā)展。JSP 是結(jié)合 markup(HTML 和 XML)和 Java 代碼來處理一種動態(tài)頁面。每一頁第一次被調(diào)用時(shí),通過 JSP 引擎自動被編譯成 Servlet,然后被執(zhí)行,以后每次調(diào)用時(shí),執(zhí)行編譯過的 Servlet。JSP 提供了多種方式訪問 Java class、Servlet、Applets 和 Web Server,因此,Web 應(yīng)用的功能可以分成多個(gè)明確定義公用接口的組件
10、,通過 JSP 將它 5 們結(jié)合在一起。1.2.11.2.1 JSPJSP 的運(yùn)行原理的運(yùn)行原理在 JSP 第一次獲得來自于客戶端瀏覽器的請求時(shí),JSP 文件將被 JSP 引擎(JSP engine)轉(zhuǎn)換成一個(gè) Servlet,即將”.jsp”文件編譯成 Java Class 文件。當(dāng)Servlet 引擎接收到請求后,如果設(shè)置了使用最新的 JSP,它就會去找 JSP 文件,檢查該文件在上次編譯后是否改動過。如果改動過,就會重新編譯生成新的 Servlet,最終將請求轉(zhuǎn)交給編譯好的 Servlet 引擎執(zhí)行。如圖 1-1:圖 1-1 JSP 運(yùn)行原理Client客戶端客戶端請求請求(Reques
11、t)Web Server響應(yīng)響應(yīng)(Response)Serverextension服務(wù)器擴(kuò)展服務(wù)器擴(kuò)展ServletengineJSPengineServlet 引引擎擎JSP 引擎引擎ClassloaderJavacomplierJSPparser類載入器類載入器Java 編譯器編譯器JSP 語法分析語法分析器器 6 在編譯時(shí)如果發(fā)現(xiàn) JSP 文件有任何語法錯(cuò)誤,轉(zhuǎn)換過程將中斷,并向客戶端發(fā)出出錯(cuò)信息;如果編譯成功,則所轉(zhuǎn)換產(chǎn)生的 Servlet 代碼被編譯,然后該 Servlet 被JSP 引擎加載到內(nèi)存中。此時(shí) JSP 引擎還請求了 jspInit()方法的執(zhí)行,并對此Servlet 初
12、始化。JspInit()方法在 Servlet 的生命周期中只被請求一次,然后將被調(diào)用來處理客戶端的請求和回復(fù)操作。對于所有隨后對該 JSP 文件的請求,服務(wù)器將檢查該 JSP 文件自最后一次被存取后是否經(jīng)過修改。如果沒有修改,則將請求交還給還在內(nèi)存中的 Servlet 的 jspService()方法,執(zhí)行回復(fù)操作。由于 Servlet 始終駐于內(nèi)存,所以響應(yīng)是非常快的。Jsp 頁面在第一次訪問時(shí)由于要轉(zhuǎn)化和編譯,運(yùn)行速度較慢,但是當(dāng)?shù)诙卧L問該頁時(shí),由于文件已經(jīng)被編譯成字節(jié)碼文件了,所以速度非常得快。1.2.21.2.2 JSPJSP 頁面的組成頁面的組成JSP 頁面看上去像標(biāo)準(zhǔn)的 HTM
13、L 和 XML 頁面,并附帶有 JSP 引擎能夠處理和解析執(zhí)行的代碼與組件。通常,JSP 代碼和組件用于創(chuàng)建在最終頁面上顯示的文本。通常來說,JSP 頁面包括編譯指令,動作指令,聲明,表達(dá)式和程序段等內(nèi)容。1.21.2.3.3 JavaBeanJavaBean 技術(shù)介紹技術(shù)介紹JavaBean 技術(shù)是一種基于 Java 的組件技術(shù),JavaBean 組件可以用來執(zhí)行復(fù)雜的計(jì)算任務(wù),或負(fù)責(zé)與數(shù)據(jù)庫的交互以及數(shù)據(jù)的提取等,是解決代碼重用問題的一種策 7 略。以前的組件無法實(shí)現(xiàn)真正的代碼重用,其主要原因就是它們對于處理平臺的依賴和對開發(fā)語言的依賴過重。由于 Java 語言在這些方面所具有的特點(diǎn)和優(yōu)勢
14、,使得基于它的軟件 JavaBean 組件技術(shù)倍受人們的關(guān)注。它的任務(wù)就是:一次編寫,可以在任何地方執(zhí)行,可以在任何地方重用。JavaBean 組件可以在任何地方?jīng)_用包括了可以在應(yīng)用程序、其他組件、文檔、Web 站點(diǎn)和應(yīng)用程序構(gòu)造器工具等多種方案中再利用。為了創(chuàng)建和使用 Java 軟件組件,JavaBean 被實(shí)現(xiàn)為一種獨(dú)立于平臺和結(jié)構(gòu)的應(yīng)用程序接口,它的實(shí)現(xiàn)可以忽略內(nèi)部的結(jié)構(gòu)及細(xì)節(jié)問題,只需要定義其外部的特征及對外功能就行。其中,屬性、方法和事件三種接口可以獨(dú)立對外進(jìn)行開發(fā)。JavaBean 的實(shí)質(zhì)就是一個(gè).class 文件,也可以成為類文件。JavaBean 以 binary格式保存,可以
15、保護(hù) Java 源代碼不容易被他人抄襲。1.2.41.2.4 JSPJSP 的運(yùn)行環(huán)境的運(yùn)行環(huán)境要運(yùn)行 Jsp,需要有支持 Jsp 的服務(wù)器。這里分 2 種情況:一種是自身就支持 Jsp的服務(wù)器,如 Jrun,Weblogic,JSWDK 等;而另一種則是在不支持 Jsp 的服務(wù)器上安裝Jsp 引擎的插件,如在 IIS,Apache 等服務(wù)器上安裝 WebSphere,tomcat,Resin 等插件。其中主流服務(wù)器是 Weblogic 和 tomcat.Weblogic 是一款功能強(qiáng)大的服務(wù)器軟件,配置比較簡單,而且 Jsp 的擴(kuò)展功能較多,附帶了數(shù)據(jù)庫的 JDBC 驅(qū)動程序。 ,支持 JH
16、TML(一種與 Jsp 十分相似的技術(shù)),是目前市場占有率最高的服務(wù)器。 8 Tomcat 服務(wù)器是 Apache Group Jakarta 小組開發(fā)的一個(gè)免費(fèi)服務(wù)器軟件,適合于嵌入 Apache 中使用,而且,它的源代碼可以免費(fèi)獲得,你可以自由地對它進(jìn)行擴(kuò)充。訪問的地址 http:/jakarta. apache.org/tomacat/index.html, Tomcat 服務(wù)器的兼容性很好,如 WebLogic 服務(wù)器采用其為 Web 服務(wù)器引擎,Jbuilder 將其作為標(biāo)準(zhǔn)的測試服務(wù)器,Sun 公司也將其作為 JSP 技術(shù)應(yīng)用的示例服務(wù)器第二章第二章 需求需求分析分析2.12.1
17、系統(tǒng)說明系統(tǒng)說明本系統(tǒng)是一個(gè)中小型的電子商務(wù)系統(tǒng)-網(wǎng)上書店,可以為各類用戶提供方便的在線買書環(huán)境,符合目前國內(nèi)流行的電子商務(wù)模式。用戶可以在系統(tǒng)中實(shí)現(xiàn)注冊、瀏覽商品、搜索查詢商品、下定單、處理定單等功能;管理員可以通過用戶管理、定單管理、商品管理、評論管理等管理功能來對系統(tǒng)進(jìn)行維護(hù)更新。2.22.2 系統(tǒng)功能簡介系統(tǒng)功能簡介2.2.12.2.1 基本功能基本功能 游客可以瀏覽網(wǎng)站 用戶登陸 用戶能夠?yàn)g覽網(wǎng)站 提供搜索引擎,使用戶能夠按特定的條件對所需商品進(jìn)行搜索 9 用戶下定單購買商品2.2.22.2.2 用戶界面設(shè)計(jì)用戶界面設(shè)計(jì)第三章第三章 系統(tǒng)設(shè)計(jì)系統(tǒng)設(shè)計(jì)3.13.1 系統(tǒng)設(shè)計(jì)思想系統(tǒng)設(shè)計(jì)
18、思想本系統(tǒng)采用三層架構(gòu)設(shè)計(jì),它的工作原理如圖 3-1 所示。圖 3-1 10 采用三層構(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)功能模塊化如圖 3-2 為本系統(tǒng)的功能模塊圖。用戶登錄在線購書查看購物車在線購書察看訂單信息察看圖書詳細(xì)購買圖書查詢察看圖書詳細(xì)資料購買查看訂單詳細(xì)繼續(xù)購書清空購物車提交購物車刪除已經(jīng)選購的圖書修改購買數(shù)量購買 11 圖 3-23.33.3 數(shù)據(jù)庫
19、設(shè)計(jì)數(shù)據(jù)庫設(shè)計(jì)數(shù)據(jù)庫在一個(gè)信息管理系統(tǒng)中占有非常重要的地位,數(shù)據(jù)庫結(jié)構(gòu)設(shè)計(jì)的好壞將直接對應(yīng)用系統(tǒng)的效率,以及實(shí)現(xiàn)的效果產(chǎn)生影響。合理的數(shù)據(jù)庫結(jié)構(gòu)設(shè)計(jì)可以提高數(shù)據(jù)存儲的效率,保證數(shù)據(jù)的完整和一致。3.3.13.3.1 數(shù)據(jù)庫需求分析數(shù)據(jù)庫需求分析針對一般在線書店的需求,得出如下需求信息。用戶分為游客和已注冊用戶。訂單分為單張?jiān)敿?xì)訂單和總訂單。一個(gè)用戶可以購買多本圖書。一個(gè)用戶對應(yīng)一張訂單。一個(gè)列表對應(yīng)多張訂單。針對本系統(tǒng)功能分析,總結(jié)出如下的需求信息。用戶,包括數(shù)據(jù)項(xiàng):用戶 ID、用戶名、密碼。圖書,包括數(shù)據(jù)項(xiàng):圖書編號、圖書名、價(jià)格、圖書介紹。訂單列表,包括數(shù)據(jù)項(xiàng):訂單編號、圖書編號、購書數(shù)量
20、。訂單,包括數(shù)據(jù)項(xiàng):訂單編號、用戶編號、下單時(shí)間。 12 3.3.23.3.2 數(shù)據(jù)庫概念結(jié)構(gòu)數(shù)據(jù)庫概念結(jié)構(gòu)從本系統(tǒng)中規(guī)劃出的實(shí)體有:用戶實(shí)體、圖書實(shí)體、訂單實(shí)體、訂單列表實(shí)體。用戶信息實(shí)體的 E-R 圖如圖 3-4 所示。圖書實(shí)體的 E-R 圖如圖 3-5 所示。訂單實(shí)體的 E-R 圖如圖 3-6 所示。訂單列表實(shí)體的 E-R 圖如圖 3-7 所示。3.3.33.3.3 數(shù)據(jù)庫邏輯機(jī)構(gòu)設(shè)計(jì)數(shù)據(jù)庫邏輯機(jī)構(gòu)設(shè)計(jì)在線書店數(shù)據(jù)庫中各個(gè)表的設(shè)計(jì)結(jié)果如下面的標(biāo)和所示。表 3-8 為圖書信息列表。 13 表 3-8表 3-9 為用戶信息列表。表 3-9表 3-10 為訂單總表,記錄某個(gè)用戶的訂單信息。表
21、3-10表 3-11 為訂單表,記錄但張訂單的具體信息。表 3-11 14 第四章第四章 詳細(xì)設(shè)計(jì)詳細(xì)設(shè)計(jì)4.14.1 系統(tǒng)概述系統(tǒng)概述我設(shè)計(jì)的這個(gè)系統(tǒng)是一個(gè)由 JSP 實(shí)現(xiàn)的網(wǎng)上購書系統(tǒng)。它實(shí)現(xiàn)了基本的登錄驗(yàn)證、查詢商品、分頁處理、購物車處理以及訂單處理功能,其主要界面見圖 4-1:圖 4-14.24.2 系統(tǒng)主要文件系統(tǒng)主要文件 這個(gè)購書系統(tǒng)主要有 2 類文件,一類是 Bean 文件,我把它們統(tǒng)一放在了 cart文件夾里,保存在 jakarta-tomcat-5.0.27commonclassescart 下, (這是 tomcat要求的默認(rèn)存放 Bean 的路徑) ;另一類是 jsp 文
22、件,保存在 jakarta-tomcat-5.0.27webappsROOT。 (這是 tomcat 的默認(rèn)工作環(huán)境) 15 Bean 文件:CartManager.java,OrderEntity.java,OrderItemEntity.javaProductEntity.java,UserEntity.javaJsp 文 件:cart.jsp4.34.3 詳細(xì)代碼及說明詳細(xì)代碼及說明4.3.14.3.1 實(shí)現(xiàn)用戶實(shí)體的實(shí)現(xiàn)用戶實(shí)體的 BeanBean1)用戶作為實(shí)體,我把他的 id, 姓名,密碼作為其屬性在 Bean 里面做了定義,它們都是和數(shù)據(jù)庫里的 user 表相對應(yīng)的,在這個(gè) Be
23、an 里封裝的方法也主要是對這個(gè)表進(jìn)行操作.這個(gè)幾個(gè)屬性都被定義為類的私有成員,外界不可訪問private String id;private String userName;private String userPassword;2)構(gòu)造函數(shù)里做了 2 件事情,第一:尋找數(shù)據(jù)庫連接驅(qū)動;第二:對上面的 3 個(gè)私有成員初始化:public static String sDBDriver = sun.jdbc.odbc.JdbcOdbcDriver;public static String sConnStr = jdbc:odbc:cart;public static Connection co
24、nn = null;public UserEntity(String id,String userName,String userPassword)try 16 Class.forName(sDBDriver); catch(java.lang.ClassNotFoundException e) System.err.println(UserEntity: + e.getMessage();this.id=id;this.userName=userName;this.userPassword=userPassword;3)這個(gè)類我封裝了 2 類方法:一是查找特定用戶名的所有記錄,代碼如下:pu
25、blic static UserEntity queryUser(String userName) throws SQLExceptiontry Class.forName(sDBDriver); catch(java.lang.ClassNotFoundException e) System.err.println(UserEntity: + e.getMessage();String sql=select id,user_name,user_password from user where user_name= ? ; 17 ResultSet rs = null;try conn = D
26、riverManager.getConnection(sConnStr); PreparedStatement prepStmt = conn.prepareStatement(sql);prepStmt.setString(1,userName);rs = prepStmt.executeQuery(); catch(SQLException ex) System.err.println(OrderItemEntity executeQuery: + ex.getMessage();UserEntity user=null;if(rs.next()user=new UserEntity(rs
27、.getString(1),rs.getString(2),rs.getString(3);return user;該類封裝的另一種方法是:用戶名和密碼的獲得。這個(gè)主要是為了方便后面驗(yàn)證用戶合法性使用public String getUserName() 18 return userName;public String getUserPassword()return userPassword;4.3.24.3.2 實(shí)現(xiàn)商品實(shí)體的實(shí)現(xiàn)商品實(shí)體的 BeanBean雖然我做的是一個(gè)購書系統(tǒng),但考慮到系統(tǒng)的可擴(kuò)展性,我把書當(dāng)作一種商品來進(jìn)行定義。同樣,參照數(shù)據(jù)庫里的 product 表,我給商品這個(gè)類
28、定義了如下 4 個(gè)屬性,商品 id,商品名稱,商品價(jià)格,商品 note,其類型同樣是該類的私有屬性:private String id;private String productName;private String productPrice;private String productNote;1) 其構(gòu)造函數(shù)和用戶實(shí)體類基本上一致,所以代碼及其說明我在這里就省略了。2) 對商品的操作也主要是 2 類,一類是對特定商品的查詢,其原理和查詢用戶是一樣的,但是有一點(diǎn)小小的區(qū)別,即查詢商品可以使查詢所有的商品,或者是查詢特定 id 的商品,我通過以下代碼把這 2 種查詢合在了queryProdu
29、ct 這個(gè)函數(shù)里:String sql=select id,product_name,product_price,product_note from product ; 19 if(productIpareTo()!=0)sql=sql+ where id = ? ;Vector v=new Vector();ResultSet rs = null;其關(guān)于連接數(shù)據(jù)庫,查詢記錄的代碼和上面的大致雷同,所以在這里就省略了。顯示商品是分頁顯示的,其代碼如下:while(rs.next()+i;if(ipageCount*pageSize)if(i=(pageCount+1)*pageSize)v.a
30、dd(new ProductEntity(rs.getString(1),rs.getString(2),rs.getString(3),rs.getString(4);elsebreak;這一段代碼的主要功能是:每一頁最多顯示 pageSize 個(gè)商品,如果超過 pageSize個(gè),就分頁顯示。PageSize 在后面將會定義,其值我設(shè)置為 10。 20 3) 第二類方法是查詢商品的 id,全稱,價(jià)格和 note. 例如查找商品的 ID:public String getProductId()return id; 4.3.34.3.3 實(shí)現(xiàn)訂購單實(shí)體的實(shí)現(xiàn)訂購單實(shí)體的 BeanBean 客戶
31、每次購買一種商品都會產(chǎn)生一次訂購單,它包括訂單號,所購買的書號,所購買這種書的數(shù)量,這些構(gòu)成了這個(gè)類的私有屬性:private String id;private String orderId;private String productId;private String productNum; 21 1) 客戶每次選中一種商品后,點(diǎn)擊放入購物車,就會產(chǎn)生一個(gè)訂單,其實(shí)現(xiàn)代碼如下:String sql=insert into order_item(order_id,product_id,product_num) values(?,?,?) ;ResultSet rs = null;try co
32、nn = DriverManager.getConnection(sConnStr); PreparedStatement prepStmt = conn.prepareStatement(sql);prepStmt.setString(1,orderId);prepStmt.setString(2,productId);prepStmt.setString(3,productNum);prepStmt.executeUpdate();訂購單,書號,購買數(shù)量都是作為參數(shù)傳過來的。很明顯,新建一張訂購單其實(shí)就是在 order_item 表里插入一條新紀(jì)錄就可以了。其原理已經(jīng)在上面說過來了,就不在
33、此重復(fù)了。2)在后面的購物車?yán)?,一名顧客的最終消費(fèi)總額就是根據(jù)這里一張張的訂購單得到的,所以查找特定訂單號的訂購單是這個(gè)類里面不可缺少的方法,它的算法實(shí)質(zhì)上就是條件查詢,和前面的無條件查詢相比,我只把 sql 語句作了改動:String sql=select id,order_id,product_id,product_num from order_item where order_id= ? ; 22 3)第 3 個(gè)被封裝的方法是設(shè)置,獲得訂購單號,書號,定購數(shù)量,并且還可以獲得 session price.4.3.44.3.4 實(shí)現(xiàn)購物車實(shí)體的實(shí)現(xiàn)購物車實(shí)體的 BeanBean在現(xiàn)實(shí)生活中
34、,人們?nèi)コ匈I東西,都是把商品放在一個(gè)購物籃里,等到把所有要買的東西選購?fù)戤吅?,一起拿到收銀臺前付錢。我在程序里定義的購物車實(shí)體就是模擬這個(gè)功能.作為購物車,購物人,購物時(shí)間,所購書的總價(jià)格都是必不可少的:private String id;private String userName;private String orderDate;private String orderPrice;我覺得在這個(gè)Bean里面主要要解決的一個(gè)問題,如何解決一個(gè)新的購物車。當(dāng)一個(gè)顧客買完書提交購物車后,我們必須插入一個(gè)新的購物車紀(jì)錄,這是由insertOrder()方法來實(shí)現(xiàn)的:其插入代碼如下:conn =
35、DriverManager.getConnection(sConnStr); PreparedStatement prepStmt = conn.prepareStatement(sql);String curDate=(java.util.Calendar.getInstance().getTime().toString();prepStmt.setString(1,userName);prepStmt.setString(2,curDate); 23 prepStmt.setString(3,orderPrice);prepStmt.executeUpdate();這里,插入的原理和前面是
36、相同的,但是有一個(gè)地方需要解釋:即購物時(shí)間字段,是采用的java.util.Calendar.getInstance().getTime(),這是一個(gè)庫函數(shù),被封裝在java.util,在這個(gè)類定義的開頭,我把這個(gè)庫文件包含進(jìn)來:import java.util.*;這個(gè)方法返回的結(jié)果必須把轉(zhuǎn)化成 String,否則后面插入數(shù)據(jù)庫時(shí)會出現(xiàn)類型不匹配的錯(cuò)誤。toString()就是用來實(shí)現(xiàn)類型轉(zhuǎn)換的。為了方便后面對這個(gè)購物車進(jìn)行操作,我在這個(gè)方法里還獲得了該購物車的 id: String selectStatement =select id +from orderlist where user_
37、name=? order by id desc ; PreparedStatement prepStmt = conn.prepareStatement(selectStatement); prepStmt.setString(1,userName); ResultSet rs = prepStmt.executeQuery(); rs.next(); String result=rs.getString(1);return result;在sql里,查詢特定用戶購物車的id號,并且按照降序排列。是因?yàn)?,針對一個(gè)網(wǎng)上購書系統(tǒng),顧客可以多次在這里購書,那么在購物車表單里,針對一個(gè)顧客會有很多條他
38、的購物紀(jì)錄,而在數(shù)據(jù)庫里,各條記錄的id是安裝時(shí)間先后順序逐漸遞增的, 24 如果安裝降序排列,那么得到的第一條記錄則是最新插入的紀(jì)錄。result=rs.getString(1)表示只把該條記錄的第一個(gè)字段傳給result,即把購物車的id號傳給result。 4.3.54.3.5 實(shí)現(xiàn)購物實(shí)體的實(shí)現(xiàn)購物實(shí)體的 BeanBean1)買書的第一步便是用戶登錄,現(xiàn)在購書網(wǎng)站都要求已經(jīng)注冊過的用戶才能購買書籍,這樣便于網(wǎng)站管理。checkUser(String userName,String userPassword)就是用來檢驗(yàn)用戶的合法性的:public int checkUser(Strin
39、g userName,String userPassword) int result=0;UserEntity user=null; try user=UserEntity.queryUser(userName); catch(SQLException ex) System.err.println(ex.getMessage();if(user=null)return 0;String pass=user.getUserPassword(); 25 if(pareTo(userPassword)=0) result=1;this.userName=userName;return result;
40、這個(gè)函數(shù)傳過來的 2 個(gè)參數(shù)分別是用戶登錄時(shí)候填寫的用戶名和密碼,前面已經(jīng)介紹過,在 UserEntity 里面有一個(gè)查詢特定用戶名的記錄的方法,我根據(jù)用戶登錄上填寫的用戶名查詢記錄:queryUser(userName),并把結(jié)果賦給一個(gè)對象 user。把傳過來的密碼和和這個(gè)對象的密碼比較,pareTo(userPassword)=0,如果相同,則用戶是合法的,可以購買本網(wǎng)站的書籍,result=1;如果不相同,則說明他是非法登錄的,只能瀏覽網(wǎng)站,不能買書,result=0。Result 就是這個(gè)函數(shù)的返回值,是一個(gè)整型變量。2)證明是合法用戶后,就必須給這個(gè)用戶一個(gè)購物車,用戶每次選中一本
41、書, 26 點(diǎn)擊“放入購物車”,就必須添加一個(gè)訂購單。這就相當(dāng)于把用戶要買的書放入購物車?yán)?,insertOrder()就是用來實(shí)現(xiàn)這些的,其主要代碼如下:public void insertOrder()/insert intoDataBasetryif(orderPrice=0)return;OrderEntity oe=new OrderEntity(null,userName,null,Integer.toString(orderPrice);orderId=oe.insertOrder();for(int i=0;iorderItem.size();i+)OrderItemEntity
42、 oi=(OrderItemEntity)orderItem.elementAt(i);oi.setOrderId(orderId);oi.insertOrderItem(); catch(SQLException ex) System.err.println(InsertOrder executeQuery: + ex.getMessage(); orderItem.removeAllElements();orderPrice=0; 27 當(dāng) orderPrice=0,說明用戶還沒有開始買書,在這個(gè)時(shí)候創(chuàng)建購物車,并且獲得它的 id 號,保存在 orderId 這個(gè)變量里。一個(gè)客戶可以有很多
43、張訂購單,但是購物車id 號是一樣的,所以在插入訂購單的時(shí)候,必須把其購物車的 id 號設(shè)置為 orderId。3)addOrderItem(String productId,String productPrice)實(shí)現(xiàn)的是購買一種商品多次:public void addOrderItem(String productId,String productPrice) for(int i=0;iorderItem.size();i+) OrderItemEntity oi=(OrderItemEntity)orderItem.elementAt(i);String pId=oi.getProduc
44、tId();if(pIpareTo(productId)=0)int num=Integer.parseInt(oi.getProductNum();+num;oi.setProductNum(Integer.toString(num);this.orderPrice+=Integer.parseInt(productPrice);return; OrderItemEntity oiNew=new OrderItemEntity(null,null,productId,1,Integer.parseInt(productPrice);orderItem.add(oiNew);this.orde
45、rPrice+=Integer.parseInt(productPrice); 28 因?yàn)槊奎c(diǎn)擊一次“放入購物車” ,只能購買相應(yīng)的商品一次,并且數(shù)量之能為 1。但是購買的是同一個(gè)商品,其 productId 是一致的,要重新寫入一張訂購單,就必須把原來 productId 的訂購單修改一下就可以了。比較用戶確實(shí)是買的一樣 id 的書:pIpareTo(productId),如果是,則修改訂購單的數(shù)量,num+,把總價(jià)格加上本書的價(jià)格:this.orderPrice+=Integer.parseInt(productPrice); 通過以上的操作,把修改后的結(jié)果作為新的屬性重新插入成新的訂購單
46、。4)在 CartManager 類里,還封裝了一個(gè)書查詢的方法,主要是調(diào)用了ProductEntity 類里的 queryProduct 方法。需要說明的地方是,先是查詢結(jié)果的時(shí)候分頁顯示的,每頁顯示的書籍的資料最多不超過 10 本。這是由 pageSize 這個(gè)變 29 量來實(shí)現(xiàn)的。關(guān)于這個(gè)變量,我把它定義成 CartManage 的私有成員:private int pageSize=10;public void setPageSize(int pageSize)this.pageSize=pageSize;4.3.64.3.6 前臺運(yùn)行程序前臺運(yùn)行程序 cart.jspcart.jsp通
47、過這個(gè) jsp 程序,我實(shí)現(xiàn)了 3 個(gè)功能:1:顯示主頁面;2:把主頁面里瀏覽者的資料和請求傳給后臺的 Bean 來處理;3:調(diào)用 Bean,來實(shí)現(xiàn)系統(tǒng)的登錄,查詢,分頁處理,購書等功能在程序的開頭有這樣 2 條語句:上面已經(jīng)說明,我把所有的 Bean 文件都放在了 cart 里面,要使得能在 jsp 文件中使用它們,就必須用 import 把 cart 包含進(jìn)來。下面我想介紹一下 useBean 這個(gè)動作,通過 useBean 動作我建立了一個(gè)類型為cartManager 的 Bean 對象 cartManager,我實(shí)現(xiàn)的所有功能都是通過調(diào)用這個(gè)對象的 30 方法來實(shí)現(xiàn)的。1)我把主頁面分
48、為 3 個(gè)部分,每個(gè)部分作為一個(gè)表格來處理:實(shí)現(xiàn)登錄框的表格:實(shí)現(xiàn)登錄框的表格: 登錄用戶名:密 碼:實(shí)現(xiàn)書籍清單的表格:實(shí)現(xiàn)書籍清單的表格: 商品ID: 32 商品ID 商品名稱 商品價(jià)格 商品說明 當(dāng)前第頁 實(shí)現(xiàn)購物信息的表格實(shí)現(xiàn)購物信息的表格: : 33 購物車 商品ID 數(shù)量 上面只列出了部分代碼,從上面的代碼里很容易發(fā)現(xiàn)一個(gè)共同點(diǎn),就是它們都是用了標(biāo)簽.我通過這個(gè)標(biāo)簽,把前臺的數(shù)據(jù)傳給后臺的函數(shù).form 有 2 個(gè)很重要的屬性,一是 action,它用來指明從客戶端保存的數(shù)據(jù)傳到哪里去,在我的程序里,它通常都只向 cart.jsp,然后在 ca
49、rt.jsp 里,用 request 對象來接收這些數(shù)據(jù),最終作為函數(shù)的參數(shù)使用;二是 method,它是指傳遞數(shù)據(jù)的方式,在這里我都是采用的 post 方式。Form 里面很重要的另外一個(gè)東西就是:input,它是與用戶進(jìn)行交互的主要工具。根據(jù)不同的類型,可以有不同的作用。我使用了其空白框給用戶填寫數(shù)據(jù),其 type=text,按鈕是 form 里必不可少的,type=submit,只有當(dāng)用戶點(diǎn)擊確定按鈕,客戶端才會最終把這些數(shù)據(jù)傳給 cart,jsp 來處理。2)我在實(shí)現(xiàn)這個(gè)系統(tǒng)的時(shí)候,主要是根據(jù)用戶對頁面的點(diǎn)擊做出回應(yīng)的,所以在cart.jsp 里我設(shè)置了一個(gè) String op=req
50、uest.getParameter(op);當(dāng) op 取不同的值的時(shí)候,就調(diào)用不同的函數(shù)完成不同的功能,其代碼如下: 34 if(op!=null&pareTo(login)=0)int result=cartManager.checkUser(request.getParameter(userName),request.getParameter(userPassword);if(result=1)loginInfo=登錄成功!歡迎你;elseloginInfo=登錄失敗!;/表示顧客點(diǎn)擊的是登錄,這個(gè)時(shí)候就調(diào)用cartManager類里的checkUser()方法,這里用的對象car
51、tManager就是先前在開通通過uesBean動作定義的那個(gè)對象。UserName是剛剛通過登錄表格的form標(biāo)簽傳過來的用戶名,它作為checkUser的實(shí)參。這個(gè)參數(shù)返回一個(gè)int值,1表示登錄成功,0表示登錄失敗。if(op!=null&pareTo(cart)=0)if(cartManager.getUserName().compareTo()!=0)cartManager.addOrderItem(request.getParameter(productId),request.getParameter(productPrice); 35 elseloginInfo=請先登錄
52、!;/如果客戶點(diǎn)擊放入購物車,這時(shí)就會有2種情況,一種是這位顧客還沒有登錄,那么他是不能買書的;另外一種是登錄成功,那必須為這次采購插入一張訂購單。我是通過購物車類中的usename來識別這2種情況的。因?yàn)橹灰卿洺晒Γ到y(tǒng)就會為他創(chuàng)建一個(gè)購物車類的對象,那么他的username一定不為空,就執(zhí)行cartManager 對象的addOrderItem()方法,這個(gè)函數(shù)在調(diào)用的時(shí)候必須傳過去的參數(shù)是:書名號,書價(jià)格。如果比較的結(jié)果為空,則打印請先登錄的提示信息。if(op!=null&pareTo(cartDeleteItem)=0)cartManager.deleteOrderIte
53、m(request.getParameter(productId);/如果顧客把書放入購物車后又不想買了,就會執(zhí)行cartManager對象的 deleteOrderItem()方法,為什么這里不需要像上面一樣比較是否登錄呢?是因?yàn)轭櫩图热灰獎h除訂購單,那么肯定是成功買了書,根據(jù)上面可以知道,賣過書的顧客肯定是成功登錄過的。其中,productId是它的實(shí)參。if(op!=null&pareTo(submitOrder)=0&Integer.parseInt(cartManager.getOrderPrice()!=0) 36 cartManager.insertOrder()
54、;orderInfo=您的購物單已提交,ID是:+cartManager.getOrderId();/最后是顧客購買活動全部結(jié)束,提交購物車,這時(shí)插入這個(gè)購物車,并且核算金額。/set the product listcartManager.setPageSize(10);Vector vProduct=cartManager.queryProduct(pageCount);/ out.print(queryProductId:+cartManager.getQueryProductId()+);/set the orderItem listVector vOrderItem=cartMana
55、ger.getOrderItem(); 37 第五章第五章 總結(jié)總結(jié)本文論述了一個(gè)基于 WEB 的網(wǎng)上商品銷售系統(tǒng),基本上體現(xiàn)了電子商務(wù)各方面的優(yōu)點(diǎn)。我所設(shè)計(jì)的網(wǎng)上書店,主要是熟悉和掌握 JSP 的技術(shù)以及對電子商務(wù)進(jìn)行初步的探討和設(shè)計(jì)。在幾個(gè)月的設(shè)計(jì)過程中,我初步了解了 JSP 的優(yōu)點(diǎn)和先進(jìn)之處,也看到了 JSP 技術(shù)在電子商務(wù)應(yīng)用上的光明前途。通過這次設(shè)計(jì),我設(shè)計(jì)的網(wǎng)上書店基本完成了要求的諸項(xiàng)基本功能,實(shí)現(xiàn)了一個(gè)簡單的不同部分以數(shù)據(jù)為中心的模型,在方案的各部分在實(shí)際運(yùn)作中能夠解決相應(yīng)的問題。在設(shè)計(jì)和制作網(wǎng)上書店這一個(gè)整體項(xiàng)目的過程中,也培養(yǎng)了自己的綜合能力和從全局考慮的思想。將復(fù)雜的問題簡單化,作為電子商務(wù)應(yīng)用的一個(gè)縮影,我所涉及的模塊項(xiàng)目完成了其后臺具有的基本功能,使自己對于電子商務(wù)的了解更加深入和明了。當(dāng)然,其中也遺留下了一些待解決的問題,但出于自己水平有限,作為一個(gè)網(wǎng)上書店系統(tǒng),該項(xiàng)目上有一些不完善和函待改進(jìn)之處,特別是在網(wǎng)站信息的安全性上需要進(jìn)一步加強(qiáng)。 38 參考文獻(xiàn)參考文獻(xiàn)1 汪孝宜、劉中兵、徐佳晶等編著,JSP 數(shù)據(jù)庫開發(fā)實(shí)例精粹,電子工業(yè)出版社,20052 姚曉春、鄭文清等編著,Java 編程技術(shù)教程,清華大學(xué)出版社,19993 吳逸賢、吳目誠編著,Java2 程序設(shè)計(jì),科學(xué)出版社,20034 Http:/5 Http:/ (Jsp 中文網(wǎng))
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2022年數(shù)學(xué)九下《圓周角定理的推論與圓內(nèi)接四邊形》課件(新湘教版)
- 幼兒園眼睛課件
- 直線與橢圓的位置關(guān)系15版
- 北京垃圾分類
- 錨索施工工藝及質(zhì)量控制培訓(xùn)doc資料課件
- 例廣東中醫(yī)藥大學(xué) 中醫(yī)學(xué)
- 水資源的合理利用課件
- 小學(xué)二年級班家長會
- 四.項(xiàng)目的技術(shù)經(jīng)濟(jì)分析
- 安全文明施工圖集萬科版本
- 旅游空間布局課件
- 北師版八下數(shù)學(xué)第五章-分式與分式方程本章專題整合訓(xùn)練課件
- 天然氣地球化學(xué)(與“天然氣”有關(guān)的文檔共46張)
- 北師大版四年級語文下冊《海上日出》精課件
- LED培訓(xùn)資料XXXX