版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 基于JAVA的無(wú)線人員定位管理軟件設(shè)計(jì)</p><p><b> 摘 要</b></p><p> 近年來(lái),隨著監(jiān)獄在押人員的不斷上升,僅依靠傳統(tǒng)的視頻監(jiān)控或門(mén)禁報(bào)警系統(tǒng)已顯得獨(dú)木難支,不能做到全方位、多功能的監(jiān)控。因此 ,提高看守所安防管理水平,建立綜合高效的信息監(jiān)管平臺(tái)已成必然趨勢(shì)。</p><p> 本課題研
2、究的主要內(nèi)容是設(shè)計(jì)一個(gè)無(wú)線人員定位管理軟件,此軟件具有對(duì)看守所在押人員的基本信息的增加、查詢、刪除、修改,人員路徑再現(xiàn)以及用戶帳戶管理等功能。本軟件以流行的Java語(yǔ)言為開(kāi)發(fā)語(yǔ)言,以開(kāi)源的Eclipse為開(kāi)發(fā)開(kāi)臺(tái),以免費(fèi)的MySQL作為后臺(tái)開(kāi)發(fā)數(shù)據(jù)庫(kù),并利用引路蜂地圖開(kāi)發(fā)包實(shí)現(xiàn)人員定位功能的一個(gè)跨平臺(tái)的人員管理系統(tǒng)。</p><p> 本文首先對(duì)Java程序編程的基礎(chǔ)知識(shí),JDBC數(shù)據(jù)庫(kù)技術(shù),圖形界面開(kāi)發(fā)技術(shù),
3、引路蜂地圖開(kāi)發(fā)包等軟件開(kāi)發(fā)的相關(guān)技術(shù)做出了簡(jiǎn)單的介紹。在此基礎(chǔ)之上,介紹了本課題的創(chuàng)新點(diǎn),給出了軟件的總體設(shè)計(jì)方案和各功能模塊的實(shí)現(xiàn)。</p><p> 關(guān)鍵詞:無(wú)線定位;Java;引路蜂;JDBC;Eclipse;跨平臺(tái)</p><p><b> Abstract</b></p><p> In recent years, with t
4、he number of prisoners on the rise, we can not only relay on the traditional video surveillance or access control alarm system for they cannot do the all-round, multi-function monitoring. Therefore, it has become an inev
5、itable trend to establish a comprehensive and efficient monitoring platform to improve the detention center security management level.</p><p> The main content of this research project is to design a wirele
6、ss positioning management software. The software has the function of add, query, delete, modify and export the basic information held in detention center. What’s more, it also has user account management function. The cr
7、oss-platform personnel management system is a software that uses Java as a develop language, the open source Eclipse as Integrated Development Environment, the free MySQL as development database, and the Guidebee Map <
8、;/p><p> First I make ??a brief introduction to Java programming, the JDBC database technology, Graphical User Interface programing, and Guidebee Map development technology. On this basis, I give the overall d
9、esign of the software and the design of each functional module.</p><p> Key words: wireless positing; Java; Guidebee Map; JDBC; Eclipse; cross-platform</p><p><b> 目 錄</b></p>
10、;<p><b> 摘 要</b></p><p><b> Abstract</b></p><p><b> 第1章 緒論1</b></p><p> 1.1 課題意義及目的1</p><p> 1.2 課題主要研究的內(nèi)容1</p>
11、;<p> 第2章 軟件開(kāi)發(fā)相關(guān)技術(shù)介紹3</p><p> 2.1 Java程序編程基礎(chǔ)3</p><p> 2.1.1 Java的起源及其發(fā)展3</p><p> 2.1.2 Java程序運(yùn)行原理3</p><p> 2.2 Eclipse開(kāi)發(fā)平臺(tái)5</p><p> 2.3數(shù)據(jù)
12、庫(kù)技術(shù)6</p><p> 2.2.1 SQL語(yǔ)言概述6</p><p> 2.2.2 JDBC模型7</p><p> 2.2.3 JDBC的工作方式8</p><p> 2.2.4 MySQL數(shù)據(jù)庫(kù)10</p><p> 2.4 圖形界面開(kāi)發(fā)技術(shù)10</p><p>
13、 2.4.1 Swing組件類的層次11</p><p> 2.4.2 Swing事件處理機(jī)制13</p><p> 2.4.3 Swing中的布局管理13</p><p> 2.4.4 設(shè)置應(yīng)用程序外觀16</p><p> 2.5 引路蜂電子地圖開(kāi)發(fā)技術(shù)17</p><p> 2.5.1引路蜂地
14、圖API概述17</p><p> 2.5.2地圖開(kāi)發(fā)包類的定義18</p><p> 2.5.3地圖對(duì)象類的層次關(guān)系20</p><p> 2.5.4地圖圖片讀取類層次關(guān)系21</p><p> 2.5.5圖形子系統(tǒng)22</p><p> 2.5.6地圖配置24</p><p
15、> 第3章 系統(tǒng)總體設(shè)計(jì)25</p><p> 3.1系統(tǒng)功能描述25</p><p> 3.2軟件總體設(shè)計(jì)26</p><p> 3.2.1 軟件總體結(jié)構(gòu)圖26</p><p> 3.2.2系統(tǒng)開(kāi)發(fā)原則26</p><p> 3.3系統(tǒng)的通信協(xié)議27</p><p&g
16、t; 第4章 軟件各模塊的實(shí)現(xiàn)28</p><p> 4.1用戶登錄的設(shè)計(jì)28</p><p> 4.2在押人員管理模塊設(shè)計(jì)28</p><p> 4.2.1查詢?cè)谘喝藛T信息模塊29</p><p> 4.2.2新增在押人員信息模塊30</p><p> 4.3.3修改在押人員基本信息模塊30&
17、lt;/p><p> 4.3.4刪除在押人員信息模塊31</p><p> 4.3.5導(dǎo)出在押人員信息模塊32</p><p> 4.2.6顯示在押人員路徑模塊32</p><p> 4.3用戶管理模塊設(shè)計(jì)33</p><p> 4.3.1增加帳戶模塊34</p><p> 4
18、.3.2刪除帳戶模塊34</p><p> 4.3.3修改帳戶密碼模塊35</p><p> 4.4數(shù)據(jù)庫(kù)中表的設(shè)計(jì)35</p><p> 4.5本章小結(jié)38</p><p> 第5章 項(xiàng)目創(chuàng)新點(diǎn)39</p><p> 5.1 軟件的平臺(tái)無(wú)關(guān)性39</p><p> 5.
19、2 基于桌面系統(tǒng)的Java地圖應(yīng)用39</p><p> 5.3 采用最新的地圖顯示技術(shù)39</p><p> 第6章 結(jié)束語(yǔ)39</p><p><b> 參考文獻(xiàn)41</b></p><p><b> 致 謝42</b></p><p><b&g
20、t; 第1章 緒論</b></p><p> 1.1 課題意義及目的</p><p> 近年來(lái),雖然監(jiān)控技術(shù)高速發(fā)展,但看守所中在押人員的狡詐意識(shí)也逐漸增強(qiáng),犯罪種類有增無(wú)減,常常出現(xiàn)聚眾斗毆、自殘、逃跑等現(xiàn)象,因此,提高看守所安防管理水平,建立綜合高效的信息監(jiān)管平臺(tái)已成必然趨勢(shì)[1]。</p><p> 目前,已有的安防系統(tǒng)大都只能實(shí)現(xiàn)對(duì)定點(diǎn)人
21、群的定位,無(wú)法對(duì)移動(dòng)人群進(jìn)行定位,因此對(duì)于出逃在外的在押人員,監(jiān)管人員無(wú)法判斷其出逃方向,更無(wú)法獲得其出逃路線,不利于高效地追捕。因此,設(shè)計(jì)一套無(wú)線人員定位管理系統(tǒng),可以解決移動(dòng)人群的追蹤定位問(wèn)題,具有廣泛的社會(huì)需求和廣闊的市場(chǎng)前景。</p><p> 在信息技術(shù)不斷發(fā)展的今天,利用無(wú)線人員定位管理系統(tǒng),能夠有效地監(jiān)控高危在押人員,防止在押人員的出逃,追查及跟進(jìn)暴力事件的發(fā)生,最大限度的保障監(jiān)管人員和在押人員的
22、人身安全,并促進(jìn)監(jiān)獄安全技術(shù)防范系統(tǒng)向集成化、網(wǎng)絡(luò)化、智能化的進(jìn)一步發(fā)展,具有一定的創(chuàng)新意義及實(shí)用價(jià)值。</p><p> 1.2 課題主要研究的內(nèi)容</p><p> 本課題以 Windows XP為開(kāi)發(fā)平臺(tái),以Java為開(kāi)發(fā)語(yǔ)言,以Eclipse作為集成開(kāi)發(fā)工具,MySQL作為后臺(tái)開(kāi)發(fā)數(shù)據(jù)庫(kù)。本文從上位機(jī)軟件出發(fā),利用面向?qū)ο蟆?shù)據(jù)庫(kù)、Swing、多線程等技術(shù),采用引路蜂的J2SE
23、地圖開(kāi)發(fā)包,設(shè)計(jì)并實(shí)現(xiàn)無(wú)線人員定位管理系統(tǒng)軟件。此軟件具有看守所在押人員的基本信息閱覽、新增、查詢、刪除、修改,人員路徑再現(xiàn)以及用戶帳戶管理的功能。通過(guò)這個(gè)軟件查看每個(gè)在押人員的基本信息,并進(jìn)行修改,并且可以結(jié)合引路蜂地圖,查看在押人員的行進(jìn)路線。為了提升系統(tǒng)的安全性,所有用戶只有在登錄后才可以使用本系統(tǒng)。同時(shí),為了方便不同的人員對(duì)在押人員進(jìn)行管理,軟件中設(shè)置了帳戶管理的功能。</p><p> 本論文的主要研
24、究?jī)?nèi)容如下:</p><p> (l)學(xué)習(xí)和掌握J(rèn)ava編程語(yǔ)言、Eclipse開(kāi)發(fā)平臺(tái)、JDBC數(shù)據(jù)庫(kù)技術(shù)、Swing應(yīng)用程序開(kāi)發(fā)包和引路蜂地圖開(kāi)發(fā)包的使用。</p><p> (2)分析整個(gè)無(wú)線定位管理軟件系統(tǒng)的總體框架及其功能特點(diǎn)。</p><p> (3)根據(jù)用戶需求設(shè)計(jì)出無(wú)線定位管理軟件系統(tǒng),給管理人員提供可視化界面,實(shí)現(xiàn)對(duì)看守所在押人員的基本信息的
25、閱覽、新增、查詢、刪除、修改,人員路徑再現(xiàn)等功能。</p><p> (4)對(duì)軟件進(jìn)行現(xiàn)場(chǎng)測(cè)試,以驗(yàn)證設(shè)計(jì)的可行性、準(zhǔn)確性和優(yōu)越性。</p><p> 第2章 軟件開(kāi)發(fā)相關(guān)技術(shù)介紹</p><p> 2.1 Java程序編程基礎(chǔ)</p><p> 2.1.1 Java的起源及其發(fā)展</p><p> Java
26、是Sun公司開(kāi)發(fā)出來(lái)的一套編程語(yǔ)言,最早來(lái)源于一個(gè)叫Green的項(xiàng)目。這個(gè)項(xiàng)目原來(lái)的目的是為家用電子消費(fèi)產(chǎn)品開(kāi)發(fā)一個(gè)分布式的代碼系統(tǒng),這樣就可以通過(guò)網(wǎng)絡(luò)對(duì)家用電器進(jìn)行控制。開(kāi)始Sun公司的工程師準(zhǔn)備采用C++[2],但由于C++過(guò)于復(fù)雜,安全性差,最后決定基于C++開(kāi)發(fā)一種新語(yǔ)言(Oak語(yǔ)言)。Oak是一種用于網(wǎng)絡(luò) ,精巧而安全的語(yǔ)言,Sun公司曾以此投標(biāo)過(guò)一個(gè)交互式電視項(xiàng)目,結(jié)果被SGI打敗。恰巧此時(shí)Mark Andreessen開(kāi)發(fā)
27、的Mosaic和Netscape啟發(fā)了Oak的成員,Sun的工程師們用Java編制了HotJava瀏覽器,觸發(fā)了Sun進(jìn)軍Internet[3]。</p><p> Java語(yǔ)言發(fā)展到至今經(jīng)歷了一系列的過(guò)程,Java在1995年5月23日推出了JDK 1.0版本,此版本標(biāo)志著Java正式進(jìn)軍Internet的開(kāi)始。在1998年,Sun公司推出了JDK 1.2開(kāi)發(fā)包,該版本加入了大量的輕量級(jí)組件,從此以后Java
28、正式被命名為JDK 2。在此之后,Sun公司也陸續(xù)發(fā)布了一系列的Java開(kāi)發(fā)包版本,目前最新版本的JDK為JDK 7[4]。</p><p> 2.1.2 Java程序運(yùn)行原理</p><p> Java中有兩類應(yīng)用程序,一類是有自己獨(dú)立運(yùn)行入口點(diǎn)的Java應(yīng)用程序,另一類是嵌入在Web頁(yè)面中由Web瀏覽器來(lái)控制運(yùn)行的Java小程序(Applet[5])。在運(yùn)行時(shí),它們都需要Java運(yùn)
29、行系統(tǒng)的支持,對(duì)于Java運(yùn)行程序,Java運(yùn)行系統(tǒng)一般是指Java解析器;而對(duì)于Applet, Java運(yùn)行系統(tǒng)一般是指運(yùn)行Applet的與Java相兼容的Web瀏覽器,并且其中包含了支持Applet運(yùn)行的環(huán)境。</p><p> Java運(yùn)行系統(tǒng)的功能是對(duì)字節(jié)碼進(jìn)行解析和執(zhí)行,其工作過(guò)程可以分為以下三步。</p><p> ?。?)由類裝載器完成字節(jié)碼的裝載。在裝載過(guò)程中,程序運(yùn)行時(shí)
30、所需要的所有代碼都被裝載。完成后,節(jié)節(jié)碼中便保留了地址的符號(hào)引用信息,運(yùn)行系統(tǒng)通過(guò)建立的地址符號(hào)引用信息與內(nèi)存之間的對(duì)照來(lái)確定程序的內(nèi)存分配。</p><p> ?。?)由字節(jié)碼檢驗(yàn)器對(duì)字節(jié)碼進(jìn)行安全性檢查。這種檢查可以排除字節(jié)碼中可能存在的違反訪問(wèn)權(quán)限,不規(guī)范數(shù)據(jù)類型以及非法調(diào)用等問(wèn)題。</p><p> ?。?)字節(jié)碼的翻譯和執(zhí)行。Java字節(jié)碼的運(yùn)行可能有兩種方式,一種是通過(guò)代碼生成
31、器,先將字節(jié)碼翻譯成適用于本系統(tǒng)的機(jī)器碼,然后再送到硬件去執(zhí)行,這是一種編譯性工作方式。另一種是通過(guò)解析器將字節(jié)碼翻譯成機(jī)器碼,然后由即時(shí)運(yùn)行部件將機(jī)器碼送到硬件去執(zhí)行,這是一種解析性工作方式。Java運(yùn)行系統(tǒng)一般采用第二種工作方式,只有對(duì)那些運(yùn)行速度要求較高,才采用編譯性工作方式,這時(shí)就需要使用特定的代碼生成器來(lái)完成編譯,從而保證Java程序代碼的高性能[6]。</p><p> 2.2 Eclipse開(kāi)發(fā)平
32、臺(tái)</p><p> Eclipse是一個(gè)開(kāi)放源代碼的,基于Java的可擴(kuò)展開(kāi)發(fā)平臺(tái),它通過(guò)插件組件構(gòu)成開(kāi)發(fā)環(huán)境。Eclipse附帶了一個(gè)標(biāo)準(zhǔn)的插件集,其中最著名的插件當(dāng)屬Java開(kāi)發(fā)工具(Java Development Tools,JDT)[7],其界面的主界面如圖2-1所示。最初主要用來(lái)Java語(yǔ)言開(kāi)發(fā),但是目前亦有人通過(guò)外掛程式使其作為其他計(jì)算機(jī)語(yǔ)言比如C++和Python的開(kāi)發(fā)工具。Eclipse本身
33、只是一個(gè)框架平臺(tái),但是眾多外掛程式的支持使得Eclipse擁有其他功能相對(duì)固定的IDE軟體很難具有的靈活性。許多軟體開(kāi)發(fā)商以Eclipse為框架開(kāi)發(fā)自己的IDE。Eclipse最初由IBM公司開(kāi)發(fā),2001年11月貢獻(xiàn)給開(kāi)源社區(qū),現(xiàn)在它由非營(yíng)利軟體供應(yīng)商聯(lián)盟Eclipse基金會(huì)(Eclipse Foundation)管理[8]。 </p><p> 圖2-1 Eclipse程序主界面</p>&l
34、t;p> 在用最新版本的Eclipse開(kāi)發(fā)桌面應(yīng)用程序時(shí),既可以直接編寫(xiě)代碼來(lái)設(shè)計(jì)應(yīng)用程序界面,也可以使用Eclipse的Visual Swing Designer來(lái)進(jìn)行界面的可視化設(shè)計(jì)。Visual Swing Designer是一個(gè)Swing界面設(shè)計(jì)工具插件 ,代碼的生成和解析不需要依賴于form文件,而且生成的代碼可讀性很好,支持代碼跟界面實(shí)時(shí)的切換。它還支持表格和樹(shù)的可視化設(shè)計(jì),程序員在設(shè)計(jì)表格和樹(shù)模型時(shí),不需要編寫(xiě)復(fù)雜
35、的代碼,直接從采用界面操作便可以生成表格和樹(shù)的數(shù)據(jù)模型代碼。在一般情況下,可以通過(guò)Visual Swing Designer來(lái)設(shè)計(jì)程序的基本界面,再通過(guò)用戶定制一些代碼往往能更快地進(jìn)行應(yīng)用程序的快速開(kāi)發(fā)。</p><p> Eclipse的使用大大減少了程序員開(kāi)發(fā)程序的工作量,尤其是在程序界面設(shè)計(jì)方面。同時(shí)擁有對(duì)代碼錯(cuò)誤信息的實(shí)時(shí)提示功能,當(dāng)程序代碼出現(xiàn)錯(cuò)誤時(shí),Eclipse會(huì)在代碼左邊顯示出錯(cuò)誤提示,點(diǎn)擊它能
36、夠幫助程序員自動(dòng)更正錯(cuò)誤。</p><p><b> 2.3數(shù)據(jù)庫(kù)技術(shù)</b></p><p> 程序設(shè)計(jì)中離不開(kāi)數(shù)據(jù)庫(kù)的支持,每個(gè)程序的設(shè)計(jì)都是使用數(shù)據(jù)庫(kù)保存數(shù)據(jù)。 JDBC是Java程序連接和存取數(shù)據(jù)庫(kù)的應(yīng)用程序接口,是Java核心API的一部分。JDBC使程序員能夠利用當(dāng)前最新的數(shù)據(jù)庫(kù)特征,如同時(shí)連接多個(gè)數(shù)據(jù)庫(kù)等。JDBC支持靜態(tài)和動(dòng)態(tài)的SQL語(yǔ)句(在運(yùn)行時(shí)
37、組建查詢和更新語(yǔ)句)。JDBC最大的特點(diǎn)是無(wú)論后臺(tái)是何種數(shù)據(jù)庫(kù),對(duì)于Java程序員而言,它的工作方式完全相同。JDBC為許多不同的數(shù)據(jù)庫(kù)連接模塊的前端提供了統(tǒng)一的接口,這樣就不用為連接不同的數(shù)據(jù)庫(kù)而煩惱了。當(dāng)需要為程序修改數(shù)據(jù)庫(kù)時(shí),程序基本上只要修改在代碼中修改數(shù)據(jù)庫(kù)的驅(qū)動(dòng),URL,用戶名,密碼,其他的地方基本上是沒(méi)有發(fā)生變化的。</p><p> 2.3.1 SQL語(yǔ)言概述</p><p&
38、gt; SQL(Structure Query Language,結(jié)構(gòu)化查詢語(yǔ)言),是一個(gè)功能強(qiáng)大的數(shù)據(jù)庫(kù)語(yǔ)言。SQL語(yǔ)言的主要功能就是同各種數(shù)據(jù)庫(kù)建立聯(lián)系,進(jìn)行溝通[9]。</p><p> 20世紀(jì)80年代初,美國(guó)國(guó)家標(biāo)準(zhǔn)局(ANSI)開(kāi)始著手定制SQL標(biāo)準(zhǔn),最早的ANSI標(biāo)準(zhǔn)于1986年完成,叫做SQL-86。標(biāo)準(zhǔn)的出臺(tái)使SQL作為標(biāo)準(zhǔn)關(guān)系數(shù)據(jù)庫(kù)語(yǔ)言的地位得到了加強(qiáng)。SQL標(biāo)準(zhǔn)目前已幾經(jīng)修改,更趨完善。
39、</p><p> 正是由于SQL語(yǔ)言的標(biāo)準(zhǔn)化,所以大多數(shù)關(guān)系型數(shù)據(jù)庫(kù)都支持SQL語(yǔ)言,它已經(jīng)發(fā)展成為多種平臺(tái)進(jìn)行交互操作的底層會(huì)話語(yǔ)言。</p><p> SQL語(yǔ)句主要可以劃分為以下3個(gè)類別。</p><p> (1)DDL(Data Definition Languages)語(yǔ)句:數(shù)據(jù)定義語(yǔ)言,這些語(yǔ)句定義了不同的數(shù)據(jù)段、數(shù)據(jù)庫(kù)、表列、索引等數(shù)據(jù)庫(kù)對(duì)象的
40、定義。常用的語(yǔ)句關(guān)鍵字主要包括create、drop等。</p><p> ?。?)DML(Date Manipulation Language)語(yǔ)句:數(shù)據(jù)操縱語(yǔ)句,用于添加、刪除、更新和查詢數(shù)據(jù)庫(kù)記錄,并檢查數(shù)據(jù)完整性。常用的語(yǔ)句關(guān)鍵字主要包括insert、delete、update和select等。</p><p> ?。?)DCL(Data Control Language)語(yǔ)句:數(shù)
41、據(jù)控制語(yǔ)句,用于控制不同數(shù)據(jù)段直接的許可和訪問(wèn)級(jí)別的語(yǔ)句。這些語(yǔ)句定義了數(shù)據(jù)庫(kù)、表、字段、用戶的訪問(wèn)權(quán)限和安全級(jí)別。</p><p> 2.3.2 JDBC模型</p><p> JDBC由 編 程 語(yǔ) 言 編 寫(xiě) 的 類 及 接 口 組 成,同時(shí)它也為程序開(kāi)發(fā)人員提供了一組用于實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)訪問(wèn)的API,并支持SQL語(yǔ)言。利用JDBC可以將Java代碼連接到Oracle,SQL Ser
42、ver,MySQL等數(shù)據(jù)庫(kù),從而實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)中數(shù)據(jù)的相關(guān)操作[10]。</p><p> JDBC 為數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)人員和數(shù)據(jù)庫(kù)前臺(tái)工具開(kāi)發(fā)人員提供了一種標(biāo)準(zhǔn)的應(yīng)用程序設(shè)計(jì)接口,使開(kāi)發(fā)人員可以用純 Java 語(yǔ)言編寫(xiě)完整的數(shù)據(jù)庫(kù)應(yīng)用程序 用 JDBC 寫(xiě)的程序能夠自動(dòng)地將 SQL 語(yǔ)句傳送給相應(yīng)的數(shù)據(jù)庫(kù)管理系統(tǒng)。不但如此,使用 Java 編寫(xiě)的應(yīng)用程序可以在任何支持Java的平臺(tái)上運(yùn)行,不必在不同的平臺(tái)上編寫(xiě)不
43、同的應(yīng)用程序[11]。</p><p> JDBC由兩層組成,上面一層是JDBC API,下面一層是JDBC驅(qū)動(dòng)程序API。JDBC API負(fù)責(zé)與JDBC管理器驅(qū)動(dòng)程序API進(jìn)行通信,將各個(gè)不同的SQL語(yǔ)句發(fā)送給它。驅(qū)動(dòng)程序管理器與實(shí)際連接到數(shù)據(jù)庫(kù)的第三方驅(qū)動(dòng)程序進(jìn)行通信,并且返回查詢的信息,或者執(zhí)行由查詢規(guī)定的操作[12]。它主要由以下四個(gè)部分組成。</p><p><b>
44、 (l)Java程序</b></p><p> Java程序包括應(yīng)用程序,Applet和Servlet等,這些類型的程序都可以利用JDBC方法完成對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)和操作。完成的主要任務(wù)有:請(qǐng)求與數(shù)據(jù)庫(kù)建立連接、向數(shù)據(jù)庫(kù)發(fā)送SQL請(qǐng)求,為結(jié)果集定義存儲(chǔ)應(yīng)用和數(shù)據(jù)類型、查詢結(jié)果、處理錯(cuò)誤、遞交及關(guān)閉等操作。</p><p> (2)JDBC驅(qū)動(dòng)程序管理器</p>
45、<p> JDBC驅(qū)動(dòng)管理器能夠動(dòng)態(tài)地管理和維護(hù)數(shù)據(jù)庫(kù)查詢所需要的所有廠商或第三方所提供的驅(qū)動(dòng)程序?qū)ο螅瑢?shí)現(xiàn)Java任務(wù)與特定驅(qū)動(dòng)程序的連接,從而體現(xiàn)JDBC與驅(qū)動(dòng)無(wú)關(guān)這一特點(diǎn)。它完成的任務(wù)有為:為特定的數(shù)據(jù)庫(kù)選擇驅(qū)動(dòng)程序,處理JDBC初始化調(diào)用,為每個(gè)驅(qū)動(dòng)程序提供JDBC功能的入口,為JDBC調(diào)用執(zhí)行參數(shù)。</p><p><b> (3)驅(qū)動(dòng)程序</b></p>
46、<p> 驅(qū)動(dòng)程序一般由數(shù)據(jù)庫(kù)廠商或者第三方提供,它由JDBC方法調(diào)用,向特定的數(shù)據(jù)庫(kù)發(fā)送SQL請(qǐng)求,并為Java程序取得結(jié)果。驅(qū)動(dòng)程序可以完成下列任務(wù):建立與數(shù)據(jù)庫(kù)的連接,向數(shù)據(jù)庫(kù)發(fā)送請(qǐng)求等。</p><p><b> (4)數(shù)據(jù)庫(kù)</b></p><p> 數(shù)據(jù)庫(kù)是指Java程序所需要的數(shù)據(jù)庫(kù),如MySQL,SQL Server,Oracle。
47、在本課題中,使用了MySQL數(shù)據(jù)庫(kù)。</p><p> 2.3.3 JDBC的工作方式</p><p> JDBC功能強(qiáng)大非常強(qiáng)大,但使用簡(jiǎn)單。無(wú)論連接何種數(shù)據(jù)庫(kù),只要做好下列步驟即可:</p><p> (1)與數(shù)據(jù)源建立連接</p><p> 通過(guò)DriverManager類建立與數(shù)據(jù)庫(kù)的連接,這個(gè)連接將作為一個(gè)數(shù)據(jù)操作的起點(diǎn)。&
48、lt;/p><p> 例如,在本程序中,使用以下語(yǔ)句與MySQL數(shù)據(jù)庫(kù)建立了連接。</p><p> protected static String dbClassName = "org.gjt.mm.mysql.Driver";// 數(shù)據(jù)庫(kù)連接驅(qū)動(dòng)類</p><p> protected static String dbUrl = "
49、;jdbc:mysql://localhost:3306/gps";// 數(shù)據(jù)庫(kù)連接URL</p><p> protected static String dbUser = "root"; // 數(shù)據(jù)庫(kù)用戶名</p><p> protected static String dbPwd = "admin"; // 數(shù)據(jù)庫(kù)密碼</
50、p><p> private static Connection conn = null; // 數(shù)據(jù)庫(kù)連接對(duì)象</p><p> Class.forName(dbClassName); // 加載驅(qū)動(dòng)類</p><p> conn = DriverManager.getConnection(dbUrl, dbUser, dbPwd);// 與數(shù)據(jù)庫(kù)建立一個(gè)
51、連接</p><p> ?。?)向數(shù)據(jù)庫(kù)發(fā)送SQL命令</p><p> 通過(guò)Statement或者PreparedStatement類發(fā)送SQL命令。在命令發(fā)送后,調(diào)用類中的excute方法來(lái)執(zhí)行結(jié)果。例如,下列語(yǔ)句將會(huì)執(zhí)行sql語(yǔ)句指定的操作。</p><p> Statement stmt=conn. createStatement (sql);//通過(guò)S
52、QL語(yǔ)句創(chuàng)建Statement</p><p> stmt.execte();//執(zhí)行sql語(yǔ)句指定的操作</p><p> ?。?)處理數(shù)據(jù)源返回的結(jié)果</p><p> 數(shù)據(jù)庫(kù)處理了SQL命令后,將返回處理結(jié)果。對(duì)于查詢將會(huì)返回一個(gè)ResultSet結(jié)果集,在Java程序中遍歷這個(gè)結(jié)果集就可以執(zhí)行想要的操作了。例如,下列語(yǔ)句則會(huì)從數(shù)據(jù)庫(kù)的tb_operato
53、r表中返回具有指定用戶名和密碼的查詢結(jié)果,并存放在ResultSet中。</p><p> String sql = "select * from tb_operator where name='" + name+ "' and password='" + password + "'";//查詢字符串</p>
54、;<p> ResultSet rs = Dao.executeQuery(sql);// 執(zhí)行查詢</p><p> 2.3.4 MySQL數(shù)據(jù)庫(kù)</p><p> 近幾年來(lái),開(kāi)源數(shù)據(jù)庫(kù)逐漸流行起來(lái)。由于具有免費(fèi)使用、配置簡(jiǎn)單、穩(wěn)定性能好、性能優(yōu)良等優(yōu)點(diǎn),開(kāi)源數(shù)據(jù)庫(kù)在中低端應(yīng)用中占據(jù)了很大的市場(chǎng)人人份額,而MySQL正是開(kāi)源數(shù)據(jù)庫(kù)的杰出代表。</p>&
55、lt;p> MySQL[13-14]數(shù)據(jù)庫(kù)隸屬于MySQL AB公司,總部位于瑞典。MySQL幾乎支持所有的操作系統(tǒng),并且支持很大的表,這些特性使得MySQL的發(fā)展非常迅猛,目前已經(jīng)廣泛應(yīng)用在各個(gè)行業(yè)中。</p><p> MySQL數(shù)據(jù)庫(kù)目前分為社區(qū)版(Community Server)和企業(yè)版(Enterprise),它們最重要的區(qū)別在于:社區(qū)版是自由下載而且完全免費(fèi)的,但是官方不提供任何技術(shù)支持,
56、適用于大多數(shù)普通用戶;企業(yè)版是收費(fèi)的,不能在線下載,相應(yīng)地,它提供了更多的功能和更完備的技術(shù)支持,更適合于對(duì)數(shù)據(jù)庫(kù)的功能和可靠性要求比較高的企業(yè)客戶。在本程序中,使用了MySQL數(shù)據(jù)庫(kù)的社區(qū)版來(lái)對(duì)程序中相關(guān)的人員信息進(jìn)行維護(hù)。</p><p> 2.4 圖形界面開(kāi)發(fā)技術(shù)</p><p> Swing[15]是一個(gè)用于開(kāi)發(fā)Java圖形界面應(yīng)用程序的開(kāi)發(fā)工具包,它是以抽象窗口工具包(AWT
57、)[16]為基礎(chǔ),使跨平臺(tái)應(yīng)用程序可以使用任何的外觀風(fēng)格。Swing開(kāi)發(fā)人員通過(guò)使用少量的代碼,就可以利用Swing包中豐富、靈活的功能和模塊化組件類來(lái)開(kāi)發(fā)令人滿意的用戶界面。</p><p> Swing是Sun公司推出的第二代圖形用戶接口工具包,通過(guò)Swing可以開(kāi)發(fā)出功能強(qiáng)大,界面優(yōu)美的客戶應(yīng)用程序。Swing中不但提供了許多功能完善的控件,而且還有良好的擴(kuò)展能力。Swing組件實(shí)現(xiàn)不包括任何與平臺(tái)相關(guān)的
58、代碼。Swing組件是純Java語(yǔ)言編寫(xiě),沒(méi)有本地代碼,是一種輕量級(jí)組件[17]。</p><p> 目前利用 Swing 開(kāi)發(fā)的可視化桌面程序已經(jīng)非常成熟,并且很多工具已經(jīng)在業(yè)界產(chǎn)生了巨大影響。例如 IBM Lotus notes 辦公套件, Eclipse和NetBeans 開(kāi)發(fā)工具。其中這 Eclipse 和 NetBeans 是用來(lái)開(kāi)發(fā) Java 應(yīng)用程序的,本來(lái)也是使用 Swing 開(kāi)發(fā)出來(lái)的一套工具
59、,在全世界普及。近年來(lái),NetBeans的發(fā)展,已經(jīng)在程序員中產(chǎn)生了良好的口碑,特別是它的可視化桌面程序設(shè)計(jì)器,拖拽方式設(shè)計(jì)桌面窗口,以及各種各樣良好的輔助設(shè)計(jì)功能,讓之前可視化拖拽設(shè)計(jì)工具 Delphi 的設(shè)計(jì)人員也大大贊賞。特別是 Swing 設(shè)計(jì)的桌面程序,在不同平臺(tái)幾乎不需要做什么修改就可以直接使用,讓目前的軟件廠商找到了非常好的跨平臺(tái)編程工具[18]。</p><p> 2.4.1 Swing組件類的
60、層次</p><p> Swing中的組件的層次結(jié)構(gòu)如圖2-2所示,Swing的組件可以分為兩種類型,一種是JComponent類,另一種是Window類。其中Window組件類主要包括了一些可以獨(dú)立顯示的組件,而JComponent組件類主要包括了一些不能獨(dú)立顯示的組件。什么是可以獨(dú)立顯示的組件呢?獨(dú)立顯示的組件是指當(dāng)運(yùn)行一個(gè)程序時(shí),這個(gè)組件無(wú)須托付在其他組件上就可以顯示,即它可以直接顯示出來(lái),例如JFram
61、e類,它可以獨(dú)立顯示,無(wú)須任何其他的組件。而不可獨(dú)立顯示的組件則必須依靠可獨(dú)立顯示的組件來(lái)顯示,例如文本框組件、按鈕組件、必須依托在JFrame等上面才能顯示出來(lái)。</p><p> 圖2-2 Swing組件類的層次結(jié)構(gòu)圖</p><p> 以上的示意圖只是從顯示效果上劃分,其實(shí)從其功能上劃分,在javax.swing包中Swing組件共有三種類型:頂層組件、中間組件、基本組件。頂層組
62、件又被稱為頂層容器,而中間組件又分為中間容器和特殊中間組件,如圖2-3所示。</p><p> 圖2-3 Swing 組件從功能上劃分</p><p> (1)頂層組件類:所謂的頂層組件類是指可以獨(dú)立顯示的組件。主要有JFrame,JApplet,JDialog,JWindow等。</p><p> (2)中間容器類:所謂的中間容器類是指那些可以充當(dāng)載體,但也
63、是不可以獨(dú)立顯示的組件。通俗地說(shuō),就是一些基本控件可以放在其中,但是它不能獨(dú)立顯示,必須依托在頂層容器上才能顯示。常用的中間容器有JPanel,JScrollPane,JSplitPane,JToolBar.</p><p> (3)特殊中間組件類:在GUI上起特殊作用的中間層,如JInternalFrame。</p><p> (4)基本組件類:基本組件是指那些只能依托在中間窗口上才
64、能被顯示的組件,如JButton,JComboBox,JMenu等。</p><p> 2.4.2 Swing事件處理機(jī)制</p><p> 圖形用戶界面程序都需要對(duì)環(huán)境中發(fā)生的各種事件(包括鼠標(biāo)的單擊、值的改變、焦點(diǎn)的獲取或者丟失、鍵盤(pán)輸入等 )進(jìn)行監(jiān)控并根據(jù)事件的類型進(jìn)行相應(yīng)的處理。Swing中采用了委托事件模型,也叫授權(quán)事件模型來(lái)處理系統(tǒng)發(fā)生的各類事件[19]。</p>
65、;<p> 在授權(quán)事件模型中,主要包含3個(gè)對(duì)象。</p><p> (1)事件:發(fā)生在用戶界面上的用戶交互行為所產(chǎn)生的一種效果。</p><p> (2)事件源:產(chǎn)生事件的對(duì)象。</p><p> (3)事件監(jiān)聽(tīng)器:接收事件并對(duì)其進(jìn)行處理的對(duì)象。</p><p> 組件作為事件源可以觸發(fā)事件,一個(gè)事件源可以注冊(cè)一個(gè)或多
66、個(gè)事件監(jiān)聽(tīng)器。當(dāng)特定事件發(fā)生時(shí),事件被委托到特定的事件監(jiān)聽(tīng)器進(jìn)行處理。具體來(lái)說(shuō),首先通過(guò)組件的Add×××Listener方法注冊(cè)事件監(jiān)聽(tīng)器,一個(gè)組件可以注冊(cè)多個(gè)事件監(jiān)聽(tīng)器。 監(jiān)聽(tīng)器監(jiān)聽(tīng)特定的事件,如果組件觸發(fā)了相應(yīng)類型的事件,此事件被傳送給已經(jīng)注冊(cè)的監(jiān)聽(tīng)器,事件監(jiān)聽(tīng)器負(fù)責(zé)處理事件。</p><p> 委托事件模型具有如下優(yōu)點(diǎn):</p><p> (1)事
67、件對(duì)象只傳給注冊(cè)的監(jiān)聽(tīng)器,不會(huì)被其他組件或上層窗口捕獲和處理。</p><p> (2)可以實(shí)現(xiàn)過(guò)濾的功能,只監(jiān)聽(tīng)和處理感興趣的事件。</p><p> (3)實(shí)現(xiàn)了將事件源和事件監(jiān)聽(tīng)器分開(kāi)處理的功能。</p><p> 2.4.3 Swing中的布局管理</p><p> Java中的布局管理管理功能,沒(méi)有Visual Basic,
68、 Visual C++等可視化軟件所帶的表單設(shè)計(jì)器,可以在畫(huà)板上直接將組件按照程序員的意愿進(jìn)行排列。在Java中只能通過(guò)編寫(xiě)代碼來(lái)規(guī)范每個(gè)控件在頂層窗口中的位置。不同的代碼代表著不同的代碼布局方式,不同的布局方式代表著不同的布局格調(diào)。</p><p> 為了將添加到容器中的Swing組件和其他容器進(jìn)行布局,Swing采用了兩種布局方式:無(wú)布局管理器布局和基于布局管理器的布局。其中無(wú)布局管理器的布局是通過(guò)指定Sw
69、ing組件在窗體上的絕對(duì)位置來(lái)實(shí)現(xiàn)的?;诓季止芾砥鞯牟季諿20]是Swing為了實(shí)現(xiàn)跨平臺(tái)的動(dòng)態(tài)布局效果而提出的布局方式。在這種方式下,需要調(diào)用容器類(JFrame,JDialog或者JPanel等)的setLayout方法設(shè)置布局管理器,常用的布局管理器有FlowLayout,BorderLayout,GridLayout等多種方式。不同的布局管理器使用不同的算法和策略來(lái)決定組件在窗口內(nèi)的布局。設(shè)置好布局管理器后,窗口內(nèi)的所有組件的
70、布局就由布局管理器來(lái)負(fù)責(zé),包括組件的排列順序,組件的大小,位置,當(dāng)窗口移動(dòng)或調(diào)整組件大小后該如何變化等。</p><p><b> 無(wú)布局管理器的布局</b></p><p> Swing中提供了setLocation(),setSize(),setBounds()等布局方法,但Swing中存在一個(gè)默認(rèn)的布局管理器,因此這些方法都會(huì)失效。如果需要設(shè)置組件的大小或位
71、置,則應(yīng)取消布局管理器,方法為調(diào)用容器的setLayout()方法,并將布局管理器設(shè)置為null。</p><p> 采用無(wú)布局管理對(duì)組件進(jìn)行布局時(shí),相對(duì)于基于布局管理器的布局方式在對(duì)組件的大小和位置的控制上較為靈活,但這種布局方法會(huì)導(dǎo)致平臺(tái)相關(guān),在不同的平臺(tái)上可能產(chǎn)生不同的顯示效果。如果想要使應(yīng)用程序在不同的平臺(tái)上運(yùn)行,則需要采用基于布局管理器的布局方式。</p><p> Flow
72、Layout</p><p> 容器采用FlowLayout布局其組件的放置規(guī)律是從左到右,從上到下進(jìn)行設(shè)置,如果容器足夠?qū)?,第一個(gè)組件先添加到容器中第一行的最左邊,后續(xù)的組件依次添加到上一個(gè)組件的右邊,如果當(dāng)前行已經(jīng)放置不下該組件,剛放到下一行的最左邊。當(dāng)容器的大小發(fā)生變化時(shí),用FlowLayout管理的組件會(huì)發(fā)生變化,其變化規(guī)律是:組件的大小不變,但是相對(duì)位置會(huì)發(fā)生變化。</p><p&
73、gt; BorderLayout</p><p> BorderLayout布局管理器把容器分為五個(gè)區(qū)域:North,South,East,West,Center。每個(gè)區(qū)域只能放置一個(gè)組件。如果使用了BorderLayout布局,那么當(dāng)容器的大小發(fā)生變化時(shí),其變化規(guī)律為:組件的相對(duì)位置不變,大小發(fā)生變化。例如容器變高了,則North、South區(qū)域不變,West、Center,East區(qū)域變高。如果窗口變寬了
74、,則West和East不變,North、Center和South區(qū)域變寬。不一定所有的區(qū)域都有組件,如果四周的區(qū)域沒(méi)有組件,則用Center去補(bǔ)充。</p><p> GridLayout</p><p> GridLayout 將組件按網(wǎng)格型排列,每個(gè)成員盡可能地占據(jù)網(wǎng)格的空間,每個(gè)網(wǎng)格也同樣盡可能地占據(jù)空間,從而各個(gè)成員按一定的大小比例放置。如果你改變大小, GridLayout將
75、相應(yīng)地改變每個(gè)網(wǎng)格的大小,以使各個(gè)網(wǎng)格盡可能地大,占據(jù)Container容器全部的空間。GridLayout基本布局策略是把容器的空間劃分成若干行乘以若干列的網(wǎng)格區(qū)域,組件就位于這些劃分出來(lái)的小區(qū)域中,所有的區(qū)域大小一樣。組件按從左到右,從上到下的方法加入。</p><p> 使用構(gòu)造函數(shù)GridLayout(int rows, int cols)可以創(chuàng)建具有指定行數(shù)和列數(shù)的網(wǎng)格布局。構(gòu)造函數(shù)里的行數(shù)和列數(shù)能
76、夠有一個(gè)為零,但是不能都為零。當(dāng)容器里增加控件時(shí)候,容器內(nèi)將向0的那個(gè)方向增長(zhǎng)。例如,如果是如下語(yǔ)句:GridLayout layout= new GridLayout(0,1);在增加控件時(shí),會(huì)保持一個(gè)列的情況下,不斷把行數(shù)增長(zhǎng)。</p><p><b> 面板及容器的嵌套</b></p><p> 由于任何一種布局管理器的能力都很有限,所以在設(shè)計(jì)復(fù)雜布局時(shí),通
77、常采用容器嵌套的方式,即把組件添加到一個(gè)中間容器中,再把中間容器作為組件添加到另外一個(gè)容器中,從而實(shí)現(xiàn)復(fù)雜的布局。為實(shí)現(xiàn)這個(gè)功能,經(jīng)常使用JPanel類,該類是JCompoent類的子類。JPanel類是一個(gè)通用的容器,既可以把它放入其他容器中,也可以把它放入其他容器和組件,因此這種窗口經(jīng)常在構(gòu)造復(fù)雜布局中作為中間容器,但它不能單獨(dú)顯示,需要放到JFrame等頂層容器中。</p><p> 使用面板容器作為中間
78、容器構(gòu)建圖形用戶界面的一般思想是:先將組件添加到面板上,然后將面板作為一個(gè)組件再添加到頂層容器中。如果要作用面板作為中間容器,首先需要?jiǎng)?chuàng)建面板對(duì)象,JPanel的構(gòu)造方法如下:</p><p> Public JPanel(LayoutManager layout):創(chuàng)建一個(gè)面板對(duì)象,使用指定的布局管理器對(duì)旬(layout)設(shè)置面板的布局。</p><p> Public JPanel
79、();使用默認(rèn)的布局管理器創(chuàng)建一個(gè)面板對(duì)象,面板的默認(rèn)布局管理器是FlowLayout。也可以在創(chuàng)建面板對(duì)象后重新設(shè)置它的布局,方法是使用面板對(duì)象的setLayout()方法。</p><p> 2.4.4 設(shè)置應(yīng)用程序外觀</p><p> Java程序是跨平臺(tái)的,為了使Java圖形界面應(yīng)用程序在不同系統(tǒng)下顯示的外觀完全一致,Java應(yīng)用程序可以指定界面顯示外觀(Look and F
80、eel)。圖形界面程序外觀包括Java外觀(Metal風(fēng)格外觀),Windows外觀,CDE/Motif, Mac OS外觀等。</p><p> 在程序中指定一種外觀很方便,只要調(diào)用UIManager類的setFeelAndLook()方法即可,該方法的參數(shù)是LookAndFeel類的實(shí)例或類名。例如:如果用當(dāng)前平臺(tái)的外觀則可使用:</p><p> UIManager.setLoo
81、kAndFeel(UIManager.getSystemLookAndFeelClassName());</p><p> UIManager類的getSystemLookAndFeelClassName()返回當(dāng)前系統(tǒng)使用的外觀類名。將該段代碼放入應(yīng)用程序main()方法的開(kāi)頭就可以設(shè)置應(yīng)用程序的外觀。</p><p> 如果要指定跨平臺(tái)的外面,即Java外觀,可以使用下面的代碼:&
82、lt;/p><p> UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName();設(shè)置應(yīng)用程序外觀,還可以在setLookAndFeel()方法的參數(shù)中指定外觀類的名字,例如</p><p> (1)使用Java外觀</p><p> UIManager.setLookAndF
83、eel(“javax.swing.plaf.metal.MetalLookAndFeel”);</p><p> ?。?)使用Windows外觀</p><p> UIManager.setLookAndFeel(“com.sun.java.swing.plaf.windows.WindowsLookAndFeel”);</p><p> ?。?)使用CDE/Mo
84、tif外觀</p><p> UIManager.setLookAndFeel(“com.sun.java.swing.plaf.motif.MotifLookAndFeel”);</p><p> (4)使用Mac OS外觀,但只能用在Mac OS平臺(tái)</p><p> UIManager.setLookAndFeel(“javax.swing.plaf.m
85、ac.MacLookAndFeel”);</p><p> 2.5 引路蜂電子地圖開(kāi)發(fā)技術(shù)</p><p> 2.5.1引路蜂地圖API概述</p><p> 目前流行的電子地圖應(yīng)用中,主要基于Google地圖、百度地圖、高德地圖等進(jìn)行開(kāi)發(fā)的。如果是基于Google Earth的應(yīng)用程序,可以使用KML語(yǔ)言[21]來(lái)進(jìn)行開(kāi)發(fā)。如果是用來(lái)進(jìn)行網(wǎng)站開(kāi)發(fā),一般采用G
86、oogle Map API[21]來(lái)進(jìn)行開(kāi)發(fā)。Google Map API 是一種通過(guò) JavaScript[21] 將 Google 地圖嵌入到您的網(wǎng)頁(yè)的 API。該 API 提供了大量實(shí)用工具用以處理地圖,并通過(guò)各種服務(wù)向地圖添加內(nèi)容,從而在網(wǎng)站上創(chuàng)建功能全面的地圖應(yīng)用程序。百度地圖和高德地圖提供的API提供的都是基于瀏覽器的網(wǎng)頁(yè)地圖,采用JavaScript語(yǔ)言進(jìn)行開(kāi)發(fā)。對(duì)于標(biāo)準(zhǔn)的Java語(yǔ)言它們沒(méi)有提供相應(yīng)的API。</p
87、><p> 引路蜂地圖開(kāi)發(fā)包[24]提供了幾乎對(duì)所有軟件平臺(tái)(桌面和移動(dòng)平臺(tái))的支持,采用統(tǒng)一的接口使用包括Google地圖,Bing地圖在內(nèi)的多達(dá)20多種地圖類型,并在同一地圖中支持矢量地圖,離線地圖的顯示。</p><p> 圖2-4顯示了引路蜂地圖開(kāi)發(fā)包所支持的開(kāi)發(fā)平臺(tái),軟件包以三個(gè)不同的開(kāi)發(fā)包提供對(duì)各個(gè)平臺(tái)的支持。</p><p> 圖2-4 引路蜂地圖開(kāi)
88、發(fā)包支持平臺(tái)</p><p> 2.5.2地圖開(kāi)發(fā)包類的定義</p><p> 圖2-5為引路蜂地圖開(kāi)發(fā)包中關(guān)鍵的幾個(gè)類的定義及其關(guān)系圖</p><p> 圖2-5開(kāi)發(fā)包關(guān)鍵類及其關(guān)系圖</p><p> AbstractGraphicsFactory,DigitalMapService,MapTileAbstractReader分別
89、用于對(duì)不同平臺(tái)用戶界面,不同地圖服務(wù),不同地圖圖片的支持。引路蜂地圖開(kāi)發(fā)包在對(duì)地圖圖片和地圖服務(wù)進(jìn)行了抽象,其中地圖圖片主要用于顯示地圖圖片,地圖圖片可以來(lái)源于三個(gè)方面:</p><p> (1)在線地圖:可以連接包括Google地圖,Bing地圖等二十多種地圖,并支持自定義地圖。在本程序中,僅使用了在線地圖。</p><p> (2)離線地圖:可以讀取本地地圖包</p>
90、<p> (3)矢量地圖:可以讀取MapInfo格式的矢量地圖。</p><p> 而地圖服務(wù)是指地址查詢,路徑查詢,本地查詢等。引路蜂地圖開(kāi)發(fā)包支持谷歌地圖服務(wù),在中國(guó)也支持MapABC,Bing地圖。而且地圖服務(wù)也是可以擴(kuò)展的。地圖圖片和地圖服務(wù)兩個(gè)部分相對(duì)獨(dú)立,如我們可以在顯示Bing地圖的同時(shí)使用谷歌地圖的服務(wù),也可以在顯示谷歌地圖的時(shí)候使用Bing地圖服務(wù)。</p><
91、;p> 引路蜂地圖開(kāi)發(fā)包是跨平臺(tái)的,因?yàn)樗鼘?duì)不同平臺(tái)的地圖開(kāi)發(fā)包進(jìn)行了抽象,在Gis.Drawing包中定義了IImage,IGraphics,IFont,AbstractGraphicsFactory抽象類和抽象接口。這樣對(duì)于不同的平臺(tái),只要實(shí)現(xiàn)相應(yīng)的接口,就可以使用同一個(gè)開(kāi)發(fā)包。</p><p> 引路蜂地圖開(kāi)發(fā)包主要以Java和C#兩種語(yǔ)言提供,盡管Java和C#是兩種不同的語(yǔ)言,但開(kāi)發(fā)包提供的兩
92、種語(yǔ)言的開(kāi)發(fā)接口卻非常類似。</p><p> 下表列出了引路蜂地圖開(kāi)發(fā)包所定義的類包。</p><p> 2.5.3地圖對(duì)象類的層次關(guān)系</p><p> 圖2-6 地圖對(duì)象類的層次關(guān)系圖</p><p> 圖2-6顯示了各個(gè)地圖對(duì)象類及其關(guān)系。MapLayer定義了通用的地圖操作,如設(shè)置地圖的中心點(diǎn),放大,縮小,移動(dòng),以及坐標(biāo)變換
93、(從屏幕坐標(biāo)到地圖坐標(biāo)或從地圖坐標(biāo)到屏幕坐標(biāo)),它是所有地圖類的基類。MapLayerContainer是一個(gè)集合類,它定義了一組MapLayer的集合及它們的上下層次關(guān)系,并且使這些MapLayer一些移動(dòng),放大,縮小等。DigitalMap定義了地圖服務(wù),如地址查詢,路徑查詢,它包含了對(duì)不同地圖服務(wù)的支持。 RasterMap定義了對(duì)在線地圖,離線地圖的支持,內(nèi)部支持多線程獲取圖片,并提供回調(diào)函數(shù)用于了解圖片的下載進(jìn)度等。Vecto
94、rMap為RasterMap的一個(gè)子類,主要是提供類似MapInfo的適量地圖的支持。矢量地圖通過(guò)讀取地圖矢量數(shù)據(jù)并將其柵格化成圖像顯示。</p><p> 2.5.4地圖圖片讀取類層次關(guān)系</p><p> 圖2-7 地圖圖片讀取類層次關(guān)系</p><p> 不管是在線地圖,離線地圖還是矢量地圖,對(duì)于RasterMap來(lái)說(shuō)都是一張張256×256的
95、圖像,在線地圖是從服務(wù)器上下載圖片,離線地圖是從本地圖片包中讀取,而矢量地圖是將矢量數(shù)據(jù)柵格化處理。如圖2-7所示,RasterMap類有一個(gè)MapTileDownloadManager實(shí)例,這個(gè)對(duì)象用于管理所用地圖圖片的下載,讀取線程。這些線程都是MapTileAbstractReader的子類,MapTileDownloader用于在線下載地圖圖片,而VectorMapRender用于柵格化矢量地圖數(shù)據(jù)。大部分商用的地圖服務(wù)器都采用
96、了類似的地圖分片方法,將地圖分為1-17級(jí),每張圖片都是大小為256個(gè)像素的正方形圖片。圖2-8顯示了從一級(jí)到三級(jí)的地圖分級(jí)方法 。</p><p> 圖2-8 地圖分級(jí)圖</p><p> 2.5.5圖形子系統(tǒng)</p><p> 如前文所述,引路蜂地圖開(kāi)發(fā)包中Gis.Drawing類定義了幾個(gè)抽象類或接口,對(duì)不同平臺(tái)的圖形系統(tǒng)進(jìn)行了抽象。通過(guò)抽象處理,引路蜂
97、地圖開(kāi)發(fā)包就直接調(diào)用平臺(tái)相關(guān)的圖形類方法。</p><p> Gis.Drawing定義了地圖開(kāi)發(fā)包中所需要的最小功能集,如果在開(kāi)發(fā)過(guò)程中不需要矢量圖,則可以將與矢量圖形相關(guān)的方法設(shè)置為空。</p><p> 在Gis.Drawing包中抽象類AbstractGraphicsFactory,接口IGraphics,IFont,IImage。</p><p>
98、抽象類AbstractGraphicsFactory是抽象圖形類工廠,主要用于創(chuàng)建新的圖像對(duì)象。以Java為例,它定義的方法如下表2-1所示。</p><p> 表2-1AbstractGraphicsFactory類中定義的方法</p><p> 接口IGraphics類中定義了一些用于圖形繪制的方法。它定義的方法如表3-2所示。</p><p> 表2-2
99、 IGraphics接口中定義的方法</p><p> 接口IFont中定義了字體,如果在應(yīng)用中不使用矢量圖,可以不實(shí)現(xiàn)該類。它定義的方法如表2-3所示。</p><p> 表2-3 IFont接口中定義的方法</p><p> 接口IImage中,定義了獲取圖片大小等一系列的方法。它定義的方法如表2-4</p><p><b&g
100、t; 所示。</b></p><p> 表2-4 IFont中定義的方法</p><p><b> 2.5.6地圖配置</b></p><p> 地圖配置主要是通過(guò)類MapConfiguration和SearchOption來(lái)設(shè)置。這里介紹最常用的幾個(gè)配置。</p><p><b> 工作
101、線程數(shù)</b></p><p> 引路蜂地圖開(kāi)發(fā)包允許用戶配置同時(shí)工作的最大線程數(shù),這些工作線程主要用于從地圖服務(wù)器上下載圖片,默認(rèn)情況下工作線程數(shù)量為4。這是通過(guò)MapConfiguration.WORKER_THREAD_NUMBER來(lái)配置的。例如,下面的程序?qū)⒐ぷ骶€程數(shù)量設(shè)置為16。</p><p> MapConfiguration.setParameter(Map
102、Configuration.WORKER_THREAD_NUMBER,16);</p><p><b> 使用緩存</b></p><p> 引路蜂地圖開(kāi)發(fā)包默認(rèn)是使用緩存來(lái)提高地圖的顯示效率的,但是緩存的使用會(huì)占用一定的內(nèi)存空間,大小可以通過(guò)程序進(jìn)行配置,默認(rèn)大小為256K。如果設(shè)置的內(nèi)存比較小,最好將緩存進(jìn)行關(guān)閉。對(duì)程序來(lái)說(shuō),內(nèi)存是足夠的,因此,在程序中使用了
103、緩存。緩存的大小是通過(guò)MapConfiguration.MAP_CACHE_SIZE_IN_BYTES來(lái)配置的,開(kāi)啟關(guān)閉緩存是通過(guò)MapConfiguration.IS_CACHE_ON來(lái)設(shè)置的。</p><p> 第3章 系統(tǒng)總體設(shè)計(jì)</p><p><b> 3.1系統(tǒng)功能描述</b></p><p> 本小組所要研究的對(duì)象是電子防脫
104、逃裝置,由電子腕帶(在押人員佩戴)、手持機(jī)(監(jiān)管人員佩戴)和專用管理軟件(本軟件)三部分組成。手持機(jī)(監(jiān)管人員佩戴)和電子腕帶(在押人員佩戴)分別安置有GPS[25]模塊,手持機(jī)通過(guò)無(wú)線傳感網(wǎng)絡(luò)獲取兩點(diǎn)GPS位置坐標(biāo),進(jìn)而進(jìn)行距離計(jì)算,從而確定電子腕帶同手持移動(dòng)控制終端的距離,如距離超出警戒范圍則進(jìn)行報(bào)警等操作。專用上位機(jī)監(jiān)管軟件可同手持機(jī)進(jìn)行通訊,能夠更新在押人員的基本信息和獲得人員路徑信息。</p><p>
105、 基于上述工作機(jī)理,對(duì)研究?jī)?nèi)容進(jìn)行分解,包含以下三個(gè)部分:</p><p><b> 1、電子腕帶設(shè)計(jì)</b></p><p> 電子腕帶主要實(shí)現(xiàn)功能有如下幾點(diǎn):GPS位置信息獲取、位置信息的無(wú)線傳輸、報(bào)警功能、防撬功能以及電量檢測(cè)與充電等功能。</p><p><b> 2、手持機(jī)設(shè)計(jì)</b></p>
106、<p> 手持機(jī)主要實(shí)現(xiàn)功能有如下幾點(diǎn):GPS位置信息獲取、無(wú)線組網(wǎng)獲取電子腕帶位置信息、實(shí)時(shí)時(shí)鐘、電量檢測(cè)與充電、人機(jī)界面、人員信息存儲(chǔ)、事件記錄、與專用管理軟件通信等功能。</p><p> 3、無(wú)線人員定位管理軟件</p><p> 本軟件是Java為開(kāi)發(fā)語(yǔ)言,以Eclipse為開(kāi)發(fā)平臺(tái),采用MySQL作為開(kāi)發(fā)數(shù)據(jù)庫(kù),再結(jié)合引路蜂地圖開(kāi)發(fā)包來(lái)完成的。它是一個(gè)集成了
107、看守所在押人員的基本信息閱覽、新增、查詢、刪除、修改以及人員路徑再現(xiàn)的綜合性系統(tǒng)??梢酝ㄟ^(guò)這個(gè)軟件查看每個(gè)在押人員的基本信息,并進(jìn)行修改等,并且可以引路蜂地圖開(kāi)發(fā)包,查看在押人員的行進(jìn)路線。為了提升系統(tǒng)的安全性,所有用戶只有在登錄后才可以使用本系統(tǒng)。</p><p> 本軟件包含的主要功能有:</p><p> ??新增:出現(xiàn)“新增在押人員基本信息”窗口,手動(dòng)錄入相關(guān)信息。</p
108、><p> ??刪除:刪除表格中指定行的記錄,同時(shí)MySQL中相應(yīng)的記錄也被刪除。</p><p> ??查詢:按給定的條件查詢出符合條件的在押人員基本信息,并顯示在表格中。</p><p> ??修改:出現(xiàn)“在押人員基本信息修改”窗口,修改其中的各信息。</p><p> ??帳戶管理:包括增加帳戶,修改密碼和刪除帳戶等功能。 <
109、/p><p> ??人員定位:打開(kāi)txt或csv文件,在地圖上顯示某一在押人員的路徑。</p><p> ??導(dǎo)出:導(dǎo)出在押人員的基本信息,以txt文件的形式保存到其他位置。</p><p> ??關(guān)于:顯示軟件的基本信息。</p><p><b> 3.2軟件總體設(shè)計(jì)</b></p><p>
溫馨提示
- 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的酒店管理系統(tǒng)畢業(yè)設(shè)計(jì)論文
- 畢業(yè)設(shè)計(jì)(論文)-基于java技術(shù)的論壇(bbs)
- 畢業(yè)設(shè)計(jì)(論文)--基于java的郵件系統(tǒng)
- 基于java網(wǎng)絡(luò)聊天系統(tǒng)畢業(yè)設(shè)計(jì)論文
- 基于java的網(wǎng)上投票系統(tǒng)(doc畢業(yè)設(shè)計(jì)論文)
- 優(yōu)秀畢業(yè)設(shè)計(jì)論文+源碼基于java的圖書(shū)館管理系統(tǒng)畢業(yè)設(shè)計(jì)(論文)
- java考試系統(tǒng)畢業(yè)設(shè)計(jì)(論文)
- 畢業(yè)設(shè)計(jì)--基于java的游戲設(shè)計(jì)
- java坦克大戰(zhàn)畢業(yè)設(shè)計(jì)論文
- 基于java的論壇bbs的實(shí)現(xiàn)(doc畢業(yè)設(shè)計(jì)論文)
- 畢業(yè)設(shè)計(jì)(論文)-基于java的異常處理技術(shù)及其應(yīng)用
- 基于java的cs模式網(wǎng)絡(luò)聊天室的畢業(yè)設(shè)計(jì)(doc畢業(yè)設(shè)計(jì)論文)
- 基于java的圖書(shū)館管理系統(tǒng)畢業(yè)設(shè)計(jì)(論文)
- 畢業(yè)設(shè)計(jì)(論文)+手機(jī)游戲開(kāi)發(fā)-java畢業(yè)論文
- 基于java手機(jī)游戲畢業(yè)設(shè)計(jì)
- java畢業(yè)設(shè)計(jì)論文 網(wǎng)上購(gòu)物書(shū)店設(shè)計(jì)
- java學(xué)生管理系統(tǒng)畢業(yè)設(shè)計(jì)論文
- java畢業(yè)設(shè)計(jì)論文中期報(bào)告
- 畢業(yè)設(shè)計(jì)論文 java 24點(diǎn)游戲設(shè)計(jì)
- 基于java的酒店管理系統(tǒng)畢業(yè)設(shè)計(jì)論文(含源文件)
評(píng)論
0/150
提交評(píng)論