B2C销售网站的设计与实现
摘 要:隨著網(wǎng)絡(luò)技術(shù)和應(yīng)用需求的發(fā)展許多網(wǎng)站建立了電子商務(wù)平臺,網(wǎng)上購物系統(tǒng)是電子商務(wù)的一個重要的應(yīng)用,由于網(wǎng)上購物系統(tǒng)擁有方便快捷、投資小、回收快、不受地理位置影響等一系列優(yōu)點,它已成為研究與應(yīng)用的熱點,本系統(tǒng)就是在客戶需求的基礎(chǔ)上建立了蘇寧易購的銷售網(wǎng)站系統(tǒng)。
本系統(tǒng)便是嘗試用JSP在網(wǎng)絡(luò)上架構(gòu)一個動態(tài)的電子商務(wù)網(wǎng)站,它是在Windows XP下,以O(shè)racle為數(shù)據(jù)庫開發(fā)平臺,Tomcat網(wǎng)絡(luò)信息服務(wù)作為應(yīng)用服務(wù)器,采用MVC模式開發(fā)的網(wǎng)上購物系統(tǒng)。它分前臺部分和后臺部分,前臺主要包括用戶注冊、商品瀏覽、購物車管理、訂單管理、個人資料管理模塊;后臺主要包括商品管理、訂單處理、用戶信息管理模塊。
關(guān)鍵詞:Servlet,JSP,MVC,網(wǎng)上購物系統(tǒng)
Design and implementation of Suningyi purchase sales site
Abstract: With the development of network technology and application needs many e-commerce website platform, online shopping system is an important application of e-commerce, the online shopping system has convenient, small investment, quick recovery, less affected by the location and a series of advantages, it has become the hotspot of research and application, the system is based on the needs of the customers established sales website system Suningyi purchase.
The system is the electronic commerce website try in a dynamic network architecture with JSP, which is in Windows XP, with Oracle database development platform, Tomcat network information services as application servers, using MVC online shopping system development model. It is divided into the front part and back part, the onstage mainly includes the user registration, product browsing, shopping cart management, order management, personal information management module; the backstage mainly includes the commodity management, order processing, user information management module.
Keywords: Servlet, JSP, MVC, online shopping system
目錄
TOC 1-3 前言 1
第1章 緒論 2
1.1開發(fā)背景 2
1.2 研究目的 3
第2章 相關(guān)技術(shù)簡介 4
2.1 JSP技術(shù) 4
2.2 JDBC技術(shù) 5
2.3 MVC模式 6
2.4 MyEclipse簡介 6
2.5 Oracle簡介 7
第3章 總體設(shè)計 9
3.1需求分析 9
3.2 功能模塊設(shè)計 10
3.2.1前臺功能模塊設(shè)計 10
3.2.2后臺功能模塊設(shè)計 11
3.3 數(shù)據(jù)庫設(shè)計 12
3.3.1 E-R圖 12
3.3.2數(shù)據(jù)庫表設(shè)計 14
第4章 詳細設(shè)計 17
4.1創(chuàng)建與數(shù)據(jù)庫的連接 17
4.2前臺功能的設(shè)計和實現(xiàn) 18
4.2.1用戶管理模塊 18
4.2.2商品管理模塊 22
4.2.3購物車管理模塊 24
4.2.4訂單管理模塊 25
4.3 后臺功能的設(shè)計與實現(xiàn) 26
4.3.1管理員登錄模塊 26
4.3.2用戶查詢模塊 27
4.3.3商品管理模塊 28
4.3.4訂單管理模塊 30
第5章 結(jié)束語 32
參考文獻 33
致謝 34
前言
隨著計算機網(wǎng)絡(luò)技術(shù)的發(fā)展,Web軟件系統(tǒng)被廣泛地應(yīng)用。在軟件技術(shù)日趨成熟的今天,開發(fā)者不再僅僅著力于系統(tǒng)功能的實現(xiàn),更關(guān)注軟件系統(tǒng)的結(jié)構(gòu)。然而,目前的電子商務(wù)平臺很多基于傳統(tǒng)的開發(fā)技術(shù),動態(tài)網(wǎng)頁中會嵌有大量的業(yè)務(wù)邏輯程序代碼,存在程序可重用程度低、可擴展性差、維護工作煩瑣等缺點。針對以上提出的問題,我們對基于MVC模式的電子商務(wù)平臺構(gòu)造技術(shù)進行研究,結(jié)合實例采用JSP簡化系統(tǒng)開發(fā),提高系統(tǒng)性能以及可維護性,體現(xiàn)了軟件框架結(jié)構(gòu)和組件技術(shù)重用的優(yōu)越性。
當(dāng)今社會互聯(lián)網(wǎng)成為人們快速獲取、發(fā)布和傳遞信息的重要渠道,它在人們政治、經(jīng)濟、生活等各個方面發(fā)揮著重要的作用。其中最具代表性之一的就是網(wǎng)上商店的誕生,網(wǎng)上購物系統(tǒng)向消費者展示出一片新鮮的購物天地,網(wǎng)上購物彌補了傳統(tǒng)購物的一些局限性,成為傳統(tǒng)購物的補充,極大方便了人們的生活。系統(tǒng)采用B/S體系結(jié)構(gòu),人們通過瀏覽器就可以訪問本網(wǎng)站的主頁。由于MVC模式的簡單高效性,本系統(tǒng)是在MVC模式之下,使用JSP、Servlet、JDBC、Ajax等技術(shù)實現(xiàn)的,同時使用JDBC操作數(shù)據(jù)庫中的表和數(shù)據(jù)。
本說明書分為5章,第1章介紹了課題的背景以及目的和意義,還有系統(tǒng)設(shè)計目標(biāo),第2章介紹了開發(fā)此系統(tǒng)運用到的一些相關(guān)技術(shù)JSP、MVC模式等,以及對myeclipse等一些開發(fā)工具做了介紹,第3章對此系統(tǒng)進行了總體設(shè)計,包括需求分析和數(shù)據(jù)庫的設(shè)計,第4章是對系統(tǒng)的詳細設(shè)計,主要講述了系統(tǒng)是如何實現(xiàn)的,包括前后臺兩個模塊,前臺實現(xiàn)了用戶注冊登錄等功能,后臺實現(xiàn)了管理員對系統(tǒng)的管理,如對訂單的管理等,第5章是結(jié)束語,主要是對本系統(tǒng)做出評價,指出本系統(tǒng)的優(yōu)缺點。
第1章 緒論
1.1開發(fā)背景
傳統(tǒng)的購物是到商店手把手的挑選商品,和貨主面對面交易,完成商品購買,這種購物方式是有很多缺點的,比如人多的時候要排隊等候、商品種類缺少等。隨著現(xiàn)代消費理念的提高和互聯(lián)網(wǎng)的普及,人們已經(jīng)不再滿足傳統(tǒng)的商務(wù)模式,不再滿足面對面地選擇商品而浪費時間,因為電子商務(wù)應(yīng)運而生。電子商務(wù)可以指的是利用簡單、快捷、低成本的電子通訊方式,買賣雙方不謀面地進行各種商貿(mào)活動。一般能在網(wǎng)上獲得供求信息從而達成交易的行為活動都可以稱之為電子商務(wù),如具體的各類產(chǎn)品的供求信息網(wǎng)站也都可以稱之為電子商務(wù)網(wǎng)站。電子商務(wù)是因特網(wǎng)爆炸式發(fā)展的直接產(chǎn)物,是網(wǎng)絡(luò)技術(shù)應(yīng)用的新方向。因特網(wǎng)本身所具有的開放性、全球性、低成本、高效率的特點,也成為電子商務(wù)的內(nèi)在特征,并使得電子商務(wù)大大超越了作為一種新的貿(mào)易形式所具有的價值[1]。
現(xiàn)在人們對于互聯(lián)網(wǎng)技術(shù)的要求已不單單是瀏覽一下網(wǎng)頁,收發(fā)電子郵件,日益忙碌的人們開始追求足不出戶的利用互聯(lián)網(wǎng)這一強大的平臺來實現(xiàn)的網(wǎng)上購物。對于企業(yè)來講,無論是企業(yè)之間(B to B),還是企業(yè)和客戶之間(B to C)的交易,如果能夠?qū)崿F(xiàn)網(wǎng)上交易將大大提高交易速度、節(jié)約交易成本。近幾年,隨著網(wǎng)絡(luò)數(shù)據(jù)庫技術(shù)的進一步發(fā)展,使得這一設(shè)想逐漸成為現(xiàn)實。運用JSP技術(shù)和網(wǎng)絡(luò)數(shù)據(jù)庫原理,基于B/S模式用java語言開發(fā)了一個網(wǎng)上購物系統(tǒng)。
網(wǎng)上商城”實際上是運行在Web服務(wù)器中的一個Web運用程序。網(wǎng)上商店”模擬一般的商店的經(jīng)營模式。利用頁面、腳本程序來實現(xiàn)網(wǎng)上商城”的進貨管理、銷售管理、庫存管理。互聯(lián)網(wǎng)技術(shù)提供的不僅僅只是供需雙方間的較低的交易成本,還有較低的選擇費用和更多可供選擇的商品。這些特點促使商家更多地通過使用網(wǎng)站來實現(xiàn)電子商務(wù)。本系統(tǒng)是蘇寧易購的銷售網(wǎng)站設(shè)計與實現(xiàn),用戶可以很方便的注冊成為網(wǎng)站會員,對商品進行瀏覽檢索,查看商品的詳細資料,然后根據(jù)各人的喜好把心儀的商品放入購物車,按照顧客所填寫的信息提交訂單。系統(tǒng)管理員則可以對現(xiàn)有的商品進行添加和編輯,查詢已注冊的用戶并對提交的訂單進行處理[2]。
1.2 研究目的
網(wǎng)絡(luò)購物中心是一種典型的電子商務(wù)網(wǎng)站,它的主要功能為企業(yè)與客戶提供一個理解的交易平臺,使掌握信息技術(shù)和商務(wù)規(guī)則的企業(yè)和個人,系統(tǒng)地利用各種電子工具和網(wǎng)絡(luò),高效率、低成本地從事各種以電子方式實現(xiàn)的商貿(mào)活動。網(wǎng)絡(luò)購物中心可以將傳統(tǒng)形式的購物活動的全過程在網(wǎng)絡(luò)上以電子交易方式實現(xiàn)的商業(yè)貿(mào)易活動,包括選購商品、處理訂單等。企業(yè)通過網(wǎng)絡(luò)購物中心可以完成交易的全過程,擴大交易的范圍,提高工作的效率,從而獲取經(jīng)濟和社會效益。
網(wǎng)上購物不僅改變了公司進行運作的模式,使網(wǎng)上商城成為傳統(tǒng)商務(wù)的補充和發(fā)展,也使人們改變了消費的觀念和消費習(xí)慣。網(wǎng)上購物最大程度地方便了用戶,你可以通過WWW瀏覽器實現(xiàn)WEB購物。自從幾十年前電子計算機的出現(xiàn),就為網(wǎng)上購物的發(fā)展創(chuàng)造了客觀條件。但是它的發(fā)展還要借助于網(wǎng)絡(luò),所以其快速發(fā)展是在因特網(wǎng)的廣泛應(yīng)用上,可以預(yù)見,網(wǎng)上購物將成為商業(yè)普及、貿(mào)易的主流,必將影響著千家萬戶的生活和消費行為,并日益成為社會商業(yè)貿(mào)易活動的重要形式。廉價的網(wǎng)絡(luò)資源使得網(wǎng)上商城成本低廉,世界性的互聯(lián)網(wǎng)絡(luò)帶來無比寬闊的市場,給商家和買家?guī)淼谋姸嗬鎺頍o限需求[3]。
本系統(tǒng)利用現(xiàn)在比較廣泛的JSP+Oracle數(shù)據(jù)庫的架構(gòu)實現(xiàn)的,前臺管理是友好的操作界面,供用戶瀏覽、查詢使用。包括瀏覽商品、查詢商品、訂購商品、購物車、用戶維護等功能;后臺管理是提供給管理員的,其中包括商品管理、用戶管理等。使管理員從繁瑣的手工操作中解脫出來,并提高了辦公效率。
第2章 相關(guān)技術(shù)簡介
2.1 JSP技術(shù)
Sun公司為了實現(xiàn)邏輯控制而創(chuàng)建出Servlet語言,但是Servlet語言將程序的邏輯控制代碼和輸出網(wǎng)頁文檔內(nèi)容混合在一起,使得控制網(wǎng)頁文檔內(nèi)容的顯示外觀和整體布局很難看,為了彌補Servlet語言這一缺陷,從而推出了JSP技術(shù)。它可以在傳統(tǒng)的網(wǎng)頁HTML中插入Java程序段和腳本文件以及JSP標(biāo)記。用JSP開發(fā)的Web應(yīng)用是跨平臺的。
JSP頁面由Web服務(wù)器執(zhí)行,JSP的運行原理是當(dāng)客戶端向服務(wù)器發(fā)送請求時,被請求的JSP頁面首先被Web應(yīng)用服務(wù)器(tomcat)編譯成Servlet(即將”.jsp”檔編譯成Java Class檔)并執(zhí)行,然后將所產(chǎn)生的結(jié)果作為一個HTML文件傳輸給瀏覽器,如果該JSP文件沒有被修改過,當(dāng)客戶端再次向服務(wù)器發(fā)送請求時,JSP文件將不會再編譯,而是直接執(zhí)行已編譯好的Servlet,這使得服務(wù)器的響應(yīng)速度變得非常快,從而加快了訪問速度。
JSP支持對組件的訪問,組件本身體現(xiàn)了封裝和復(fù)用的思想,基于組件的開發(fā)能有效提高軟件生產(chǎn)效率。多數(shù)JSP頁面依靠JavaBeans(相當(dāng)于一個實體類)及企業(yè)級JavaBeans(EJB)組件, 來完成應(yīng)用所需的復(fù)雜處理,并通過頁面中的腳本把具有特定功能的組件集成在一起。現(xiàn)在,由第三方開發(fā)的共享組件越來越多,大大簡化了用JSP實現(xiàn)動態(tài)網(wǎng)頁的工作。JSP允許開發(fā)人員自己定義標(biāo)簽(tag ),這種標(biāo)簽一般對應(yīng)于標(biāo)簽庫中的Java程序,代表特定的應(yīng)用功能。JSP使網(wǎng)頁的外觀設(shè)計與其動態(tài)內(nèi)容分離,SP頁面中的HTML標(biāo)簽定義了網(wǎng)頁的外觀,嵌在頁面中的腳本、JavaBeans組件和標(biāo)簽庫,共同生成與應(yīng)用邏輯相關(guān)的動態(tài)內(nèi)容。
本系統(tǒng)中用到了JSP的的標(biāo)準(zhǔn)標(biāo)簽庫(JSTL),JSTL提供了能方便定義變量的標(biāo)簽,比如本系統(tǒng)在商品信息的jsp頁面中中就用到了這個標(biāo)簽,還用到了標(biāo)簽,用來執(zhí)行流程控制,其功能和java中的if功能完全相同。在標(biāo)簽中配合使用EL了表達式,主要用于查找作用域中的數(shù)據(jù),然后對它們執(zhí)行簡單操作[4]。
本系統(tǒng)中還用到了JSP九大內(nèi)置對象中的request、response、session、out四個對象,request對象封裝了用戶提交的信息,通過調(diào)用該對象相應(yīng)的方法可以獲取封裝的信息,即使用該對象可以獲取用戶提交的信息,使用getParameter()方法獲取表單提交的信息。當(dāng)request對象獲取客戶提交的漢字字符時,會出現(xiàn)亂碼問題,必須進行特殊處理,如下設(shè)置:request.setCharacterEncoding(utf-8),request對象作用域是一次請求;response對象主要功能是用于服務(wù)器對客戶端的回應(yīng);session是基于cookie產(chǎn)生的,由tomcat管理的,cookie是通過代碼創(chuàng)建的。session對象指的是客戶端與服務(wù)器的一次會話,從客戶連到服務(wù)器的一個WebApplication開始,直到客戶端與服務(wù)器斷開連接為止,它是HttpSession類的實例。系統(tǒng)中用setAttribute()方法存放用戶名和密碼,out對象時一個輸出流,用來向客戶端輸出數(shù)據(jù)。out對象用于各種數(shù)據(jù)的輸出,其常用方法有out.print()用于輸出各種類型數(shù)據(jù),out.close()是用于關(guān)閉流的。
2.2 JDBC技術(shù)
JDBC(Java DataBase Connectivity)是sun公司制定的Java鏈接數(shù)據(jù)庫技術(shù)。在安裝好數(shù)據(jù)庫后JSP并不能直接與數(shù)據(jù)庫連接,這里選擇利用第三方JDBC驅(qū)動程序連接數(shù)據(jù)庫。JDBC連接數(shù)據(jù)庫的方式有四種,分別是JDBC-ODBC橋接驅(qū)動、JDBC本地訪問方式、DBC網(wǎng)絡(luò)訪問方式、JDBC數(shù)據(jù)庫協(xié)議訪問方式。在項目開發(fā)中,如果頻繁在JSP頁面中使用數(shù)據(jù)庫連接函數(shù),釋放函數(shù)進行操作的話,勢必會非常麻煩,而且代碼的冗余量也很大,頁面很多的時候維護也會非常麻煩,頁面上到處都是數(shù)據(jù)庫連接和釋放代碼。因此,可以利用公共數(shù)據(jù)庫訪問連接JavaBean的開發(fā)。通過將數(shù)據(jù)庫連接函數(shù)代碼,釋放函數(shù)代碼等封裝在JavaBean中,可以減少非常多的代碼編程工作,提高代碼可維護性。
SQL(結(jié)構(gòu)化查詢語言),它是一種標(biāo)準(zhǔn)化的關(guān)系型數(shù)據(jù)庫訪問語言。在SQL看來,數(shù)據(jù)庫就是表的集合,其中包含了行和列。SQL標(biāo)準(zhǔn)雖然也還處在不斷變革之中(任何一門標(biāo)準(zhǔn)如果已一成不變了,那只能說明這門學(xué)科已經(jīng)停止發(fā)展了),但其基本內(nèi)容相對穩(wěn)定。JDBC定義了Java語言同SQL數(shù)據(jù)之間的程序設(shè)計接口。
本系統(tǒng)中自定義了一個底層數(shù)據(jù)庫操作類DataBaseOperate,首先進行數(shù)據(jù)庫連接屬性的配置,在加載了JDBC驅(qū)動程序,建立了數(shù)據(jù)庫的URL后,定義一個配置文件存放路徑,使用getPath()方法,要先對文件是否存在加以判斷,若不存在,先創(chuàng)建一個文件jdbc.xml,若存在,通過調(diào)用DriverManager類的getConnection方法與oracle數(shù)據(jù)庫連接。這樣,在其他的Java文件和頁面中聲明調(diào)用或包含了jdbc.xml文件后,都可以對數(shù)據(jù)庫操作了,最后一定要記得關(guān)閉數(shù)據(jù)庫及相關(guān)的對象。
2.3 MVC模式
本系統(tǒng)中使用MVC模式來降低耦合度,實現(xiàn)分層思想。其中Model層實現(xiàn)系統(tǒng)中的業(yè)務(wù)邏輯,由JavaBean來實現(xiàn),View層用于與用戶的交互,用JSP來實現(xiàn),Controller層是M
odel與View之間溝通的橋梁,它可以分派用戶的請求并選擇恰當(dāng)?shù)囊晥D以用于顯示,同時它也可以解釋用戶的輸入并將它們映射為模型層可執(zhí)行的操作,本系統(tǒng)中是用servlet來實現(xiàn)的。
MVC全名是Model View Controller,是模型(model)、視圖(view)、控制器(controll
er)的縮寫,一種軟件設(shè)計典范,用于組織代碼,用一種業(yè)務(wù)邏輯 (?http:?/??/?baike.baidu.com?/?view?/?1642754.htm?)和數(shù)據(jù)顯示 (?http:?/??/?baike.baidu.com?/?view?/?1309817.htm?)分離的方法,這個方法的假設(shè)前提是如果業(yè)務(wù)邏輯被聚集到一個部件里面,而且界面和用戶圍繞數(shù)據(jù) (?http:?/??/?baike.baidu.com?/?view?/?38752.htm?)的交互能被改進和個性化定制而不需要重新編寫業(yè)務(wù)邏輯,MVC被獨特的發(fā)展起來用于映射傳統(tǒng)的輸入、處理和輸出功能在一個邏輯的圖形化用戶界面的結(jié)構(gòu)中[5]。
視圖是用戶看到并與之交互的界面。對老式的Web (?http:?/??/?baike.baidu.com?/?view?/?3912.htm?)應(yīng)用程序來說 ,視圖就是由HTML (?http:?/??/?baike.baidu.com?/?view?/?692.htm?)元素組成的界面,在新式的Web應(yīng)用程序中,HTML依舊在視圖中扮演著重要的角色,但一些新的技術(shù)已層出不窮,它們包括Adobe Flash (?http:?/??/?baike.baidu.com?/?view?/?1128244.htm?)和象XHTML、XML/XSL、WML (?http:?/??/?baike.baidu.com?/?view?/?160091.htm?)等一些標(biāo)識語言和Web services (?http:?/??/?baike.baidu.com?/?view?/?1086510.htm?)。MVC好處是它能為應(yīng)用程序處理很多不同的視圖。在視圖中其實沒有真正的處理發(fā)生,不管這些數(shù)據(jù)是聯(lián)機存儲的還是一個雇員列表,作為視圖來講,它只是作為一種輸出數(shù)據(jù)并允許用戶操縱的方式。
模型表示企業(yè)數(shù)據(jù)和業(yè)務(wù)規(guī)則。在MVC的三個部件中,模型擁有最多的處理任務(wù),例如它可能用像EJBs和ColdFusion Components這樣的構(gòu)件對象 (?http:?/??/?baike.baidu.com?/?view?/?2387.htm?)來處理數(shù)據(jù)庫,被模型返回的數(shù)據(jù)是中立的,就是說模型與數(shù)據(jù)格式無關(guān),這樣一個模型能為多個視圖提供數(shù)據(jù),由于應(yīng)用于模型的代碼只需寫一次就可以被多個視圖重用,所以減少了代碼的重復(fù)性[6]。
控制器接受用戶的輸入并調(diào)用模型和視圖去完成用戶的需求,所以當(dāng)單擊Web頁面中的超鏈接和發(fā)送HTML表單 (?http:?/??/?baike.baidu.com?/?view?/?3488030.htm?)時,控制器本身不輸出任何東西和做任何處理。它只是接收請求并決定調(diào)用哪個模型構(gòu)件去處理請求,然后再確定用哪個視圖來顯示返回的數(shù)據(jù)。
2.4 MyEclipse簡介
本系統(tǒng)是在MyEclipse上進行開發(fā)的,MyEclipse從本質(zhì)上講是基于Eclipse的JavaEE方面的插件,是專門為方便JavaEE項目的開發(fā)設(shè)計的。MyEclipse的功能非常強大,支持也十分廣泛,尤其是對各種開源產(chǎn)品的支持十分不錯。MyEclip目前支持Java Servlet、AJAX、 JSP、JSF、 Struts、Spring、Hibernate、EJB3,JDBC數(shù)據(jù)庫鏈接工具等多項功能。可以說MyEclipse幾乎囊括了目前所有主流開源產(chǎn)品的專屬eclipse開發(fā)工具。本系統(tǒng)用的是Myeclipse8.5版本,Genuitec發(fā)布了MyEclipse Enterprise Workbench 5.0,更智能、更快捷、更簡單和更便宜的J2EE工具的新版本的誕生。它的價格對于個人和企業(yè)開發(fā)人員來說都是非常有吸引力的。這是J2EE IDE市場一個重量級的選手。通過增加UML雙向建模工具、WYSIWYG的JSP/Strutsdesigner、可視化的Hibernate/ORM工具、Spring和Web services支持,以及新的Oracle數(shù)據(jù)庫 (?http:?/??/?baike.baidu.com?/?view?/?1685727.htm?)開發(fā),MyEclipse 5.0繼續(xù)為業(yè)界提供全面的產(chǎn)品[7]。
由于MyEclipse自帶的jdk不全面,而且不能更新,所以在oracle官網(wǎng)中下載了jdk1.6.0_23,然后在MyEclipse中配置jdk,點擊window下的Preferences,接著點擊下面Java下的Installed JREs,點擊add,最后還要設(shè)定環(huán)境變量path,JAVA_HOME。Path變量針對Java的具體含義是系統(tǒng)在任何路徑下都可以識別Java命令需要設(shè)置的變量。JAVA_HOME變量就是java的安裝路徑。
2.5 Oracle簡介
本系統(tǒng)使用的數(shù)據(jù)庫是oracle,采用pl/sql工具建了5張表以及一個序列,該序列名稱是T_SPXX_SPBH,PL/SQL Developer是一個集成開發(fā)環(huán)境,專門面向Oracle數(shù)據(jù)庫存儲程序單元的開發(fā)。oracle數(shù)據(jù)庫是一種大型數(shù)據(jù)庫系統(tǒng),一般應(yīng)用于商業(yè),政府部門,它的功能很強大,能夠處理大批量的數(shù)據(jù),在網(wǎng)絡(luò)方面也用的非常多。不過,一般的中小型企業(yè)都比較喜歡用mysql、SQL server等數(shù)據(jù)庫系統(tǒng),它的操作很簡單,功能也比較齊全。只是相對于oracle數(shù)據(jù)庫而言,在處理大量數(shù)據(jù)方面有些不如,oraclede的穩(wěn)定性比sqlserver好,安全性也比sqlserver好,獲得最高認證級別ISO的認證,oracle具有開放性,sqlserver只能在windows上運行[8]。
oracle簡稱甲骨文,是僅次于微軟公司的世界第二大軟件公司,該公司名稱就叫oracl
e。oracle數(shù)據(jù)庫管理系統(tǒng)是一個以關(guān)系型和面向?qū)ο鬄橹行墓芾頂?shù)據(jù)的數(shù)據(jù)庫管理軟件系統(tǒng),其在管理信息系統(tǒng)、企業(yè)數(shù)據(jù)處理、因特網(wǎng)及電子商務(wù)等領(lǐng)域有著非常廣泛的應(yīng)用。因其在數(shù)據(jù)安全性與數(shù)據(jù)完整性控制方面的優(yōu)越性能,以及跨操作系統(tǒng)、跨硬件平臺的數(shù)據(jù)互操作能力,使得越來越多的用戶將oracle作為其應(yīng)用數(shù)據(jù)的處理系統(tǒng)。oracle數(shù)據(jù)庫是基于客戶端/服務(wù)器”模式結(jié)構(gòu)。客戶端應(yīng)用程序執(zhí)行與用戶進行交互的活動。其接收用戶信息,并向服務(wù)器端發(fā)送請求。服務(wù)器系統(tǒng)負責(zé)管理數(shù)據(jù)信息和各種操作數(shù)據(jù)的活動。
oracle數(shù)據(jù)庫將權(quán)限劃分為系統(tǒng)權(quán)限和對象權(quán)限兩大類。系統(tǒng)權(quán)限是當(dāng)前用戶對數(shù)據(jù)庫的操作權(quán)限,對象權(quán)限是當(dāng)前用戶對其他用戶創(chuàng)建的數(shù)據(jù)庫對象的訪問權(quán)限。數(shù)據(jù)庫對象有表、約束、索引、序列、觸發(fā)器等等。實際Oracle的數(shù)據(jù)庫對象是存放在一個叫做”方案”的邏輯空間內(nèi)的。當(dāng)前用戶創(chuàng)建的數(shù)據(jù)庫對象都放在當(dāng)前用戶的方案下,在用戶創(chuàng)建的時候Oracle數(shù)據(jù)庫會自動的為該用戶創(chuàng)建一個與用戶名相同的方案名。oracle創(chuàng)建表的規(guī)則:表名是由字母、數(shù)字、$、#、_組成 ,數(shù)字不能開頭,長度不能超過30字符,大小寫不敏感。一般情況下表名用大寫來顯示,不建議使用中文, 不能使用Oracle中的關(guān)鍵字。如該系統(tǒng)中的用戶表名是T_YH,要注意的是如果需要訪問其他的oracle數(shù)據(jù)庫必須要配置tnsnames.ora在oracle的安裝目錄下的NETWORK/ADMIN/下,然后打開tnsnames.ora,把SERVICE_NAME = orcl中的orcl改成你要訪問的那個數(shù)據(jù)庫名稱。
本系統(tǒng)要能正常使用數(shù)據(jù)庫的前提是必須把服務(wù)(OracleServiceORC)和監(jiān)聽器(OracleOraDb10g_home1TNSListener)開啟,建議把它們改成手動,這樣不影響開機速度。
第3章 總體設(shè)計
3.1 需求分析
商務(wù)系統(tǒng)隨著中國經(jīng)濟的高速發(fā)展發(fā)生了巨大的變化。專做營銷的中小型企業(yè)隨著百姓個人消費水平的增長迅速成長起來,但同時也帶來了這一行業(yè)激烈的競爭。如今的網(wǎng)站已經(jīng)不單單是把企業(yè)想要表達的內(nèi)容拜訪在網(wǎng)站上那么簡單,設(shè)計包含了更多的元素,例如css樣式、jsp頁面,給予瀏覽者更多的視覺享受。現(xiàn)在企業(yè)營銷商需要用一些更新穎更有效的方式增強競爭力。建設(shè)一個宣傳自身商品形象的電子商務(wù)營銷模式的網(wǎng)站是一種有效的方法。另外,通過電子商務(wù)網(wǎng)站,廣闊自己的營銷方式和市場,能夠幫助企業(yè)營銷商從魚龍混雜的市場中脫穎而出,完善企業(yè)銷售與服務(wù)的環(huán)節(jié),最終提升企業(yè)的價值與經(jīng)濟效益。蘇寧也在建立起了屬于自己的購物平臺,本系統(tǒng)就是模擬蘇寧易購網(wǎng)站實現(xiàn)的一個網(wǎng)上購物系統(tǒng)[9]。具有基本以下功能:
1.用戶注冊登陸功能:用戶戶根據(jù)注冊模快要求進行郵箱注冊,驗證碼的驗證,手機號是可選填的,注冊后成功后完善自己的信息。
2.商品管理功能:該部分功能包括商品的管理和商品的瀏覽查詢兩大部分,將商品分成了日用、流行、新品、熱銷這4種狀態(tài),商品管理是面向管理員的,分商品增加、修改、查詢,刪除4個部分。面向用戶的主要是商品的搜索,瀏覽功能,這里只支持精確查詢。
3.購物車管理功能:商店用戶在瀏覽商品時,可以根據(jù)自己愿意購買的商品加入到購物車,然后可以去結(jié)算或者繼續(xù)購物,購買方式有兩種,一鍵購和加入購物車,一鍵購是不需要加入購物車的,但是若要繼續(xù)瀏覽其他商品可以選擇先加入購物車,當(dāng)進行結(jié)帳上時,購物車變?yōu)槎▎巍?br /> 4.訂單管理功能:訂單管理分為面向管理員者和面向用戶,管理員可以查詢定單,修改定單以及刪除訂單,但是只能修改商品數(shù)量和商品總價格。用戶可以查詢訂單狀態(tài),若此訂單未付款,用戶可以在此付款。
5.用戶管理功能:此功能也分為兩種面向管理員者和面向用戶,用戶可以對自己的信息進行修改,本系統(tǒng)有個默認的admin最大管理員,admin修改用戶信息,注意的是不能修改用戶密碼,同時可以給用戶授管理員權(quán)限,管理員可以查詢所有用戶,并有權(quán)刪除。admin也可以新增其他管理員。
3.2 功能模塊設(shè)計
層次模塊結(jié)構(gòu)是將系統(tǒng)劃分為若干子系統(tǒng),子系統(tǒng)下再劃分為若干的模塊。而模塊是指具備有輸入輸出、邏輯功能、運行程序和內(nèi)部數(shù)據(jù)四種屬性的一組程序。在結(jié)構(gòu)化系統(tǒng)設(shè)計中,模塊一般都是按功能劃分的,通常稱為功能模塊。合理的功能模塊的劃分能夠極大限度地減少重復(fù)勞動、提高開發(fā)工作的效率并增大系統(tǒng)的可維護性[10]。
以前面的需求分析為基礎(chǔ),將系統(tǒng)分為兩大模塊,即前臺模塊和后臺模塊。本系統(tǒng)的功能結(jié)構(gòu)如圖3-1所示。
圖3-1 系統(tǒng)功能結(jié)構(gòu)圖
3.2.1 前臺功能模塊設(shè)計
前臺用戶如需購買商品則需要先注冊,為了系統(tǒng)的安全性考慮,在注冊用戶時要對郵箱格式進行了驗證,還要校驗兩次密碼輸入是否相同,以及驗證碼是否輸入正確,注冊成功之后還要完善信息,完善的信息中包括昵稱、真實姓名、性別、出生年月、證件類型、證件號碼、居住地址。此時也要驗證出生年月的格式和身份證的有效性,注冊成功之后登錄到首頁面中,這時瀏覽商品了,將喜歡的商品選中加入購物車,可以查看購物車,修改商品數(shù)量,當(dāng)總金額大于等于80時是免運費的,如果覺得這個商品不喜歡了可以刪除購物車,購買購物車中的商品,即可以生成訂單,也可以在訂單管理里面查詢到訂單,訂單狀態(tài)為0的時候設(shè)置為未付款狀態(tài)。如果沒有登陸直接去主頁面瀏覽商品的話,是不能加入購物車的,這是通過自己的用戶名和密碼登陸進去可以直接跳到剛剛瀏覽的那個頁面,不需要再重新去查找商品了,這個是比較人性化的設(shè)計。為了方便登陸后臺頁面,在前臺首頁上放了一個超鏈接可以連到后臺登陸的界面[11]。前臺具體模塊如圖3-2所示。
圖3-2 前臺功能結(jié)構(gòu)圖
3.2.2 后臺功能模塊設(shè)計
臺后臺管理員不能注冊只能由默認的admin管理員新增,首先要對管理員賬號和密碼進行驗證,登陸進去之后可以將所有的用戶查詢出來,這里支持模糊查詢,可以修改用戶信息,給用戶設(shè)置是否有管理員權(quán)限,后臺查詢商品可以根據(jù)商品編號查詢,也可以根據(jù)商品編號和商品名稱同時查詢,可以修改商品信息,刪除掉的商品將在后臺商品信息表中的商品狀態(tài)置為0,還可以去查詢訂單,如果生成的訂單沒有付款則訂單狀態(tài)置為0,付款成功后置為1[12]。后臺具體模塊如圖3-3所示。
圖3-3 后臺功能結(jié)構(gòu)圖
3.3 數(shù)據(jù)庫設(shè)計
在建設(shè)網(wǎng)站系統(tǒng)之前,必須對系統(tǒng)所用到的數(shù)據(jù)進行大致的分類和具體的結(jié)構(gòu)設(shè)計,既要做到清晰明了,又要能適應(yīng)系統(tǒng)各項功能的調(diào)用,而不至于產(chǎn)生結(jié)構(gòu)上的邏輯混亂,保證關(guān)鍵數(shù)據(jù)在意外情況下不會被破壞,可以說數(shù)據(jù)庫是系統(tǒng)的重中之重。數(shù)據(jù)庫的核心思想是構(gòu)造數(shù)據(jù)庫,建立數(shù)據(jù)庫及相關(guān)的系統(tǒng),滿足各種需求。首先在設(shè)計數(shù)據(jù)庫時要分離各個實體和表,一個實體對應(yīng)一個表;同時要明確各實體間的關(guān)系,明確各實體的屬性,以便確定它的字段[13]。
3.3.1 E-R圖
數(shù)據(jù)模型是現(xiàn)實世界中數(shù)據(jù)特征的抽象。數(shù)據(jù)模型應(yīng)該滿足三個方面要求,能夠比較真實的模擬現(xiàn)實世界,容易為人所理解,便于計算及實現(xiàn)。E-R圖為實體關(guān)系圖,提供了表現(xiàn)實體型、屬性和聯(lián)系的方法,用來描述現(xiàn)實世界的概念模型。構(gòu)成E-R圖的基本要素是實體型、屬性和聯(lián)系。用矩形表示實體型,矩形 (?http:?/??/?baike.baidu.com?/?view?/?150124.htm?)框內(nèi)寫明實體名;用橢圓 (?http:?/??/?baike.baidu.com?/?view?/?36981.htm?)表示實體的屬性,并用無向邊將其與相應(yīng)的實體型連接起來;用菱形表示實體型之間的聯(lián)系,在菱形 (?http:?/??/?baike.baidu.com?/?view?/?133728.htm?)框內(nèi)寫明聯(lián)系名,并用無向邊分別與有關(guān)實體型連接起來[14]。
本系統(tǒng)中包括用戶、管理員、商品、訂單這幾個實體。實體產(chǎn)生的行為有用戶注冊和登陸、用戶資料修改、用戶購買商品、商品的增刪改查、訂單的增刪改查、管理員對用戶的刪除、修改。
商品實體具有商品編號、商品名稱、尺碼、商品狀態(tài)、商品描述、商品類型、日用狀態(tài)、熱銷狀態(tài)、新品狀態(tài)、流行狀態(tài)、顏色、商品價格、商品數(shù)量、圖片路徑這些屬性,商品信息實體圖如圖3-4所示。
圖3-4 商品信息實體圖
訂單實體具有訂單狀態(tài)、訂單編碼、配送方式、收貨人、手機號碼、電話、用戶名、下單時間、結(jié)算金額、收貨地址這些屬性。它的實體圖如3-5所示。
圖3-5 訂單明細實體圖
3.3.2 數(shù)據(jù)庫表設(shè)計
本系統(tǒng)數(shù)據(jù)庫采用Oracle數(shù)據(jù)庫,共包含用戶表、用戶信息表、商品信息表、訂單主表和訂單明細表這5張表。
用戶表主要存放用戶注冊后而為進行完善信息的時候的數(shù)據(jù)的存放,用于前臺注冊。該表主要字段有用戶名、密碼、是否是管理員、用戶狀態(tài),主鍵是用戶名,用0和1作為判斷,0代表不是管理員,不是用戶,1代表是管理員,是用戶[15]。如表3-1所示。
表3-1 用戶表
列名 數(shù)據(jù)類型 是否為空 是否為主鍵 描述
yhm Varchar2(50) 否 √ 用戶名
mm Varchar2(50) 否 密碼
sfsgly Number 否 是否是管理員
yhzt Number 否 用戶狀態(tài)
用戶信息表主要存放用戶信息完善后的數(shù)據(jù)的存放,用于前臺登記,后臺用戶管理。該表主要字段有用戶名、郵箱、昵稱、姓名、性別、出生年月、證件類型、證件號碼、居住地址,主鍵是用戶名,該表與用戶表是以用戶名關(guān)聯(lián)的。如表3-2所示。
表3-2 用戶信息表
列名 數(shù)據(jù)類型 是否為空 是否為主鍵 描述
yhm Varchar2(50) 否 √ 用戶名
email Varchar2(50) 否 郵箱
nc Varchar2(50) 否 昵稱
xb Varchar2(50) 否 姓名
xm Varchar(250) 否 性別
csny Date 否 出生年月
zjlx Varchar2(50) 否 證件類型
zjhm Varchar2(50) 否 證件號碼
jzdz Varchar2(50) 否 居住地址
訂單主表用于前臺用戶提交訂單后的訂單信息。該表主要字段有訂單編碼、商品名稱、購買數(shù)量、商品總金額、訂單狀態(tài)、下單時間,其中訂單編碼是主鍵,訂單狀態(tài)用0和1表示,0表示該訂單還未付款,1表示付款成功。如表3-3所示。
表3-3 訂單主表
列名 數(shù)據(jù)類型 是否為空 是否為主鍵 描述
ddbm Varchar2(50) 否 √ 訂單編碼
spbh Varchar2(50) 否 商品名稱
spsl Number 否 購買數(shù)量
spzje Number 否 商品總金額
spzt Number 否 訂單狀態(tài)
xdsj Date 否 下單時間
商品信息表用于前臺商品詳細信息的顯示,用于后臺商品信息的修改和刪除。該表主要字段有商品編號、商品名稱、商品價格、商品數(shù)量、顏色、尺碼、款式、商品描述、熱銷狀態(tài)、新品狀態(tài)、流行狀態(tài)、日用狀態(tài)、商品狀態(tài)、圖片路徑、商品類型,通過建立一個序列來生成商品編號,商品狀態(tài)用0和1表示,0表示商品無效,當(dāng)商品被刪除是商品狀態(tài)就為0。如表3-4所示。
訂單明細表是與訂單主表相關(guān)聯(lián)的,該表用于后臺管理員對訂單的查詢的數(shù)據(jù)的顯示。該表主要字段有訂單編碼、配送方式、收貨人、用戶名、手機號碼、電話、收貨地址、訂單狀態(tài)、結(jié)算金額、下單時間。其中訂單編碼是主鍵。如表3-5所示。
表3-4 商品信息表
列名 數(shù)據(jù)類型 是否為空 是否為主鍵 描述
spbh Varchar2(50) 否 √ 商品編號
spmc Varchar2(50) 否 商品名稱
spjg Number(10,2) 否 商品價格
spsl Integer 否 商品數(shù)量
ys Varchar2(50) 否 顏色
cm Varchar2(50) 否 尺碼
ks Varchar2(50) 否 款式
spms Varchar2(500) 否 商品描述
rxzt Number 否 熱銷狀態(tài)
xpzt Number 否 新品狀態(tài)
lxzt Number 否 流行狀態(tài)
ryzt Number 否 日用狀態(tài)
spzt Number 否 商品狀態(tài)
tplj Varchar2(100) 否 圖片路徑
splx Varchar2(50) 否 商品類型
表3-5 訂單明細表
列名 數(shù)據(jù)類型 是否為空 是否為主鍵 描述
ddbm Varchar2(50) 否 √ 訂單編碼
psfs Varchar2(50) 否 配送方式
shr Varchar2(50) 否 收貨人
yhm Varchar2(50) 否 用戶名
sjhm Number 否 手機號碼
dh Number 否 電話
shdz Varchar2(100) 否 收貨地址
ddzt Number 否 訂單狀態(tài)
xdsj Date 否 結(jié)算金額
jsje Number 否 下單時間
第4章 詳細設(shè)計
將系統(tǒng)分成前臺和后臺分成兩個模塊,各模塊雖然是獨立的,但又統(tǒng)一于同一數(shù)據(jù)庫中,便于管理員管理維護數(shù)據(jù)庫,同時也便于用戶的操作。通過數(shù)據(jù)庫連接,對后臺數(shù)據(jù)進項增刪改查,并把數(shù)據(jù)顯示到前臺頁面上[16]。
4.1 創(chuàng)建與數(shù)據(jù)庫的連接
在JSP中可以使用Java的JDBC技術(shù),實現(xiàn)對數(shù)據(jù)庫中表記錄的查詢、修改和刪除等操作。JDBC技術(shù)在JSP中占有很重要的位置。JDBC(Java DataBase Connectivity)是Java數(shù)據(jù)庫連接API。JDBC能完成三件事,第一是與一個數(shù)據(jù)庫建立連接,第二是向數(shù)據(jù)庫發(fā)送SQL語句,第三是處理數(shù)據(jù)庫返回的結(jié)果。要先配置數(shù)據(jù)庫連接的屬性配置,配置驅(qū)動private String driver=oracle.jdbc.driver.OracleDriver,配置url路徑private String url = jdbc:oracle:thin:@localhost:1521:ORCL,配置數(shù)據(jù)庫的用戶名private String user = scott,配置數(shù)據(jù)庫的密碼private String password = niit,定義配置文件存放路徑private File pFile = new File(DataBaseOperate.class.getResource(/).getPath().
replaceAll(/classes, /conf)+ jdbc.xml),再定義一個全局連接的變量private Connection con = null和全局通道的變量private Statement state = null,通過Class.forName(driver)加載驅(qū)動,通過con = DriverManager.getConnection(url, user, password)建立連接,最后通過state = con.createStatement()創(chuàng)建通道[17]。
4.2 前臺功能的設(shè)計和實現(xiàn)
前臺主要實現(xiàn)了用戶注冊、用戶登錄、商品展示、購物車管理、生成訂單等功能,采用ajax進行在js中向web服務(wù)器請求傳遞數(shù)據(jù)并接受數(shù)據(jù)[18]。
4.2.1 用戶管理模塊
用戶在購買商品前一定要先登錄,如果沒有注冊過則需先注冊用戶,然后才能瀏覽、購
買商品。注冊時要驗證郵箱地址,兩次密碼是否輸入相同,驗證碼是否正確,還對密碼強度進行了判斷,手機號碼是可選填的,使用了正則表達式[19]來驗證郵箱格式和密碼強度和手機號碼,如果驗證碼看不清可以點擊換一張,就是通過一個click事件,綁定一個事件處理函數(shù),使用attr()方法設(shè)置被選元素的屬性值。對這一系列的驗證增強了系統(tǒng)的安全性,合理性。
用戶注冊界面如圖4-1所示。
圖4-1用戶注冊圖
點擊注冊頁面的提交注冊按鈕之后,會觸發(fā)一個click事件,通過該按鈕的id找到它綁定的函數(shù),點擊提交按鈕之后要先把所有提示信息清空,然后進行一系列驗證,定義了一個falg變量,設(shè)為true,如果flag等于true,則使用ajax的post方法請求后臺servlet 類if(flag==true){$.post(/SNYG/servlet/registServlet,{yxdz: $(#yxdz).val(),mm:
$(#szmm).val(),sjhm: $(#sjhm).val(),yzm: $(#yzm).val()},post向指定的資源提交要處理的數(shù)據(jù)。該servlet中創(chuàng)建了一個用戶的對象RegistUser ru=new RegistUser(),
調(diào)用了RegistUser用戶類中的ru.saveUserInfo(yxdz, mm,telephone)方法,執(zhí)行sql語句String sql=insert into t_yh(yhm,mm,sfsgly,yhzt) values(+email+,+password+
,0,1)將數(shù)據(jù)插入到后臺數(shù)據(jù)庫表中,定義一個funciton(data){}的函數(shù),如果data等于0表示用戶名存在,等于1表示驗證碼錯誤,等于2表示驗證通過,然后根據(jù)if判斷,根據(jù)id從頁面中取得對應(yīng)元素,將text的文本內(nèi)容設(shè)置到該元素中。
頁面中的驗證碼是定義了一個圖形處理類YanZhengMaServlet 來處理的,首先設(shè)置http頭信息,讓頁面知道這是一幅圖片response.setContentType(image/jpeg),然后取消圖片的緩存response.setHeader(Pargma, No-cache),接著再在內(nèi)存中創(chuàng)建圖片的緩沖區(qū)BufferedImage image=new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB
),定義一個畫筆Graphics g=image.getGraphics(),最后定義一系列的畫邊框、背景、隨機線、數(shù)字的方法,記得的數(shù)字放在session中存儲以便登陸的時候驗證HttpSession session = request.getSession(),session.setAttribute(yzm, srand),接著調(diào)用dispose()方法結(jié)束繪畫,最后借助于圖形輸出接口將內(nèi)存中畫的圖片通過response中的輸出通道向客戶端頁面輸出ServletOutputStream responseOutputStream = response.getOutputStream(),
ImageIO.write(image, JPEG, responseOutputStream)。
跳到注冊成功之后的頁面,點擊點此完善超鏈接到完善信息的(addInformation.jsp)頁面,該頁面中要對出生日期格式和身份證進行驗證,信息完善頁面設(shè)計如圖4-2所示。
圖4-2 用戶信息完善圖
通過EL表達式${yxdz}取得注冊的郵箱地址值,將它顯示在信息完善頁面中,是不可以修改的,然后同樣采用上面的請求方式跳轉(zhuǎn)到增加信息的Servlet,先通過request獲取參數(shù)
值,判斷身份證是否有效,定義一個變量flag,flag=0說明身份證號碼正確,然后連接數(shù)據(jù)
庫,執(zhí)行Update更新語句String sql=update t_yhxx set nc=+nc+,xm=+xm+,xb=
+xb+,csny=to_date(+csny+,yyyy-mm-dd),zjlx=+zjlx+,zjhm=+zjhm+,jzdz=+jzdz+where yhm=+yhm+。
信息完善之后就可以登錄了,前臺登錄使用submit這個點擊登錄按鈕觸發(fā)的事件進行驗證,用ajax的post方法請求后臺checkLogin這個servlet,獲取定義servlet中了兩個變量flag和number,flag設(shè)為0,表示用戶名不存在,1表示用戶名存在密碼錯誤,2表示驗證通過3表示驗證碼錯誤,number設(shè)為0,0表示用戶名不存在,1表示用戶名存在密碼錯誤,2表示驗證通過,調(diào)用checkUser里面的find()方法,執(zhí)行selcet語句,通過用戶名查詢數(shù)據(jù)庫中對應(yīng)的用戶對象,通過驗證獲得num的值,返回到checkLogin,在進行if判斷,得到flag的值。用戶登錄,登陸界面如圖4-3所示。
圖4-3 用戶登陸圖
前臺登錄使用submit這個點擊登錄按鈕觸發(fā)的事件,用ajax的post方法請求后臺登陸檢查checkLogin這個servlet,定義servlet中了兩個變量flag和number,String flag=0,int number=0,flag設(shè)為0,表示用戶名不存在,1表示用戶名存在密碼錯誤,2表示驗證通過3表示驗證碼錯誤,number設(shè)為0,0表示用戶名不存在,1表示用戶名存在密碼錯誤,2表示驗證通過,調(diào)用檢查用戶checkUser類里面的find()方法,執(zhí)行selcet查詢語句,查詢出來的結(jié)果以結(jié)果集返回,然后遍歷結(jié)果集while(rs1.next()){num=2;}通過用戶名查詢數(shù)據(jù)庫中對應(yīng)的用戶對象,通過驗證獲得num的值,返回到checkLogin,在進行if判斷,得到flag的值。
number=checkUser.find(yhm, mm);
if(!yzm1.equals(yzm2)){
flag=3;
}else if(yzm1.equals(yzm2) && number==0){
flag=0;
}else if(yzm1.equals(yzm2) && number==1){
flag=1;
}else if(yzm1.equals(yzm2) && number==2){
flag=2;
}
然后創(chuàng)建一個session,把用戶明和密碼放入session中,以備下一個頁面進行提取應(yīng)用HttpSession session=request.getSession(),session.setAttribute(yhm,yhm),sess
ion.setAttribute(mm,mm)。
4.2.2 商品管理模塊
進入主頁面后,用戶可以根據(jù)自己喜好瀏覽頁面上的商品,通過
- 無序列表實現(xiàn)了頁面上的菜單功能,還可以根據(jù)商品名稱進行搜索。商品顯示頁面如圖4-4所示。
圖4-4 商品顯示圖
前臺頁面qt_main.jsp中沒有任何數(shù)據(jù),是通過qt_main.js中的ajax獲得數(shù)據(jù)的,$.getJSON(/SNYG/servlet/zYMTuP,null,function(data)跳到主頁面圖片的Servlet中,該類中定義一個map,里面放了四種商品,value是四種商品的list集合。
Map > map=new HashMap>();
map.put(rxsp,tup.getRxlist());
map.put(xpsp,tup.getXplist());
map.put(lxsp,tup.getLxlist());
map.put(rysp,tup.getRylist());
Gson gson=new Gson();//將map以json的格式返回到頁面
out.print(gson.toJson(map));
通過ZYMTuPCl類中g(shù)etRxlist()方法跳轉(zhuǎn)的對應(yīng)的熱銷產(chǎn)品的實現(xiàn)類中,再通過sql語句select * from t_spxx where rxzt=1 and rownum<=5查找到商品,然后循環(huán)遍歷商品,把商品再放到list中。最后通過ajax循環(huán)變量商品信息并將商品輸出到頁面中。
for(var item in data){
if(item==rxsp){
var rxsp=data[item];
for(var i=0;ivar str= title=+rxsp[i].spmc+:+rxsp[i].spjg+元/>;
$(#rxsp).append(str);}
將商品顯示到主頁面后,可以點擊商品通過商品編號顯示商品的具體信息,商品信息如圖4-5所示。
圖4-5 商品信息圖
具體商品顯示頁面中的值是在js中取的,先定義一個臨時商品變量tmpspbh,用ajax的get方式請求,當(dāng)進入頁面是加載ShowSpService這個Servlet,先獲得從商品顯示頁面ShowSp.jsp傳遞過來的商品編號,根據(jù)商品編號從后臺商品信息表中查詢到這個商品編號的商品,創(chuàng)建一個商品的對象sp,把遍歷的商品放入這個new的新對像中,先判斷結(jié)果集是否為空,如果為空先遍歷結(jié)果集rs.next(),再判斷傳遞過來的商品是否為空,不為空的話將tmpspbh和sp進行比較,再把tmpspbh賦值給sp,最后將它以json格式輸出到j(luò)sp頁面中。$.get(/SNYG/Servlet/showSpService,{spbh:tmpspbh},function(json){ $(#tplj).attr(src,json.tplj);$(.spms).html(json.spms);$(#hidden_spbh).val(json.spbh);$(#spjg).html(json.spjg);$(#text_spsl).val(1);$(#spks).html(json.Spks)$
(#spys).html(json.spys);$(#spmc).html(json.spmc);$(#splx).html(json.splx
);},json)
4.2.3 購物車管理模塊
將商品具體信息顯示出來之后就可以將商品加入購物車了,也可以選擇一鍵購買,購物車頁面如圖4-6所示。
圖4-6 購物車圖
購物車原理是用session實現(xiàn)的,session里面放了一個list。加入購物車的流程是:先在showSp.js中用val()方法獲取元素的值,定義一個String類型的變量var str =/SNYG/servlet/newAddSpCart?spbh=+spbh+&spsl=+spsl+&spjg=+spjg+&spys=+
spys;設(shè)置它的屬性$(#yjgm).attr(href,str);跳轉(zhuǎn)到加入購物車的那個Servlet,用request獲取從頁面?zhèn)鬟f過來的參數(shù)值,新建一個session,定義一個購物車cart,將其放入session中,將其轉(zhuǎn)換成ShoopingCart。刪除購物車要調(diào)用購物車實體類ShoopingCart里面的remoreSp()方法,若要展示購物車,先判斷購物車是否為空,如果不為空則遍歷返回的list。
HttpSession session = request.getSession(false);
//將cart轉(zhuǎn)換成ShoopingCart類型
ShoopingCart cart = (ShoopingCart) session.getAttribute(cart);
if(cart!=null && delete.equals(action)){//刪除購物車
cart.remoreSp(spbh);
if(cart.getCartList().size()==0){
session.removeAttribute(cart);
}else{
session.setAttribute(cart, cart);}
//使用重定向技術(shù)跳轉(zhuǎn)跳到購物車頁面
response.sendRedirect(/SNYG/huang/ShoopingCart.jsp);
return;}
如果在沒有登陸的前提下先瀏覽了商品,然后直接點擊一鍵購買,是不能實現(xiàn)的,一般登陸之后就需要重新挑選商品,本系統(tǒng)中使用了一個action標(biāo)志,來標(biāo)記剛瀏覽過的商品,跳到登陸頁面登陸之后會直接跳到剛剛瀏覽到的頁面,不需要重新瀏覽了。var str=/SNYG/huang/BuySp.jsp?spbh=+$(#hidden_spbh).val()+&spsl=+spsl+&spjg=+spjg+&spys=+spys+&action=yjgm; 根據(jù)id獲取到一鍵購買,然后對此元素的屬性進行設(shè)置$(#yjgm).attr(href,str)。
4.2.4 訂單管理模塊
將商品加入購物車之后去結(jié)算,提交用戶的一些信息,就可以提交訂單將數(shù)據(jù)插入到后臺訂單明細表中,之后生成訂單,訂單頁面如果4-7所示。
圖4-7 訂單查詢圖
點擊刪選按鈕時,觸發(fā)一個click事件,跳轉(zhuǎn)到訂單查詢的那個servlet,獲取頁面?zhèn)鬟f過來的data2=$(#sp).val()==商品名稱/定單號?:$(#sp).val()值,根據(jù)商品名稱或者訂單編號進行精確刪選,首先從session中獲得登錄用戶名,并將其轉(zhuǎn)換為String類型,
if(request.getSession()!=null){yhm=(String)request.getSession().getAttribute(yhm);然后判斷它是否存在,調(diào)用訂單處理類里面的getIsGLY()方法判斷是否是管理員,int isgly=ddcl.getIsGLY(yhm);然后判斷該用戶名是否是管理員,如果isgly等于0,說明使用戶,則是前臺訂單查詢。然后調(diào)用訂單操作實現(xiàn)類里面的ddCxFy()方法,執(zhí)行sql語句,遍歷結(jié)果集,將訂單放到list當(dāng)中,最后匹配list當(dāng)中的每一個元素,來執(zhí)行function函數(shù),判斷該訂單是否已經(jīng)付款。
$.each(data.list,function(i,item){
var ddzt =;
var cz = ;
if(item.ddzt==1){
ddzt=已經(jīng)付款;
cz =評價;
}else if(item.ddzt==0){
ddzt=等待付款;
cz =付款;
}
4.3 后臺功能的設(shè)計與實現(xiàn)
后臺只有管理員才能登陸,管理員登陸進去之后對系統(tǒng)進行維護,管理員是不能注冊的,只能由默認的admin新增。管理可以進行用戶管理,商品管理和訂單管理[20]。
4.3.1 管理員登錄模塊
每一個系統(tǒng)都是有后臺的,是由后臺管理員管理的,通過sql語句進行對后臺數(shù)據(jù)庫進行增刪改查操作,后臺管理員可以對系統(tǒng)的各個模塊進行管理,后臺管理員登陸頁面如圖4-8所示。
圖4-8 管理員登陸圖
后臺登陸使用form表單提交的方式跳轉(zhuǎn)到登陸控制的那個serverLoginControl類中,,頁面初始化時,調(diào)用init()方法,將焦點定位到帳號$(yhm).focus();賬號,密碼都不能為空,驗證原理同前臺是一樣的。
4.3.2 用戶查詢模塊
前臺注冊的用戶可以在后臺顯示顯示出來,管理可以對其進行查詢、修改、刪除,查詢可以根據(jù)用戶名查詢,查詢用戶頁面如圖4-9所示。
圖4-9 用戶查詢圖
點擊用戶查詢超鏈接時通過form表單進行提交,跳轉(zhuǎn)到queryYH_ByYhmControl這個servlet, ,在servlet中,用List list= queryYHService.QueryYH()獲取用戶對象的list,request.setAttribute(list,list)再將list設(shè)置成一個元素,然后跳轉(zhuǎn)到j(luò)sp頁面,request.getRequestDispatcher(/ht_yhgl/QueryYH.jsp),將元素list值返回頁面forward(request,response)。
調(diào)用queryYHService中的QueryYH()查詢方法,連接到后臺數(shù)據(jù)庫,執(zhí)行sql語句select t_yhxx.*,t_yh.yhzt from t_yhxx,t_yh where t_yhxx.yhm=t_yh.yhm(+) and t_yh.YHZT=1,獲取所有用戶對象,放入list中,再通過request.setAttribute()方法放入名為list的變量中,通過request轉(zhuǎn)發(fā)跳轉(zhuǎn)到QueryYH.jsp頁面中,,用JSTL標(biāo)簽進行用戶list的遍歷。
4.3.3 商品管理模塊
要想實現(xiàn)購買必須前臺要有商品才行,通過后臺添加商品,把商品信息插入到后臺數(shù)據(jù)庫表中,商品添加的頁面如圖4-10所示。
圖4-10 商品添加圖
使是用JSTL標(biāo)簽添加商品,跳轉(zhuǎn)到addSpglServlet中,從頁面上取到尺碼、款式、商品描述的值,通過addSp()放入商品的對象中。
scope=request>
String cm = request.getParameter(cm);
String ks = request.getParameter(ks);
String spms = request.getParameter(spms);
Spxx sp = new Spxx();
sp.setSpmc(spmc);
boolean flag = spgl.addSp(sp);
request.setAttribute(flag, flag);
request.getRequestDispatcher(/spgl/spxxresult.jsp).forward(request,respon
se);
添加成功之后跳轉(zhuǎn)到querySpglServlet,從數(shù)據(jù)庫查詢相關(guān)商品信息,放入list中進行遍歷。
商品添加成功之后跳出一個jsp頁面,有兩個超鏈接,點擊查看商品,商品查詢頁面如圖4-11所示。
圖4-11 商品查詢圖
點擊查詢按鈕時觸發(fā)click事件,先判斷商品編號不為空,調(diào)用函數(shù)跳轉(zhuǎn)到商品查詢的servlet,再調(diào)用商品信息實現(xiàn)類里面的fingSpxxById()方法,執(zhí)行sql語句select * from T_SPXX where spzt =1 order by spbh查詢到商品,根據(jù)商品狀態(tài)和商品編號進行升序查詢,把查詢到的sql以參數(shù)返回到結(jié)果集中,遍歷結(jié)果集,將商品放入一個list中,最后以json的格式返回到頁面。
$(#cx).click(function(){
if($(#spbh).val()!=null&&$(#spbh).val()!=){
$.getJSON(/SNYG/servlet/querySpglSpxxServlet,
{spbh:$(#spbh).val()},
function(json){//回調(diào)
$(#datatable).remove(); //將表格移除
$(#spzj).remove();
$(body).append(
?商品信息
);序號商品編號商品名稱商品價格商品數(shù)量顏色尺碼款式熱銷狀態(tài)新品狀態(tài)>流行狀態(tài)日用狀態(tài)圖片路徑商品類型商品描述操作
$(#datatable).append(+1++json.spbh++json.spmc++json.spjg++json.spsl++json.spsl++json.cm++json.ks++json.rxzt++json.xpzt++json.lxzt++json.ryzt++json.tplj++json.splx++json.spms+修改??vlet?spbh=+json.spbh+>刪除);
$(body).append(繼續(xù)商品增加);});}
else{
alert(商品編號為空,請重新輸入);
$(#spbh).focus(); }
4.3.4 訂單管理模塊
前臺生成訂單之后可以在后臺查詢出來,如果已付款,這里的訂單狀態(tài)為1,否則為0,如果刪除訂單,刪除之后訂單狀態(tài)改為2,可以根據(jù)商品名稱或者訂單編號進行模糊查詢,訂單查詢的頁面如圖4-12所示。
圖4-12 訂單查詢圖
進入js觸發(fā)篩選的click事件,使用$.getJSON(/SNYG/servlet/dDCX,{data1: data1,data2:data2}跳轉(zhuǎn)到訂單查詢的servlet,用request獲取從頁面轉(zhuǎn)遞過來的值,調(diào)用訂單操作類里面的ddCxFy()方法執(zhí)行sql語句,從后臺數(shù)據(jù)庫表中查詢數(shù)據(jù),遍歷結(jié)果集,最后把數(shù)據(jù)以json的格式返回。
while(rs.next()) {
DingD dingD=new DingD();
dingD.setDdbh(rs.getString(ddbm));
dingD.setSpmc(rs.getString(spmc));
dingD.setDdzt(rs.getInt(ddzt));
list.add(dingD);
}
第5章 結(jié)束語
本系統(tǒng)前臺主要實現(xiàn)了用戶注冊登錄、根據(jù)不同的分類瀏覽商品,將自己看中的商品放進購物車,可以對購物車里面的商品數(shù)量進行修改,也可以刪除購物車。后臺主要實現(xiàn)了后臺管理員登陸,商品管理、用戶的管理、訂單管理四大主要功能模塊,可以及時對商品、客戶信息進行查詢修改添加刪除。
本系統(tǒng)的優(yōu)點是簡潔明了,運行快捷,人性化的操作流程使管理員能夠快速掌握本后臺管理的操作上手容易,方便使用。運用MVC模式實現(xiàn)了網(wǎng)上購物功能,基本可以滿足廣大上網(wǎng)購物用戶的需求。MVC開發(fā)模式中的三層各司其職,其中一層發(fā)生變化不會影響其他層,而且有利于責(zé)任分工,因此運用此模式開發(fā)相關(guān)系統(tǒng)可以提高工作效率。采用javabean技術(shù)減少了代碼的重用,并且對每個操作后臺系統(tǒng)會做出相應(yīng)的判斷,防止誤操作的現(xiàn)象發(fā)生,保證了后臺數(shù)據(jù)的安全性,確保了系統(tǒng)的安全性、合理性。另外還做了一些比較人性化的操作,比如用戶未登錄時查看的商品可以在用戶登陸之后會直接顯示出來,而不需要重新瀏覽,在購物車模塊使用了金額大于等于80的時候是免運費的,還對購物的時間進行了設(shè)置,如果夜深了會提醒用戶。
本系統(tǒng)主要缺點是界面不完美,過于簡單了,系統(tǒng)還有一些功能不夠完善。比如用戶信息修改,應(yīng)該先把用戶的所有信息返回到修改頁面上,然后去需要修改的地方進行修改即可。比如刪除商品是做好有個提示框,提示是否刪除以免刪除錯誤。本系統(tǒng)雖然可以為用戶及管理員提供一定的方便使用,但是由于現(xiàn)階段的條件還不是很成熟,離實際應(yīng)用還具有一定的差距,功能方面還有一些需要完善的地方,這些都是今后繼續(xù)學(xué)習(xí)的目標(biāo),爭取能夠完善已經(jīng)有的功能,增加新的功能,使本系統(tǒng)的發(fā)展更加成熟和完善。
參考文獻
[1] 鄔妍. 一個網(wǎng)上購物系統(tǒng)的設(shè)計與實現(xiàn)[D]. 華中科技大學(xué), 2009.
[2] 劉海林. 網(wǎng)上購物系統(tǒng)的設(shè)計與實現(xiàn)[D]. 電子科技大學(xué), 2010.
[3] 奚嘉敏. 基于J2EE的網(wǎng)上購物系統(tǒng)的設(shè)計與實現(xiàn)[D]. 復(fù)旦大學(xué), 2012.
[4] 梁元棟. 基于JSP技術(shù)的電子商務(wù)網(wǎng)站設(shè)計與實現(xiàn)[D]. 華南理工大學(xué), 2010.
[5] 郝赫. 基于MVC模式的電子商城的設(shè)計與實現(xiàn)[D]. 吉林大學(xué), 2010.
[6] 李國娟. 基于JavaEE架構(gòu)的網(wǎng)上購物系統(tǒng)的設(shè)計與實現(xiàn)[D]. 河北工業(yè)大學(xué), 2011.
[7] 林行健. Oracle 10g數(shù)據(jù)庫管理、應(yīng)用與開發(fā)[M]. 清華大學(xué)出版社, 2005.
[8] 顧春華, 張雪芹, 付歌. Web程序設(shè)計[M]. 華東理工大學(xué)出版社, 2006.
[9] 葉佳麗. 中國電子商務(wù)發(fā)展現(xiàn)狀及其面臨的問題[J]. 商業(yè)經(jīng)濟, 2010.
[10] 周建儒. JSP中自定義標(biāo)簽的實現(xiàn)與部署[J]. 科技信息(科學(xué)教研), 2008.
[11] 羅幼平. 基于MVC模式的Web應(yīng)用程序結(jié)構(gòu)分析[J]. 軟件導(dǎo)刊, 2009.
[12] 胡雯. 利用JSON實現(xiàn)Ajax中數(shù)據(jù)傳遞[J]. 科技信息, 2009.
[13] 周建儒. JSP中自定義標(biāo)簽的實現(xiàn)與部署[J]. 科技信息(科學(xué)教研), 2008.
[14] 廖彥華,羅小亮. 基于JSP技術(shù)的網(wǎng)上購物系統(tǒng)[J]. 電腦知識與技術(shù), 2007.
[15]徐衛(wèi)英. 基于JavaScript的驗證表單通用方案的設(shè)計與應(yīng)用[J]. 計算機時代, 2010.
[16] 熊亮春. PL/SQL在ORACLE數(shù)據(jù)庫應(yīng)用程序中的應(yīng)用[J]. 江西廣播電視大學(xué)學(xué)報, 2008.
[17] 史建成,李萍,王君霞,鄭健. JavaBean在JSP開發(fā)中的兩個典型運用[J]. 福建電腦, 2008.
[18] 伍德雁. Tomcat應(yīng)用系統(tǒng)亂碼問題研究[J]. 電腦知識與技術(shù), 2008.
[19] Georges-Louis Baron,Eric Bruillard. ICT, educational technology and educational instruments. Will what has worked work again elsewhere in the future?[J] .2007.
[20] Cassidy A. Information systems strategic planning[J]. Bocaraton.Flrida. St.
Luicepress, 2008.
致謝
畢業(yè)設(shè)計是我們在大學(xué)期間最后的課程,是四年學(xué)習(xí)的一個總結(jié),也是我們學(xué)習(xí)成果的具體體現(xiàn)。所以我們做畢業(yè)設(shè)計必須有一個良好的態(tài)度,認真地對待,只有這樣才可以學(xué)到更多的專業(yè)知識,為將來的工作做好各個方面準(zhǔn)備。
首先要感謝帶我畢業(yè)設(shè)計的XXXX老師,我學(xué)的很多編程方面的知識都是他無私傳授的。在畢業(yè)設(shè)計中遇到的問題,都能得到老師的悉心指導(dǎo)和幫助,常常在吃飯和下班的時間,老師繼續(xù)為我們留在學(xué)校指導(dǎo)畢業(yè)設(shè)計。通過這次畢業(yè)設(shè)計我不但更深地掌握了軟件工程方面的知識,更為重要地是也學(xué)到了做人做事應(yīng)該所必要的素質(zhì),那就是余小軍老師那種治學(xué)嚴謹、平易近人、無私奉獻的精神。
其次要感謝我的同學(xué)和同事,感謝他們在畢業(yè)設(shè)計的過程中給我的幫助。沒有他們的幫助,我也不可能很好地完成本次設(shè)計任務(wù)。同時感謝從我進入大學(xué)以來,學(xué)校所有在學(xué)習(xí)和生活方面對我關(guān)心的老師。
JIANGSU UNIVERSITY OF TECHNOLOGY
本科畢業(yè)設(shè)計(論文)
網(wǎng)站
前臺
后臺
后臺
搜索商品
管理員新增
注冊
登錄
購物車
生成訂單
用戶管理
商品管理
訂單管理
前臺
修改資料
購物車
訂單查詢
注冊
商品瀏覽
登錄
管理員新增
用戶管理
修改用戶
用戶查詢
刪除用戶
添加商品
后臺
商品查詢
商品管理
商品修改
商品刪除
訂單查詢
訂單修改
訂單管理
訂單刪除
商品信息
圖片路徑
商品數(shù)量
商品價格
顏色
新品狀態(tài)
熱銷狀態(tài)
日用狀態(tài)
商品類型
商品描述
尺碼
商品名稱
商品編號
流行狀態(tài)
商品狀態(tài)
訂單信息
訂單狀態(tài)
訂單編碼
結(jié)算金額
收貨地址
收貨人
配送方式
下單時間
用戶名
電話
手機號碼
?
總結(jié)
以上是生活随笔為你收集整理的B2C销售网站的设计与实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 四应变片悬臂梁 计算要点
- 下一篇: 传感器--电阻应变片传感器