版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 目 錄</b></p><p><b> 1 緒論3</b></p><p> 1.1 背景介紹3</p><p> 1.1.1 項(xiàng)目開(kāi)發(fā)背景3</p><p> 1.1.2 研究目標(biāo)4</p><p> 1.2 相關(guān)技術(shù)介紹
2、4</p><p> 1.2.1 B/S模式4</p><p> 1.2.2 JavaEE4</p><p> 1.2.3 MySQL5</p><p> 1.2.4 AJAX5</p><p> 1.3 可行性分析5</p><p> 1.4 系統(tǒng)環(huán)境配置5</p
3、><p> 1.4.1安裝jdk5</p><p> 1.4.2安裝tomcat5</p><p> 1.4.3安裝MySQL6</p><p> 1.4.4系統(tǒng)布署6</p><p><b> 2 系統(tǒng)分析6</b></p><p><b>
4、2.1架構(gòu)分析6</b></p><p><b> 3 系統(tǒng)設(shè)計(jì)6</b></p><p> 3.1 數(shù)據(jù)庫(kù)設(shè)計(jì)6</p><p> 4 系統(tǒng)功能實(shí)現(xiàn)9</p><p> 4.1 后臺(tái)管理系統(tǒng)9</p><p> 4.1.1 登錄后臺(tái)管理系統(tǒng)9</p>
5、<p> 4.1.2住戶管理模塊10</p><p> 4.1.3設(shè)備管理模塊11</p><p> 4.1.4 人事管理模塊11</p><p> 4.1.5部門(mén)管理模塊14</p><p> 4.1.6 財(cái)務(wù)管理模塊15</p><p> 4.1.7 房產(chǎn)管理模塊17</
6、p><p> 4.1.8 系統(tǒng)管理模塊19</p><p><b> 5 測(cè)試21</b></p><p> 5.1 web系統(tǒng)測(cè)試21</p><p> 5.1.1 界面測(cè)試21</p><p> 5.1.2 功能測(cè)試22</p><p> 5.1.3
7、性能測(cè)試22</p><p> 5.1.4 可用性測(cè)試22</p><p><b> 參考文獻(xiàn):22</b></p><p> 附錄 主要代碼25</p><p><b> 摘要</b></p><p> 基于目前小區(qū)物業(yè)管理模式以及計(jì)算機(jī)技術(shù)的不斷進(jìn)步
8、和發(fā)展,用計(jì)算機(jī)操作的小區(qū)物業(yè)管理系統(tǒng)是為小區(qū)管理者和小區(qū)用戶更好的維護(hù)各項(xiàng)物業(yè)管理業(yè)務(wù)而開(kāi)發(fā)的管理軟件。本系統(tǒng)應(yīng)用JavaEE技術(shù)和MySql數(shù)據(jù)庫(kù)系統(tǒng)組件來(lái)構(gòu)成應(yīng)用服務(wù)系統(tǒng),實(shí)現(xiàn)方便快捷的前端Web登陸和查詢,以及后臺(tái)管理員進(jìn)行各項(xiàng)物業(yè)管理。本系統(tǒng)分為七個(gè)模塊:住戶管理模塊、設(shè)備管理模塊、人事管理模塊、部門(mén)管理模塊、財(cái)務(wù)管理模塊、房產(chǎn)管理模塊、系統(tǒng)管理模塊;本系統(tǒng)運(yùn)用方便、操作簡(jiǎn)單,效率很高。</p><p>
9、; 關(guān)鍵詞 物業(yè)管理、JavaEE、MySql、web、人事管理模塊、系統(tǒng)管理模塊</p><p><b> 1 緒論</b></p><p><b> 1.1 背景介紹</b></p><p> 1.1.1 項(xiàng)目開(kāi)發(fā)背景</p><p> 隨著我國(guó)經(jīng)濟(jì)發(fā)展和城市開(kāi)發(fā),住宅小區(qū)越來(lái)越成為居
10、住的主流,小區(qū)物業(yè)管理是針對(duì)當(dāng)代社會(huì)這一市場(chǎng)需要應(yīng)運(yùn)而生的。用計(jì)算機(jī)操作的小區(qū)物業(yè)管理系統(tǒng)是為小區(qū)管理者和小區(qū)用戶更好的維護(hù)各項(xiàng)物業(yè)管理業(yè)務(wù)處理工作而開(kāi)發(fā)的管理軟件,根據(jù)需求分析,實(shí)現(xiàn)小區(qū)管理業(yè)務(wù),效益已越來(lái)越明顯。因此,開(kāi)發(fā)這樣一套小區(qū)物業(yè)管理系統(tǒng)軟件成為很有必要的事情,在本文中將就本次畢業(yè)設(shè)計(jì)我所開(kāi)發(fā)的小區(qū)物業(yè)管理系統(tǒng),談?wù)勂溟_(kāi)發(fā)過(guò)程和所涉及到的問(wèn)題及解決方法。</p><p> 1.1.2 研究目標(biāo)<
11、;/p><p> 研究目標(biāo)是利用JavaEE開(kāi)發(fā)基于SSH框架的小區(qū)物業(yè)管理系統(tǒng),實(shí)現(xiàn)小區(qū)物業(yè)管理的全部功能且便于維護(hù)更新。</p><p> 1.2 相關(guān)技術(shù)介紹</p><p> 1.2.1 SSH框架</p><p> SSH 為 struts+spring+hibernate的一個(gè)集成框架,是目前較流行的一種Web應(yīng)用程序開(kāi)源框
12、架。</p><p> 集成SSH框架的系統(tǒng)從職責(zé)上分為四層:表示層、業(yè)務(wù)邏輯層、數(shù)據(jù)持久層和域模塊層,以幫助開(kāi)發(fā)人員在短期內(nèi)搭建結(jié)構(gòu)清晰、可復(fù)用性好、維護(hù)方便的Web應(yīng)用程序。其中使用Struts作為系統(tǒng)的整體基礎(chǔ)架構(gòu),負(fù)責(zé)MVC的分離,在Struts框架的模型部分,控制業(yè)務(wù)跳轉(zhuǎn),利用Hibernate框架對(duì)持久層提供支持,Spring做管理,管理struts和hibernate。具體做法是:用面向?qū)ο蟮姆治?/p>
13、方法根據(jù)需求提出一些模型,將這些模型實(shí)現(xiàn)為基本的Java對(duì)象,然后編寫(xiě)基本的DAO(Data Access Objects)接口,并給出Hibernate的DAO實(shí)現(xiàn),采用Hibernate架構(gòu)實(shí)現(xiàn)的DAO類(lèi)來(lái)實(shí)現(xiàn)Java類(lèi)與數(shù)據(jù)庫(kù)之間的轉(zhuǎn)換和訪問(wèn),最后由Spring做管理,管理struts和hibernate。</p><p> 系統(tǒng)的基本業(yè)務(wù)流程是: 在表示層中,首先通過(guò)JSP頁(yè)面實(shí)現(xiàn)交互界面,負(fù)責(zé)接收請(qǐng)求
14、(Request)和傳送響應(yīng)(Response),然后Struts根據(jù)配置文件(struts-config.xml)將ActionServlet接收到的Request委派給相應(yīng)的Action處理。在業(yè)務(wù)層中,管理服務(wù)組件的Spring IoC容器負(fù)責(zé)向Action提供業(yè)務(wù)模型(Model)組件和該組件的協(xié)作對(duì)象數(shù)據(jù)處理(DAO)組件完成業(yè)務(wù)邏輯,并提供事務(wù)處理、緩沖池等容器組件以提升系統(tǒng)性能和保證數(shù)據(jù)的完整性。而在持久層中,則依賴于Hi
15、bernate的對(duì)象化映射和數(shù)據(jù)庫(kù)交互,處理DAO組件請(qǐng)求的數(shù)據(jù),并返回處理結(jié)果。</p><p> 采用上述開(kāi)發(fā)模型,不僅實(shí)現(xiàn)了視圖、控制器與模型的徹底分離,而且還實(shí)現(xiàn)了業(yè)務(wù)邏輯層與持久層的分離。這樣無(wú)論前端如何變化,模型層只需很少的改動(dòng),并且數(shù)據(jù)庫(kù)的變化也不會(huì)對(duì)前端有所影響,大大提高了系統(tǒng)的可復(fù)用性。而且由于不同層之間耦合度小,有利于團(tuán)隊(duì)成員并行工作,大大提高了開(kāi)發(fā)效率。</p><p&
16、gt; 1.2.2 JavaEE</p><p> JavaEE是一種利用Java 平臺(tái)來(lái)簡(jiǎn)化企業(yè)解決方案的開(kāi)發(fā)、部署和管理相關(guān)的復(fù)雜問(wèn)題的體系結(jié)構(gòu)。JavaEE技術(shù)的基礎(chǔ)就是核心Java平臺(tái),JavaEE不僅鞏固了標(biāo)準(zhǔn)版中的許多優(yōu)點(diǎn),例如"編寫(xiě)一次、隨處運(yùn)行"的特性、方便存取數(shù)據(jù)庫(kù)的JDBC API、CORBA技術(shù)以及能夠在Internet應(yīng)用中保護(hù)數(shù)據(jù)的安全模式等等,同時(shí)還提供了對(duì) E
17、JB(Enterprise JavaBeans)、Java Servlets API、JSP(Java Server Pages)以及XML技術(shù)的全面支持。其最終目的就是成為一個(gè)能夠使企業(yè)開(kāi)發(fā)者大幅縮短投放市場(chǎng)時(shí)間的體系結(jié)構(gòu)。 </p><p> JavaEE體系結(jié)構(gòu)提供中間層集成框架用來(lái)滿足無(wú)需太多費(fèi)用而又需要高可用性、高可靠性以及可擴(kuò)展性的應(yīng)用的需求。通過(guò)提供統(tǒng)一的開(kāi)發(fā)平臺(tái),JavaEE降低了開(kāi)發(fā)多層應(yīng)用的
18、費(fèi)用和復(fù)雜性,同時(shí)提供對(duì)現(xiàn)有應(yīng)用程序集成強(qiáng)有力支持,完全支持Enterprise JavaBeans,有良好的向?qū)еС执虬筒渴饝?yīng)用,添加目錄支持,增強(qiáng)了安全機(jī)制,提高了性能。</p><p> 1.2.3 MySQL</p><p> MySQL是一個(gè)小型關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),與其他的大型數(shù)據(jù)庫(kù)例如Oracle、DB2、SQL Server等相比,MySQL自有它的不足之處,如規(guī)模小
19、、功能有限(MySQL Cluster的功能和效率都相對(duì)比較差)等,但是這絲毫也沒(méi)有減少它受歡迎的程度。對(duì)于一般的個(gè)人使用者和中小型企業(yè)來(lái)說(shuō),MySQL提供的功能已經(jīng)綽綽有余,而且由于MySQL是開(kāi)源軟件,因此可以大大降低總體成本。 </p><p> 1.2.4 AJAX </p><p> AJAX 不是一種新的編程語(yǔ)言,而是一種用于創(chuàng)建更好更快以及交互性更強(qiáng)的 Web 應(yīng)用程序的
20、技術(shù)。</p><p> 通過(guò) AJAX,JavaScript可使用 JavaScript 的 XMLHttpRequest 對(duì)象來(lái)直接與服務(wù)器進(jìn)行通信。通過(guò)這個(gè)對(duì)象,JavaScript 可在不重載頁(yè)面的情況與 Web 服務(wù)器交換數(shù)據(jù)。</p><p> AJAX 在瀏覽器與 Web 服務(wù)器之間使用異步數(shù)據(jù)傳輸(HTTP 請(qǐng)求),這樣就可使網(wǎng)頁(yè)從服務(wù)器請(qǐng)求少量的信息,而不是整個(gè)頁(yè)面。
21、AJAX 可使因特網(wǎng)應(yīng)用程序更小、更快,更友好。JavaScript XML HTML CSS 在 AJAX 中使用的 Web 標(biāo)準(zhǔn)已被良好定義,并被所有的主流瀏覽器支持。AJAX 應(yīng)用程序獨(dú)立于瀏覽器和平臺(tái)。 </p><p> Web 應(yīng)用程序較桌面應(yīng)用程序有諸多優(yōu)勢(shì);它們能夠涉及廣大的用戶,它們更易安裝及維護(hù),也更易開(kāi)發(fā)。不過(guò),因特網(wǎng)應(yīng)用程序并不像傳統(tǒng)的桌面應(yīng)用程序那樣完善且友好。通過(guò) AJAX,因特網(wǎng)應(yīng)
22、用程序可以變得更完善,更友好。</p><p><b> 1.3 可行性分析</b></p><p> 該系統(tǒng)所需硬件設(shè)備,市場(chǎng)上銷(xiāo)售且價(jià)格較低,甚至可以使用原有的設(shè)備,軟件上,操作系統(tǒng)采用Windows系列操作系統(tǒng),數(shù)據(jù)庫(kù)管理系統(tǒng)采用mysql,這些軟件在MIS開(kāi)發(fā)中已被大量應(yīng)用,技術(shù)上都比較成熟。因此在技術(shù)上是可行的。</p><p>
23、 1.4 系統(tǒng)環(huán)境配置</p><p> 1.4.1安裝jdk</p><p> 本系統(tǒng)使用jdk1.6開(kāi)發(fā)。下載安裝后,配置path環(huán)境變量。</p><p> 1.4.2安裝tomcat</p><p> 本系統(tǒng)使用tomcat6.0作為web服務(wù)器,啟動(dòng)前需設(shè)置java_home環(huán)境變量。</p><p&g
24、t; 1.4.3安裝MySQL</p><p> 本系統(tǒng)使用MySQL作為后臺(tái)數(shù)據(jù)庫(kù)。 </p><p><b> 1.4.4系統(tǒng)布署</b></p><p> 將項(xiàng)目文件復(fù)制到tomcat6.0的安裝路徑下的webapps目錄下。啟動(dòng)tomcat,打開(kāi)瀏覽器即可使用系統(tǒng)。</p><p><b>
25、2 系統(tǒng)分析</b></p><p><b> 2.1架構(gòu)分析</b></p><p><b> 架構(gòu)分析如下:</b></p><p> 1.邏輯架構(gòu):JSP+JavaBean +Database</p><p> (1)JSP負(fù)責(zé)頁(yè)面表現(xiàn)</p><p&g
26、t; (2)JavaBean負(fù)責(zé)業(yè)務(wù)邏輯</p><p> (3)Database負(fù)責(zé)數(shù)據(jù)持久化操作</p><p> 2.物理架構(gòu):Web服務(wù)器一臺(tái),Database服務(wù)器一臺(tái)</p><p> 3.技術(shù)解決方案:WebServer-Tomcat6.0,Database-MySQL</p><p><b> 3 系統(tǒng)設(shè)計(jì)
27、</b></p><p><b> 3.1 數(shù)據(jù)庫(kù)設(shè)計(jì)</b></p><p> 設(shè)計(jì)數(shù)據(jù)庫(kù)物理結(jié)構(gòu)主要表如下:</p><p> 1. user用戶表</p><p> 表3-1 用戶信息表</p><p> 2. resident信息表</p><p&
28、gt; 表3-2 resident信息表</p><p> 3. emp員工信息表</p><p> 表3-3 車(chē)位信息表</p><p> 4.Agepart年齡段信息表</p><p> 表3-4 車(chē)位出租信息表</p><p> 5.Askleave請(qǐng)假情況表</p><p&
29、gt; 表3-5 用水量表</p><p><b> 6. 樓棟信息表</b></p><p> 表3-6 用電量表</p><p><b> 7. 學(xué)位信息表</b></p><p> 表3-7 燃?xì)庥昧勘?lt;/p><p> 8.Department部門(mén)信
30、息表</p><p> 表3-8水、電、燃?xì)鈨r(jià)格及物業(yè)費(fèi)表</p><p> 9.Unit單元信息表</p><p><b> 表3-9收費(fèi)信息表</b></p><p> 10.Room房間信息表</p><p> 表3-10物業(yè)費(fèi)用表</p><p><
31、b> 4 系統(tǒng)功能實(shí)現(xiàn)</b></p><p> 4.1 后臺(tái)管理系統(tǒng)</p><p> 4.1.1 登錄后臺(tái)管理系統(tǒng)</p><p> 登錄界面設(shè)計(jì)如圖4-1,管理員輸入正確賬號(hào),密碼即可登錄系統(tǒng)。</p><p><b> 圖4-1登錄界面</b></p><p>
32、 登錄系統(tǒng)后進(jìn)入首頁(yè)界面如圖4-2。</p><p><b> 圖4—2系統(tǒng)界面</b></p><p> 4.1.2住戶管理模塊</p><p> 作為物業(yè)管理系統(tǒng),住戶資料管理是最基本的管理功能,如圖4-3界面用以查看住戶詳細(xì)資料。</p><p> 圖4-3住戶資料列表</p><p&
33、gt; 4.1.3設(shè)備管理模塊</p><p> 該模塊實(shí)現(xiàn)對(duì)小區(qū)內(nèi)各項(xiàng)公共設(shè)備(如:路燈、排水,取暖,電,用水,煤氣管等)的管理,為各項(xiàng)設(shè)備建立信息檔案,記錄各設(shè)備檢查\維修\保養(yǎng)記錄。具體又分為設(shè)備登記、設(shè)備報(bào)修、設(shè)備檢查和設(shè)備保養(yǎng)這四個(gè)子模塊。 </p><p> 使用ajax異步驗(yàn)證</p><p> 4.1.4 人事管理模塊</p>
34、<p> 該模塊主要是針對(duì)物業(yè)管理部門(mén)內(nèi)部的工作人員的,實(shí)現(xiàn)對(duì)物業(yè)管理人員、保安/保潔人員的管理。包括:?jiǎn)T工信息錄入、查詢、工資管理、員工考勤記錄和員工考核記錄這幾個(gè)子模塊。 </p><p><b> 添加員工</b></p><p> 圖4-4是添加員工的操作界面:</p><p><b> 圖4-4 添加員工&
35、lt;/b></p><p><b> 關(guān)鍵代碼如下</b></p><p><b> //添加員工信息</b></p><p> private void add(HttpServletRequest request, HttpServletResponse response) {</p>&l
36、t;p> //判斷員工編號(hào)是否存在</p><p> boolean flag=false;</p><p> Emp emp=(Emp) request.getAttribute("obj");</p><p> flag=es.isExist(emp.getEmpno());</p><p> in
37、t flagresult=0;</p><p><b> if(flag){</b></p><p> //如果員工編號(hào)已存在</p><p> flagresult=1;</p><p> request.setAttribute("flagresult", flagresult);<
38、/p><p><b> try {</b></p><p> request.getRequestDispatcher("renshiguanli/addEmp.jsp").forward(request, response);</p><p> } catch (ServletException e) {</p&g
39、t;<p> // TODO Auto-generated catch block</p><p> e.printStackTrace();</p><p> } catch (IOException e) {</p><p> // TODO Auto-generated catch block</p><p>
40、e.printStackTrace();</p><p><b> }</b></p><p><b> }else{</b></p><p> //如果員工編號(hào)不存在</p><p> flagresult=0;</p><p> request.setAttri
41、bute("flagresult", flagresult);</p><p><b> //得到圖片的路徑</b></p><p> String imgpath=emp.getImgpath();</p><p><b> //得到圖片格式</b></p><p>
42、if(imgpath!=null && imgpath.length()>0){</p><p> String format=imgpath.substring(imgpath.lastIndexOf(".")+1);</p><p> //得到圖片的預(yù)處理路徑</p><p> String previmgpath
43、=imgpath.substring(0, imgpath.lastIndexOf("."))+"previmg"+imgpath.substring(imgpath.lastIndexOf("."));</p><p> File src=new File(imgpath);</p><p> File des=new Fi
44、le(previmgpath);</p><p> ImageUtil.getPreImage(src, des, format);</p><p> emp.setPrevimgpath(previmgpath);</p><p><b> }</b></p><p> int result=0;</p&
45、gt;<p> result=es.add(emp);</p><p> //成功添加員工,就要把他的考勤初始化</p><p> addEmpcheck(emp);</p><p> String fileName=request.getParameter("fileName");</p><p
46、> request.setAttribute("result", result);</p><p><b> try {</b></p><p> request.getRequestDispatcher("renshiguanli/addEmp.jsp").forward(request, response);&l
47、t;/p><p> } catch (ServletException e) {</p><p> e.printStackTrace();</p><p> } catch (IOException e) {</p><p> e.printStackTrace();</p><p><b> }&l
48、t;/b></p><p><b> }</b></p><p><b> }</b></p><p><b> //運(yùn)用反射保存</b></p><p> public int save(Object obj) {</p><p> C
49、lass clazz = obj.getClass();</p><p> String sql = "insert into t_"+clazz.getSimpleName().toLowerCase()+" values(null";</p><p> Field[] fs = clazz.getDeclaredFields();</p
50、><p> List list = new ArrayList();</p><p> for(int i=1;i<fs.length;i++){</p><p> sql += ",?"; </p><p> String fieldName = fs[i].getName();</p><
51、p> Method m = null;</p><p><b> try {</b></p><p> m = clazz.getDeclaredMethod(BeanUtil.getGetter(fieldName));</p><p> list.add(m.invoke(obj));</p><p>
52、 } catch ( Exception e) {</p><p> e.printStackTrace();</p><p><b> } </b></p><p><b> }</b></p><p> sql += ")";</p><p&g
53、t; System.out.println(sql);</p><p> return this.updateData(sql, list.toArray());</p><p><b> }</b></p><p> 4.1.5部門(mén)管理模塊</p><p> 查看部門(mén)信息如圖4-5</p>&l
54、t;p> 圖4-5部門(mén)信息列表</p><p> 單擊部門(mén)名稱的時(shí)候,會(huì)彈出部門(mén)的詳細(xì)信息如圖4-6</p><p> 修改部門(mén)信息關(guān)鍵代碼:</p><p> <script type="text/javascript"></p><p> var chart = new FusionChar
55、ts("Charts/Column3D.swf", "ChartId", "400", "300", "0", "0");</p><p> var rs = "${depData}" ;</p><p> var rs1= rs.replace(
56、/\\"/g,"\"");</p><p> chart.setXMLData(rs1); </p><p> chart.render("chartdiv");</p><p> function myJS(a,b,c){</p><p> alert(a+&quo
57、t;人數(shù):"+c);</p><p><b> }</b></p><p><b> 圖4-6 部門(mén)信息</b></p><p> 4.1.6 財(cái)務(wù)管理模塊</p><p> 該模塊主要實(shí)現(xiàn)對(duì)已經(jīng)入住的住戶進(jìn)行費(fèi)用(物業(yè)管理費(fèi)、水費(fèi)、電費(fèi)和煤氣費(fèi),暖氣費(fèi))繳納的各方面管理,具體包括
58、以下幾個(gè)部分:收費(fèi)類(lèi)別設(shè)置、收費(fèi)項(xiàng)目設(shè)置、計(jì)量單位設(shè)置、表設(shè)置、用戶抄表、應(yīng)收款和收款單等。</p><p> 查看收費(fèi)項(xiàng)目如圖4-7</p><p> 圖4-7 查看收費(fèi)項(xiàng)目</p><p> 添加收費(fèi)項(xiàng)目如圖4-8</p><p> 圖4-8 添加收費(fèi)項(xiàng)目</p><p> 查詢收費(fèi)項(xiàng)目并分頁(yè)關(guān)鍵代碼如下
59、:</p><p> 4.1.7 房產(chǎn)管理模塊</p><p><b> 房產(chǎn)管理</b></p><p> 主要包括添加樓棟、樓棟列表、添加單元、添加房間類(lèi)型、房間類(lèi)型列表、添加房間和房產(chǎn)住戶信息列表功能如圖4-9。</p><p><b> 圖4-9 房產(chǎn)管理</b></p>
60、<p><b> 添加樓棟</b></p><p> 根據(jù)房產(chǎn)開(kāi)發(fā)計(jì)劃,對(duì)于新建的樓棟進(jìn)行添加。</p><p> 包括js前臺(tái)的動(dòng)態(tài)驗(yàn)證如圖4-10</p><p> 圖4-10 樓棟添加</p><p><b> 樓棟列表顯示</b></p><p&g
61、t; 顯示樓棟的詳細(xì)信息,包括分頁(yè)如圖4-11</p><p><b> 圖4-11樓棟列表</b></p><p> 樓棟的編輯如圖4-12</p><p> 圖4-12 樓棟的編輯</p><p> 樓棟的刪除js代碼如下:</p><p> 4.1.8 系統(tǒng)管理模塊</p&
62、gt;<p> 系統(tǒng)管理模塊是整個(gè)物業(yè)管理系統(tǒng)的核心,在區(qū)分不同用戶的使用權(quán)限、加強(qiáng)軟件使用安全性和保證數(shù)據(jù)安全方面起著關(guān)鍵的作用。具體包括:用戶管理(增刪改查加分頁(yè))、更改密碼、數(shù)據(jù)庫(kù)備份、恢復(fù)這幾個(gè)子模塊。 </p><p> 賬戶添加主要代碼如下:</p><p> 賬號(hào)異步驗(yàn)證是利用ajax實(shí)現(xiàn)</p><p> $.post('
63、;userServlet.action',{'username':val,'cmd':'checkUserName'},function(result){</p><p> if(result=="true"){</p><p> $("#unamemsg").html('<i
64、><font color=red>賬號(hào)已經(jīng)存在!</font></i>');</p><p> unameFlag = false;</p><p><b> }else{</b></p><p> $("#unamemsg").html('<i>&
65、lt;font color=blue>該賬戶可用</font></i>');</p><p> unameFlag = true;</p><p><b> }</b></p><p><b> });</b></p><p> 密碼強(qiáng)度檢測(cè)是利用正則表
66、達(dá)式和css實(shí)現(xiàn)</p><p> $("#password").keyup(function(){</p><p> var val = $(this).val();</p><p> if(val.length<3 || val.length>10){</p><p> $("#pwdms
67、g").html('<i><font color=red>密碼長(zhǎng)度為3-10位!</font></i>');</p><p> pwdFlag = false;</p><p><b> }</b></p><p><b> else{</b>
68、</p><p> $("#pwdmsg").html('');</p><p> var digit = /[0-9]+/; //數(shù)字</p><p> var letter = /[a-zA-Z]+/; //字母</p><p> var special = /[\-~!@#$%^&am
69、p;*]+/; //特殊字符</p><p> if(!(digit.test(val) && letter.test(val))){</p><p> $("#pwdmsg1").css("display","block");</p><p><b> }else{<
70、/b></p><p> $("#pwdmsg1").css("display","none");</p><p><b> }</b></p><p> if(digit.test(val) && letter.test(val) && !
71、special.test(val)){</p><p> $("#pwdmsg1").css("display","block");</p><p> $("#pwdmsg2").css("display","block");</p><p>
72、<b> }else{</b></p><p> $("#pwdmsg2").css("display","none");</p><p><b> }</b></p><p> if(digit.test(val) && letter.t
73、est(val) && special.test(val)){</p><p> $("#pwdmsg1").css("display","block");</p><p> $("#pwdmsg2").css("display","block");&
74、lt;/p><p> $("#pwdmsg3").css("display","block");</p><p><b> }else{</b></p><p> $("#pwdmsg3").css("display","none&q
75、uot;);</p><p><b> }</b></p><p> pwdFlag = true;</p><p><b> }</b></p><p><b> });</b></p><p> 使用功能點(diǎn):賬號(hào)異步驗(yàn)證如圖4-13,密碼強(qiáng)
76、度動(dòng)態(tài)檢測(cè)如圖4-14</p><p> 圖4-13 賬號(hào)異步校驗(yàn)</p><p> 圖4-14 密碼強(qiáng)度動(dòng)態(tài)檢測(cè)</p><p><b> 5 測(cè)試</b></p><p> 5.1 web系統(tǒng)測(cè)試</p><p> 由于web應(yīng)用與用戶直接相關(guān),又通常需要承受長(zhǎng)時(shí)間的大量操作,因此w
77、eb項(xiàng)目的功能和性能都必須經(jīng)過(guò)可靠的驗(yàn)證。這就要經(jīng)過(guò)web項(xiàng)目的全面測(cè)試。Web應(yīng)用程序測(cè)試與其它任何一種類(lèi)型的應(yīng)用程序測(cè)試相比沒(méi)有太大差別。</p><p> web測(cè)試包括界面測(cè)試、功能測(cè)試、性能測(cè)試、可用性測(cè)試。</p><p> 5.1.1 界面測(cè)試</p><p> 界面是軟件與用戶交互的最直接的層,界面的好壞決定用戶對(duì)軟件的第一印象。而且設(shè)計(jì)良好的
78、界面能夠引導(dǎo)用戶自己完成相應(yīng)的操作,起到向?qū)У淖饔?。同時(shí)界面如同人的面孔,具有吸引用戶的直接優(yōu)勢(shì)。設(shè)計(jì)合理的界面能給用戶帶來(lái)輕松愉悅的感受和成功的感覺(jué),相反由于界面設(shè)計(jì)的失敗,讓用戶有挫敗感,再實(shí)用強(qiáng)大的功能都可能在用戶的畏懼與放棄中付諸東流。目前界面的設(shè)計(jì)引起軟件設(shè)計(jì)人員的重視的程度還遠(yuǎn)遠(yuǎn)不夠,直到最近網(wǎng)頁(yè)制作的興起,才受到專家的青睞。而且設(shè)計(jì)良好的界面由于需要具有藝術(shù)美的天賦而遭拒絕。</p><p> 5
79、.1.2 功能測(cè)試</p><p> 功能測(cè)試就是對(duì)產(chǎn)品的各功能進(jìn)行驗(yàn)證,根據(jù)功能測(cè)試用例,逐項(xiàng)測(cè)試,檢查產(chǎn)品是否達(dá)到用戶要求的功能。</p><p> 功能測(cè)試也叫黑盒子測(cè)試或數(shù)據(jù)驅(qū)動(dòng)測(cè)試,只需考慮各個(gè)功能,不需要考慮整個(gè)軟件的內(nèi)部結(jié)構(gòu)及代碼.一般從軟件產(chǎn)品的界面、架構(gòu)出發(fā),按照需求編寫(xiě)出來(lái)的測(cè)試用例,輸入數(shù)據(jù)在預(yù)期結(jié)果和實(shí)際結(jié)果之間進(jìn)行評(píng)測(cè),進(jìn)而提出更加使產(chǎn)品達(dá)到用戶使用的要求。&
80、lt;/p><p> 黑盒測(cè)試試圖發(fā)現(xiàn)以下類(lèi)型的錯(cuò)誤: </p><p> 1)功能錯(cuò)誤或遺漏; </p><p><b> 2)界面錯(cuò)誤; </b></p><p> 3)數(shù)據(jù)結(jié)構(gòu)或外部數(shù)據(jù)庫(kù)訪問(wèn)錯(cuò)誤; </p><p><b> 4)性能錯(cuò)誤; </b></p
81、><p> 5)初始化和終止錯(cuò)誤。</p><p> 5.1.3 性能測(cè)試</p><p> 性能測(cè)試是通過(guò)自動(dòng)化的測(cè)試工具模擬多種正常、峰值以及異常負(fù)載條件來(lái)對(duì)系統(tǒng)的各項(xiàng)性能指標(biāo)進(jìn)行測(cè)試。負(fù)載測(cè)試和壓力測(cè)試都屬于性能測(cè)試,兩者可以結(jié)合進(jìn)行。通過(guò)負(fù)載測(cè)試,確定在各種工作負(fù)載下系統(tǒng)的性能,目標(biāo)是測(cè)試當(dāng)負(fù)載逐漸增加時(shí),系統(tǒng)各項(xiàng)性能指標(biāo)的變化情況。壓力測(cè)試是通過(guò)確定一個(gè)
82、系統(tǒng)的瓶頸或者不能接收的性能點(diǎn),來(lái)獲得系統(tǒng)能提供的最大服務(wù)級(jí)別的測(cè)試。</p><p> 性能測(cè)試在軟件的質(zhì)量保證中起著重要的作用,它包括的測(cè)試內(nèi)容豐富多樣。中國(guó)軟件評(píng)測(cè)中心將性能測(cè)試概括為三個(gè)方面:應(yīng)用在客戶端性能的測(cè)試、應(yīng)用在網(wǎng)絡(luò)上性能的測(cè)試和應(yīng)用在服務(wù)器端性能的測(cè)試。通常情況下,三方面有效、合理的結(jié)合,可以達(dá)到對(duì)系統(tǒng)性能全面的分析和瓶頸的預(yù)測(cè)。</p><p> 5.1.4 可用
83、性測(cè)試</p><p> 可用性測(cè)試是指,讓一群有代表性的用戶嘗試對(duì)產(chǎn)品進(jìn)行典型操作,同時(shí)觀察員和開(kāi)發(fā)人員在一旁觀察,聆聽(tīng),做記錄。該產(chǎn)品可能是一個(gè)網(wǎng)站,軟件,或者其他任何產(chǎn)品,它可能尚未成型。測(cè)試可以是早期的紙上原型測(cè)試,也可以是后期成品的測(cè)試。</p><p><b> 參考文獻(xiàn):</b></p><p> [1] 王志儒.住宅小區(qū)物
84、業(yè)管理[M].中國(guó)建筑工業(yè)出版社,1998,57-58.[2] 沈瑞珠,劉墨玲.物業(yè)智能化管理技術(shù)[M].中國(guó)輕工業(yè)出版社,2001,156-157.</p><p> [3] 莫繼紅.計(jì)算機(jī)在生活小區(qū)物業(yè)管理中的應(yīng)用[J].電腦與信息技術(shù),1997(1): 29-30.</p><p> [4] 趙海林.物業(yè)管理計(jì)算機(jī)化[M].華中師范大學(xué)出版社,1998, 89-92</p
85、><p> [5] Blake Schwendiman.Php4 Developer' s Guide[M].US:McGrawHillProfessional,2000, 171-178.[6] James B.Rishel.HVAC[M].West Chester,Ohio:Systecon Inc:183-191.</p><p> [7]Cay S.Horstmann、G
86、ary Cornell著.陳昊鵬、王浩、姚建平等譯.JAVA2核心技術(shù)[M].機(jī)械工業(yè)出版社,2005,182-183</p><p> [8]Bruce Eckel.Thinking in Java Fourth Edition[M].President,MindView,Inc, 2005,</p><p><b> 22-23</b></p>
87、<p> [9]Nicholas C.Zakas. Professional JavaScript for Web Developers 2nd Edition[M].Wiley Publishing,Inc,2008,67-70</p><p> [10]Hans Bergsten.JavaServer Pages First Edition[M]. O’Reilly Media, Inc .De
88、cemeber 2000,88-93</p><p> [11]劉德明.精典物業(yè)管理方案[M].黃河出版社,2005.2,102-106</p><p> [12]JAVA核心技術(shù)</p><p> [13]閻宏.JAVA與模式[M].電子工業(yè)出版社,2002.10,328-330</p><p><b> 附錄 主要代
89、碼</b></p><p> 利用反射封裝的對(duì)數(shù)據(jù)的增刪改查。</p><p> public Object getCount(String sql, Object[] params) {</p><p> Connection conn = null;</p><p> PreparedStatement pst = n
90、ull;</p><p> ResultSet rs = null;</p><p> Object obj = null;</p><p> conn = DBUtil.getConnection();</p><p> pst = DBUtil.getPreparedStatement(conn, sql);</p>
91、<p><b> try {</b></p><p> if(params!=null){</p><p> for (int i = 0; i < params.length; i++) {</p><p> pst.setObject(i + 1, params[i]);</p><p>&
92、lt;b> }</b></p><p><b> }</b></p><p> rs = pst.executeQuery();</p><p> while(rs.next()){</p><p> obj = rs.getObject(1);</p><p><
93、;b> }</b></p><p> }catch(Exception e){</p><p> e.printStackTrace();</p><p><b> }finally{</b></p><p> DBUtil.closeAll(rs, pst, conn);</p>
94、<p><b> }</b></p><p> return obj;</p><p><b> }</b></p><p><b> @Override</b></p><p> public Object getRowFields(String sq
95、l, Object[] params, Class clazz) {</p><p> List list = getRowsFields(sql,params,clazz);</p><p> Object obj = null;</p><p> if(list!=null && list.size()>0){</p>
96、<p> obj = list.get(0);</p><p><b> }</b></p><p> return obj;</p><p><b> }</b></p><p><b> @Override</b></p><p>
97、; public List getRowsFields(String sql, Object[] params, Class clazz) {</p><p> Connection conn = null;</p><p> PreparedStatement pst = null;</p><p> ResultSet rs = null;</p&
98、gt;<p> List list = new ArrayList();</p><p> conn = DBUtil.getConnection();</p><p> pst = DBUtil.getPreparedStatement(conn, sql);</p><p><b> try {</b></p&g
99、t;<p> if(params!=null){</p><p> for (int i = 0; i < params.length; i++) {</p><p> pst.setObject(i + 1, params[i]);</p><p><b> }</b></p><p>&l
100、t;b> }</b></p><p> rs = pst.executeQuery();</p><p> ResultSetMetaData rsmd = rs.getMetaData();</p><p> while(rs.next()){</p><p> Object obj = clazz.newIns
101、tance();</p><p> for(int i=0;i<rsmd.getColumnCount();i++){</p><p> String fieldName = rsmd.getColumnName(i+1);</p><p> Field f = clazz.getDeclaredField(fieldName);</p>
102、<p> Method m = clazz.getDeclaredMethod(BeanUtil.getSetter(fieldName), f.getType());</p><p> Object v = rs.getObject(fieldName);</p><p> if(v!=null){</p><p> if("int&q
103、uot;.equals(f.getType().getName())){</p><p> m.invoke(obj, Integer.parseInt(v+""));</p><p><b> }else{</b></p><p> m.invoke(obj, v);</p><p><
104、b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> list.add(obj);</p><p><b> }</b></p><p> } catch (Exce
105、ption e) {</p><p> e.printStackTrace();</p><p><b> }finally{</b></p><p> DBUtil.closeAll(rs, pst, conn);</p><p><b> }</b></p><p&g
106、t; return list;</p><p><b> }</b></p><p><b> @Override</b></p><p> public int updateData(String sql, Object[] params) {</p><p> Connection c
107、onn = null;</p><p> PreparedStatement pst = null;</p><p> int number = 1;</p><p> conn = DBUtil.getConnection();</p><p> pst = DBUtil.getPreparedStatement(conn, sql
108、);</p><p><b> try {</b></p><p> if(params!=null){</p><p> for (int i = 0; i < params.length; i++) {</p><p> pst.setObject(i + 1, params[i]);</p>
109、;<p><b> }</b></p><p><b> }</b></p><p> pst.executeUpdate();</p><p> }catch(Exception e){</p><p> e.printStackTrace();</p>&l
110、t;p> number = 0;</p><p><b> }finally{</b></p><p> DBUtil.close(pst, conn);</p><p><b> }</b></p><p> return number;</p><p>&
111、lt;b> }</b></p><p> public static void main(String[] args) {</p><p> String name = "haha111";</p><p> BaseDao bs= new BaseDaoImpl();</p><p> Res
112、ident rs=(Resident) new BaseDaoImpl().getRowFields("select * from t_resident ",null,Resident.class );</p><p> System.out.println(rs.getBuild_id());</p><p> /*List list = new BaseDaoI
113、mpl().getRowsFields("select * from t_resident",null ,Resident.class);</p><p> for (Iterator iterator = list.iterator(); iterator.hasNext();) {</p><p> Resident object = (Resident) it
114、erator.next();</p><p> System.out.println(object.getRsdname());</p><p><b> }*/</b></p><p> /*Resident r =(Resident)new BaseDaoImpl().getRowFields("select * from
115、t_resident where age=? and degree=?", new Object[]{33,7}, Resident.class);</p><p> System.out.println(r.getRsdname());*/</p><p> /*Object obj = new BaseDaoImpl().getCount("select cou
116、nt(*) from t_resident",null);</p><p> Number n = (Number)obj;</p><p> System.out.println(n.intValue());*/</p><p> //int number = new BaseDaoImpl().updateData("delete
117、from t_resident where id=?",new Object[]{771});</p><p> //System.out.println(number);</p><p> //new BaseDaoImpl().saveOrUpdate(new Build());</p><p> /*for(int i=30;i<
118、300;i++){</p><p> Resident r = new Resident("rsd"+i, 0, "1234567890"+i,(i+2),</p><p> "12345678987654321"+i);</p><p> new BaseDaoImpl().save(r);<
119、/p><p><b> }*/</b></p><p> /*GooglePageUtil page = new BaseDaoImpl().findByGooglePage("select * from t_resident where gender=?", new Object[]{1},Resident.class ,</p>
120、<p> 1, 10, 10); */</p><p><b> }</b></p><p><b> @Override</b></p><p> public int save(Object obj) {</p><p> Class clazz = obj.getClass
121、();</p><p> String sql = "insert into t_"+clazz.getSimpleName().toLowerCase()+" values(null";</p><p> Field[] fs = clazz.getDeclaredFields();</p><p> List lis
122、t = new ArrayList();</p><p> for(int i=1;i<fs.length;i++){</p><p> sql += ",?"; </p><p> String fieldName = fs[i].getName();</p><p> Method m = null;&l
123、t;/p><p><b> try {</b></p><p> m = clazz.getDeclaredMethod(BeanUtil.getGetter(fieldName));</p><p> list.add(m.invoke(obj));</p><p> } catch ( Exception e)
124、{</p><p> e.printStackTrace();</p><p><b> } </b></p><p><b> }</b></p><p> sql += ")";</p><p> System.out.println(sq
125、l);</p><p> return this.updateData(sql, list.toArray());</p><p><b> }</b></p><p><b> @Override</b></p><p> public int update(Object obj) {&l
126、t;/p><p> Class clazz = obj.getClass();</p><p> String sql = "update t_"+clazz.getSimpleName().toLowerCase()+" set ";</p><p> Field[] fs = clazz.getDeclaredField
127、s();</p><p> List list = new ArrayList();</p><p> for(int i=1;i<fs.length;i++){</p><p> sql += fs[i].getName()+"=?,"; </p><p> String fieldName = fs[i]
128、.getName();</p><p> Method m = null;</p><p><b> try {</b></p><p> m = clazz.getDeclaredMethod(BeanUtil.getGetter(fieldName));</p><p> list.add(m.invoke(
129、obj));</p><p> } catch ( Exception e) {</p><p> e.printStackTrace();</p><p><b> } </b></p><p><b> }</b></p><p> sql = sql.sub
130、string(0,sql.length()-1);</p><p> sql += " where id =?";</p><p> Method getId = null;</p><p><b> try {</b></p><p> getId = clazz.getDeclaredMe
溫馨提示
- 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ù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于java和mysql的物業(yè)管理系統(tǒng)論文-修改(含源文件)畢業(yè)設(shè)計(jì)(論文)
- 基于java的酒店管理系統(tǒng)論文(含源文件)
- 基于java的酒店管理系統(tǒng)論文(含源文件)
- 基于java的酒店管理系統(tǒng)畢業(yè)設(shè)計(jì)論文(含源文件)
- 基于java的酒店管理系統(tǒng)畢業(yè)設(shè)計(jì)論文(含源文件)
- 基于java的教務(wù)管理系統(tǒng)開(kāi)題報(bào)告(含源文件)
- 基于java手機(jī)游戲論文(含源文件)
- 基于java藥品管理系統(tǒng)畢業(yè)設(shè)計(jì)論文(含源文件)
- 基于java的圖書(shū)管理系統(tǒng)的開(kāi)發(fā)(含源文件)
- 基于javaweb的在線圖書(shū)訂購(gòu)與打印管理系統(tǒng)論文(含源文件)
- 基于java超市賬單管理系統(tǒng)畢業(yè)設(shè)計(jì)(含源文件)
- java學(xué)生學(xué)籍管理系統(tǒng)大學(xué)設(shè)計(jì)(含源文件)
- 小區(qū)物業(yè)管理系統(tǒng)論文.doc
- 小區(qū)物業(yè)管理系統(tǒng)論文.doc
- 基于java的bbs論壇設(shè)計(jì)畢業(yè)論文(含源文件)
- 基于java火車(chē)旅客信息網(wǎng)上管理系統(tǒng)(含源文件)畢業(yè)設(shè)計(jì)論文
- 基于java小區(qū)物業(yè)管理系統(tǒng)
- 基于java的物業(yè)管理系統(tǒng)設(shè)計(jì)
- 基于java技術(shù)的網(wǎng)上書(shū)店開(kāi)發(fā)的論文(含源文件)
- 基于Java的小區(qū)物業(yè)管理系統(tǒng).pdf
評(píng)論
0/150
提交評(píng)論