企業(yè)資產(chǎn)管理系統(tǒng)中電子報(bào)表功能的設(shè)計(jì)和實(shí)現(xiàn)畢業(yè)論文_第1頁
企業(yè)資產(chǎn)管理系統(tǒng)中電子報(bào)表功能的設(shè)計(jì)和實(shí)現(xiàn)畢業(yè)論文_第2頁
企業(yè)資產(chǎn)管理系統(tǒng)中電子報(bào)表功能的設(shè)計(jì)和實(shí)現(xiàn)畢業(yè)論文_第3頁
企業(yè)資產(chǎn)管理系統(tǒng)中電子報(bào)表功能的設(shè)計(jì)和實(shí)現(xiàn)畢業(yè)論文_第4頁
企業(yè)資產(chǎn)管理系統(tǒng)中電子報(bào)表功能的設(shè)計(jì)和實(shí)現(xiàn)畢業(yè)論文_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

學(xué)號(hào):________________密級(jí):________________武漢大學(xué)本科畢業(yè)論文SpreadsheetFunctions'DesignAndImplementationInEnterpriseAssetManagement企業(yè)資產(chǎn)管理系統(tǒng)中電子報(bào)表功能的設(shè)計(jì)和實(shí)現(xiàn)院(系)名稱:國(guó)際軟件學(xué)院專業(yè)名稱:軟件工程學(xué)生姓名:周葉勝指導(dǎo)教師:王樹良BACHELOR'SDEGREETHESISOFWUHANUNIVERSITYSpreadsheetFunctions'DesignAndImplementationInEnterpriseAssetManagementCollege:WuHanUniversitySubject:SoftwareEngineeringName:YeshengZhouDirectedby:ShuliangWangJune2008鄭重聲明本人呈交的學(xué)位論文,是在導(dǎo)師的指導(dǎo)下,經(jīng)過小組工程實(shí)踐,進(jìn)行大量研究所取得的成果,所有數(shù)據(jù)、圖片資料真實(shí)可靠。盡我所知,除文中已經(jīng)注明引用的內(nèi)容外,本學(xué)位論文的研究成果不包含他人享有著作權(quán)的內(nèi)容。對(duì)本論文所涉及的研究工作做出貢獻(xiàn)的其他個(gè)人和集體,均已在文中以明確的方式標(biāo)明。本學(xué)位論文的知識(shí)產(chǎn)權(quán)歸屬于培養(yǎng)單位。本人簽名:日期:摘要本論文是基于一個(gè)小組完成的企業(yè)資產(chǎn)管理系統(tǒng)來撰寫,主要討論了實(shí)現(xiàn)這個(gè)系統(tǒng)所用到的Struts、Spring、Hibernate技術(shù),它所涉及到的數(shù)據(jù)庫設(shè)計(jì)。Struts、Spring、Hibernate技術(shù)到底是什么,三種技術(shù)如何集合在一起,數(shù)據(jù)庫到底應(yīng)該如何設(shè)計(jì)等,本文都給出了闡述。本論文的重點(diǎn)是報(bào)表系統(tǒng),也是基于項(xiàng)目所實(shí)現(xiàn)的功能來討論,主要討論了本人設(shè)計(jì)報(bào)表的理念和實(shí)現(xiàn)報(bào)表的原理。報(bào)表設(shè)計(jì)和實(shí)現(xiàn),它與業(yè)務(wù)和用戶的關(guān)系甚密,完全了解業(yè)務(wù)才能設(shè)計(jì)出符合要求的報(bào)表系統(tǒng)。關(guān)鍵詞:Struts技術(shù);Spring技術(shù);Hibernate技術(shù);SSH框架;數(shù)據(jù)庫;報(bào)表:ABSTRACTThispaperiscarriedoutonthebasisoftheEnterpriseAssetManagementsystemwhichisproducedbyourfour-peoplegroup.ThispapermainlyintroducestheStruts,Spring,Hibernateframework.Meanwhile,itgivestheprinceplesabouthowtodesigndatabasebasingonthebusinessyouaretryingtoimplement.Butthepointofthispaperisonthespreadsheet.Howtodesignitandhowtoimplementarethekeysofspreadsheet.Thesekeysshouldbaseontheprogram'susers.Differentcultureordifferenteducationwillaffectyourdesign.Andtheflowofthebusinesswillaffectittoo.Thispapergivedetailsonit.Keywords:Struts;Spring;Hibernate;SSH;database;spreadsheet目錄第1章緒論1.1概述………………………71.2項(xiàng)目技術(shù)構(gòu)架……………71.3項(xiàng)目技術(shù)構(gòu)架……………81.4項(xiàng)目功能簡(jiǎn)介……………81.5論文研究方法……………8第2章技術(shù)簡(jiǎn)介2.1JSP技術(shù)簡(jiǎn)介………………102.2Struts簡(jiǎn)介…………………112.3Spring簡(jiǎn)介…………………132.4Hibernate簡(jiǎn)介……………152.5數(shù)據(jù)庫設(shè)計(jì)介紹……………192.6框架整合與配置…………20第3章報(bào)表設(shè)計(jì)和實(shí)現(xiàn)3.1報(bào)表設(shè)計(jì)……………………223.1.1業(yè)務(wù)流程……………223.1.2報(bào)表與人物角色………243.1.1報(bào)表設(shè)計(jì)………………243.2報(bào)表的實(shí)現(xiàn)…………………253.2.1報(bào)表實(shí)現(xiàn)原理…………263.2.2員工購物報(bào)表實(shí)現(xiàn)……………………283.2.3經(jīng)理報(bào)表實(shí)現(xiàn)…………293.2.4報(bào)表頁面顯示實(shí)現(xiàn)……………………30結(jié)論………………32致謝………………33第1章緒論1.1概述企業(yè)資產(chǎn)管理在我國(guó)企事業(yè)單位的資產(chǎn)管理中是一個(gè)薄弱環(huán)節(jié),也是一個(gè)必須要加強(qiáng)的環(huán)節(jié)。企業(yè)資產(chǎn)的流失、閑置、重復(fù)采購及責(zé)任的不明確等,都導(dǎo)致了企業(yè)資產(chǎn)的嚴(yán)重浪費(fèi)。為了使企業(yè)資產(chǎn)能夠充分有效的利用,必須對(duì)企業(yè)資產(chǎn)進(jìn)行有效的管理。企業(yè)資產(chǎn)管理系統(tǒng)是立足企事業(yè)單位后勤發(fā)展,集數(shù)據(jù)集成、電子報(bào)表、分類匯總、自動(dòng)生成、網(wǎng)絡(luò)傳遞、多極查詢于一體的企業(yè)資產(chǎn)管理系統(tǒng),是與現(xiàn)行住房檔案管理信息系統(tǒng)和企業(yè)資產(chǎn)上報(bào)系統(tǒng)相互支持,配套的智能化技術(shù)平臺(tái),整體上建成運(yùn)作簡(jiǎn)便、管理科學(xué)、效率很高、最終能實(shí)現(xiàn)無紙化辦公品牌服務(wù)窗口。系統(tǒng)為集中采購提供了技術(shù)手段,從資產(chǎn)采購選型開始,提交采購申報(bào),分配到責(zé)任人管理維護(hù)維修,最后的報(bào)廢處理的全過程進(jìn)行管理。記錄資產(chǎn)的各種屬性,記錄資產(chǎn)的變更、報(bào)廢的情況,提供個(gè)人查詢、領(lǐng)導(dǎo)查詢等多級(jí)查詢功能。將資產(chǎn)的登記與財(cái)務(wù)報(bào)賬連接、資產(chǎn)與責(zé)任人掛鉤,并與人事部門連接,實(shí)現(xiàn)動(dòng)態(tài)實(shí)時(shí)的查詢功能,防止企業(yè)資產(chǎn)的流失和浪費(fèi)。系統(tǒng)還提供耗材管理功能,供網(wǎng)上耗材申領(lǐng)和核發(fā),統(tǒng)計(jì)耗材領(lǐng)用情況。1.2項(xiàng)目技術(shù)構(gòu)架由我們小組完成的這個(gè)企業(yè)資產(chǎn)管理系統(tǒng)所用的框架是比較流行的SSH框架,Struts+Spring+Hibernate這3個(gè)框架,Struts我們用的是1.2版本,Spring是2.0版本,Hibernate是3.2的的版本,而我們的數(shù)據(jù)庫使用的是MySQL5.0版本。使用CMMI軟件開發(fā)流程,包括需求分析、系統(tǒng)設(shè)計(jì)、編碼實(shí)現(xiàn)和測(cè)試等。J2EE應(yīng)用開發(fā)技術(shù),應(yīng)用Java語言、JavaScript、XHTML,Eclipse、Tomcat、SVN、Bugzilla等編程環(huán)境和工具;MySQL關(guān)系數(shù)據(jù)庫編程。UML建模語言,需求分析和系統(tǒng)設(shè)計(jì)建模工具,以及有關(guān)的軟件工程方法;總的來說是一個(gè)傳統(tǒng)的基于MVC框架模式的WEB項(xiàng)目的開發(fā)。1.3企業(yè)資產(chǎn)管理系統(tǒng)國(guó)內(nèi)外發(fā)展趨勢(shì)在國(guó)內(nèi)外,企業(yè)資產(chǎn)管理系統(tǒng)是一個(gè)正在蓬勃發(fā)展的新興企業(yè)所必需系統(tǒng),并且越來越多的受到企業(yè)的歡迎和認(rèn)可。但是,由于還沒有健全,就難免會(huì)存在一些問題,且不說企業(yè)資產(chǎn)管理安全等問題,業(yè)務(wù)功能的優(yōu)劣正逐漸成為制約企業(yè)資產(chǎn)管理發(fā)展的重要因素之一。我國(guó)現(xiàn)階段企業(yè)資產(chǎn)管理電子報(bào)表存在的幾大問題:1.資產(chǎn)目錄不詳細(xì)2.資產(chǎn)管理不充分3.資產(chǎn)流動(dòng)不靈活4.系統(tǒng)操作不人性化1.4項(xiàng)目功能簡(jiǎn)介本系統(tǒng)具有的功能1.用戶登陸:包括用戶的登陸,注冊(cè);2.網(wǎng)上超市:包括提供商品的分類瀏覽、查詢及自動(dòng)生成采購申報(bào)表。以及產(chǎn)品信息發(fā)布,項(xiàng)目日志管理,產(chǎn)品報(bào)價(jià)系統(tǒng);3.資產(chǎn)核查:核查子系統(tǒng)的技術(shù)調(diào)研工作,及子系統(tǒng)的實(shí)現(xiàn);4.通用及專用設(shè)備:將專用及通用設(shè)備從購買、維修、處置到最后的報(bào)廢過程進(jìn)行管理。5.車輛管理:將車輛從購買、維修、處置到最后的報(bào)廢過程進(jìn)行管理;6.耗材管理:用戶可通過網(wǎng)上超市提出耗材領(lǐng)用申請(qǐng),管理員可通過分類統(tǒng)計(jì)及查詢功能快速的對(duì)申請(qǐng)進(jìn)行審核,可以有效的避免資產(chǎn)浪費(fèi)。待審核完成后,用戶在領(lǐng)用耗材時(shí),管理員便將其詳細(xì)信息記錄入庫;7.供應(yīng)商管理系統(tǒng):包括集中采購及賬務(wù)報(bào)賬;8.系統(tǒng)維護(hù):包括人員信息維護(hù)、部門維護(hù)、資產(chǎn)編碼維護(hù)及耗材類別維護(hù)。系統(tǒng)的使用者分為員工、總經(jīng)理、部門經(jīng)理和系統(tǒng)管理員,不同的企業(yè)角色在登陸后所進(jìn)行的操作和所看到的頁面是不一樣的1.5論文研究方法獨(dú)立完成以及參加小組討論合作。運(yùn)用所學(xué)過的Java知識(shí)以及MVC框架的有關(guān)技術(shù),先完成自己所負(fù)責(zé)的電子報(bào)表系統(tǒng)模塊,然后將小組各成員的成果整合為一個(gè)完整的項(xiàng)目。第2章技術(shù)簡(jiǎn)介2.1JSP技術(shù)簡(jiǎn)介網(wǎng)頁可以分為動(dòng)態(tài)頁面和靜態(tài)頁面。HTML就是用來寫靜態(tài)頁面的,在靜態(tài)頁面上,你無法和服務(wù)器互動(dòng),只能瀏覽頁面信息。動(dòng)態(tài)頁面就不一樣了,它可以和服務(wù)器端進(jìn)行交互,你所做的事情不僅僅只是瀏覽信息,比如:搜索、發(fā)帖等。JSP技術(shù)是比較流行的用于制作動(dòng)態(tài)頁面的一門技術(shù),它涉及到servlet和靜態(tài)頁面的編寫。首先JSP中有page、request、session、application4個(gè)范圍的分化,因?yàn)閯?dòng)態(tài)變化涉及到頁面的跳轉(zhuǎn)等,在操作中會(huì)有無數(shù)的參數(shù)、屬性的出現(xiàn),那么在與服務(wù)器進(jìn)行信息交互的過程中,你就需要分清參數(shù)、屬性到底是在哪個(gè)范圍里面,并且清楚了解4個(gè)范圍的分界。在每個(gè)范圍里面,都會(huì)有取得和設(shè)定參數(shù)或者屬性的方法。JAVA中都是對(duì)象調(diào)用方法,而JSP中有8個(gè)內(nèi)置對(duì)象:pageContext、request、session、application、out、config、page、exception。設(shè)定屬性的方法是:PublicvoidsetAttribute(Stringname,Objectvalue)獲取屬性的方法是:PublicvoidsetAttribute(Stringname)舉個(gè)簡(jiǎn)單的例子,如:request.setAttribute(username,"zhou")就是在request范圍里面設(shè)置一個(gè)屬性u(píng)sername,它的值是zhourequest.getAttribute(username,"zhou")就是獲取username這個(gè)屬性的值request.getParameter("password")就是獲取頁面中一個(gè)參數(shù)的值。這樣一來,服務(wù)器可以獲得頁面中的任何信息。信息獲得后,需要servlet來處理,所以每個(gè)功能你都需要寫一個(gè)相應(yīng)的servlet來處理,然后將servlet添加到頁面中來實(shí)現(xiàn)各種功能,比如:跳轉(zhuǎn)頁面、根據(jù)你的搜索顯示結(jié)果等等。簡(jiǎn)單來講,將servlet和靜態(tài)頁面結(jié)合就是動(dòng)態(tài)頁面。編寫servlet是最主要的,它決定你的功能,而靜態(tài)頁面主要影響視覺效果,也是很重要的。客戶所了解的就是能不能用,而第一印象是界面是否符合要求,所以靜態(tài)頁面的設(shè)計(jì)也很重要。這2個(gè)方面都做好了,JSP技術(shù)也就基本掌握到了。2.2.Struts簡(jiǎn)介Struts是一個(gè)為開發(fā)基于模型(Model)-視圖(View)-控制器(Controller)(MVC)模式的應(yīng)用架構(gòu)的開源框架,是利用JavaServlet和JSP構(gòu)建Web應(yīng)用的一項(xiàng)非常有用的技術(shù)。由于Struts能充分滿足應(yīng)用開發(fā)的需求,簡(jiǎn)單易用,敏捷迅速,因而吸引了眾多的開發(fā)人員的關(guān)注。

首先事件是指從客戶端頁面(瀏覽器)由用戶操作觸發(fā)的事件,Struts使用Action來接受瀏覽器表單提交的事件,這里使用了Command模式,每個(gè)繼承Action的子類都必須實(shí)現(xiàn)一個(gè)方法execute。

struts重要的表單對(duì)象ActionForm是一種對(duì)象,它代表了一種應(yīng)用,這個(gè)對(duì)象中至少包含幾個(gè)字段,這些字段是Jsp頁面表單中的input字段,因?yàn)橐粋€(gè)表單對(duì)應(yīng)一個(gè)事件,所以,當(dāng)我們需要將事件粒度細(xì)化到表單中這些字段時(shí),也就是說,一個(gè)字段對(duì)應(yīng)一個(gè)事件時(shí),單純使用Struts就不太可能,當(dāng)然通過結(jié)合JavaScript也是可以轉(zhuǎn)彎實(shí)現(xiàn)的。

Struts是一個(gè)基于SunJ2EE平臺(tái)的MVC框架,主要是采用Servlet和JSP技術(shù)來實(shí)現(xiàn)的。Struts把Servlet、JSP、自定義標(biāo)簽和信息資源(messageresources)整合到一個(gè)統(tǒng)一的框架中,開發(fā)人員利用其進(jìn)行開發(fā)時(shí)不用再自己編碼實(shí)現(xiàn)全套MVC模式,極大的節(jié)省了時(shí)間,所以說Struts是一個(gè)非常不錯(cuò)的應(yīng)用框架。

Struts框架可分為以下四個(gè)主要部分:

1、模型(Model),本質(zhì)上來說在Struts中Model是一個(gè)Action類(這個(gè)會(huì)在后面詳細(xì)討論),開發(fā)者通過其實(shí)現(xiàn)商業(yè)邏輯,同時(shí)用戶請(qǐng)求通過控制器(Controller)向Action的轉(zhuǎn)發(fā)過程是基于由struts-

config.xml文件描述的配置信息的。

2、視圖(View),View是由與控制器Servlet配合工作的一整套JSP定制標(biāo)簽庫構(gòu)成,利用她們我們可以快速建立應(yīng)用系統(tǒng)的界面。

3、控制器(Controller),本質(zhì)上是一個(gè)Servlet,將客戶端請(qǐng)求轉(zhuǎn)發(fā)到相應(yīng)的Action類。

4、一堆用來做XML文件解析的工具包,Struts是用XML來描述如何自動(dòng)產(chǎn)生一些JavaBean的屬性的,此外Struts還利用XML來描述在國(guó)際化應(yīng)用中的用戶提示信息的(這樣一來就實(shí)現(xiàn)了應(yīng)用系統(tǒng)的多語言支持)。使用Struts時(shí),在搭建好環(huán)境后,你所做的事情是:a.編寫FORM;b.編寫ACTION;c.編寫JSP頁面;d.改寫Struts的配置文件。ACTION是用來實(shí)現(xiàn)功能的,就是控制器。FORM是用來傳遞信息的,它的數(shù)據(jù)來自客戶發(fā)出的請(qǐng)求。Struts的原理和流程大概樣的:讀取配置,總控制器ACTIONSERVLET讀取Struts的配置文件,為各個(gè)模塊初始化對(duì)象。用戶發(fā)出HTTP請(qǐng)求,同時(shí)請(qǐng)求的數(shù)據(jù)會(huì)以表單或者URL的形式傳送到服務(wù)器;填充FORM,先將FORM實(shí)例化,再將客戶請(qǐng)求的數(shù)據(jù)填充相應(yīng)的FORM中的成員對(duì)象,保存;將FORM轉(zhuǎn)發(fā)到相應(yīng)的ACTION中去;處理業(yè)務(wù),然后返回一個(gè)ACTIONFORWARD對(duì)象;返回響應(yīng),返回的對(duì)象可能對(duì)用一個(gè)JSP頁面也可能是一個(gè)ACTION;查找響應(yīng),查找配置文件來找到對(duì)象對(duì)應(yīng)的是哪個(gè)頁面或者哪個(gè)ACTION;響應(yīng)用戶,將對(duì)象呈現(xiàn)給用戶。FORM就是你所用到的一個(gè)表寫成一個(gè)類,表中的參數(shù)就是類中的成員變量。它的工作原理大概是這樣的,每次你調(diào)用一個(gè)ACTION,它就會(huì)查找ACTION對(duì)應(yīng)的FORM,如果在scope(request/application)里存在這個(gè)FROM,它就會(huì)重用。如果沒有,它就會(huì)實(shí)例化出一個(gè),用提交給服務(wù)器的數(shù)據(jù)來填充這個(gè)對(duì)象,然后由ACTION來進(jìn)行相應(yīng)的處理。而ACTION就是負(fù)責(zé)業(yè)務(wù)邏輯處理的,類似于JSP中的servlet,,所以寫好FORM,寫好ACTION,配置好配置文件,就能使用Struts框架了。2.3Spring簡(jiǎn)介Spring是一個(gè)開源框架,目前在開源社區(qū)的人氣很旺,被認(rèn)為是最有前途的開源框架之一。她是由RodJohnson創(chuàng)建的,她的誕生是為了簡(jiǎn)化企業(yè)級(jí)系統(tǒng)的開發(fā)。說道Spring就不得不說EJB,因?yàn)镾pring在某種意義上是EJB的替代品,她是一種輕量級(jí)的容器。用過EJB的人都知道EJB很復(fù)雜,為了一個(gè)簡(jiǎn)單的功能你不得不編寫多個(gè)Java文件和部署文件,他是一種重量級(jí)的容器。也許你不了解EJB,你可能對(duì)“輕(重)量級(jí)”和“容器”比較陌生,那么這里我簡(jiǎn)單介紹一下。Spring的初步了解如下是Spring框架圖:組成Spring框架的每個(gè)模塊(或組件)都可以單獨(dú)存在,或者與其他一個(gè)或多個(gè)模塊聯(lián)合實(shí)現(xiàn)。每個(gè)模塊的功能如下:核心容器:核心容器提供Spring框架的基本功能。核心容器的主要組件是BeanFactory,它是工廠模式的實(shí)現(xiàn)。BeanFactory使用控制反轉(zhuǎn)(IOC)模式將應(yīng)用程序的配置和依賴性規(guī)范與實(shí)際的應(yīng)用程序代碼分開。Spring上下文:Spring上下文是一個(gè)配置文件,向Spring框架提供上下文信息。Spring上下文包括企業(yè)服務(wù),例如JNDI、EJB、電子郵件、國(guó)際化、校驗(yàn)和調(diào)度功能。SpringAOP:通過配置管理特性,SpringAOP模塊直接將面向方面的編程功能集成到了Spring框架中。所以,可以很容易地使Spring框架管理的任何對(duì)象支持AOP。SpringAOP模塊為基于Spring的應(yīng)用程序中的對(duì)象提供了事務(wù)管理服務(wù)。通過使用SpringAOP,不用依賴EJB組件,就可以將聲明性事務(wù)管理集成到應(yīng)用程序中。SpringDAO:JDBCDAO抽象層提供了有意義的異常層次結(jié)構(gòu),可用該結(jié)構(gòu)來管理異常處理和不同數(shù)據(jù)庫供應(yīng)商拋出的錯(cuò)誤消息。異常層次結(jié)構(gòu)簡(jiǎn)化了錯(cuò)誤處理,并且極大地降低了需要編寫的異常代碼數(shù)量(例如打開和關(guān)閉連接)。SpringDAO的面向JDBC的異常遵從通用的DAO異常層次結(jié)構(gòu)。SpringORM:Spring框架插入了若干個(gè)ORM框架,從而提供了ORM的對(duì)象關(guān)系工具,其中包括JDO、Hibernate和iBatisSQLMap。所有這些都遵從Spring的通用事務(wù)和DAO異常層次結(jié)構(gòu)。SpringWeb模塊:Web上下文模塊建立在應(yīng)用程序上下文模塊之上,為基于Web的應(yīng)用程序提供了上下文。所以,Spring框架支持與JakartaStruts的集成。Web模塊還簡(jiǎn)化了處理多部分請(qǐng)求以及將請(qǐng)求參數(shù)綁定到域?qū)ο蟮墓ぷ?。SpringMVC框架:MVC框架是一個(gè)全功能的構(gòu)建Web應(yīng)用程序的MVC實(shí)現(xiàn)。通過策略接口,MVC框架變成為高度可配置的,MVC容納了大量視圖技術(shù),其中包括JSP、Velocity、Tiles、iText和POI。大家提到Spring時(shí),就會(huì)想到“容器”。“容器”,這個(gè)概念困擾我好久。從學(xué)習(xí)Tomcat開始就一直對(duì)此感到困惑。感性的來講,容器就是可以用來裝東西的物品。那么在編程領(lǐng)域就是指用來裝對(duì)象(OO的思想,如果你連OO都不了解,建議你去學(xué)習(xí)OO先)的對(duì)象。然而這個(gè)對(duì)象比較特別,它不僅要容納其他對(duì)象,還要維護(hù)各個(gè)對(duì)象之間的關(guān)系。所謂“重量級(jí)”是相對(duì)于“輕量級(jí)”來講的,也可以說“輕量級(jí)”是相對(duì)于重量級(jí)來講的。在Spring出現(xiàn)之前,企業(yè)級(jí)開發(fā)一般都采用EJB,因?yàn)樗峁┑氖聞?wù)管理,聲明式事務(wù)支持,持久化,分布計(jì)算等等都“簡(jiǎn)化”了企業(yè)級(jí)應(yīng)用的開發(fā)。我這里的“簡(jiǎn)化”打了雙引號(hào),因?yàn)檫@是相對(duì)的。重量級(jí)容器是一種入侵式的,也就是說你要用EJB提供的功能就必須在你的代碼中體現(xiàn)出來你使用的是EJB,比如繼承一個(gè)接口,聲明一個(gè)成員變量。這樣就把你的代碼綁定在EJB技術(shù)上了,而且EJB需要JBOSS這樣的容器支持,所以稱之為“重量級(jí)”。

相對(duì)而言“輕量級(jí)”就是非入侵式的,用Spring開發(fā)的系統(tǒng)中的類不需要依賴Spring中的類,不需要容器支持(當(dāng)然Spring本身是一個(gè)容器),而且Spring的大小和運(yùn)行開支都很微量。一般來說,如果系統(tǒng)不需要分布計(jì)算或者聲明式事務(wù)支持那么Spring是一個(gè)更好的選擇。B.核心概念在我看來Spring的核心就是兩個(gè)概念,反向控制(IoC),面向切面編程(AOP)。還有一個(gè)相關(guān)的概念是POJO,我也會(huì)略帶介紹。

1、POJO

我所看到過的POJO全稱有兩個(gè),PlainOrdinaryJavaObject,PlainOldJavaObject,兩個(gè)差不多,意思都是普通的Java類,所以也不用去管誰對(duì)誰錯(cuò)。POJO可以看做是簡(jiǎn)單的JavaBean(具有一系列Getter,Setter方法的類)。嚴(yán)格區(qū)分這里面的概念沒有太大意義,了解一下就行。

2、IoC

IoC的全稱是InversionofControl,中文翻譯反向控制或者逆向控制。這里的反向是相對(duì)EJB來講的。EJB使用JNDI來查找需要的對(duì)象,是主動(dòng)的,而Spring是把依賴的對(duì)象注入給相應(yīng)的類(這里涉及到另外一個(gè)概念“依賴注入”,稍后解釋),是被動(dòng)的,所以稱之為“反向”。3.切面編程(AOP)切面編程就類似于動(dòng)態(tài)代理,比如你寫了很多方法,在使用這些方法前需要做很多相同的操作,那樣你必須在每個(gè)方法前加上很多很多相同的代碼,那樣你的代碼會(huì)看起來很冗長(zhǎng),而且寫起來很會(huì)很讓人絕望。切面編程(AOP)技術(shù)就能大大的減少你的工作量。AOP技術(shù)涉及到的概念有:aspect,就哪些你要重復(fù)在其他方法前或后或中間執(zhí)行的方法;Pointcut,就是聲明是哪些方法會(huì)被插入aspect;c.Advice,就是聲明在pointcut之前還是之后執(zhí)行;在定義好這三點(diǎn),你就能實(shí)現(xiàn)AOP技術(shù)了。2.4Hibernate簡(jiǎn)介報(bào)表實(shí)現(xiàn)和數(shù)據(jù)庫的關(guān)系很密切,對(duì)Hibernate的介紹會(huì)稍為的全面點(diǎn)。Hibernate是一個(gè)免費(fèi)的開源Java包,它使得與關(guān)系數(shù)據(jù)庫打交道變得十分輕松,就像您的數(shù)據(jù)庫中包含每天使用的普通Java對(duì)象一樣,同時(shí)不必考慮如何把它們從神秘的數(shù)據(jù)庫表中取出(或放回到數(shù)據(jù)庫表中)。它解放了您,使您可以專注于應(yīng)用程序的對(duì)象和功能,而不必?fù)?dān)心如何保存它們或稍后如何找到它們。

本文討論以下內(nèi)容:

歷史與背景

大多數(shù)應(yīng)用程序都需要處理數(shù)據(jù)。Java應(yīng)用程序運(yùn)行時(shí),往往把數(shù)據(jù)封裝為相互連接的對(duì)象網(wǎng)絡(luò),但是當(dāng)程序結(jié)束時(shí),這些對(duì)象就會(huì)消失在一團(tuán)邏輯中,所以需要有一些保存它們的方法。有時(shí)候,甚至在編寫應(yīng)用程序之前,數(shù)據(jù)就已經(jīng)存在了,所以需要有讀入它們和將其表示為對(duì)象的方法。手動(dòng)編寫代碼來執(zhí)行這些任務(wù)不僅單調(diào)乏味、易于出錯(cuò),而且會(huì)占用整個(gè)應(yīng)用程序的很大一部分開發(fā)工作量。

優(yōu)秀的面向?qū)ο箝_發(fā)人員厭倦了這種重復(fù)性的勞動(dòng),他們開始采用通常的“積極”偷懶做法,即,創(chuàng)建工具,使整個(gè)過程自動(dòng)化。對(duì)于關(guān)系數(shù)據(jù)庫來說,這種努力的最大成果就是對(duì)象/關(guān)系映射(ORM)工具。

這類工具有很多,從昂貴的商業(yè)產(chǎn)品到內(nèi)置于J2EE中的EJB標(biāo)準(zhǔn)。然而,在很多情況下,這些工具具有自身的復(fù)雜性,使得開發(fā)人員必須學(xué)習(xí)使用它們的詳細(xì)規(guī)則,并修改組成應(yīng)用程序的類以滿足映射系統(tǒng)的需要。由于這些工具為應(yīng)付更加嚴(yán)格和復(fù)雜的企業(yè)需求而不斷發(fā)展,于是在比較簡(jiǎn)單和常見的場(chǎng)景中,使用它們所面臨的復(fù)雜性反而蓋過了所能獲得的好處。這引起了一場(chǎng)革命,促進(jìn)了輕量級(jí)解決方案的出現(xiàn),而Hibernate就是這樣的一個(gè)例子。

Hibernate的工作方式

Hibernate不會(huì)對(duì)您造成妨礙,也不會(huì)強(qiáng)迫您修改對(duì)象的行為方式。它們不需要實(shí)現(xiàn)任何不可思議的接口以便能夠持續(xù)存在。惟一需要做的就是創(chuàng)建一份XML“映射文檔”,告訴Hibernate您希望能夠保存在數(shù)據(jù)庫中的類,以及它們?nèi)绾侮P(guān)聯(lián)到該數(shù)據(jù)庫中的表和列,然后就可以要求它以對(duì)象的形式獲取數(shù)據(jù),或者把對(duì)象保存為數(shù)據(jù)。與其他解決方案相比,它幾乎已經(jīng)很完美了。

運(yùn)行時(shí),Hibernate讀取映射文檔,然后動(dòng)態(tài)構(gòu)建Java類,以便管理數(shù)據(jù)庫與Java之間的轉(zhuǎn)換。在Hibernate中有一個(gè)簡(jiǎn)單而直觀的API,用于對(duì)數(shù)據(jù)庫所表示的對(duì)象執(zhí)行查詢。要修改這些對(duì)象,(一般情況下)只需在程序中與它們進(jìn)行交互,然后告訴Hibernate保存修改即可。類似地,創(chuàng)建新對(duì)象也很簡(jiǎn)單;只需以常規(guī)方式創(chuàng)建它們,然后告訴Hibernate有關(guān)它們的信息,這樣就能在數(shù)據(jù)庫中保存它們。

HibernateAPI學(xué)習(xí)起來很簡(jiǎn)單,而且它與程序流的交互相當(dāng)自然。在適當(dāng)?shù)奈恢谜{(diào)用它,就可以達(dá)成目的。它帶來了很多自動(dòng)化和代碼節(jié)省方面的好處,所以花一點(diǎn)時(shí)間學(xué)習(xí)它是值得的。而且還可以獲得另一個(gè)好處,即代碼不用關(guān)心要使用的數(shù)據(jù)庫種類(否則的話甚至必須知道)。我所在的公司就曾有過在開發(fā)過程后期被迫更換數(shù)據(jù)庫廠商的經(jīng)歷。這會(huì)造成巨大的災(zāi)難,但是借助于Hibernate,只需要簡(jiǎn)單地修改Hibernate配置文件即可。

這里的討論假定您已經(jīng)通過創(chuàng)建Hibernate映射文檔,建立了一個(gè)關(guān)系數(shù)據(jù)庫,并且擁有要映射的Java類。有一個(gè)Hibernate“工具集”可在編譯時(shí)使用,以支持不同的工作流。例如,如果您已經(jīng)擁有Java類和映射文檔,Hibernate可以為您創(chuàng)建(或更新)必需的數(shù)據(jù)庫表?;蛘撸瑑H僅從映射文檔開始,Hibernate也能夠生成數(shù)據(jù)類?;蛘?,它可以反向設(shè)計(jì)您的數(shù)據(jù)庫和類,從而擬定映射文檔。還有一些用于Eclipse的alpha插件,它們可以在IDE中提供智能的編輯支持以及對(duì)這些工具的圖形訪問。

如果您使用的是Hibernate2環(huán)境,這些工具鮮有提供,但是存在可用的第三方工具。

使用Hibernate的場(chǎng)合

既然Hibernate看起來如此靈活好用,為什么還要使用其他的工具呢?下面有一些場(chǎng)景,可以幫助您做出判斷(或許通過提供一些比較和上下文,可以有助于鑒別非常適用Hibernate的場(chǎng)合)。

如果應(yīng)用對(duì)于數(shù)據(jù)存儲(chǔ)的需要十分簡(jiǎn)單——例如,您只想管理一組用戶優(yōu)先選擇——您根本不需要數(shù)據(jù)庫,更不用說一個(gè)優(yōu)秀的對(duì)象-關(guān)系映射系統(tǒng)了(即使它也如Hibernate這般易于使用)!從Java1.4開始,有一個(gè)標(biāo)準(zhǔn)的JavaPreferencesAPI可以很好地發(fā)揮這個(gè)作用。(在ONJava文章中可以找到有關(guān)PreferencesAPI的更多信息。)

對(duì)于熟悉使用關(guān)系數(shù)據(jù)庫和了解如何執(zhí)行完美的SQL查詢與企業(yè)數(shù)據(jù)庫交互的人來說,Hibernate似乎有些礙手礙腳,這就像帶有動(dòng)力和自動(dòng)排擋的快艇車會(huì)使注重性能的賽車駕駛員不耐煩一樣。如果您屬于這種人,如果您所在的項(xiàng)目團(tuán)隊(duì)擁有一個(gè)強(qiáng)大的DBA,或者有一些存儲(chǔ)過程要處理,您可能想研究一下iBATIS。Hibernate的創(chuàng)建者本身就把iBATIS當(dāng)作是另一種有趣的選擇。我對(duì)它很有興趣,因?yàn)槲覀冊(cè)鵀橐粋€(gè)電子商務(wù)站點(diǎn)開發(fā)了一個(gè)類似的系統(tǒng)(其功能更為強(qiáng)大),而且從那時(shí)到現(xiàn)在,我們已經(jīng)在其他環(huán)境中使用過它,盡管在發(fā)現(xiàn)Hibernate之后,在新項(xiàng)目中我們通常更喜歡使用Hibernate。您可以認(rèn)為,以SQL為中心的解決方案(比如iBATIS)是“反向的”對(duì)象/關(guān)系映射工具,而Hibernate是一個(gè)更為傳統(tǒng)的ORM。

當(dāng)然,還有其他的外部原因會(huì)導(dǎo)致采用另外的方法。比如,在一個(gè)企業(yè)環(huán)境中,必須使用成熟的EJB架構(gòu)(或者其他的一些非普通對(duì)象映射系統(tǒng))??梢詾樘峁┳约旱臄?shù)據(jù)存儲(chǔ)工具的平臺(tái)量身定做代碼,比如MacOSX'sCoreData。使用的可能是像XMLDTD這樣的存儲(chǔ)規(guī)范,而它根本不涉及關(guān)系數(shù)據(jù)庫。

但是,如果您使用的是富對(duì)象模型,而且想要靈活、輕松且高效地保存它(無論您是否正要開始或已經(jīng)決定使用關(guān)系數(shù)據(jù)庫,只要這是一個(gè)選擇——而且存在可用的優(yōu)秀免費(fèi)數(shù)據(jù)庫,比如MySQL,或可嵌入Java的HSQLDB,它就應(yīng)該始終是一個(gè)選擇),那么Hibernate很可能就是您理想的選擇。您可能會(huì)驚訝于節(jié)省的時(shí)間之多,以及您將會(huì)多么地喜歡使用它。

經(jīng)過一個(gè)月的實(shí)踐,Hibernate技術(shù)需要為每張表寫一個(gè)對(duì)應(yīng)的類,類中的成員變量是表中每個(gè)字段對(duì)應(yīng)的類型和名字。然后,每個(gè)對(duì)應(yīng)的類,都需要寫出相應(yīng)的DAO,就是增刪改查的方法。這個(gè)DAO方法和JDBC中的DAO方法其實(shí)差不對(duì),hibernate的方便之處是它能直接保存一個(gè)對(duì)象進(jìn)入數(shù)據(jù)庫,那個(gè)對(duì)象就會(huì)成為數(shù)據(jù)庫中的一條記錄,而不用像JDBC那樣一個(gè)字段一個(gè)字段的賦值,然后保存。Hibernate的所有操作都是針對(duì)對(duì)象的,而不是針對(duì)表中的某一個(gè)字段的,操作簡(jiǎn)介方便的,深受歡迎。在Hibernate出現(xiàn)的對(duì)象有三種狀態(tài):1.瞬時(shí),就是一個(gè)對(duì)象剛剛new出來,還沒有關(guān)聯(lián)session;2.持久,就是這個(gè)對(duì)象與session關(guān)聯(lián),與數(shù)據(jù)庫的數(shù)據(jù)有對(duì)應(yīng),session沒有關(guān)閉,但是事務(wù)沒有被提交。一旦事務(wù)提交后,它就會(huì)對(duì)數(shù)據(jù)庫產(chǎn)生影響;3.托管,session已經(jīng)關(guān)閉,數(shù)據(jù)庫中沒數(shù)據(jù)與之對(duì)應(yīng),對(duì)它進(jìn)行改動(dòng)是不會(huì)影響到數(shù)據(jù)庫的。Hibernate的核心接口一共有5個(gè),分別為:Session、SessionFactory、Transaction、Query和Configuration。這5個(gè)核心接口在任何開發(fā)中都會(huì)用到。通過這些接口,不僅可以對(duì)持久化對(duì)象進(jìn)行存取,還能夠進(jìn)行事務(wù)控制。下面對(duì)這五個(gè)核心接口分別加以介紹。

·Session接口:Session接口負(fù)責(zé)執(zhí)行被持久化對(duì)象的CRUD操作(CRUD的任務(wù)是完成與數(shù)據(jù)庫的交流,包含了很多常見的SQL語句。)。但需要注意的是Session對(duì)象是非線程安全的。同時(shí),Hibernate的session不同于JSP應(yīng)用中的HttpSession。這里當(dāng)使用session這個(gè)術(shù)語時(shí),其實(shí)指的是Hibernate中的session,而以后會(huì)將HttpSesion對(duì)象稱為用戶session。

·SessionFactory接口:SessionFactory接口負(fù)責(zé)初始化Hibernate。它充當(dāng)數(shù)據(jù)存儲(chǔ)源的代理,并負(fù)責(zé)創(chuàng)建Session對(duì)象。這里用到了工廠模式。需要注意的是SessionFactory并不是輕量級(jí)的,因?yàn)橐话闱闆r下,一個(gè)項(xiàng)目通常只需要一個(gè)SessionFactory就夠,當(dāng)需要操作多個(gè)數(shù)據(jù)庫時(shí),可以為每個(gè)數(shù)據(jù)庫指定一個(gè)SessionFactory。

·Configuration接口:Configuration接口負(fù)責(zé)配置并啟動(dòng)Hibernate,創(chuàng)建SessionFactory對(duì)象。在Hibernate的啟動(dòng)的過程中,Configuration類的實(shí)例首先定位映射文檔位置、讀取配置,然后創(chuàng)建SessionFactory對(duì)象。

·Transaction接口:Transaction接口負(fù)責(zé)事務(wù)相關(guān)的操作。它是可選的,開發(fā)人員也可以設(shè)計(jì)編寫自己的底層事務(wù)處理代碼。

·Query和Criteria接口:Query和Criteria接口負(fù)責(zé)執(zhí)行各種數(shù)據(jù)庫查詢。它可以使用HQL語言或SQL語句兩種表達(dá)方式。在熟悉了解三種狀態(tài)后,你所做的事情就是明確你的業(yè)務(wù)。開始編寫接口,為每個(gè)接口寫實(shí)現(xiàn)類。基本編碼流程是:首先,初始化Hibernate,并創(chuàng)建SessionFactory,從中取得Session,開始事務(wù),執(zhí)行數(shù)據(jù)庫操作,關(guān)閉事務(wù),關(guān)閉Session。2.5數(shù)據(jù)庫設(shè)計(jì)介紹我們使用的是MSql數(shù)據(jù)庫,它是小型數(shù)據(jù)庫,適合小型工程。任何數(shù)據(jù)庫的構(gòu)建都是需要根據(jù)你的業(yè)務(wù)要求來實(shí)現(xiàn)的,比如登陸,看起來就是一個(gè)用戶和密碼而已,但是任何一個(gè)項(xiàng)目并不是這樣簡(jiǎn)單的。業(yè)務(wù)之間的聯(lián)系時(shí)非常密切的。不同的用戶,權(quán)限不一樣,進(jìn)入后的操作是不一樣的。在設(shè)計(jì)數(shù)據(jù)庫的時(shí)候,你必須經(jīng)過細(xì)致的考慮,才能決定庫中到底需要什么表,每張表需要哪些字段,以及表和表之間的關(guān)系來合理的完成你的業(yè)務(wù)流程。下面是我們工程中涉及到的數(shù)據(jù)表:名稱描述EMPLOYEE_INFO員工信息表DEPARTMENT_INFO部門信息表MATERIAL_INFO耗材信息表HOUSE_INFO房產(chǎn)信息表EQUIPMENT_INFO通用及專用設(shè)備信息表VEHICLE_INFO車輛信息表PURCHASING_INFO網(wǎng)上購物信息表MAINTAIN_INFO維護(hù)信息表CODE_INFO分類信息表員工信息表:它是用來描述企業(yè)中員工信息的,其中比較重要的字段是名字、密碼、職位、所在部門,它們和業(yè)務(wù)流程關(guān)系甚密;部門信息表:記錄企業(yè)中各個(gè)部門的名稱;耗材表:記錄企業(yè)中日常所需的各種耗材使用、儲(chǔ)備情況;房產(chǎn)表:記錄企業(yè)員工的住宿情況和企業(yè)的房產(chǎn)使用情況;通用及專用設(shè)備信息表:記錄企業(yè)中設(shè)備的借用狀況;車輛信息表:記錄企業(yè)中車輛的借用狀況;網(wǎng)上購物信息表:用來記錄員工購物申請(qǐng);維護(hù)信息表:記錄企業(yè)中所有車輛、設(shè)備的維修、遺失、報(bào)廢狀況;分類信息表:記錄企業(yè)中每樣物品的所屬類型;對(duì)與表之間的關(guān)系,它們主要通過user這個(gè)字段聯(lián)系起來,user有部門情況、物品的使用也有使用者等等,這樣通過user所有的表基本都聯(lián)系在一起。數(shù)據(jù)庫中的表不是越多越好,字段不是越多越好,一般表的設(shè)計(jì)要做到第三范式就行。設(shè)計(jì)者在設(shè)計(jì)出數(shù)據(jù)庫后,需要插入各種數(shù)據(jù),插入記錄時(shí),必須要先插入主表中的數(shù)據(jù),再插入其他表中的記錄。2.6框架整合與配置這個(gè)項(xiàng)目使用了SSH框架,Struts,Spring,Hibernate三種技術(shù)不是簡(jiǎn)單的加在一起,而且在三種框架融合后,你的使用和分別單獨(dú)使用時(shí)完全不一樣的。Spring和Hibernate結(jié)合后,你只要繼承HibernateDaoSupport這個(gè)類,你在使用時(shí)數(shù)據(jù)庫時(shí),就無需手動(dòng)去獲取Hibernate中的Session,不用手寫開啟事務(wù),關(guān)閉事務(wù),它會(huì)提供一個(gè)HibernateTemplate,直接使用就能對(duì)數(shù)據(jù)庫操作,而且他會(huì)自動(dòng)的關(guān)閉Session和事務(wù)。當(dāng)然,你在使用這些簡(jiǎn)單的編寫程序的背后,你需要配置一大堆的配置文件;Spring中,你需要為SessionFactory配置bean,為事務(wù)配置等;每個(gè)你將會(huì)在SSH框架中使用的類和方法,必須在Spring中配置;對(duì)于struts,你所有的action都必須寫好配置,而Hibernate方面,你所要做的事情就是配置好數(shù)據(jù)庫連接,添加任何類,基本與Hibernate配置無關(guān)。第3章報(bào)表設(shè)計(jì)和實(shí)現(xiàn)3.1報(bào)表設(shè)計(jì)3.1.1業(yè)務(wù)流程幾乎在整個(gè)業(yè)務(wù)的每個(gè)流程中都涉及到了報(bào),我會(huì)通過介紹其中最復(fù)雜的員工購物流程來闡述我的設(shè)計(jì)理念和實(shí)現(xiàn)理念。其流程圖如下:可能出現(xiàn)的流程有:提交采購申請(qǐng)—選擇商品—部門經(jīng)理批準(zhǔn)但超過預(yù)算—總經(jīng)理審核通過—通知部門經(jīng)理—通知后勤部門采購商品—申請(qǐng)人獲得相應(yīng)商品。提交采購申請(qǐng)—選擇商品—部門經(jīng)理不批準(zhǔn)—得到采購失敗通知。提交采購申請(qǐng)—選擇商品—部門經(jīng)理批準(zhǔn)—通知后勤部門采購商品—申請(qǐng)人獲得相應(yīng)商品。3.1.2報(bào)表與人物角色在這個(gè)企業(yè)資產(chǎn)管理系統(tǒng)中,報(bào)表的設(shè)計(jì)都是依賴于客戶需求的。在這個(gè)系統(tǒng)中,我們了解到企業(yè)中有著不同的角色,有部門經(jīng)理、總經(jīng)理、員工。當(dāng)然,顯示在每個(gè)角色面前的報(bào)表時(shí)有所不同的。那么報(bào)表的設(shè)計(jì)就必須基于不同角色來進(jìn)行,報(bào)表的實(shí)現(xiàn)就要基于不同的功能來進(jìn)行。員工在系統(tǒng)中主要是提交購物申請(qǐng)、查看自己的申請(qǐng)是否被批準(zhǔn),報(bào)表在提交時(shí),會(huì)有兩個(gè)走向:報(bào)到總經(jīng)理和報(bào)到部門經(jīng)理處;部門經(jīng)理會(huì)查詢員工提交的申請(qǐng),審核后批準(zhǔn)或不批準(zhǔn);總經(jīng)理一樣會(huì)查詢員工提交的申請(qǐng),審核后批準(zhǔn)或不批準(zhǔn)。人物角色的截然不同,他們所做的操作也截然不同,所以報(bào)表在呈現(xiàn)時(shí)所提供的操作也是不一樣的。3.1.3報(bào)表的設(shè)計(jì)報(bào)表不僅僅是把數(shù)據(jù)庫中的記錄按你的要求查詢出來,顯示在頁面上這樣的簡(jiǎn)單,你需要對(duì)記錄進(jìn)行修改和解釋,還要考慮你需要將報(bào)表呈現(xiàn)給哪些群體看,不同文化,不同的教育程度都應(yīng)該在考慮范圍之內(nèi)。報(bào)表的呈現(xiàn)必須要做到準(zhǔn)確、易懂。所謂準(zhǔn)確就是,你不能呈現(xiàn)用戶不需要的東西。比如,你在購物時(shí),你只需要關(guān)心你買的東西的名稱、數(shù)量、價(jià)格、類型。但是在數(shù)據(jù)庫中,對(duì)于一個(gè)物品的記錄遠(yuǎn)遠(yuǎn)不止這些屬性的描述,還會(huì)有ID、購入時(shí)間、物品狀態(tài)等等。那么,他在選擇商品時(shí),肯定不會(huì)關(guān)心我這個(gè)商品的ID在數(shù)據(jù)庫中是多少,也不會(huì)關(guān)心這個(gè)商品的進(jìn)貨日期是多少。在我們編寫的系統(tǒng)中,是從一張叫equipmentinfo的表中提取出來的,它的數(shù)據(jù)庫表的設(shè)計(jì)如下:EQUIPMENT_INFO通用及專用設(shè)備信息表列名數(shù)據(jù)類型主鍵約束默認(rèn)值對(duì)應(yīng)字典數(shù)據(jù)項(xiàng)描述ITEM_IDVARCHAR(10)是必填設(shè)備IDNAMEVARCHAR(20)必填設(shè)備名稱TAG_CODEINT必填分類代碼TYPEVARCHAR(20)必填設(shè)備類型PRICEDOUBLE必填設(shè)備價(jià)格元USERVARCHAR(10)必填使用人AMOUNTDOUBLE必填數(shù)量RECEIVEDATEDATE必填領(lǐng)用日期USEDTIMEVARCHAR(10)已用日期STATUSINT必填0:未使用1:預(yù)訂2:使用中3:維護(hù)中狀態(tài)由上圖可以看出,這個(gè)設(shè)備的描述字段有10個(gè),但是我呈現(xiàn)給用戶的表單如下圖:如圖所示:對(duì)于員工在購買時(shí),我顯示出的報(bào)表只有NAME,TYPE,AMOUNT,PRICE四個(gè)。準(zhǔn)確的含義不僅僅是不顯示出多余的東西,而且對(duì)于不同的對(duì)象,你顯示出的字段也不一樣。在系統(tǒng)中,有塊功能是提供給員工進(jìn)行設(shè)備申請(qǐng)的,此時(shí)你顯示出來的就和進(jìn)行購買時(shí)的東西是不一樣的,你必須顯示出STATUS這個(gè)字段。對(duì)于易懂這個(gè)概念的理解,大家應(yīng)該從上面的兩張圖可以了解到一點(diǎn),數(shù)據(jù)庫中的字段都是英文,顯示出來的是中文,而且數(shù)據(jù)庫中對(duì)應(yīng)字段的值多是用符號(hào)來代表不同的含義??纯瓷厦婺菑埍恚赟TATUS的字段中,用數(shù)字代表了一系列的狀態(tài),但是顯示的時(shí)候肯定不能直接把數(shù)字填充到報(bào)表里。報(bào)表,不是直接把記錄從數(shù)據(jù)庫中提取出來顯示,你需要進(jìn)行精心的思考和設(shè)計(jì)。3.2報(bào)表的實(shí)現(xiàn)3.2.1報(bào)表實(shí)現(xiàn)原理你到底需要哪些數(shù)據(jù)?哪些數(shù)據(jù)是需要呈現(xiàn)給人而不是那些人?這些問題,我在上面的設(shè)計(jì)已經(jīng)說的很清楚了。到底如何從數(shù)據(jù)庫中提取出特定的記錄來實(shí)現(xiàn)這個(gè)業(yè)務(wù),就需要為每張表設(shè)定特定的字段,用來使用在業(yè)務(wù)邏輯上。我們先來看看我們數(shù)據(jù)庫中的兩張表:PURCHASING_INFO網(wǎng)上購物信息表列名數(shù)據(jù)類型主鍵約束默認(rèn)值對(duì)應(yīng)字典數(shù)據(jù)項(xiàng)描述ITEM_IDVARCHAR(10)是必填數(shù)據(jù)庫ID產(chǎn)品加入數(shù)據(jù)庫自動(dòng)加上的IDITEM_NAMEVARCHAR(20)必填產(chǎn)品名稱TAG_CODEINT必填分類代碼TYPEVARCHAR(20)必填產(chǎn)品類型PRICEINT必填產(chǎn)品價(jià)格AMOUNTVARCHAR(10)必填產(chǎn)品數(shù)量REMARKVARCHAR(20)備注EMPLOYEE_INFO員工信息表列名數(shù)據(jù)類型主鍵約束默認(rèn)值對(duì)應(yīng)字典數(shù)據(jù)項(xiàng)描述EMP_IDVARCHAR(10)是必填員工IDNAMEVARCHAR(10)必填員工姓名SEXCHAR必填M:男F:女性別DEPARTMENTVARCHAR(5)必填部門IDPOSTINT必填0:系統(tǒng)管理員1:總經(jīng)理2:后勤部經(jīng)理3:財(cái)務(wù)部經(jīng)理4:技術(shù)部經(jīng)理5:后勤部員工6:財(cái)務(wù)部員工7:?jiǎn)T工職位PHONEINT必填電話ADDRESSVARCHAR(60)必填地址REMARKVARCHAR(20)備注員工信息表中的“POST”和網(wǎng)上購物信息表中的“REMARK”這兩個(gè)字段,和我將要闡述的實(shí)現(xiàn)原理是密切相關(guān)的。以員工網(wǎng)上購物的流程為例,員工在提交購物申請(qǐng)表時(shí),他會(huì)在purchasinginfo這張表中插入一條記錄,根據(jù)預(yù)算是否超過,更改字段REMARK。如果超出預(yù)算設(shè)置REMARK為b,沒有就設(shè)置REMARK為a。部門經(jīng)理在進(jìn)行審批時(shí),他在查閱時(shí),會(huì)查閱purchasinginfo表中所有REMARK為a的記錄,如果通過,就將REMARK設(shè)置為c,否則設(shè)置為n;總經(jīng)理在進(jìn)行審批時(shí),他在查閱時(shí),會(huì)查閱purchasinginfo表中所有REMARK為b的記錄,如果通過,就將REMARK設(shè)置為c,否則設(shè)置為n;那樣,員工在查閱是否通過的時(shí)候,查看的記錄是purchasinginfo表中REMARK為n,且user是自己的記錄;當(dāng)REMARK改為c后,財(cái)政部門會(huì)查詢到這類記錄,然后將購物所用費(fèi)用下發(fā)到后勤部門,同時(shí)將REMARK改為d;后勤部門經(jīng)理每天也會(huì)查詢,并派出相關(guān)人員進(jìn)行采購,當(dāng)所購買的物品到庫后,會(huì)將REMARK的記錄改成e,并且在另一張表中存入相關(guān)的記錄。下面,我將結(jié)合流程來具體闡述我是如何實(shí)現(xiàn)的。3.2.2員工購物報(bào)表實(shí)現(xiàn)首先,員工購物的頁面由兩部分組成,一部分是按物品名稱查詢的查詢欄,下面就是顯示的一條一條的記錄,并每條記錄附帶一個(gè)按鈕,點(diǎn)擊就能跳轉(zhuǎn)填寫表格的頁面。這個(gè)頁面由2部分構(gòu)成,上面是一個(gè)表格,你需要填寫的就是數(shù)量,其他的幾欄會(huì)自動(dòng)生成,然后是一個(gè)提交按鈕,提交后自動(dòng)回到先前查詢的頁面。我這個(gè)模糊查詢時(shí)基于對(duì)象的模糊查詢。比如,我擁有一個(gè)對(duì)象,然后去數(shù)據(jù)庫中查找和它相似的對(duì)象。由于,我們只是按名稱來查詢,那么,我首先用request.getParameter(“name”);來取出提交給服務(wù)器的信息,并且把它存到一個(gè)session的屬性中去,我所用的是屬性名稱是searchInfo,因?yàn)榈葧?huì)保存后,我還要回到這個(gè)頁面,它的查詢結(jié)果還是相同的。取得用戶輸入的名稱后,我new一個(gè)對(duì)象出來,把用戶輸入的名稱賦給對(duì)象的itemName,然后查詢類似的對(duì)象,并得到一個(gè)List結(jié)果集,通過List來顯示到下面的表格中。對(duì)于每條記錄的操作,就是獲取當(dāng)前對(duì)象的各個(gè)字段值,填寫到跳轉(zhuǎn)到得頁面的對(duì)應(yīng)的欄中。其實(shí)現(xiàn)時(shí)這樣的,首先,我會(huì)寫個(gè)javascript,里面有兩個(gè)function,每個(gè)function調(diào)用一個(gè)action,。這兩個(gè)function中有一個(gè)對(duì)應(yīng)的就是這個(gè)操作按鈕點(diǎn)擊后觸發(fā)的function。不直接用action的原因是,我需要獲得當(dāng)前記錄的id。用function的話,我就能設(shè)置一個(gè)參數(shù)來傳遞頁面的當(dāng)前記錄的id。代碼如下:functionpass(id){ document.forms[0].action="<%=path%>/approveTureCCC.do?id="+id; document.forms[0].submit();}而在觸發(fā)按鈕處調(diào)用時(shí)獲取id<buttonclass="common_button"onclick="pass('${all.number}');">通過</button>我獲得到id后,通過id在表中得到對(duì)應(yīng)的記錄,同時(shí),我把它存放到session中。當(dāng)我跳轉(zhuǎn)到填寫表格的頁面時(shí),我會(huì)從session中取出剛才設(shè)置的對(duì)象,然后取得相應(yīng)的字段進(jìn)行賦值。顯然,我是從一張表取出一條記錄,存放到另一張表中,其中肯定有很多缺少的東西,你在提交時(shí),就是根據(jù)表格的內(nèi)容創(chuàng)造出一條字段對(duì)應(yīng)好的記錄,插入到表中。3.2.3經(jīng)理報(bào)表實(shí)現(xiàn)經(jīng)理分為總經(jīng)理和部門經(jīng)理,他們都會(huì)對(duì)表單進(jìn)行報(bào)表審核,給出批準(zhǔn)還是不批準(zhǔn)的決定。兩個(gè)經(jīng)理邏輯流程,對(duì)數(shù)據(jù)庫的操作內(nèi)容都是一樣的,只是操作的記錄對(duì)象不一樣??偨?jīng)理是面對(duì)REMARK為b的記錄,部門經(jīng)理面對(duì)的是REMARK為a的記錄。審批報(bào)表涉及到的頁面有三個(gè),每個(gè)頁面的布局都是一樣的。上面是兩個(gè)搜索欄,一個(gè)是按部門查詢,一個(gè)是按時(shí)間段查詢。因?yàn)槠髽I(yè)的部門不多,就沒有設(shè)計(jì)模糊查詢,下面部分就是顯示記錄的表格,每條記錄會(huì)有兩個(gè)操作按鈕,通過還是不通過。具體實(shí)現(xiàn)是:首先,判斷登陸進(jìn)來的經(jīng)理室總經(jīng)理還是部門經(jīng)理。在登錄模塊,就已經(jīng)將登錄者的名字存放到session中了,此時(shí),你根據(jù)人物的名字將對(duì)應(yīng)的職務(wù)取出,進(jìn)行判斷從來跳轉(zhuǎn)到不同的頁面。我們以部門經(jīng)理為例來仔細(xì)講解一下實(shí)現(xiàn)過程,部門經(jīng)理登錄后,進(jìn)入到報(bào)表審批的頁面。此時(shí)顯示的是所有待審批的記錄,為了方便經(jīng)理查看,我提供了按時(shí)間和按部門查詢。按部門查詢的過程是這樣的:當(dāng)用戶在部門欄里輸入了部門的名稱后,根據(jù)所有REMARK為a的記錄,也就是一個(gè)List,將list每個(gè)對(duì)象取出。在每條記錄中會(huì)有一個(gè)user字段,通過user獲得他所在的部門名字,如果他所在的部門名字和用戶輸入的名字是一樣的,就將這條記錄放到即將要顯示的結(jié)果集中,也是個(gè)List,然后顯示到頁面上。當(dāng)你點(diǎn)擊按部門查詢后,它就會(huì)跳轉(zhuǎn)到按部門查詢的頁面。按時(shí)間查詢,會(huì)要求你輸入兩個(gè)時(shí)間段,一個(gè)是起始時(shí)間,一個(gè)是結(jié)束時(shí)間。查詢?cè)硎沁@樣的:遍歷所有REMARK為a的記錄,將每條記錄的的時(shí)間字段值取出,看它是否在查詢的時(shí)間范圍里面,如果在這個(gè)時(shí)間范圍內(nèi),就將它加入到結(jié)果list中,然后顯示出來。你點(diǎn)擊按時(shí)間查詢后,它會(huì)跳轉(zhuǎn)到按時(shí)間查詢的頁面中。當(dāng)然,DATE這個(gè)類型的數(shù)據(jù)是不能直接比較大小的。而且輸入的也是String類型的值,那么你首先就需要將String類型的字符串按一定的格式轉(zhuǎn)化成DATE類型,當(dāng)然比較的三個(gè)時(shí)間必須用相同的格式,然后將三個(gè)時(shí)間轉(zhuǎn)化成long類型的數(shù)據(jù),然后進(jìn)行比較,就能篩選出你所需要的記錄。3.2.4報(bào)表頁面顯示實(shí)現(xiàn)下面這段代碼是用于將結(jié)果顯示在頁面上,這個(gè)比較簡(jiǎn)單;<logic:iterateid="all"name="all"scope="request"><trbordercolor="#990099"> <tdclass="list_data_num"><bean:writename="all"property="itemName"/></td> <tdclass="list_data_name"><bean:writename="all"property="price"/></td> <tdclass="list_data_number"><bean:writename="all"property="amount"/></td> <tdclass="list_data_price"><bean:writename="all"property="date"/></td><tdclass="list_data_depart"><bean:writename="all"property="type"/></td><buttonclass="common_button"onclick="pass('${all.number}');">通過</button><buttonclass="common_button"onclick="unpass('${all.number}');">不通過</button></td></tr></logic:iterate><logic:iterateid="all"name="all"scope="request">這個(gè)是控制整個(gè)顯示的,id表示logic這個(gè)標(biāo)簽的標(biāo)示,name是顯示的結(jié)果集,將結(jié)果集傳給它,它就會(huì)一條一條的顯示出來。<tdclass="list_data_depart">這個(gè)標(biāo)簽是CSS標(biāo)簽控制顯示效果的;<bean:writename="all"property="type"/>這個(gè)是控制顯示內(nèi)容的,就是記錄中的哪個(gè)字段在這行顯示。這個(gè)是解決了如何顯示,我們采用了分頁顯示的方式顯示報(bào)表記錄。首先,你獲得你查詢的結(jié)果會(huì)有多少條記錄,設(shè)定好一頁顯示幾條記錄,然后順序的分別顯示相應(yīng)的頁面上。結(jié)論報(bào)表能做出很多很多種格式和樣式出來,這點(diǎn)是毋庸置疑的,但是如何去選擇正確的,才是報(bào)表的關(guān)鍵中的關(guān)鍵;報(bào)表的功能也是非常多的,你可以做成表格、柱狀圖、餅狀圖等等。但是,不是說你將每個(gè)功能全加上去就是一個(gè)完美的報(bào)表。如何去選擇,就必須根據(jù)你的客戶需求來做出判斷。如果你的客戶要做出財(cái)政報(bào)告并要便于對(duì)比,那么表格的形式明顯是不太方便的,柱狀是比較理想的,因?yàn)樗荒苛巳?,容易得出結(jié)論;但是不是說你一個(gè)系統(tǒng)中只出現(xiàn)一種形式的報(bào)表,應(yīng)該是多種形式相結(jié)合的,柱狀圖適合多階段的對(duì)比,而餅狀圖就適合比較同一階段不同元素所占的比例。柱狀和餅狀圖的變化主要在于布局、顏色、形狀的選取。但是表格一類的,則是注重在每個(gè)字段的選擇。報(bào)表的的設(shè)計(jì)和實(shí)現(xiàn)是和數(shù)據(jù)庫密切相關(guān)的。對(duì)數(shù)據(jù)庫深刻的了解才是你做出報(bào)表的關(guān)鍵所在,流程的復(fù)雜性的,功能的多樣性都會(huì)指導(dǎo)報(bào)表的設(shè)計(jì)和實(shí)現(xiàn)。與此同時(shí),您的客戶也會(huì)直接影響你報(bào)表的設(shè)計(jì)。報(bào)表呈現(xiàn)給相關(guān)專業(yè)人士的話,你可以直接使用相關(guān)領(lǐng)域的專業(yè)術(shù)語,但是對(duì)于業(yè)外人士,你就必須注意報(bào)表上的字段是否過于專業(yè),而讓用戶覺得自己格格不入。影響報(bào)表實(shí)現(xiàn)的因素,個(gè)人認(rèn)為主要是性能方面的考慮,數(shù)據(jù)庫設(shè)計(jì)的好壞會(huì)直接影響到你的報(bào)表性能。顯然,報(bào)表數(shù)據(jù)來自數(shù)據(jù)庫,檢索的效率就會(huì)直接影響到報(bào)表的效率,比如,同一張表,你根據(jù)兩個(gè)字段來查詢結(jié)果,肯定比只用一個(gè)字段查詢更耗時(shí);再者,你編寫程序所用的技術(shù)和框架依然會(huì)影響到報(bào)表的性能,比如,報(bào)表環(huán)節(jié)中最耗時(shí)的一件事情就是連接和關(guān)閉數(shù)據(jù),那么連接池的使用和不適用就會(huì)直接影響這個(gè)數(shù)據(jù)獲得耗時(shí)??傊?,報(bào)表設(shè)計(jì)和實(shí)現(xiàn),必須基于業(yè)務(wù)、數(shù)據(jù)庫、用戶來做,對(duì)這三方面有深入調(diào)查和研究,報(bào)表的形式和實(shí)現(xiàn)也就基本形成了。你涉足越深,所得到的結(jié)果越讓人滿意。第5章致謝首先要感謝我的導(dǎo)師王樹良教授對(duì)我的諄諄教導(dǎo)。他的嚴(yán)格要求和在研究方法上對(duì)我的指導(dǎo),使我能夠完成這篇論文。王樹良教授嚴(yán)謹(jǐn)?shù)闹螌W(xué)態(tài)度、淵博的知識(shí)、獨(dú)到的眼光、學(xué)者的胸襟和卓越的領(lǐng)導(dǎo)才能是我以后工作、學(xué)習(xí)、生活的楷模。同時(shí)還要感謝劉丁峰老師,他在本文的完成過程中,給予我很多的支持和幫助。值此論文完成之際,我謹(jǐn)向我的兩位老師表示崇高的敬意和深深的謝意!最后,謝謝我的父母和我的家人。我們每個(gè)人取得的任何成就,都離不開家人父母的辛勤、汗水和默默的支持,在這里我向他們表示我深深的敬愛。參考文獻(xiàn)(美)PaulJ.Perrone,etal.著,張志偉等譯.

J2EE構(gòu)建企業(yè)系統(tǒng)

[M].清華大學(xué)版,

2001.

[美]BrettMcLaughlin著,孫兆林等譯.

JAVA與XML

[M].中國(guó)電力出版社,

2001.(美)MarkWutka著,程顯華等譯.

JSP和Servlet程序設(shè)計(jì)使用專輯

[M].機(jī)械工業(yè)出版社,

2002.田勇,孫新等編著.

最新JBuilder開發(fā)人員指南

[M].機(jī)械工業(yè)出版社,

2001.

方美琪主編.

電子商務(wù)概論

[M].清華大學(xué)出版社,

2002.

(美)BruceEckel著,侯捷譯.

Java編程思想

[M].機(jī)械工業(yè)出版社,

2002.

基于C8051F單片機(jī)直流電動(dòng)機(jī)反饋控制系統(tǒng)的設(shè)計(jì)與研究基于單片機(jī)的嵌入式Web服務(wù)器的研究MOTOROLA單片機(jī)MC68HC(8)05PV8/A內(nèi)嵌EEPROM的工藝和制程方法及對(duì)良率的影響研究基于模糊控制的電阻釬焊單片機(jī)溫度控制系統(tǒng)的研制基于MCS-51系列單片機(jī)的通用控制模塊的研究基于單片機(jī)實(shí)現(xiàn)的供暖系統(tǒng)最佳啟停自校正(STR)調(diào)節(jié)器單片機(jī)控制的二級(jí)倒立擺系統(tǒng)的研究基于增強(qiáng)型51系列單片機(jī)的TCP/IP協(xié)議棧的實(shí)現(xiàn)基于單片機(jī)的蓄電池自動(dòng)監(jiān)測(cè)系統(tǒng)基于32位嵌入式單片機(jī)系統(tǒng)的圖像采集與處理技術(shù)的研究基于單片機(jī)的作物營(yíng)養(yǎng)診斷專家系統(tǒng)的研究基于單片機(jī)的交流伺服電機(jī)運(yùn)動(dòng)控制系統(tǒng)研究與開發(fā)基于單片機(jī)的泵管內(nèi)壁硬度測(cè)試儀的研制基于單片機(jī)的自動(dòng)找平控制系統(tǒng)研究基于C8051F040單片機(jī)的嵌入式系統(tǒng)開發(fā)基于單片機(jī)的液壓動(dòng)力系統(tǒng)狀態(tài)監(jiān)測(cè)儀開發(fā)模糊Smith智能控制方法的研究及其單片機(jī)實(shí)現(xiàn)一種基于單片機(jī)的軸快流CO〈,2〉激光器的手持控制面板的研制基于雙單片機(jī)沖床數(shù)控系統(tǒng)的研究基于CYGNAL單片機(jī)的在線間歇式濁度儀的研制基于單片機(jī)的噴油泵試驗(yàn)臺(tái)控制器的研制基于單片機(jī)的軟起動(dòng)器的研究和設(shè)計(jì)基于單片機(jī)控制的高速快走絲電火花線切割機(jī)床短循環(huán)走絲方式研究基于單片機(jī)的機(jī)電產(chǎn)品控制系統(tǒng)開發(fā)基于PIC單片機(jī)的智能手機(jī)充電器基于單片機(jī)的實(shí)時(shí)內(nèi)核設(shè)計(jì)及其應(yīng)用研究基于單片機(jī)的遠(yuǎn)程抄表系統(tǒng)的設(shè)計(jì)與研究基于單片機(jī)的煙氣二氧化硫濃度檢測(cè)儀的研制基于微型光譜儀的單片機(jī)系統(tǒng)單片機(jī)系統(tǒng)軟件構(gòu)件開發(fā)的技術(shù)研究基于單片機(jī)的液體點(diǎn)滴速度自動(dòng)檢測(cè)儀的研制基于單片機(jī)系統(tǒng)的多功能溫度測(cè)量?jī)x的研制基于PIC單片機(jī)的電能采集終端的設(shè)計(jì)和應(yīng)用基于單片機(jī)的光纖光柵解調(diào)儀的研制氣壓式線性摩擦焊機(jī)單片機(jī)控制系統(tǒng)的研制基于單片機(jī)的數(shù)字磁通門傳感器基于單片機(jī)的旋轉(zhuǎn)變壓器-數(shù)字轉(zhuǎn)換器的研究基于單片機(jī)的光纖Bragg光柵解調(diào)系統(tǒng)的研究單片機(jī)控制的便攜式多功能乳腺治療儀的研制基于C8051F020單片機(jī)的多生理信號(hào)檢測(cè)儀基于單片機(jī)的電機(jī)運(yùn)動(dòng)控制系統(tǒng)設(shè)計(jì)Pico專用單片機(jī)核的可測(cè)性設(shè)計(jì)研究基于MCS-51單片機(jī)的熱量計(jì)基于雙單片機(jī)的智能遙測(cè)微型氣象站MCS-51單片機(jī)構(gòu)建機(jī)器人的實(shí)踐研究基于單片機(jī)的輪軌力檢測(cè)基于單片機(jī)的GPS定位儀的研究與實(shí)現(xiàn)基于單片機(jī)的電液伺服控制系統(tǒng)用于單片機(jī)系統(tǒng)的MMC卡文件系統(tǒng)研制基于單片機(jī)的時(shí)控和計(jì)數(shù)系統(tǒng)性能優(yōu)化的研究基于單片機(jī)和CPLD的粗光柵位移測(cè)量系統(tǒng)研究單片機(jī)控制的后備式方波UPS提升高職學(xué)生單片機(jī)應(yīng)用能力的探究基于單片機(jī)控制的自動(dòng)低頻減載裝置研究基于單片機(jī)控制的水下焊接電源的研究基于單片機(jī)的多通道數(shù)據(jù)采集系統(tǒng)基于uPSD3234單片機(jī)的氚表面污染測(cè)量?jī)x的研制基于單片機(jī)的紅外測(cè)油儀的研究96系列單片機(jī)仿真器研究與設(shè)計(jì)基于單片機(jī)的單晶金剛石刀具刃磨設(shè)備的數(shù)控改造基于單片機(jī)的溫度智能控制系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)基于MSP430單片機(jī)的電梯門機(jī)控制器的研制基于單片機(jī)的氣體測(cè)漏儀的研究基于三菱M16C/6N系列單片機(jī)的CAN/USB協(xié)議轉(zhuǎn)換器基于單片機(jī)和DSP的變壓器油色譜在線監(jiān)測(cè)技術(shù)研究基于單片機(jī)的膛壁溫度報(bào)警系統(tǒng)設(shè)計(jì)基于AVR單片機(jī)的低壓無功補(bǔ)償控制器的設(shè)計(jì)基于單片機(jī)船舶電力推進(jìn)電機(jī)監(jiān)測(cè)系統(tǒng)基于單片機(jī)網(wǎng)絡(luò)的振動(dòng)信號(hào)的采集系統(tǒng)基于單片機(jī)的大容量數(shù)據(jù)存儲(chǔ)技術(shù)的應(yīng)用研究基于單片機(jī)的疊圖機(jī)研究與教學(xué)方法實(shí)踐基于單片機(jī)嵌入式Web服務(wù)器技術(shù)的研究及實(shí)現(xiàn)基于AT89S52單片機(jī)的通用數(shù)據(jù)采集系統(tǒng)\t"

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論