2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩52頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  目錄</b></p><p><b>  前 言2</b></p><p>  第一章概 述3</p><p>  1.1 開(kāi)發(fā)背景3</p><p>  1.2 JSP簡(jiǎn)介4</p><p>  1.2.1 JSP的運(yùn)行原理

2、4</p><p>  1.2.2 JSP頁(yè)面的組成6</p><p>  1.2.3 JavaBean技術(shù)介紹6</p><p>  1.2.4 JSP的運(yùn)行環(huán)境7</p><p>  1.3 系統(tǒng)開(kāi)發(fā)環(huán)境7</p><p>  1.3.1 服務(wù)器的配置7</p><p> 

3、 1.3.2 數(shù)據(jù)庫(kù)后臺(tái)環(huán)境的配置11</p><p>  第二章 需求分析14</p><p>  2.1 系統(tǒng)說(shuō)明14</p><p>  2.2 系統(tǒng)功能簡(jiǎn)介15</p><p>  2.2.1 基本功能15</p><p>  2.2.2 用戶界面設(shè)計(jì)15</p><p&

4、gt;  2.3 系統(tǒng)運(yùn)行環(huán)境15</p><p>  第三章 系統(tǒng)設(shè)計(jì)17</p><p>  3.1 系統(tǒng)設(shè)計(jì)思想17</p><p>  3.2 系統(tǒng)功能模塊化18</p><p>  3.3 數(shù)據(jù)庫(kù)設(shè)計(jì)18</p><p>  3.3.1 數(shù)據(jù)庫(kù)需求分析19</p><

5、p>  3.3.2 數(shù)據(jù)庫(kù)概念結(jié)構(gòu)19</p><p>  3.3.3 數(shù)據(jù)庫(kù)邏輯機(jī)構(gòu)設(shè)計(jì)20</p><p>  第四章 詳細(xì)設(shè)計(jì)22</p><p>  4.1 系統(tǒng)概述22</p><p>  4.2 系統(tǒng)主要文件22</p><p>  4.3 詳細(xì)代碼及說(shuō)明23</p>

6、<p>  4.3.1實(shí)現(xiàn)用戶實(shí)體的Bean23</p><p>  4.3.2實(shí)現(xiàn)商品實(shí)體的Bean26</p><p>  4.3.3 實(shí)現(xiàn)訂購(gòu)單實(shí)體的Bean27</p><p>  4.3.4 實(shí)現(xiàn)購(gòu)物車(chē)實(shí)體的Bean29</p><p>  4.3.5 實(shí)現(xiàn)購(gòu)物實(shí)體的Bean30</p><p

7、>  4.3.6 前臺(tái)運(yùn)行程序cart.jsp35</p><p>  第五章 總結(jié)41</p><p><b>  致謝42</b></p><p><b>  參考文獻(xiàn)43</b></p><p><b>  前 言</b></p><

8、p>  理,鍛煉了自己的動(dòng)手實(shí)踐能力。更重要的是,通過(guò)這次的畢業(yè)設(shè)計(jì),我培養(yǎng)出了刻苦鉆研的學(xué)習(xí)精神和嚴(yán)肅認(rèn)真的學(xué)習(xí)態(tài)度,這對(duì)我以后的學(xué)習(xí)和工作有很大的益處。</p><p>  在這次畢業(yè)設(shè)計(jì)過(guò)程中,我得到了指導(dǎo)老師xx老師和其他同組同學(xué)的悉心指導(dǎo)。在此,我對(duì)他們表示衷心的感謝!隨著Internet國(guó)際互聯(lián)網(wǎng)的發(fā)展,越來(lái)越多的企業(yè)開(kāi)始建造自己的網(wǎng)站?;贗nternet的信息服務(wù),商務(wù)服務(wù)已經(jīng)成為現(xiàn)代企業(yè)一

9、項(xiàng)不可缺少的內(nèi)容。很多企業(yè)都已不滿足于建立一個(gè)簡(jiǎn)單的僅僅能夠發(fā)布信息的靜態(tài)網(wǎng)站?,F(xiàn)代企業(yè)需要的是一個(gè)功能強(qiáng)大的,能提供完善的電子商務(wù)服務(wù)的動(dòng)態(tài)商務(wù)網(wǎng)站。</p><p>  JSP是Sun公司推出的一種網(wǎng)站開(kāi)發(fā)技術(shù),Sun公司借助自己在Java上的不凡造詣,又把人們引進(jìn)JSP時(shí)代,JSP即Java Server Page,它可以在Servlet和JavaBean的支持下,完成功能強(qiáng)大的Web應(yīng)用程序。所以,在我的

10、畢業(yè)設(shè)計(jì)中,我采用了JSP作為開(kāi)發(fā)工具,構(gòu)建了一個(gè)能實(shí)現(xiàn)簡(jiǎn)單的電子商務(wù)的小型動(dòng)態(tài)商務(wù)網(wǎng)站——網(wǎng)上書(shū)店銷(xiāo)售系統(tǒng)。該系統(tǒng)能實(shí)現(xiàn)用戶的注冊(cè)、登錄功能;能夠?qū)崿F(xiàn)商品的查詢,訂購(gòu)等功能。該系統(tǒng)基本上具備一個(gè)網(wǎng)上商品銷(xiāo)售系統(tǒng)應(yīng)該具備的功能,該設(shè)計(jì)項(xiàng)目基本上體現(xiàn)了構(gòu)建一個(gè)動(dòng)態(tài)商務(wù)網(wǎng)站所需要的技術(shù),可以說(shuō),目前的大型商務(wù)網(wǎng)站也就是我們這個(gè)小型網(wǎng)站在內(nèi)容上的擴(kuò)充和重復(fù)。</p><p>  通過(guò)這次的畢業(yè)設(shè)計(jì),我了解了目前流行的動(dòng)

11、態(tài)商務(wù)網(wǎng)站的構(gòu)成和運(yùn)作原理,掌握了用JSP構(gòu)建動(dòng)態(tài)網(wǎng)站的相關(guān)知識(shí)和技術(shù)原</p><p><b>  概 述</b></p><p><b>  1.1 開(kāi)發(fā)背景</b></p><p>  隨著時(shí)代的發(fā)展,信息技術(shù)、Internet/Intranet技術(shù)、數(shù)據(jù)庫(kù)技術(shù)的不斷發(fā)展完善,網(wǎng)絡(luò)進(jìn)程的加快,傳統(tǒng)的購(gòu)物方式也越來(lái)

12、越不能滿足人們快節(jié)奏的生活需求,使得企業(yè)的IT部門(mén)已經(jīng)認(rèn)識(shí)到Internet的優(yōu)勢(shì),電子商務(wù)就是在這樣一個(gè)背景下產(chǎn)生發(fā)展起來(lái)的。伴隨著電子商務(wù)技術(shù)的不斷成熟,電子商務(wù)的功能也越來(lái)越強(qiáng)大,注冊(cè)用戶可以在網(wǎng)上搜索購(gòu)買(mǎi)到自己想要的各種商品,初步讓人們體會(huì)到了足不出戶,便可隨意購(gòu)物的快感。我的畢業(yè)設(shè)計(jì)也就正是一個(gè)電子商務(wù)系統(tǒng)的開(kāi)發(fā)---網(wǎng)上商品銷(xiāo)售系統(tǒng)。</p><p>  1.2 JSP簡(jiǎn)介</p>&

13、lt;p>  JSP(Java Server Pages)是由Sun Microsystems 公司倡導(dǎo)、許多公司參與一起建立的一種動(dòng)態(tài)網(wǎng)頁(yè)技術(shù)標(biāo)準(zhǔn),JSP技術(shù)在Servlet技術(shù)基礎(chǔ)上發(fā)展起來(lái)的,它正在飛速發(fā)展中,現(xiàn)已成為Java服務(wù)器編程的重要組成部分。它雖然還未成型,但是它必將和J2EE(Java 2 Enterprise Edition)一起發(fā)展。</p><p>  JSP是結(jié)合markup(HT

14、ML和XML)和Java代碼來(lái)處理一種動(dòng)態(tài)頁(yè)面。每一頁(yè)第一次被調(diào)用時(shí),通過(guò)JSP引擎自動(dòng)被編譯成Servlet,然后被執(zhí)行,以后每次調(diào)用時(shí),執(zhí)行編譯過(guò)的Servlet。JSP提供了多種方式訪問(wèn)Java class、Servlet、Applets和Web Server,因此,Web應(yīng)用的功能可以分成多個(gè)明確定義公用接口的組件,通過(guò)JSP將它們結(jié)合在一起。</p><p>  1.2.1 JSP的運(yùn)行原理</

15、p><p>  在JSP第一次獲得來(lái)自于客戶端瀏覽器的請(qǐng)求時(shí),JSP文件將被JSP引擎(JSP engine)轉(zhuǎn)換成一個(gè)Servlet,即將”.jsp”文件編譯成Java Class文件。當(dāng)Servlet引擎接收到請(qǐng)求后,如果設(shè)置了使用最新的JSP,它就會(huì)去找JSP文件,檢查該文件在上次編譯后是否改動(dòng)過(guò)。如果改動(dòng)過(guò),就會(huì)重新編譯生成新的Servlet,最終將請(qǐng)求轉(zhuǎn)交給編譯好的Servlet引擎執(zhí)行。如圖1-1:<

16、;/p><p>  圖1-1 JSP運(yùn)行原理</p><p>  在編譯時(shí)如果發(fā)現(xiàn)JSP文件有任何語(yǔ)法錯(cuò)誤,轉(zhuǎn)換過(guò)程將中斷,并向客戶端發(fā)出出錯(cuò)信息;如果編譯成功,則所轉(zhuǎn)換產(chǎn)生的Servlet代碼被編譯,然后該Servlet被JSP引擎加載到內(nèi)存中。此時(shí)JSP引擎還請(qǐng)求了jspInit()方法的執(zhí)行,并對(duì)此Servlet初始化。JspInit()方法在Servlet的生命周期中只被請(qǐng)求一次,然

17、后將被調(diào)用來(lái)處理客戶端的請(qǐng)求和回復(fù)操作。對(duì)于所有隨后對(duì)該JSP文件的請(qǐng)求,服務(wù)器將檢查該JSP文件自最后一次被存取后是否經(jīng)過(guò)修改。如果沒(méi)有修改,則將請(qǐng)求交還給還在內(nèi)存中的Servlet的jspService()方法,執(zhí)行回復(fù)操作。由于Servlet始終駐于內(nèi)存,所以響應(yīng)是非常快的。Jsp頁(yè)面在第一次訪問(wèn)時(shí)由于要轉(zhuǎn)化和編譯,運(yùn)行速度較慢,但是當(dāng)?shù)诙卧L問(wèn)該頁(yè)時(shí),由于文件已經(jīng)被編譯成字節(jié)碼文件了,所以速度非常得快。</p>&

18、lt;p>  1.2.2 JSP頁(yè)面的組成</p><p>  JSP頁(yè)面看上去像標(biāo)準(zhǔn)的HTML和XML頁(yè)面,并附帶有JSP引擎能夠處理和解析執(zhí)行的代碼與組件。通常,JSP代碼和組件用于創(chuàng)建在最終頁(yè)面上顯示的文本。通常來(lái)說(shuō),JSP頁(yè)面包括編譯指令,動(dòng)作指令,聲明,表達(dá)式和程序段等內(nèi)容。</p><p>  1)編譯指令:使用JSP編譯指令(〈%@ 和 %〉內(nèi)的)來(lái)指定所使用的腳本語(yǔ)

19、言,Servlet實(shí)現(xiàn)的接口,Servlet擴(kuò)展的類,Servlet導(dǎo)入的軟件包。JSP指令的一般語(yǔ)法形式為:<%@ 指令名=“值”%>。</p><p>  2)動(dòng)作指令(標(biāo)識(shí)):動(dòng)作指令用于執(zhí)行某些動(dòng)作。在JSP規(guī)范中有2種類型的動(dòng)作指令的標(biāo)識(shí)。第一種是標(biāo)準(zhǔn)動(dòng)作,它定義的是無(wú)論在什么版本的JSP引擎或Web服務(wù)器下總是可用的動(dòng)作。第二種是自定義動(dòng)作,它通過(guò)使用taglib指令來(lái)實(shí)現(xiàn)。例如JSP:u

20、seBean;JSP:setProperty;JSP:getProperty就是標(biāo)準(zhǔn)動(dòng)作。</p><p>  3)聲明:用于聲明合法的變量和方法。與任何語(yǔ)言相同,JSP語(yǔ)言使用變量來(lái)保存數(shù)據(jù)。這些變量用declaration元素聲明,聲明的語(yǔ)法為<%! declaration(s) %>。當(dāng)頁(yè)面被初始化的時(shí)候,JSP頁(yè)面中的所有聲明都被初始化。除了簡(jiǎn)單的變量,方法也能被聲明。聲明不對(duì)當(dāng)前的輸出流產(chǎn)生

21、任何影響。</p><p>  4)表達(dá)式:通過(guò)計(jì)算表達(dá)式所得到的結(jié)果來(lái)表示某個(gè)值。表達(dá)式的形式為:<%=expression>。表達(dá)式求值的結(jié)果被強(qiáng)制轉(zhuǎn)換為一個(gè)字符串,并插入到當(dāng)前的輸出流中。</p><p>  5)程序段:JSP可以在頁(yè)面中包含的一段程序,稱之為程序段。程序段是一個(gè)代碼片斷,在請(qǐng)求的處理過(guò)程中被執(zhí)行。程序段可以和頁(yè)面中的靜態(tài)元件組合起來(lái)創(chuàng)建動(dòng)態(tài)生成的頁(yè)面。

22、程序段在“<% %>”中定義,在這對(duì)標(biāo)識(shí)中的所有東西都會(huì)被當(dāng)成JSP程序執(zhí)行。</p><p>  1.2.3 JavaBean技術(shù)介紹</p><p>  JavaBean技術(shù)是一種基于Java的組件技術(shù),JavaBean組件可以用來(lái)執(zhí)行復(fù)雜的計(jì)算任務(wù),或負(fù)責(zé)與數(shù)據(jù)庫(kù)的交互以及數(shù)據(jù)的提取等,是解決代碼重用問(wèn)題的一種策略。</p><p>  以前的組

23、件無(wú)法實(shí)現(xiàn)真正的代碼重用,其主要原因就是它們對(duì)于處理平臺(tái)的依賴和對(duì)開(kāi)發(fā)語(yǔ)言的依賴過(guò)重。由于Java語(yǔ)言在這些方面所具有的特點(diǎn)和優(yōu)勢(shì),使得基于它的軟件JavaBean組件技術(shù)倍受人們的關(guān)注。它的任務(wù)就是:一次編寫(xiě),可以在任何地方執(zhí)行,</p><p>  可以在任何地方重用。JavaBean組件可以在任何地方?jīng)_用包括了可以在應(yīng)用程序、其他組件、文檔、Web站點(diǎn)和應(yīng)用程序構(gòu)造器工具等多種方案中再利用。</p&g

24、t;<p>  為了創(chuàng)建和使用Java軟件組件,JavaBean被實(shí)現(xiàn)為一種獨(dú)立于平臺(tái)和結(jié)構(gòu)的應(yīng)用程序接口,它的實(shí)現(xiàn)可以忽略內(nèi)部的結(jié)構(gòu)及細(xì)節(jié)問(wèn)題,只需要定義其外部的特征及對(duì)外功能就行。其中,屬性、方法和事件三種接口可以獨(dú)立對(duì)外進(jìn)行開(kāi)發(fā)。</p><p>  JavaBean的實(shí)質(zhì)就是一個(gè).class文件,也可以成為類文件。JavaBean以binary格式保存,可以保護(hù)Java源代碼不容易被他人抄襲

25、。</p><p>  1.2.4 JSP的運(yùn)行環(huán)境</p><p>  要運(yùn)行Jsp(注意,不是瀏覽Jsp頁(yè)面),需要有支持Jsp的服務(wù)器。這里分2種情況:一種是自身就支持Jsp的服務(wù)器,如Jrun,Weblogic,JSWDK等;而另一種則是在不支持Jsp的服務(wù)器上安裝Jsp引擎的插件,如在IIS,Apache等服務(wù)器上安裝WebSphere,tomcat,Resin等插件。其中主流服

26、務(wù)器是Weblogic和tomcat.</p><p>  Weblogic是一款功能強(qiáng)大的服務(wù)器軟件,配置比較簡(jiǎn)單,而且Jsp的擴(kuò)展功能較多,附帶了數(shù)據(jù)庫(kù)的JDBC驅(qū)動(dòng)程序。,支持JHTML(一種與Jsp十分相似的技術(shù)),是目前市場(chǎng)占有率最高的服務(wù)器。不過(guò),Weblogic的運(yùn)行情況不太穩(wěn)定,使用它調(diào)試Jsp文件,出現(xiàn)語(yǔ)法錯(cuò)誤或者數(shù)據(jù)庫(kù)連接錯(cuò)誤時(shí),Weblogic就有可能崩潰。</p><p

27、>  Tomcat服務(wù)器是Apache Group Jakarta小組開(kāi)發(fā)的一個(gè)免費(fèi)服務(wù)器軟件,適合于嵌入Apache中使用,而且,它的源代碼可以免費(fèi)獲得,你可以自由地對(duì)它進(jìn)行擴(kuò)充。訪問(wèn)的地址 http://jakarta. apache.org/tomacat/index.html, Tomcat服務(wù)器的兼容性很好,如WebLogic服務(wù)器采用其為Web服務(wù)器引擎,Jbuilder將其作為標(biāo)準(zhǔn)的測(cè)試服務(wù)器,Sun公司也將其作為J

28、SP技術(shù)應(yīng)用的示例服務(wù)器。不足之處是它的配置比較麻煩,而且有一些安全性的問(wèn)題沒(méi)有解決。但是Tomcat服務(wù)器有眾多大軟件公司的支持,而且服務(wù)器的性能穩(wěn)定,其發(fā)展前景很好。</p><p>  1.3 系統(tǒng)開(kāi)發(fā)環(huán)境</p><p>  1.3.1 服務(wù)器的配置</p><p>  前面介紹了JSP的生命周期,為了說(shuō)明JSP對(duì)運(yùn)行環(huán)境的要求,先簡(jiǎn)單的介紹一下它的運(yùn)作過(guò)

29、程。服務(wù)器在接收到客戶端傳過(guò)來(lái)的一個(gè)頁(yè)面請(qǐng)求時(shí),先判斷是否是JSP頁(yè)面請(qǐng)求(從擴(kuò)展名來(lái)判斷),如果不是,只是一般的HTML頁(yè)面請(qǐng)求,則直接把HTML文檔傳給客戶端,完成客戶端與服務(wù)器的一次連接。如果判斷是JSP頁(yè)面請(qǐng)求,則由JSP引擎(或Servlet引擎)將JSP頁(yè)面代碼轉(zhuǎn)換成Servlet代碼,再通知服務(wù)器上的JVM(Java虛擬機(jī))對(duì)轉(zhuǎn)換過(guò)來(lái)的Servlet代碼進(jìn)行編譯,將生成的字節(jié)碼文件放在服務(wù)器上相應(yīng)的地方,并執(zhí)行編譯后得到的

30、字節(jié)碼,然后把結(jié)果傳送給客戶端,這樣就完成一次連接。以后如果有相同的JSP頁(yè)面的請(qǐng)求,則直接由JSP引擎通知JVM執(zhí)行已有的字節(jié)碼,并把結(jié)果傳送給客戶端。</p><p>  從上面JSP運(yùn)作全過(guò)程可見(jiàn),運(yùn)行JSP最少需要三樣?xùn)|西:JSP引擎、Web服務(wù)器和JVM。最常用的Java開(kāi)發(fā)工具就是JDK和Jbuilder,它們之間的很大不同就是JDK是字符界面,而Jbuilder是窗口界面。本系統(tǒng)直接采用JDK作為J

31、VM和java編譯器。所用的操作系統(tǒng)是Windows2000,服務(wù)器采用的是tomcat,利用了它充當(dāng)Jsp引擎,同時(shí)還利用了它的信息發(fā)布功能。首先把JDK,tomcat安裝到本地硬盤(pán)D盤(pán)根目錄下,下面詳細(xì)的介紹如何配置運(yùn)行環(huán)境:</p><p><b>  配置環(huán)境變量</b></p><p>  第一步:進(jìn)入我的桌面,右擊“我的電腦”,選擇“屬性”選項(xiàng),進(jìn)入“系統(tǒng)

32、屬性“對(duì)話框,單擊”高級(jí)標(biāo)簽“,如圖1-2所示:</p><p><b>  圖1-2</b></p><p>  第二步:點(diǎn)擊上圖箭頭所示“環(huán)境變量”,進(jìn)入圖1-3畫(huà)面。</p><p><b>  圖1-3</b></p><p>  第三步:?jiǎn)螕?“系統(tǒng)變量”部分的 “新建按扭”,創(chuàng)建JAVA

33、-HOME變量,在變量值欄內(nèi)輸入C:\jdk1.4.2_05; 如圖1-4所示:JAVA_HOME指明JDK安裝路徑,就是剛才安裝時(shí)所選擇的路徑C:\jdk1.4.2_05,此路徑下包括lib,bin,jre等文件夾(此變量最好設(shè)置,因?yàn)橐院筮\(yùn)行tomcat,eclipse等都需要依靠此變量)</p><p><b>  圖1-4</b></p><p>  第四步:

34、同樣的方法創(chuàng)建CLASSPATH 變量,在變量欄內(nèi)輸入,.;%JAVA_HOME%\lib;</p><p>  %JAVA_HOME%\lib\tools.jar (要加.表示當(dāng)前路徑)CLASSPATH為java加載類(class or lib)路徑,只有類在classpath中,java命令才能識(shí)別。</p><p>  第五步:創(chuàng)建PATH變量,在變量欄內(nèi)輸入,%JAVA_HOME

35、%\bin;%JAVA_HOME%\jre\bin</p><p>  Path使得系統(tǒng)可以在任何路徑下識(shí)別java命令。</p><p>  第六步:創(chuàng)建Tomcat-Home變量,在變量欄內(nèi)輸入</p><p>  C:\Tomcat5.0; 如圖1-5所示:</p><p><b>  圖1-5</b></p

36、><p>  第七步:檢測(cè)配置是否成功:</p><p>  檢測(cè)JDK是否配置成功</p><p>  編寫(xiě)一個(gè)java程序,例如:</p><p>  public class HelloWorldApp</p><p><b>  {</b></p><p>  publ

37、ic static void main(String args[])</p><p><b>  {</b></p><p>  System.out.println(“HelloWorld!”);</p><p><b>  }</b></p><p><b>  }</b>

38、</p><p>  首先把它放到一個(gè)名為HelloWorldApp.java的文件中,這里,文件名應(yīng)和類名相同,因?yàn)閖ava解釋器要求公共類必須放在與其同名的文件中。然后對(duì)它進(jìn)行編譯:</p><p>  c:\>javac –g HelloWorldApp.java</p><p>  編譯的結(jié)果是生成字節(jié)碼文件HelloWorldApp.class。最后

39、用java解釋器來(lái)運(yùn)行該字節(jié)碼文件:</p><p>  c:\>java HelloWorldApp</p><p>  結(jié)果是在屏幕上顯示“Hello World!”</p><p>  至此,JDK完全安裝成功。</p><p>  檢測(cè)tomcat是否配置成功</p><p>  進(jìn)入C:\Tomcat

40、5.0\bin目錄,雙擊startup.bat執(zhí)行文件啟動(dòng)Tomcat服務(wù)器,成功啟動(dòng)后的界面如圖1-6所示:</p><p>  我們現(xiàn)在就可以通過(guò)瀏覽器看Tomcat服務(wù)器的示例程序了,打開(kāi)瀏覽器,鍵入http://localhost:8080/index.jsp進(jìn)入Tomcat服務(wù)器的主頁(yè)面。 </p><p><b>  圖1-6</b>

41、;</p><p>  1.3.2 數(shù)據(jù)庫(kù)后臺(tái)環(huán)境的配置</p><p>  SQSQL Server是由Microsoft開(kāi)發(fā)和推廣的關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS),它最初是由Microsoft、Sybase和Ashton-Tate三家公司共同開(kāi)發(fā)的,并于1988年推出了第一個(gè)OS/2版本。 SQL Server近年來(lái)不斷更新版本,1996年,Microsoft 推出了SQL Serve

42、r 6.5版本;1998年,SQL Server 7.0版本和用戶見(jiàn)面;SQL Server 2000是Microsoft公司于2000年推出的最新版本。</p><p>  JSP與SQL Server數(shù)據(jù)庫(kù)的連接</p><p>  本系統(tǒng)使用ODBC驅(qū)動(dòng)程序建立SQL Server的數(shù)據(jù)連接。創(chuàng)建步驟如下:</p><p>  (1)選擇任務(wù)欄的 “

43、開(kāi)始” “控制面板” “性能與維護(hù)” “管理工具” 雙擊ODBC數(shù)據(jù)源 單擊系統(tǒng)DSN標(biāo)簽,單擊“添加”選擇SQL Server的ODBC數(shù)據(jù)源,如圖1-7所示: </p><p><b>  圖1-7</b></p>&

44、lt;p>  定義ODBC數(shù)據(jù)源的名字和SQL Server所在的服務(wù)器,如圖1-8所示:</p><p><b>  圖1-8</b></p><p>  定義連接數(shù)據(jù)庫(kù)的方式,使用Windows的驗(yàn)證連接數(shù)據(jù)庫(kù)。</p><p>  選擇要連接的數(shù)據(jù)庫(kù),如圖1-9所示:</p><p>  其于各項(xiàng)保留默認(rèn)值,

45、最后單擊“完成”進(jìn)入數(shù)據(jù)源的測(cè)試窗口,測(cè)試成功后顯示如圖1-10,這樣就完成了本系統(tǒng)數(shù)據(jù)庫(kù)的ODBC數(shù)據(jù)源的創(chuàng)建。</p><p><b>  圖1-9</b></p><p><b>  圖1-10</b></p><p><b>  建立數(shù)據(jù)庫(kù)</b></p><p>  

46、選擇任務(wù)欄的 “開(kāi)始” “所有程序” “Microsoft SQL Server” </p><p>  “企業(yè)管理器”,然后右擊數(shù)據(jù)庫(kù)選 “新建數(shù)據(jù)庫(kù)”,如圖1-11,在彈出的對(duì)話框中輸入數(shù)據(jù)庫(kù)名,完成后回到圖1-11的界面,單擊 “數(shù)據(jù)庫(kù)”,選擇你剛剛建立的數(shù)據(jù)庫(kù)cart,右擊選擇新建表選項(xiàng),這樣就可以創(chuàng)建自己的數(shù)據(jù)表了,通過(guò)建好的數(shù)據(jù)表就組成了數(shù)據(jù)庫(kù)。</p><

47、;p><b>  圖1-11</b></p><p><b>  第二章 需求分析</b></p><p><b>  2.1 系統(tǒng)說(shuō)明</b></p><p>  本系統(tǒng)是一個(gè)中小型的電子商務(wù)系統(tǒng)----網(wǎng)上書(shū)店,可以為各類用戶提供方便的在線買(mǎi)書(shū)環(huán)境,符合目前國(guó)內(nèi)流行的電子商務(wù)模式。用戶可

48、以在系統(tǒng)中實(shí)現(xiàn)注冊(cè)、瀏覽商品、搜索查詢商品、下定單、處理定單等功能;管理員可以通過(guò)用戶管理、定單管理、商品管理、評(píng)論管理等管理功能來(lái)對(duì)系統(tǒng)進(jìn)行維護(hù)更新。</p><p>  網(wǎng)站的組成有以下幾個(gè)子系統(tǒng)組成:</p><p>  1. 主頁(yè),顯示歡迎界面,提供近期的書(shū)本。</p><p>  2. 購(gòu)物車(chē),處理訂購(gòu)并顯示想要訂購(gòu)的書(shū)本。</p><

49、p>  3. 查詢系統(tǒng),通過(guò)書(shū)本編號(hào)、書(shū)本名稱來(lái)查詢是否有自己需要的書(shū)本。</p><p>  4. 用戶注冊(cè)系統(tǒng),處理新用戶的注冊(cè)和老用戶買(mǎi)書(shū)時(shí)的確認(rèn)。</p><p>  2.2 系統(tǒng)功能簡(jiǎn)介</p><p>  2.2.1 基本功能</p><p><b>  游客可以瀏覽網(wǎng)站</b></p>

50、<p><b>  用戶登陸</b></p><p><b>  用戶能夠?yàn)g覽網(wǎng)站</b></p><p>  提供搜索引擎,使用戶能夠按特定的條件對(duì)所需商品進(jìn)行搜索</p><p><b>  用戶下定單購(gòu)買(mǎi)商品</b></p><p><b>  用戶

51、處理定單</b></p><p>  2.2.2 用戶界面設(shè)計(jì)</p><p>  2.3 系統(tǒng)運(yùn)行環(huán)境</p><p>  操作系統(tǒng):Windows 9X、Windows NT Workstation/Server 4.0以上、Windows 2000 Server/Professional、Windows XP Professional。</

52、p><p>  CPU:沒(méi)有很高的要求,只要能夠順利運(yùn)行Windows系列操作系統(tǒng)就可以了。當(dāng)然,CPU的處理速度越快,運(yùn)行JSP代碼的效率越高。</p><p>  內(nèi)存:最低配置32MB,建議使用64MB以上內(nèi)存,如果使用Windows 2000或Windows XP建議使用128MB以上內(nèi)存。</p><p>  硬盤(pán)空間:至少需要50MB以上的硬盤(pán)空間來(lái)安裝所需

53、的組件。</p><p>  運(yùn)行JSP的服務(wù)器端要求:(如表2.1所示)</p><p><b>  表2.1</b></p><p><b>  第三章 系統(tǒng)設(shè)計(jì)</b></p><p>  3.1 系統(tǒng)設(shè)計(jì)思想</p><p>  本系統(tǒng)采用三層架構(gòu)設(shè)計(jì),它的工作原

54、理如圖3-1所示。</p><p><b>  圖3-1</b></p><p>  采用三層構(gòu)架以后,用戶界面層通過(guò)統(tǒng)一的接口向業(yè)務(wù)層發(fā)送請(qǐng)求,業(yè)務(wù)層按自己的邏輯規(guī)則將請(qǐng)求處理之后進(jìn)行數(shù)據(jù)庫(kù)操作,然后將數(shù)據(jù)庫(kù)返回的數(shù)據(jù)封裝成類的形式返回給用戶界面層。這樣用戶界面層甚至可以不知道數(shù)據(jù)庫(kù)的結(jié)構(gòu),它只要維護(hù)與業(yè)務(wù)層之間的接口即可。</p><p>

55、  3.2 系統(tǒng)功能模塊化</p><p>  如圖3-2為本系統(tǒng)的功能模塊圖。</p><p><b>  圖3-2</b></p><p><b>  3.3系統(tǒng)功能劃分</b></p><p>  根據(jù)需求分析與系統(tǒng)功能設(shè)計(jì)目標(biāo),結(jié)合實(shí)際情況本系統(tǒng)功能模塊設(shè)計(jì)分為如下幾個(gè)模塊:</p&

56、gt;<p>  1.主頁(yè):在這里我們可以看見(jiàn)本系統(tǒng)的主要功能和信息。</p><p>  2.用戶注冊(cè):在這里用戶可以注冊(cè)基本信息,其中登陸帳戶和密碼是比較重要的,因?yàn)槲覀冃枰獙?duì)這些信息進(jìn)行處理,以方便用戶的購(gòu)書(shū)。</p><p>  3.用戶登陸:用戶輸入正確的口令才能登陸成功否則提示錯(cuò)誤。</p><p>  4.書(shū)目瀏覽:成功登陸后的用戶可以瀏

57、覽圖書(shū)書(shū)目,并將想要的圖書(shū)提交到填寫(xiě)訂單頁(yè)面。如果用戶還沒(méi)有注冊(cè)就直接進(jìn)入或者沒(méi)有成功登陸就進(jìn)入頁(yè)面,將被連接到“提示用戶登錄頁(yè)面”。</p><p>  5.訂購(gòu)圖書(shū):成功登陸的用戶可以在該頁(yè)面定購(gòu)所需要的圖書(shū)。如果用戶還沒(méi)有注冊(cè)就直接進(jìn)入或者沒(méi)有成功登陸就進(jìn)入頁(yè)面,將被連接到“提示用戶登陸頁(yè)面”。</p><p>  6.查看訂單:成功登陸的用戶可以在該頁(yè)查詢已經(jīng)訂購(gòu)的圖書(shū)。再此還可以

58、修改個(gè)人信息,查看個(gè)人信息,如果用戶還沒(méi)有注冊(cè)就直接進(jìn)入或者沒(méi)有成功登陸就進(jìn)入頁(yè)面,將被連接到“提示用戶登陸頁(yè)面”。</p><p>  7.書(shū)目查詢:成功登陸的用戶可以在該頁(yè)查找自己需要的圖書(shū)。如果用戶還沒(méi)有注冊(cè)就直接進(jìn)入或者沒(méi)有成功登陸就進(jìn)入頁(yè)面,將被連接到“提示用戶登陸頁(yè)面”。</p><p>  8.圖書(shū)管理:管理員對(duì)圖書(shū)信息進(jìn)行添加,修改,刪除操作。</p><

59、;p>  9.訂單管理:查看用戶訂單,訂單執(zhí)行操作,主頁(yè)顯示用戶訂單執(zhí)行情況。</p><p>  10.用戶管理:查看用戶基本信息,用戶凍結(jié)、解凍操作。</p><p>  11.公告管理:更新公告信息。</p><p>  4.4系統(tǒng)模塊結(jié)構(gòu)圖</p><p>  圖4.1 系統(tǒng)結(jié)構(gòu)模塊</p><p>  

60、圖4.2 用戶模塊圖</p><p>  5.2系統(tǒng)主要界面和功能模塊設(shè)計(jì)</p><p>  1 .主頁(yè)面模塊 </p><p>  主頁(yè)面中上部包含:①標(biāo)題:歡迎光臨網(wǎng)上書(shū)店</p><p> ?、诖丝淘L問(wèn)的時(shí)間和訪問(wèn)本站的人數(shù)等部分。</p><p><b>  圖5.1 主頁(yè)面</b>&

61、lt;/p><p><b>  2.用戶登錄模塊 </b></p><p> ?、儆脩舻卿洶ǎ旱卿浢Q,輸入密碼。</p><p>  ②當(dāng)用戶登錄后由管理員核對(duì)該用戶的名稱和密碼是否正確,如果無(wú)誤的話用戶可以通過(guò)檢查直接進(jìn)入網(wǎng)站的其它頁(yè)面進(jìn)行瀏覽和訂購(gòu)。</p><p><b>  圖5.2 登錄窗體</

62、b></p><p><b>  3.用戶注冊(cè)模塊 </b></p><p>  用戶注冊(cè)是為第一次登錄網(wǎng)站的用戶所設(shè)計(jì)的。在用戶成為本站用戶之前一定要注冊(cè)才可以訪問(wèn)我網(wǎng)站的其它網(wǎng)頁(yè)。</p><p> ?、儆脩糇?cè)包括:登錄名稱,真實(shí)姓名,設(shè)置密碼,電子郵件等。</p><p>  ②注冊(cè)成功后,才可以訪問(wèn)本站的

63、其他頁(yè)面。</p><p><b>  圖5.3 用戶注冊(cè)</b></p><p>  5.2.3圖書(shū)信息模塊設(shè)計(jì)</p><p>  主要實(shí)現(xiàn)了新書(shū)發(fā)布,圖書(shū)查詢,圖書(shū)分類,圖書(shū)瀏覽操作。</p><p>  1.新書(shū)發(fā)布主要實(shí)現(xiàn)的是顯示最新添加的圖書(shū)信息,查詢語(yǔ)句為select top 4 * from bookin

64、fo order by BOOK_DATE desc,將數(shù)據(jù)庫(kù)的圖書(shū)按添加時(shí)間降序排序查找出4條記錄顯示出來(lái)。圖書(shū)查詢主要實(shí)現(xiàn)了按書(shū)名模糊查詢,在主頁(yè)查詢欄中輸入書(shū)名(此處也應(yīng)用到了form表單操作),點(diǎn)擊查詢按鈕(圖書(shū)查詢也應(yīng)用到了check.jsp登錄判斷)將調(diào)用search.jsp進(jìn)行查詢處理,查詢語(yǔ)句為SELECT * FROM bookinfo where TITLE like '%"+bookname+&q

65、uot;%',bookname為從提交表單里取出的用戶輸入的信息,在數(shù)據(jù)庫(kù)中查找符合的圖書(shū)信息,并顯示出來(lái),并能購(gòu)買(mǎi)圖書(shū),添加進(jìn)購(gòu)物車(chē)。</p><p>  2.圖書(shū)分類(list.jsp)</p><p>  圖5.4 圖書(shū)分類查看</p><p>  3.圖書(shū)瀏覽(show.jsp)</p><p>  書(shū)目瀏覽:成功登陸后的用戶

66、可以分頁(yè)瀏覽圖書(shū)書(shū)目,并將想要的圖書(shū)提交到填寫(xiě)訂單頁(yè)面。</p><p><b>  圖5.5 圖書(shū)瀏覽</b></p><p>  主要實(shí)現(xiàn)從數(shù)據(jù)庫(kù)中查詢所有圖書(shū)信息并顯示出來(lái)。由于數(shù)據(jù)量非常大,顯然將如此大量的數(shù)據(jù)顯示在一個(gè)頁(yè)面是不可能的也是效率非常低下的,這種情況下就需要采用分頁(yè)顯示技術(shù)將數(shù)據(jù)庫(kù)中符合條件的數(shù)據(jù)逐頁(yè)顯示在頁(yè)面,</p><p&

67、gt;  5.2.4購(gòu)物車(chē)模塊設(shè)計(jì)</p><p>  購(gòu)物車(chē)操作,充分利用了session對(duì)象,如果需要訂購(gòu)某本書(shū),單擊相應(yīng)的購(gòu)買(mǎi)按鈕,就會(huì)打開(kāi)show.jsp頁(yè)面,在該頁(yè)面顯示該圖書(shū)的詳細(xì)信息,用戶還可以設(shè)置要購(gòu)買(mǎi)的數(shù)量,程序所接收的是從圖書(shū)分類或者瀏覽圖書(shū)頁(yè)面?zhèn)鬟f過(guò)來(lái)的ISBN號(hào),然后以此ISBN在數(shù)據(jù)庫(kù)中查詢?cè)摃?shū)信息,并顯示出來(lái),程序也用到了form表單操作,用來(lái)接受用戶輸入的購(gòu)書(shū)數(shù)量。</p>

68、;<p><b>  1.購(gòu)物車(chē)界面</b></p><p>  圖5.6 購(gòu)物車(chē)界面</p><p>  2.查看訂單:成功登陸的用戶可以在該頁(yè)修改已經(jīng)訂購(gòu)的圖書(shū)。</p><p><b>  圖5.7 訂單界面</b></p><p>  3.修改密碼:成功登陸的用戶可以在該頁(yè)修改

69、自己的密碼及信息。</p><p><b>  圖5.8 修改密碼</b></p><p>  4.訂單查詢:可以查詢已近購(gòu)買(mǎi)的圖書(shū)具體信息。</p><p><b>  圖5.9 訂單查詢</b></p><p>  3.3 數(shù)據(jù)庫(kù)設(shè)計(jì)</p><p>  數(shù)據(jù)庫(kù)在一個(gè)信

70、息管理系統(tǒng)中占有非常重要的地位,數(shù)據(jù)庫(kù)結(jié)構(gòu)設(shè)計(jì)的好壞將直接對(duì)應(yīng)用系統(tǒng)的效率,以及實(shí)現(xiàn)的效果產(chǎn)生影響。合理的數(shù)據(jù)庫(kù)結(jié)構(gòu)設(shè)計(jì)可以提高數(shù)據(jù)存儲(chǔ)的效率,保證數(shù)據(jù)的完整和一致。</p><p>  3.3.1 數(shù)據(jù)庫(kù)需求分析</p><p>  針對(duì)一般在線書(shū)店的需求,得出如下需求信息。</p><p>  用戶分為游客和已注冊(cè)用戶。</p><p>

71、;  訂單分為單張?jiān)敿?xì)訂單和總訂單。</p><p>  一個(gè)用戶可以購(gòu)買(mǎi)多本圖書(shū)。</p><p>  一個(gè)用戶對(duì)應(yīng)一張訂單。</p><p>  一個(gè)列表對(duì)應(yīng)多張訂單。</p><p>  針對(duì)本系統(tǒng)功能分析,總結(jié)出如下的需求信息。</p><p>  用戶,包括數(shù)據(jù)項(xiàng):用戶ID、用戶名、密碼。</p>

72、<p>  圖書(shū),包括數(shù)據(jù)項(xiàng):圖書(shū)編號(hào)、圖書(shū)名、價(jià)格、圖書(shū)介紹。</p><p>  訂單列表,包括數(shù)據(jù)項(xiàng):訂單編號(hào)、圖書(shū)編號(hào)、購(gòu)書(shū)數(shù)量。</p><p>  訂單,包括數(shù)據(jù)項(xiàng):訂單編號(hào)、用戶編號(hào)、下單時(shí)間。</p><p>  3.3.2 數(shù)據(jù)庫(kù)概念結(jié)構(gòu)</p><p>  從本系統(tǒng)中規(guī)劃出的實(shí)體有:用戶實(shí)體、圖書(shū)實(shí)體、訂單

73、實(shí)體、訂單列表實(shí)體。</p><p>  實(shí)體之間關(guān)系的E-R圖如圖3-3所示。</p><p>  1 N</p><p>  M N</p><p><b>  1</b></p><p><b>  L</b><

74、/p><p><b>  N</b></p><p><b>  圖3-3</b></p><p>  用戶信息實(shí)體的E-R圖如圖3-4所示。</p><p>  圖書(shū)實(shí)體的E-R圖如圖3-5所示。</p><p>  訂單實(shí)體的E-R圖如圖3-6所示。</p>&

75、lt;p>  訂單列表實(shí)體的E-R圖如圖3-7所示。</p><p>  3.3.3 數(shù)據(jù)庫(kù)邏輯機(jī)構(gòu)設(shè)計(jì)</p><p>  在線書(shū)店數(shù)據(jù)庫(kù)中各個(gè)表的設(shè)計(jì)結(jié)果如下面的標(biāo)和所示。</p><p>  表3-8為圖書(shū)信息列表。</p><p><b>  表3-8</b></p><p>  

76、表3-9為用戶信息列表。</p><p><b>  表3-9</b></p><p>  表3-10為訂單總表,記錄某個(gè)用戶的訂單信息。</p><p><b>  表3-10</b></p><p>  表3-11為訂單表,記錄但張訂單的具體信息。</p><p><

77、;b>  表3-11</b></p><p><b>  第四章 詳細(xì)設(shè)計(jì)</b></p><p><b>  4.1系統(tǒng)主要文件</b></p><p>  這個(gè)購(gòu)書(shū)系統(tǒng)主要有2類文件,一類是Bean文件,我把它們統(tǒng)一放在了cart文件夾里,保存在jakarta-tomcat-5.0.27\commo

78、n\classes\cart下,(這是tomcat要求的默認(rèn)存放Bean的路徑);另一類是jsp文件,保存在jakarta-tomcat-5.0.27\webapps\ROOT。(這是tomcat的默認(rèn)工作環(huán)境)</p><p>  Bean文件:CartManager.java,OrderEntity.java,OrderItemEntity.java</p><p>  Product

79、Entity.java,UserEntity.java</p><p>  Jsp文 件:cart.jsp</p><p>  4.2詳細(xì)代碼及說(shuō)明</p><p>  4.2.1實(shí)現(xiàn)用戶實(shí)體的Bean</p><p>  1)用戶作為實(shí)體,我把他的id, 姓名,密碼作為其屬性在Bean里面做了定義,它們都是和數(shù)據(jù)庫(kù)里的user表相對(duì)應(yīng)的,

80、在這個(gè)Bean里封裝的方法也主要是對(duì)這個(gè)表進(jìn)行操作.這個(gè)幾個(gè)屬性都被定義為類的私有成員,外界不可訪問(wèn)</p><p>  private String id;</p><p>  private String userName;</p><p>  private String userPassword;</p><p>  2)構(gòu)造函數(shù)里做

81、了2件事情,第一:尋找數(shù)據(jù)庫(kù)連接驅(qū)動(dòng);第二:對(duì)上面的3個(gè)私有成員初始化:</p><p>  public static String sDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver";</p><p>  public static String sConnStr = "jdbc:odbc:cart";</

82、p><p>  public static Connection conn = null;</p><p>  public UserEntity(String id,String userName,String userPassword)</p><p><b>  {</b></p><p><b>  try

83、 </b></p><p><b>  {</b></p><p>  Class.forName(sDBDriver); </p><p>  //采用Class.forName方法顯式加載一個(gè)驅(qū)動(dòng)程序</p><p><b>  }</b></p><p> 

84、 catch(java.lang.ClassNotFoundException e) </p><p><b>  {</b></p><p>  System.err.println("UserEntity: " + e.getMessage());</p><p><b>  }</b></p

85、><p>  this.id=id;</p><p>  this.userName=userName;</p><p>  this.userPassword=userPassword;</p><p><b>  }</b></p><p>  根據(jù)上面對(duì)變量sDBDriver ,sConnStr

86、的定義和初始化可以看出,我在連接數(shù)據(jù)庫(kù)的時(shí)候采用的是jdbc-odbc橋的方式,這種方式采用的驅(qū)動(dòng)是JDK自帶的,不需要另外安裝。但是,為了與特定的數(shù)據(jù)庫(kù)連接,我們必須建立一個(gè)數(shù)據(jù)源:cart。給3個(gè)屬性賦值,我利用了this指針。</p><p>  3)這個(gè)類我封裝了2類方法:一是查找特定用戶名的所有記錄,代碼如下:</p><p>  public static UserEntity

87、 queryUser(String userName) throws SQLException</p><p><b>  {</b></p><p><b>  try </b></p><p><b>  {</b></p><p>  Class.forName(sDBD

88、river); </p><p><b>  }</b></p><p>  catch(java.lang.ClassNotFoundException e) </p><p><b>  {</b></p><p>  System.err.println("UserEntity: &

89、quot; + e.getMessage());</p><p><b>  }</b></p><p>  //query from database</p><p>  String sql="select id,user_name,user_password from user where user_name= ? "

90、;</p><p>  ResultSet rs = null;</p><p><b>  try </b></p><p><b>  {</b></p><p>  conn = DriverManager.getConnection(sConnStr); </p><p&

91、gt;  PreparedStatement prepStmt = conn.prepareStatement(sql);</p><p>  prepStmt.setString(1,userName);</p><p>  rs = prepStmt.executeQuery();</p><p><b>  } </b></p>

92、;<p>  catch(SQLException ex) </p><p><b>  { </b></p><p>  System.err.println("OrderItemEntity executeQuery: " + ex.getMessage());</p><p><b>  }&l

93、t;/b></p><p>  UserEntity user=null;</p><p>  if(rs.next())</p><p>  user=new UserEntity(rs.getString(1),rs.getString(2),rs.getString(3));</p><p>  return user;</

94、p><p><b>  }</b></p><p>  這個(gè)函數(shù)有1個(gè)參數(shù),String userName,就是通過(guò)這個(gè)用戶名在user表里查詢相應(yīng)的用戶的。要查詢數(shù)據(jù)庫(kù)里user表,就必須先連接數(shù)據(jù)庫(kù)。連接數(shù)據(jù)庫(kù)第一步是加載驅(qū)動(dòng),之后就是進(jìn)行連接。我采用DriverManager類的getConnection方法來(lái)建立與cart數(shù)據(jù)源的連接,連接成功后,返回一個(gè)Conn

95、ection類的對(duì)象conn.要查找特定用戶名的紀(jì)錄,其實(shí)就是對(duì)uesr進(jìn)行查詢操作。PreparedStatement對(duì)象就是用于查詢語(yǔ)句的執(zhí)行,它是Statement的子類,與Statement不同的地方,PreparedStatement對(duì)象可以接受參數(shù),這里需要接受的參數(shù)是user_name,然后進(jìn)行預(yù)編譯。在每一次執(zhí)行這個(gè)查詢,都可以給sql語(yǔ)句傳輸不同的user_name,這樣大大提高了靈活性。要想查詢后的結(jié)果最后顯示給用戶

96、,必須對(duì)ResultSet對(duì)象進(jìn)行操作,即對(duì)rs進(jìn)行操作。我在程序里是把該記錄賦給一個(gè)UserEntity對(duì)象。</p><p>  該類封裝的另一種方法是:用戶名和密碼的獲得。這個(gè)主要是為了方便后面驗(yàn)證用戶合法性使用</p><p>  public String getUserName()</p><p><b>  {</b></p

97、><p>  return userName;</p><p><b>  }</b></p><p>  public String getUserPassword()</p><p><b>  {</b></p><p>  return userPassword;<

98、/p><p><b>  }</b></p><p>  4.3.2實(shí)現(xiàn)商品實(shí)體的Bean</p><p>  雖然我做的是一個(gè)購(gòu)書(shū)系統(tǒng),但考慮到系統(tǒng)的可擴(kuò)展性,我把書(shū)當(dāng)作一種商品來(lái)進(jìn)行定義。同樣,參照數(shù)據(jù)庫(kù)里的product表,我給商品這個(gè)類定義了如下4個(gè)屬性,商品id,商品名稱,商品價(jià)格,商品note,其類型同樣是該類的私有屬性:</p&

99、gt;<p>  private String id;</p><p>  private String productName;</p><p>  private String productPrice;</p><p>  private String productNote;</p><p>  其構(gòu)造函數(shù)和用戶實(shí)體類基

100、本上一致,所以代碼及其說(shuō)明我在這里就省略了。</p><p>  對(duì)商品的操作也主要是2類,一類是對(duì)特定商品的查詢,其原理和查詢用戶是一樣的,但是有一點(diǎn)小小的區(qū)別,即查詢商品可以使查詢所有的商品,或者是查詢特定id的商品,我通過(guò)以下代碼把這2種查詢合在了queryProduct這個(gè)函數(shù)里:</p><p>  String sql="select id,product_name,

101、product_price,product_note from product ";</p><p>  if(productId.compareTo("")!=0)</p><p>  sql=sql+" where id = ? ";</p><p>  Vector v=new Vector();</p&

102、gt;<p>  ResultSet rs = null;</p><p>  其關(guān)于連接數(shù)據(jù)庫(kù),查詢記錄的代碼和上面的大致雷同,所以在這里就省略了。</p><p>  顯示商品是分頁(yè)顯示的,其代碼如下:</p><p>  while(rs.next())</p><p><b>  {</b><

103、;/p><p><b>  ++i;</b></p><p>  if(i>pageCount*pageSize)</p><p><b>  {</b></p><p>  if(i<=(pageCount+1)*pageSize)</p><p>  v.add(

104、new ProductEntity(rs.getString(1),rs.getString(2),rs.getString(3),rs.getString(4)));</p><p><b>  else</b></p><p><b>  break;</b></p><p><b>  }</b>

105、;</p><p><b>  }</b></p><p>  這一段代碼的主要功能是:每一頁(yè)最多顯示pageSize個(gè)商品,如果超過(guò)pageSize個(gè),就分頁(yè)顯示。PageSize在后面將會(huì)定義,其值我設(shè)置為10。</p><p>  第二類方法是查詢商品的id,全稱,價(jià)格和note. 例如查找商品的ID:</p><p&

106、gt;  public String getProductId()</p><p><b>  {</b></p><p>  return id;</p><p><b>  }</b></p><p>  4.3.3 實(shí)現(xiàn)訂購(gòu)單實(shí)體的Bean</p><p>  客

107、戶每次購(gòu)買(mǎi)一種商品都會(huì)產(chǎn)生一次訂購(gòu)單,它包括訂單號(hào),所購(gòu)買(mǎi)的書(shū)號(hào),所購(gòu)買(mǎi)這種書(shū)的數(shù)量,這些構(gòu)成了這個(gè)類的私有屬性:</p><p>  private String id;</p><p>  private String orderId;</p><p>  private String productId;</p><p>  priva

108、te String productNum;</p><p>  客戶每次選中一種商品后,點(diǎn)擊放入購(gòu)物車(chē),就會(huì)產(chǎn)生一個(gè)訂單,其實(shí)現(xiàn)代碼如下:</p><p>  String sql="insert into order_item(order_id,product_id,product_num) values(?,?,?) ";</p><p> 

109、 ResultSet rs = null;</p><p><b>  try </b></p><p><b>  {</b></p><p>  conn = DriverManager.getConnection(sConnStr); </p><p>  PreparedStatement

110、prepStmt = conn.prepareStatement(sql);</p><p>  prepStmt.setString(1,orderId);</p><p>  prepStmt.setString(2,productId);</p><p>  prepStmt.setString(3,productNum);</p><p&

111、gt;  prepStmt.executeUpdate();</p><p><b>  }</b></p><p>  訂購(gòu)單,書(shū)號(hào),購(gòu)買(mǎi)數(shù)量都是作為參數(shù)傳過(guò)來(lái)的。很明顯,新建一張訂購(gòu)單其實(shí)就是在order_item表里插入一條新紀(jì)錄就可以了。其原理已經(jīng)在上面說(shuō)過(guò)來(lái)了,就不在此重復(fù)了。</p><p>  2)在后面的購(gòu)物車(chē)?yán)?,一名顧客的最終

112、消費(fèi)總額就是根據(jù)這里一張張的訂購(gòu)單得到的,所以查找特定訂單號(hào)的訂購(gòu)單是這個(gè)類里面不可缺少的方法,它的算法實(shí)質(zhì)上就是條件查詢,和前面的無(wú)條件查詢相比,我只把sql語(yǔ)句作了改動(dòng):</p><p>  String sql="select id,order_id,product_id,product_num from order_item where order_id= ? ";</p>

113、<p>  第3個(gè)被封裝的方法是設(shè)置,獲得訂購(gòu)單號(hào),書(shū)號(hào),定購(gòu)數(shù)量,并且還可以獲得session price.</p><p>  4.3.4 實(shí)現(xiàn)購(gòu)物車(chē)實(shí)體的Bean</p><p>  在現(xiàn)實(shí)生活中,人們?nèi)コ匈I(mǎi)東西,都是把商品放在一個(gè)購(gòu)物籃里,等到把所有要買(mǎi)的東西選購(gòu)?fù)戤吅?,一起拿到收銀臺(tái)前付錢(qián)。我在程序里定義的購(gòu)物車(chē)實(shí)體就是模擬這個(gè)功能.作為購(gòu)物車(chē),購(gòu)物人,購(gòu)物時(shí)間,

114、所購(gòu)書(shū)的總價(jià)格都是必不可少的:</p><p>  private String id;</p><p>  private String userName;</p><p>  private String orderDate;</p><p>  private String orderPrice;</p><p>

115、;  我覺(jué)得在這個(gè)Bean里面主要要解決的一個(gè)問(wèn)題,如何解決一個(gè)新的購(gòu)物車(chē)。當(dāng)一個(gè)顧客買(mǎi)完書(shū)提交購(gòu)物車(chē)后,我們必須插入一個(gè)新的購(gòu)物車(chē)紀(jì)錄,這是由insertOrder()方法來(lái)實(shí)現(xiàn)的:其插入代碼如下:</p><p>  conn = DriverManager.getConnection(sConnStr); </p><p>  PreparedStatement prepStmt =

116、 conn.prepareStatement(sql);</p><p>  String curDate=(java.util.Calendar.getInstance().getTime()).toString();</p><p>  prepStmt.setString(1,userName);</p><p>  prepStmt.setString(2,

117、curDate);</p><p>  prepStmt.setString(3,orderPrice);</p><p>  prepStmt.executeUpdate();</p><p>  這里,插入的原理和前面是相同的,但是有一個(gè)地方需要解釋:即購(gòu)物時(shí)間字段,是采用的java.util.Calendar.getInstance().getTime(),這

118、是一個(gè)庫(kù)函數(shù),被封裝在java.util,在這個(gè)類定義的開(kāi)頭,我把這個(gè)庫(kù)文件包含進(jìn)來(lái):</p><p>  import java.util.*;</p><p>  這個(gè)方法返回的結(jié)果必須把轉(zhuǎn)化成String,否則后面插入數(shù)據(jù)庫(kù)時(shí)會(huì)出現(xiàn)類型不匹配的錯(cuò)誤。toString()就是用來(lái)實(shí)現(xiàn)類型轉(zhuǎn)換的。</p><p>  為了方便后面對(duì)這個(gè)購(gòu)物車(chē)進(jìn)行操作,我在這個(gè)方法

119、里還獲得了該購(gòu)物車(chē)的id:</p><p>  String selectStatement ="select id " +"from orderlist where user_name=? order by id desc ";</p><p>  PreparedStatement prepStmt = conn.prepareStatemen

120、t(selectStatement);</p><p>  prepStmt.setString(1,userName);</p><p>  ResultSet rs = prepStmt.executeQuery();</p><p>  rs.next();</p><p>  String result=rs.getString(1)

121、;</p><p>  return result;</p><p>  在sql里,查詢特定用戶購(gòu)物車(chē)的id號(hào),并且按照降序排列。是因?yàn)?,針?duì)一個(gè)網(wǎng)上購(gòu)書(shū)系統(tǒng),顧客可以多次在這里購(gòu)書(shū),那么在購(gòu)物車(chē)表單里,針對(duì)一個(gè)顧客會(huì)有很多條他的購(gòu)物紀(jì)錄,而在數(shù)據(jù)庫(kù)里,各條記錄的id是安裝時(shí)間先后順序逐漸遞增的,如果安裝降序排列,那么得到的第一條記錄則是最新插入的紀(jì)錄。result=rs.getStr

溫馨提示

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

評(píng)論

0/150

提交評(píng)論