J2EE技術實驗報告基于SSH的轎車信息管理系統_第1頁
J2EE技術實驗報告基于SSH的轎車信息管理系統_第2頁
J2EE技術實驗報告基于SSH的轎車信息管理系統_第3頁
J2EE技術實驗報告基于SSH的轎車信息管理系統_第4頁
J2EE技術實驗報告基于SSH的轎車信息管理系統_第5頁
已閱讀5頁,還剩44頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、 基于ssh的轎車信息管理系統j2ee技術實驗報告項目題目: 基于ssh的轎車信息管理系統 學 院: 計算機學院 指 導 教 師: 項 目 成 員: 專 業(yè): 軟件工程 班 級: 軟件0901 完 成 時 間: 2012-06-02 46目 錄1引言12核心技術簡介22.1mvc模式簡介22.2struts2框架簡介32.2.1struts2架構42.2.2struts2基本處理流程52.2.3struts2的優(yōu)點62.3hibernate框架簡介62.3.1hibernate架構62.3.2hibernate核心接口72.3.3hibernate基本處理流程72.3.4hibernate的優(yōu)

2、點72.4spring框架簡介82.4.1spring架構82.4.2spring特點93轎車信息管理系統需求分析103.1任務概述103.2用戶特點103.3功能需求103.4界面需求113.5操作需求113.6輸入輸出需求114轎車信息管理系統概要設計124.1設計思想124.2總體設計124.3系統層次結構圖134.4接口設計134.5數據庫設計134.6出錯處理設計145轎車信息管理系統詳細設計165.1數據庫詳細設計165.1.1數據庫關系模型設計165.1.2數據庫物理結構設計165.2轎車管理系統模塊詳細設計175.2.1用戶登陸模塊175.2.2用戶首頁面模塊185.2.3添加

3、汽車模塊185.2.4刪除汽車模塊195.2.5查詢汽車模塊205.2.6修改汽車模塊205.2.7出售汽車模塊215.2.8總銷售查詢模塊225.2.9按時間查詢模塊226轎車信息管理系統具體實現246.1開發(fā)與運行環(huán)境246.2開發(fā)環(huán)境的搭建246.3數據庫系統實現306.4dao層實現346.5manager層實現356.6action層實現366.7汽車信息查詢模塊實現366.1按時間查詢模塊實現386.2系統其它模塊的實現417總結448參考文獻451 引言近年來隨著人均收入水平的提高,人們購車的能力也逐步提升。為了方便轎車銷售企業(yè)對己方轎車管理,轎車銷售管理系統成了轎車市場一個不可

4、或缺的管理軟件。一個好的管理軟件能提高企業(yè)的管理效率,減輕企業(yè)統計人員的工作量。同時隨著近年來企業(yè)java的發(fā)展,使得開發(fā)一個針對企業(yè)需求的軟件系統變得簡單。因此使用企業(yè)java來開發(fā)一個轎車信息管理系統,是行之有效的。2 核心技術簡介struts2,spring,hibernate是三個相互獨立的框架。但三個框架一起整合起來使用,能使軟件系統開發(fā)更輕松、更靈活、更容易擴展。三者都是“半成品”框架,使得我們在開發(fā)時不需要從頭做起。三者之間的關系如圖2-1:圖2-1 struts2,spring,hibernate關系圖122.1 mvc模式簡介mvc全稱model view controlle

5、r,它使得應用程序的輸入、處理和輸出分開,使程序的耦合度降低。其每個層次說明如下: model(模型):模型表示業(yè)務相關的數據與業(yè)務的處理方法。能直接訪問數據。 view(視圖):視圖用于對數據的顯示。在這一層上,通常沒有邏輯。為了更新視圖,視圖需要訪問它監(jiān)視的模型,因此視圖通常事先在被監(jiān)視的數據那進行注冊。 controller(控制器):顧名思義,控制器起到控制作用,用于控制應用程序的流程。它處理事件并作出響應,調用相關的模型去處理事件請求,確定哪個視圖返回請求。圖2-2 mvc各層關系圖圖2-2顯示的mvc各層之間的關系。由于它具有這些結構使得多個視圖可以共有一個模型,同時對一層上的修改

6、不會影響到其他層。2.2 struts2框架簡介struts2是一個在webwork的基礎上轉化而來的基于mvc的框架。采用攔截器的機制來處理用戶請求,使得業(yè)務邏輯控制器與servlet api實現分離。.1 struts2架構圖2-3 struts2架構圖2-3 展示了struts2的整體架構,其各模塊說明如下: filterdispatcher:它是strut2的核心控制器。它根據actionmapper的結果來決定對請求的處理和響應。 actionmapper:它是一個接口,并提供了http請求與action之間的映射關系。如果用戶的請求與actionmapper中

7、提供的方法相匹配,就繼續(xù)調用actionproxy。 actionproxy:它會依據actionmapper生成的uri以及配置管理器來找到響應用戶請求的action對象。然后創(chuàng)建actioninvocation對象來執(zhí)行相應的action方法。 actioninvocation:它會在調用action處理方法的前后,還要調用各種攔截器。 result:它會根據相關視圖將用戶請求的處理結果反饋給用戶。 struts.xml:是struts2的配置文件,負責配置每個action的返回結果所對應的跳轉頁面。 interceptor:攔截器是struts2的重要組件,其設計思想來源于aop(面向切

8、面編程)。通常用于處理某些通用的處理,它會在每個action的外部執(zhí)行。 action:用于處理用戶請求并封裝業(yè)務數據。其執(zhí)行后通常會返回一個string類型的量,struts.xml根據這個量來決定跳轉頁面。 templates:頁面模板。 tag subsystem:struts2的標簽庫,用于頁面的設置。2.2.2 struts2基本處理流程圖2-4 struts2基本處理流程圖2-4展示了struts2基本處理流程,用戶請求在經過一系列攔截器(攔截器會對用戶請求進行相應的處理,如增加某些功能)后,就會交由action處理,然后action返回響應的結果(默認為“input”),最后通過

9、匹配結果來選擇跳轉視圖頁面。2.2.3 struts2的優(yōu)點 “半成品”框架:使得開發(fā)不需要從頭做起,而且在框架中很多地方都有默認值設置,減少了冗余的設置,提高了開發(fā)效率。 輕量級:資源消耗少,運行速度快。 搭建簡單:只需在myeclipse中將需要的包拷貝入項目中,再進行配置。 標簽強大:struts2提供了一系列的自己編寫的標簽用于頁面布置,減少了頁面代碼。 action測試簡單:不需要模擬http對象,就可以直接測試。 錯誤報告明了:便于迅速找出錯誤并修改。2.3 hibernate框架簡介hibernate是一個開放源碼的對象關系映射框架,采用orm機制,通常用于持久層的開發(fā)。它對jd

10、bc進行了輕量級的封裝,使得我們在開發(fā)過程中可以使用面向對象的方式來操縱數據庫。2.3.1 hibernate架構圖2-5 hibernate架構2.3.2 hibernate核心接口hibernate核心接口一共有6個: session接口:該接口用于持久化對象的增、查、刪、該,屬于非線程安全。 sessionfactory接口:該接口用于初始化hibernate,充當數據存儲源的代理,并創(chuàng)建session對象。 configuration接口:該接口在hibernate的啟動時,首先定位映射文檔位置、讀取配置,然后創(chuàng)建sessionfactory對象。 transaction接口:用于事務

11、操作。 query和criteria接口:使用hql或sql語句查詢數據庫。其中criteria接口更靠近面向對象;query接口則提供了使用原生sql語句的方法。2.3.3 hibernate基本處理流程1. 創(chuàng)建configuration實例,讀取項目路徑根目錄下的配置文件信息。2. 創(chuàng)建sessionfactory實例,將configuration中的配置信息復制到sessionfactory中。3. 調用sessionfactory來創(chuàng)建session4. 打開session,并創(chuàng)建事務transaction5. 進行持久化操作6. 提交事務7. 關閉session8. 關閉sessi

12、onfactory2.3.4 hibernate的優(yōu)點 它使得數據庫中的每一張表都映射為一個java類,讓我們在開發(fā)過程中可以使用面向對象的方式來操作數據庫。 自動配置,我們只需在數據庫中建立表,然后通過myeclipse自帶的工具就能完成映射。 它封裝了對各種數據庫的操作 輕量級框架,映射靈活,數據庫表、配置文件、映射類我們只需要完成其中任何一部分就能依靠工具完成三者的關系映射。2.4 spring框架簡介spring框架致力于j2ee應用各層的解決方案,貫穿表現層、業(yè)務層、持久層。同時它是一個輕量級的框架,沒有侵入性,不會改變原有框架的類容。使用它的目的不是去修改原有框架,而是使用它來管理

13、,使得原有的框架工作得更好。2.4.1 spring架構圖2-6 spring架構圖2-6為spring的架構,每個模塊功能如下: 核心容器:提供spring框架的基本功能。其主要組件是beanfactory,采用ioc(控制反轉)將應用程序的配置與依賴性代碼分開。 spring上下文:是一個配置文件,用于提供上下文信息。 spring aop:該模塊直接將面向方面的編程功能集成到了spring 框架中。支持聲明式的事務管理。 spring dao:該模塊用于管理異常處理和不同數據庫供應商拋出的錯誤消息。 spring orm:提供了如hibernate這類orm 的對象關系工具。 sprin

14、g web:為基于 web 的應用程序提供了上下文,簡化了處理多部分請求以及將請求參數綁定到域對象的工作。 spring mvc框架:該框架中融入了大量視圖技術。2.4.2 spring特點 輕量級框架:占用資源少,非侵入性。 控制反轉(ioc):使得本來需要我們(應用程序)在執(zhí)行前要進行的new操作,交由spring的ioc容器來管理,在容器中進行配置,再由容器來將new好的對象注入應用程序,從而松散了耦合度。 面向切面(aop):通常我們的編程思路是至上而下的,spring的aop使得我們能橫向考慮問題,例如事務與日志記錄。3 轎車信息管理系統需求分析3.1 任務概述轎車信息管理系統用戶企

15、業(yè)管理轎車的銷售情況,除了基本的查詢、添加功能外,還應有統計功能。同時操作方面應盡量簡單。3.2 用戶特點1) 系統管理員:該用戶擁有最高權限,可以對轎車的信息修改,查看銷售情況。2) 前臺銷售員:該用戶僅用查看轎車基本信息(不包括成本價),以及成功出售一輛轎車后的出售操作3.3 功能需求除了基本的查詢、添加功能外,還應有統計銷售功能,以及分段查詢功能。功能需求圖如下圖3-1所示:圖3-1 系統功能需求各模塊具體說明如下:1) 用戶登陸:用戶輸入合法的用戶名和密碼完成登陸,如果用戶名或密碼錯誤,應輸出提示。2) 登陸頁面:顯示當前用戶的權限,以及相關功能連接。3) 車輛管理:提供基本的車輛增、

16、查、刪、改功能,以及出售車輛操作。同時增加相應錯誤判斷。4) 業(yè)務管理:提供總銷售統計查詢,以及根據時間段的查詢。同時提供相應的錯誤判斷。3.4 界面需求界面簡潔美觀。3.5 操作需求操作簡潔,符合人們通常使用習慣。3.6 輸入輸出需求要求輸入數據合法,如果非法會跳出出錯提示。4 轎車信息管理系統概要設計4.1 設計思想該轎車管理系統用于轎車基本的增、查、刪、改、出售以及統計功能。能夠方便企業(yè)對自己的轎車進行管理,它將具有以下特點: 運行速度快 占用資源少 界面簡潔 操作簡單4.2 總體設計1) 以用戶登陸后的界面為平臺,將各模塊功能放于該頁面2) 采用ssh框架3) 靈活性要求:視圖與業(yè)務邏

17、輯分開,低耦合。采取接口方式編程便于系統的維護以及移植。4) 輸入輸出要求:要求輸入數據合法,如果非法會跳出出錯提示。4.3 系統層次結構圖圖4-1 系統層次結構圖4.4 接口設計用戶接口:通過鼠標與鍵盤操作。內部接口:使用數據流提供的接口操作各個模塊。4.5 數據庫設計概念結構設計是指將需求分析得到的用戶需求抽象為信息結構。描述概念模型的有力工具是e-r模型。本系統e-r圖如下圖所示:圖4-2 用戶e-r圖圖4-3 轎車銷售e-r圖4.6 出錯處理設計1) 以下列出了可能的錯誤情況及其對應的錯誤信息:2) 用戶名或密碼有誤,提示:您輸入的用戶名或密碼有誤,請重新輸入。3) 新增車輛在數據庫中

18、已經存在,提示:您錄入的車名-型號,在數據庫中已經存在,如果要修改,請到修改頁面。4) 新增車輛的售價小于成本,提示:您輸入的售價小于成本。5) 出售數量大于庫存數量,提示:您出售的車名-型號,出售數量大于庫存數量6) 按時間查詢時起始日期大于截止日期,提示:您輸入的起始日期大于截止日期5 轎車信息管理系統詳細設計本報告將對轎車系統的數據庫與各模塊進行詳細設計。5.1 數據庫詳細設計5.1.1 數據庫關系模型設計e-r圖向關系模型轉換:一個實體型轉換為一個關系模式,實體的屬性即為關系模式的屬性,實體的標識符即為關系模式的鍵。根據圖4-2與圖4-3,本系統的關系模型為:1) 用戶(用戶id,用戶

19、名,密碼,權限);2) 轎車(轎車id,車名,型號,數量,售價,成本);3) 銷售表(銷售id,轎車id,銷售日期,銷售數量)。5.1.2 數據庫物理結構設計數據庫的物理設計是將一個給定邏輯結構實施到具體的環(huán)境中,邏輯數據模型要選取一個具體的工作環(huán)境,這個工作環(huán)境提供了數據存儲結構與存取方法。經過分析設計給出了各主要表的物理結構:users表,用于存取用戶信息,其設計如下:列名類型長度是否允許空值主鍵/外鍵user_idint8no主鍵usernamevarchar20nopasswordvarchar20nolevelint1no表5-1car表,用于存取轎車基本信息,其設計如下:列名類型長

20、度是否允許空值主鍵/外鍵car_idint8no主鍵carnamevarchar20nocartypevarchar20noamountint8noin_priceint8nosell_priceint8no表5-2sell表,用于存取銷售情況,其設計如下:列名類型長度是否允許空值主鍵/外鍵sell_idint8no主鍵car_idint8no外鍵sell_amountint8nosell_datedate-no表5-35.2 轎車管理系統模塊詳細設計5.2.1 用戶登陸模塊模塊功能:用戶輸入正確的用戶名密碼后跳轉到相應頁面,若用戶名或密碼有誤,輸出提示流程圖:圖5-15.2.2 用戶首頁面模

21、塊模塊功能:顯示當前用戶權限,展示相應功能連接流程圖:圖5-25.2.3 添加汽車模塊模塊功能:將用戶輸入的轎車信息保存到數據庫中。流程圖:圖5-35.2.4 刪除汽車模塊模塊功能:通過下拉框選擇汽車的型號與名字,點擊刪除按鈕對汽車刪除。流程圖:圖5-45.2.5 查詢汽車模塊模塊功能:通過下拉框選擇汽車的型號與名字,點擊查詢按鈕查詢轎車信息。流程圖:圖5-55.2.6 修改汽車模塊模塊功能:依據輸入的汽車信息修改相應汽車的信息流程圖:圖5-65.2.7 出售汽車模塊模塊功能:用戶選擇要出售的汽車,輸入出售數量,提交出售,如果出售數量大于庫存數量,輸出錯誤提示流程圖:圖5-75.2.8 總銷售

22、查詢模塊模塊功能:輸出總的銷售結果流程圖:圖5-85.2.9 按時間查詢模塊模塊功能:依據用戶選擇的時間段來查詢該段時間的銷售情況流程圖:圖5-96 轎車信息管理系統具體實現6.1 開發(fā)與運行環(huán)境 操作系統:win7 內存:2g 硬盤空間:500g 開發(fā)軟件:myeclipse 10,microsoft sql server 2008,java 6.0 ,tomcat6.0 框架版本:struts 2.1,hibernate 3.0,spring 3.06.2 開發(fā)環(huán)境的搭建新建一個web項目名為cims(car infomation management system),選擇使用java6.

23、0,如圖6-1:圖6-1添加struts2相關支持包,如圖6-2圖6-2在meclipse的數據庫視圖中增加cardb配置,如圖6-3:圖6-3添加spring相關包,除了默認的包以外,還應選上spring web liberaies 3.0,如圖6-4:圖6-4添加hibernate支持包,除了原有包外,將最后4個包也加入,如圖6-5圖6-5hibernate configuration選擇spring configuration file,因為三大框架整合之后由spring來管理所有的bean,所以hibernate的配置文件也由spring的applicationcontext.xml文

24、件來管理,點擊下一步;選擇existing spring configuration file,點擊下一步;選擇數據庫為cardb,注意方言為sql server;不建立sessionfactory,完成;在web.xml中添加如下代碼; contextconfiglocation/web-inf/classes/applicationcontext.xml org.springframework.web.context.contextloaderlistener struts2 org.apache.struts2.dispatcher.ng.filter.strutsprepareande

25、xecutefilter encodingutf-8 struts2 /* 6.3 數據庫系統實現users表car表sell表其中sell表中的外鍵請安如下方式添加:數據庫映射到項目中,注意id的生成方式選擇native最后的項目中將會有如下映射類:6.4 dao層實現dao(data access object)是用于訪問數據的對象,在使用時,我們在dao中定義訪問其對應數據對象的接口方法,業(yè)務層通過dao操作數據,這樣避免了直接在業(yè)務層使用持久層的技術。dao以及dao實現的項目結構如下圖所示:在使用前,需要在spring的配置文件中添加如下配置:org.hibernate.dialec

26、t.sqlserverdialectcom/cims/domain/users.hbm.xmlcom/cims/domain/sell.hbm.xmlcom/cims/domain/car.hbm.xml在本系統中絕大多數dao實現使用gethibernatetemplate()模板來操作數據庫,因為該模板是線程安全的。例子:overridepublic car findcarbynameandtype(string carname, string cartype) list l= gethibernatetemplate().find(from car +where car_name=+ca

27、rname+ and car_type=+cartype+);if(l.size()=1)return (car)l.get(0);return null; 從中可以看出hibernate處理數據庫的優(yōu)勢,它使用了對象的方式來對數據庫的表操作。而且我們不需要編寫最底層的sql語句,而是直接使用它提供的方法。但hibernate的模板提供的方法似乎不支持一些數據庫中的默認函數,因此本系統一些地方還使用了session來使用原生sql語句。例子:overridepublic list findcarname() return getsession().createsqlquery(select +

28、distinct car_name from car).list();該方法主要是用于得到數據庫中的汽車名字,并且過濾掉重復的部分。6.5 manager層實現在action中通過manager對dao接口進行調用,首先將需要對用到的dao實例化,采用spring的依賴注入方式將實例化的dao注入到action中。具體調用示例如下:overridepublic void savesell(car car, int sellamount) calendar c=calendar.getinstance();car.setamount(car.getamount()-sellamount);sel

29、l sell=new sell();sell.setcar(car);sell.setsellamount(sellamount);sell.setselldate(c.gettime().tolocalestring();selldao.savesell(sell);cardao.update(car);前后省略了selldao,cardao的定義以及set方法。該方法用于保存一條銷售信息。在spring的配置文件中需要添加如下代碼:可以理解為我們以前在action執(zhí)行的cardao cardio=new cardaoimpl();語句。不過由于spring的控制反轉與依賴注入,使得我們將這

30、個工作交給了spring框架來完成6.6 action層實現action用于返回一個stirng類型字符串,來選擇跳轉頁面。其主要的配置在struts.xml這個文件中,例子如下:/pages/sellmanager/sellcarresult.jsp/pages/sellmanager/willsellcarinfo.jsp6.7 汽車信息查詢模塊實現該模塊實現界面如下:首先會根據數據庫中汽車信息生成一個查詢選擇頁面;用戶選擇好查詢車輛后,顯示查詢結果;下面是該模塊的具體實現過程:查詢頁面用到了一個struts2的標簽該標簽有2個主要參數list對應第一個下拉選框,它的值由數據庫中的汽車名稱

31、決定;doublelist對應第二個下拉選框,它的值對應第一個選框中的汽車名稱所對應的型號;其生成action的主要代碼如下:public string execute() throws exception nametotype=carmanager.carnametotype();carname=new arraylist();carname.add(所有);carname.addall(carmanager.carname();return success;public list getcartype() valuestack stack = servletactioncontext.ge

32、tvaluestack( servletactioncontext.getrequest() );object name = stack.findvalue( top );if( name!=null & name instanceof string ) return nametotype.get( (string)name );return collections.empty_list;execute()方法中的carname是一個list對象,用于存放所有的汽車名稱,對應中的totype是個mapstring,list類型對象,用來存放汽車名稱與型號的對應。getcart

33、ype()方法依據棧頂元素來選擇對應的汽車型號的list。它的返回值對應于中的doublelist。在spring的配置文件中需要注入carmanager6.1 按時間查詢模塊實現該模塊的具體實現頁面如下:首先生成一個選擇查詢時間的頁面,其中年份會依據數據庫中的所有年份來生成選擇時間段都輸出查詢統計結果如果選擇的起始時間大于截止時間會報錯具體實現過程如下:action中主要方法如下overridepublic string execute() throws exception if(beginyear=-1)selllist=sellmanager.findallsellinfo();else

34、 if(beginyearendyear)setmsg(您選擇的起始年份:+beginyear+,大于截止年份:+endyear);return input;else if(beginyear=endyear)if(beginmonthendmonth)setmsg(您選擇的起始月份:+beginmonth+,小于截止月份:+endmonth);return input;selllist=sellmanager.findsellinfobydate(beginyear, beginmonth, endyear, endmonth);elseselllist=sellmanager.findse

35、llinfobydate(beginyear, beginmonth, endyear, endmonth);setmsg();profit=sellmanager.totalprofit(selllist);totalsell=sellmanager.totalsells(selllist);beginyear=-1;return success;其中默認給beginyear賦值為-1,用于處理用戶選擇總銷售情況時的查詢。其余情況下如果時間合法則調用sellmanager中的相關方法來獲取銷售的信息。需要在spring的配置文件中添加如下代碼:findsellinfobydate()方法會根

36、據輸入的4個參數來生成查詢sell表的sql語句,其中用了很的判斷來處理輸入時間。分別判斷了如下條件:1) 起止年份相同2) 起始年份小于截止年份其主要代碼如下:public list findsellinfobydate(int beginyear, int beginmonth,int endyear, int endmonth) list selllist=new arraylist();string date=null;for(int i=beginyear;i=endyear;i+)if(i=endyear&i=beginyear)for(int j=beginmonth;j=endmonth;j+)date=+i+-%+j+-%;selllist.addall(selldao.findsellinfobydate(date);else if(i!=endyear)for(int j=beginmonth;j=12;j+)date=+i+-%+j+-%;selllist.addall(selldao.findsellinfobydate(date);elsefor(int j=1;j=endmonth;j+)date=+i+-%+j+-%;selllist.ad

溫馨提示

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

評論

0/150

提交評論