java手机天气预报实训报告.doc_第1页
java手机天气预报实训报告.doc_第2页
java手机天气预报实训报告.doc_第3页
java手机天气预报实训报告.doc_第4页
java手机天气预报实训报告.doc_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

新乡学院计算机与信息工程学院项目实训报告项目名称天气预报系统的设计与实现班 级2012级计算机科学与技术1班学 号姓 名指导教师2015年 12月29日目录一、项目背景11.1 项目概述11.2 项目内容1二、环境配置12.1 myeclipse开发工具12.2 Tomcat服务器2三、相关技术分析23.1 J2EE WEB应用的核心技术23.2 SSH框架技术23.3 数据库3四、系统需求分析34.1目标和任务34.2系统功能性需求分析3五、系统功能界面45.1 设置预报城市界面45.2 天气显示界面55.3 桌面显示界面7六、业务逻辑设计76.1、获取城市数据库76.2 可伸缩性列表的的构建与过滤8七、测试11八、总结15参考文献16一、项目背景1.1 项目概述 随着手机应用的日益普及和深化,随时随地了解未来几天的天气情况已经成为一种趋势。本项目要开发的是基于单机的天气查询系统。由于现代都市的快节奏,再天天守着电视机看雷打不动的天气预报已经变得越来越不现实了。因此,实现一个将各种天气查询服务功能集成起来的信息系统就显得十分必要,即可以节省时间,又可以实现个性化的服务,减少不必要的等待和繁重的信息。开发的系统要求界面良好,方便直观。方便用户及时了解最新的天气状况1.2 项目内容该项目是基于SSH框架实现一个实时显示天气状况的系统,该系统所研究的问题如下:(1) 系统运行平台的选取。该系统采用JavaEE主流的框架来设计系统。(2) 确定系统具有的基本功能。该设计分为天气显示界面模块、预报城市设置模块、桌面小部件模块三个模块,天气显示模块显示指定城市三天内的天气状况,预报城市设置模块包括自动设置和手动设置,桌面小部件模块可在手机桌面上添加小部件,显示当前天气与时间。(3)对系统进行详细设计和分析。根据系统所实现的功能,进行模块的设计,画出系统的结构图。二、环境配置该天气预报系统采用SSH框架,所使用的开发工具是Myecplise然后再开发工具的基础上进行Struts+Spring+Hibernate三大框架的搭建。具体的配置工具如下:2.1 myeclipse开发工具 MyEclipse是Eclipse的一个插件,是对Eclipse集成丌发环境的很好的扩展。 MyEclipse是针对J2EE项目和数据库程序而设计的,因此利用它进行这方面的-开发将会对工作效率有很大的提高。作为J2EE集成丌发环境,它具有丰富的功能,在 MyEclipse环境中可以进行编码、程序调试测试和项目发布工作,并对HTMI,Struts 、Spring、Hibernate等都支持。2.2 Tomcat服务器 Tomcat是有SUN公司开发一个可以运行JSP或Servlet容器,是基于Java的Web服务器,是作为Web服务器的组成部分存在的。Tomcat的工作模式流程:当它接收到客户端的请求时,Tomcat调用ServletRequest对象把客户端的请求内容封装起来,接着调用Servlet生命周期中的方法,完成Servlet这一过程,最后调用ServletResponse对象把Servlet执行的结果封装起来返回给客户,这就是Tomcat工作一次的流程。Tomcat在运行时对系统资源要求很低,它具有良好的扩展性,拥有系统开发中常用到的邮件服务等功能和支持负载平衡。Tomcat进行更改或增加新的功能,因此Tomcat在程序员中越来越受到欢迎。三、相关技术分析3.1 J2EE WEB应用的核心技术 JSP是Sun公司主导开发的一种动态网页设计技术,它设计的出发点是为了简化Web编程的步骤和提高Web编程效率,要求JSP程序可以在各种服务器、不同浏览 器及开发工具工作。JSP技术也逐渐演变成服务器和各种开发工具的规范。 (1)生成的网页的内容与显示格式分离 (2)组件的可重用性增强(3)JSP标识符简化网页开发3.2 SSH框架技术 运用框架可以提高系统的质量和开发的速度,现在有许多基于J2EE设计的开源的框架,现在主流的开源框架技术有:升级后处理MVC层次的Struts2框架、具有控制反转的 Spring框架以及ORM的Hibernate框架等。(1) Struts2框架Struts框架最早用于Web项目开发中,它是作为Java开发人员进行大型J2EE项目开发中使用到框架之一,Struts框架符合MVC设计模式,很好把模型、视图和控制分离开来,它的工作原理是先用拦截器对HTTP请求信息进行拦截,然后在对请求信息中所包含的数据格式进行检验,字符进行编码等操作,这类操作发生在MVC模式的控制部分之前,提前处理与逻辑关系不是太大的操作,就可以让控制器专门处理业务逻辑和H1YrP请求的内容,这种处理方式是对“松耦合”的很好体现。(2)Spring框架Spring是由Rod Johnson创建的一个开源框架,创建它的初衷是为解决开发复杂度高、企业级服务使用困难等问题,Spring框架可以替代EJB以前的地位而轻松的完 成任务。如果只认识Spring在服务器端进行开发优势,显然还没有对Spring有深刻的了解,从测试性、耦合性和简便性上来说,Spring框架让任何Java应用都可以从中受益。 (3)Hibernate框架Hibernate框架实现了对JDBC的封装,负责对对象的持久化操作,它是数据库和应用程序之问的桥梁。Hibernate框架编程技术的出现可以使Java编程人员用面向对象的思维来进行数据库的操作,可以这样说,能用到JDBC的地方都可以使Hibernate来代替,Hibernate既可以在客户端的程序中使用,也可以在Web服务器端中使用。仔细研究发现,JDBC编程中会有许多重复的代码,增加了代码的数量,而Hibernate可以解决这方面的问题,优化持久层代码。Hibernate的核心接口主要有Session、SessionFactory、Transaction、Query和Configuration这五个,在任何关于持久层的开发中都将离不开这些接口,实现对象的CRUD操作。 3.3 数据库Mysql是一个小型的关系型数据库管理系统,Mysql同时还是一种关系数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有的数据内容放在一个大的仓库内,这样提高了速度和灵活性。MYSQL是SQL“结构化查询语言”。SQL它是用于访问数据库中最常用的标准语言,由于体积小,速度快,总体拥有成本低,许多种中小型网站为了降低网站总体就会选择mysql作为网站数据库。四、系统需求分析4.1目标和任务根据功能的需求分析,此项目的功能应该具备一下几点: 1、精确查选定位全国各城市未来几天的天气情况 2、系统要符合用户查看信息习惯,界面设计优美 3、系统要具备提醒功能,提醒用户关注城市的天气情况4.2系统功能性需求分析由上述的需求,现将系统分为三大模块:天气显示界面模块、预报城市设置模块与 Widget桌面小部件模块。各系统模块功能如下:1、 天气显示界面模块显示指定城市三天内的天气状况,包括日期、城市名称、温度、风力与当日的建议,用户可通过按菜单键来显示菜单更新当前天气与设置天气显示的界面背景,以及跳转至设置预报城市界面来更换预报城市。2、 预报城市设置模块由自动设置预报城市与手动设置二部分组成,自动设置实现 GPS定位功能,自动确定当前用户所在地;而手动设置则通过可伸展性下拉列表单击选择系统数据库中预存的城市来进行设置,同时为了方便用户查找,支持以输入框的形式来过滤查询预报城市。当单击选中城市时跳转至天气显示界面,来显示该城市当三天内的天气状况;第一次运行时自动跳到该界面。3、 Widget桌面小部件模块为了方便用户实时了解天气状况,特别添加在 Android系统桌面上显示当前天气与时间的天气小部件,使用户拿起手机的第一时刻就能了解天气,同时当用户单击小部件时,自动跳转至天气显示界面,显示三天内的详细天气。五、系统功能界面5.1 设置预报城市界面1、 当第一次运行程序时,跳转至城市设置界面进行预报城市的选择: 2、用户可以通过单击选择“定位当前城市”的方式调用系统 GPS功能自动定位预报城市:3、 用户可通过输入框过滤查询当前系统中预存的城市:5.2 天气显示界面1、 选择了预报城市后,系统跳转至天气显示界面,显示该城市三天内的实时天气:2、 在天气界面中用户可通过按菜单键来调出菜单,选择城市,更新天气与更新背景:5.3 桌面显示界面六、业务逻辑设计6.1、获取城市数据库获取全国各地的城市码,是通过访问中央气象局网从省份直辖市到城镇一级一级得到,获得一个地区的城市码总共需要访问 4次网络,分别如下:1、 访问 /data5/city.xml得到省份直辖市列表与它的编号:01|北京,02|上海,03|天津,04|重庆,05|黑龙江,06|吉林,07|辽宁,08|内蒙古.2、访问 /data5/city.xml得到该省份直辖市的城市编号:1201|济南,1202|青岛,1203|淄博,1204|德州,1205|烟台,1206|潍坊,.3、访问 /data5/city.xml得到该城市的县区编号:120101|济南,120102|长清,120103|商河,120104|章丘,120105|平阴.4、 访问 /data5/city.xml得到该县区的城市编码实现上述功能需要使用Android的网络访问技术,部分代码如下: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 可伸缩性列表的的构建与过滤首先是对关键字进行判断是否为空,如为空则由 values添加所有省份与城市,其中的 allGroups和 allChilds保存的是所有的省份与对应的城市,如果关键字 constraint不为空,则以省份为单位进行匹配,省份匹配的添加下面的所在城镇,如果不匹配,则进行步深入匹配城镇,添加符合条件的城镇。部分代码如下: /* * 根据ASCII码到SpellMap中查找对应的拼音 * * param ascii * int 字符对应的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) / 区间找到 return (spell0 = null) ? spell : spell0; else spell0 = spell; asciiRang0 = asciiRang; 6.3 GPS定位功能的实现1、 得到LocationManager系统定位服务管理者LocationManager locationManager = LocationManager)getSystemService(Context.LOCATION_SERVICE);2、 设置 Geocoder对象,过滤得到符合条件的 LocationProvider ,再由LocationProvider得到封装经纬度信息的 Location对象:/设置一个Criteria标准用于过滤LocationProvider Criteria criteria = new Criteria();criteria.setAltitudeRequired(false);criteria.setBearingRequired(false);String provider = locationManager.getBestProvider(criteria, true); 得到当前的位置对象Location location = locationManager.getLastKnownLocation(provider); double latitude = location.getLatitude(); /得到经度ouble longitude = location.getLongitude(); /得到纬度3、得到经纬度后再访问 /maps/geo来得到含地址信息的XML文本内容,并用自定义的 LocationXMParser工具类解析封装得到此经纬度对应的城市名。上面步骤返回的是一个 Map对象,其中封装了从XML中解析得到的国家、省份、县区和城市四个信息,在得到这些信息后,系统将与数据库中预存的省份城市相比较,最终匹配得到该地区的城市码完成GPS自动定位功能的实现。4、Widget窗体小部件的更新由于 widget中的时钟关系,需要对 widget显示进行时刻的更新用来保持与系统中时间的一致。实现这个功能需要用到 AlarmManager类,这个类专门用来设定在某个指定的时间去完成指定的事件。设计思路是在 Widget的 onUpdate方法中启动一个自定义更新后台服务,更新 widget,并设定下一分钟再次调用此服务,实现此功能部分代码如下:publicclassWeatherWidgetextendsAppWidgetProviderOverridepublicvoidonUpdate(Contextcontext,AppWidgetManagerappWidgetManager,intappWidgetIds)super.onUpdate(context,appWidgetManager,appWidgetIds);/获取需要更新的桌面小控件ForecastService.addWidgetIDs(appWidgetIds);/启动获取天气预报信息的服务context.startService(newIntent(context,ForecastService.class);/启动时间信息的服务context.startService(newIntent(context,ForecastTimeService.class);/更新桌面小控件显示内容publicstaticRemoteViewsupdateViews(Contextcontext,Uriuri)七、测试 当系统初启动时,由于没有设置预报城市,则自动由 MianActivity天气显示视图跳转到 SetCityActivity城市设置视图,并要求用户选择预报城市如下:接下来点击确定选择城市,则系统确定用户单击城市的城市码跳转至天气显示界面,如下:跳转到天气界面后,可单击菜单按钮来显示天气的菜单选择壁纸菜单项可以更换程序背景图片如下:选择设置城市菜单项,则跳转到设置城市的界面,在这里可查询城市,方便了用户的选择widget窗体小部件的添加是通过长按桌面的空白处,出现一个选项菜单,然后选择“窗体小部件”,接着在弹出的选项中选择“天气精灵”即本系统,则设计的小窗体部件将会出现在主屏幕的桌面上:八、总结本系统基本实现了需求的中的天气预报的功能,界面设计也较漂亮,具有一定的实用性。其中的天气数据全部来源于网络,故在运行时一定要确保系统所处环境的网络流畅性。由于开发过程是在模拟器上运行的,故测试的结果可能存在一定的局性性。同时在设计之初考虑问题的不全面,使得在无网状态下设计不完善,运行本系统在无网状态下时会异常停止。通过本系统的开发使得我对于 Android平台的应用开发有了一定的了解,特别是其中的 GPS功能与 Widget的更新功能的实现让我体会到了实践的意义,有自己认真动手才

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论