java手机天气预报实训报告.docx
- 文档编号:10931048
- 上传时间:2023-05-28
- 格式:DOCX
- 页数:23
- 大小:291.87KB
java手机天气预报实训报告.docx
《java手机天气预报实训报告.docx》由会员分享,可在线阅读,更多相关《java手机天气预报实训报告.docx(23页珍藏版)》请在冰点文库上搜索。
java手机天气预报实训报告
新乡学院计算机与信息工程学院
项
目
实
训
报
告
项目名称
天气预报系统的设计与实现
班级
2012级计算机科学与技术1班
学号
姓名
指导教师
2015年12月29日
一、项目背景
1.1项目概述
随着手机应用的日益普及和深化,随时随地了解未来几天的天气情况已经成为一种趋势。
本项目要开发的是基于单机的天气查询系统。
由于现代都市的快节奏,再天天守着电视机看雷打不动的天气预报已经变得越来越不现实了。
因此,实现一个将各种天气查询服务功能集成起来的信息系统就显得十分必要,即可以节省时间,又可以实现个性化的服务,减少不必要的等待和繁重的信息。
开发的系统要求界面良好,方便直观。
方便用户及时了解最新的天气状况
1.2项目内容
该项目是基于SSH框架实现一个实时显示天气状况的系统,该系统所研究的问题如下:
(1)系统运行平台的选取。
该系统采用JavaEE主流的框架来设计系统。
(2)确定系统具有的基本功能。
该设计分为天气显示界面模块、预报城市设置模块、桌面小部件模块三个模块,天气显示模块显示指定城市三天内的天气状况,预报城市设置模块包括自动设置和手动设置,桌面小部件模块可在手机桌面上添加小部件,显示当前天气与时间。
(3)对系统进行详细设计和分析。
根据系统所实现的功能,进行模块的设计,画出系统的结构图。
二、环境配置
该天气预报系统采用SSH框架,所使用的开发工具是Myecplise然后再开发工具的基础上进行Struts+Spring+Hibernate三大框架的搭建。
具体的配置工具如下:
2.1myeclipse开发工具
MyEclipse是Eclipse的一个插件,是对Eclipse集成丌发环境的很好的扩展。
MyEclipse是针对J2EE项目和数据库程序而设计的,因此利用它进行这方面的-开发将会对工作效率有很大的提高。
作为J2EE集成丌发环境,它具有丰富的功能,在MyEclipse环境中可以进行编码、程序调试测试和项目发布工作,并对HTMI,Struts、Spring、Hibernate等都支持。
2.2Tomcat服务器
Tomcat是有SUN公司开发一个可以运行JSP或Servlet容器,是基于Java的Web服务器,是作为Web服务器的组成部分存在的。
Tomcat的工作模式流程:
当它接收到客户端的请求时,Tomcat调用ServletRequest对象把客户端的请求内容封装起来,接着调用Servlet生命周期中的方法,完成Servlet这一过程,最后调用ServletResponse对象把Servlet执行的结果封装起来返回给客户,这就是Tomcat工作一次的流程。
Tomcat在运行时对系统资源要求很低,它具有良好的扩展性,拥有系统开发中常用到的邮件服务等功能和支持负载平衡。
Tomcat进行更改或增加新的功能,因此Tomcat在程序员中越来越受到欢迎。
三、相关技术分析
3.1J2EEWEB应用的核心技术
JSP是Sun公司主导开发的一种动态网页设计技术,它设计的出发点是为了简化Web编程的步骤和提高Web编程效率,要求JSP程序可以在各种服务器、不同浏览器及开发工具工作。
JSP技术也逐渐演变成服务器和各种开发工具的规范。
(1)生成的网页的内容与显示格式分离
(2)组件的可重用性增强
(3)JSP标识符简化网页开发
3.2SSH框架技术
运用框架可以提高系统的质量和开发的速度,现在有许多基于J2EE设计的开源的框架,现在主流的开源框架技术有:
升级后处理MVC层次的Struts2框架、具有控制反转的Spring框架以及ORM的Hibernate框架等。
(1)Struts2框架
Struts框架最早用于Web项目开发中,它是作为Java开发人员进行大型J2EE项目开发中使用到框架之一,Struts框架符合MVC设计模式,很好把模型、视图和控制分离开来,它的工作原理是先用拦截器对HTTP请求信息进行拦截,然后在对请求信息中所包含的数据格式进行检验,字符进行编码等操作,这类操作发生在MVC模式的控制部分之前,提前处理与逻辑关系不是太大的操作,就可以让控制器专门处理业务逻辑和H1YrP请求的内容,这种处理方式是对“松耦合”的很好体现。
(2)Spring框架
Spring是由RodJohnson创建的一个开源框架,创建它的初衷是为解决开发复杂度高、企业级服务使用困难等问题,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、访问
01|北京,02|上海,03|天津,04|重庆,05|黑龙江,06|吉林,07|辽宁,08|内蒙古...
2、访问
1201|济南,1202|青岛,1203|淄博,1204|德州,1205|烟台,1206|潍坊,......
3、访问
120101|济南,120102|长清,120103|商河,120104|章丘,120105|平阴.....
4、访问
实现上述功能需要使用Android的网络访问技术,部分代码如下:
publicvoidonCreate(BundlesavedInstanceState){
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(newButton.OnClickListener(){
publicvoidonClick(Viewv){
try{
TvPlace=(TextView)findViewById(R.id.tvPlace);
//Stringplace=ETplace.getText().toString();
Stringplace=
CntoSpell.getFullSpell(ETplace.getText().toString());
6.2可伸缩性列表的的构建与过滤
首先是对关键字进行判断是否为空,如为空则由values添加所有省份与城市,其中的allGroups和allChilds保存的是所有的省份与对应的城市,如果关键字constraint不为空,则以省份为单位进行匹配,省份匹配的添加下面的所在城镇,如果不匹配,则进行步深入匹配城镇,添加符合条件的城镇。
部分代码如下:
/**
*根据ASCII码到SpellMap中查找对应的拼音
*
*@paramascii
*int字符对应的ASCII
*@returnString拼音,首先判断ASCII是否>0&<160,如果是返回对应的字符,
*
*否则到SpellMap中查找,如果没有找到拼音,则返回null,如果找到则返回拼音.
*/
publicstaticStringgetSpellByAscii(intascii){
if(ascii>0&&ascii<160){//单字符
returnString.valueOf((char)ascii);
}
if(ascii<-20319||ascii>-10247){//不知道的字符
returnnull;
}
SetkeySet=spellMap.keySet();
Iteratorit=keySet.iterator();
Stringspell0=null;
;
Stringspell=null;
intasciiRang0=-20319;
intasciiRang;
while(it.hasNext()){
spell=(String)it.next();
ObjectvalObj=spellMap.get(spell);
if(valObjinstanceofInteger){
asciiRang=((Integer)valObj).intValue();
if(ascii>=asciiRang0&&ascii return(spell0==null)? spell: spell0; }else{ spell0=spell; asciiRang0=asciiRang; } } } 6.3GPS定位功能的实现 1、得到LocationManager系统定位服务管理者 LocationManagerlocationManager=LocationManager)getSystemService(Context.LOCATION_SERVICE); 2、设置Geocoder对象,过滤得到符合条件的LocationProvider,再由LocationProvider得到封装经纬度信息的Location对象: //设置一个Criteria标准用于过滤LocationProvider Criteriacriteria=newCriteria(); criteria.setAltitudeRequired(false); criteria.setBearingRequired(false); Stringprovider=locationManager.getBestProvider(criteria,true); 得到当前的位置对象 Locationlocation=locationManager.getLastKnownLocation(provider); doublelatitude=location.getLatitude();//得到经度 oublelongitude=location.getLongitude();//得到纬度 3、得到经纬度后再访问LocationXMParser工具类解析封装得到此经纬度对应的城市名。 上面步骤返回的是一个Map对象,其中封装了从XML中解析得到的国家、省份、县区和城市四个信息,在得到这些信息后,系统将与数据库中预存的省份城市相比较,最终匹配得到该地区的城市码完成GPS自动定位功能的实现。 4、Widget窗体小部件的更新 由于widget中的时钟关系,需要对widget显示进行时刻的更新用来保持与系统中时间的一致。 实现这个功能需要用到AlarmManager类,这个类专门用来设定在某个指定的时间去完成指定的事件。 设计思路是在Widget的onUpdate方法中启动一个自定义更新后台服务,更新widget,并设定下一分钟再次调用此服务,实现此功能部分代码如下: public class WeatherWidget extends AppWidgetProvider { @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds) { super.onUpdate(context, appWidgetManager, appWidgetIds); // 获取需要更新的桌面小控件 ForecastService.addWidgetIDs(appWidgetIds); // 启动获取天气预报信息的服务 context.startService(new Intent(context, ForecastService.class)); // 启动时间信息的服务 context.startService(new Intent(context, ForecastTimeService.class)); } //更新桌面小控件显示内容 public static RemoteViews updateViews(Context context, Uri uri) { } 七、测试 当系统初启动时,由于没有设置预报城市,则自动由MianActivity天气显示视图跳转到SetCityActivity城市设置视图,并要求用户选择预报城市如下: 接下来点击确定选择城市,则系统确定用户单击城市的城市码跳转至天气显示界面,如下: 跳转到天气界面后,可单击菜单按钮来显示天气的菜单 选择壁纸菜单项可以更换程序背景图片如下: 选择设置城市菜单项,则跳转到设置城市的界面,在这里可查询城市,方便了用户的选择 widget窗体小部件的添加是通过长按桌面的空白处,出现一个选项菜单,然后选择“窗体小部件”,接着在弹出的选项中选择“天气精灵”即本系统,则设计的小窗体部件将会出现在主屏幕的桌面上: 八、总结 本系统基本实现了需求的中的天气预报的功能,界面设计也较漂亮,具有一定的实用性。 其中的天气数据全部来源于网络,故在运行时一定要确保系统所处环境的网络流畅性。 由于开发过程是在模拟器上运行的,故测试的结果可能存在一定的局性性。 同时在设计之初考虑问题的不全面,使得在无网状态下设计不完善,运行本系统在无网状态下时会异常停止。 通过本系统的开发使得我对于Android平台的应用开发有了一定的了解,特别是其中的GPS功能与Widget的更新功能的实现让我体会到了实践的意义,有自己认真动手才能算真正的掌握,书本上的知识也不一定完全准确,在遇到问题时可以通过网上搜索的方式得到解决。 同时在本系统中反映的问题也让我意识到了自己的一些不足,明解了以后学习时的基本方向。 参考文献 [1]孙卫琴,李洪成.《Tomcat与JavaWeb开发技术详解》.电子工业出版社,2013年6月 [2]BruceEckel.《Java编程思想》.机械工业出版社,2010年10月 [3]FLANAGAN.《Java技术手册》.中国电力出版社,2012年6月 [4]LeeAnnePhillips.《巧学活用HTML4》.电子工业出版社,2008年8月 [5]飞思科技产品研发中心.《JSP应用开发详解》.电子工业出版社,2013年9月 [6]耿祥义,张跃平.《JSP实用教程》.清华大学出版社,2012年5月1日 [7]孙涌.《现代软件工程》.北京希望电子出版社,2009年8月 [8]Brown等.《JSP编程指南(第二版)》.电子工业出版社,2011年3月 [9]清宏计算机工作室.《JSP编程技巧》.机械工业出版社,2013年5月 [10]朱红,司光亚.《JSPWeb编程指南》.电子工业出版社,2010年9月 [11]赛奎春.《JSP工程应用与项目实践》.机械工业出版社,2012年8月 项目实训主要目的 通过项目实训,使学生能对所学的专业课知识融会贯通,达到综合训练的目的。 通过团队合作,使学生快速掌握企业软件开发所需要具备的基本开发技能,并切身感受软件开发的全过程,通过团队的努力完成一个中小型项目,为日后的求职奠定基础。 项目实训任务要求 ●了解企业的工作流程和工作方式; ●熟悉实际项目分析、设计、开发、测试、上线等完整流程,熟悉项目文档的编写; ●熟悉开发工具、数据库设计工具、项目管理工具等使用; ●熟悉常用服务器软件安装、配置; ●熟练掌握Java语言和开发技术,并能灵活运用; ●掌握企业开发常用的建模工具和设计模式; ●养成良好的表达、沟通和团队协作能力。 教师评语 成绩: 指导教师(签名)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 手机 天气预报 报告