基于Andriod 平台的酒店即时查询系统的设计
2016-03-04张超方广昕
张超 方广昕
摘要:21世纪以来,科技发展迅速,移动互联网技术的迅速普及,不仅让各大厂商看到了移动设备未来广阔的前景,普通用户也切身感受到了移动时代的到来。正是因为贴近人们的生活,笔者选择了Android系统移动端的酒店查询系
统,这项应用可以给出门在外的人提供更多的方便。
关键词:酒店查询;JAVA;Android
中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2015)36-0052-03
1 概述
1.1课题研究的背景
随着移动互联网的普及,手机等终端设备已经越来越成为人们生活的一部分;另一方面,就便携性面言,电脑已经不再适合人们的日常需要,而手机等终端设备相比于电脑却有关巨大的优势,由此,手机功能的扩展,已经成为势在必行的趋势。
Android能很好满足终端对系统日益增长的需要,它拥有优秀的开发、调试环境,良好的用户体验,以及强大的功能组件。对于程序员无疑有着莫大的吸引力。
1.2 课题研究的意义
网上的搜索工具有很多,好坏难分,真假难辨,用户很难找到真正有用的、功能全面的酒店查询网站,而专门的客户端,不仅使用简单、快捷,而且功能专一且全面,安全性也高很。现在出门旅游、工作的人越来越多,因此,需要查询酒店信息的用户也越来越广。由此可见,做一个酒店查询客户端一定会很多人需要的。
2 需求分析
本软件主要分为两部分,一,JavaWeb服务器端,实现对酒店的管理,包括酒店的详细信息、类型、房间介绍,地理位置等。二,手机显示端,手机端是一个App Widget应用程序,启动程序后可以进行三种方式的酒店查找、身边搜索、地图搜索、定点搜索,每种搜索都会有酒店的列表显示和地图显示,可以进行浏览和详细阅读,还可以地图显示,查找行走路线等等。
从上面的描述中可以基本了解软件的功能需求:
1) 启动App Widget应用程序;
2) 设置界面:对要进行酒店的列表显示和地图坐标显示;
3) 显示界面:酒店名称,简介,星级,分数,服务等。
4) 详细界面:酒店的各方面的详情,图片,房间类型介绍,地图显示,提供行走路线等。
3 程序设计
第一步,数据库的设计与实现;第二步,web端应用程序的设计与实现;第三步,Android移动端的设计与实现。
3.1 数据库的设计
经过对开发环境和系统架构的分析,决定使用MySQL数据库,他的特点是数据库小,连接库方便,便于移植。根据酒店的信息和程序的要求定为数据库建立下表。
3.2 JavaEE服务器端酒店管理的设计
系统流程如图1所示,首先登录系统,然后实现对酒店操作,包括对酒店的信息的添加、查询、修改和删除。
3.3 Android客户端设计
当配置完Android开发环境后。需要建一个Android工程来熟悉Android的开发流程。功能实现流程如图2所示。
4 关键技术与实现方案
4.1 MVC设计模式,用jQuery显示列表
当添加完酒店后需要对酒店的房间进行添加,并对房间进行管理,然后是房间管理模块的设计。该模块采用的是MVC设计模式,视图(View)代表用户交互界面。模型(Model)是业务流程/状态的处理以及业务规则的制定。控制(Controller)理解为从用户接受请求,将模型与视图匹配在一起,共同完成用户的请求。用JQuery显示列表。主要代码如下:
/**
* 加载数据区
*/
$(function() {
// 设置ajax同步--全局模式
$.ajaxSetup({
async : false
});
$('#hotelTable').datagrid({
title : '酒店管理',
iconCls : 'icon-edit',// 图标
width : "100%",
height : "auto",
nowrap : false,// table中td内容太长自动换行
autoRowHeight : false,
striped : true,
collapsible : false,// 是否可折叠的
fit : false,// 自动大小
url : appName + '/hotel/queryHotel',
method : 'post',
sortName : 'code',
sortOrder : 'desc',
remoteSort : false,
idField : 'code',
singleSelect : false,// 是否单选
rownumbers : true,// 行号
fitColumns : true,
queryParams : {
unitId : '',
yjwzmc : ''
},
columns : [ [ {
field : 'name',
title : '酒店名称',
width : 130,
align : 'center',
}, {
field : 'brand',
title : '酒店品牌',
width : 130,
align : 'center'
}, {
field : 'price',
title : '价格',
width : 130,
align : 'center'
}, {
field : 'deviceService',
title : '设施服务',
width : 130,
align : 'center'
}, {
field : 'city',
title : '所在城市',
width : 130,
align : 'center'
}, {
field : 'caozuo',
title : '操作',
width : 130,
align : 'center',
formatter : function(value, rec, index) {
var editId = rec.id;
// alert(editId);
return returnOption = "细节 ; ; ; ; ;"+"修改"+" ; ; ; ; ;删除";
// return up;
}
} ] ],
pagination : true
});
});
4.2 实现GPS定位
当用户打开软件时,程序自动进行GPS定位,然后根据用户所在的经纬度,获取用户所在的城市名。
第一步,获取经纬度,关键代码如下。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_old);
// 开始执行获取location对象
initLocation(MainActivityOld.this);
}
@Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
this.cityName = XML.getCityName(latitude, longitude);
}
Location location;
LocationManager lm;
LocationListener locationListener;
// 通过network获取location
private String networkProvider = LocationManager.NETWORK_PROVIDER;
// 通过gps获取location
private String GpsProvider = LocationManager.GPS_PROVIDER;
// 获取location对象
private void initLocation(Context mContext) {
// 获得系统及服务的 LocationManager 对象
lm = (LocationManager) mContext
.getSystemService(Context.LOCATION_SERVICE);
// 首先检测 通过network或是gps获得 location 对象
// 如果获得了location对象 则更新tv
if (startLocation(networkProvider, mContext)) {
updateLocation(location, mContext);
} else if (startLocation(GpsProvider, mContext)) {
updateLocation(location, mContext);
} else {
// 如果上面两种方法都不能获得location对象 则显示下列信息
Toast.makeText(this, "没有打开GPS设备", 5000).show();
}
}
第二步,通过经纬度,获取城市名,关键代码如下。
public static String getCityName(double latitude, double longitude) {
String cityName = null;
Document doc = null;
try {
// 解析文件
doc = parse(latitude, longitude);
// 取得根节点
Element root = doc.getDocumentElement();
// 取得子节点列表
NodeList gsrs = root.getChildNodes();
Node results = gsrs.item(3);// result节点
NodeList result = results.getChildNodes();// result子节点
Node addressComponent = result.item(7);// addressComponent节点
NodeList addressComponents = addressComponent.getChildNodes();// addressComponent子节点
Node city = addressComponents.item(7);// city节点
// System.out.println(city.getTextContent());// city节点值
cityName = city.getTextContent();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return cityName;
}
4.3 服务器端与手机端的数据连接
本机采用JSON进行数据传递。
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式。同时,JSON是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON数据不须要任何特殊的 API 或工具包。
5总结
通过反复测试,系统的各个模块运行状态良好没有出现什么大的逻辑问题。能够正常的运行。系统的功能模块相对比较完善,操作界面比较简单,容易操作,容易被人所使用,真正投入应用后,会给外出人员带来极大的方便。
参考文献:
[1] 张利国, 代闻,龚海平. Android移动开发案例详解[M].北京:人民邮电出版社,2010.
[2] 张利国, 龚海平,王植萌. Android移动开发入门与进阶[M].北京:人民邮电出版社,2009.
[3] 张利国, 代闻, 龚海平. Android移动开发案例详解.北京:人民邮电出版社,2010.
[4] 韩超, 梁泉. Android系统原理及开发要点详解[M].北京:电子工业出版社,2010.
[5] 余志龙. Google Android SDK开发范例大全[M].北京:人民邮电出版社,2009.
[6] 黄晓韩. JSP环境下的SQL注入防范[J].网络与信息,2010(8):56.
[7] 夏红星. SQL Server数据传输协议分析[J].计算机与网络,2010(14):53-55.
[8] 赵根朝. 基于测试流程的软件测试设计[J].计算机与网络,2010(14):45-48.
[9] 公磊, 周聪. 基于Android的移动终端应用程序开发与研究[J].计算机与现代化,2008(8).