《【毕业设计】基于Android平台的手机网上订餐系统的研究与实现.doc》由会员分享,可在线阅读,更多相关《【毕业设计】基于Android平台的手机网上订餐系统的研究与实现.doc(31页珍藏版)》请在三一办公上搜索。
1、基于Android平台的手机网上订餐系统的研究与实现中文摘要ANDROID手机网上点餐系统是基于ANDROID手机的一款网络应用软件,目的在于为注册用户和餐馆提供极大的便利。应用此软件,用户可以轻松便捷地实现自己的点菜要求。此系统基于C/S结构,采用PHP和MYSQL编程来实现对数据的存储和操作。手机客户端主要应用ANDROID开发技术,使用ACTIVITY组件,并遵照MVC模式进行开发。网络数据交互则遵照HTTP协议来实现与服务器端的通信。本文第一章引言部分对整个系统和开发的背景作了简要的分析。第二章简要介绍开发环境与开发工具与相关技术。第三章是系统的需求分析和数据库的设计,客户端程序的整体
2、结构及Web Service服务的设计。第四章是主体功能的编码实现,介绍本系统各个功能模块的具体实现。最后则是对开发过程的总结。关键词: Android Json数据 HttpClient SOAP协议 Web Service服务1 绪论何谓“网上订餐”?简言之,就是由网站担任消费者与餐饮商家之间的“媒介”,消费者直接通过网络来预订餐厅座位或房间。订餐者根据菜系、位置、价位等找到中意的餐馆酒店后,只需鼠标点击并输入就餐时间、人数等信息即可,订餐网会在完成预订后通过e-mail或短信告知预订情况。网上订餐不仅对消费者完全免费,还可提供不同程度的折扣,使人们在没有就餐烦恼的情况下享受物美价廉的可口
3、饭菜。1.1 研究背景随着计算机、互联网和移动终端及其应用的快速发展,不断的改变着人们的工作方式、交流方式、学习方式以及生活的各个方面,尤其是电子商务的突飞猛进正使人们的购物方式、支付方式发生着翻天覆地的变化。如今快节奏的生活方式让人们困扰不已,而就餐与交通问题首当其冲。餐厅太过拥挤、客流高峰期就餐困难、点餐等待等问题层出不穷。如果能有一个为广大民众所接受的系统应用解决这些问题,对于解决生活中的困扰及提升人们的生活质量都有极大的帮助。1.2 目前形势国内也有不少网上订餐的服务形式,其中包括线上订购、在线支付等等。其实,想法都很不错,但想实现网上订购,这些网上订餐的形式应该很难,个中原因主要就是
4、餐饮行业普遍存在的信息化意识薄弱,这让网上订餐成为实在的瓶颈,短时期内这是很难突破的,这也是为什么现在真正能实现网上订餐、并能被广泛接纳的网上订餐行为,依然离不开电话直接订购的主要原因。据不完全统计,2008年新上线订餐类网站近千家,大多数集中在经济较发达的大都市和一级城市,如北京、上海、广州、深圳、重庆、福州、厦门等。 网上订餐,想真正实现“网上订,网上付”的正规化,还需要很长的一段时日。1.3 选题方向及意义据了解,目前国内较为成熟的、成体系的餐饮预定类网站为数不多,“行业巨头”主要集中在京、沪、粤三地请客800、饭统网雄踞京城;订餐小秘书、大众点评网坐镇上海滩、八界网独守羊城。处于餐饮产
5、业链中的新生产业网络订餐业,正受到越来越多投资人的偏爱。记者调查发现,当下众多此类网站,如大众点评网、订餐小秘书、紫页114、请客800等,都有一个共同的盈利模式,即通过互联网帮客人订餐、提供一定的折扣,从而获得店方给予的返点,这样的运营模式实际就是餐饮行业的携程网。这些网站不仅可以给网民提供海量的餐厅信息、交流美食心得的平台,而且可以给订餐者实实在在的折扣。2 开发环境及相关技术简介2.1 开发环境简介本系统是基于Android平台的网上订餐系统,因此Android平台是首要搭建的平台,鉴于目前主流的Android系统基本上都在Android2.1版本以上,因此就选择Android SDK
6、2.1版本作为开发本系统Android手机客户端的基础。此外,本系统使用Apache+PHP+MySQL作为Web端的开发基础。下面就是本系统开发所需的各种软件的名称及版本等级。1、JDK 1.6及其以上版本。该版本为较高的版本,具有很多低版本所不具备的新特性。2、Web应用服务器,Apache 2.2.6版本。3、数据库,MySQL5.1及其以上版本。MySQL功能强大且安装方便,并且支持事物后更增添了数据的完整性及安全性。4、开发环境,Eclipse JavaEE IDE for Web Developers 3.5 及其以上版本,该版本支持EE系统的开发。5、Android SDK 2.
7、1及其Eclipse 开发插件ADT。2.2 Web Service技术简介Web Service平台需要一套协议来实现分布式应用程序的创建。任何平台都有它的数据表示方法和类型系统。要实现互操作性,Web Service平台必须提供一套标准的类型系统,用于沟通不同平台、编程语言和组件模型中的不同类型系统。目前这些协议有:XML和XSD、SOAP、WSDL、UDDI及调用RPC与消息传递。而本系统所用的协议则是:SOAP和WSDL。SOAP即简单对象访问协议(Simple Object Access Protocal),它是用于交换XML编码信息的轻量级协议。它有三个主要方面:XML-envel
8、ope为描述信息内容和如何处理内容定义了框架,将程序对象编码成为XML对象的规则,执行远程过程调用(RPC)的约定。SOAP可以运行在任何其他传输协议上。例如,你可以使用 SMTP,即因特网电子邮件协议来传递SOAP消息,这可是很有诱惑力的。在传输层之间的头是不同的,但XML有效负载保持相同。Web Service打破了软件应用、网站和各种设备之间的格格不入的状态,实现“基于Web无缝集成”的目标。WSDL就是用机器能阅读的方式提供的一个正式描述文档而基于XML的语言,用于描述Web Service及其函数、参数和返回值。因为是基于XML的,所以WSDL既是机器可阅读的,又是人可阅读的。3 系
9、统功能设计及概述3.1 系统开发背景随着计算机技术的发展,越来越多的人依赖计算机。而智能手机的诞生及其相关应用的发展、电信技术的进步,又为移动终端及其应用的普及提供了可能。Google公司2005年推出的Google地图,2008年推出的第一款Android智能手机,极大地促进了手机应用的大发展。本系统将主要基于Google Map及Android应用软件来实现一个美食订购、分享的平台,通过Web端以及Android手机端的实现使用户可以实时与他人分享自己喜欢的美食,并且可以通过Google Map精确快速的找到饭店所在的位置。3.2 功能概述现在对该系统的基本功能进行简单介绍。1、Web会员
10、端:用户可以通过注册模块注册会员账号,通过登录系统实现美食信息的查询、收藏和分享,实现美食的订购,管理个人信息。2、Web商户端:商户也可以通过注册模块注册成为系统商户,商户被审核通过后即可登录系统设置餐厅信息,包括利用google地图上传餐厅具体的经纬度;管理餐厅所提供的美食信息,包括添加、删除、修改;查询和管理会员订单,包括是否接受订单、所订餐品是否发出等。3、Web管理端当管理员登陆系统后,可以对整个系统进行管理,包括审核商户、文章、广告信息;添加、修改和删除美食种类及美食信息;改变站长推荐、今日特价等信息;对数据库进行维护。4、Android客户端会员除了通过电脑访问该系统之外,还可以
11、通过在手机中安装相应的程序来访问该系统。在手机端,用户同样可以注册成为会员或登录系统,登陆成功后可以查看美食信息、搜索美食信息、上传美食信息、查询个人信息、查看个人的订单、及个人收藏的美食信息。3.3 MySQL数据库设计本系统中的信息表主要有11张数据表:网站文章表、会员信息表、商户信息表、美食种类表、餐品信息表、餐厅信息表、评论表、广告表、订单表、订单详情表、用户推荐美食信息表(详见附录一)。3.4 Android客户端的设计本系统的Android客户端是基于Android 2.1 开发出来的,下面是对Android应用程序的构成进行介绍。先看项目的目录结构(如下图一):(图1)在该程序中
12、,包含如下一些主要的文件,接下来就详细解释一下。1、src目录 src目录中存放的是该项目的源代码,其内部结构会根据用户所声明的包自行组织,例如本系统中所用的三个基本包,它们包含了程序所用到的Activity和各种类及各种方法。2、gen目录该目录下的文件是ADT自动生成的,并不需要人为地修改。它就是项目的字典,项目中用户界面、字符串、图片、声音等资源都会在该类中创建它们唯一的ID,当项目中使用这些资源时,会通过该类得到资源的引用。3、Android 2.1该目录中存放的是该项目支持的JAR包,同时还包含项目打包时需要的META-INF目录。4、res目录该目录用于存放应用城中经常使用的资源文
13、件,包括图片、声音布局文件及参数描述文件等,包括多个目录,以drawable开头的三个文件是用来保存不同格式的图片的资源。Layout文件夹则是存放所有的布局文件的。Values是用来存放程序所用到的字符串、颜色及样式描述文件的。5、AndroidManifest.xml文件该文件时应用程序的系统控制文件,是应用程序的全局性描述文件,让外界知道该应用程序包含哪些组件、资源、何时运行及应用程序自身应该拥有的权限的声明。例如,本程序应用到的权限有:第一个是访问网络的权限,第二个是精确定位的权限,第三个是应用照相权限,第四个是往存储卡中写入数据的权限。3.5 Web Service服务端的设计And
14、roid应用通常都是运行在手机平台上,手机系统的硬件资源是有限的,不管是存储能力还是计算能力都很有限,在Android系统上开发、运行一些单用户、小型应用还是可能的,但是对于需要进行大量的数据处理、复杂计算的应用,还是只能不是爱远程服务器上,而Android应用将只是充当这些应用的客户端。Web Service用于消除不同平台、不同语言之间的差异,将现有的应用程序发布成开放式的服务,从而允许互联网上任何地方、任何平台、任何语言的应用程序可以向全世界发布信息或提供某种服务。本系统采用SOAP(Simple Object Access Protocol,简单对象访问协议),它是一种具有扩展性的XM
15、L消息协议。SOAP是一个应用程序向另一个应用程序发送XML消息。SOAP消息是从SOAP发送者传至SOAP接受者的单路消息,任何应用程序均可作为发送者或者接受者。SOAP仅定义消息结构和消息处理的协议,与底层的传输协议独立。因此,SOAP协议能通过HTTP,JMS或者SMTP协议传输。使用PHP做服务端,要用Android去访问,用JSON和XML提供返回的数据,而Android端则可以用Apache的HttpClient去访问。JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于JavaScript(Standard ECMA-262 3rd
16、 Edition - December 1999)的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C+, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成。HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。本项目的Android客户端就是利用这个组件进行Web服务请求的。4 系统实现及
17、功能实例4.1 Web会员端主要功能实现及示例4.1.1 注册、登陆验证功能的实现当进入网站首页时,会发现网站右侧的登陆标签,若你是会员,请点击登陆,就会跳转至登陆页面;若你不是会员,也点击登录。因为登陆页面注册按钮,用户就可以进入注册页面。在注册或登录的过程中,页面会提示不同程度的提示信息,比如登录或注册成功并自动跳转页面,会提示你的用户名或密码输入不正确等。4.1.2 查询美食信息(包括餐厅地图信息) (图2) (图3)当用户在浏览美食信息时,点击进入餐厅查询餐厅所有美食信息,用户在餐厅详细信息页面可以看到美食的详细信息,包括美食信息及美食所在餐厅的位置信息,为用户提供全面细致的餐厅及美食
18、信息。实现过程:var geocoder; var map; var markersArray = ; function initialize(lat,lng) geocoder = new google.maps.Geocoder(); var latlng = new google.maps.LatLng(lat,lng); var myOptions = zoom: 13, center: latlng, mapTypeId: google.maps.MapTypeId.ROADMAP map = new google.maps.Map(document.getElementById(m
19、ap_canvas), myOptions);addMarker(latlng); addMarker(event.latLng); ); 4.1.3 购买、收藏美食功能的实现 (图4) (图5)用户如果要点餐,那就必须进入美食的详细信息页面(如图4),这样就可以进行点餐和收藏了。用户只要点击订购按钮,就可以把美食添加进菜单,而且用户还可以改变订购的数量,为用户添加了便利(如图5)。 (图6) (图7)用户在订购结束后即可进行结算,点击购物车页面的结算按钮,即可进入填写订单详细信息页面(如图6),在确认订单详细信息后,用户即可提交订单(如图7),完成订餐过程。4.2 Web商户端功能实现及实例
20、4.2.1 注册、登陆验证功能的实现当商户进入网站首页时,会发现网站底部有商务合作与餐厅管理两个标签,若你不是已注册商户,点击商务合作就会跳转至注册页面;若你已是注册商户,点击餐厅管理。商户在注册后会在经过网站管理员的审核之后才会通过;在登录的过程中,页面会提示不同程度的提示信息,比如登录或注册成功并自动跳转页面,会提示你的用户名或密码输入不正确等。4.2.2 管理餐厅信息(上传、修改、删除)功能的实现 (图8) (图9)当商户已经过审核可以登录至商户管理页面时(如图8),商家可以选择修改餐厅信息页面上传餐厅信息(如图9),系统设置当前的区域为保定火车站附近的区域。这里可以通过Google地图
21、获取商家餐厅的具体位置(精确的经纬度)并在确认上传之后上传至数据库。获取地图并添加位置数组的map.js代码如下所示:var geocoder; var map; var markersArray = ; function initialize() geocoder = new google.maps.Geocoder(); var latlng = new google.maps.LatLng(38.86300,115.48003);/这里就是页面当前显示的地理位置的具体经纬度。 var myOptions = zoom: 13, center: latlng, mapTypeId: goo
22、gle.maps.MapTypeId.ROADMAP map = new google.maps.Map(document.getElementById(map_canvas), myOptions);google.maps.event.addListener(map, click, function(event) addMarker(event.latLng); ); function addMarker(location) var clickedLocation = new google.maps.LatLng(location); var marker = new google.maps
23、.Marker( position: location, map: map );document.getElementById(show_x).value = location.lat();document.getElementById(show_y).value = location.lng();map.setCenter(location); markersArray.push(marker);4.3 Android手机端功能实现及实例4.3.1 登陆及验证功能的实现 (图10) (图11)当用户安装Android客户端后即可运行。首先进入的是欢迎界面,然后会自动跳转进入登录界面。这里用户
24、可以登录或注册,这里就点击登录按钮,如果你输入的用户名和密码不一致,系统就会提示你重新输入(如图10)。当你输入正确的用户名和密码后,系统就会自动跳转进入系统的主界面(如图11)。关键代码如下所示:HttpPost httpPost = new HttpPost(url); HttpClient client = new DefaultHttpClient(); StringBuilder str = new StringBuilder(); /获取用户名文本框内容String editUid = uid.getText().toString();/获取密码框内容String editPwd
25、= pwd.getText().toString(); ArrayList params = new ArrayList(); params.add(new BasicNameValuePair(username,editUid); params.add(new BasicNameValuePair(password,editPwd); BufferedReader buffer = null; try httpPost.setEntity(new UrlEncodedFormEntity(params,HTTP.UTF_8); HttpResponse httpRes = client.ex
26、ecute(httpPost); if(httpRes.getStatusLine().getStatusCode() = 200) buffer = new BufferedReader(new InputStreamReader(httpRes.getEntity().getContent(); for(String s = buffer.readLine();s != null; s = buffer.readLine() str.append(s); /String out = EntityUtils.toString(httpRes.getEntity().getContent();
27、UTF_8); /StringBuilder sb = new StringBuilder(); Log.i(Tag,str.toString(); buffer.close(); JSONObject json = new JSONObject(str.toString(); String title = json.getString(title); Log.i(Tag,title);int id = json.getInt(id);if(id = 1)Toast.makeText(this, id + title ,Toast.LENGTH_SHORT).show();/跳转到主页面Int
28、ent intent = new Intent();intent.setClass(FanyouClient.this,MainActivity.class);Bundle bundle = new Bundle();bundle.putString(action,register);intent.putExtras(bundle);startActivity(intent);FanyouClient.this.finish();elseToast.makeText(this,对不起,请重新输入用户名或密码 ,Toast.LENGTH_SHORT).show();4.3.2 订购美食功能的实现
29、 (图12) (图13)用户在进入系统主界面后,可以看到几个主要按钮,如果想要订餐,可以进入餐厅(如图12所示),这样就可以如同web端一样浏览餐厅信息,在选择某个餐厅后,就可以看到餐厅所有的美食信息,在浏览餐品详细信息时,用户就可以进行购买和收藏等操作了(如图13所示)。关键代码如下所示:JSONArray jsonArray = new JSONArray(builder.toString(); for(int i = 0;ijsonArray.length();i+) JSONObject jsonObject2 = jsonArray.getJSONObject(i);String i
30、d = jsonObject2.getString(bid);String restaurant = jsonObject2.getString(restaurant);String addr = jsonObject2.getString(address);Restaurant restInfo = new Restaurant();restInfo.setBid(id);restInfo.setRest(restaurant);restInfo.setAddress(addr);map = new HashMap();map.put(bid,id);map.put(restaurant,r
31、estaurant);map.put(address,addr);list.add(map);ComendData.restaurant.add(restInfo); ListView lv = (ListView) findViewById(R.id.searchResultListView); SimpleAdapter mSchedule = new SimpleAdapter(this, /没什么解释 list,/数据来源 R.layout.my_listitem,/ListItem的XML实现 /动态数组与ListItem对应的子项 new String address, resta
32、urant, /ListItem的XML文件里面的两个TextView ID new int R.id.ItemTitle,R.id.ItemText); /添加并且显示 lv.setAdapter(mSchedule);4.3.3 美食推荐功能的实现(图14)本系统另外的一个功能就是为用户提供了一个可以和网友分享美食信息的平台,用户在平时日常生活中遇到了比较美味的食品,可以通过客户端的上传美食功能来实现与网友分享。4.4 Web Service服务器的设计与实现该部分功能主要包括业务接受页面和业务处理页面。业务接受页面是由php构成的。它接受Android客户端传过来的请求,但是它不能单独运
33、行,必须通过请求业务处理页面中的相关服务,经过处理之后,得到业务处理的结果,经过判断之后,通过JSON数组再次将结果返回给Android客户端,让客户端进行下一个步骤。业务处理页面只有一个,就是提供了基于SOAP协议的Web Service服务的 service.php页面。在这个页面里,客户端所有的请求都会经过它的处理,并通过返回处理结果将处理结果告诉业务接受页面。下面就以客户端发送登录验证请求为例,介绍整个系统的运行:首先Android客户端创建登录验证的请求,代码如下所示:String url = http:/10.0.2.2/fanyou/services/client_login.p
34、hp;HttpPost httpPost = new HttpPost(url);HttpClient client = new DefaultHttpClient();StringBuilder str = new StringBuilder();/获取用户名文本框内容String editUid = uid.getText().toString();/获取密码框内容String editPwd = pwd.getText().toString();ArrayList params = new ArrayList();params.add(new BasicNameValuePair(use
35、rname,editUid);params.add(new BasicNameValuePair(password,editPwd);BufferedReader buffer = null;httpPost.setEntity(new UrlEncodedFormEntity(params,HTTP.UTF_8);这里就是客户端将登录请求的信息发送至服务端的业务请求页面,信息的内容包括用户名和密码。然后就是服务器接收请求页面将请求信息发送至服务器业务处理页面进行处理的示例并得到处理结果再将结果传回到客户端,代码如下所示:call(check_login,$parameters);if (!$
36、err=$client-getError() /得到服务处理的结果$array = array( title=urlencode(恭喜您,登陆成功!), id=1);echo urldecode(json_encode($array);/将结果封装成JSON数组传回客户端/header(location:http:/localhost/fanyou/index.php); else $array = array( title=urlencode(登录失败), id=0);echo urldecode(json_encode($array);? 最后就是服务器处理功能的实现,搭建过程、处理过程如
37、下所示:第一步:服务器的搭建:service($HTTP_RAW_POST_DATA);?第二步:服务的发布 这时,服务器并没有提供任何服务,因为并没有任何服务被发布。下面就发布一个检查Android客户端登陆的服务,代码如下所示:function check_login($username,$password) require_once(./config/config.php); /打开数据库连接$db = new opmysql();$sql = select * from tb_user where username=$username and password=$password; /
38、查询所有数据$result = $db-uidRst($sql);$user = mysql_fetch_array($result);if ($userusername = $username & $userpassword = $password)return Login;elsereturn new soap_fault(client,concatenate YONGHUMINGCUOWU );mysql_close ( $con ); 第三步:注册服务并返回参数定义:通过这个方法,我们就发布了一个服务项目了,但是仅仅有发布是不够的,还需要在在服务器上进行注册并且返回各个参数的定义,注册
39、方法与返回参数的方法(就以上面这个微粒)如下所示:$soap-register(check_login,array(username=xsd:string,password=xsd:string), array(return=xsd:string); / 返回参数的定义这样就完成了处理Android客户端请求的整个过程。整系统所用到的服务不仅仅是这一个,还有其他的比如,用户注册(client_register)、美食上传(client_upload)等,它们共同构成了整个系统的服务端,为所有请求业务的Android客户端提供各种服务请求。结 论经过几个月对本系统的制作,我学到了很多知识。刚开始
40、我对所做的东西无从下手,通过几周的时间的对系统所要的技术学习和老师的耐心指导,我开始对要做的系统有点概念了,而且越做越有兴趣。现在对本系统制作的过程和它所用到的技术的应用已很熟悉。在这次的研究过程中,由于需要学习的东西很多,所以不是轻而易举就可以完成的。在这次课题的研究中我花费了相当大的时间与精力。不过这是第一次制作这样一个完整的系统,相信仍有不足之处。这次的设计过程严格按照软件工程的软件设计步骤进行的。从需求分析,到功能模块设计,再到数据库的设计,最后进行系统模块的详细设计及具体实施,整个过程比较细致。但由于我经验不足,而且能力有限,所以在功能实现方面还不够完善,同时也有许多细节问题没有考虑
41、周全。虽然这次研究课题的多数功能已经实现,系统制作已经完成,但是研究成果仍显粗糙,没有很好体现所用技术的优点,不过我想这些在今后的学习中会不断改进的。在个人看来,这个课题本身并不难,而我们之所以为它付出了这么多的精力是因为我们不会的东西还太多,所以在以后的研究中还需要进一步的学习,这样才能在今后的研究中做得更出色。参 考 文 献1 潘凯华 刘凯华编著PHP开发(典型模块大全)北京:人民邮电出版社2011.2 吴亚峰 索依娜Android核心技术与实例详解北京:电子工业出版社2011.3 李刚.疯狂Android讲义.北京:电子工业出版社.20114 陈昱勋 郑名杰等编著. Google Android SDK 开发范例大全(第一版).北京:人民邮电出版社.20115 张孝祥著 java就业培训教程M