APP下载

基于Andriod 平台的酒店即时查询系统的设计

2016-03-04张超方广昕

电脑知识与技术 2015年36期

张超 方广昕

摘要: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).