精品課程設(shè)計(jì)--基于J2EE的網(wǎng)上拍賣系統(tǒng)_第1頁(yè)
精品課程設(shè)計(jì)--基于J2EE的網(wǎng)上拍賣系統(tǒng)_第2頁(yè)
精品課程設(shè)計(jì)--基于J2EE的網(wǎng)上拍賣系統(tǒng)_第3頁(yè)
精品課程設(shè)計(jì)--基于J2EE的網(wǎng)上拍賣系統(tǒng)_第4頁(yè)
精品課程設(shè)計(jì)--基于J2EE的網(wǎng)上拍賣系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩29頁(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、.裝訂線 目 錄一 設(shè)計(jì)題目1二 設(shè)計(jì)目的1三 總體設(shè)計(jì)13.1需求分析13.2 系統(tǒng)設(shè)計(jì)33.2.1 開(kāi)發(fā)技術(shù)與工具33.3 概要設(shè)計(jì)43.4 數(shù)據(jù)庫(kù)設(shè)計(jì)53.4.1 數(shù)據(jù)庫(kù)邏輯設(shè)計(jì)53.5 詳細(xì)設(shè)計(jì)73.5.1 設(shè)計(jì)視圖層73.5.2 設(shè)計(jì)控制層93.5.3 設(shè)計(jì)對(duì)象模型103.5.4 設(shè)計(jì)數(shù)據(jù)訪問(wèn)層11四 算法描述與實(shí)現(xiàn)144.1 實(shí)現(xiàn)瀏覽拍賣物品種類頁(yè)面144.2 實(shí)現(xiàn)查看物品詳細(xì)信息及出價(jià)界面174.3 實(shí)現(xiàn)查看競(jìng)得的商品界面18五 結(jié)論20附錄:源代碼21一 設(shè)計(jì)題目網(wǎng)上拍賣系統(tǒng)二 設(shè)計(jì)目的隨著信息化技術(shù)在生活中的應(yīng)用越來(lái)越廣泛,網(wǎng)上購(gòu)物也逐漸成為人們的一種生活方式。本系統(tǒng)正是基于

2、這樣一種環(huán)境下應(yīng)運(yùn)而生。計(jì)機(jī)網(wǎng)絡(luò)為商務(wù)活動(dòng)開(kāi)辟了新的空間,提供了新的手段,同時(shí)為公司業(yè)務(wù)發(fā)展賦予了更多的機(jī)會(huì),成為現(xiàn)代商務(wù)的潮流。網(wǎng)上拍賣是建立在電子網(wǎng)絡(luò)技術(shù)上的一種全新的電子商務(wù)模式。它具有成本低廉,方式靈活,運(yùn)行快捷等特點(diǎn),通過(guò)Internet將拍賣活動(dòng)變成每一位網(wǎng)民都可以加入其中的交易方式。但它在給人們帶來(lái)便利的同時(shí)也帶來(lái)了很多的問(wèn)題。它的公平、公正、公開(kāi)性受到大家的關(guān)注。其可靠性和安全性更是大家關(guān)心的問(wèn)題。這就要求不僅要在系統(tǒng)的設(shè)計(jì)上做到公平合理,也要在信息的傳輸上做到安全可靠,以構(gòu)建一個(gè)公平又安全的交易平臺(tái)。三 總體設(shè)計(jì)3.1需求分析需求分析是介于系統(tǒng)分析和軟件設(shè)計(jì)階段之間的重要橋梁

3、。一方面,需求分析以系統(tǒng)規(guī)格說(shuō)明和項(xiàng)目規(guī)劃作為分析活動(dòng)的基本出發(fā)點(diǎn),并從軟件角度對(duì)它們進(jìn)行檢查與調(diào)整;另一方面,需求規(guī)格說(shuō)明又是軟件設(shè)計(jì)、實(shí)現(xiàn)、測(cè)試直至維護(hù)的主要基礎(chǔ)。良好的分析活動(dòng)有助于避免或盡早剔除早期錯(cuò)誤,從而提高軟件生產(chǎn)率,降低開(kāi)發(fā)成本,改進(jìn)軟件質(zhì)量。需求分析框圖如圖3-1。網(wǎng)上拍賣系統(tǒng)注冊(cè)登錄管理商品參加商品競(jìng)拍查看自己的競(jìng)標(biāo)管理商品種類瀏覽物品查看物品添加商品添加商品分類查看競(jìng)得物品瀏覽流拍物品瀏覽拍賣物品發(fā)送郵件圖3-1 網(wǎng)上拍賣系統(tǒng)需求框圖3.2 系統(tǒng)設(shè)計(jì)本系統(tǒng)是基于B/S模式開(kāi)發(fā)的JAVA EE多層體系結(jié)構(gòu)WEB應(yīng)用。系統(tǒng)開(kāi)發(fā)主要分為以下幾層:表示層、業(yè)務(wù)層、DAO層、持久層

4、。業(yè)務(wù)層和DAO層都通過(guò)接口與其它層進(jìn)行連接從而減小了各層之間的耦合度,實(shí)現(xiàn)高內(nèi)聚、低耦的思想。3.2.1 開(kāi)發(fā)技術(shù)與工具主要開(kāi)發(fā)工具為:MyEclipse8.6、Mysql6.0、Tomcat6.0。主要技術(shù)包括:JavaEE輕量級(jí)框架S2SH、Log4j、Ajax。S2SH集成框架是Struts、Spring 和Hibernate 三種技術(shù)的有機(jī)融合, 是目前應(yīng)用最廣泛的Java EE 架構(gòu)。在S2SH集成框架中,Struts 的作用是提供MVC 模型, 將界面、業(yè)務(wù)邏輯和數(shù)據(jù)分離, 并提供一個(gè)高可擴(kuò)展的架構(gòu)。Spring作為核心,向上整合MVC框架,向下整合ORM框架,使用Spring的

5、IoC容器來(lái)管理各組件之間之間的依賴關(guān)系,Spring的聲明事務(wù)將負(fù)責(zé)邏輯層組件的事務(wù)管理。而Hibernate 提供了一個(gè)抽象的數(shù)據(jù)服務(wù)視圖,將用戶對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)進(jìn)行高度抽象。 Struts 是目前創(chuàng)建Web 應(yīng)用最常用的表現(xiàn)層MVC 框架實(shí)現(xiàn),是Jakarta Apache 的一個(gè)開(kāi)源項(xiàng)目?;贛odel2 的Struts 框架利用控制器和定制標(biāo)簽庫(kù)將應(yīng)用中的模型和視圖分離,達(dá)到了層間松散耦合的效果,同時(shí)提高系統(tǒng)的靈活性、重用性和維護(hù)性。作為開(kāi)源項(xiàng)目,Struts 經(jīng)受了大量實(shí)踐的檢驗(yàn),功能越來(lái)越強(qiáng)大,體系也日臻完善,并且對(duì)其他技術(shù)和框架顯示出良好的融合性。Spring 由Rod John

6、son 創(chuàng)建,它是為了解決企業(yè)應(yīng)用開(kāi)發(fā)的復(fù)雜性而創(chuàng)建的。Spring 使用基本的JavaBean 來(lái)完成以前只可能由EJB 完成的事情。然而,Spring 的用途不僅限于服務(wù)器端的開(kāi)發(fā)。從簡(jiǎn)單性、可測(cè)試性和松耦合的角度而言,任何Java 應(yīng)用都可以從Spring 中受益。簡(jiǎn)單來(lái)說(shuō),Spring 是一個(gè)輕量級(jí)的控制反轉(zhuǎn)(IoC)和面向切面(AOP)的容器框架。Hibernate 是一個(gè)開(kāi)放源代碼的對(duì)象關(guān)系映射框架,它對(duì)JDBC 進(jìn)行了非常輕量級(jí)的對(duì)象封裝,使得Java 程序員可以隨心所欲的使用對(duì)象編程思維來(lái)操縱數(shù)據(jù)庫(kù)。Hibernate 可以應(yīng)用在任何使用JDBC 的場(chǎng)合, 既可以在Java 的

7、客戶端程序使用, 也可以在Servlet/JSP 的Web 應(yīng)用中使用。AJAX是Asynchronout JavaScript and XML的縮寫(xiě),它并不是一門(mén)新的語(yǔ)言或技術(shù),實(shí)際上是幾項(xiàng)技術(shù)按一定的方式組合在一起,在共同的協(xié)作中發(fā)揮各自的作用,它包括:使用XHTML和CSS標(biāo)準(zhǔn)化呈現(xiàn);使用DOM實(shí)現(xiàn)動(dòng)態(tài)顯示和交互;使用XML和XSLT進(jìn)行數(shù)據(jù)交換和處理;使用XMLHttpRequest進(jìn)行異步數(shù)據(jù)讀取;最后用JavaScript綁定和處理所有數(shù)據(jù)。AJAX的一個(gè)最大的特點(diǎn)是無(wú)需刷新頁(yè)面便可向服務(wù)器傳輸或讀寫(xiě)數(shù)據(jù)(又稱無(wú)刷新頁(yè)面),這一特點(diǎn)要得益于XMLHTTP組件XMLHttpReque

8、st對(duì)象。這樣就可以像再發(fā)桌面應(yīng)用程序只同服務(wù)器進(jìn)行數(shù)據(jù)層面的交換,而不用每次都刷新界面,也不用每次將數(shù)據(jù)處理的工作提交給服務(wù)器來(lái)做,這樣即減輕了服務(wù)器的負(fù)擔(dān)又加快了響應(yīng)速度、縮短了用戶等候時(shí)間。3.3 概要設(shè)計(jì)系統(tǒng)分為前臺(tái)和后臺(tái)兩個(gè)模塊,前臺(tái)主要用來(lái)提供給系統(tǒng)注冊(cè)用戶或者游客瀏覽、查看商品,并提供注冊(cè)的模塊,系統(tǒng)注冊(cè)用戶通過(guò)登錄后還能管理自己的信息和對(duì)指定的商品參與競(jìng)拍。后臺(tái)是系統(tǒng)管理員對(duì)拍賣系統(tǒng)設(shè)置、管理用戶和管理商品的地方。系統(tǒng)的系統(tǒng)層次概框劃分如圖3-2所示。網(wǎng)上拍賣系統(tǒng)查看競(jìng)得物品瀏覽拍賣物品瀏覽流拍物品管理商品種類查看自己的競(jìng)標(biāo)管理商品登錄注冊(cè)查看物品詳細(xì)信息添加商品分類添加商品參

9、加商品競(jìng)拍圖3-2系統(tǒng)層次概框圖3.4 數(shù)據(jù)庫(kù)設(shè)計(jì)根據(jù)系統(tǒng)的需求,數(shù)據(jù)庫(kù)中需要?jiǎng)?chuàng)建以下數(shù)據(jù)表。(1)用戶信息表:用于存放注冊(cè)用戶的資料以及用戶登錄情況。(2)商品分類信息表:商品的主要分類,和分類信息的描述。(3)商品信息表:記錄用戶發(fā)布的商品的信息。(4)用戶出價(jià)信息表:用于記錄用戶對(duì)相關(guān)商品的出價(jià)信息。(5)商品狀態(tài)信息表:用于存放商品狀態(tài)信息。3.4.1 數(shù)據(jù)庫(kù)邏輯設(shè)計(jì)數(shù)據(jù)庫(kù)需求分析設(shè)計(jì)完畢后,現(xiàn)在可以將上面的需求分析轉(zhuǎn)化為數(shù)據(jù)庫(kù)系統(tǒng)所支持的實(shí)際數(shù)據(jù)模型,也就是數(shù)據(jù)庫(kù)的邏輯結(jié)構(gòu),可以作出各表。網(wǎng)上拍賣系統(tǒng)數(shù)據(jù)庫(kù)中各個(gè)表的設(shè)計(jì)結(jié)果如下面的表格所示。每個(gè)表格表示在數(shù)據(jù)庫(kù)中的一個(gè)表。如表3-1

10、所示為用戶信息表,記錄了系統(tǒng)中所有用戶的詳細(xì)信息。表中user_id為主鍵并被設(shè)置為IDENTITY (1, 1),這樣當(dāng)插入一條記錄且user_id字段的數(shù)據(jù)為空(null)時(shí),新記錄的user_id值將由系統(tǒng)自動(dòng)給出,且給出的值將比表中曾經(jīng)曾在的最大的user_id值在1(若是一張新表,則從1開(kāi)始)。這樣可以保證整個(gè)表中的user_id字段在其數(shù)據(jù)類型允許的范圍之內(nèi)沒(méi)有重復(fù)的值。表3-1 auction_user用戶信息表FieldTypeNullKeyDefaultCommentuser_idintPRI用戶標(biāo)識(shí)usernamevarchar用戶名passwordvarchar用戶密碼e

11、mailvarchar用戶郵箱如表3-2所示為商品分類信息表,記錄了所有商品分類的信息。表3-2 kind商品子分類信息表FieldTypeNullKeyDefaultCommentkind_idintPRI分類的標(biāo)識(shí)kind_namevarchar分類的名稱kind_descintYes分類的描述如表3-3所示為記錄用戶所發(fā)布的商品的詳細(xì)信息的表。表中item_id為主鍵設(shè)為自動(dòng)增長(zhǎng)。owner_id為auction_user表中user_id的外鍵,kind_id為kind表中kind_id的外鍵,csub為subsort表中ssid的外鍵,這些外鍵能保證商品的完整性。cend表示商品的拍

12、賣是否已經(jīng)結(jié)束。表3-3 item商品信息表FieldTypeNullKeyDefaultCommentitem_idintPRI主鍵,遞增owner_idintFK發(fā)布者的標(biāo)識(shí)item_namevarchar商品名稱kind_idintFK商品分類item_picvarcharYes商品圖片地址item_descvarcharYes商品描述winer_idintYesFK拍買者的標(biāo)識(shí)addtimedate開(kāi)始日期endtimedate結(jié)束日期init_pricedouble0初始價(jià)錢max_pricedouble0最高價(jià)錢state_idint商品狀態(tài)如表3-4所示為記錄用戶對(duì)商品出價(jià)情況的

13、信息表。表中bid_id為主鍵設(shè)為自動(dòng)增長(zhǎng)。item_id為商品表item中item_id的外鍵,這樣可以保證用戶的出價(jià)都是針對(duì)已經(jīng)發(fā)布的商品發(fā)出的。user_id為出價(jià)的用標(biāo)識(shí)。howmuch代表用戶對(duì)此商品出了多少錢。表3-4bid用戶出價(jià)信息表FieldTypeNullKeyDefaultCommentbidintPRI出價(jià)的標(biāo)識(shí)item_idintFK對(duì)就的商品標(biāo)識(shí)user_idint出價(jià)的用戶名bid_datedate出價(jià)的時(shí)間bid_pricedouble出了多少錢如表3-5所示為記錄用戶發(fā)布的商品的狀態(tài)的信息表。表中state_id為主鍵設(shè)為自動(dòng)增長(zhǎng)。表3-5state用戶出價(jià)信

14、息表FieldTypeNullKeyDefaultCommentstate_idintPRI商品狀態(tài)的標(biāo)識(shí)state_namevarchar商品狀態(tài)的名稱3.5 詳細(xì)設(shè)計(jì)3.5.1 設(shè)計(jì)視圖層系統(tǒng)的視圖層是一組JSP頁(yè)面,他們通過(guò)Struts結(jié)合JSTL EL表達(dá)式語(yǔ)言將數(shù)據(jù)暴露給用戶,供用戶操作。本系統(tǒng)在界面設(shè)計(jì)上采用了模塊化處理的思想,把很多頁(yè)面共有的部分集成一個(gè)模塊,例如頁(yè)面的頭、尾,這樣在開(kāi)發(fā)的時(shí)候遇到這類相似的頁(yè)面部分就不再需要重新編寫(xiě),而只要以一句:<%includefile=”header.jsp”%>就可以重用這部分的內(nèi)容,大大提高了系統(tǒng)的開(kāi)發(fā)效率。根據(jù)系統(tǒng)的功能,

15、JSP的主要頁(yè)面如下。主頁(yè)(main.jsp):主頁(yè)是系統(tǒng)的入口。效果如圖3-3。圖3-3 主頁(yè)效果圖登錄頁(yè)(login.jsp):系統(tǒng)為注冊(cè)的用戶提供一個(gè)進(jìn)入系統(tǒng)并使用系統(tǒng)功能的入口。登出頁(yè)(logout.jsp):用戶離開(kāi)系統(tǒng)時(shí)顯示的頁(yè)面。注冊(cè)新用戶頁(yè)(newuser.jsp):系統(tǒng)提供給普通用戶的注冊(cè)功能。只有注冊(cè)用戶才可以參加競(jìng)拍并管理自己的物品。效果如圖3-4。圖3-4 注冊(cè)頁(yè)面效果圖管理商品頁(yè)(mrgitem.jsp):系統(tǒng)為注冊(cè)用戶提供商品管理功能。管理分類頁(yè)(mrgkind.jsp):系統(tǒng)為注冊(cè)用戶提供商品分類管理功能。查看競(jìng)得商品頁(yè)(viewItemSu.jsp):系統(tǒng)為注冊(cè)

16、用戶提供查看用戶自己成功競(jìng)得的商品的功能。查看自己的競(jìng)標(biāo)(viewBid.jsp):系統(tǒng)為注冊(cè)用戶提供查看用戶自己正在參與競(jìng)價(jià)的商品。瀏覽流拍商品(viewFailItem.jsp):所有用戶都可以瀏覽處于流拍狀態(tài)的商品。瀏覽拍賣商品(viewKind.jsp):所有用戶都可以瀏覽正在拍賣的商品。查看商品詳細(xì)信息(viewDetail.jsp):所有用戶都可以查看正在拍賣物品的詳細(xì)信息。但要參與競(jìng)拍必須是注冊(cè)用戶。提示錯(cuò)誤信息頁(yè)面(error.jsp):所有操作錯(cuò)誤的提示信息頁(yè)面。3.5.2 設(shè)計(jì)控制層根據(jù)系統(tǒng)要實(shí)現(xiàn)的功能,構(gòu)成此網(wǎng)上拍賣系統(tǒng)的各個(gè)控制層動(dòng)作類如表3-5-1所示。通過(guò)此表,可以

17、從宏觀上了解各個(gè)控制層動(dòng)作類的功能。表3-5-1 控制層的動(dòng)作類ActionFormAction功能描述MyActionServlet重載ActionServlet,以實(shí)現(xiàn)中文編碼正確顯示,需要在web.xml中重新配置loginFormLoginAction處理會(huì)員登陸的動(dòng)作類refistyFormNewUserAction處理會(huì)員注冊(cè)的動(dòng)作類bidFormAddBidAction處理添加競(jìng)拍成功記錄的動(dòng)作類itemFormAddItemAction處理添加商品的動(dòng)作類kindFormAddKindAction處理添加商品種類的動(dòng)作類MgrItemAction處理管理商品的動(dòng)作類MgrKin

18、dAction處理管理商品種類的動(dòng)作類ViewBidAction處理查看競(jìng)拍記錄的動(dòng)作類ViewDetailAction處理查看商品細(xì)節(jié)的動(dòng)作類ViewFailAction處理查看流拍商品的動(dòng)作類ViewItemAction處理查看某一種商品的動(dòng)作類ViewSuAction處理查看競(jìng)拍成功商品的動(dòng)作類ViewKindAction處理查看商品種類的動(dòng)作類此表列出了本系統(tǒng)中主要的動(dòng)作類和Form Bean及其功能描述。為了使各個(gè)表單中的數(shù)據(jù)能正確顯示,本系統(tǒng)重載了ActionServlet類,使其正確處理中文參數(shù)并顯示。設(shè)置步驟如下:(1)重載ActionServlet,代碼如下:package

19、org.yeeku.struts;import org.apache.struts.action.ActionServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class MyActionServlet extends org.apache.struts.action.ActionServletprotected void process(HttpServletRequest request, HttpServletResponse

20、response)throws java.io.IOException, javax.servlet.ServletException /設(shè)置編碼方式為GB2312,正確處理中文。request.setCharacterEncoding("GB2312"); /將控制權(quán)交給父類繼續(xù)處理cess(request, response);(2)在web.xml配置文件中應(yīng)用此重載的MyActionServlet作為前端控制器,部分代碼如下:<servlet><servlet-name>action</servlet-name>

21、<servlet-class>org.yeeku.struts.MyActionServlet</servlet-class><init-param><param-name>config</param-name><param-value>/WEB-INF/struts-config.xml</param-value></init-param><load-on-startup>2</load-on-startup></servlet>應(yīng)用此設(shè)置后,程序?qū)⑹紫韧ㄟ^(guò)My

22、ActionServlet預(yù)處理所有發(fā)送至此控制器設(shè)置中文編碼,然后使用cess()方法將控制權(quán)交給ActionSerlet處理完成其功能。3.5.3 設(shè)計(jì)對(duì)象模型MyEclipse,可以自動(dòng)生成這些對(duì)象模型,以及數(shù)據(jù)訪問(wèn)層的相關(guān)類。在org.yeeku.model包中有五個(gè)對(duì)象模型各個(gè)類的作用如下。(1)Bid類:用戶出價(jià)相關(guān)的信息。(2)Item類:商品類。(3)AcutionUser類:用戶信息類。(4)Kind類:商品種類類。(5)State類:商品狀態(tài)。在org.yeeku.model.base包中有五個(gè)抽象類分別是org.yeeku.model包中類的父類。每一個(gè)

23、抽象類都對(duì)應(yīng)了數(shù)據(jù)庫(kù)中的一張表。3.5.4 設(shè)計(jì)數(shù)據(jù)訪問(wèn)層數(shù)據(jù)訪問(wèn)層使用Hibernate來(lái)實(shí)現(xiàn),根據(jù)數(shù)據(jù)庫(kù)表和對(duì)象模型之間的對(duì)應(yīng)關(guān)系,使用MyEclipse可以自動(dòng)生成數(shù)據(jù)訪問(wèn)層的DAO類和XXX.hbm.xml文件。此處給出與AuctionUser類相關(guān)的AuctionUserDao類及其實(shí)現(xiàn)類AuctionUserDaoHirbernet和auctionuser.hbm.xml文件,并對(duì)其分析。AuctionUserDaoHirbernet類實(shí)現(xiàn)代碼如下:package org.yeeku.dao;import java.util.List;import java.util.ArrayL

24、ist;import java.util.Iterator;import org.springframework.orm.hibernate3.support.HibernateDaoSupport;import org.yeeku.model.*;import org.yeeku.business.*;public class AuctionUserDaoHibernate extends HibernateDaoSupport implements AuctionUserDao /* * 根據(jù)id查找用戶 * param id 需要查找的用戶id */ public AuctionUser

25、 get(Integer id) return (AuctionUser)getHibernateTemplate().get(AuctionUser.class , id); /* * 增加用戶 * param user 需要增加的用戶 */ public void save(AuctionUser user) getHibernateTemplate().save(user); /* * 修改用戶 * param user 需要修改的用戶 */ public void update(AuctionUser user) getHibernateTemplate().saveOrUpdate(

26、user); /* * 刪除用戶 * param id 需要?jiǎng)h除的用戶id */ public void delete(Integer id) getHibernateTemplate().delete(getHibernateTemplate().get(AuctionUser.class , id); /* * 刪除用戶 * param kind 需要?jiǎng)h除的用戶 */ public void delete(AuctionUser user) getHibernateTemplate().delete(user); /* * 查詢?nèi)坑脩?* return 獲得全部用戶 */ public

27、List findAll() return getHibernateTemplate().find("from AuctionUser"); /* * 根據(jù)用戶名,密碼查找用戶 * param username 查詢所需的用戶名 * param pass 查詢所需的密碼 * return 用戶名,密碼對(duì)應(yīng)的用戶的id */ public Integer findUserByNameAndPass(String username , String pass) String args = username , pass; List ul = getHibernateTempla

28、te().find("from AuctionUser au where au.username = ? and au.userpass = ?" , args); if (ul.size() = 1) AuctionUser au = (AuctionUser)ul.get(0); return (Integer)au.getId(); return null; 動(dòng)作類將會(huì)根據(jù)此類中的方法進(jìn)行數(shù)據(jù)的增、刪、改及查等操作。其他數(shù)據(jù)訪問(wèn)層的xml文件和Dao類如下表:表3-5-2 對(duì)象模型與xml文件對(duì)應(yīng)表對(duì)象模型數(shù)據(jù)庫(kù)訪問(wèn)接口接口實(shí)現(xiàn)類配置文件BidBidDaoBidDao

29、HirbernateBid.hbm.xmlItemItemDaoItemDaoHirbernateItem.hbm.xmlKindKindDaoKindDaoHirbernatKind.hbm.xmlStateStateDaoStateDaoHirbernateState.hbm.xml在org.yeeku.service包中包含兩個(gè)類,分別是接口AuctionManager及其實(shí)現(xiàn)類AuctionManagerImpl。此類的作用完成了系統(tǒng)的所有的邏輯功能。四 算法描述與實(shí)現(xiàn)4.1 實(shí)現(xiàn)瀏覽拍賣物品種類頁(yè)面 (1)表示層實(shí)現(xiàn)通過(guò)查看商品種類界面,點(diǎn)擊某一種類鏈接時(shí),就直接將請(qǐng)求轉(zhuǎn)發(fā)給動(dòng)作vi

30、ewItem.do處理。最后轉(zhuǎn)向?qū)嶋H的主頁(yè)面(頁(yè)面名稱為“viewItem.jsp”)即可。在struts-config.xml文件中的設(shè)置如下:<action path="/viewItem" type="org.springframework.web.struts.DelegatingActionProxy" scope="request" validate="false" parameter="method"><forward name="input"

31、 path="/WEB-INF/jsp/viewKind.do"/> <forward name="success" path="/WEB-INF/jsp/viewItem.jsp"/></action>點(diǎn)擊主頁(yè)導(dǎo)航欄上瀏覽拍賣物品鏈接即可進(jìn)入瀏覽物品種類頁(yè)面。如圖4-1所示。圖4-1 瀏覽某類所有物品界面(2)實(shí)現(xiàn)業(yè)務(wù)邏輯瀏覽某一種類拍賣物品頁(yè)面的顯示涉及到得業(yè)務(wù)邏輯為org.yeeku.struts包下的ViewItemAction類,他用于從數(shù)據(jù)庫(kù)中調(diào)出數(shù)據(jù)供頁(yè)面顯示。其中涉及商品類別的分類顯示代碼

32、如下:import java.util.List;import org.yeeku.service.AuctionManager;import org.yeeku.exception.AuctionException;import org.yeeku.struts.base.BaseAction;import org.yeeku.model.*;/* * author shm songhongmei_529 * version 1.0 * 處理商品顯示動(dòng)作 */public class ViewItemAction extends BaseAction public ViewItemActio

33、n() public ActionForward execute(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws AuctionException String id = request.getParameter("kindId");if (id = null | id.trim().equals("") )reques

34、t.setAttribute("errMsg" , "您必須選擇有效的種類");return mapping.findForward("input");elseString kind = mgr.getKind(Integer.parseInt(id) );List items = mgr.getItemsByKind(Integer.parseInt(id) );request.setAttribute("kind" , kind); request.setAttribute("items"

35、, items);return mapping.findForward("success");(3)實(shí)現(xiàn)數(shù)據(jù)訪問(wèn)層涉及到顯示商品種類的數(shù)據(jù)訪問(wèn)層方法AuctionManager的getAllItem()方法,并在該方法中調(diào)用為ItemDao的findItemByKind(Integer kindId)方法,實(shí)現(xiàn)代碼如下:public List getItemsByKind(int kindId) throws AuctionException try List result = new ArrayList();List items = itemDao.findItemByK

36、ind(new Integer(kindId); for (Iterator it = items.iterator() ; it.hasNext() ; ) Item item = (Item)it.next(); ItemBean ib = new ItemBean(); initItem(ib,item); result.add(ib); return result; catch (Exception e) log.debug(e.getMessage(); throw new AuctionException("底層業(yè)務(wù)異常,請(qǐng)重新試"); public List

37、findItemByKind(Integer kindId) return getHibernateTemplate().find("from Item as i where i.kind.id = ? and i.itemState.id = 1" , kindId); 其中使用的HQL語(yǔ)句為“from Item as i where i.kind.id = ? and i.itemState.id = 1 , kindId”,即從kind數(shù)據(jù)表中取出所有記錄。4.2 實(shí)現(xiàn)查看物品詳細(xì)信息及出價(jià)界面在顯示同一種類所有物品的界面(viewItem.jsp),通過(guò)點(diǎn)擊商品名稱

38、進(jìn)入顯示商品詳細(xì)信息界面(ItemDetail.jsp)。此時(shí)可以對(duì)自己喜歡的商品進(jìn)行出價(jià)。如圖4-2所示。圖4-2 商品詳細(xì)信息界面此頁(yè)面結(jié)合表達(dá)式語(yǔ)言及struts的標(biāo)簽庫(kù)。處理此表單的動(dòng)作為bid.do。它由Struts的Action類的子類addBidAction實(shí)現(xiàn),在其中加入業(yè)務(wù)邏輯并將主頁(yè)實(shí)際所需要的數(shù)據(jù)從數(shù)據(jù)庫(kù)中提取出來(lái)保存到request對(duì)象或其他對(duì)象中,競(jìng)價(jià)成功后頁(yè)面會(huì)通過(guò)viewBid.do跳轉(zhuǎn)到查看自己競(jìng)標(biāo)頁(yè)面(頁(yè)面名稱為“viewBid.jsp”)。在struts-config.xml文件中的設(shè)置如下:<!- =全局ActionForm邏輯名稱及路徑配置 -&g

39、t;<form-beans><form-bean name="bidForm"type="org.apache.struts.validator.DynaValidatorForm"><form-property name="itemId" type="java.lang.String"/><form-property name="bidPrice" type="java.lang.String"/><form-prope

40、rty name="maxPrice" type="java.lang.String"/><form-property name="vercode" type="java.lang.String"/></form-bean> </form-beans><!- =Action類及其訪問(wèn)路徑的映射配置 -><action-mappings><action path="/viewBid" type="org.spring

41、framework.web.struts.DelegatingActionProxy"scope="request"validate="false"parameter="method"><forward name="success" path="/WEB-INF/jsp/viewBid.jsp"/><forward name="login" path="/WEB-INF/jsp/login.jsp"/> <ac

42、tion path="/viewDetail" type="org.springframework.web.struts.DelegatingActionProxy"scope="request"validate="false"parameter="method"><forward name="error" path="/WEB-INF/jsp/error.jsp"/> <forward name="success&quo

43、t; path="/WEB-INF/jsp/viewDetail.jsp"/></action><action path="/bid" type="org.springframework.web.struts.DelegatingActionProxy" name="bidForm" scope="request" validate="true" input="input"><forward name="inp

44、ut" path="/viewDetail.do"/><forward name="success" path="/viewBid.do"/><forward name="login" path="/WEB-INF/jsp/login.jsp"/></action></action-mappings>4.3 實(shí)現(xiàn)查看競(jìng)得的商品界面(1)表示層實(shí)現(xiàn)點(diǎn)擊查看競(jìng)得的物品鏈接時(shí),就直接將請(qǐng)求轉(zhuǎn)發(fā)給動(dòng)作viewItemSu.do處理。最后轉(zhuǎn)向

45、實(shí)際的主頁(yè)面(頁(yè)面名稱“viewItemSu.jsp”)。(2)實(shí)現(xiàn)業(yè)務(wù)邏輯在org.yeeku.schdule包下CheckWinner類繼承了TimerTask,實(shí)現(xiàn)每一天自動(dòng)檢查競(jìng)拍獲勝者,主要代碼如下:package org.yeeku.schedule;import java.util.TimerTask;import org.yeeku.service.AuctionManager;import org.yeeku.exception.AuctionException;public class CheckWiner extends TimerTaskprivate AuctionM

46、anager mgr;public void setMgr(AuctionManager mgr)this.mgr = mgr;public void run()System.out.println("-");trymgr.updateWiner();catch (AuctionException ae)ae.printStackTrace();(3)實(shí)現(xiàn)數(shù)據(jù)訪問(wèn)層涉及到獲得贏取者的數(shù)據(jù)訪問(wèn)層方法AuctionManager的updateWiner()方法,并在該方法中調(diào)用為ItemDao的findItemByState (Integer stateId)方法,實(shí)現(xiàn)代碼如下

47、: /根據(jù)時(shí)間來(lái)修改物品的贏取者public void updateWiner()throws AuctionExceptionList itemList = itemDao.findItemByState(new Integer(1);for (int i = 0 ; i < itemList.size() ; i+ )Item item = (Item)itemList.get(i);if (!item.getEndtime().after(new Date()AuctionUser au= bidDao.findUserByItemAndPrice(item.getId() , i

48、tem.getMaxPrice();if (au != null)item.setWiner(au);item.setItemState(stateDao.get(new Integer(2);itemDao.save(item);elseitem.setItemState(stateDao.get(new Integer(3);itemDao.save(item);五 結(jié)論 整個(gè)設(shè)計(jì)主要使用了SSH技術(shù)。在設(shè)計(jì)網(wǎng)上拍賣系統(tǒng)時(shí),需要對(duì)功能需求考慮完善。要求運(yùn)用SSH技術(shù)對(duì)系統(tǒng)做好整體構(gòu)架,這對(duì)我來(lái)說(shuō)是一個(gè)不小的難題。隨著設(shè)計(jì)程度的不斷深入,又遇到了一些早期沒(méi)有想到的問(wèn)題。特別是一些細(xì)節(jié)問(wèn)題。為

49、了解決這些問(wèn)題,有時(shí)還要對(duì)幾個(gè)模塊進(jìn)行大幅度的修改。在設(shè)計(jì)中,還需要進(jìn)行細(xì)致的測(cè)試工作,以發(fā)現(xiàn)程序的錯(cuò)誤和功能上的不足。由于時(shí)間和個(gè)人技術(shù)關(guān)系,本系統(tǒng)還有一些不足和值得改進(jìn)的地方,比如說(shuō)可以在系統(tǒng)中使用數(shù)據(jù)庫(kù)緩沖池技術(shù),這樣可以減少了數(shù)據(jù)庫(kù)的連接時(shí)間并減輕服務(wù)器的負(fù)擔(dān)。再比如說(shuō)查詢功能,可以進(jìn)行按關(guān)鍵字查詢,這樣系統(tǒng)的靈活性就會(huì)有明顯的提高。通過(guò)這次課程設(shè)計(jì),提高了我在系統(tǒng)整體設(shè)計(jì)上的能力,增長(zhǎng)了分析、解決問(wèn)題的經(jīng)驗(yàn),對(duì)一些知識(shí)有了更深一步的掌握。可以說(shuō),這次課程設(shè)計(jì)既鍛煉了我動(dòng)腦分析問(wèn)題的能力,又鍛煉了我動(dòng)手解決實(shí)際問(wèn)題的能力,這將對(duì)我以后的學(xué)習(xí)起到不可估量的作用。通過(guò)課程設(shè)計(jì)這次磨礪,我的

50、能力也提高了。所以它對(duì)于我們來(lái)說(shuō)有著十分重要的意義。我會(huì)運(yùn)用從中得到的寶貴經(jīng)驗(yàn)來(lái)指導(dǎo)我今后的學(xué)習(xí)和工作,不斷的實(shí)踐,不斷地學(xué)習(xí),讓自己變得更加充實(shí)自己,更適合于軟件行業(yè)發(fā)展的需要。附錄:源代碼商品分類區(qū)動(dòng)態(tài)實(shí)現(xiàn)代碼如下:<logic:iterate id="kind" name="kinds" indexId="index"> <tr class="pt9" height="24"> <td bgcolor="#FFFFFF">種類名<

51、;/td> <td bgcolor="#FFFFFF"><a href='viewItem.do kindId=<bean:write name="kind" property="id"/>'><bean:write name="kind" property="kindName"/></a></td> </tr> <tr class="pt9" height=&qu

52、ot;24"> <td bgcolor="#FFFFFF">種類描述</td><td bgcolor="#FFFFFF"><bean:writename="kind"property="kindDesc"/></td> </tr></logic:iterate>查看某種類所有商品界面主要代碼如下:<table width="780" align="center" cell

53、spacing=0 background="images/bodybg.jpg"><tr><td><br><table width=80% border=0 align="center" cellpadding=0 cellspacing="1" bgcolor="#CCCCCC"> <tr bgcolor="#e1e1e1" > <td colspan="5" ><div class=&qu

54、ot;mytitle">當(dāng)前種類是:<bean:write name="kind"/></div></td> </tr> <tr class="pt9" height="30"> <td bgcolor="#FFFFFF"><b>物品名</b></td> <td bgcolor="#FFFFFF"><b>起拍時(shí)間</b></td&g

55、t; <td bgcolor="#FFFFFF"><b>最高價(jià)格</b></td> <td bgcolor="#FFFFFF"><b>所有者</b></td> <td bgcolor="#FFFFFF"><b>物品備注</b></td> </tr><logic:iterate id="item" name="items" indexId

56、="index"> <tr class="pt9" height="24"> <td bgcolor="#FFFFFF">< ahref='viewDetail.do?itemId=<bean:write name="item" property="id"/>'><bean:write name="item" property="name"/></a

57、></td><td bgcolor="#FFFFFF"><bean:write name="item" property="addTime"/></td> <td bgcolor="#FFFFFF"><bean:write name="item" property="maxPrice"/></td> <td bgcolor="#FFFFFF"><bean:write name="item" property="owner"/></td> <td bgcolor="#FFFFFF"><bean:write name="item" property=&quo

溫馨提示

  • 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ù)網(wǎng)僅提供信息存儲(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)論