java手機(jī)天氣預(yù)報(bào)實(shí)訓(xùn)報(bào)告.doc_第1頁
java手機(jī)天氣預(yù)報(bào)實(shí)訓(xùn)報(bào)告.doc_第2頁
java手機(jī)天氣預(yù)報(bào)實(shí)訓(xùn)報(bào)告.doc_第3頁
java手機(jī)天氣預(yù)報(bào)實(shí)訓(xùn)報(bào)告.doc_第4頁
java手機(jī)天氣預(yù)報(bào)實(shí)訓(xùn)報(bào)告.doc_第5頁
已閱讀5頁,還剩15頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

新鄉(xiāng)學(xué)院計(jì)算機(jī)與信息工程學(xué)院項(xiàng)目實(shí)訓(xùn)報(bào)告項(xiàng)目名稱天氣預(yù)報(bào)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)班 級(jí)2012級(jí)計(jì)算機(jī)科學(xué)與技術(shù)1班學(xué) 號(hào)姓 名指導(dǎo)教師2015年 12月29日目錄一、項(xiàng)目背景11.1 項(xiàng)目概述11.2 項(xiàng)目?jī)?nèi)容1二、環(huán)境配置12.1 myeclipse開發(fā)工具12.2 Tomcat服務(wù)器2三、相關(guān)技術(shù)分析23.1 J2EE WEB應(yīng)用的核心技術(shù)23.2 SSH框架技術(shù)23.3 數(shù)據(jù)庫3四、系統(tǒng)需求分析34.1目標(biāo)和任務(wù)34.2系統(tǒng)功能性需求分析3五、系統(tǒng)功能界面45.1 設(shè)置預(yù)報(bào)城市界面45.2 天氣顯示界面55.3 桌面顯示界面7六、業(yè)務(wù)邏輯設(shè)計(jì)76.1、獲取城市數(shù)據(jù)庫76.2 可伸縮性列表的的構(gòu)建與過濾8七、測(cè)試11八、總結(jié)15參考文獻(xiàn)16一、項(xiàng)目背景1.1 項(xiàng)目概述 隨著手機(jī)應(yīng)用的日益普及和深化,隨時(shí)隨地了解未來幾天的天氣情況已經(jīng)成為一種趨勢(shì)。本項(xiàng)目要開發(fā)的是基于單機(jī)的天氣查詢系統(tǒng)。由于現(xiàn)代都市的快節(jié)奏,再天天守著電視機(jī)看雷打不動(dòng)的天氣預(yù)報(bào)已經(jīng)變得越來越不現(xiàn)實(shí)了。因此,實(shí)現(xiàn)一個(gè)將各種天氣查詢服務(wù)功能集成起來的信息系統(tǒng)就顯得十分必要,即可以節(jié)省時(shí)間,又可以實(shí)現(xiàn)個(gè)性化的服務(wù),減少不必要的等待和繁重的信息。開發(fā)的系統(tǒng)要求界面良好,方便直觀。方便用戶及時(shí)了解最新的天氣狀況1.2 項(xiàng)目?jī)?nèi)容該項(xiàng)目是基于SSH框架實(shí)現(xiàn)一個(gè)實(shí)時(shí)顯示天氣狀況的系統(tǒng),該系統(tǒng)所研究的問題如下:(1) 系統(tǒng)運(yùn)行平臺(tái)的選取。該系統(tǒng)采用JavaEE主流的框架來設(shè)計(jì)系統(tǒng)。(2) 確定系統(tǒng)具有的基本功能。該設(shè)計(jì)分為天氣顯示界面模塊、預(yù)報(bào)城市設(shè)置模塊、桌面小部件模塊三個(gè)模塊,天氣顯示模塊顯示指定城市三天內(nèi)的天氣狀況,預(yù)報(bào)城市設(shè)置模塊包括自動(dòng)設(shè)置和手動(dòng)設(shè)置,桌面小部件模塊可在手機(jī)桌面上添加小部件,顯示當(dāng)前天氣與時(shí)間。(3)對(duì)系統(tǒng)進(jìn)行詳細(xì)設(shè)計(jì)和分析。根據(jù)系統(tǒng)所實(shí)現(xiàn)的功能,進(jìn)行模塊的設(shè)計(jì),畫出系統(tǒng)的結(jié)構(gòu)圖。二、環(huán)境配置該天氣預(yù)報(bào)系統(tǒng)采用SSH框架,所使用的開發(fā)工具是Myecplise然后再開發(fā)工具的基礎(chǔ)上進(jìn)行Struts+Spring+Hibernate三大框架的搭建。具體的配置工具如下:2.1 myeclipse開發(fā)工具 MyEclipse是Eclipse的一個(gè)插件,是對(duì)Eclipse集成丌發(fā)環(huán)境的很好的擴(kuò)展。 MyEclipse是針對(duì)J2EE項(xiàng)目和數(shù)據(jù)庫程序而設(shè)計(jì)的,因此利用它進(jìn)行這方面的-開發(fā)將會(huì)對(duì)工作效率有很大的提高。作為J2EE集成丌發(fā)環(huán)境,它具有豐富的功能,在 MyEclipse環(huán)境中可以進(jìn)行編碼、程序調(diào)試測(cè)試和項(xiàng)目發(fā)布工作,并對(duì)HTMI,Struts 、Spring、Hibernate等都支持。2.2 Tomcat服務(wù)器 Tomcat是有SUN公司開發(fā)一個(gè)可以運(yùn)行JSP或Servlet容器,是基于Java的Web服務(wù)器,是作為Web服務(wù)器的組成部分存在的。Tomcat的工作模式流程:當(dāng)它接收到客戶端的請(qǐng)求時(shí),Tomcat調(diào)用ServletRequest對(duì)象把客戶端的請(qǐng)求內(nèi)容封裝起來,接著調(diào)用Servlet生命周期中的方法,完成Servlet這一過程,最后調(diào)用ServletResponse對(duì)象把Servlet執(zhí)行的結(jié)果封裝起來返回給客戶,這就是Tomcat工作一次的流程。Tomcat在運(yùn)行時(shí)對(duì)系統(tǒng)資源要求很低,它具有良好的擴(kuò)展性,擁有系統(tǒng)開發(fā)中常用到的郵件服務(wù)等功能和支持負(fù)載平衡。Tomcat進(jìn)行更改或增加新的功能,因此Tomcat在程序員中越來越受到歡迎。三、相關(guān)技術(shù)分析3.1 J2EE WEB應(yīng)用的核心技術(shù) JSP是Sun公司主導(dǎo)開發(fā)的一種動(dòng)態(tài)網(wǎng)頁設(shè)計(jì)技術(shù),它設(shè)計(jì)的出發(fā)點(diǎn)是為了簡(jiǎn)化Web編程的步驟和提高Web編程效率,要求JSP程序可以在各種服務(wù)器、不同瀏覽 器及開發(fā)工具工作。JSP技術(shù)也逐漸演變成服務(wù)器和各種開發(fā)工具的規(guī)范。 (1)生成的網(wǎng)頁的內(nèi)容與顯示格式分離 (2)組件的可重用性增強(qiáng)(3)JSP標(biāo)識(shí)符簡(jiǎn)化網(wǎng)頁開發(fā)3.2 SSH框架技術(shù) 運(yùn)用框架可以提高系統(tǒng)的質(zhì)量和開發(fā)的速度,現(xiàn)在有許多基于J2EE設(shè)計(jì)的開源的框架,現(xiàn)在主流的開源框架技術(shù)有:升級(jí)后處理MVC層次的Struts2框架、具有控制反轉(zhuǎn)的 Spring框架以及ORM的Hibernate框架等。(1) Struts2框架Struts框架最早用于Web項(xiàng)目開發(fā)中,它是作為Java開發(fā)人員進(jìn)行大型J2EE項(xiàng)目開發(fā)中使用到框架之一,Struts框架符合MVC設(shè)計(jì)模式,很好把模型、視圖和控制分離開來,它的工作原理是先用攔截器對(duì)HTTP請(qǐng)求信息進(jìn)行攔截,然后在對(duì)請(qǐng)求信息中所包含的數(shù)據(jù)格式進(jìn)行檢驗(yàn),字符進(jìn)行編碼等操作,這類操作發(fā)生在MVC模式的控制部分之前,提前處理與邏輯關(guān)系不是太大的操作,就可以讓控制器專門處理業(yè)務(wù)邏輯和H1YrP請(qǐng)求的內(nèi)容,這種處理方式是對(duì)“松耦合”的很好體現(xiàn)。(2)Spring框架Spring是由Rod Johnson創(chuàng)建的一個(gè)開源框架,創(chuàng)建它的初衷是為解決開發(fā)復(fù)雜度高、企業(yè)級(jí)服務(wù)使用困難等問題,Spring框架可以替代EJB以前的地位而輕松的完 成任務(wù)。如果只認(rèn)識(shí)Spring在服務(wù)器端進(jìn)行開發(fā)優(yōu)勢(shì),顯然還沒有對(duì)Spring有深刻的了解,從測(cè)試性、耦合性和簡(jiǎn)便性上來說,Spring框架讓任何Java應(yīng)用都可以從中受益。 (3)Hibernate框架Hibernate框架實(shí)現(xiàn)了對(duì)JDBC的封裝,負(fù)責(zé)對(duì)對(duì)象的持久化操作,它是數(shù)據(jù)庫和應(yīng)用程序之問的橋梁。Hibernate框架編程技術(shù)的出現(xiàn)可以使Java編程人員用面向?qū)ο蟮乃季S來進(jìn)行數(shù)據(jù)庫的操作,可以這樣說,能用到JDBC的地方都可以使Hibernate來代替,Hibernate既可以在客戶端的程序中使用,也可以在Web服務(wù)器端中使用。仔細(xì)研究發(fā)現(xiàn),JDBC編程中會(huì)有許多重復(fù)的代碼,增加了代碼的數(shù)量,而Hibernate可以解決這方面的問題,優(yōu)化持久層代碼。Hibernate的核心接口主要有Session、SessionFactory、Transaction、Query和Configuration這五個(gè),在任何關(guān)于持久層的開發(fā)中都將離不開這些接口,實(shí)現(xiàn)對(duì)象的CRUD操作。 3.3 數(shù)據(jù)庫Mysql是一個(gè)小型的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),Mysql同時(shí)還是一種關(guān)系數(shù)據(jù)庫管理系統(tǒng),關(guān)聯(lián)數(shù)據(jù)庫將數(shù)據(jù)保存在不同的表中,而不是將所有的數(shù)據(jù)內(nèi)容放在一個(gè)大的倉庫內(nèi),這樣提高了速度和靈活性。MYSQL是SQL“結(jié)構(gòu)化查詢語言”。SQL它是用于訪問數(shù)據(jù)庫中最常用的標(biāo)準(zhǔn)語言,由于體積小,速度快,總體擁有成本低,許多種中小型網(wǎng)站為了降低網(wǎng)站總體就會(huì)選擇mysql作為網(wǎng)站數(shù)據(jù)庫。四、系統(tǒng)需求分析4.1目標(biāo)和任務(wù)根據(jù)功能的需求分析,此項(xiàng)目的功能應(yīng)該具備一下幾點(diǎn): 1、精確查選定位全國(guó)各城市未來幾天的天氣情況 2、系統(tǒng)要符合用戶查看信息習(xí)慣,界面設(shè)計(jì)優(yōu)美 3、系統(tǒng)要具備提醒功能,提醒用戶關(guān)注城市的天氣情況4.2系統(tǒng)功能性需求分析由上述的需求,現(xiàn)將系統(tǒng)分為三大模塊:天氣顯示界面模塊、預(yù)報(bào)城市設(shè)置模塊與 Widget桌面小部件模塊。各系統(tǒng)模塊功能如下:1、 天氣顯示界面模塊顯示指定城市三天內(nèi)的天氣狀況,包括日期、城市名稱、溫度、風(fēng)力與當(dāng)日的建議,用戶可通過按菜單鍵來顯示菜單更新當(dāng)前天氣與設(shè)置天氣顯示的界面背景,以及跳轉(zhuǎn)至設(shè)置預(yù)報(bào)城市界面來更換預(yù)報(bào)城市。2、 預(yù)報(bào)城市設(shè)置模塊由自動(dòng)設(shè)置預(yù)報(bào)城市與手動(dòng)設(shè)置二部分組成,自動(dòng)設(shè)置實(shí)現(xiàn) GPS定位功能,自動(dòng)確定當(dāng)前用戶所在地;而手動(dòng)設(shè)置則通過可伸展性下拉列表單擊選擇系統(tǒng)數(shù)據(jù)庫中預(yù)存的城市來進(jìn)行設(shè)置,同時(shí)為了方便用戶查找,支持以輸入框的形式來過濾查詢預(yù)報(bào)城市。當(dāng)單擊選中城市時(shí)跳轉(zhuǎn)至天氣顯示界面,來顯示該城市當(dāng)三天內(nèi)的天氣狀況;第一次運(yùn)行時(shí)自動(dòng)跳到該界面。3、 Widget桌面小部件模塊為了方便用戶實(shí)時(shí)了解天氣狀況,特別添加在 Android系統(tǒng)桌面上顯示當(dāng)前天氣與時(shí)間的天氣小部件,使用戶拿起手機(jī)的第一時(shí)刻就能了解天氣,同時(shí)當(dāng)用戶單擊小部件時(shí),自動(dòng)跳轉(zhuǎn)至天氣顯示界面,顯示三天內(nèi)的詳細(xì)天氣。五、系統(tǒng)功能界面5.1 設(shè)置預(yù)報(bào)城市界面1、 當(dāng)?shù)谝淮芜\(yùn)行程序時(shí),跳轉(zhuǎn)至城市設(shè)置界面進(jìn)行預(yù)報(bào)城市的選擇: 2、用戶可以通過單擊選擇“定位當(dāng)前城市”的方式調(diào)用系統(tǒng) GPS功能自動(dòng)定位預(yù)報(bào)城市:3、 用戶可通過輸入框過濾查詢當(dāng)前系統(tǒng)中預(yù)存的城市:5.2 天氣顯示界面1、 選擇了預(yù)報(bào)城市后,系統(tǒng)跳轉(zhuǎn)至天氣顯示界面,顯示該城市三天內(nèi)的實(shí)時(shí)天氣:2、 在天氣界面中用戶可通過按菜單鍵來調(diào)出菜單,選擇城市,更新天氣與更新背景:5.3 桌面顯示界面六、業(yè)務(wù)邏輯設(shè)計(jì)6.1、獲取城市數(shù)據(jù)庫獲取全國(guó)各地的城市碼,是通過訪問中央氣象局網(wǎng)從省份直轄市到城鎮(zhèn)一級(jí)一級(jí)得到,獲得一個(gè)地區(qū)的城市碼總共需要訪問 4次網(wǎng)絡(luò),分別如下:1、 訪問 /data5/city.xml得到省份直轄市列表與它的編號(hào):01|北京,02|上海,03|天津,04|重慶,05|黑龍江,06|吉林,07|遼寧,08|內(nèi)蒙古.2、訪問 /data5/city.xml得到該省份直轄市的城市編號(hào):1201|濟(jì)南,1202|青島,1203|淄博,1204|德州,1205|煙臺(tái),1206|濰坊,.3、訪問 /data5/city.xml得到該城市的縣區(qū)編號(hào):120101|濟(jì)南,120102|長(zhǎng)清,120103|商河,120104|章丘,120105|平陰.4、 訪問 /data5/city.xml得到該縣區(qū)的城市編碼實(shí)現(xiàn)上述功能需要使用Android的網(wǎng)絡(luò)訪問技術(shù),部分代碼如下:public void onCreate(Bundle savedInstanceState) setContentView(R.layout.main1);ETplace = (EditText) findViewById(R.id.place);query = (Button) findViewById(R.id.query);imView = (ImageView) findViewById(R.id.myImageView);placeName = (TextView) findViewById(R.id.tvPlace);query.setOnClickListener(new Button.OnClickListener() public void onClick(View v) try TvPlace = (TextView) findViewById(R.id.tvPlace);/String place = ETplace.getText().toString(); String place = CntoSpell.getFullSpell(ETplace.getText().toString(); 6.2 可伸縮性列表的的構(gòu)建與過濾首先是對(duì)關(guān)鍵字進(jìn)行判斷是否為空,如為空則由 values添加所有省份與城市,其中的 allGroups和 allChilds保存的是所有的省份與對(duì)應(yīng)的城市,如果關(guān)鍵字 constraint不為空,則以省份為單位進(jìn)行匹配,省份匹配的添加下面的所在城鎮(zhèn),如果不匹配,則進(jìn)行步深入匹配城鎮(zhèn),添加符合條件的城鎮(zhèn)。部分代碼如下: /* * 根據(jù)ASCII碼到SpellMap中查找對(duì)應(yīng)的拼音 * * param ascii * int 字符對(duì)應(yīng)的ASCII * return String 拼音,首先判斷ASCII是否0& 0 & ascii 160) / 單字符 return String.valueOf(char) ascii); if (ascii -10247) / 不知道的字符 return null; Set keySet = spellMap.keySet(); Iterator it = keySet.iterator(); String spell0 = null; String spell = null; int asciiRang0 = -20319; int asciiRang; while (it.hasNext() spell = (String) it.next(); Object valObj = spellMap.get(spell); if (valObj instanceof Integer) asciiRang = (Integer) valObj).intValue(); if (ascii = asciiRang0 & ascii asciiRang) / 區(qū)間找到 return (spell0 = null) ? spell : spell0; else spell0 = spell; asciiRang0 = asciiRang; 6.3 GPS定位功能的實(shí)現(xiàn)1、 得到LocationManager系統(tǒng)定位服務(wù)管理者LocationManager locationManager = LocationManager)getSystemService(Context.LOCATION_SERVICE);2、 設(shè)置 Geocoder對(duì)象,過濾得到符合條件的 LocationProvider ,再由LocationProvider得到封裝經(jīng)緯度信息的 Location對(duì)象:/設(shè)置一個(gè)Criteria標(biāo)準(zhǔn)用于過濾LocationProvider Criteria criteria = new Criteria();criteria.setAltitudeRequired(false);criteria.setBearingRequired(false);String provider = locationManager.getBestProvider(criteria, true); 得到當(dāng)前的位置對(duì)象Location location = locationManager.getLastKnownLocation(provider); double latitude = location.getLatitude(); /得到經(jīng)度ouble longitude = location.getLongitude(); /得到緯度3、得到經(jīng)緯度后再訪問 /maps/geo來得到含地址信息的XML文本內(nèi)容,并用自定義的 LocationXMParser工具類解析封裝得到此經(jīng)緯度對(duì)應(yīng)的城市名。上面步驟返回的是一個(gè) Map對(duì)象,其中封裝了從XML中解析得到的國(guó)家、省份、縣區(qū)和城市四個(gè)信息,在得到這些信息后,系統(tǒng)將與數(shù)據(jù)庫中預(yù)存的省份城市相比較,最終匹配得到該地區(qū)的城市碼完成GPS自動(dòng)定位功能的實(shí)現(xiàn)。4、Widget窗體小部件的更新由于 widget中的時(shí)鐘關(guān)系,需要對(duì) widget顯示進(jìn)行時(shí)刻的更新用來保持與系統(tǒng)中時(shí)間的一致。實(shí)現(xiàn)這個(gè)功能需要用到 AlarmManager類,這個(gè)類專門用來設(shè)定在某個(gè)指定的時(shí)間去完成指定的事件。設(shè)計(jì)思路是在 Widget的 onUpdate方法中啟動(dòng)一個(gè)自定義更新后臺(tái)服務(wù),更新 widget,并設(shè)定下一分鐘再次調(diào)用此服務(wù),實(shí)現(xiàn)此功能部分代碼如下:publicclassWeatherWidgetextendsAppWidgetProviderOverridepublicvoidonUpdate(Contextcontext,AppWidgetManagerappWidgetManager,intappWidgetIds)super.onUpdate(context,appWidgetManager,appWidgetIds);/獲取需要更新的桌面小控件ForecastService.addWidgetIDs(appWidgetIds);/啟動(dòng)獲取天氣預(yù)報(bào)信息的服務(wù)context.startService(newIntent(context,ForecastService.class);/啟動(dòng)時(shí)間信息的服務(wù)context.startService(newIntent(context,ForecastTimeService.class);/更新桌面小控件顯示內(nèi)容publicstaticRemoteViewsupdateViews(Contextcontext,Uriuri)七、測(cè)試 當(dāng)系統(tǒng)初啟動(dòng)時(shí),由于沒有設(shè)置預(yù)報(bào)城市,則自動(dòng)由 MianActivity天氣顯示視圖跳轉(zhuǎn)到 SetCityActivity城市設(shè)置視圖,并要求用戶選擇預(yù)報(bào)城市如下:接下來點(diǎn)擊確定選擇城市,則系統(tǒng)確定用戶單擊城市的城市碼跳轉(zhuǎn)至天氣顯示界面,如下:跳轉(zhuǎn)到天氣界面后,可單擊菜單按鈕來顯示天氣的菜單選擇壁紙菜單項(xiàng)可以更換程序背景圖片如下:選擇設(shè)置城市菜單項(xiàng),則跳轉(zhuǎn)到設(shè)置城市的界面,在這里可查詢城市,方便了用戶的選擇widget窗體小部件的添加是通過長(zhǎng)按桌面的空白處,出現(xiàn)一個(gè)選項(xiàng)菜單,然后選擇“窗體小部件”,接著在彈出的選項(xiàng)中選擇“天氣精靈”即本系統(tǒng),則設(shè)計(jì)的小窗體部件將會(huì)出現(xiàn)在主屏幕的桌面上:八、總結(jié)本系統(tǒng)基本實(shí)現(xiàn)了需求的中的天氣預(yù)報(bào)的功能,界面設(shè)計(jì)也較漂亮,具有一定的實(shí)用性。其中的天氣數(shù)據(jù)全部來源于網(wǎng)絡(luò),故在運(yùn)行時(shí)一定要確保系統(tǒng)所處環(huán)境的網(wǎng)絡(luò)流暢性。由于開發(fā)過程是在模擬器上運(yùn)行的,故測(cè)試的結(jié)果可能存在一定的局性性。同時(shí)在設(shè)計(jì)之初考慮問題的不全面,使得在無網(wǎng)狀態(tài)下設(shè)計(jì)不完善,運(yùn)行本系統(tǒng)在無網(wǎng)狀態(tài)下時(shí)會(huì)異常停止。通過本系統(tǒng)的開發(fā)使得我對(duì)于 Android平臺(tái)的應(yīng)用開發(fā)有了一定的了解,特別是其中的 GPS功能與 Widget的更新功能的實(shí)現(xiàn)讓我體會(huì)到了實(shí)踐的意義,有自己認(rèn)真動(dòng)手

溫馨提示

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