Java倉(cāng)庫(kù)管理系統(tǒng)_第1頁(yè)
Java倉(cāng)庫(kù)管理系統(tǒng)_第2頁(yè)
Java倉(cāng)庫(kù)管理系統(tǒng)_第3頁(yè)
Java倉(cāng)庫(kù)管理系統(tǒng)_第4頁(yè)
Java倉(cāng)庫(kù)管理系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩64頁(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)介

/畢業(yè)設(shè)計(jì)(論文)題目:基于JavaEE的倉(cāng)庫(kù)管理系統(tǒng)成都電子機(jī)械高等??茖W(xué)校二〇〇八年六月論文摘要隨著經(jīng)濟(jì)的不斷繁榮以與加入WTO后市場(chǎng)環(huán)境的變化,對(duì)企業(yè)的生產(chǎn)經(jīng)營(yíng)提出了更高的要求,企業(yè)必須綜合利用各種先進(jìn)制造技術(shù),在網(wǎng)絡(luò)與信息技術(shù)的支持下,改進(jìn)現(xiàn)在的生產(chǎn)經(jīng)營(yíng)模式和組織結(jié)構(gòu),才能在市場(chǎng)競(jìng)爭(zhēng)中贏得更多的份額。隨著企業(yè)規(guī)模的擴(kuò)大,倉(cāng)庫(kù)管理系統(tǒng)將發(fā)揮越來(lái)越重要的作用。高效方便的倉(cāng)庫(kù)管理系統(tǒng),可以為生產(chǎn)經(jīng)營(yíng)提供堅(jiān)強(qiáng)的后盾和有力的支持。倉(cāng)庫(kù)管理系統(tǒng)主要提供一個(gè)倉(cāng)庫(kù)業(yè)務(wù)與其作業(yè)管理的信息存儲(chǔ)和檢索系統(tǒng)。通過(guò)入庫(kù)管理、出庫(kù)管理、報(bào)表生成管理、倉(cāng)庫(kù)人員管理、倉(cāng)庫(kù)位置信息管理等功能模塊來(lái)實(shí)現(xiàn)倉(cāng)庫(kù)的綜合管理。本論文以標(biāo)準(zhǔn)的倉(cāng)庫(kù)管理模式為藍(lán)本,基于JavaEE開(kāi)發(fā)出一個(gè)可以用于一般單位的倉(cāng)庫(kù)管理系統(tǒng),實(shí)現(xiàn)了倉(cāng)庫(kù)管理的高效性與安全性。本系統(tǒng)可以方便快捷地實(shí)現(xiàn)庫(kù)管理中的貨物登記、出庫(kù)入庫(kù)、庫(kù)房管理等操作,使企業(yè)的倉(cāng)庫(kù)管理井井有條,為企業(yè)的健康發(fā)展創(chuàng)造良好的條件。關(guān)鍵詞:倉(cāng)庫(kù)管理系統(tǒng),JavaEE,模塊化設(shè)計(jì),軟件工程AbstractWiththecontinuouseconomicprosperityandaccessiontotheWTOafterthemarketenvironmentchanges,theproductionandoperationofenterpriseshavesethigherrequirements,enterprisesmustcomprehensiveutilizationofadvancedmanufacturingtechnology,theInternetandinformationtechnology,improvingtheexistingproductionBusinessmodelandorganizationalstructure,inordertowinmoremarketcompetitionintheshare.Withtheexpansionofbusinessscale,warehousemanagementsystemwillplayanincreasinglyimportantrole.Facilitatetheefficientwarehousemanagementsystem,canprovideastrongproductionandmanagementbackingandstrongsupport.Warehousemanagementsystemtoprovideamajorwarehouseoperationsanditsoperationsmanagementinformationstorageandretrievalsystem.Throughstoragemanagement,tothemanagement,reportgenerationmanagement,storagemanagement,storagelocationinformationmanagementmoduletoachieveintegratedmanagementofthewarehouse.Thispapertothewarehousemanagementstandardsbasedonthemodel,basedontheJavaEEcanbeusedtodevelopaunitofGeneralwarehousemanagementsystem,warehousemanagementtoachievetheefficiencyandsecurity.Thissystemcanquicklyandeasilyachievethemanagementofgoodsregisteredtothestockandthetreasurymanagementoperation,theenterprisestoragemanagementorderly,forthehealthydevelopmentofenterprisestocreategoodconditions.KeyWords:Warehousemanagementsystem,JavaEE,modulardesign,softwareengineering目錄論文摘要目錄一、引言………………………1.1倉(cāng)庫(kù)管理系統(tǒng)的背景與意義…………1.2JavaEE簡(jiǎn)介…………1.3本文的主要工作………二、相關(guān)技術(shù)介紹…………2.1JavaEE相頭原理與技術(shù)簡(jiǎn)介………2.1.1Servlet…………2.1.2JSP簡(jiǎn)介…………2.1.3EJB………………2.2Struts…………………2.2.1STRUTS的由來(lái)和發(fā)展…………2.2.2MVC簡(jiǎn)介…………2.2.3Struts優(yōu)缺點(diǎn)…………………2.2.4Struts的工程流程……………2.3Hibernate……………三、系統(tǒng)分析與設(shè)計(jì)…………3.1引言……………………3.2系統(tǒng)分析………………3.2.1系統(tǒng)可行性研究…………………3.2.2系統(tǒng)使用環(huán)境……………………3.2.3系統(tǒng)需求分析……………………1.系統(tǒng)功能概述……………………2.貨物入庫(kù)和出庫(kù)的管理…………3.出庫(kù)入庫(kù)記錄的查詢與報(bào)表……4.貨物信息的管理…………………5.其它信息的管理…………………3.3系統(tǒng)功能設(shè)計(jì)…………四、數(shù)據(jù)庫(kù)設(shè)計(jì)………………4.1引言……………………4.2E-R圖…………………4.3數(shù)據(jù)表…………………五、系統(tǒng)界面與功能實(shí)現(xiàn)……………………5.1頁(yè)面流程圖……………5.2創(chuàng)建系統(tǒng)登陸模塊……………………5.2.1系統(tǒng)登陸模塊的功能……………5.2.2設(shè)計(jì)登陸窗口……………………5.3創(chuàng)建主窗口模塊………5.3.1主窗口模塊的功能………………5.3.2主窗口的設(shè)計(jì)………5.4倉(cāng)庫(kù)人員管理模塊……………………5.4.1倉(cāng)庫(kù)人員管理模塊的功能………5.5入庫(kù)模塊的實(shí)現(xiàn)………5.5.1入庫(kù)模塊的功能…………………5.6出庫(kù)模塊的實(shí)現(xiàn)……………………5.6.1出庫(kù)模塊的功能…………………5.7移庫(kù)模塊的實(shí)現(xiàn)……………………5.7.1移庫(kù)模塊的功能…………………5.8盤點(diǎn)模塊的實(shí)現(xiàn)……………………5.8.1盤點(diǎn)模塊的功能…………………5.9倉(cāng)庫(kù)設(shè)置模塊的實(shí)現(xiàn)………………5.9.1倉(cāng)庫(kù)設(shè)置模塊的功能……………5.10計(jì)量單位設(shè)置模塊的實(shí)現(xiàn)…………5.10.1計(jì)量單位設(shè)置模塊的功能……5.11部門信息設(shè)置模塊的實(shí)現(xiàn)…………5.11.1部門信息設(shè)置模塊的功能……5.12操作類型設(shè)置模塊的實(shí)現(xiàn)…………5.12.1操作類型設(shè)置模塊的功能……5.13期初設(shè)置模塊的實(shí)現(xiàn)………………5.13.1期初設(shè)置模塊的功能…………5.14貨物存儲(chǔ)信息查詢模塊的實(shí)現(xiàn)……5.14.1貨物存儲(chǔ)信息查詢模塊的功能與布局………5.15幫助模塊的實(shí)現(xiàn)5.15.1幫助模塊的功能與布局………六、Hibernate設(shè)計(jì)…………6.1Hibernate簡(jiǎn)介……………………6.2Hibernate生成…………………… 6.6.3Hibernate的映射文件和類的生成………………… 6. 6.七、總結(jié)………………………參考文獻(xiàn)………………………一、引言1.1倉(cāng)庫(kù)管理系統(tǒng)的背景與意義隨著企業(yè)規(guī)模的擴(kuò)大,管理信息系統(tǒng)也發(fā)揮越來(lái)越重要的作用。作為企業(yè)管理信息系統(tǒng)關(guān)鍵組成部分的倉(cāng)庫(kù)管理系統(tǒng)的應(yīng)用給企業(yè)帶來(lái)巨大的效益。采用倉(cāng)庫(kù)管理系統(tǒng)將使企業(yè)改變其傳統(tǒng)的手工記錄模式,應(yīng)用數(shù)據(jù)庫(kù)技術(shù)使海量數(shù)據(jù)的存儲(chǔ)與處理成為很方便的事情,這樣可大幅縮短主要業(yè)務(wù)流程的處理時(shí)間,提高對(duì)市場(chǎng)的響應(yīng)能力?!拔锪鞣?wù)最初起源于軍事上的運(yùn)用”,“物流”這一概念起源于二戰(zhàn)期間的美國(guó),英文稱之為L(zhǎng)ogistics或者PhysicalDistribution,前者的使用率更高一些。物流一詞最早被描述為泛指軍隊(duì)運(yùn)輸、補(bǔ)給和屯駐,后來(lái)被廣泛用來(lái)描述商品實(shí)體的物理性流通活動(dòng),成為流通經(jīng)濟(jì)學(xué)中的術(shù)語(yǔ)。物流(Logistic)到目前還沒(méi)有一個(gè)統(tǒng)一的定義,綜合各種物流的定義可以得出,物流是有形物品從出發(fā)點(diǎn)到最終消費(fèi)點(diǎn)的流動(dòng)存儲(chǔ)活動(dòng),具體包括運(yùn)輸、保管、包裝、裝卸、搬運(yùn)、流通加工與信息處理,從職能上可以分為:供應(yīng)物流、生成物流、銷售物流、回收物流和廢棄物流五個(gè)職能。從70年代開(kāi)始,計(jì)算機(jī)技術(shù)開(kāi)始應(yīng)用到物流領(lǐng)域。隨著物流市場(chǎng)和物流信息化的發(fā)展,物流軟件市場(chǎng)也應(yīng)運(yùn)而生并迅速發(fā)展起來(lái),國(guó)內(nèi)外出現(xiàn)了一大批物流軟件供應(yīng)商和物流軟件?!拔锪鬈浖鳛楣芾碥浖?,較其它應(yīng)用軟件呈現(xiàn)先進(jìn)性、高效性、可靠性和安全性等特點(diǎn);較其它管理軟件,如ERP(EnterpriseResourcePlanning),具有以下特點(diǎn):實(shí)施風(fēng)險(xiǎn)小,實(shí)施迅速;效益顯著、見(jiàn)效快。根據(jù)物流軟件結(jié)構(gòu)分類,就目前物流軟件所使用的應(yīng)用范圍來(lái)說(shuō),物流軟件包括如下幾個(gè)子系統(tǒng):WMS(WarehouseManagementSystem,倉(cāng)庫(kù)管理系統(tǒng))、TMS(TransportationManagementSystem,運(yùn)輸管理系統(tǒng)。OMS(OrderManagementSystem,定單管理系統(tǒng))、SMS(ServiceManagementSystem,服務(wù)管理系統(tǒng))。其中,WMS主要提供了一整套倉(cāng)庫(kù)業(yè)務(wù)以與作業(yè)管理系統(tǒng)。通過(guò)倉(cāng)庫(kù)管理系統(tǒng)可以實(shí)現(xiàn)庫(kù)位分配自動(dòng)化和智能化;提高倉(cāng)庫(kù)作業(yè)效率和速度,提供準(zhǔn)確的庫(kù)存信息,并使之與實(shí)際庫(kù)存變化同步。根據(jù)中國(guó)物流與采購(gòu)聯(lián)合會(huì)統(tǒng)計(jì),2001年,中國(guó)與物流相關(guān)的年總支出為19000億元人民幣,物流成本占GDP的比重為20%左右。我國(guó)企業(yè)的物流支出成本約占總成本的30%,而國(guó)外企業(yè)的物流支出成本僅為7%。物流成本的巨大差距,抵消了我國(guó)企業(yè)在原材料和人工上的成本優(yōu)勢(shì),降低了我國(guó)企業(yè)的競(jìng)爭(zhēng)力。國(guó)內(nèi)的很多企業(yè),由于信息的記錄、收集、匯總、處理分析還處于比較低的水平,記錄中信息分散、格式隨意、應(yīng)用單一,收集中不與時(shí)、不全面、不完善、保留不科學(xué),匯總時(shí)口徑不一、主題多元、結(jié)果不一,處理分析方法落后、效率低下、只有短期,難以支持趨勢(shì)等。倉(cāng)庫(kù)管理系統(tǒng)是通過(guò)入庫(kù)業(yè)務(wù)、出庫(kù)業(yè)務(wù)、庫(kù)存調(diào)撥、庫(kù)存調(diào)整,結(jié)合批次管理、物料對(duì)應(yīng)、庫(kù)存盤點(diǎn)、質(zhì)檢管理、實(shí)時(shí)庫(kù)存管理等功能綜合運(yùn)用的管理系統(tǒng),對(duì)庫(kù)存業(yè)務(wù)的物流和成本管理全過(guò)程進(jìn)行有效控制和跟蹤,實(shí)現(xiàn)完善的企業(yè)倉(cāng)庫(kù)信息管理。倉(cāng)庫(kù)管理系統(tǒng)的投入,將使倉(cāng)庫(kù)的管理更加正規(guī)化,為產(chǎn)品的出入庫(kù)管理部門和銷售部門提供了方便,降低了倉(cāng)庫(kù)的損耗。企業(yè)可以對(duì)售出的產(chǎn)品進(jìn)行跟蹤服務(wù),同時(shí)也免去了銷售人員按以往慣例親自前往用戶處去核實(shí)貨物情況的麻煩,提高了辦事效率,節(jié)省了費(fèi)用,而且還避免了不必要的業(yè)務(wù)糾紛,維護(hù)了企業(yè)長(zhǎng)期與用戶建立的良好信譽(yù)。1.2JavaEE簡(jiǎn)介企業(yè)級(jí)多層應(yīng)用系統(tǒng)的開(kāi)發(fā)一直面臨著重大挑戰(zhàn)。開(kāi)發(fā)商和廣大程序員一直在努力推動(dòng)和殷切期待一個(gè)成熟的、標(biāo)準(zhǔn)的企業(yè)級(jí)應(yīng)用平臺(tái)來(lái)簡(jiǎn)化和規(guī)范企業(yè)級(jí)應(yīng)用系統(tǒng)的開(kāi)發(fā)和部署。Java技術(shù)的出現(xiàn),尤其是J2EE(Java2PlatformEnterpriseEdition)平臺(tái)的推出正是這種努力的結(jié)果,也使得企業(yè)級(jí)應(yīng)用系統(tǒng)的開(kāi)發(fā)由此變得更加快速和方便。需要指出的是,J2EE本身是一個(gè)標(biāo)準(zhǔn),它為不同廠商創(chuàng)建平臺(tái)產(chǎn)品提供了標(biāo)準(zhǔn),使不同J2EE平臺(tái)產(chǎn)品之間的交互成為可能。SUN與其合作方將J2EE1.5改名為JavaEE5,但是其架構(gòu)跟改名前的J2EE沒(méi)有區(qū)別。只是通過(guò)增強(qiáng)一些技術(shù)使得我們更快、更容易、更簡(jiǎn)單地開(kāi)發(fā)企業(yè)應(yīng)用程序1.3本文的主要工作本論文以標(biāo)準(zhǔn)的倉(cāng)庫(kù)管理模式為藍(lán)本,根據(jù)軟件工程的理論,開(kāi)發(fā)出基于JavaEE的適用于中小單的位倉(cāng)庫(kù)管理系統(tǒng)。論文首先研究了系統(tǒng)開(kāi)發(fā)的可行性,然后進(jìn)行了需求分析,并將需求分析以文檔的形式反饋給用戶,并和用戶進(jìn)行交流進(jìn)一步確認(rèn)需求,然后根據(jù)需求分析采用了結(jié)構(gòu)化分析方法進(jìn)行了系統(tǒng)分析設(shè)計(jì),并進(jìn)行了數(shù)據(jù)庫(kù)的建模工作,根據(jù)模型構(gòu)建了數(shù)據(jù)庫(kù)。后臺(tái)數(shù)據(jù)庫(kù)采用MYSQL完成?;陂_(kāi)放的開(kāi)發(fā)架構(gòu)JavaEE,實(shí)現(xiàn)了系統(tǒng)登錄模塊、主窗口模塊、倉(cāng)庫(kù)人員管理模塊、入庫(kù)模塊、出庫(kù)模塊、入庫(kù)報(bào)表生成模塊、出庫(kù)報(bào)表生成模塊等。最后對(duì)全文進(jìn)行了總結(jié),對(duì)今后的工作提出了展望。二、相關(guān)技術(shù)介紹2.1JavaEE相關(guān)原理與技術(shù)簡(jiǎn)介JavaEE規(guī)范定義了一個(gè)完善的應(yīng)用組件技術(shù)框架,作為企業(yè)級(jí)應(yīng)用系統(tǒng)基本構(gòu)造模塊的組件就是建立在這個(gè)框架之上。從簡(jiǎn)單的Web應(yīng)用到復(fù)雜的分布式企業(yè)級(jí)應(yīng)用,幾乎所有的業(yè)務(wù)應(yīng)用,都可以在此技術(shù)框架基礎(chǔ)上構(gòu)造。本文中使用的組件技術(shù)主要有三種類型:JSP網(wǎng)頁(yè)、servlet和EnterpriseJavaBean。ServletServlet是一些用來(lái)擴(kuò)展Web服務(wù)器功能的Web組件,它基于請(qǐng)求/響應(yīng)機(jī)制。Servlet從客戶端(例如Web瀏覽器)獲得請(qǐng)求,然后,將響應(yīng)結(jié)果返回客戶端。Servlet的這種特點(diǎn)使它非常適合于Web應(yīng)用。Servlet和EJB組件的區(qū)別在于EJB組件所提供的服務(wù)器端組件特性并不能全部適用于Servlet,Servlet更適合于處理簡(jiǎn)單的請(qǐng)求/響應(yīng)任務(wù),而且它不需要應(yīng)用服務(wù)器所提供的復(fù)雜服務(wù)的支持。2.1.JSP(JavaServerPages)是由SunMicrosystems公司倡導(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(Java2EnterpriseEdition)一起發(fā)展。JSP是結(jié)合markup(HTML和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)Javaclass、Servlet、Applets和WebServer,因此,Web應(yīng)用的功能可以分成多個(gè)明確定義公用接口的組件,通過(guò)JSP將它們結(jié)合在一起.2.1.3EJB(EnterpriseJavaBeans)是J2EE平臺(tái)的核心,也是J2EE得到業(yè)界廣泛關(guān)注和支持的主要原因。我們知道,J2EE的一個(gè)主要目標(biāo)就是簡(jiǎn)化企業(yè)級(jí)多層應(yīng)用系統(tǒng)的開(kāi)發(fā),使得程序員將主要精力放在業(yè)務(wù)邏輯的開(kāi)發(fā)上。EJB正是基于這種思想的服務(wù)器端技術(shù),它本身也是一種規(guī)范,該規(guī)范定義了一個(gè)可重用的組件框架來(lái)實(shí)現(xiàn)分布式的、面向?qū)ο蟮臉I(yè)務(wù)邏輯。EJB的核心思想是將業(yè)務(wù)邏輯與底層的系統(tǒng)邏輯分開(kāi),使開(kāi)發(fā)者只需關(guān)心業(yè)務(wù)邏輯,而由EJB容器實(shí)現(xiàn)目錄服務(wù)、事務(wù)處理、持久性、安全性等底層系統(tǒng)邏輯。根據(jù)功能不同,規(guī)范中定義了三種EnterpriseJvavaBean:會(huì)話Bean(SessionBean)、實(shí)體Bean(EntityBean)和消息驅(qū)動(dòng)Bean(Message-DrivenBean)。會(huì)話Bean分為無(wú)狀態(tài)和有狀態(tài)兩種。一般無(wú)狀態(tài)的會(huì)話Bean模擬商業(yè)邏輯,比如計(jì)算價(jià)格等。有狀態(tài)的會(huì)話Bean通常模擬一個(gè)客戶會(huì)話,它會(huì)臨時(shí)保存客戶信息,根據(jù)客戶要求調(diào)用其它Bean來(lái)存取數(shù)據(jù)。兩種會(huì)話Bean都不保存狀態(tài)信息或者數(shù)據(jù),當(dāng)客戶斷開(kāi)連接或者服務(wù)器關(guān)閉時(shí),會(huì)話Bean也就隨之消失。一個(gè)會(huì)話Bean的典型例子是網(wǎng)站上的購(gòu)物車。實(shí)體Bean模擬業(yè)務(wù)數(shù)據(jù),它表示一個(gè)數(shù)據(jù)存儲(chǔ),可以是狀態(tài)信息或者數(shù)據(jù)庫(kù)中的一條記錄。實(shí)體Bean在客戶斷開(kāi)連接或者服務(wù)器關(guān)閉后,仍有服務(wù)保證其數(shù)據(jù)得以保存。消息驅(qū)動(dòng)Bean在行為上很象會(huì)話Bean。不同的就是僅在需要向這些Bean發(fā)送消息時(shí)才調(diào)用消息驅(qū)動(dòng)Bean,比如在需要的時(shí)候發(fā)送用戶確認(rèn)信息等。2.2Struts2.2Struts框架工具是Apache基金會(huì)Jakarta項(xiàng)目中推出的一個(gè)子項(xiàng)目。Struts在英文中是支架、支撐的意思,這也體現(xiàn)出Struts在開(kāi)發(fā)Web應(yīng)用程序過(guò)程所起到的重要作用,Struts為Web應(yīng)用提供了通用的框架,讓開(kāi)發(fā)人員可以把主要精力集中在如何解決實(shí)際業(yè)務(wù)問(wèn)題上,與此同時(shí)Struts框架也允許開(kāi)發(fā)人員根據(jù)實(shí)際需要進(jìn)行擴(kuò)展和定制,從而可以更好的適應(yīng)用戶的需求。采用Struts可以簡(jiǎn)化遵循MVC設(shè)計(jì)模式的Web應(yīng)用的開(kāi)發(fā)工作,很好地實(shí)現(xiàn)代碼重用,使開(kāi)發(fā)人員從一些繁瑣的工作中解脫出來(lái),快速開(kāi)發(fā)能夠充分發(fā)揮JSP/Servlet優(yōu)點(diǎn)、并具有強(qiáng)可擴(kuò)展性的Web應(yīng)用??傊琒truts的出現(xiàn)使得Web應(yīng)用的開(kāi)發(fā)過(guò)程大大簡(jiǎn)化,從而能夠縮短開(kāi)發(fā)周期、提高開(kāi)發(fā)效率。Struts架構(gòu)一經(jīng)推出,即受到Java開(kāi)發(fā)群體的廣泛重視,從2004年開(kāi)始逐漸升溫,并日漸成為Java創(chuàng)建Web應(yīng)用開(kāi)發(fā)的最流行的框架工具,在目前JavaWeb程序員的招聘要求中,幾乎都提出了對(duì)Struts的要求,精通Struts架構(gòu)已經(jīng)成為JavaWeb程序員必備的技能。2.2模型-視圖-控制器(MVC)是80年代Smalltalk-80出現(xiàn)的一種軟件設(shè)計(jì)模式,現(xiàn)在已經(jīng)被廣泛的使用。1、模型(Model)模型是應(yīng)用程序的主體部分。模型表示業(yè)務(wù)數(shù)據(jù),或者業(yè)務(wù)邏輯.2、視圖(View)視圖是應(yīng)用程序中用戶界面相關(guān)的部分,是用戶看到并與之交互的界面。3、控制器(controller)控制器工作就是根據(jù)用戶的輸入,控制用戶界面數(shù)據(jù)顯示和更新model對(duì)象狀態(tài)。MVC式的出現(xiàn)不僅實(shí)現(xiàn)了功能模塊和顯示模塊的分離,同時(shí)它還提高了應(yīng)用系統(tǒng)的可維護(hù)性、可擴(kuò)展性、可移植性和組件的可復(fù)用性早期的程序中,如果不注意對(duì)數(shù)功能和顯示的解耦合,常常會(huì)導(dǎo)致程序的復(fù)雜與難以維護(hù)。很多VB,Delphi等RAD程序都有這種問(wèn)題。甚至現(xiàn)在的C#,Java有時(shí)候也會(huì)出現(xiàn)把業(yè)務(wù)邏輯寫在顯示模塊中的現(xiàn)象管MVC設(shè)計(jì)模式很早就提出,但在Web項(xiàng)目的開(kāi)發(fā)中引入MVC卻是步履維艱。主要原因:一是在早期的Web項(xiàng)目的開(kāi)發(fā)中,程序語(yǔ)言和HTML的分離一直難以實(shí)現(xiàn)。CGI程序以字符串輸出的形式動(dòng)態(tài)地生成HTML內(nèi)容。后來(lái)隨著腳本語(yǔ)言的出現(xiàn),前面的方式又被倒了過(guò)來(lái),改成將腳本語(yǔ)言書寫的程序嵌入在HTML內(nèi)容中。這兩種方式有一個(gè)相同的不足之處即它們總是無(wú)法將程序語(yǔ)言和HTML分離。二是腳本語(yǔ)言的功能相對(duì)較弱,缺乏支持MVC設(shè)計(jì)模式的一些必要的技術(shù)基礎(chǔ)。直到基于J2EE的JSPModel2問(wèn)世時(shí)才得以改觀。它用JSP技術(shù)實(shí)現(xiàn)視圖的功能,用Servlet技術(shù)實(shí)現(xiàn)控制器的功能,用JavaBean技術(shù)實(shí)現(xiàn)模型的功能JSPModel1與JSPModel2圖1-3-1圖1-3-2圖1-3-3JSPModel2SUN在JSP出現(xiàn)早期制定了兩種規(guī)范,稱為Model1和Model2。雖然Model2在一定程度上實(shí)現(xiàn)了MVC,但是它的應(yīng)用用并不盡如人意model2容易使系統(tǒng)出現(xiàn)多個(gè)Controller,并且對(duì)頁(yè)面導(dǎo)航的處理比較復(fù)雜,有些人覺(jué)得model2仍不夠好,于是CraigR.McClanahan2000年5月提交了一個(gè)WEBframework給JavaCommunity.這就是后來(lái)的Struts。2001年7月,Struts1.0,正式發(fā)布。該項(xiàng)目也成為了ApacheJakarta的子項(xiàng)目之一Struts實(shí)質(zhì)上就是在Model2的基礎(chǔ)上實(shí)現(xiàn)的一個(gè)MVC架構(gòu)。它只有一個(gè)中心控制器,他采用XML定制轉(zhuǎn)向的URL。采用Action來(lái)處理邏輯2.2.優(yōu)點(diǎn):Struts跟Tomcat、Turbine等諸多Apache項(xiàng)目一樣,是開(kāi)源軟件,這是它的一大優(yōu)點(diǎn)。使開(kāi)發(fā)者能更深入的了解其內(nèi)部實(shí)現(xiàn)機(jī)制。除此之外,Struts的優(yōu)點(diǎn)主要集中體現(xiàn)在兩個(gè)方面:Taglib和頁(yè)面導(dǎo)航。Taglib是Struts的標(biāo)記庫(kù),靈活動(dòng)用,能大大提高開(kāi)發(fā)效率。另外,就目前國(guó)內(nèi)的JSP開(kāi)發(fā)者而言,除了使用JSP自帶的常用標(biāo)記外,很少開(kāi)發(fā)自己的標(biāo)記,或許Struts是一個(gè)很好的起點(diǎn)。關(guān)于頁(yè)面導(dǎo)航,我認(rèn)為那將是今后的一個(gè)發(fā)展方向,事實(shí)上,這樣做,使系統(tǒng)的脈絡(luò)更加清晰。通過(guò)一個(gè)配置文件,即可把握整個(gè)系統(tǒng)各部分之間的聯(lián)系,這對(duì)于后期的維護(hù)有著莫大的好處。尤其是當(dāng)另一批開(kāi)發(fā)者接手這個(gè)項(xiàng)目時(shí),這種優(yōu)勢(shì)體現(xiàn)得更加明顯。缺點(diǎn):Taglib是Struts的一大優(yōu)勢(shì),但對(duì)于初學(xué)者而言,卻需要一個(gè)持續(xù)學(xué)習(xí)的過(guò)程,甚至還會(huì)打亂你網(wǎng)頁(yè)編寫的習(xí)慣,但是,當(dāng)你習(xí)慣了它時(shí),你會(huì)覺(jué)得它真的很棒。Struts將MVC的Controller一分為三,在獲得結(jié)構(gòu)更加清晰的同時(shí),也增加了系統(tǒng)的復(fù)雜度。Struts從產(chǎn)生到現(xiàn)在還不到半年,但已逐步越來(lái)越多運(yùn)用于商業(yè)軟件。雖然它現(xiàn)在還有不少缺點(diǎn),但它是一種非常優(yōu)秀的J2EEMVC實(shí)現(xiàn)方式。2.2下圖是Struts的工作流程,所有的請(qǐng)求都提交給ActionServlet來(lái)處理。圖1-3-ActionServlet是一個(gè)FrontController,它是一個(gè)標(biāo)準(zhǔn)的Servlet,它將request轉(zhuǎn)發(fā)給RequestProcessor來(lái)處理,ActionMapping是ActionConfig的子類,實(shí)質(zhì)上是對(duì)struts-config.xml的一個(gè)映射,從中可以取得所有的配置信息RequestProcessor根據(jù)提交過(guò)來(lái)的url,如*.do,從ActionMapping中得到相應(yīng)的ActionForn和Action。然后將request的參數(shù)對(duì)應(yīng)到ActionForm中,進(jìn)行form驗(yàn)證。如果驗(yàn)證通過(guò)則調(diào)用Action的execute()方法來(lái)執(zhí)行Action,最終返回ActionFoward。ActionFoward是對(duì)mapping中一個(gè)foward的包裝,對(duì)應(yīng)于一個(gè)urlActionForm使用了ViewHelper模式,是對(duì)HTML中form的一個(gè)封裝。其中包含有validate方法,用于驗(yàn)證form數(shù)據(jù)的有效性。ActionForm是一個(gè)符合JavaBean規(guī)范的類,所有的屬性都應(yīng)滿足get和set對(duì)應(yīng)。對(duì)于一些復(fù)雜的系統(tǒng),還可以采用DynaActionForm來(lái)構(gòu)造動(dòng)態(tài)的Form,即通過(guò)預(yù)制參數(shù)來(lái)生成Form。這樣可以更靈活的擴(kuò)展程序。ActionErrors是對(duì)錯(cuò)誤信息的包裝,一旦在執(zhí)行action或者form.validate中出現(xiàn)異常,即可產(chǎn)生一個(gè)ActionError并最終加入到ActionErrors。在Form驗(yàn)證的過(guò)程中,如果有Error發(fā)生,則會(huì)將頁(yè)面重新導(dǎo)向至輸入頁(yè),并提示錯(cuò)誤。Action是用于執(zhí)行業(yè)務(wù)邏輯的RequsestHandler。每個(gè)Action都只建立一個(gè)instance。Action不是線程安全的,所以不應(yīng)該在Action中訪問(wèn)特定資源。一般來(lái)說(shuō),應(yīng)改使用BusinessDelegate模式來(lái)對(duì)Businesstier進(jìn)行訪問(wèn)以解除耦合。Struts提供了多種Action供選擇使用。普通的Action只能通過(guò)調(diào)用execute執(zhí)行一項(xiàng)任務(wù),而DispatchAction可以根據(jù)配置參數(shù)執(zhí)行,而不是僅進(jìn)入execute()函數(shù),這樣可以執(zhí)行多種任務(wù)。如insert,update等。LookupDispatchAction可以根據(jù)提交表單按鈕的名稱來(lái)執(zhí)行函數(shù)。2.3HibernateHibernate是一個(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的客戶端程序使用,也可以在Servlet/JSP的Web應(yīng)用中使用,最具革命意義的是,Hibernate可以在應(yīng)用EJB的J2EE架構(gòu)中取代CMP,完成數(shù)據(jù)持久化的重任。Hibernate的核心接口一共有5個(gè),分別為:Session、SessionFactory、Transaction、Query和Configuration。這5個(gè)核心接口在任何開(kāi)發(fā)中都會(huì)用到。通過(guò)這些接口,不僅可以對(duì)持久化對(duì)象進(jìn)行存取,還能夠進(jìn)行事務(wù)控制。三、系統(tǒng)分析與設(shè)計(jì)3.1引言在設(shè)計(jì)軟件系統(tǒng)之前,首先必須確定用戶究竟要求軟件系統(tǒng)完成什么任務(wù),所以分析階段的基本任務(wù)是了解用戶的需求,并將用戶的需求用書面形式表達(dá)出來(lái)。這個(gè)階段還不是確定系統(tǒng)怎樣完成它的工作,而僅僅是確定系統(tǒng)必須完成哪些工作,也就是對(duì)目標(biāo)系統(tǒng)提出完整、準(zhǔn)確、清晰、具體的要求。系統(tǒng)分析的結(jié)果是系統(tǒng)開(kāi)發(fā)的基礎(chǔ),關(guān)系到工程的成敗和軟件產(chǎn)品的質(zhì)量。在全面客觀的系統(tǒng)分析的基礎(chǔ)上,根據(jù)用戶提出的系統(tǒng)功能進(jìn)行相應(yīng)的功能設(shè)計(jì)。3.2系統(tǒng)分析3.2.1系統(tǒng)可行性研究1.技術(shù)可行性

根據(jù)客戶提出的系統(tǒng)功能、性能與實(shí)現(xiàn)系統(tǒng)的各項(xiàng)約束條件,根據(jù)新系統(tǒng)目標(biāo)來(lái)衡量所需的技術(shù)是否具備,本系統(tǒng)是一個(gè)數(shù)據(jù)庫(kù)管理和查詢的系統(tǒng),現(xiàn)有的技術(shù)以較為成熟,硬件、軟件的性能要求、環(huán)境條件等各項(xiàng)條件良好,估計(jì)利用現(xiàn)有技術(shù)條件應(yīng)完全可以達(dá)到該系統(tǒng)的功能目標(biāo)。同時(shí)考慮給予的開(kāi)發(fā)期限也較為充裕,預(yù)計(jì)系統(tǒng)是可以在規(guī)定期限內(nèi)完成開(kāi)發(fā)。本系統(tǒng)基于JavaEE架構(gòu),采用了較為成熟的開(kāi)發(fā)模式。前端用Struts1.2,業(yè)務(wù)邏輯采用EJB3.0的無(wú)狀態(tài)會(huì)話Bean,持久映像層采用hibernate1.3模式,應(yīng)用服務(wù)器使用了使用最廣泛的BEAWeblogicServer。

2.經(jīng)濟(jì)可行性

估算新系統(tǒng)的成本效益分析,其中包括估計(jì)項(xiàng)目開(kāi)發(fā)的成本,開(kāi)發(fā)費(fèi)用和今后的運(yùn)行、維護(hù)費(fèi)用,估計(jì)新系統(tǒng)將獲得的效益,估算開(kāi)發(fā)成本是否回高于項(xiàng)目預(yù)期的全部經(jīng)費(fèi)。并且,分析系統(tǒng)開(kāi)發(fā)是否會(huì)對(duì)其它產(chǎn)品或利潤(rùn)帶來(lái)一定影響。

(1)支出:

·基礎(chǔ)投資:

硬件設(shè)備:PC機(jī)

軟件設(shè)備:WINDOWS2000、BEAWeblogicServer10

·其它一次性支出:軟件設(shè)計(jì)和開(kāi)發(fā)費(fèi)用

·經(jīng)常性支出:軟件維護(hù)費(fèi)用、軟件使用費(fèi)用。

(2)效益:

系統(tǒng)的效益可以從經(jīng)濟(jì)效益和社會(huì)效益兩方面考慮。對(duì)于倉(cāng)庫(kù)管理系統(tǒng)則應(yīng)著重分析其社會(huì)效益。例如,系統(tǒng)投入運(yùn)行后可以使倉(cāng)庫(kù)管理實(shí)現(xiàn)科學(xué)化、規(guī)范化。曾強(qiáng)了工作人員對(duì)倉(cāng)庫(kù)管理能力、提高了工作效率。

3.運(yùn)行可行性

新系統(tǒng)的研制和開(kāi)發(fā)是充分得考慮工作人員對(duì)倉(cāng)庫(kù)的易于管理,管理者方便查詢?cè)O(shè)備信息效率。從而能完全滿足使用者的要求。

4.法律可行性

新系統(tǒng)的研制和開(kāi)發(fā),將不會(huì)侵犯他人、集體和國(guó)家的利益,不會(huì)違反國(guó)家政策和法律。3.2.2系統(tǒng)使用環(huán)境本系統(tǒng)的使用的最低配置要求:硬件環(huán)境:服務(wù)器:CPU:2.4G或以上;內(nèi)存:1GRAM或以上;硬盤:80G或以上;客戶端:CPU:1G;內(nèi)存:64MB以上內(nèi)存或更高;硬盤:20G或以上軟件開(kāi)發(fā)環(huán)境:操作系統(tǒng):WindowsXPorWindows2000server;所用工具:MyEclipse6.0,BEAWeblogicServer10;數(shù)據(jù)庫(kù):MYSQL;軟件運(yùn)行環(huán)境:操作系統(tǒng):WindowsXPorWindows2000server;應(yīng)用服務(wù)器:BEAWeblogicServer10;數(shù)據(jù)庫(kù):MYSQL。3.2.3系統(tǒng)需求分析1.系統(tǒng)功能概述庫(kù)存管理貨物管理員工管理倉(cāng)庫(kù)管理系統(tǒng)編碼設(shè)置出庫(kù)操作移庫(kù)操作盤點(diǎn)信息錄入入庫(kù)操作期初設(shè)置計(jì)量單位設(shè)置部門設(shè)置操作類型設(shè)置倉(cāng)庫(kù)設(shè)置貨物信息查詢貨物信息查詢貨物信息錄入刪除用戶查詢用戶添加用戶基礎(chǔ)數(shù)據(jù)庫(kù)存管理貨物管理員工管理倉(cāng)庫(kù)管理系統(tǒng)編碼設(shè)置出庫(kù)操作移庫(kù)操作盤點(diǎn)信息錄入入庫(kù)操作期初設(shè)置計(jì)量單位設(shè)置部門設(shè)置操作類型設(shè)置倉(cāng)庫(kù)設(shè)置貨物信息查詢貨物信息查詢貨物信息錄入刪除用戶查詢用戶添加用戶基礎(chǔ)數(shù)據(jù)2.貨物入庫(kù)和出庫(kù)的管理倉(cāng)庫(kù)是用來(lái)存放貨物的,貨物進(jìn)入倉(cāng)庫(kù)要進(jìn)行登記記錄,貨物從倉(cāng)庫(kù)出庫(kù)也要進(jìn)行登記記錄,這是倉(cāng)庫(kù)管理的主要內(nèi)容。貨物進(jìn)入倉(cāng)庫(kù),從入庫(kù)申請(qǐng)的人員向執(zhí)行貨物入庫(kù)的倉(cāng)庫(kù)保管員提交貨物開(kāi)始。入庫(kù)申請(qǐng)人向倉(cāng)庫(kù)管理員提交貨物和入庫(kù)申請(qǐng)單,入庫(kù)申請(qǐng)單記錄本次入庫(kù)的貨物名稱、數(shù)量、提交貨物的單位、執(zhí)行提交貨物的人員以與貨物注意事項(xiàng)等信息。庫(kù)管依據(jù)送貨人員提供的入庫(kù)申請(qǐng)單對(duì)待入庫(kù)貨物進(jìn)行檢查。若待入庫(kù)貨物與入庫(kù)申請(qǐng)單信息一致,則允許入庫(kù);若不一致,則禁止入庫(kù),請(qǐng)?zhí)峤回浳锏膯挝恢匦鲁鼍呷霂?kù)申請(qǐng)單。對(duì)允許入庫(kù)的貨物,執(zhí)行庫(kù)管要對(duì)貨物的信息進(jìn)行登記,這些信息包括入庫(kù)貨物名稱、入庫(kù)數(shù)量、入庫(kù)時(shí)間、送貨入庫(kù)人員的信息、執(zhí)行貨物入庫(kù)的執(zhí)行人。進(jìn)行登記后,將貨物存入倉(cāng)庫(kù)。貨物存入倉(cāng)庫(kù)后,執(zhí)行入庫(kù)操作的庫(kù)管給提出入庫(kù)申請(qǐng)的入庫(kù)人員開(kāi)具入庫(kù)單,入庫(kù)流程結(jié)束。貨物從倉(cāng)庫(kù)中出庫(kù),是從需求貨物的出庫(kù)單位出庫(kù)人員向執(zhí)行出庫(kù)操作的庫(kù)管提交出庫(kù)申請(qǐng)開(kāi)始的。首先,出庫(kù)人員向庫(kù)管提交出庫(kù)申請(qǐng)單。出庫(kù)申請(qǐng)記錄申請(qǐng)出庫(kù)的貨物名稱、申請(qǐng)出庫(kù)的數(shù)量、申請(qǐng)出庫(kù)的單位、執(zhí)行出庫(kù)申請(qǐng)的人員等信息。執(zhí)行出庫(kù)的庫(kù)管首先對(duì)出庫(kù)單的真?zhèn)芜M(jìn)行檢驗(yàn)。對(duì)有效的出庫(kù)單,依據(jù)其要求出庫(kù)的貨物名稱查找倉(cāng)庫(kù)庫(kù)存貨物的信息和此貨物的庫(kù)存數(shù)量。如果有此貨物,并且其庫(kù)存數(shù)量滿足出庫(kù)申請(qǐng)單的數(shù)量,則執(zhí)行出庫(kù)操作的庫(kù)管保存出庫(kù)申請(qǐng)單并進(jìn)行出庫(kù)登記。在出庫(kù)登記中,執(zhí)行庫(kù)管要記錄出庫(kù)貨物的名稱、出庫(kù)數(shù)量、出庫(kù)后剩余數(shù)量、出庫(kù)時(shí)間、貨物去向、出庫(kù)的倉(cāng)庫(kù)、執(zhí)行出庫(kù)的庫(kù)管名稱等信息。進(jìn)行出庫(kù)登記后,將貨物出庫(kù)。出庫(kù)結(jié)束后,執(zhí)行庫(kù)管給提出出庫(kù)申請(qǐng)的出庫(kù)人員開(kāi)具出庫(kù)單,出庫(kù)流程結(jié)束。3.出庫(kù)入庫(kù)記錄的查詢與報(bào)表倉(cāng)庫(kù)的管理人員要對(duì)倉(cāng)庫(kù)存儲(chǔ)的貨物信息、入庫(kù)記錄和出庫(kù)記錄等與時(shí)掌握,這樣才能與時(shí)了解倉(cāng)庫(kù)的運(yùn)行現(xiàn)狀,才有可能會(huì)使倉(cāng)庫(kù)處在良好的運(yùn)行狀態(tài)。所以,一般倉(cāng)庫(kù)管理過(guò)程中要能提供倉(cāng)庫(kù)的入庫(kù)、出庫(kù)記錄的查詢功能,并且能夠?qū)⒊鰩?kù)、入庫(kù)記錄生成報(bào)表,供管理人員使用,所以,對(duì)入庫(kù)、出庫(kù)記錄的查詢并將這些信息生成報(bào)表是倉(cāng)庫(kù)管理系統(tǒng)的重要功能之一。4.貨物信息的管理倉(cāng)庫(kù)要存放貨物,關(guān)于這些貨物本身的信息,對(duì)貨物的正常存儲(chǔ)是非常重要的,例如,哪些貨物需要防潮,哪些貨物需要輕搬輕放等,所以,對(duì)貨物本身的信息的登記、管理是倉(cāng)庫(kù)管理的重要內(nèi)容。5.其他信息的管理除了以上提到的一些功能外,倉(cāng)庫(kù)管理系統(tǒng)還應(yīng)該能對(duì)一些其他的信息進(jìn)行管理。例如,對(duì)每個(gè)倉(cāng)庫(kù)來(lái)說(shuō),都有一些存儲(chǔ)位置用來(lái)存放貨物,倉(cāng)庫(kù)管理過(guò)程中包括對(duì)這些存儲(chǔ)位置進(jìn)行的管理;每個(gè)倉(cāng)庫(kù)都有一些倉(cāng)庫(kù)管理員,對(duì)這些倉(cāng)庫(kù)管理員的管理也是倉(cāng)庫(kù)管理系統(tǒng)的功能之一。3.3系統(tǒng)功能設(shè)計(jì)根據(jù)倉(cāng)庫(kù)管理系統(tǒng)的一般需求,設(shè)計(jì)了如下一些功能模塊:1.倉(cāng)庫(kù)管理人員的管理模塊此功能模塊方便對(duì)人員的管理以與數(shù)據(jù)安全性,如(新增員工)。2.貨物信息管理模塊此模塊提供了貨物基礎(chǔ)數(shù)據(jù)的錄入、貨物信息查詢等功能,方便與時(shí)了解庫(kù)存信息。3.入庫(kù)功能模塊入庫(kù)功能是倉(cāng)庫(kù)管理系統(tǒng)的基本功能之一。入庫(kù)功能主要是實(shí)現(xiàn)登記入庫(kù)記錄的功能。這些信息應(yīng)包括入庫(kù)單據(jù)信息、入庫(kù)數(shù)量和入庫(kù)時(shí)間信息、執(zhí)行入庫(kù)操作的操作員信息和貨物存放倉(cāng)庫(kù)的信息等。入庫(kù)登記功能產(chǎn)生貨物的入庫(kù)記錄,為以后進(jìn)行入庫(kù)貨物的查詢和生成報(bào)表以與出庫(kù)操作產(chǎn)生操作數(shù)據(jù),供管理人員掌握倉(cāng)庫(kù)內(nèi)存儲(chǔ)的貨物情況。4.出庫(kù)功能模塊出庫(kù)功能是倉(cāng)庫(kù)管理系統(tǒng)的基本功能之二。出庫(kù)功能主要是實(shí)現(xiàn)登記出庫(kù)貨物信息的功能。這些出庫(kù)記錄包括出庫(kù)申請(qǐng)單據(jù)信息、出庫(kù)數(shù)量和出庫(kù)時(shí)間信息、執(zhí)行出庫(kù)操作的庫(kù)管信息和貨物剩余信息等。出庫(kù)功能依據(jù)入庫(kù)登記功能產(chǎn)生的入庫(kù)記錄產(chǎn)生貨物的出庫(kù)記錄,將出庫(kù)記錄存入系統(tǒng),為以后的出庫(kù)記錄查詢以與掌握倉(cāng)庫(kù)貨物存儲(chǔ)情況作基礎(chǔ)。5.盤點(diǎn)功能模塊此模塊通過(guò)定期對(duì)倉(cāng)庫(kù)信息做清點(diǎn),有效的了解了貨物的流通情況和倉(cāng)庫(kù)貨物的損耗情況。方便對(duì)貨物信息的管理。6.移庫(kù)功能模塊此模塊是針對(duì)貨物在內(nèi)部進(jìn)行調(diào)動(dòng)的詳細(xì)記載,從而對(duì)庫(kù)存信息達(dá)到更方便的管理。四、數(shù)據(jù)庫(kù)設(shè)計(jì)4.1引言數(shù)據(jù)庫(kù)是一種存儲(chǔ)數(shù)據(jù)并對(duì)數(shù)據(jù)進(jìn)行操作的工具。數(shù)據(jù)庫(kù)的作用在于組織和表達(dá)信息,即數(shù)據(jù)庫(kù)就是相關(guān)信息的集合。本章從E-R模型的分析設(shè)計(jì)為切入點(diǎn),重點(diǎn)介紹了數(shù)據(jù)庫(kù)的設(shè)計(jì)。根據(jù)倉(cāng)庫(kù)管理系統(tǒng)的功能,將其E-R圖轉(zhuǎn)化為個(gè)數(shù)據(jù)庫(kù)表,為系統(tǒng)的實(shí)現(xiàn)奠定了基礎(chǔ)。4.2E-R圖實(shí)體聯(lián)系圖1:實(shí)體聯(lián)系圖2:實(shí)體聯(lián)系圖3:實(shí)體聯(lián)系圖4:4.3數(shù)據(jù)表1.倉(cāng)庫(kù)表(WH)列名數(shù)據(jù)類型長(zhǎng)度允許空默認(rèn)值說(shuō)明whIDchar4倉(cāng)庫(kù)編號(hào)Namevarchar20倉(cāng)庫(kù)名whPersonvarchar10負(fù)責(zé)人whAddrvarchar100倉(cāng)庫(kù)地址2.貨物信息表(GDMESS)列名數(shù)據(jù)類型長(zhǎng)度允許空默認(rèn)值說(shuō)明goodsIDchar8貨物編號(hào)goodsNamevarchar30貨物名稱shortNamevarchar20NULL貨物簡(jiǎn)稱goodsClassvarchar10貨物種類goodsStdvarchar20貨物規(guī)格型號(hào)Pricedouble8貨物單價(jià)Weightdouble8NULL單位重量Volumedouble8NULL單位體積unitIDchar8計(jì)量單位Vendorvarchar20默任供應(yīng)商lowQuantityint8最低庫(kù)存量highQuantityint8最高庫(kù)存量safeQuantityint8安全庫(kù)存whIDchar8倉(cāng)庫(kù)編號(hào)highPricedouble8最高進(jìn)價(jià)lowPricedouble8最低售價(jià)Buildervarchar10建檔人modiPersonvarchar10NULL更改人modiTimedatetime8NULL更改時(shí)間nowQuantityint8當(dāng)前數(shù)量checkCycleint8盤點(diǎn)周期lastCleckTimedatetime8NULL上次盤點(diǎn)時(shí)間3.貨物存儲(chǔ)表GDST列名數(shù)據(jù)類型長(zhǎng)度允許空默認(rèn)值說(shuō)明goodsIDchar8貨物編號(hào)whIDcahr8倉(cāng)庫(kù)編號(hào)Quantityint8數(shù)量4.操作類型表OPST列名數(shù)據(jù)類型長(zhǎng)度允許空默認(rèn)值說(shuō)明opeTypeIDchar8操作類型編碼opeTypeNavarchar20操作類型名稱5.庫(kù)存記錄主表MSTOCK列名數(shù)據(jù)類型長(zhǎng)度允許空默認(rèn)值說(shuō)明Codechar8單據(jù)號(hào)opeTypeIDchar8操作類型vouchTypechar8單據(jù)類型whIDchar8倉(cāng)庫(kù)編號(hào)Departchar20所屬部門Clerkvarchar20NULL業(yè)務(wù)員Operatorvarchar20操作員opTimedatetime8時(shí)間Vendorvarchar20NULL供應(yīng)商Customervarchar20NULL客戶Summdouble10合計(jì)金額orderCodechar8NULL定貨單號(hào)receiveCodechar8NULL收貨單號(hào)invoiceCodechar8發(fā)票號(hào)dispatchCodechar8NULL發(fā)貨單號(hào)Memovarchar100NULL備注6.庫(kù)存記錄明細(xì)表STOCK列名數(shù)據(jù)類型長(zhǎng)度允許空默認(rèn)值說(shuō)明Codechar8單據(jù)號(hào)goodsIDchar8貨物編號(hào)Unitchar8計(jì)量單位Pricedouble8貨物單價(jià)Quantityint8貨物數(shù)量7.盤點(diǎn)表MCHECK列名數(shù)據(jù)類型長(zhǎng)度允許空默認(rèn)值說(shuō)明CVCodechar8盤點(diǎn)單號(hào)CheckDatedatetime8盤點(diǎn)日期checkPersonvarchar20盤點(diǎn)人whIDchar8倉(cāng)庫(kù)編號(hào)Opprovervarchar20批準(zhǔn)人Makervarchar20制單人8.盤點(diǎn)明細(xì)表CHECKVOUCHS列名數(shù)據(jù)類型長(zhǎng)度允許空默認(rèn)值說(shuō)明CVCodechar8盤點(diǎn)單號(hào)goodsIDchar8貨物編號(hào)bookQuantityint8帳面數(shù)量actQuantityint8實(shí)際數(shù)量checkDatedatetime8盤點(diǎn)日期adjQuantityint8調(diào)整數(shù)量actualWastedouble8實(shí)際損耗率allowWastedouble8合理?yè)p耗率Reasonvarchar100NULL損耗原因9.計(jì)量單位表UNIT列名數(shù)量類型長(zhǎng)度允許空默認(rèn)值說(shuō)明unitIDchar8計(jì)量單位編號(hào)unitNamevarchar8計(jì)量單位名稱10.部門表DEPT列名數(shù)量類型長(zhǎng)度允許空默認(rèn)值說(shuō)明deptCodechar8部門編號(hào)deptNamevarchar20部門名稱Depacint8NULL總?cè)藬?shù)11.員工表EMP列名數(shù)量類型長(zhǎng)度允許空默認(rèn)值說(shuō)明empCodechar8員工號(hào)empNamevarchar20員工姓名empSexchar2NULL性別Passwordvarchar20‘123密碼empTelvarchar15聯(lián)系方式Memovarchar100NULL備注12.移庫(kù)表MOVESTOCK列名數(shù)量類型長(zhǎng)度允許空默認(rèn)值說(shuō)明autoidint8記錄號(hào)goodesidvarchar20貨物編號(hào)sourcechar20源倉(cāng)庫(kù)targetchar20目的倉(cāng)庫(kù)unitchar20計(jì)量單位quantityint8數(shù)量opDatedatetime8NULL移庫(kù)時(shí)間operatorvarchar20NULL操作員五、系統(tǒng)界面與功能實(shí)現(xiàn)此系統(tǒng)是基于JAVAEE的庫(kù)存管理系統(tǒng)。它主要包括三大模塊,基礎(chǔ)數(shù)據(jù)、庫(kù)存操作還有幫助。基礎(chǔ)數(shù)據(jù)用于設(shè)計(jì)一些基礎(chǔ)項(xiàng)目,庫(kù)存操作是對(duì)應(yīng)的入庫(kù)出庫(kù)一類對(duì)庫(kù)存所作的操作,幫助是對(duì)整個(gè)系統(tǒng)的簡(jiǎn)單介紹。此系統(tǒng)是以MyEclipse6.0為平臺(tái),在Struts1.2框架上用JSP頁(yè)面來(lái)實(shí)現(xiàn)的一個(gè)庫(kù)存管理。5.1頁(yè)面流程圖圖(一)圖(二)圖(三)5.2創(chuàng)建系統(tǒng)登陸模塊5.2用戶通過(guò)此登陸模塊,可登陸到系統(tǒng)的內(nèi)部,從而進(jìn)行所需的操作。同時(shí),它能用來(lái)校驗(yàn)用戶是否屬于該部門,是即應(yīng)有對(duì)應(yīng)的工號(hào)跟密碼,不是便不能登陸進(jìn)入。設(shè)計(jì)登陸窗口userLogin.jsp:實(shí)現(xiàn)用戶登陸在struts-config.xml中新建此頁(yè)面后,建form跟action,同時(shí)建立轉(zhuǎn)向,便會(huì)在它的source里建對(duì)應(yīng)的form跟forward以與action:<form-beanname="userLoginForm"type="edu.cec.web.struts.form.UserLoginForm"/><forwardname="userLogin"path="/userLogin.jsp"/><actionattribute="userLoginForm"input="/userLogin.jsp"name="userLoginForm"path="/userLogin"scope="request"type="edu.cec.web.struts.action.UserLoginAction"><forwardname="failed"path="/userLogin.jsp"/><forwardname="success"path="/index.jsp"/></action>5.3創(chuàng)建主窗口模塊5.3.1主窗口模塊,是一個(gè)容器式的窗體,它包容了系統(tǒng)的所有分模塊,系統(tǒng)運(yùn)行時(shí),在里面操作。5.4倉(cāng)庫(kù)人員管理模塊5.4.此模塊是用于管理此部門人員的,由增加用戶跟查詢用戶構(gòu)成。增加的是此部門新進(jìn)人員的資料,查詢是用來(lái)顯示他們的最基本信息的。5.5入庫(kù)模塊的實(shí)現(xiàn)5.5.當(dāng)某種已有物品進(jìn)貨后,就需要在此輸入庫(kù)存記錄信息,并同時(shí)輸入相應(yīng)貨物入庫(kù)信息,并加入到庫(kù)存中。5.6出庫(kù)模塊的實(shí)現(xiàn)5.6.1當(dāng)庫(kù)存中某種需要出庫(kù)的時(shí)候,就需要在此輸入庫(kù)存記錄信息,并同時(shí)輸入相應(yīng)貨物出庫(kù)信息,并保存到相應(yīng)數(shù)據(jù)表中。5.7移庫(kù)模塊的實(shí)現(xiàn)5.7.1當(dāng)某個(gè)倉(cāng)庫(kù)內(nèi)在不足,或者兩個(gè)庫(kù)存均有某一商品,并且其中一個(gè)倉(cāng)庫(kù)有足夠空間存儲(chǔ)所有的時(shí)候,便要進(jìn)行移庫(kù)操作。并將操作的過(guò)程放置到對(duì)應(yīng)的數(shù)據(jù)表中。5.8盤點(diǎn)模塊的實(shí)現(xiàn)5.8.1當(dāng)每個(gè)月的盤點(diǎn)時(shí)間到后,需要對(duì)數(shù)據(jù)庫(kù)中的貨物數(shù)量跟實(shí)際的相比對(duì),如果數(shù)量不對(duì)就要查清原因,并進(jìn)行相應(yīng)處理。以使貨物信息明了。5.9倉(cāng)庫(kù)設(shè)置模塊的實(shí)現(xiàn)5.9.當(dāng)新增加倉(cāng)庫(kù)時(shí),在這里輸入即可將新增的倉(cāng)庫(kù)信息保存到數(shù)據(jù)庫(kù)。5.10計(jì)量單位設(shè)置模塊的實(shí)現(xiàn)5.10.1當(dāng)新增加計(jì)量單位時(shí),在這里輸入即可將新增的計(jì)量單位信息保存到數(shù)據(jù)庫(kù)。5.11部門信息設(shè)置模塊的實(shí)現(xiàn)5.11.1當(dāng)新增加部門時(shí),在這里輸入即可將新增的部門信息保存到數(shù)據(jù)庫(kù)。5.12操作類型設(shè)置模塊的實(shí)現(xiàn)5.12.1當(dāng)新增加操作類型時(shí),在這里輸入即可將新增的部門信息保存到數(shù)據(jù)庫(kù)。5.13期初設(shè)置模塊的實(shí)現(xiàn)5.13.1用于設(shè)置貨物存儲(chǔ)的一些信息的。與入出庫(kù)等操作均有關(guān)。5.14貨物存儲(chǔ)信息查詢模塊的實(shí)現(xiàn)5.14.1用于查詢貨物存儲(chǔ)表里的信息,即在入出庫(kù)后對(duì)應(yīng)的操作的部分展示。如果某貨物在此表中不存在,也就不存在其它對(duì)此貨物的庫(kù)存操作。5.15幫助模塊的實(shí)現(xiàn)5.15.是對(duì)系統(tǒng)內(nèi)各個(gè)模塊的功能與操作流程的描述。讓剛進(jìn)入的用戶能很快掌握此系統(tǒng)。六、Hibernate的設(shè)計(jì) 6.1Hibernate簡(jiǎn)介 Hibernate是非常優(yōu)秀、成熟的ORMapping框架,它提供了強(qiáng)大的對(duì)象和關(guān)系數(shù)據(jù)庫(kù)映射以與查詢功能。它的主要功能就是操作數(shù)據(jù)庫(kù)(以對(duì)象的形式操作數(shù)據(jù)庫(kù))。操作數(shù)據(jù)庫(kù)使用SQL語(yǔ)句。通過(guò)一個(gè)類的操作來(lái)代表數(shù)據(jù)庫(kù)中的操作,就是用類的方法來(lái)代替SQL語(yǔ)句。只注重類的設(shè)計(jì),把SQL語(yǔ)句隱藏起來(lái)。映射關(guān)系: 數(shù)據(jù)庫(kù)定義HBM映射POJO類數(shù)據(jù)庫(kù)定義HBM映射POJO類 POJO類:POJO在Hibernate語(yǔ)義中理解為數(shù)據(jù)庫(kù)表所對(duì)應(yīng)的DomainObject。這里的POJO就是所謂的“PlainOrdinaryJavaObject”,字面上來(lái)講就是無(wú)格式普通Java對(duì)象,簡(jiǎn)單的可以理解為一個(gè)不包含邏輯代碼的值對(duì)象(ValueObject簡(jiǎn)稱VO)。POJO類中只包含setter和getter方法類。 HBM映射:描述類和表之間的關(guān)系。6.2Hibernate生成 6. 6.3Hibernate的映射文件和類的生成6. 以cangkums數(shù)據(jù)庫(kù)中的表為checkvouchs列子 在連接好的窗口中找到cangkums中的表checkvouchs。把表checkvouchs拖到Hibernate.cfg.xml頁(yè)面的Mappings窗口中, NEXT——》NEXT——》 主鍵選擇assigned,assignde的意思是由用戶自行管理。注意:就是類名一般和表名一致,但是類名第一個(gè)字母要大寫,好區(qū)分類名和表名。Hibernate.cfg.xml對(duì)Hibernate環(huán)境配置的,包括使用數(shù)據(jù)庫(kù)式數(shù)據(jù)源。<hibernate-configuration> <session-factory> <propertyname="connection.username">root</property> <propertyname="connection.url"> jdbc:mysql://localhost:3306/cangkums?useUnicode=true&amp;characterEncoding=GBK </property> <propertyname="dialect"> org.hibernate.dialect.MySQLDialect </property> <propertyname="file"> local_mysql </property> <propertyname="connection.driver_class"> com.mysql.jdbc.Driver </property> <propertyname="connection.password"></property> <mappingresource="Dept.hbm.xml"/> <mappingresource="EMP.hbm.xml"/> <mappingresource="Gdmess.hbm.xml"/> <mappingresource="Gdst.hbm.xml"/> <mappingresource="Mcheck.hbm.xml"/> <mappingresource="Mstock.hbm.xml"/> <mappingresource="Opst.hbm.xml"/> <mappingresource="Stock.hbm.xml"/> <mappingresource="WH.hbm.xml"/> <mappingresource="Checkvouchs.hbm.xml"/> <mappingresource="Unit.hbm.xml"/> <mappingresource="Movestock.hbm.xml"/> </session-factory></hibernate-configuration>最后生成checkvouchs.hbm.xml、checkvouchs.java、checkvouchsDAO.java、checkvouchsID.java、AbstractCheckvouchs.java、AbstractCheckvouchsId.java文件。checkvouchs.hbm.xml是描述類和表之間關(guān)系的文件<hibernate-mapping><classname="edu.cec.hibernate.Checkvouchs"table="checkvouchs"catalog="cangkums"><composite-idname="id"class="edu.cec.hibernate.CheckvouchsId"><key-propertyname="cvCode"type="java.lang.String"><columnname="cvCode"length="8"/></key-property><key-propertyname="goodsId"type="java.lang.String"><columnname="goodsID"length="8"/></key-property></composite-id><propertyname="bookQuantity"type="java.lang.Integer"><columnname="bookQuantity"not-null="true"/></property><propertyname="actQuantity"type="java.lang.Integer"><columnname="actQuantity"not-null="true"/></property><propertyname="checkDate"type="java.util.Date"><columnname="checkDate"length="19"not-null="true"/></property><propertyname="adjQuantity"type="java.lang.Integer"><columnname="adjQuantity"/></property><propertyname="actuallWaste"type="java.lang.Double"><columnname="actuallWaste"precision="22"scale="0"/></property><propertyname="allowWaste"type="java.lang.Double"><columnname="allowWaste"precision="22"scale="0"/></property><propertyname="reason"type="java.lang.String"><columnname="reason"length="100"/></property></class></hibernate-mapping>6.3AbstractCheckvouchs.java生成的POJO類。publicabstractclassAbstractCheckvouchsimplementsjava.io.Serializable{ //Fields privateCheckvouchsIdid; privateIntegerbookQuantity; privateIntegeractQuantity; privateDatecheckDate; privateIntegeradjQuantity; privateDoubleactuallWaste; privateDoubleallowWaste; privateStringreason; //Constructors /**defaultconstructor*/ publicAbstractCheckvouchs(){ } /**minimalconstructor*/ publicAbstractCheckvouchs(CheckvouchsIdid,IntegerbookQuantity, IntegeractQuantity,DatecheckDate){ this.id=id; this.bookQuantity=bookQuantity; this.actQuantity=actQuantity; this.checkDate=checkDate; } /**fullconstructor*/ publicAbstractCheckvouchs(CheckvouchsIdid,IntegerbookQuantity, IntegeractQuantity,DatecheckDate,IntegeradjQuantity, DoubleactuallWaste,DoubleallowWaste,Stringreason){ this.id=id; this.bookQuantity=bookQuantity; this.actQuantity=actQuantity; this.checkDate=checkDate; this.adjQuantity=adjQuantity; this.actuallWaste=actuallWaste; this.allowWaste=allowWaste; this.reason=reason; } //Propertyaccessors publicCheckvouchsIdgetId(){ returnthis.id; } publicvoidsetId(CheckvouchsIdid){ this.id=id; } publicIntegergetBookQuantity(){ returnthis.bookQuantity; } publicvoidsetBookQuantity(IntegerbookQuantity){ this.bookQuantity=bookQuantity; } publicIntegergetActQuantity(){ returnthis.actQuantity; } publicvoidsetActQuantity(IntegeractQuantity){ this.actQuantity=actQuantity; } publicDategetCheckDate(){ returnthis.checkDate; } publicvoidsetCheckDate(DatecheckDate){ this.checkDate=checkDate; } publicIntegergetAdjQuantity(){ returnthis.adjQuantity; } publicvoidsetAdjQuantity(IntegeradjQuantity){ this.adjQuantity=adjQuantity; } publicDoublegetActuallWaste(){ returnthis.actuallWaste; } publicvoidsetActuallWaste(DoubleactuallWaste){ this.actuallWaste=actuallWaste; } publicDoublegetAllowWaste(){ returnthis.allowWaste; } publicvoidsetAllowWaste(DoubleallowWaste){ this.allowWaste=allowWaste; } publicStringgetReason(){ returnthis.reason; } publicvoidsetReason(Stringreason){ this.reason=reason; }}AbstractCheckvouchsId.javapublicabstractclassAbstractCheckvouchsIdimplementsjava.io.Serializable{ //Fields privateStringcvCode; privateStringgoodsId; //Constructors /**defaultconstructor*/ publicAbstractCheckvouchsId(){ } /**fullconstructor*/ publicAbstractCheckvouchsId(StringcvCode,StringgoodsId){ this.cvCode=cvCode; this.goodsId=goodsId; } //Propertyaccessors publicStringgetCvCode(){ returnthis.cvCode; } publicvoidsetCvCode(StringcvCode){ this.cvCode=cvCode; } publicStringgetGoodsId(){ returnthis.goodsId; } publicvoidsetGoodsId(StringgoodsId){ this.goodsId=goodsId; } publicbooleanequals(Objectother){ if((this==other)) returntrue; if((other==null)) returnfalse; if(!(otherinstanceofAbstractCheckvouchsId)) returnfalse; AbstractCheckvouchsIdcastOther=(AbstractCheckvouchsId)other; return((this.getCvCode()==castOther.getCvCode())||(this .getCvCode()!=null &&castOther.getCvCode()!=null&&this.getCvCode().equals( castOther.getCvCode()))) &&(this.getGoodsId()==castOther.getGoodsId())||(this.getGoodsId()!=null&castOther.getGoodsId()!=null&&this.getGoodsId() .equals(castOther.getGoodsId()))); } publicinthashCode(){ intresult=17; result=37*result +(getCvCode()==null?0:this.getCvCode().hashCode()); result=37*result +(getGoodsId()==null?0:this.getGoodsId().hashCode()); returnresult; }}checkvouchs.javapackageedu.cec.hibernate;importjava.util.Date;/***Checkvouchsentity.**@authorMyEclipsePersistenceTools*/publicclassCheckvouchsextendsAbstractCheckvouchsimplements java.io.Serializable{ //Constructors /**defaultconstructor*/ publicCheckvouchs(){ } /**minimalconstructor*/ publicCheckvouchs(CheckvouchsIdid,IntegerbookQuantity,IntegeractQuantity,DatecheckDate){ super(id,bookQuantity,actQuantity,checkDate); } /**fullconstructor*/ publicCheckvouchs(CheckvouchsIdid,IntegerbookQuantity,IntegeractQuantity,DatecheckDate,IntegeradjQuantity,DoubleactuallWaste,DoubleallowWaste,Stringreason){ super(id,bookQuantity,actQuantity,checkDate,adjQuantity,actuallWaste,allowWaste,reason); }}checkvouchsDAO.java生成了一些方法如:publicclassCheckvouchsDAOextendsBaseHibernateDAO{privatestaticfinalLoglog=LogFactory.getLog(CheckvouchsDAO.class); publicvoidsave(CheckvouchstransientInstance){ log.debug("savingCheckvouchsinstance"); try{ getSession().save(transientInstance); log.debug("savesuccessful"); }catch(RuntimeExceptionre){ log.error("savefailed",re); throwre; } } publicvoiddelete(CheckvouchspersistentInstance){ log.debug("deletingCheckvouchsinstance"); try{ getSession().delete(persistentInstance); log.debug("deletesuccessful"); }catch(RuntimeExceptionre){ log.error("deletefailed",re); throwre; } } publi

溫馨提示

  • 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)論