毕业论文-《基于Android的手机订餐系统的设计与实现》_第1页
毕业论文-《基于Android的手机订餐系统的设计与实现》_第2页
毕业论文-《基于Android的手机订餐系统的设计与实现》_第3页
毕业论文-《基于Android的手机订餐系统的设计与实现》_第4页
毕业论文-《基于Android的手机订餐系统的设计与实现》_第5页
已阅读5页,还剩79页未读 继续免费阅读

下载本文档

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

文档简介

太原理工大学毕业设计(论文)用纸基于android的手机订餐系统的设计与实现摘要随着科技的发展,二十一世纪成为了以网络化、信息化为核心的社会。网络商业化也成为了时下最热门的词汇,越来越多的宅男宅女们青睐于足不出户便可处理完生活琐事。传统的订餐方式已不能满足人们的需求,为了解决这种处在高速发展社会的就餐困难的问题,所以设计了本系统。本设计是一个基于Android手机的网上订餐系统,采用C/S模式,为客户提供网上选择、浏览菜品,在线下单服务,并为管理员提供一个服务平台实现用户信息、商家信息以及顾客订单的管理,从而提高了服务的质量。本文从系统需求、系统设计、测试等几个方面介绍了整个软件的开发过程,这个系统采用JAVA、MYSQL数据库,并利用MyEclipse、TOMCAT、AndroidSDK、ADT等开发环境并遵照MVC模式来进行开发。采用MVC模式,使用TOMCAT服务器,基于Eclipse的开发平台,运用JAVA和Android语言设计并完善了基于android的手机订餐系统,实现了它的网上订餐的主要功能,且此系统界面美观、操作便捷将会受到广大用户的青睐。关键词Android;JAVA;手机订餐;C/S模式DesignandimplementationofmobilephoneorderingsystembasedonandroidAbstractWiththedevelopmentoftechnology,thetwenty-firstcenturyhasbecometothenetworkandtheinformationsociety.Commercialnetworkshasbecomethemostpopularwordsnowadays,moreandmorepeoplearefavoredinthetreatmentofdomesticchorescanbecompletedwithoutleavinghome.Thetraditionalorderingmethodscannotmeetpeople'sneeds,inordertosolvethisdifficultproblemwhichdiningouthardintherapiddevelopmentofsociety,sodesignedthesystem.This

design

is

ordering

system,

using

C

/

S

mode,

providing

customers

to

view

presentation

of

dishes,

ordering

services,

and

provide

administrators

with

a

service

platform

for

user

information

and

customer

order

management.

This

paper

introduced

the

software

development

process

from

many

aspects,

system

uses

some

development

tools

include

JAVA,

MYSQL

database

,MyEclipse,

TOMCAT,

Android

SDK,

ADT,following

the

MVC

pattern

to

develop.UsingtheMVCpattern,usingTOMCATserver,Eclipse-baseddevelopmentplatform,theuseofJAVAandAndroid-basedlanguagedesignandimprovetheandroidphoneorderingsystem,themainfunctionofitsonlineordering,andthissystemisbeautifulinterface,easyoperationwillbythemajorityofusersofallages.Keywords:Android;JAVA;Mobilephoneordering;C/Smodel目录摘要 iAbstract ii1绪论 11.1课题研究背景和意义 11.2目前形势 11.3论文所研究的内容 22开发环境和相关技术简介 32.1Android技术介绍 32.1.1Android简介 32.1.2AndroidFeatures特性 32.1.3Android基本框架(AndroidArchitecture) 42.1.4Android系统的四大组件 42.2Java技术介绍 52.3MySQL数据库 62.3.1MySQL概述 62.3.2MySQL的优势 62.4C/S模式介绍 73系统可行性分析以及需求 93.1系统设计目标 93.1.1系统安全性 93.1.2可维护性 93.1.3用户操作 103.1.4运行速度 103.1.5界面 103.2系统需求分析 104概要设计 114.1功能模块 114.2数据库设计 144.2.1数据库的设计原则 144.2.2权限控制技术 154.2.3系统中数据库表的详细设计结构 165详细设计 185.1Android环境搭建 185.2Android客户端设计 205.2.1登陆注册界面以及与服务器端的连接方式 205.2.2菜谱大全界面 235.2.3在线选择座位下单界面 315.2.4我的订单界面 345.3服务器端与数据库的链接 355.4WebService服务器端设计 395.4.1登陆界面 395.4.2菜谱管理界面 425.4.3商家管理界面 425.4.4用户管理界面 435.4.5订单管理界面 435.4.6分组管理界面 446系统测试 456.1软件测试 456.2主要测试用例 466.2.1客户端测试用例 466.2.2服务器端测试 486.3测试总结 496.3.1功能性 496.3.2易用性 506.3.3可靠性 506.3.4兼容性 506.3.5安全性 507结论 51参考文献 52致谢 53外文原文 54中文翻译 681绪论1.1课题研究背景和意义随着计算机、互联网和移动终端及其应用的快速发展,人们的工作方式、交流方式、学习方式以及生活的各个方面都发生了巨大的变化。在这样的社会背景下,移动电子商务应运而生,它将因特网、移动通信技术、短距离通信技术及其它信息处理技术完美的结合,使人们可以更加方便的进行各种商贸活动,随时随地的购物与交易、在线电子支付以及各种交易活动、金融活动、商务活动和相关的综合服务活动等。而Android操作系统凭借着自己开放的平台允许任何移动终端厂商加入到Android联盟中,从而使得市场上越来越多的手机操作系统选择了Android。因此本系统选择设计基于Android平台的软件,这样毫无疑问能覆盖更多的群众。与此同时,当今社会的快节奏生活方式让人们困扰不已,而就餐与交通问题首当其冲。餐厅太过拥挤、客流高峰期就餐困难、点餐等待等问题层出不穷。为了解决人们对于订餐排队、就餐困难等问题,因此在Android平台的基础上设计了手机订餐系统,该系统可以让用户节约大量的时间,提高了生活效率,从而解决了就餐难的问题。1.2目前形势在国外,多年前许多知名品牌都开始了网上订餐服务,如今提供网上订餐服务的商家数目正在急剧膨胀,人们只需一张信用卡和一台电脑,就可全天订座。即便你不是名流或者常客也不是厨师的朋友,你同样可以享受这种便捷的订餐方式。网上订餐往往是开通网上服务,让顾客在网上选择自己想点的美食和到店时间,就可以由商家按照顾客的需求在及时做好餐点,使顾客到店便可及时吃上美食,无需等待。网上订餐的方式已经被国外的许多家庭所认可。在国内,“网上订餐”是近几年出现的新兴行业,最早出现在2003年的非典时期。一时间全国冒出多家类似公司,但就目前情形来看,规模不是很大并且在市场上有影响力也不多。例如上海的订餐小秘书、北京有饭桶网等企业,还有电信的114生活百事通、中国移动的12580以及中国联通等都开始涉入该领域。但总体而言,该行业发展不是很好。经过几年的初步发展和互联网技术的不断进步,“网上订餐”行业又重新得到了社会的关注。因此,网络订餐市场被迅速激发,新的销售模式被逐渐认可,一批新兴的以网络订餐为核心业务的互联网企业涌现。以“订餐网”为关键词,在百度里检索到网页多达近20万条。据不完全统计,2008年新上线订餐类网站近千家,大多数集中在经济较发达的大都市和一级城市,如北京、上海、广州、深圳、重庆、福州、厦门等,但是在二线及其以下的城市关注度与应用程度还不是很高,所以就二线以及以下城市进行此项目的开发还是很有必要的。1.3论文所研究的内容为了顺应现实社会的发展方向,开发了基于Android的手机订餐系统,本系统针对所有用户,分别建立了客户端和服务器端,以方便不同用户的需求,从商家与客户两端同时处理,充分解决就餐难的问题。主要解决的问题包括:对于使用界面,需要人性化,能够给用户一种温馨的感觉;在后台根据登录人员的不同进行权限设置。(3)通过接受客户端用户的订单,可以及时准确的为用户在规定时间内准备好餐点本系统开发的意义在于提供给用户方便快捷的订餐服务,满足用户的需求,解决传统订餐方式的不足,方便用户随时随地的订餐,商家随时更新查看订单并在规定时间能合理安排完成客户的需求,从根本上解决传统就餐方式中的漏洞。2开发环境和相关技术简介2.1Android技术介绍2.1.1Android简介Android是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。Android是基于Linux内核的软件平台和操作系统,早期由Google开发,后由开放手机联盟(OpenHandsetAlliance)开发。它采用了软件堆层(softwarestack,又名以软件叠层)的架构,主要分为三部分。低层以Linux内核工作为基础,只提供基本功能;其他的应用软件则由各公司自行开发,以Java作为编写程序的一部分。另外,为了推广此技术,Google和其它几十个手机公司建立了开放手机联盟。到了2010年1月,Google开始发表自家品牌手机电话的NexusOne,目前最新SDK版本为Android4.0.3。2.1.2AndroidFeatures特性Android系统有如下的几大特性[3]:·应用程序框架支持组件的重用与替换

·Dalvik虚拟机专门为移动设备做了优化

·内部集成浏览器该浏览器基于开源的WebKit引擎

·优化的图形库包括2D和3D图形库,3D图形库基于OpenGLES

·SQLite用作结构化的数据存储

·多媒体支持包括常见的音频、视频和静态印象文件格式(如MPEG4,MP3,AAC,AMR,JPG,PNG)

·GSM电话(依赖于硬件)

·蓝牙Bluetooth,EDGE,3G,andWiFi(依赖于硬件)

·照相机,GPS,指南针,和加速度计(依赖于硬件)

·丰富的开发环境包括设备模拟器,调试工具,内存及性能分析图表,和Eclipse集成开发环境插件。2.1.3Android基本框架(AndroidArchitecture)关于Android的基本框架如图2-1所示:图2-1AndroidArchitecture2.1.4Android系统的四大组件在Android系统中,为我们提供了四大基本组件,每个组件是一个视图,其中有些是可见的,有些是不可见的,例如Activity,ContentProvider是可见的视图,Service和BroadcastReceiver是不可见的,它们只在系统的后台运行。下面分别介绍四大组件[3]:(1)Activity简介在Android系统中Activity提供可视化的用户界面,一个Android应用通常由多个Activity组成。多个Activity组成了Activity栈(Stack),当前活动的Activity处于栈顶。Activity有自己的生命周期,由Android系统来控制。(2)Service简介Service就是运行在后台的一种服务程序,一般很少和用户交互,因此没有可视化界面定义一个Service类比较简单,只要继承Service类,实现其生命周期中的方法就可以了。一个定义好的Service必须在AndroidManifest.xml配置文件中注册,通过<service>元素声明才能使用.Service有自己的生命周期,我们可以调用startService()启动一个Service或者bindService()方法来绑定一个存在的Service(3)BroadcastReceiver简介BroadcastReceiver是广播接收器,它和事件处理机制相似,但事件处理机制是程序组件级别的(例如,某个按钮的单击事件),而广播事件处理机制是系统级别的。我们可以使用Intent来启动一个程序组件进行消息的传递,我们也可以通过使用sendBroadcast()方法来发起一个系统级别的事件广播来传递消息。我们可以在你的应用程序中实现BroadcastReceiver来监听和响应这些广播的Intent(4)ContentProvider简介ContentProvider用来保存和检索数据,并且使应用程序之间相互访问数据成为可能。它是跨应用程序共享数据的唯一方法。Android为常用的数据类型(如:音视频、图片和联系方式等)提供了大量的ContentProvider。它们被定义在vider包下面。通过这样定义好的ContentProvider我们可以方便的进行数据操作。当然我们必须拥有适当的权限。我们也可以自己来定ContentProvider共享我们的数据,方便用户的访问。2.2Java技术介绍Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由SunMicrosystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaSE,JavaEE,JavaME)的总称。Java技术特点是通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。Eclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse附带了一个标准的插件集,包括Java开发工具(JavaDevelopmentKit,JDK)。虽然大多数用户很乐于将Eclipse当作Java集成开发环境(IDE)来使用,但Eclipse的目标却不仅限于此。Eclipse还包括插件开发环境(Plug-inDevelopmentEnvironment,PDE),这个组件主要针对希望扩展Eclipse的软件开发人员,因为它允许他们构建与Eclipse环境无缝集成的工具。由于Eclipse中的每样东西都是插件,对于给Eclipse提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。这种平等和一致性并不仅限于Java开发工具。尽管Eclipse是使用Java语言开发的,但它的用途并不限于Java语言;例如,支持诸如C/C++和COBOL等编程语言的插件也可以使用。Eclipse框架还可用来作为与软件开发无关的其他应用程序类型的基础,比如内容管理系统。基于Eclipse的应用程序的一个突出例子是IBMRationalSoftwareArchitect,它构成了IBMJava开发工具系列的基础[4]。2.3MySQL数据库2.3.1MySQL概述MySQL是一个小型关系型数据库管理系统,它将关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内。这样就增加了速度而且处理更灵活。MySQL使用的是SQL“结构化查询语言”。SQL是用于访问数据库的最常用标准化语言。MySQL软件采用了GPL(GNU通用公共许可证)。由于其体积小、速度快、总体拥有成本低,最重要的是MySQL具有开源的特性。2.3.2MySQL的优势(1)使用C和C++编写,并使用了多种编译器进行测试,保证源代码的可移植性;(2)支持AIX、FreeBSD、HP-UX、Linux、MacOS、NovellNetware、OpenBSD、OS/2Wrap、Solaris、Windows等多种操作系统;(3)为多种编程语言提供了API。这些编程语言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等;(4)既可以单独应用在客户端服务器网络环境中,也能嵌入到其他的软件中,并且提供多语言支持,常见的编码如中文的GB2312、BIG5,日文的Shift、JIS以用作数据表名和数据列名;(5)提供TCP/IP、ODBC和JDBC等多种数据库连接方式;(6)提供多种数据库操作的管理工具;(7)可以处理数以万计的数据。2.4C/S模式介绍在网络连接模式中,除对等网外,还有另一种形式的网络,即客户机/服务器网,Client/Server。在客户机/服务器网络中,服务器是核心,客户机是基础,客户机依靠服务器获得所需要的数据资源,而服务器为客户机提供必要的资源以及出具的逻辑处理。这里客户和服务器都是指通信过程中涉及的两个应用进程(软件)。使用计算机的人是计算机的“用户”(user)而不是“客户”(client)。但在许多国外文献中,也经常把运行客户程序的机器称为client(这种情况下也可把client译为“客户机”),把运行服务器程序的机器称为server。所以有时要根据上下文判断client与server是指软件还是硬件。它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务更加合理的分配到Client端和Server端来实现,这样就可以降低了系统的通讯开销。目前大多数应用软件系统都是Client/Server形式的两层结构,由于现在的软件应用系统正在向分布式的Web应用发展,Web和Client/Server应用都可以进行同样的业务处理,应用不同的模块共享逻辑组件;因此,内部的和外部的用户都可以访问新的和现有的应用系统,通过现有应用系统中的逻辑可以扩展出新的应用系统。这也就是目前应用系统的发展方向。C/S架构软件的优势和劣势:应用服务器运行数据负荷较轻。最简单的C/S体系结构的数据库应用由两部分组成,即客户应用程序和数据库服务器程序。二者可分别称为前台程序与后台程序。运行数据库服务器程序的设备,称为应用服务器。一旦服务器程序被启动,就会随时等待响应客户程序发来的请求并进行处理;客户的应用程序运行在用户自己的电脑上,对应于数据库服务器,可称为客户电脑,当需要对数据库中的数据进行任何操作时,客户程序就自动地寻找服务器程序,并向其发出请求,服务器程序根据预定的逻辑进行处理,并且将结果发送给客户端。数据的储存管理功能较为透明。在数据库应用中,数据的储存管理功能,是由服务器程序和客户应用程序分别独立进行的,前台主要用户从服务器端获取数据用于界面的显示也可以输入数据并将数据存储到后台的数据库中。而后面主要是为了向前台提供数据,并接受前台传来的数据将其进行一些必要的逻辑操作再存数的数据库中去。在C/S体系的下,数据库不能真正成为公共、专业化的仓库,它受到独立的专门管理。C/S架构的劣势是高昂的维护成本且投资大。首先,采用C/S架构,要选择适当的数据库平台来实现数据库数据的真正“统一”,使分布于两地的数据同步完全交由数据库系统去管理,但逻辑上两地的操作者要直接访问同一个数据库才能有效实现,有这样一些问题,如果需要建立“实时”的数据同步,就必须在两地间建立实时的通讯连接,保持两地的数据库服务器在线运行,网络管理工作人员既要对服务器维护管理,又要对客户端维护和管理,这需要高昂的投资和复杂的技术支持,维护成本很高,维护任务量大。传统的C/S结构的软件需要针对不同的操作系统系统开发不同版本的软件,由于产品的更新换代十分快,代价高和低效率已经不适应工作需要。在JAVA这样的跨平台语言出现之后,B/S架构更是猛烈冲击C/S,并对其形成威胁和挑战。3系统可行性分析以及需求随着科技的发展,二十一世纪成为了以网络化、信息化为核心的社会。网络商业化也成为了时下最热门的词汇,越来越多的宅男宅女们青睐于足不出户便可以处理完成生活琐事。传统的订餐方式已不能满足人们的需求,为了顺应社会的发展与时代的需求,开发设计基于android的网上订餐系统,它独有的便捷性和直观性,将会得到了很多人的青睐。并且现在社会上安卓手机的覆盖范围已经超过了百分之八十的市场份额,采用安卓的平台来开发的手机应用系统将会极大可能的增加其应用范围以及受众人群。综上分析,决定利用Android设计系统的客户端,用JAVA和MySQL设计网上订餐系统的服务器端,使该系统可以更加方便的使用于不同需求的人群。3.1系统设计目标为客户设计更加方便快捷的订餐系统,分别从客户和商户两端同时着手设计,从根本上解决就难高峰期的拥堵问题,客户在订餐是可以提交就餐时间用来方便商家接受订单是可以及时处理,合理安排餐点,从而达到用户到店便可及时就餐的问题。3.1.1系统安全性对于不同的用户有不同的权限,系统对于他们有良好的区分度。同时保证了数据的安全性、可靠性。准确的数据、可恢复性的系统都是必须的。比如本系统将操作用户分成了三类:管理员、商户、用户,他们具有明确的区分。管理员登陆时可以为所有的商户合理分配账号和密码,管理所有的用户以及查看所有的订餐和菜品;商户登录时,只可以针对自己商户的订餐进行处理,查看自己商户的订单;用户只能在客户端,只可以进行查看菜品和下单的操作。这样通过菜单级的用户权限管理,增强了系统的安全性。3.1.2可维护性在使用系统的过程中,会遇到很多新的要求,有时候还要有新的内容进行扩展,因此在设计系统时必须要考虑到,这样设计出来的系统才能满足实际的应用,并能随时进行功能的增加。管理员会不断对系统进行更新,如新功能的开发,数据的维护等。充分考虑到了代码的冗余问题,从而增加系统的可维护性。3.1.3用户操作设计的目标中应该包含使用尽可能方便用户,操作简洁明了,以求更好的发挥系统的作用。本系统中对用户有明确的操作指示,在网页中可以浏览系统为用户提供给的任何服务,如查看菜单信息,个人信息以及密码的修改等操作在页面中都有清晰的显示。3.1.4运行速度系统响应时间对于系统至关重要。考虑到每位用户都不喜欢传统的订餐时间长的方式,后台会不断完善系统的运行速度争取在第一时间满足用户的订餐需求。对于管理员,需要注意的是在提高响应时间的时候不能忘记系统的安全性。3.1.5界面用户界面应该做到清晰简单一目了然,给人以舒适感,易于操作。3.2系统需求分析本系统主要是实现网上浏览菜单、订餐、产生订单等功能的系统。需要实现菜品信息的动态提示、购物车管理、客户信息注册、登录管理、订单处理等模块。需要完成的主要任务如下:当客户进入网上订餐时,应该在订餐页面中分类显示最新的菜品信息,以供客户选择所需菜品,同时提供按菜品名称,快速查询所需菜品信息的功能。当客户选择预定某个菜品时,应该能够将对应菜品信息,如:价格、数量记录到对应的购物车中,此时客户可以选择选择其他菜品或是查看自己的购物车,最后,在购物车中填写相应的送餐信息,提交订餐订单后,自动清除已生成订单的购物车中的信息。餐厅服务人员根据订单信息,查看详细订单明细并根据实际情况处理订餐。4概要设计4.1功能模块随着3G时代的到来,手机应用越来越普遍,加之国民手机持有量更是爆炸式增长。为了方便Android手机用户能随时随地点到自己喜欢的菜品,提出一种操作简便,功能齐全,占用资源少,能为用户节约流量的的网上订餐应用。在此需求上提出本系统的主要界面与功能。需求界面如下:客户端:1、登陆、注册界面2、显示菜品界面3、搜索菜品界面(按菜品名称、种类、店铺名称进行搜索)4、购物车界面5、在线下单6、菜品详情界面服务器端:登陆界面菜单管理、商户管理、用户管理、订单管理、分组管理需求实现功能如下:客户端:1、实现客户端与服务器之间的连接2、实现登陆、注册功能3、实现登陆后能浏览到服务器数据,并对数据进行一系列的操作4、能把菜品加入到购物车,并结算生成订单5、把生成的订单信息传回服务器端服务器端:1、实现管理员登陆2、实现添加、删除、修改菜品信息3、实现添加、删除、修改商户信息4、实现对客户端传过来的订单进行处理5、实现添加、删除用户列表6、实现不同用户登陆的权限控制该系统的功能模块图如图4-1所示:图4-1系统功能模块图4.1.1功能模块与流程1、客户端的主要功能模块:客户端主要用在给客户浏览菜品以及点菜下单的功能,因此将客户端分为以下6个模块进行设计,每个模块的详细说明如表4-1所示,功能示意如图4-2所示:表4-1客户端概要设计表客户端模块简要说明登录模块在连接上服务器的前提下登陆成功注册模块在链接上服务器的前提下注册成功浏览菜品模块从服务器中读取数据,并把数据封装显示在菜品列表中购物车用户定了菜品之后,所有的订餐信息都显示在这个模块中用户下单用户在菜品列表中找到自己所选的菜品进行下单商品搜索模块按照用户选择的条件从手机数据库中搜索数据图4-2客户端示意图服务器端的功能模块:服务器端主要用于管理人员以及商户的登录,管理人员主要用于维护整个系统的内容以及安全性,为商户分配各自的账号和密码,管理所有的商户用户以及菜品。商户登录服务器端主要是为了维护自己的菜品,增加、修改和删除自己商铺的菜品,随时更新信息,方便用户在客户端进行查看,并且当用户提交订单后可以查看自己商铺的订单,并对其进行及时的处理。服务器端的功能模块详细说明如表4-2所示,功能示意如图4-3所示:表4-2服务器端概要设计表服务器端模块简要说明登录模块提供管理员与商户登陆菜单管理对要显示在客户端的菜品进行添加删除和修改操作商户管理对商户信息进行维护用户管理对用户信息进行维护订单管理显示现有的订单信息并给与处理按钮分组管理对菜品的热销程度进行管理图4-3服务器端示意图4.2数据库设计本系统需要一个服务端来为客户端提供数据接口服务,服务端采用MySQL数据库来存放数据,MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。之所以在本系统的开发中采用MySQL数据库来存储本系统的数据,首先是因为MySQL占用内存小,不会影响整个计算机的运行速度,其次是因为MySQL采用的语法的SQL的基本书写语法,便于操作,且又为关系型数据库,易于对数据进行管理。4.2.1数据库的设计原则关于数据库表的设计是每个系统开发最开始也是最主要的步骤,数据库设计的好坏直接关联系统后期开发的难易程度以及后期的可维护性,大型的数据库的设计既要考虑到数据的存取速度又要考虑到系统的安全性。主要的原则有以下几点:1、数据库中的表最好与实体是一对一的关系,若是表与表之间的关联过多最好再写一张关系表,这样可以防止数据查询的时候速度过慢,否则为了加快数据的查询速度往往要增加索引,但是这样就会增加数据库的复杂程度,不利于后期的维护。2、基本表及其字段之间的关系,应尽量满足第三范式。但是,满足第三范式的数据库设计,往往不是最好的设计。为了提高数据库的运行效率,常常需要降低范式标准:适当增加冗余,达到以空间换时间的目的。3、一个数据库中表的个数越少越好。只有表的个数少了,才能说明系统的E-R图少而精,去掉了重复的多余的实体,形成了对客观世界的高度抽象,进行了系统的数据集成,防止了打补丁式的设计。4、一个表中组合主键的字段个数越少越好。因为主键的作用,一是建主键索引,二是做为子表的外键,所以组合主键的字段个数少了,不仅节省了运行时间,而且节省了索引存储空间。5、一个表中的字段个数越少越好。只有字段的个数少了,才能说明在系统中不存在数据重复,且很少有数据冗余,更重要的是要学会学会“列变行”,这样就防止了将子表中的字段拉入到主表中去,在主表中留下许多空余的字段。所谓“列变行”,就是将主表中的一部分内容拉出去,另外单独建一个子表。6、发现某个表的记录太多,例如超过一千万条,则要对该表进行水平分割。水平分割的做法是,以该表主键PK的某个值为界线,将该表的记录水平分割为两个表。若发现某个表的字段太多,例如超过八十个,则垂直分割该表,将原来的一个表分解为两个表。4.2.2权限控制技术RBAC(Role-BasedAccessControl,基于角色的访问控制),就是用户通过角色与权限进行关联。简单地说,一个用户拥有若干角色,每一个角色拥有若干权限。这样,就构造成“用户-角色-权限”的授权模型。在这种模型中,用户与角色之间,角色与权限之间,一般者是多对多的关系。最基本的数据库的权限控制便基于此。但是当用户的数量非常大的时候需要为没有用户分配权限那么这将是一件非常繁琐的事情,因此产生了“组”,每个用户组内有多个用户。除了可给用户授权外,还可以给用户组授权。这样一来,用户拥有的所有权限,就是用户个人拥有的权限与该用户所在用户组拥有的权限之和。在此系统中我将复杂的权限控制问题分为了两种情况处理:操作级权限控制和菜单级权限控制。操作级权限控制是指将对整个系统的不同动作的按钮进行分配,将其分配给不同的用户,分配的方法是在数据库中建立一张表,将每个按钮设计对应的function,也就是说给每个按钮分别分配不同的ID与function,其中ID用于标注不同按钮的不同功能,将每一个功能写成数据库中的一条数据,之后在对应的关系表中为用户分配他所具有的功能的ID就好。菜单级权限控制是指在系统中的资源并不是对所有的用户都共享的,为了保护系统的安全性,就想资源进行的了分配,不用的用户所拥有的资源是不一样的。具体的事实方法是在数据库中建立一张表,表包括两个字段,第一个字段对应的是资源对应的ID,另一个字段对应的是资源的URL地址。在本系统中采用的就是这种菜单级权限控制。4.2.3系统中数据库表的详细设计结构本系统中的信息表主要有7张数据表:管理员表、菜品表、操作菜单表、订单表、座位表、种类表、用户表。每个表的详细设计结构如下:表4-3admins表结构序号列名数据类型长度标识主键允许空说明1idint11是是否auto_increment2loginidvarchar255是账号3anamevarchar255是姓名4passwordsvarchar255是密码5longitudevarchar255是经度6latitudevarchar255是纬度表4-4dishes表结构序号列名数据类型长度标识主键允许空说明1idint11是是否auto_increment2titletext是标题3typeidint11是类型ID4typenametext是类型名称5introtext是详细介绍6img_urlvarchar255是图片7pricedouble11是价格8amountdouble11是数量9merchantvarchar255是所属商户表4-5orders表结构序号列名数据类型标识主键允许空说明1idint是是否auto_increment2useridint是用户ID3usernametext是用户名4seattext是座位5statusint是订单状态6dishesidint是菜品ID7pricedouble是价格8amountdouble是数量9createtimevarchar是订单的创建时间10anamevarchar是商户名11intimevarchar是预计到店时间表4-6seats表结构序号列名数据类型长度标识主键允许空说明1idint11是是否auto_increment2noint11是3stateint11是座位表4-7types表结构序号列名数据类型长度标识主键允许空说明1idint11是是否auto_increment2typenametext是类型名称表4-8users表结构序号列名数据类型长度标识主键允许空说明1idint11是是否auto_increment2loginidvarchar255是登录账号3nametext是姓名4passwordsvarchar255是密码表4-9meau表结构序号列名数据类型长度标识主键允许空说明1idint11是是否auto_increment2meauNamevarchar255是菜单名3Hrefvarchar255是菜单链接的url地址5详细设计5.1Android环境搭建任何事物要运行,都要有它的环境,Android也有它的环境才能够运行,下面介绍Android的开发环境配置.搭建开发环境需要的软件:1、操作系统:Windows7或Linux2、软件包:AndroidSDK(SoftwareDevelopmentkitJavaDevelopmentkit)、ADT(AndroidDeveloopmentTool)3、IDE环境:EclipseIDE+ADTEclipse3.3以上4、JDK:JavaRuntimeEnvironment虚拟机、(JDK)JavaDevelopmentkit安装步骤如下:第一步:安装Java虚拟机sun-java6-jdk版本第二步:安装Eclipse3.5工具官网/downloads/选择版本(图5-1):进行安装图5-1eclipse下载第三步:安装AndroidSDK:首先要下载SDK,可以在这个网址下载Http:///sdk,如图5-2,选择相应的系统进行安装图5-2SDK下载第四步:安装AndroidADT插件运行Eclipse,选择help->installnewsoftware选择add,将会弹出一个框,如图5-3所示。图5-3ADT的安装图点击OK,选择要安装的软件,占next,然后选择接受协议,直到安装成功,重启Eclipse软件,设置AndroidSDKHome,Window->refrence,进行SDK的设置,具体显示如图5-4所示:图5-4设置SDK路径在SDKlocation中输入SDKTools路径:D:\android\android-sdk点击OK,这样Android环境就已经搭建成功了。5.2Android客户端设计5.2.1登陆注册界面以及与服务器端的连接方式当用户第一次在手机上安装客户端的时候需要手动配置服务器端的IP地址和端口号,在模拟器上的IP与端口号为默认的:8099,但是显示生活中当你使用手机去下载安装此应用程序之后就需要手动将客户端与服务器端进行配置,由于本次开发使用的服务器并不是真正的服务器,所以就将PC机当成本次系统开发的服务器端,客户端与服务器端的连接步骤如下:首先需要将PC机与手机置于无线网络环境中,此时就可以得到一个IP地址,取得IP的方式为在CMD中键入ipconfig命定,就可以看到现在无线网络中的IPV4地址,此地址就是客户端首次安装时需要配置的地址。其次是找到服务器的端口号在客户端的首次登陆页面上以“IP:端口”的形式输入,等待服务器端的验证。地址配置成功后,客户端才可以访问服务器端的数据以及向服务器端提交数据。配置成功后,用户可以注册自己的订餐系统的账号,包括用户名和密码,注册成功后就会就数据通过URL方式传递给服务器端,服务器就会将用客户端传来的数据存储进数据库中。当用户注册成功后,就可以用你的用户名和密码进行登录,在此情况下你可以选择记住密码的功能,如果你选择记住密码后SharedPreference会存储该密码。当你在文本框中填写完成用户名和密码后,客户端程序用通过URL地址方式将数据进行发送,发送到服务器端就会对数据进行验证,服务器端就会将验证的结果通过write返回,之后客户端会将结果给了json,将此作为一个result,通过onPostExecute(Stringresult)函数进行处理,显示是否登录成功。在本系统主要采用的数据传递的格式是JSON,JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。它基于JavaScript(StandardECMA-2623rdEdition-December1999)的一个子集。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C,C++,C#,Java,JavaScript,Perl,Python等)。这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成。HttpClient是ApacheJakartaCommon下的子项目,可以用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且它支持HTTP协议最新的版本和建议。本项目的Android客户端就是利用这个组件进行Web服务请求的。在本系统中登陆注册页面的流程图如图5-5所示:图5-5客户端登陆注册流程图当你与服务器端连接成功后就会进入登录界面,登录界面如图5-6所示:图5-6客户端登陆界面当你在登录框中输入你的用户名与密码之后就会将框中的信息传递给后台服务器进行验证,检测是否正确,如果正确就会出现toast框显示某用户登录成功,登录成功的界面如图5-7所示:图5-7登陆成功界面登陆验证的核心代码如下:@Override protectedStringdoInBackground(String...params){ //跳转到服务器端进行验证 StringurlString=AppConstant.getUrl(getApplicationContext())+"ServletService?Action=login";//通过URl地址的形式进行数据的传递,将参数传递的服务器端 urlString+="&loginid="+etLoginID.getText()+"&passwords="+etPassword.getText(); Stringjson=httpHelper.HttpRequest(urlString); BaseUtil.LogII(urlString); returnjson;} @Override protectedvoidonPostExecute(Stringresult){ super.onPostExecute(result); BaseUtil.LogII("result:"+result); loginAsyncTask=null; dialog.dismiss(); if(result.trim().length()==0){ toastUtil.show("登录失败"); return;} } } }5.2.2菜谱大全界面当toast显示登录成功后,就会通过intent跳转到菜单显示页面,此页面的数据显示是客户端传递一个action给服务器端,当服务器端判断这个action是要显示菜单的,他就会从数据库中查询数据,之后将数据传递给客户端,客户端就可以显示菜单了。显示菜单的详细页面如图5-8所示:图5-8菜谱大全界面菜谱列表的信息是通过url地址将action传递到服务器端,由服务器从数据库中将菜单信息通过json再传递给客户端,再通过List来循环显示出来的。关于图片的加载主要使用的技术是:AsyncImageLoader异步加载图片的技术。异步加载图片的相关技术说明如下:首先我们要在布局文件中设计一个图片的占位:<ImageView

android:id="@+id/image"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:layout_gravity="center_horizontal"

android:layout_marginTop="20dip"

android:src="@drawable/product_default_icon"

/>

之后要在代码中将图片的路径加载进来:private

Context

context

=

AsyncTaskDemo.this;

private

ImageViewimage;

//图片地址

private

String

imageUrl

=

"/upload/attachment/0080/1571/2b9a099a-0a7b-3a60-909e-97a8316716cb.jpg";

public

void

onCreate(Bundle

savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.asynctask);

getWidget();

loadImage(imageUrl);

}

/**

获得组件

*/

public

void

getWidget()

{

image

=

(ImageView)

findViewById(R.id.image);

}

private

void

loadImage(final

String

imageUrl)

{

ImageAsyncLoader

asyncImageLoader

=

new

ImageAsyncLoader();

//

异步加载图片

,获得图片的地址,设置图片的大小以及样式

Drawable

cachedImage

=

asyncImageLoader.loadDrawable(context,

imageUrl,

new

ImageCallback()

{

public

void

imageLoaded(Drawable

imageDrawable,

String

imageUrl)

{

if

(imageDrawable

!=

null)

{

image.setImageDrawable(ImageAsyncLoader.zoomDrawable(imageDrawable,

ImageAsyncLoader.dip2px(context,

150),

ImageAsyncLoader.dip2px(context,

150)));

}

}

});

if

(cachedImage

!=

null)

{

image.setImageDrawable(ImageAsyncLoader.zoomDrawable(cachedImage,

ImageAsyncLoader.dip2px(context,

150),

ImageAsyncLoader.dip2px(context,

150)));

}

}

加载异步图片的主要的工具如下:private

HashMap<String,

SoftReference<Drawable>>

cacheMap

=

null;

private

BlockingQueue<Runnable>

queue

=

null;

private

ThreadPoolExecutor

executor

=

null;

public

ImageAsyncLoader()

{

cacheMap

=

new

HashMap<String,

SoftReference<Drawable>>();

queue

=

new

LinkedBlockingQueue<Runnable>();

/**

*

线程池维护线程的最少数量2

<br>

*

线程池维护线程的最大数量10<br>

*

线程池维护线程所允许的空闲时间180秒

*/

executor

=

new

ThreadPoolExecutor(2,

10,

180,

TimeUnit.SECONDS,

queue);

}

public

Drawable

loadDrawable(final

Context

context,

final

String

imageUrl,

final

ImageCallback

imageCallback)

{

if

(cacheMap.containsKey(imageUrl))

{

SoftReference<Drawable>

softReference

=

cacheMap.get(imageUrl);

Drawable

drawable

=

softReference.get();

if

(drawable

!=

null)

{

return

drawable;

}

}

//handler主要用于数据信息的存储

final

Handler

handler

=

new

Handler()

{

public

void

handleMessage(Message

message)

{

imageCallback.imageLoaded((Drawable)

message.obj,

imageUrl);

}

};

//

将任务添加到线程池

executor.execute(new

Runnable()

{

public

void

run()

{

//

根据URL加载图片

Drawable

drawable

=

loadImageFromUrl(context,

imageUrl);

//

图片资源不为空是创建软引用

if

(null

!=

drawable)

cacheMap.put(imageUrl,

new

SoftReference<Drawable>(drawable));

Message

message

=

handler.obtainMessage(0,

drawable);

handler.sendMessage(message);

}

});

return

null;

}

//

网络图片先下载到本地cache目录保存,以imagUrl的图片文件名保存,如果有同名文件在cache目录就从本地加载

public

static

Drawable

loadImageFromUrl(Context

context,

String

imageUrl)

{

Drawable

drawable

=

null;

if

(imageUrl

==

null)

return

null;

String

fileName

=

"";

//

获取url中图片的文件名与后缀

if

(imageUrl

!=

null

&&

imageUrl.length()

!=

0)

{

fileName

=

imageUrl.substring(imageUrl.lastIndexOf("/")

+

1);

}

//

根据图片的名称创建文件(不存在:创建)

File

file

=

new

File(context.getCacheDir(),

fileName);

//

如果在缓存中找不到指定图片则下载

if

(!file.exists()

&&

!file.isDirectory())

{

try

{

//

从网络上下载图片并写入文件

FileOutputStream

fos

=

new

FileOutputStream(file);

InputStream

is

=

new

URL(imageUrl).openStream();

int

data

=

is.read();

while

(data

!=

-1)

{

fos.write(data);

data

=

is.read();

}

fos.close();

is.close();

drawable

=

Drawable.createFromPath(file.toString());

}

catch

(IOException

e)

{

e.printStackTrace();

}

}

//

如果缓存中有则直接使用缓存中的图片

else

{

//

System.out.println(file.isDirectory()

+

"

"

+

file.getName());

drawable

=

Drawable.createFromPath(file.toString());

}

return

drawable;

}

public

interface

ImageCallback

{

public

void

imageLoaded(Drawable

imageDrawable,

String

imageUrl);

}

异步加载图片要在manifest中进行配置,具体配置的内容为:<uses-permission

android:name="android.permission.CHANGE_NETWORK_STATE"

/>

<uses-permission

android:name="android.permission.INTERNET"

/>

异步加载图片的主要代码如下://客户端通过url将需求传递给服务器端@Override protectedStringdoInBackground(String...params){ Stringjson=null; serverUrl=AppConstant.getUrl(getApplicationContext())+"ServletService?Action=getdisheslist&msg=" +params[0];//为URL加载一个随机值是为了防止页面的缓存问题出现 json=httpHelper.HttpRequest(serverUrl); returnjson; }//服务器接收请求进行处理protectedvoidservice(HttpServletRequestrequest, HttpServletResponseresponse)throwsServletException,IOException{try{ r

温馨提示

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

评论

0/150

提交评论