企業(yè)訂單管理系統(tǒng)設(shè)計(jì)_第1頁
企業(yè)訂單管理系統(tǒng)設(shè)計(jì)_第2頁
企業(yè)訂單管理系統(tǒng)設(shè)計(jì)_第3頁
企業(yè)訂單管理系統(tǒng)設(shè)計(jì)_第4頁
企業(yè)訂單管理系統(tǒng)設(shè)計(jì)_第5頁
已閱讀5頁,還剩56頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

大學(xué)本科生畢業(yè)設(shè)計(jì)(論文)摘要服飾企業(yè)生產(chǎn)狀況聯(lián)絡(luò)表是針對企業(yè)的實(shí)際情況而進(jìn)行設(shè)計(jì)、開發(fā)的,而成本管理模塊則是為了保持產(chǎn)品的成本信息及時的保存、更新。利用JSP技術(shù)和SSH框架以及相應(yīng)的數(shù)據(jù)庫訪問技術(shù)實(shí)現(xiàn)了基于Web的系統(tǒng)。該框架可以減少模塊之間的耦合性,讓開發(fā)人員減輕重新建立解決復(fù)雜問題方案的負(fù)擔(dān),并且可以被擴(kuò)展以進(jìn)行內(nèi)部的定制化。通過使用JSP技術(shù)建設(shè)動態(tài)網(wǎng)站,充分發(fā)揮了Java語言所獨(dú)有的易用性、跨平臺性和安全性,從而構(gòu)建了一個運(yùn)行高效、安全可靠、適用性廣的管理系統(tǒng),實(shí)現(xiàn)了企業(yè)信息資源的網(wǎng)上管理,滿足了公司業(yè)務(wù)處理的需要,使企業(yè)適應(yīng)了網(wǎng)絡(luò)經(jīng)濟(jì)時代發(fā)展的要求。論文首先簡要介紹了企業(yè)管理系統(tǒng)的一些研究與應(yīng)用背景,其次介紹了該網(wǎng)站系統(tǒng)所采用的開發(fā)工具、平臺以及開發(fā)環(huán)境。在此基礎(chǔ)上,論文詳盡描述了成本管理系統(tǒng)情況。關(guān)鍵詞:JSP,SSH框架,成本管理XX指導(dǎo)老師:XX

AbstractApparelenterpriseproductionsituationcontactsheetsisdesignedanddevelopedaccordingtoenterprise'sactualsituation,andthecostmanagementmoduleistokeepthecostoftheproductinformationtimelypreservation,updated.It'sthecorrespondingWeb-basedsystemusedofJSPtechnologyandStrutsSpringHibernateframeworkanddatabaseaccesstechnology.Theframeworkreducescouplingbetweenmodulesandallowsdeveloperstoreducetheburdenofre-establishingtosolvethecomplexproblems.Itcansufficientlydevelopthecharacteristiccapabilitiesofeasilyutilization,flatextentandsecurityoftheJavalanguagebyusingofthetechnologyofJSPtobuildtheDynamicwebsites,therebyconstructsthemanagementsystemthathastheabilitiesofhighefficientlyimplementation,securityanddependability,extensivelypracticable.Firstly,Thepaperbrieflyintroducestheresearchandapplicationbackgroundoftheenterprisemanagementsystem,alsointroducestheplatformanddevelopmentenvironmentconfiguration.Finally,thepapershowsthemainfunctionsofthecostmanagementmodule.Keywords:JSP,StrutsSpringHibernateFramework,costmanagementWrittenbyXXSupervisedbyXX

前言隨著科學(xué)技術(shù)的不斷提高,計(jì)算機(jī)科學(xué)日漸成熟,其強(qiáng)大的功能已為人們深刻認(rèn)識,它已進(jìn)入人類社會的各個領(lǐng)域并發(fā)揮著越來越重要的作用。越來越多的企業(yè)也必然要借助先進(jìn)的信息技術(shù)來展示自己公司的信息,產(chǎn)品的介紹,并借助計(jì)算機(jī)技術(shù)來提高管理效率,因此網(wǎng)站建設(shè)所體現(xiàn)的重要性越來越突出。一個企業(yè)門戶網(wǎng)站建設(shè)、運(yùn)行的好壞,直接關(guān)系到一個企業(yè)的形象,也影響著其管理、服務(wù)的質(zhì)量和水平。對企業(yè)門戶網(wǎng)站的測評能直接對其建設(shè)、運(yùn)行狀況做出科學(xué)的評價,并據(jù)此對其未來的發(fā)展做出科學(xué)的規(guī)劃。通過對企業(yè)門戶網(wǎng)站的不斷完善來推動企業(yè)內(nèi)部管理體制的改革和業(yè)務(wù)流程的再造,并從根本上在企業(yè)的各個部門貫徹服務(wù)的理念。本文的結(jié)構(gòu)如下:第一章是緒論部分,敘述了本系統(tǒng)的開發(fā)背景、開發(fā)目標(biāo)、開發(fā)意義以及國內(nèi)外的一些比較。第二章介紹了本系統(tǒng)的開發(fā)環(huán)境及開發(fā)技術(shù)。第三章是系統(tǒng)需求分析與前臺設(shè)計(jì),闡述了在系統(tǒng)開發(fā)前的分析工作、系統(tǒng)的整體設(shè)計(jì)以及數(shù)據(jù)庫設(shè)計(jì)。第四章是系統(tǒng)的詳細(xì)設(shè)計(jì)與功能實(shí)現(xiàn)。第五章總結(jié)和展望,對整個項(xiàng)目的過程和感悟進(jìn)行總結(jié),并對項(xiàng)目未來的開發(fā)做出展望。

第一章緒論1.1研究背景當(dāng)今時代信息技術(shù)飛速發(fā)展,人們已經(jīng)處于數(shù)字化的生存空間之中。Internet構(gòu)造了無限的信息資源,它的普遍使用已經(jīng)從根本上改變了人們的生活方式和工作方式,也改變了企業(yè)的經(jīng)營方式和服務(wù)方式。傳統(tǒng)的人為管理模式已經(jīng)遠(yuǎn)遠(yuǎn)無法滿足現(xiàn)在的企業(yè),那么企業(yè)對于企業(yè)管理系統(tǒng)的需求是必然的。通過管理系統(tǒng),能夠大大提高企業(yè)的各個方面效率,同時方便了企業(yè)與職工之間的交流,便于滿足將來的業(yè)務(wù)需求。網(wǎng)絡(luò)技術(shù)的迅猛發(fā)展使得基于Web的各類信息系統(tǒng)成為目前信息系統(tǒng)中最為流行的展現(xiàn)形式之一?;赪eb的信息系統(tǒng)具有如下一些特點(diǎn):有利于信息的及時更新和發(fā)布;便于操作和管理;擁有良好的用戶界面和接口;靈活性和可擴(kuò)展性;系統(tǒng)功能的通用性;正是在這樣的社會大背景下,我們開始進(jìn)行“服飾生產(chǎn)企業(yè)生產(chǎn)狀況聯(lián)絡(luò)表——成本管理”的課題研究,其目的在于通過網(wǎng)站的形式實(shí)現(xiàn)基于Web的信息系統(tǒng)的上述優(yōu)點(diǎn)和特點(diǎn),以展現(xiàn)該類信息系統(tǒng)在全球信息網(wǎng)——Internet網(wǎng)中快速、便捷、準(zhǔn)確地發(fā)布信息,提供資源共享的強(qiáng)大功能和作用。成本管理可以幫助企業(yè)實(shí)現(xiàn)對成本更好的控制,透明的各項(xiàng)成本支出,長期積累下來的數(shù)據(jù)可以幫助企業(yè)對成本進(jìn)行分析,以達(dá)到節(jié)約成本的目的。系統(tǒng)中的成本信息與負(fù)責(zé)人相關(guān)聯(lián),以達(dá)到可追溯的目的,使得企業(yè)對于成本管理做到可監(jiān)控。1.2設(shè)計(jì)目標(biāo)開發(fā)設(shè)計(jì)本系統(tǒng)的任務(wù)是管理該公司的成本信息,通過該系統(tǒng)能夠讓用戶對成本信息查詢、新增、修改和刪除。開發(fā)系統(tǒng)的目標(biāo)是對成本信息及其明細(xì)信息進(jìn)行管理,滿足的要求具體可包括如下幾個方面:網(wǎng)頁風(fēng)格符合企業(yè)員工的特點(diǎn),簡單實(shí)用。能夠?qū)崿F(xiàn)對于成本信息的符合實(shí)際企業(yè)需求的管理。網(wǎng)站運(yùn)行安全穩(wěn)定。1.3本文結(jié)構(gòu)本文的章節(jié)安排如下:第一章緒論部分,說明本文的研究背景和設(shè)計(jì)目標(biāo)。為接下來的系統(tǒng)后臺的分析與設(shè)計(jì)做基礎(chǔ)準(zhǔn)備。第二章背景技術(shù),簡單介紹系統(tǒng)實(shí)現(xiàn)所用到的平臺與技術(shù)。如MyEclipse、Tomcat服務(wù)器、JSP與Servlet原理、JavaScript、SSH(Struts-Spring-Hibernate)框架等。第三章系統(tǒng)分析與設(shè)計(jì),對企業(yè)的門戶網(wǎng)站的后臺進(jìn)行需求分析,根據(jù)需求分析設(shè)計(jì)相應(yīng)的功能與表結(jié)構(gòu)。第四章系統(tǒng)實(shí)現(xiàn),給出系統(tǒng)后臺的具體實(shí)現(xiàn),包括實(shí)現(xiàn)效果和核心代碼說明。第五章總結(jié)與展望,對本文所做的工作進(jìn)行總結(jié),并針對目前工作中的不足對未來工作的展望。

第二章系統(tǒng)開發(fā)環(huán)境與技術(shù)2.1系統(tǒng)開發(fā)環(huán)境企業(yè)訂單管理系統(tǒng)以Eclipse為開發(fā)平臺,使用MyEclipse作為Eclipse的插件,并由Tomcat6.0充當(dāng)Web服務(wù)器來開發(fā)實(shí)現(xiàn)的。2.1.1MyEclipse插件介紹MyEclipse是一個商業(yè)軟件(商業(yè)插件)、基于Java和Eclipse的可擴(kuò)展開發(fā)平臺(比如MSVisualStudio開發(fā)平臺中的VC、VB等。Borland公司的Delphi、Borland、C++、Builder)。就其本身而言,它只是一個框架和一組服務(wù),用于通過插件組件構(gòu)建開發(fā)環(huán)境。雖然大多數(shù)用戶很樂于將MyEclipse當(dāng)做JavaIDE(IntegratedDevelopmentEnvironment)來使用,但MyEclipse的目標(biāo)并不僅限于此。MyEclipse還包括插件開發(fā)環(huán)境(Plug-inDevelopmentEnvironment-PDE),當(dāng)然,這個功能的實(shí)現(xiàn)主要是Eclipse,這個組件主要針對希望擴(kuò)展Eclipse核心的軟件開發(fā)人員,因?yàn)樗试S他們構(gòu)建與Eclipse環(huán)境無縫集成的工具。由于Eclipse中的每樣?xùn)|西都是插件,對于給Eclipse提供插件,以及給用戶提供一致和統(tǒng)一的集成開發(fā)環(huán)境而言,所有工具開發(fā)人員都具有同等的發(fā)揮場所。這種平等和一致性并不僅限于Java開發(fā)工具。盡管Eclipse是使用Java語言開發(fā)的,但它的用途并不限于Java語言。例如:支持諸如C/C++、COBOL和Eiffel及Perl等編程語言的插件。MyEclipse是一款功能強(qiáng)大的J2EE集成開發(fā)環(huán)境,支持代碼編寫、配置、測試及除錯。程序功能包括:HTML智能編輯器、Struts、JSF、CSS、JavaScript、SQL、Hibernate、Spring等,帶有自動完成與語法高亮顯示功能的J2EE編輯器。在Eclipse中安裝這個插件可以大大提高開發(fā)J2EE的效率。2.1.2Tomcat服務(wù)器介紹Tomcat是一個免費(fèi)開源的Servlet容器,它是Apache軟件基金會(ApacheSoftwareFoundation)Jakarta項(xiàng)目中的一個核心項(xiàng)目,由Apache、Sun和其他一些公司及個人共同開發(fā)而成。由于有了Sun的參與和支持,最新的Servlet和JSP規(guī)范總是能在Tomcat中得到體現(xiàn),Tomcat7支持最新的Servlet3.0和JSP2.2規(guī)范。Tomcat不僅是一個Servlet容器,它也具有傳統(tǒng)的Web服務(wù)器的功能,如處理HTML頁面,簡單的域名管理,配置JNDI等。因?yàn)門omcat技術(shù)先進(jìn)、性能穩(wěn)定,而且免費(fèi),因而深受Java愛好者的喜愛并得到了部分軟件開發(fā)商的認(rèn)可,成為目前比較流行的Web應(yīng)用服務(wù)器。Tomcat很受廣大程序員的喜歡,因?yàn)樗\(yùn)行時占用的系統(tǒng)資源小,擴(kuò)展性好,支持負(fù)載平衡與郵件服務(wù)等開發(fā)應(yīng)用系統(tǒng)常用的功能;而且它還在不斷的改進(jìn)和完善中,任何一個感興趣的程序員都可以更改它或在其中加入新的功能。Tomcat是一個小型的輕量級應(yīng)用服務(wù)器,在中小型系統(tǒng)和并發(fā)訪問用戶不是很多的場合下被普遍使用,是開發(fā)和調(diào)試JSP程序的首選。對于一個初學(xué)者來說,可以這樣認(rèn)為,當(dāng)在一臺機(jī)器上配置好Apache服務(wù)器,可利用它響應(yīng)對HTML頁面的訪問請求。實(shí)際上Tomcat部分是Apache服務(wù)器的擴(kuò)展,但它是獨(dú)立運(yùn)行的,所以當(dāng)你運(yùn)行Tomcat時,它實(shí)際上作為一個與Apache獨(dú)立的進(jìn)程單獨(dú)運(yùn)行的。這里的訣竅是,當(dāng)配置正確時,Apache為HTML頁面服務(wù),而Tomcat實(shí)際上運(yùn)行JSP頁面和Servlet。另外,Tomcat和IIS、Apache等Web服務(wù)器一樣,具有處理HTML頁面的功能,另外它還是一個Servlet和JSP容器,獨(dú)立的Servlet容器是Tomcat的默認(rèn)模式。不過,Tomcat處理靜態(tài)HTML的能力不如Apache服務(wù)器。2.2系統(tǒng)開發(fā)技術(shù)服飾企業(yè)生產(chǎn)狀況聯(lián)絡(luò)表系統(tǒng)的開發(fā)技術(shù)是基于J2EE架構(gòu)的SSH組合技術(shù)。開發(fā)平臺是Eclipse,以MyEclipse作為插件,Tomcat6.0作為服務(wù)器,JDK1.6.0_13作為工具包。2.2.1JSP與Servlet技術(shù)JSP技術(shù)是建立在Servlet技術(shù)之上的。先有Servlet技術(shù),后推出的JSP技術(shù)。JSP最終要編譯為Servlet運(yùn)行。進(jìn)行Web應(yīng)用開發(fā)的時候,結(jié)合Servlet和JSP能夠使開發(fā)的分工和層次更加清晰。JSP注重于頁面的呈現(xiàn),處理邏輯應(yīng)該盡量減少,這樣方便網(wǎng)頁設(shè)計(jì)人員在美工上多下功夫:Servlet程序則側(cè)重于對邏輯的控制,根據(jù)需要對JSP頁面進(jìn)行導(dǎo)航。Servlet是一種獨(dú)立于平臺和協(xié)議的服務(wù)器端的Java應(yīng)用程序,可以生成動態(tài)的Web頁面。Servlet位于Web服務(wù)器內(nèi)部,由Web服務(wù)器進(jìn)行加載,該Web服務(wù)器必須包含支持Servlet的Java虛擬機(jī)。JSP(JavaServerPages)是一種動態(tài)網(wǎng)頁技術(shù)標(biāo)準(zhǔn),是基于JavaServlet和整個Java體系的Web開發(fā)技術(shù)。它在動態(tài)網(wǎng)頁的建設(shè)中有著強(qiáng)大而特別的功能,它的以下優(yōu)點(diǎn)使很多人認(rèn)為它將是最有發(fā)展前途的動態(tài)網(wǎng)頁技術(shù)[3]。將內(nèi)容的生成和顯示進(jìn)行分離用JSP技術(shù),Web頁面開發(fā)人員可以使用HTML或者XML標(biāo)識來設(shè)計(jì)和格式化最終頁面,并使用JSP標(biāo)識或者小腳本來生成頁面上的動態(tài)內(nèi)容。Web管理人員和頁面設(shè)計(jì)者,能夠編輯和使用JSP頁面,而不影響內(nèi)容的生成。采用標(biāo)識Web頁面開發(fā)人員不會都是熟悉腳本語言的編程人員。JSP技術(shù)封裝了許多功能,這些功能是在易用的、與JSP相關(guān)的XML標(biāo)識中進(jìn)行動態(tài)內(nèi)容生成所需要的。JSP的執(zhí)行流程是這樣的:第一個用戶請求JSP文件的時候,JSP容器(如Tomcat)把JSP文件轉(zhuǎn)換成Java文件(Servlet類文件),然后編譯成class文件,常駐內(nèi)存;當(dāng)有客戶請求的時候,直接開一個線程,無須重新編譯,直接執(zhí)行第一次已經(jīng)編譯好的class文件,速度比每次都要重新編譯JSP文件要快的多。JSP的工作原理JSP頁面以擴(kuò)展名為JSP的純文本文件的形式存在服務(wù)器上,當(dāng)服務(wù)器接收到客戶端對某個JSP頁面的請求時,如果這是對該頁面創(chuàng)建或修改后的第一次請求時,那么JSP引擎就把該JSP頁面內(nèi)容轉(zhuǎn)換成一個純Java語言的Servlet源碼,然后將其編譯成Servlet字節(jié)代碼,最后將Servlet的執(zhí)行結(jié)果返回至瀏覽器。JSP頁面被編譯成Servlet之后,其執(zhí)行代碼以獨(dú)立線程的形式一直存在服務(wù)器的內(nèi)存中,以后對該JSP頁面提出請求時,不需要重新編譯,直到該頁面被修改或WEB應(yīng)用程序重新啟動。其工作原理如圖2-2所示。圖2-2JSP的工作原理JSP技術(shù)語法常用JSP命令:1)頁面指令,主要用來指定當(dāng)前JSP頁面的屬性。2)<jsp:include>允許包含其他動態(tài)和靜態(tài)文件。3)<jsp:forward>將一個JSP文件傳給另一個JSP文件。4)<jsp:plugin>可以通過Java插件在瀏覽器中運(yùn)行JavaApplet。5)<jsp:useBean>標(biāo)記是用來訪問JavaBean的動作標(biāo)記。當(dāng)JSP頁面使用<jsp:useBean>標(biāo)記時,表示將引用一個JavaBean的實(shí)例。JavaBean標(biāo)記的語法格式如下:<jsp:useBeanid=“實(shí)例名稱”scope=“范圍”class=“類名稱”type=“類的類型”beanName=“JavaBean的名稱/>。JSP內(nèi)置對象[6]:為了方便Web頁面的開發(fā),JSP提供了一些內(nèi)置的對象。這些內(nèi)置對象可以不經(jīng)顯式聲明而在程序中直接使用,JSP的幾個主要內(nèi)置對象有Request、Response、Session、Out。通過這些內(nèi)置對象,可以實(shí)現(xiàn)頁面的一些基本的請求輸入、輸出功能,且可實(shí)現(xiàn)數(shù)據(jù)在頁面之間的交互。本系統(tǒng)主要用到的有以下幾個對象[4]:1)Request對象:主要功能是接受客戶端以HTTP方式傳送的數(shù)據(jù),使服務(wù)器端的應(yīng)用程序可以根據(jù)這些數(shù)據(jù)做進(jìn)一步的信息處理,實(shí)現(xiàn)與客戶進(jìn)行交互的功能。一般常用的是它的getParameter(Stringname)這個方法來獲取傳遞的參數(shù)。其接口為javax.servlet.http.HttpServletRequest。2)Response對象:主要功能是用來對客戶的請求做出響應(yīng),與Request對象對應(yīng)的就是Response對象。Response對象用于將服務(wù)器的數(shù)據(jù)發(fā)送到客戶端,輸出的數(shù)據(jù)可以是各種數(shù)據(jù)類型,甚至是文件。一般經(jīng)常用到的是它的sendRedirect(URLurl)這個方法來重定向當(dāng)前用戶訪問的url。Response對象的接口為javax.servlet.http.HttpServletResponse。3)Session對象:主要功能用來保存每個用戶在會話期間的數(shù)據(jù)信息,這樣就方便了會話處理工作。當(dāng)用戶登錄網(wǎng)站時,系統(tǒng)將為其生成一個獨(dú)一無二的session對象,用以記錄該用戶的個人信息,一旦該用戶退出網(wǎng)站,那么這個session對象將會注銷。Session對象可以綁定若干個人信息或Java對象。Session對象的接口為javax.servlet.http.HttpServletSession。4)Out對象:主要功能是用于動態(tài)地向客戶端輸出數(shù)據(jù)信息,其主要作用是在Web瀏覽器內(nèi)輸出信息。這個對象使用比較頻繁,在數(shù)據(jù)的輸出方面經(jīng)常用到它的println(parameter)這個方法。同時,它也是進(jìn)行糾錯處理時一個比較有效的輸出方法。2.2.2JavaScript簡介JavaScript是適應(yīng)動態(tài)網(wǎng)頁制作的需要而誕生的一種新的編程語言,如今越來越廣泛地使用于Internet網(wǎng)頁制作上。JavaScript是由Netscape公司開發(fā)的一種腳本語言(scriptinglanguage),或者稱為描述語言。在HTML基礎(chǔ)上,使用JavaScript可以開發(fā)交互式Web網(wǎng)頁。JavaScript的出現(xiàn)使得網(wǎng)頁和用戶之間實(shí)現(xiàn)了一種實(shí)時性的、動態(tài)的、交互性的關(guān)系,使網(wǎng)頁包含更多活躍的元素和更加精彩的內(nèi)容。JavaScript短小精悍,又是在客戶機(jī)上執(zhí)行的,大大提高了網(wǎng)頁的瀏覽速度和交互能力。同時它又是專門為制作Web網(wǎng)頁而量身定做的一種簡單的編程語言。JavaScript加入網(wǎng)頁有兩種辦法[7]:TOC\o"1-3"\p""\h\z\u1.直接加入HTML文檔這是最常用的方法,大部分含有JavaScript的網(wǎng)頁都采用這種方法,如:<scriptlanguage="Javascript"><!--document.writeln("這是Javascript!采用直接插入的方法!");//-Javascript結(jié)束--></script><scriptlanguage="Javascript”>用來告訴瀏覽器這是用JavaScript編寫的程序,需要調(diào)動相應(yīng)的解釋程序進(jìn)行解釋。HTML的注釋標(biāo)簽<!--和-->:用來去掉瀏覽器所不能識別的JavaScript源代碼的,這對不支持Javascript語言的瀏覽器來說是很有用的。//-Javascript結(jié)束:雙斜杠表示JavaScript的注釋部分,即從//開始到行尾的字符都被忽略。<script></script>的位置并不是固定的,可以包含在<head></head>或<body></body>中的任何地方。2.引用方式:如果已經(jīng)存在一個JavaScript源文件(以js為擴(kuò)展名),則可以采用這種引用的方式,以提高程序代碼的利用率。其基本格式如下:<scriptsrc=urllanguage="Javascript"></script>其中的url就是程序文件的地址。同樣的,這樣的語句可以放在HTML文檔頭部或主體的任何部分。如果要實(shí)現(xiàn)“直接插入方式”中所舉例子的效果,可以首先創(chuàng)建一個JavaScript源代碼文件“Script.js”,其內(nèi)容如下:document.writeln("這是Javascript!采用直接插入的方法!")。在網(wǎng)頁中可以這樣調(diào)用程序:<scriptsrc=”Script.js”language=”Javascript”></script>2.2.3MVC模式MVC即Model-View-Controller,M代表業(yè)務(wù)邏輯,V代表視圖,C代表控制層。通過使用MVC模式就把軟件層次分為三個層:模型層、視圖層、控制層[1]。模型(Model)層:也就是軟件業(yè)務(wù)的實(shí)現(xiàn)部分。一個軟件有什么功能,它如何實(shí)現(xiàn)功能,這些功能之間的聯(lián)系都是在模型層進(jìn)行處理的??梢赃@樣說,模型層是一個軟件的核心,軟件功能的好壞、軟件功能是否完善,業(yè)務(wù)層起到了決定性的作用。視圖(View)層:就是用戶能看到的并與之交互的界面。在J2EE技術(shù)中,常用的表示層技術(shù)主要由JSP、JSF、Freemarker等組成。視圖向用戶顯示相關(guān)的數(shù)據(jù),并能接受用戶的輸入數(shù)據(jù),但是它不能進(jìn)行任何實(shí)際的業(yè)務(wù)處理。視圖還可以接受模型發(fā)出來的數(shù)據(jù)更新事件,從而對用戶界面進(jìn)行同步更新。控制(Controller)層:Struts中的控制層和Servlet的功能功能一模一樣,就是調(diào)用業(yè)務(wù)層,然后進(jìn)行視圖的切換。控制層幾乎不做任何與業(yè)務(wù)有關(guān)的事情,比如登錄驗(yàn)證這些。所以在軟件的分層結(jié)構(gòu)設(shè)計(jì)中,控制層的代碼量幾乎是最少的,但它的作用也是非常重要的。通過將模型、視圖與控制層的分離,各個層之間的聯(lián)系非常少,但這樣做的好處是,控制層可以隨意的切換到自己想要展示的頁面,然后控制層調(diào)用業(yè)務(wù)邏輯層和持久化保存數(shù)據(jù)層,來實(shí)現(xiàn)軟件的功能,再轉(zhuǎn)回到控制層,最后將最終的結(jié)果顯示到視圖層,這實(shí)際上是一種模型的變化——傳播機(jī)制。模型、視圖、控制層三者之間的關(guān)系和各自的主要功能如圖2-1所示。模型封裝應(yīng)用程序狀態(tài)響應(yīng)狀態(tài)查詢應(yīng)用程序功能通知視圖改變圖2-模型封裝應(yīng)用程序狀態(tài)響應(yīng)狀態(tài)查詢應(yīng)用程序功能通知視圖改變2.2.4Struts框架Struts已經(jīng)提供了一個非常好的MVC框架,利用Struts開發(fā)MVC系統(tǒng)時可以大大加快開發(fā)速度。在開發(fā)時可以采用的開發(fā)流程如下。收集和定義應(yīng)用需求?;跀?shù)據(jù)采集和顯示的原則定義和開發(fā)用戶界面的需求。為每一個用戶界面JSP文件定義訪問路徑。定義ActionMapping建立應(yīng)用業(yè)務(wù)邏輯之間的聯(lián)系。開發(fā)滿足用戶界面需求的所有支持對象。基于每一個用戶界面需求提供的數(shù)據(jù)屬性來創(chuàng)建對應(yīng)的ActionForm對象。開發(fā)被ActionMapping調(diào)用的Action對象。開發(fā)應(yīng)用業(yè)務(wù)邏輯對象(Bean、EJB等)。對應(yīng)ActionMapping設(shè)計(jì)的流程創(chuàng)建JSP頁面。建立合適的配置文件struts-config.xml、web.xml。開發(fā)/測試/部署。利用Sruts開發(fā)MVC流程,如圖2-2所示。圖2-SEQ圖2-\*ARABIC2Struts框架MVC流程圖在使用Struts框架時,對應(yīng)各個部分的具體開發(fā)工作主要包括一下部分。Model部分:采用JavaBean或EJB組件或Spring的Bean,設(shè)計(jì)和實(shí)現(xiàn)系統(tǒng)的業(yè)務(wù)邏輯。根據(jù)不同的請求從Action派生具體Action處理對象。完成“做什么”的任務(wù)來調(diào)用由Bean構(gòu)成的業(yè)務(wù)組件。創(chuàng)建由ActionForm的派生類實(shí)現(xiàn)對客戶端表單數(shù)據(jù)的封裝及簡單的校驗(yàn)。Controller部分:Struts為我們提供了核心控制部分的實(shí)現(xiàn)。只需要配置ActionMapping對象即可完成URI地址的映射及匹配用戶界面表單和ActionForm類的對應(yīng)關(guān)系。View部分:為了使用Model中的ActionForm對象,必須用Struts提供的自定義標(biāo)記創(chuàng)建HTML表單。利用Struts提供的自定義標(biāo)記庫編寫用戶界面,把應(yīng)用邏輯和顯示邏輯分離。Struts框架通過這些自定義標(biāo)記建立了View和Model之間的聯(lián)系。Struts的自定義標(biāo)記還提供了很多定制頁面的功能。同時,需要編輯兩個配置文件:web.xml和struts-config.xml。通過它們配置Struts系統(tǒng)中的各個模塊之間的交互。圖2-2描述了一個Struts應(yīng)用程序的簡要執(zhí)行流程??蛻舳藶g覽器發(fā)出請求。服務(wù)器端的Struts中心類ActionServlet找到struts-config.xml文件,并放入到內(nèi)存,將文件中的內(nèi)容作為請求路徑映射。ActionServlet類在struts-config.xml文件中找到相關(guān)的請求路徑映射后填充ActionForm類,將前臺傳進(jìn)來的表單域打包成Bean。然后轉(zhuǎn)到Action類進(jìn)行業(yè)務(wù)邏輯功能的實(shí)現(xiàn),比如增、刪、改、查數(shù)據(jù)庫中的數(shù)據(jù)。再通過struts-config.xml文件的映射,找到功能邏輯處理結(jié)束后顯示給客戶端用戶看到的頁面,轉(zhuǎn)發(fā)功能通過ActionForward對象實(shí)現(xiàn)。由圖2-2“Struts框架MVC流程圖”結(jié)構(gòu)來看,Struts框架可以將軟件的功能進(jìn)行分層化,這樣可以將精通不同技術(shù)的人員工作模塊化、分工化。比如精通UI用戶界面設(shè)計(jì)的可以只管View視圖層,而精通Java程序設(shè)計(jì)的程序員可以開發(fā)Model層的代碼。2.2.5Spring框架Spring框架是一個開放源代碼的輕量級Java框架。主要作用是為了解決企業(yè)應(yīng)用程序維護(hù)的復(fù)雜性而創(chuàng)建的。Spring框架的解決辦法就是用分層架構(gòu),分層架構(gòu)允許程序員選擇使用哪一個組件,同時為J2EE應(yīng)用程序開發(fā)提供集成的容器。Spring框架就是實(shí)現(xiàn)了AOP功能的IOC容器。在IOC容器的基礎(chǔ)上加入AOP不僅可以做到松耦合開發(fā),還具有面向切面編程的功能。Spring2.0七大模塊的架構(gòu),如圖2-3所示。圖2-SEQ圖2-\*ARABIC3Spring架構(gòu)組成Spring框架的每個模塊(或組件)都可以單獨(dú)存在,或者與其他一個或多個模塊聯(lián)合實(shí)現(xiàn)。每個模塊的功能如下:SpringCore:核心容器提供Spring框架的基本功能。核心容器的主要組件是BeanFactory,它是工廠模式的實(shí)現(xiàn)。BeanFactory使用控制反轉(zhuǎn)(IOC)模式將應(yīng)用程序的配置和依賴性規(guī)范與實(shí)際的應(yīng)用程序代碼分開。SpringContext:SpringContext是一個配置文件,向Spring框架提供上下文信息。SpringContext包括企業(yè)服務(wù),例如JNDI、EJB、電子郵件、國際化、校驗(yàn)和調(diào)度功能。SpringAOP:通過配置管理特性,SpringAOP模塊直接將面向方面的編程功能集成到了Spring框架中。所以,可以很容易地使Spring框架管理的任何對象支持AOP。SpringAOP模塊為基于Spring的應(yīng)用程序中的對象提供了事務(wù)管理服務(wù)。通過使用SpringAOP,不用依賴EJB組件,就可以將聲明性事務(wù)管理集成到應(yīng)用程序中。SpringDAO:JDBCDAO抽象層提供了有意義的異常層次結(jié)構(gòu),可用該結(jié)構(gòu)來管理異常處理和不同數(shù)據(jù)庫供應(yīng)商拋出的錯誤消息。異常層次結(jié)構(gòu)簡化了錯誤處理,并且極大地降低了需要編寫的異常代碼數(shù)量(例如打開和關(guān)閉連接)。SpringDAO的面向JDBC的異常遵從通用的DAO異常層次結(jié)構(gòu)。SpringORM:Spring框架插入了若干個ORM框架,從而提供了ORM的對象關(guān)系工具,其中包括JDO、Hibernate和iBatisSQLMap。所有這些都遵從Spring的通用事務(wù)和DAO異常層次結(jié)構(gòu)。SpringWeb模塊:Web上下文模塊建立在應(yīng)用程序上下文模塊之上,為基于Web的應(yīng)用程序提供了上下文。所以,Spring框架支持與JakartaStruts的集成。Web模塊還簡化了處理多部分請求以及將請求參數(shù)綁定到域?qū)ο蟮墓ぷ鳌pringWebMVC:MVC框架是一個全功能的構(gòu)建Web應(yīng)用程序的MVC實(shí)現(xiàn)。通過策略接口,MVC框架變成為高度可配置的,MVC容納了大量視圖技術(shù),其中包括JSP、Velocity、Tiles、iText和POI。Spring框架的功能可以用在任何J2EE服務(wù)器中,大多數(shù)功能也適用于不受管理的環(huán)境。Spring的核心要點(diǎn)是:支持不綁定到特定J2EE服務(wù)的可重用業(yè)務(wù)和數(shù)據(jù)訪問對象。毫無疑問,這樣的對象可以在不同J2EE環(huán)境(Web或EJB)、獨(dú)立應(yīng)用程序、測試環(huán)境之間重用。控制反轉(zhuǎn)模式(也稱作依賴性介入)的基本概念是:不創(chuàng)建對象,但是描述創(chuàng)建它們的方式。在代碼中不直接與對象和服務(wù)連接,但在配置文件中描述哪一個組件需要哪一項(xiàng)服務(wù)。容器(在Spring框架中是IOC容器)負(fù)責(zé)將這些聯(lián)系在一起。在典型的IOC場景中,容器創(chuàng)建了所有對象,并設(shè)置必要的屬性將它們連接在一起,決定什么時間調(diào)用方法。下表列出了IOC的一個實(shí)現(xiàn)模式。類型1服務(wù)需要實(shí)現(xiàn)專門的接口,通過接口,由對象提供這些服務(wù),可以從對象查詢依賴性(例如,需要的附加服務(wù))類型2通過JavaBean的屬性(例如setter方法)分配依賴性類型3依賴性以構(gòu)造函數(shù)的形式提供,不以JavaBean屬性的形式公開Spring框架的IOC容器采用類型2和類型3實(shí)現(xiàn)。面向方面的編程,即AOP,是一種編程技術(shù),它允許程序員對橫切關(guān)注點(diǎn)或橫切典型的職責(zé)分界線的行為(例如日志和事務(wù)管理)進(jìn)行模塊化。AOP的核心構(gòu)造是方面,它將那些影響多個類的行為封裝到可重用的模塊中。AOP和IOC是補(bǔ)充性的技術(shù),它們都運(yùn)用模塊化方式解決企業(yè)應(yīng)用程序開發(fā)中的復(fù)雜問題。在典型的面向?qū)ο箝_發(fā)方式中,可能要將日志記錄語句放在所有方法和Java類中才能實(shí)現(xiàn)日志功能。在AOP方式中,可以反過來將日志服務(wù)模塊化,并以聲明的方式將它們應(yīng)用到需要日志的組件上。當(dāng)然,優(yōu)勢就是Java類不需要知道日志服務(wù)的存在,也不需要考慮相關(guān)的代碼。所以,用SpringAOP編寫的應(yīng)用程序代碼是松散耦合的。AOP的功能完全集成到了Spring事務(wù)管理、日志和其他各種特性的上下文中。Spring設(shè)計(jì)的核心是org.springframework.beans包,它的設(shè)計(jì)目標(biāo)是與JavaBean組件一起使用。這個包通常不是由用戶直接使用,而是由服務(wù)器將其用作其他多數(shù)功能的底層中介。下一個最高級抽象是BeanFactory接口,它是工廠設(shè)計(jì)模式的實(shí)現(xiàn),允許通過名稱創(chuàng)建和檢索對象。BeanFactory也可以管理對象之間的關(guān)系。BeanFactory支持兩個對象模型。單態(tài)模型提供了具有特定名稱的對象的共享實(shí)例,可以在查詢時對其進(jìn)行檢索。Singleton是默認(rèn)的也是最常用的對象模型。對于無狀態(tài)服務(wù)對象很理想。原型模型確保每次檢索都會創(chuàng)建單獨(dú)的對象。在每個用戶都需要自己的對象時,原型模型最適合。bean工廠的概念是Spring作為IOC容器的基礎(chǔ)。IOC將處理事情的責(zé)任從應(yīng)用程序代碼轉(zhuǎn)移到框架。正如我將在下一個示例中演示的那樣,Spring框架使用JavaBean屬性和配置數(shù)據(jù)來指出必須設(shè)置的依賴關(guān)系。2.2.6Hibernate框架Hibernate是目前最流行的ORM框架,其采用非常優(yōu)雅的方式將SQL操作完全包裝成對象化的操作。其作者GavinKing在持久層設(shè)計(jì)上極富經(jīng)驗(yàn),采用非常少的代碼實(shí)現(xiàn)了整個框架,同時完全開放源代碼,即使偶爾遇到無法理解的情況,也可以參照源代碼來理解其在持久層上靈巧而智能的設(shè)計(jì)。目前Hibernate在國內(nèi)的開發(fā)人員相當(dāng)多,Hibernate的文檔也非常豐富,這些都為學(xué)習(xí)Hibernate鋪平了道路,因而Hibernate的學(xué)習(xí)相對簡單一些。下面通過對比來了解Hibernate和傳統(tǒng)JDBC操作數(shù)據(jù)庫持久層之間的差異。當(dāng)前的軟件開發(fā)語言已經(jīng)全面轉(zhuǎn)向面向?qū)ο螅鴶?shù)據(jù)庫系統(tǒng)仍停留在關(guān)系數(shù)據(jù)庫階段。面對復(fù)雜的企業(yè)環(huán)境,同時使用面向?qū)ο笳Z言和關(guān)系數(shù)據(jù)庫是相當(dāng)麻煩的,不但中間的過度難以理解,而且其開發(fā)周期也相當(dāng)長。Hibernate是一個面向Java環(huán)境的對象/關(guān)系數(shù)據(jù)庫映射工具(Object/RelationalMapping),用來把對象模型表示的對象映射到基于SQL的關(guān)系模型數(shù)據(jù)結(jié)構(gòu)中去。Hibernate的目標(biāo)是:釋放開發(fā)者通常的數(shù)據(jù)持久化相關(guān)的變成任務(wù)的95%。對于以數(shù)據(jù)為中心的程序而言,往往在數(shù)據(jù)庫中使用存儲過程來實(shí)現(xiàn)商業(yè)邏輯,Hibernate可能不是最好的解決方案。但對于那些基于Java的中間件應(yīng)用中,設(shè)計(jì)采用面向?qū)ο蟮臉I(yè)務(wù)模型和商業(yè)邏輯時,Hibernate是最有用的。不管怎樣,Hibernate能消除那些針對特定數(shù)據(jù)庫廠商的SQL代碼,并且把結(jié)果集由表格式的形式轉(zhuǎn)換成值對象的形式。Hibernate不僅管理Java類到數(shù)據(jù)庫表的映射(包括Java數(shù)據(jù)類型到SQL數(shù)據(jù)類型的映射),還提供數(shù)據(jù)查詢和獲取數(shù)據(jù)的方法,可以大幅度地減少在開發(fā)時人工使用SQL和JDBC處理數(shù)據(jù)的時間。Hibernate能在眾多的ORM框架中脫穎而出,因?yàn)镠ibernate與其他ORM框架對比具有如下優(yōu)勢。開源和免費(fèi)的License,方便需要是研究源代碼、改寫源代碼并進(jìn)行功能定制。輕量級封裝,避免引入過多復(fù)雜的問題,調(diào)試容易,減輕程序員負(fù)擔(dān)。具有可擴(kuò)展性,API開放。功能不夠用時,可以自己編碼進(jìn)行擴(kuò)展。開發(fā)者活躍,產(chǎn)品有穩(wěn)定的發(fā)展保障。

第三章系統(tǒng)需求分析與前臺設(shè)計(jì)3.1需求分析根據(jù)軟件開發(fā)過程的要求,在技術(shù)實(shí)現(xiàn)可行性確定的基礎(chǔ)上,我們首先要進(jìn)行的是系統(tǒng)流程的分析。需求分析就是描述系統(tǒng)的需求情況。結(jié)合用戶的需求,本模塊是用于服裝企業(yè)的成本管理,對成本信息進(jìn)行添加,刪除,修改以及查詢等一系列的操作。本系統(tǒng)主要應(yīng)有如下要求:網(wǎng)頁風(fēng)格符合企業(yè)員工的特點(diǎn),簡單實(shí)用。符合企業(yè)實(shí)際的成本管理方式。要求完成成本信息相關(guān)的所有基本操作,包括添加、刪除、修改以及查詢等操作。要求能夠上傳與成本相關(guān)的文件,方便以后的查找管理。3.1.1系統(tǒng)前臺簡要設(shè)計(jì)概述該成本管理系統(tǒng)主要是針對服裝企業(yè)的,其成本管理模塊的前臺主要能完成以下功能:在用戶登錄之后,選擇成本管理中的成本明細(xì)維護(hù),能夠看到自己權(quán)限范圍內(nèi)的所有成本信息。用戶可以使用多字段,查詢自己需要查詢的成本信息,并可以點(diǎn)擊查看該成本信息的詳細(xì)內(nèi)容除了查詢功能外,用戶還必須能夠?qū)σ延械某杀拘畔⑦M(jìn)行修改。用戶可以添加新的成本信息。對于添加錯誤的成本信息,可以進(jìn)行對其進(jìn)行刪除操作,但刪除操作可以不單獨(dú)列出一個界面,直接從顯示列表和數(shù)據(jù)庫中刪除即可。圖3-1表示前臺頁面主菜單結(jié)構(gòu)圖:圖3-1前臺頁面主菜單3.1.2系統(tǒng)用例圖圖3-2成本管理模塊用例圖3.2系統(tǒng)設(shè)計(jì)3.2.1系統(tǒng)層次劃分該系統(tǒng)模塊中,模塊系統(tǒng)共分為五層,分別為表現(xiàn)層、控制層、業(yè)務(wù)邏輯層、數(shù)據(jù)訪問層,數(shù)據(jù)層,如圖3-2所示。圖3-3網(wǎng)站模塊分層表現(xiàn)層中,系統(tǒng)主要采用了JSP技術(shù),將Action傳遞過來的數(shù)據(jù)封裝在ActionForm中,進(jìn)行一定的處理之后,再反饋給前臺頁面??刂茖又饕菫榱丝刂茀f(xié)調(diào)系統(tǒng)中各模塊的執(zhí)行流程,在控制層中,Struts中的ActionServlet控制系統(tǒng)流程轉(zhuǎn)向。業(yè)務(wù)邏輯層,主要采用Javabean,來實(shí)現(xiàn)具體系統(tǒng)的業(yè)務(wù)邏輯處理。數(shù)據(jù)訪問層,主要是采用Hibernate持久層方案,通過Hibernate封裝對數(shù)據(jù)層的操作,方便于在不同的數(shù)據(jù)庫系統(tǒng)間移植。Hibernate也采用了面向?qū)ο蟮乃枷雭聿僮鲾?shù)據(jù)庫。數(shù)據(jù)層存放系統(tǒng)中的數(shù)據(jù),本系統(tǒng)采用MySQL數(shù)據(jù)庫。3.2.2數(shù)據(jù)庫設(shè)計(jì)數(shù)據(jù)庫就是存放數(shù)據(jù)的倉庫,即數(shù)據(jù)按照一定的規(guī)律存放在計(jì)算機(jī)中,是信息系統(tǒng)的核心和基礎(chǔ),是信息系統(tǒng)開發(fā)和建設(shè)的重要組成部分,把信息系統(tǒng)中大量的數(shù)據(jù)按一定的模型組織起來,提供存儲、維護(hù)、檢索數(shù)據(jù)的功能,使信息系統(tǒng)可以方便、及時、準(zhǔn)確地從數(shù)據(jù)庫中獲得所需的信息。數(shù)據(jù)庫設(shè)計(jì)是信息資源管理最有效的手段,數(shù)據(jù)庫設(shè)計(jì)就是根據(jù)具體的應(yīng)用環(huán)境,構(gòu)造合理數(shù)據(jù)庫模式,建立數(shù)據(jù)庫邏輯結(jié)構(gòu),有效存儲數(shù)據(jù),滿足用戶實(shí)際需求和系統(tǒng)應(yīng)用處理要求。在動態(tài)網(wǎng)站設(shè)計(jì)中數(shù)據(jù)庫的重要性不言而喻。合理地設(shè)計(jì)數(shù)據(jù)庫結(jié)構(gòu)可以提高系統(tǒng)運(yùn)行的效率。如果設(shè)計(jì)不當(dāng),查詢起來就非常吃力,程序的性能也會受到影響[2]。數(shù)據(jù)庫的設(shè)計(jì)一般主要包括兩個部分:對網(wǎng)站系統(tǒng)的設(shè)計(jì)進(jìn)行需求分析,確定所需要在數(shù)據(jù)庫中保存的信息。確定每個表的字段屬性等數(shù)據(jù)庫信息。根據(jù)系統(tǒng)設(shè)計(jì)和業(yè)務(wù)邏輯分析,與我所做模塊連接比較緊密的數(shù)據(jù)表有:USER表SINGLE_MATERIAL_BILL表SINGLE_MATERIAL_BILL_ITEM表STYLE_COMPONENT表如表3-1所示,該表為USER表結(jié)構(gòu),用于保存登錄用戶的信息。表3-1USER表序號列名數(shù)據(jù)類型長度標(biāo)識主鍵允許空說明1user_idbigint20是是否自增長2COMP_IDbigint20是3emailvarchar255是電子郵箱4faxvarchar255是5moblie_phonevarchar255是6cnamevarchar255是中文名7name_engvarchar255是8phonevarchar255是9remarkvarchar255是備注10statusvarchar255是狀態(tài)11user_personal_idvarchar255是12user_pwdvarchar255是密碼13employeevarchar255是是否為雇員14user_namevarchar255是登錄名15createbybigint20是創(chuàng)建人ID16createDatedatetime是創(chuàng)建日期17expireDatedatetime是到期日期18effectiveDatedatetime是有效日期19addressvarchar255是地址20dept_idbigint20是部門ID21canEditPlanvarchar1否如表3-2所示,該表為SINGLE_MATERIAL_BILL表結(jié)構(gòu),用于保存成本明細(xì)信息,不包括各成本子項(xiàng)明細(xì)信息。表3-2SINGLE_MATERIAL_BILL表序號列名數(shù)據(jù)類型長度主鍵允許空說明1single_material_bill_idbigint20是否自增長2approve_by_idbigint20是審擬人1ID3approve_datedatetime是審擬日期4contact_idbigint20是合同ID5contact_billvarchar255是6createby_idbigint20是創(chuàng)建人ID7create_datedatetime是創(chuàng)建日期8due_datedatetime是交貨日期9nation_idbigint20是外銷地區(qū)ID10single_material_bill_novarchar255是編號11numberdouble是數(shù)量12style_idbigint20是款號13update_datedatetime是修改日期14specification_from_idbigint20是15specification_to_idbigint20是16amountdouble是總額17styleNamevarchar500是款式18imgvarchar100是上傳文件路徑19specification_term1varchar100是規(guī)格項(xiàng)120specification_term2varchar100是規(guī)格項(xiàng)221specification_term3varchar100是規(guī)格項(xiàng)322specification_term4varchar100是規(guī)格項(xiàng)423approve_by_id2bigint20是審擬人2ID24issimplevarchar255是是否為簡單成本管理標(biāo)記25bar_codevarchar255是26comments_shvarchar255是27componentvarchar255是28grammevarchar255是如表3-3所示,該表為SINGLE_MATERIAL_BILL_ITEM表結(jié)構(gòu),用于保存各成本子項(xiàng)明細(xì)信息。表3-3SINGLE_MATERIAL_BILL_ITEM表序號列名數(shù)據(jù)類型長度小數(shù)位主鍵允許空說明1single_material_bill_item_idbigint20是否自增長2cloth_component_idbigint20是3material_idbigint20是材料ID4quantity_per_clothdouble是用料5materialpricedouble是單價6materialamountdouble是金額7materialunitvarchar255是單位8isamountvarchar255是9single_material_bill_idbigint20是10item_indexbigint20是11FK_ONEbigint20是12embroiderdouble153是利潤率13stardatedate是時間14sequencevarchar5是序號15colorgongjiaodouble153是16fullindexvarchar40是17isGongJiaovarchar45是是否為工繳18supplymaterialvarchar45是供貨19spoilvarchar45是損耗20widthvarchar45是門幅21remarkvarchar100是備注如表3-4所示,該表為STYLE_COMPONENT表結(jié)構(gòu),用于保存各成本子項(xiàng)配置信息。表3-4STYLE_COMPONENT表序號列名數(shù)據(jù)類型長度標(biāo)識主鍵允許空說明1style_component_idbigint20是是否自增長2createby_idbigint20是創(chuàng)建人3create_datedatetime是創(chuàng)建日期4descriptionvarchar255是描述5style_component_namevarchar255是成本子項(xiàng)名稱6style_component_novarchar255是成本子項(xiàng)NO7update_datedatetime是更新日期8accessoryvarchar255是9build_invarchar255是10remark_textvarchar4是是否顯示備注3.2.3成本管理模塊時序圖查詢成本信息列表時序圖如圖3-4所示,該圖為查詢成本信息列表時序圖。圖3-4查詢成本信息列表時序圖具體步驟如下:用戶單擊成本維護(hù)界面右側(cè)的查詢按鈕時,Struts的ActionForward通過struts-config.xml的配置轉(zhuǎn)發(fā)至Cost_Ma.jsp頁面。用戶填完新的成本信息后單擊提交按鈕時,Struts會通過struts-config.xml的配置調(diào)用CostDetailAction類的queryMa()方法。CostDetailAction類的queryMa()調(diào)用SingleMaterialProcessImpl類的getSingleMaterialBillsByTerm()方法。調(diào)用SingleMaterialBillDAOImplHibernate類的findSingleMaterialBillByTerm()方法。調(diào)用HibernateTemplate類的find()方法。返回成本信息列表。添加成本信息時序圖如圖3-5所示,該圖為添加成本信息時序圖。圖3-5添加成本信息時序圖具體步驟如下:用戶單擊成本維護(hù)界面右側(cè)的添加按鈕時,Struts的ActionForward通過struts-config.xml的配置轉(zhuǎn)發(fā)至Cost_Add.jsp頁面。用戶填完新的成本信息后單擊提交按鈕時,Struts會通過struts-config.xml的配置調(diào)用CostDetailAction類的submitSingleMaterialBill()方法。CostDetailAction類的submitSingleMaterialBill()調(diào)用SingleMaterialProcessImpl類的createSingleMaterialBill()方法。調(diào)用SingleMaterialBillDAOImplHibernate類的saveSingleMaterialBill()方法。調(diào)用HibernateTemplate類的save()方法。返回“添加成功”信息。修改成本信息列表時序圖如圖3-6所示,該圖為修改成本明細(xì)信息時序圖。圖3-6修改成本明細(xì)信息時序圖具體步驟如下:用戶單擊成本信息列表右側(cè)的編輯按鈕時,Struts的ActionForward通過struts-config.xml的配置轉(zhuǎn)發(fā)至Cost_Add.jsp頁面。用戶將成本信息修改完成后單擊提交按鈕時,Struts會通過struts-config.xml的配置調(diào)用CostDetailAction類的submitSingleMaterialBill()方法。CostDetailAction類的submitSingleMaterialBill()首先調(diào)用SingleMaterialProcessImpl類的dellSingleMaterialBill()方法刪除原先的成本數(shù)據(jù)。調(diào)用SingleMaterialBillDAOImplHibernate類的delSingleMaterialBill()方法。調(diào)用HibernateTemplate類的delete()方法。返回至CostDetailAction類的submitSingleMaterialBill()方法。CostDetailAction類的submitSingleMaterialBill()然后調(diào)用SingleMaterialProcessImpl類的createSingleMaterialBill()方法添加修改后的成本數(shù)據(jù)。調(diào)用SingleMaterialBillDAOImplHibernate類的saveSingleMaterialBill()方法。調(diào)用HibernateTemplate類的save()方法。返回“修改成功”信息。刪除成本信息時序圖如圖3-7所示,該圖為刪除成本信息時序圖。圖3-7刪除成本信息時序圖具體步驟如下:用戶單擊成本維護(hù)界面右側(cè)的刪除按鈕時,Struts的ActionForward通過struts-config.xml的配置轉(zhuǎn)發(fā)至Cost_Ma.jsp頁面。Struts會通過struts-config.xml的配置調(diào)用CostDetailAction類的dell()方法。CostDetailAction類的submitSingleMaterialBill()調(diào)用SingleMaterialProcessImpl類的dellSingleMaterialBill()方法。調(diào)用SingleMaterialBillDAOImplHibernate類的delSingleMaterialBill()方法。調(diào)用HibernateTemplate類的delete()方法。返回“刪除成功”信息。查看成本明細(xì)信息列表時序圖如圖3-8所示,該圖為查看成本明細(xì)信息時序圖。圖3-8查看成本明細(xì)信息時序圖具體步驟如下:用戶單擊成本信息列表上的編號超鏈接時,Struts的ActionForward通過struts-config.xml的配置轉(zhuǎn)發(fā)至Cost_View.jsp頁面。Struts會通過struts-config.xml的配置調(diào)用CostDetailAction類的toView()方法。CostDetailAction類的toView()方法調(diào)用SingleMaterialProcessImpl類的getSingleMaterialBillById()方法。調(diào)用SingleMaterialBillDAOImplHibernate類的getSingleMaterialBillById()方法。調(diào)用HibernateTemplate類的find()方法。查詢數(shù)據(jù)庫,返回成本明細(xì)信息。

第四章系統(tǒng)詳細(xì)設(shè)計(jì)與功能實(shí)現(xiàn)4.1系統(tǒng)項(xiàng)目的文件夾結(jié)構(gòu)在編寫代碼之前,通常先將框架所需要的文件夾先創(chuàng)建出來(例如:創(chuàng)建各個框架層次用到的代碼文件分開存放,如bean、dao等),這樣不但可以方便以后的開發(fā)工作,也可以實(shí)現(xiàn)框架的規(guī)范化。在服飾企業(yè)生產(chǎn)狀況聯(lián)絡(luò)表系統(tǒng)中,設(shè)計(jì)了如圖4.1所示的文件夾結(jié)構(gòu)圖。圖4-1文件夾的架構(gòu)幾個重要的文件夾:(1)bean:用于存放各數(shù)據(jù)表所對應(yīng)的類文件。(2)dao:用于存放各種操作數(shù)據(jù)庫的類及接口文件。(3)exception:存放各種異常文件。(4)resources:存放幾種資源文件便于國際化。(5)service:存放解決業(yè)務(wù)邏輯的類及接口文件。(6)struts:存放控制類Action和ActionForm類文件。(7)util:存放常用的bean文件,便于引用(8)WEB-INF:該目錄用來存儲與Web應(yīng)用程序相關(guān)的元信息。這些資源可以被Web應(yīng)用程序中的Servlet和JSP頁面訪問到。在該目錄下一般存放下面這些內(nèi)容:classes目錄:用來存放Java類文件,包括被編譯后的Servlet文件等。此外,還可以存放一些配置文件,該目錄是Web應(yīng)用程序的上下文類路徑。Java程序在尋找自身引用的其他類文件時,會搜索該目錄下的Java文件。lib目錄:該目錄用來存放Web應(yīng)用程序中需要引用的庫文件,這些庫文件打包為jar文件。該目錄也是Web應(yīng)用程序的上下文類路徑。Java程序在尋找自身引用的其他類文件時也會搜索該目錄。web.xml文件:該文件稱為Web應(yīng)用程序部署描述符,是Web應(yīng)用程序的配置文件,用于在應(yīng)用程序開發(fā)人員、部署人員和集成人員之間傳遞配置信息。Web容器啟動的時候,會使用該文件中的配置內(nèi)容來加載應(yīng)用程序。該文件中可以進(jìn)行如下配置:會話配置、Servlet聲明、Servlet映射、過濾器定義與映射、錯誤頁、標(biāo)記庫映射等。4.2成本管理模塊的具體實(shí)現(xiàn)4.2.1查詢成本信息列表功能的實(shí)現(xiàn)當(dāng)用戶登錄之后,點(diǎn)擊成本管理->成本明細(xì)維護(hù),自動查詢出該登錄用戶曾經(jīng)添加過的所有成本明細(xì)信息列表,分頁顯示每頁顯示50條記錄,如圖4-2所示。圖4-2成本明細(xì)維護(hù)界面用戶可以輸入編號、合同號、外銷地區(qū)、款號、審擬人以及交貨日期這六個查詢條件進(jìn)行查詢。例如輸入交貨日期為2021-05-13,單擊右邊的查詢按鈕,可以查詢出符合條件的成本信息列表。如圖4-3所示。圖4-3查詢成本信息列表具體實(shí)現(xiàn)流程如下:登錄到服飾企業(yè)生產(chǎn)狀況聯(lián)絡(luò)表系統(tǒng)后,點(diǎn)擊成本管理成本明細(xì)維護(hù)超鏈接,其地址為http://localhost:8080/haofeng/costDetailAction.do?method=queryMa,由此,Tomcat會到struts-config.xml配置文件中查找path=”/costDetailAction”的Action。<actionpath="/costDetailAction"name="costDetailForm"scope="request"type="org.springframework.web.struts.DelegatingActionProxy"parameter="method"/>由type=”org.springframework.web.struts.DelegatingActionProxy”可見此處Struts使用了Spring的代理模式。要想查找到對應(yīng)的Action,則必須通過到Spring的配置文件ApplicationContext.xml中查找,我們將成本管理相關(guān)的配置文件寫到config/Cost.xml中,然后在ApplicationContext.xml通過<importresource=”config/Cost.xml”/>引用文件。在Cost.xml中加入配置文件。<beanname="/costDetailAction"class="com.haofeng.struts.cost.action.CostDetailAction"> <propertyname="purchaseBo"><refbean="purchaseBo"/></property><propertyname="singleMaterialProcess"><refbean="singleMaterialProcess"/></property><propertyname="orderProcess"><refbean="orderProcess"/></property></bean>上段配置文件中,我們可以看到,bean下有三個property分別為purchaseBo、singleMaterialProcess、orderProcess。CostDetailAction類中有三個屬性變量purchaseBo、singleMaterialProcess、orderProcess,通過bean標(biāo)簽的子標(biāo)簽property來對這三個屬性變量進(jìn)行注入。注入的值來源于property標(biāo)簽的ref屬性,ref屬性中的值是applicationContext.xml配置文件中的bean的id值,以singleMaterialProcess為例,ref中的值關(guān)聯(lián)如下bean。<beanid="singleMaterialProcess"class="erceptor.TransactionProxyFactoryBean"> <propertyname="transactionManager"><refbean="transactionManager"/></property><propertyname="target"><reflocal="singleMaterialProcessTarget"/></property><propertyname="transactionAttributes"><props><propkey="get*">PROPAGATION_REQUIRED,readOnly</prop><propkey="create*">PROPAGATION_REQUIRED</prop></props></property></bean>在IOC容器的幫助下,就可以實(shí)現(xiàn)松耦合,并且模塊之間是分離的,互相可以共享的。CostDetailAction類中可以直接使用這三個接口,而不需要實(shí)例化他們的實(shí)現(xiàn)類,再去使用它們。CostDetailAction類中,queryMa()方法用于顯示成本信息列表,核心代碼如下:publicfinalActionForwardqueryMa(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse){try{Userps=(User)request.getSession().getAttribute("USER");request.getSession().removeAttribute("consttoQuery");CostDetailFormsingleMaterialBillForm=(CostDetailForm)form;HashMapmap=newHashMap();map.put("singleMaterialBillNo",singleMaterialBillForm.getSingleMaterialBillNo());map.put("nation",singleMaterialBillForm.getNation());map.put("contactNo",singleMaterialBillForm.getContactNo());map.put("dueDate",singleMaterialBillForm.getDueDate());map.put("approveByName",singleMaterialBillForm.getApproveByName());map.put("createByName",""+ps.getId());map.put("styleNo",singleMaterialBillForm.getStyleNo());MyPaginatedListmyPaginatedList=newMyPaginatedList(50,request,0,null);myPaginatedList=singleMaterialProcess.getSingleMaterialBillsByTerm(myPaginatedList,map);request.setAttribute("myPaginatedList",myPaginatedList);}catch(Exceptione){}returnmapping.findForward("toMa");}首先獲取當(dāng)前登錄用戶的User對象,使用getId()方法獲取ID,作為篩選依據(jù),使得查詢出來的結(jié)果為當(dāng)前用戶所創(chuàng)建。將用戶輸入的查詢條件等信息存入到CostDetailForm的對象singleMaterialBillForm中,通過其get()方法獲取查詢條件。新建一個HashMap對象map,將查詢條件存入到map中,用于從數(shù)據(jù)庫中篩選數(shù)據(jù)。查詢數(shù)據(jù)時調(diào)用了singleMaterialProcess的getSingleMaterialBillsByTerm()方法,核心代碼如下:publicMyPaginatedListgetSingleMaterialBillsByTerm(MyPaginatedListmyPaginatedList,HashMapmap)throwsObjectNotFoundException,DataBaseException{Listl=null;l=singleMaterialBillDAO.findSingleMaterialBillByTerm(map,(myPaginatedList.getPageNumber()-1)*myPaginatedList.getObjectsPerPage(),myPaginatedList.getObjectsPerPage());intfullSize=singleMaterialBillDAO.findSingleMaterialBillNumByTerm(map);myPaginatedList.setList(l);myPaginatedList.setFullListSize(fullSize);returnmyPaginatedList;}該函數(shù)主要調(diào)用了兩個方法完成分頁顯示功能,其中之一是singleMaterialBillDAO的findSingleMaterialBillByTerm()用來顯示請求頁的成本信息列表。核心代碼如下:publicListfindSingleMaterialBillByTerm(Mapmap,finalintfirstResult,finalintmaxResults)throwsObjectNotFoundException,DataBaseException{Listl=null;finalStringBufferhql=newStringBuffer(512);hql.append("fromSingleMaterialBillassingleMaterialBill");hql.append("leftjoinfetchsingleMaterialBill.nationn");hql.append("leftjoinfetchsingleMaterialBill.stylestyle");hql.append("leftjoinfetchsingleMaterialBill.approveByapproveBy");hql.append("leftjoinfetchsingleMaterialBill.createBycreateBy");hql.append(getFindTerm(map));l=getHibernateTemplate().executeFind(newHibernateCallback(){publicObjectdoInHibernate(Sessions)throwsHibernateException,SQLException{Queryquery=s.createQuery(hql.toString());query.setFirstResult(firstResult);query.setMaxResults(maxResults);Listlist=query.list();returnlist;}});returnl;}編寫HQL語句,對數(shù)據(jù)庫進(jìn)行查詢,調(diào)用getHibernateTemplate()的executeFind()方法返回成本信息List。函數(shù)中調(diào)用了getFindTerm(map)方法,用于增加Where查詢條件,返回Where子句,部分核心代碼如下:privateStringgetFindTerm(Mapmap){finalStringBufferfindTerm=newStringBuffer(512);findTerm.append("");if(null!=map.get("no")&&!"".equals(map.get("no").toString()))findTerm.append("singleMaterialBill.no='"+map.get("no").toString()+"'");if(null!=map.get("contactNo")&&!"".equals(map.get("contactNo").toString())){if(!"".equals(findTerm.toString())){findTerm.append("and");}findTerm.append("singleMaterialBill.contact.scNolike'%"+map.get("contactNo")+"%'");}if(!"".equals(findTerm.toString())){findTerm.insert(0,"where");}returnfindTerm.toString();}用于完成分頁顯示功能的另外一個方法是singleMaterialBillDAO的findSingleMaterialBillNumByTerm()用來獲取成本信息的總條數(shù)。代碼如下:publicintfindSingleMaterialBillNumByTerm(Mapmap) throwsObjectNotFoundException,DataBaseException{finalStringBufferhql=newStringBuffer(512);hql.append("selectcount(*)fromSingleMaterialBillassingleMaterialBill");hql.append(getFindTerm(map));try{Listl=getHibernateTemplate().find(hql.toString());if(l.size()==0){thrownewObjectNotFoundException("donotfindanysingleMaterialBillacordingtotheterm");}Objecto=(Object)l.get(0);returnInteger.parseInt(o.toString()); }catch(DataAccessExceptione){thrownewDataBaseException("ErrorincreateanewsingleMaterialBillintablesingle_material_bill");}}將查詢出來的結(jié)果放到myPaginatedList分頁列表里,使用request.setAttribute()進(jìn)行保存,用于前臺顯示查詢結(jié)果。顯示列表使用的是分頁列表控件,代

溫馨提示

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

最新文檔

評論

0/150

提交評論