最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

基于Android的打车系统的设计与实现

IT圈 admin 41浏览 0评论

2024年1月11日发(作者:不语柳)

基于Android的打车系统的设计与实现

摘 要

随着 3G 网络时代的到来,移动通信用户数量迅速增加,各种移动通信工具成为人们生活中的必需品,将无线通信技术运用到日常生活中是大势所趋。手机的广泛使用,互联网的综合扩展,信息的高度整合与快速传播,已经彻底改变了传统的社交、通信、娱乐和信息获取的方式,进入了一个全新的媒体时代。Android 操作系统以其完整、可靠、开放等优点,在移动通信工具的操作系统平台中脱颖而出,占据了大量的市场份额。

为了解决目前的打车难问题,本文针对人们的日常打车需求,设计实现了基于 Android的打车系统,将打车过程网络化。本系统把乘客、司机、客服紧密的联系在一起,打破了以往乘客路边等车,司机开车乱逛的传统打车方式。乘客通过打车系统的乘客端发布打车需求信息,或者致电客服,由打车系统 Web 端的客户服务人员代其发布打车需求。司机通过本打车系统的司机端获取打车需求信息,然后根据自己所处的位置选择抢单,抢单成功后与乘客取得联系,实现打车过程。

本论文的研究内容包括六部分。第一部分简要介绍了系统的研究背景、国内外研究现状,阐述了系统研究的目的与意义,并对本文的主要内容进行了概括。第二部分介绍了本系统的开发平台,主要针对开发过程中用到的各个相关工具,如:Android、、MySQL 等进行简单的说明。第三部分对基于 Android 的打车系统进行了需求分析,并介绍了所用到的关键技术。第四部分提出了基于 Android 的打车系统的设计方案,首先明确了设计目标,在此基础上,对

Android 客户端和 Web 客服端进行了设计,并详细地设计了Android 客户端的每一个功能模块,然后介绍了系统数据库的设计。第五部分阐明了本打车系统的实现过程,包括数据库类的实现、Web 客服端的实现以及 Android 客户端各个功能模块的实现,并对基于 Android 操作系统的打车系统的各个功能模块进行了模拟测试,保证系统可以稳定运行。第六部分对全文进行了归纳总结,并展望了未来打车系统的发展方向。

关键词: Android;;MySQL;打车

I

基于Android的打车系统的设计与实现

Abstract

With the advent of 3G network era, the number of mobile users increased rapidly, and themobile

communication tools became necessary in people's life. It is a general trend that thewireless

communication technologies are used in our daily life. The widespread use of mobilephone, the

comprehensive extension of the Internet and the high integration and rapidtransmission of

information have thoroughly changed people’s traditional manner of socialinteraction,

communication, entertainment and information obtainment. The public has entered anew media era.

The Android operating system has the advantages of complete system, reliableperformance and open

source, which make it stand out in the operating system platform ofmobile communication tools and

occupy a large amount of market share.

In order to meet people’s need of getting a taxi when they go out; this paper designed

andimplemented a system based on the Android operating system, which made people could get

ataxi through the network. In this system, the driver, the passenger and the customer service staffare

connected closely, which breaks the traditional way of getting a taxi in the past that thepassenger wait

for a taxi on the road side and the driver drive around aimlessly. A passengerreleases his demand

information through the passenger terminal based on the Android operatingsystem or he could call

the customer service staff that will help him to input his demand ofgetting a taxi into the system. A

taxi driver gets the information through the driver terminal basedon the Android operating system

and selects the information according to his location to get thatorder. If the driver gets the order

successfully he could connect the passenger to implement theprocess of taking a taxi.

The research content of this paper includes six chapters. The chapter one briefly introducedthe

research background, research at home and abroad, the research target and significance, andthe main

contents of this paper were also preferred. In chapter two, the system developmentplatform and the

main tools used in the system, such as Android, and MySQL wereintroduced. In chapter

three, the requirement of the system was analyzed, and the keytechnologies which will be used were

also introduced. In chapter four, the design of the systemwas proposed. Firstly, the goals of the

design were cleared. Secondly, the terminal with Androidoperating system and the terminal of Web

service were designed based on the target, and thedesign of each function module was preferred in

details. Thirdly, the database of the system wasprojected. In chapter five, the system was

implemented, including the database, the terminal ofWeb service and each module in the terminal of

Android operating system. At the same time, thesystem was verified that it could run stably. In

chapter six, the paper was summarized and thefuture development direction of the system was

presented.

II

基于Android的打车系统的设计与实现

Keywords: Android; ; MySQL; Get a Taxi

III

基于Android的打车系统的设计与实现

目 录

第一章 绪论 ..........................................................................................................................................

1

1.1 研究背景

........................................................................................................................................

1

1.2 国内外研究现状

...........................................................................................................................

1

1.3 研究目的与意义

...........................................................................................................................

2

1.4 论文的主要内容和章节安排

.....................................................................................................

3

第二章 开发平台介绍 .....................................................................................................................

4

2.1 Android 概述

.................................................................................................................................

4

2.1.1 Android 的发展

......................................................................................................................

4

2.1.2 Android 体系结构

.................................................................................................................

4

2.1.3 Android 应用程序构成

.........................................................................................................

6

2.2 简介

..............................................................................................................................

9

2.3 My SQL 简介

..............................................................................................................................

11

2.4 本章小结

......................................................................................................................................

11

第三章 系统方案研究 ...................................................................................................................

12

3.1 需求分析

......................................................................................................................................

12

3.1.1 功能需求

...............................................................................................................................

12

3.1.2 性能需求

...............................................................................................................................

13

3.2 关键技术介绍

.............................................................................................................................

13

3.2.1 用户界面构建

......................................................................................................................

14

3.2.2 Activity 间的跳转

...............................................................................................................

14

3.2.3 Android 客户端与后台的通信

..........................................................................................

14

3.3 本章小结

......................................................................................................................................

15

第四章 系统设计 .............................................................................................................................

16

4.1 系统总体设计

.............................................................................................................................

16

4.1.1 Android 客户端架构

............................................................................................................

16

4.1.2 Web 端架构

...........................................................................................................................

17

4.2 系统概要设计

.............................................................................................................................

17

4.3 Android 客户端各功能模块设计

............................................................................................

19

4.3.1 注册登录模块设计

.............................................................................................................

19

4.3.2 乘客打车模块设计

.............................................................................................................

20

4.3.3 历史记录查询与评价模块设计

........................................................................................

21

4.3.4 司机抢单模块的设计

.........................................................................................................

22

4.4 数据库设计

..................................................................................................................................

22

IV

基于Android的打车系统的设计与实现

4.5 本章小结

......................................................................................................................................

24

第五章 系统实现与测试 ..............................................................................................................

25

5.1 Web 客服端的实现与测试

.......................................................................................................

25

5.2 Android 客户端各功能模块的实现与测试

...........................................................................

27

5.2.1 注册登录模块的实现与测试

............................................................................................

27

5.2.2 乘客打车模块的实现与测试

............................................................................................

30

5.2.3 历史记录查询与评价模块的实现与测试

......................................................................

31

5.2.4 司机抢单模块的实现与测试

............................................................................................

33

5.3 本章小结

......................................................................................................................................

35

第六章 总结与展望 ........................................................................................................................

36

6.1 总结

...............................................................................................................................................

36

6.2 展望

...............................................................................................................................................

36

[参考文献] ...........................................................................................................................................

37

致谢 ........................................................................................................................................................

39

V

基于Android的打车系统的设计与实现

第一章 绪论

1.1 研究背景

网络技术与 3G 移动通信技术的发展,使得我国的信息化进程越来越快。网络通信的速度和质量不断提高,促使移动互联网业务逐渐繁荣。2014 年 1 月 16 日,中国互联网络信息中心(CNNIC)在北京发布的第 33 次《中国互联网络发展状况统计报告》中指出,截止到2013 年 12

月底,我国网络用户的数量达到了 6.18 亿,互联网的使用比率为 45.8%;手机网络用户达 5 亿,比上一年增长 19.1%,依旧稳居上网终端第一位的宝座。使用手机上网的用户在网络用户中所占的比例由上一年底的 74.5%上升至 81.0%,比使用其他设备上网的用户比例高出许多,手机用户仍然是我国网民最主要的组成部分[1]。在手机网络用户不断增长的同时也推动了各种手机应用软件的发展,成为了我国网络发展的一大特色。工信部发布的 2013 年中国工业通信业运行状况报告[2]也充分地显示了在网络技术突飞猛进发展的带动下 3G 网络的覆盖面也越来越广这一特点。

移动终端的发展促进了人们对操作系统的不断探索。目前,市场上的操作系统多种多样,像 Symbian、Android、iOS、BlackBerry、Windows 等都拥有自己的用户群,但是在众多的操作系统中 Android 凭借其开源、免费、稳定性好等优点稳居移动终端操作系统平台的主导地位,例如:三星、HTC、摩托罗拉、华为、中兴等众多国内外知名手机品牌都在使用 Android 操作系统。

各种手机应用已经深入到了人们生活中的各个方面,它们凭借其方便快捷的优势,深受众多用户的喜爱,在为人们的生活带来翻天覆地的变化的同时,也为企业带来了更多的经济效益。

“衣食住行”是人们生存最基本的主流需求,紧跟数字化浪潮,实现“衣食住行”的

信息化、网络化,已经成为时代发展的必经之路。就“行”这一项而言,出门打车是大多数人的选择,很多人认为打车是一种非常便捷的出行方式,但是现如今在许多城市都面临打车难这一现实问题[3]。如何利用网络技术来解决这一难题,从而更好地满足人们的日常需求,提高生活质量,是迈向信息化的重要一步[4]。

1.2 国内外研究现状

打车软件在国外早有试水。2011 年 11 月,出租车移动预订应用 Hailo 首先在英国伦敦得到推广,它拥有分别基于 Android 和 iOS 操作系统的两个版本,用户可以通过这个应用预订出租车,它还提供了现金支付和信用卡支付两种付款方式。Hailo 是由 6 个人共同创建的,其中三位是互联网企业家,分别是首席执行官 Jay Bregman、首席运营官 Caspar Wooley、主席 Ron

Zeghibe,另外三位是伦敦的出租车司机,他们是 Russell Hall、Gary Jackson 和Terry Runham。在这之前他们已经创办过一家以出租车为主题的公司。

1

基于Android的打车系统的设计与实现

打车应用 GetTaxi 推出了基于 Android、BlackBerry、iOS 和 Symbian 等多种操作系统的不同版本。乘客只需要通过 GetTaxi 发送自己的打车需求,GetTaxi 便会安排车到乘客身边。乘客在等车的时候可以随时查看电子地图了解车与自己的距离、大概多长时间能到以及司机的相关信息等。该应用同样支持使用信用卡付款,另外用户还可以累计积分,到达一定积分后可以享受相应的优惠。这款打车应用已经于 2011 年在英国、以色列正式推广,并且在不断地向德国、意大利、法国、西班牙和俄罗斯等国家延伸。

刚开始时美国的打车应用 Uber 只向用户提供私家车,通常是豪华轿车,因此收费较贵。从

2012 年 9 月份开始它才将一般的黄色出租车加入到提供服务的行列之中。Uber 的首席执行官 Kalanick 曾经表示,这一改变是 Uber 面向普通群众的第一步。

从 2011 年开始,日本也推出了一种智能手机打车服务,安装了这种打车软件的用户可以自由设定乘车点,对于有语言障碍的残疾人和外国乘客来说十分方便,相应的它会收取一些额外的费用。

国外的叫车服务不仅仅局限于出租车,在一定程度上充分利用了租车公司的车辆和一些私家车,例如上文提到的 Uber。另外,这些打车服务中很大一部分都是拼车服务。目前国内的打车软件还处在发展阶段,在北京、上海、广州、深圳等大城市,有超过一半的出租车都利用各种打车软件提供服务,这种服务在某种程度上的确对目前的打车难问题起到了一定的缓解作用。

2012 年 3 月开始上线测试的打车软件摇摇招车是我国出现较早的打车软件,它是由北京聚核众信信息技术有限公司开发的,同样有 Android 和 iOS 两个系统版本。

2012 年 9 月份,程维创办的小桔科技公司发布了打车应用软件——嘀嘀打车[5],在经历了一段艰难的创业初期后,2014 年 1 月嘀嘀打车加入了微信叫车和支付功能,目前在全国司机用户的数量已经达到 35 万。

由易达出行科技有限公司开发的手机应用软件易达打车将手机定位和云服务结合起来实现了互联网和移动终端的开发,是一个高度集成的系统。

“快的打车”是杭州快智科技有限公司自 2012 年创办以来自主研发的第一个手机应

用,包括 iOS 和 Android 两种操作系统版本[6]。

越来越多的国内外企业涉足智能化打车领域,它们的发展充分迎合了人们的需求,展现了打车软件发展的无限前景。

1.3 研究目的与意义

当代中国许多一线城市每天都有数以万计的出租车在提供出车服务,每年的营业额有上亿万元。但是人们出行通常还是只能选择在路边等待或者是提前一段时间预订才能坐上出租车。很容易解释造成这一尴尬局面的原因,大城市的交通非常繁忙,想打车的乘客恰好遇上一辆正在运营的空车的概率很低,打车完全靠碰运气。对出租车司机而言,他们要想拉到乘客,就得开着车像无头苍蝇一样满大街乱转,希望能恰好遇到想打车的顾客,这

2

基于Android的打车系统的设计与实现

样既浪费时间,又要消耗更多的燃料费。另外,部分司机的拒载行为也为打车出行增加了难度[7]。

我们要开发的打车系统,将乘客和司机通过这个系统的各个服务端连接到一起,使司机及时获取乘客的打车需求,能给乘客提供更便捷的服务,对乘客来说,这种打车方式也更加方便。它还能有效地减少拒载情况的发生,提高打车成功率。

1.4 论文的主要内容和章节安排

本文针对目前各大城市面临的打车难问题,从打车各方的需求着手,设计并实现了一款打车应用软件,研究的主要内容如下。

系统实现过程:乘客可以通过本系统乘客端直接发送打车需求,或者是给服务平台打电话,告知其所在位置及目的地等相关信息。服务平台的客服人员在收到打车电话后,在系统中发布这条打车需求。司机通过本系统的司机端查看到这条需求消息,如果司机认为可以接这单生意则进行抢单。系统对司机发送的抢单消息进行管理,并给最先抢到的司机发送确认消息。抢到单的司机收到确认消息后便可以与乘客取得联系,接着便可以提供出车服务。

打车过程完成后,乘客和司机都可以凭借其 Android 客户端对本次打车过程进行评价。

对于差评次数超过一定限制的系统用户,系统可以将其拉入黑名单,不再对其提供服务,当然也可以通过付费等形式由客服端再次开通。

本文的章节安排如下。

第一章,绪论,简要介绍了系统的研究背景、国内外研究现状,阐述了研究的目的和意义,并对本文的主要内容进行了概括,罗列了本文的章节安排。

第二章,开发平台介绍,主要针对开发过程中用到的各个相关软件,如:Android、、MySQL 等进行简单的介绍。

第三章,对基于 Android 的打车系统进行了需求分析并介绍了与系统开发相关的关键技术。

第四章,提出了基于 Android 的打车系统的设计方案,首先明确了设计目标,在此基础上,对 Android 系统客户端和 Web 服务端进行了设计,并对 Android 客户端的每一个功能模块进行详细的设计,此外,还介绍了数据库的设计。

第五章,阐明了本打车系统的实现过程,包括数据库类的实现、Web 客服端的实现以及Android 客户端各个功能模块的实现。在系统实现的同时,对基于 Android 的打车系统的各个功能模块进行了测试。

第六章,总结与展望,对全文的主要工作进行总结,并展望了未来打车系统的发展方向。

3

基于Android的打车系统的设计与实现

第二章 开发平台介绍

2.1 Android 概述

2.1.1 Android 的发展

Android 最初是由 Andy Rubin 创造的,其最初的目标是把 Android 打造成一个可以对所有软件设计人员开放的移动终端平台[8]。2005 年 Google 公司将其收购,并于 2007 年 11月份与众多硬件制造商、软件开发商及电信营运商共同建立了手机开放联盟(Open HandsetAlliance,OHA),同时发布了名为 Android 的智能手机平台[9]。自此,Android 开始走进了人们的视线。Android 的发布改变了以往智能手机的产业格局,打破了 Symbian、WindowsMobile 在操作系统市场的垄断地位。另外,Android 提供的统一应用开发方法为开发者带来了极大的方便,其平台化的特点也极大地丰富了手机应用软件的功能。

2.1.2 Android 体系结构

Android 平台是基于 Linux2.6 版本内核进行改造的移动操作系统,它与其他的操作系统一样也采用了软件分层的架构,分为 Linux 内核、系统运行库、应用程序框架和应用程序共 4

层[10][11]。Android 采用软件层叠的思想来构建各个层次,使得分开的各层既各自独立又相互关联。所有层次共同构成 Android 平台,每层都有各自的分工,互不干扰;底层发生改变时对它的上一层不会产生影响,极好地体现了层次之间的低耦合性[12],图 2-1 对这种分层架构进行了展示。

主屏

浏览器

应用程序层

联系人

应用程序框架

电话

...

活动管理器 内容管理器 位置管理器 通知管理器

包管理器 资源管理器 电话管理器 视图系统 窗口管理器

FreeType

应用程序框架

libc

LibWebCore

SGL

外观处理器

Linux内核

Android运行环境

核心库

Dalvik虚拟机

媒体框架 OpenGL|ES

QLite

SSL

音频驱动

闪存驱动

摄像头驱动

电源驱动

显示驱动

WiFi驱动

Bindre(IPC)驱动

键盘驱动

图 2-1 Android 系统架构图

(1) 应用程序层

4

基于Android的打车系统的设计与实现

应用程序层是系统最顶层,包含许多核心的应用程序,诸如浏览器、联系人、电话、日历等[13],还包括一些用户自己下载安装的应用。这些应用程序是由各公司基于 AndroidSDK 使用

Java 语言编写的,允许开发者自由获取和修改源代码或者开发新的应用程序,也就是说,这是一种具有开源性质的手机终端解决方案。

(2) 应用程序框架

应用程序框架为应用程序层提供支撑,是用来构建应用程序的一组构件[14]。应用程序框架面向所有的应用程序提供大量应用程序接口 API,对应用程序组件进行了简化和复用,使得开发者能够直接利用系统组件来快速地开发应用程序,也可以通过继承来灵活地加以扩展。本层包含的组件如下[15]。

活动管理器(Activity Manager):对所有活动的生命周期及 Activity 之间切换的共享活动栈进行管理。

内容提供器(Content Providers):对数据进行封装使应用程序之间能够相互存取和共享数据。

位置管理器(Location Manager):用来获取设备的物理位置,提供位置服务。

通知管理器(Notification Manager):在不对用户的当前活动造成影响的前提下,在状态栏中显示提示信息,例如短信提示等。

包管理器(Package Manager):对 Android 系统里面的程序包进行管理。

资源管理器(Resource Manager):管理各种与应用程序相关的非代码形式的资源,如布局文件、资源图片等。

电话管理器(Telephony Manager):负责管理移动设备的电话状态,包括接听和拨打电话等。

视图系统(View System):本组件对用户界面元素例如:文本框、按钮、列表和网格等进行管理。

窗口管理器(Window Manager):将屏幕上的元素组织到窗口中,并管理所有的窗口程序。

(3) 系统运行库

本层分成系统运行库和 Android 运行环境两大部分[16]。Android 提供了一系列的库供系统中的组件使用,开发者可以通过应用程序接口来访问这些库,这些系统运行库包含:支持点阵字、向量字等字体开发的 FreeType;源自 BSD 系统的标准 C 系统库 libc,它针对嵌入式

Linux 设备进行了优化;基于 WebKit,为系统提供高速网页浏览器引擎的核心库LibWebCore;基于 PacketVideo 公司的 OpenCore 的媒体框架,不仅能够处理静态图片还支持MPEG-4、H.264 等多种格式的影音文件的录制与播放;基于 OpenGL|ES 1.0 API 的OpenGL 的 3D 绘图开发库;提供底层 2D 图形引擎的 SGL 库;能够为所有应用提供服务的轻量型关系数据库

SQLite;基于安全套接层网络通信机制的 SSL;负责管理显示子系统的访问方式并将各种应用的 2D 和 3D 图形层无缝地组合在一起的外观管理器。

5

基于Android的打车系统的设计与实现

Android 运行环境由核心库和 Dalvik 虚拟机组成,这个核心库提供了 java 语言编程核心库的大部分功能,Dalvik 虚拟机是一种基于寄存器的 Java 虚拟机,它在执行 Android 应用程序时,先通过转换工具将编译后的 Java 文件转换成 dex 格式的文件,再由 Dalvik 虚拟机来执行。每个应用程序都在自己的进程中运行,都拥有一个独立的 Dalvik 虚拟机实例。

(4) Linux 内核

Android 平台采用 Linux2.6 版本的内核来为系统提供核心服务,如内存管理、安全性、网络协议栈、进程管理还有驱动模型等都依赖于 Linux 内核,同时它还扮演了介于硬件层和软件栈之间的抽象层的角色[17]。

2.1.3 Android 应用程序构成

对于一个 Android 应用程序来说,主要包括四种核心组件,分别为:Activity、Service、Broadcast Receiver 和 Content Provider[18][19]。它们之间的关系如图 2-2 所示:

Intent进

行切换

Activity

提供的接

Service

使用Intent

Receiver

应外部事件

Activity

外部事件

A i i y

ct v t

用Content Provider将数据

保存到文件和数据库中

(1) Activity

Activity 是为用户呈现应用程序可视化界面的组件,每一个用户界面 GUI 都是对Activity

类的扩展,Activity 用视图构成图形用户界面来显示信息并对用户操作做出响应,

一个 Activity 就相当于一个窗体。一个应用程序可以包含一个或多个 Activity,在对 Activity

进行开发时需要先在 AndroidMainfest 文件中对其进行声明。Android 系统对 Activity 的管理是通过任务栈来实现的,启动一个 Activity 时,系统将其压入到任务堆栈中,当结束一个Activity 时,将其从任务堆栈中弹出 [20]。

Activity 生命周期指的是 Activity 从创建到关闭的整个过程,在这一过程中,Activity一般经历 4 种状态:Active/Running、Paused、Stopped、Killed[21]。

A

n

dr

iod

M

i

afn

e

st

.

xlm

图 2-2 Android 构成及工作流程

6

基于Android的打车系统的设计与实现

Active/Running 即活跃状态,此时的 Activity 处于任务堆栈的最顶端,它的用户界面位于屏幕的最前端,用户可以与其进行交互操作。

Paused 即暂停状态,此时仍然可以在屏幕上看到这个 Activity,但是用户的焦点已经被另一个活跃状态的 Activity 所抢占,用户不能对其进行操作。这种状态下的 Activity 依旧是存活的,维持着原来的状态,但是当系统内存资源匮乏时,系统可能会选择结束暂停状态的

Activity。

Stopped 即结束状态,处于这种状态的 Activity 已经被其他的 Activity 完全遮盖,其用户界面在屏幕上全部不可见。系统会在内存中保存这个 Activity,便于当它可见时能够出现在用户面前,及时完成状态切换。这种状态的 Activity 也会由于内存不足的原因而被系统杀死回收。

Killed 即销毁或未启动状态,这种状态的 Activity 已经移出了任务堆栈。

这四种状态之间的转换关系如图 2-3 所示。

Active/Running

当前

Activity

完全被

遮住

当前

Activity

部分被

遮住

Paused

Stopped

Killed

图 2-3 Activity 4 种状态之间的转换图

Activity 的生命周期可以用 7 种回调方法表示,如图 2-4 所示。一般在第一次创建Activity

时,Android 会自动调用 onCreat()方法,来创建后台线程,对全局进行初始化。然后调用 onStart()和 onResume()方法使这个 Activity 处于最前端,准备为用户提供交互服务。

调用 onPause()方法使得 Activity 处于暂停状态,onStop()方法使 Activity 转变为隐藏状态,当一个已经暂停的 Activity 重新启动时会调用 onRestart()方法,Activity 退出时会调用onDestory()方法终止 Activity 的进程。当系统内存不足时,Android 自动实行进程回收,不受用户和开发者的控制。

7

用户浏览回到这个Activity

基于Android的打车系统的设计与实现

Activity开始

onCreate()

onStart()

onRestart()

onResume

()

进程被杀死

Activity运行

Activity移动到前台

Activity移动到后台

用户浏览回到这个Activity

onPause()

Activity不再显示

onStop()

onDestory()

Activity结束

Activity移动到前台

图 2-4 Activity 生命周期过程及历经的状态改变

(2) Service

Service 是一种没有图形化界面,不能够与用户进行交互,但是能在后台长期运行的组件,因此有应用程序的隐形工作者之称。它负责完成 Android 中一些耗时较长的操作和大部分数据处理的工作,例如:网络的连接,长时间的输入或输出操作等。

与 Activity 比较而言 Service 的生命周期相对较简单,它只继承了 onCreat()、onStart()和onDestroy()方法,初次启动 Service 要调用 onCreat()和 onStart()方法,结束 Service 要执行onDestroy()方法。

Service 有本地服务和远程服务两种类型。本地服务是在同一个进程中运行,用来实现后台服务的功能;远程服务是在单独的进程中运行,用于实现进程之间的通信。进程内的Service 调用如图 2-5 所示,而进程间的 Service 调用则需要使用 AIDL(Android 接口定义语言)定义进程间的通信接口,如图 2-6 所示。

Service

Service

My Service

My APP

My Service

My APP

My APP

图 2-5 进程内 Service 调用

8

图 2-6 进程间 Service 调用

(3) Broadcast Receiver

基于Android的打车系统的设计与实现

Android 系统中的广播形式多种多样,有像电池电量过低提示这种来自系统代码的广播,也有像完成某些下载任务后提示的来自应用的广播。

Broadcast Receiver 是负责接收和处理广播的组件,广播接收器的数量由应用程序任意设定,可以通过运行某个 Activity 来响应其接收的消息或者是利用通知管理器给用户以警示[22]。

(4) Content Provider

Content Provider 支持多个应用程序之间相互共享和访问数据,这些数据的存储位置任意,可以存放在 Android 文件系统中,也可以存放在 SQLite 数据库中,它是不同应用之间共享数据的唯一方法,如图 2-7 所示。Content Provider 实现了组件代码与原始数据格式的分离,能有效地防止数据格式变化时对原始数据的破坏,为直接访问原始数据提供了方便。

开发者可以自由获取 Android 系统在 android. provider 包中提供的 Content Provider,也可以创建属于自己的 Content Provider[23]。

Content Provider

/Write

D

ate

F

ile、DB、Internet

图 2-7 Content Provider 示意图

组成 Android 应用架构的四大组件之间是相互独立的,它们之间相互调用共同组成了一个完整 Android 应用程序,由 Intent 负责协助这些组件实现它们之间的通信。Intent 相当于一个媒介,提供不同组件之间的调用信息,系统通过 Intent 描述的某次操作的动作、类别、组件名称、相关数据等信息找到对应的组件,实现组件的调用。

2.2 简介

是由微软公司在借鉴了 JSP 的诸多优点之后,于 2000 年推出的一种全新的动态页面开发技术[24]。它是建立在. NET 框架平台上的完全面向对象的 Web 程序设计框架,用于创建 Web 应用程序,. NET 框架的层次结构如图 2-8 所示。 是运行在 Web 服务器上的,它为开发内容丰富、动态且有个性化的 Web 网站提供了一种新方法。与此同时, 也包含一些创建 XML Web Service 的必要技术,它还提供了组件用来创建基于Web

的分布式应用程序。

9

基于Android的打车系统的设计与实现

程序设计语言

(C# C++.NET J# „)

应用程序平台

( Windows应用程序 „)

类库

公共语言运行时(CLR)

图 2-8

.NET 框架层次结构

抛弃了解释型脚本语言转而采用编译型程序设计语言,支持多种开发语言,其首选语言为 或者是 C#,与其他动态网站开发技术相比执行效率大大提高。

实现了代码隐藏技术,即网站的显示界面与后台的程序代码分开,这样不仅使得网站的结构更加清晰,而且实现了功能的复用,使得在提高了开发效率的同时也更容易实现系统维护。用 开发的网页的扩展名一般为 aspx。它充分地利用. NET 框架类库为其提供的丰富功能,在服务器端通过编译器编译成中间语言,通过公共语言运行时来运行,因此, 在安全性和可靠性方面有很好的保证。

提供的控件非常丰富,Web 应用功能的实现都是依靠这些控件来完成的。

提供的控件可以分为三大类:HTML 控件、Web 服务器端控件还有用户自定义控件[25]。HTML 控件主要功能是帮助实现 的向下兼容,当需要将网站由静态网页升级为动态网页时就会用到它。Web 服务器端控件的数量繁多是 首选控件,VisualStudio

2008 提供的 Web 服务器端控件就有 80 个之多,根据它们的应用领域不同可以划分为8 个小类,分别为:标准控件类、数据控件类、验证控件类、导航控件类、登录控件类、WebParts 控件类、AJAX 扩展控件类和报表控件类。

提供了许多内置对象,开发时只需要了解对象的功能,然后按照需求直接调用这些对象即可,程序编写更加灵活。 中的 Page、Request、Response、Cookie、Session、Application 和 Server 等[26]内置对象较为常用,表 2.1 介绍了它们的功能。内置对象的访问可以通过 Web 窗体的属性来实现,如 Page 对象就是由 类实现的。

表 2.1 常用内置对象及其功能

对象

Page

Request

Response

Cookie

Session

Application

Server

功能

对 页面相关的内容进行处理

获取客户端及服务器端的相关信息

将 HTTP 响应数据及有关该响应的信息发送到客户端

存储客户和网站相关的信息

为客户的会话存储信息

保存应用程序需要多次访问的信息或 Web 服务的实例

提供一系列与 Web 相关的实用程序

10

基于Android的打车系统的设计与实现

2.3 MySQL 简介

系统开发离不开数据存储,要实现数据存储就不能缺少数据库。数据库是用来存储信息的“仓库”,这里的信息特指需要存储的数据。信息在数据库中的存储并不是凌乱不堪的,数据库借鉴了生活中常用的表格的形式,将数据存放在不同的二维表中,条理清晰,访问起来也更加的灵活。

MySQL 最早是由瑞典 MySQL AB 公司开发的一种关系型数据库管理系统(RDBMS),随后被 SUN 公司收购,现在属于 Oracle 公司。1998 年 1 月关系型数据库 MySQL 的第一个版本问世,它采用的是多线程运行机制,还提供了许多编程语言的接口,如 C、Java、C++、PHP 等。2001 年发布的 MySQL4.0 版本在原来的基础上进行了功能强化并添加了许多新的功能。到现在为止,MySQL 已经发展到了 5.6 版本,无论效率还是功能与以前的版本相比都有了很大的提高。

MySQL 对数据库的管理是通过结构化查询语言,即 SQL 语言实现的,SQL 语言在数据库管理中使用最为普遍[27]。由于 MySQL 的源代码是开放式的,因此开发者可以在取得通用许可证的前提下下载使用 MySQL,并根据自身的需要进行修改。MySQL 凭借其体积小、速度快、成本低、可靠性高和适应性强等特性备受关注。在大多数开发者看来,如果不需要进行事务化处理,MySQL 是不错的选择。MySQL 提供了许多连接数据库的方法,如TCP/IP、ODBC 和

JDBC 等都可以实现,使用起来非常方便。

由于 MySQL 具有操作简单,功能强大,高效可靠等优点,所以本打车系统采用 MySQL作为其后台数据库。

2.4 本章小结

本章介绍了本打车系统的开发平台,对 Android 开发平台进行了详细的介绍,包括Android 的发展、Android 的体系结构以及 Android 应用程序的构成等,并且对 框架及其常用内置对象,还有 MySQL 数据库进行了简单介绍,为后面的系统开发做好充分的准备。

11

基于Android的打车系统的设计与实现

第三章 系统方案研究

3.1 需求分析

随着人们生活水平的不断提高,打车成为了一种非常普遍的出行方式。公共交通的早晚高峰期及其拥挤、环境差、座位短缺等现状让不少人望而却步,停车收费、限行政策的实施等使得上路的私家车的数量减少,这些都促进了打车需求的不断上升。但是,在实际打车的过程中往往会出现一些问题。有些想要打车的人在路边等了半个小时都没发现有一辆空车可以搭乘,或者有时好不容易碰上一辆空车,却被司机以“交接班”、“已经有人预订”等各种借口拒载,被逼无奈的乘客只能继续等待或者选择提前预订。虽然乘客有他们的抱怨,但是出租车司机们也有他们的无奈,司机们为了拉到一个顾客整天开着车大街小巷的转悠,浪费时间不说还得搭上许多不必要的燃料费。以上种种困难使得打车出行方便快捷的优势变得不再明显。

如今,在 3G 手机及移动设备越来越普遍的同时,移动互联网络逐步成熟,移动应用也越来越多元化、生活化。打车系统就是乘客利用移动设备在网络上发布自己的打车需求,出租车司机可以根据查看到的这些需求选择是否接受这单生意,如果成功获得生意就与乘客取得联系,从而提高打车成功率,避免了过多时间和金钱的浪费。

3.1.1 功能需求

打车系统的主要服务对象是移动用户,包含了乘客、客服人员和出租车司机三种不同的用户,根据其角色的不同,他们对系统的需求也不一样。

乘客一般分为两种,一种是拥有 Android 操作系统移动设备的乘客,通过直接安装本打车系统乘客端应用,在其注册、登录以后,可以有选择的打车,在输入本用户的起点、终点、愿加价、愿等待多长时间以后,便可以发送打车请求,用户还可以选择查询该用户的历史打车记录,打车过程结束后乘客可以对本次打车进行评价;另一种是乘客不需要安装本系统的乘客端应用,直接给客服人员打一个电话,告知其相关的打车信息,然后由客服人员帮助其完成打车信息的发布工作,同样地,如果乘客对本次的打车服务有不满意的地方,也可以拨打电话向客服反映。乘客的需求用例图如图 3-1(a)所示。

客服人员首先要注册、登录系统,在接到乘客的电话以后,录入乘客的姓名、电话、起点、终点,发布打车信息。客服人员还可以对整个系统的打车信息进行管理,例如:查看某个乘客的打车记录,查看所有的打车请求并可以对这些请求进行修改、删除等操作等。

客服人员还需要对差评信息进行管理,对于因为差评次数超出系统界定而被加入黑名单的司机或乘客,客服人员可以对其再次开通。客服人员的需求用例图如图 3-1(b)所示。

12

基于Android的打车系统的设计与实现

注册

注册

注册

登录

登录

登录

查看打车请求

发布打车信息

乘客

客服人员

发布打车信息

司机

抢单

联系打车人

评价

查询打车记录

打车信息管理

评价

用户信息管理

(a)乘客需求用例图

(b)客服人员需求用例图

(c)司机需求用例图

图 3-1 打车系统需求用例图

出租车司机应先在 Android 系统的移动设备中下载安装本打车系统专门向司机提供服务的司机端应用,注册登录后,可以查看已发布的所有打车请求,如果有想接受的请求,可以抢先对该条消息进行确认,只有最先确认的司机才能获得这单生意。如果司机抢到这单生意可以通过拨打乘客电话的方式与其取得联系。同样地,如果司机在提供服务的过程中对乘客有什么不满,也可以给乘客差评。出租车司机的需求用例图如图 3-1(c)所示。

3.1.2 性能需求

本打车系统不仅要求实现其基本功能,而且在操作系统、用户界面、网络通信、数据库的选择等性能方面也有许多的要求。

(1) 操作系统:本打车系统是面向大众的,选择的操作系统应具有最大化的用户规模,使系统能被乘客和司机广泛应用,Android 恰好满足这一要求。而且 Android 系统稳定,操作简单,为打车系统能正常运行提供了基本条件。

(2) 用户界面:对于司机和乘客而言,是通过移动设备访问本打车系统的,要求界面结构清晰,操作简单,便于实现交互,给其以良好的体验;对于客服人员来说,界面的设计要系统化,便于对系统进行管理,访问起来方便快捷。

(3) 通信网络:本打车系统是通过移动互联网络实现其通信功能的,要求能快速的访问服务器,高效地实现数据传递。

(4) 数据库选择:本打车系统需要进行大量的数据存储,数据存取操作频繁,对数据库的安全性有一定的要求,多用户同时访问数据时,得到的数据必须准确可靠[28]。经过对比,选择

MySQL 数据库为系统提供数据支持。

13

3.2 关键技术介绍

为了满足系统的各种需求,需要许多关键技术提供支持。

3.2.1 用户界面构建

简洁美观的用户界面更加容易迎合用户的需要, Android 用户界面的实现方式通常有三种:通过 XML 配置文件生成、通过用户自己的界面接口生成和通过代码直接生成[29]。

为遵循系统开发时应尽量使用户界面与程序在逻辑上相互分离的原则,通过 XML 配置文件生成是构建用户界面的最佳选择,下面介绍几种布局方式。

(1) 线性布局

线性布局(LinearLayout)根据属性 Orientation 的值为 Vertical 还是 horizontal,将布局中的元素按垂直方式一行一行的显示或者按水平方式一列一列的显示。布局中元素的显示比例可以通过 layout_weight 属性的值来确定。

(2) 相对布局

相对布局(RelativeLayout)指的是任意一个元素的定位都必须以另一个元素的位置为参照的布局方式,这个用来参照的元素可以是父元素也可以是其他元素。

(3) 绝对布局

绝对布局(AbsoluteLayout)是指各个元素在界面上的位置是由坐标来决定的,Android手机的坐标系是以左上角的点为原点坐标(0,0),向右为 X 轴正方向,向下为 Y 轴正方向。

但是,这种布局方式在垂直切换时,往往会出现问题,而且元素较多时,计算坐标的位置比较麻烦。

(4) 表单布局

表单布局(TableLayout)与 HTML 中的 table 类似,TableLayout 里面是数量不等的TableRow,每个 TabelRow 表示一行,元素的具体定义是在 TableRow 里面完成的。

TableLayout 可以看成是 TableRow 的水平线性布局,因此,可以把它看成是线性布局的一个子类。

3.2.2 Activity 间的跳转

在 Android 系统中实现 Activity 之间的跳转,需要 Intent 对象和 startActivity()方法配合来完成,在主程序中使用 startActivity()方法来调用另一个 Activity,Intent 对象用来描述自己是什么,要执行的任务是什么。运行时,系统会根据 Intent 对象的描述,在

文件中找到已经提前声明且满足此 Intent 要求的 Activity,把它传送给Intent 对象,实现界面跳转。Intent 在这里相当于一个媒体中介,专门提供不同 Activity 之间相互调用的有关信息,实现主 Activity 与被调用的 Activity 之间的解耦[30]。

3.2.3 Android 客户端与后台的通信

本打车系统 Android 客户端与后台的通信主要是实现数据交互,为了实现这一交互过

14

基于Android的打车系统的设计与实现

程,必须保证服务器端的 MySQL 数据库的连接为打开状态且 Android 客户端能够通过网络访问服务器端。

Android 客户端与后台通信的方式有很多种,可以通过 Socket 通信,也可以通过

WebService 通信,还可以通过 Http 通信[31]。Socket 通信方式属于套接字通信方式。Http 通信是基于 HTTP 协议的,该协议可以说是目前网络上使用最频繁也是最为重要的一种协议,许多

java 应用程序都需要通过 HTTP 协议来访问网络资源。有关 Http 通信的包存在于 JDK的 包中,在该包中提供了实现 HTTP 协议访问的基本功能。本打车系统采用 Http通信,通信过程如图 3-2 所示。

声明Base URL常量

通过URL获得HttpGet对象

通过URL获得HttpPost对象

通过HttpGet获得HttpResponse对象

通过HttpPost获得HttpResponse对象

通过URL发送Post请求,返回请求结果

通过HttpPost发送Get请求,返回请求结果

通过HttpPost发送Post请求,返回请求结果

图 3-2 Android 客户端访问后台的 Http 通信过程

3.3 本章小结

本章首先对打车系统的需求进行了说明,并通过用例图的形式对系统的各个用户端进行了剖析。然后介绍了实现这些需求所要用到的一些关键技术,包括:用户界面的构建、不同

Activity 间的跳转和 Android 客户端与后台数据库之间的数据交互。

15

基于Android的打车系统的设计与实现

第四章 系统设计

4.1 系统总体设计

目前市场上存在各种各样的手机,不同厂家的手机的操作系统也存在一定的差异,由于本打车系统是在 Android 操作系统的基础上设计的,所以只能安装在 Android 操作系统上。对于操作系统不是 Android 的乘客来说不能下载使用本系统的乘客端,因此,系统增加了客服端,乘客可以通过电话告知客服人员自己的打车需求,使客服人员通过 Web 浏览器访问打车系统,来帮助乘客实现打车。Web 端具有方便经营系统、进行系统维护和管理的作用。拥有 Android

系统终端的司机和乘客可以直接下载安装他们各自所需要的用户端,然后通过无线网络访问服务器,实现整个打车过程。其中,Android 客户端和 Web 客服端通过同一个服务器来实现对后台数据库服务器的操作,这种设计有效地保证了它们获取数据的一致性,打车系统的总体设计框架如图 4-1 所示。

司机

Android

客户端

乘客

无线网

电话

服务器

客服

Web端

数据库服务器

图 4-1 系统总体框架图

4.1.1 Android 客户端架构

本系统 Android 客户端(包括司机端和乘客端)采用客户端/服务器模式,即 C/S 模式,Android 客户端的体系结构如图 4-2 所示。其中,客户端一方面要与用户进行交互,为其提供良好的用户界面,另一方面还要与服务器端进行数据交互。服务器端为客户端提供数据下载与上传的接口以便于交换数据,服务器端的另一侧连接数据库,可以对数据进行增、删、改、查等操作,客户端与服务器端通过 Http 通信方式交换数据[32]。

16

基于Android的打车系统的设计与实现

操作

服务器代理

用户

显示界面

客户端

监听

服务

器端

操作数据

数据库

服务器

图 4-2 基于 C/S 结构的 Android 客户端架构图

用户通过具有 Android 操作系统的移动设备操作 Android 客户端,用户界面通过 XML布局文件来生成,客户端的各个功能模块与用户的交互采用 Activity 活动类来实现。在服务器启动时监听接口 ServletContextList 就会对客户端进行监听,然后通过服务器代理线程与客户端通信,最后通过服务器操作后台的数据库[33]。

4.1.2 Web 端架构

本系统的 Web 客服端采用浏览器/服务器模式,即 B/S 模式。Web 客服端的体系结构如图 4-3 所示,在 B/S 模式的系统中,用户可以通过 Web 浏览器向网络中的服务器发送请求。B/S

模式的结构分为三个层次:(1)客户端即 Web 浏览器;(2)应用服务层,该层具有良好的可扩展性,Web 服务器就位于这一层;(3)数据层即数据库服务器[34]。为了保持系统各个模块之间相对独立,方便用户在浏览器上进行操作,Web 客服端采用模型-视图-控制器(Model - View –

Controller,即 MVC)设计模式,将数据业务处理与数据的显示分开,当对系统进行再开发时能更容易的实现新的业务或新类型的数据界面的添加,使系统的可扩展性大大增强[35]。

客户层

Web中间层

控制器

Controler

初始化

数据层

请求

数据库

服务器

Web

Web

用户

浏览器

服务器

应答(Model)

(View)

响应

图 4-3 基于 B/S 结构的 Web 端架构图

在 Web 客服端中,由 Web 服务器接收来自客户层 Web 浏览器的请求,并把这个请求传送给控制器;控制器初始化模型,并调用其对应的视图;根据控制器的请求模型会执行相应的业务逻辑功能,利用其构件对象处理数据库的同时把信息传送给视图;经过 Web 服务器解释之后,显示给用户。

4.2 系统概要设计

整个打车系统主要是为用户外出时提供方便的打车方式,全面掌握自己的打车过程,不必在路边苦等浪费时间。整个系统分为三个客户端:乘客端、客服端和司机端。其中,打车人端和司机端通过 Android 客户端实现,客服端通过 Web 端实现。

17

(1) 乘客端

基于Android的打车系统的设计与实现

乘客端主要是向需要打车的乘客提供服务。乘客在客户端下载安装上该系统乘客端软件以后就可以使用,初次使用该软件要先进行注册。登录系统后,乘客可以根据自己的需求使用该系统,比如,查看注册用户本人以往的打车记录,如果有打车需求可以进入打车模块,选择现在打车还是预约打车,然后填入打车所需的必要信息,上传信息后等待回复。

在一次打车交易完成后,乘客可以进入评价模块,对本次所享受的打车服务进行评价。根据乘客端的功能需求,本打车系统乘客端的功能模块图如图 4-4 所示。

开始

(2) 司机端

注册登录模块

打车模块

历史记录查询模块

评价模块

结束

图 4-4 乘客端功能模块图

司机端主要是向出租车司机提供服务,所有拥有 Android 操作系统的司机都可以下载该司机端应用。司机在注册登录后,可以选择查看已经发布的打车需求信息,如果发现合适的打车信息,可以进行抢单,然后等待抢单是否成功的反馈消息,如果抢单成功,可以与乘客取得联系进而提供相应的出车服务。司机还可以查看本人通过该系统实现的打车交易的历史信息,在提供完一次打车服务后,司机同样可以进入司机端的评价模块,对本次交易过程进行评价。根据功能需求概括本打车系统司机端的功能模块图如图 4-5 所示。

抢单模块

历史记录查询模块

评价模块

开始

注册登录模块

结束

图 4-5 司机端功能模块图

18

(3) 客服端

基于Android的打车系统的设计与实现

考虑到乘客不一定都拥有 Android 操作系统,因此本打车系统添加了一个客服端来代替乘客发布打车需求信息。乘客只需要给客服端打一个电话,告知客服人员其打车需求,由客服人员来完成剩下的打车过程,客服端的主要工作流程如图 4-6 所示。客服人员在 Web端注册登录系统后,可以将电话接收到的打车信息录入到本打车系统,然后发布出去供司机查看抢单。另外,客服端能够对系统的打车信息进行管理,例如查看历史打车信息,管理对乘客、司机的评价等,对于已经被加入黑名单的乘客和司机的信息进行管理,使他们能够再次使用本系统。

开始

已经注册?

N

Y

登录

注册

打车模块

用户信息管理

打车信息管理

现在打车

预约已经加入黑

名单?

Y

N

查看打车历史

填写打车信息

上传打车需求

修改用户信息

结束

图 4-6 客服端工作流程图

4.3 Android 客户端各功能模块设计

综合整个打车系统的 Android 客户端,即乘客端和司机端,系统的各功能模块主要有:注册登录模块、乘客打车模块、历史记录查询与评价模块、司机抢单模块。以下对各个模块进行详细设计。

4.3.1 注册登录模块设计

19

基于Android的打车系统的设计与实现

系统运行后,首先进入打车系统客户端登录界面,为了保证系统的安全,使用系统之前必须先进行注册,已经注册的用户输入个人的用户名和密码点击登录按钮进入系统,未经过注册的用户点击注册按钮进入注册页面先注册后再进行登录。在网络畅通的情况下,对用户的用户名和密码进行核对,需要将客户端输入的用户名作为参数访问服务端数据库取出该用户名下的内容,返回 Android 应用程序后根据数据库中的用户名、密码与输入的用户名、密码进行核对,核对无误后方可进入该系统。系统客户端的注册登录流程图如图4-7 所示。

开始

进入注册界面

输入注册信息

N

已经注册?

Y

输入用户名和

密码

N

网络是否正常?

Y

与服务器建立

链接并存储

返回登录界面

N

网络是否正常?

Y

与服务器建立链

接并进行匹配

N

登录信息正确?

Y

进入系统

图 4-7 注册登录模块流程图

结束

4.3.2 乘客打车模块设计

生活中打车一般分为两种情况,现在打车和预约打车。针对现实的打车需求状况,本打车系统也从这两个方面进行设计。用户进入系统后根据自身需求选择进入打车模块相应的界面,然后输入打车所需要的相关信息,通过网络将相应的参数传送给服务端数据库,以便司机能够查看到该打车需求给予响应,此时用户只需要等待回复即可。系统的打车模块的流程图如图 4-8

所示。

20

基于Android的打车系统的设计与实现

开始

现在打车?

N

N

预约打车?

Y

进入预约打车

界面

输入预约打车

信息

Y

进入现在打车

界面

输入现在打车

信息

发布打车需求

发布打车需求

结束

图 4-8 打车模块流程图

4.3.3 历史记录查询与评价模块设计

打车系统保存乘客和司机的历史记录,方便用户对于以往的打车历史进行查询。系统运行后,用户可以选择查看历史记录按钮,进入历史记录查询模块,用户即可浏览历史记录,并可以在该页面选择对某一条记录进行评价或选择再次打车。点击某条历史记录相应的评价按钮进入评价模块,填写评价信息给予评价。评价模块的设计主要是为了方便对打车系统进行管理,在一定程度上对司机和乘客的行为进行约束,尽量减少恶意打车行为的出现。历史记录查询与评价模块的流程图如图 4-9 所示。

21

开始

基于Android的打车系统的设计与实现

开始

N

查询历史记

录?

Y

进入历史记录

界面

进入打车需求界面

浏览打车需求列表

查看历史记录

满意某条订单请求?

Y

N

评价?

Y

进入评价界面

N

抢单

抢单确认

填写评价内容

N

抢单成功?

Y

上传评价信息

联系乘客

结束

结束

图 4-9 历史记录查询与评价模块流程图

图 4-10 司机抢单模块流程图

4.3.4 司机抢单模块的设计

司机抢单模块是本打车系统司机端的主要功能,成功登录本系统的司机可以选择进入本模块查看打车需求列表,列表里包含了所有乘客上传的打车服务请求,包括现在打车请求和预约打车请求。司机可以通过浏览该打车列表,找到想要接受的某条订单请求,点击该条订单请求后面的抢单按钮进行抢单。为了避免司机的误操作带来的影响,系统会提示司机进行再一次的抢单确认。如果司机抢到了本条订单,系统给予提示并让司机选择与乘客取得联系。司机抢单模块的流程图如图 4-10 所示。

4.4 数据库设计

数据服务层是打车系统中的重要组成部分,要求数据库能够实现大量的信息存取。虽然Android 提供的 SQLite 数据库可以直接在 Android 项目中建立小型数据库,对数据进行增、删、改、查等操作,但是,由于手机性能及内部存储容量的限制还有 SQLite 的功能并不是很完善等原因[35],要在 Android 应用程序中大量处理数据是不大合理的。考虑的本打车系统数据需求及 Web 端的应用,选择 MySQL 作为后台数据库,其易操作、高效、可靠

22

基于Android的打车系统的设计与实现

等优点可以为系统提供良好的服务[36]。根据打车系统的功能分析及各个部分的设计要求,共在本系统的数据库中设计了 4 个表,包括存储乘客信息的乘客信息表,存储司机信息的司机信息表、存储客服相关信息的客服人员信息表,存储每一次打车记录相关信息的打车记录表。

根据各自的需求分析,各个表的功能与结构设计如下:

(1) 乘客信息表(passenger):用于记录本系统乘客端注册用户的基本信息,用户可在系统注册过程中添加包括用户名、登录密码、姓名、性别、手机号等基本信息,还记录该注册用户的使用次数和差评次数的信息。该表的主键为乘客编号,具体设计如表 4.1 所示。

表 4.1 passenger 表的结构

字段名称

pid

p_unam

p_pwd

p_nam

p_gen

p_tel

pu_num

数据类型

int

nvarchar(50)

nvarchar(50)

nvarchar(50)

int

nvarchar(11)

int

int

是否允许为空

是否主键

说明

乘客编号

用户名

登录密码

乘客姓名

乘客性别

乘客电话

使用次数

差评次数

pb_num

(2) 司机信息表(driver):用于记录司机端注册用户的基本信息,用户可在系统注册过

程中添加包括用户名、登录密码、姓名、性别、手机号、车牌号、驾照号等基本信息,还记录注册司机的使用次数和差评次数信息。该表的主键为司机编号,具体设计如表 4.2 所示。

表 4.2 driver 表的结构

字段名称

did

d_unam

d_pwd

d_nam

d_gen

d_tel

lp

dl

pu_num

数据类型

int

nvarchar(50)

nvarchar(50)

nvarchar(50)

int

nvarchar(11)

nvarchar(20)

nvarchar(20)

int

int

是否允许为空

是否主键

说明

司机编号

用户名

登录密码

司机姓名

司机性别

司机电话

车牌号

驾照号

使用次数

差评次数

pb_num

(3) 客服人员信息表(service):用于记录注册客服人员的基本信息,包括客服人员的工

作编号、用户名、登录密码、姓名、性别、电话。其中工作编号为该表的主键,具体设计如表 4.3 所示。

23

基于Android的打车系统的设计与实现

表 4.3 service 表的结构

字段名称

sid

s_unam

s_pwd

s_nam

s_gen

s_tel

数据类型

int

nvarchar(50)

nvarchar(50)

nvarchar(50)

int

nvarchar(11)

是否允许为空

是否主键

说明

客服员编号

用户名

登录密码

客服员姓名

客服员性别

客服员电话

(4) 打车记录表(record):用于记录每次打车过程中使用的基本信息,包括记录号、司

机工号、打车人手机号、客服人员工作编号、起点、终点、打车时间等打车信息。该表的主键为记录编号,具体设计如表 4.4 所示。

表 4.4 record 表的结构

字段名称

pid

time

start

finish

pid

did

数据类型

int

datatime

nvarchar(50)

nvarchar(50)

int

int

是否允许为空

是否主键

说明

记录编号

打车时间

起点

终点

乘客编号

司机编号

4.5 本章小结

本章对打车系统进行了系统设计,首先介绍了本打车系统的设计目标,对系统的总体架构从 Android 客户端架构和 Web 端架构进行了设计。然后,从系统的乘客端、司机端和客服端三个部分介绍了其工作流程,并具体地描述了系统 Android 客户端的各个功能模块,包括注册登录模块、乘客打车模块、历史记录查询与评价模块和司机抢单模块。最后,针对系统的所有需求,在 MySQL 数据库中详细地设计了系统的各种表的结构。

24

基于Android的打车系统的设计与实现

第五章 系统实现与测试

打车系统包括 Android 客户端和 Web 客服端,其主要功能是基于 Android 和 平台开发的,采用 Java、C#等编程语言,具体实现平台如表 5.1 所示。开发平台已经在第二章进行了详细介绍。

表 5.1 系统实现平台

操作系统

开发工具

运行环境

虚拟设备

数据库

Windows7

Eclipse+ ADT+ Android SDK+ visual studio 2008

JDK+Android+

AVD

MySQL

5.1 Web 客服端的实现与测试

根据本打车系统的需求,Web 客服端所要实现的最主要的功能是代理乘客发布打车信息和对用户信息、打车信息进行管理。在对客服端的开发采用三层开发模型,分别创建数据层、业务逻辑层和表示层。开发的具体步骤为:申请域名和空间、网站设计与制作、预编译网站及网站上传发布。

客服人员注册登录后可以代替用户发布打车信息,系统实现界面如图 5-1 所示。

图 5-1 打车信息发布界面

除了发布打车信息,客服人员还可以对本打车系统的司机信息、乘客信息和打车记录信息进行管理包括查看、修改、删除等操作。司机信息管理页面如图 5-2 示。

25

基于Android的打车系统的设计与实现

图 5-2 司机信息管理页面

乘客信息管理页面如图 5-3 所示。

图 5-3 乘客信息管理页面

打车信息管理页面如图 5-4 所示。

26

基于Android的打车系统的设计与实现

图 5-4 打车信息管理页面

5.2 Android 客户端各功能模块的实现与测试

5.2.1 注册登录模块的实现与测试

由于本打车系统 Android 客户端包括乘客端和司机端两部分,这两部分的用户在使用本系统时都需要进行注册登录,它们的实现过程类似,这里以乘客端为例进行介绍。

(1) 登录

登录界面的布局文件 以线性布局 LinerLayout 中嵌套 LinerLayout 方式实现页面布局,在界面中放置了文本视图和按钮控件。其中定义两个文本控件 TextView,分别为用户名和密码,两个用来输入用户名和密码的文本输入控件 EditText,一个 CheckBox,用于选择是否记住本次输入的用户名和密码,便于下一次登录,两个 Button 控件,分别为登录和注册,这些控件的样式及布局在 中都有详细描述。此外,为了在 java 类中能够方便的调用这些控件,对于布局文件中的每一个控件都设计了唯一的 id 属性值。系统的登录界面如图 5-5 所示。

27

基于Android的打车系统的设计与实现

图 5-5 Android 客户端登录界面

乘客端创建一个继承了 Activity类的 LoginApp 类,首先在 LoginApp 类中重写 onCreate方法,通过在该方法中调用 setContentView 方法,将 作为参数传递进去,使得用户界面能够成功加载到已经定义的登录界面。事实上,开发者在任何项目中的res/layout 目录下定义的每一个布局文件都可以通过调用 setContentView 方法来打开页面。

调用登录页面的关键代码如下。

public void onCreate(Bundle savedlnstanceState) {

te(savedlnstanceState);

setContentView();

……}

乘客输入用户名和密码,点击登录按钮后,系统调用登录按钮的监听 OnClickListener中的

OnClick()方法,首先利用函数 getText()获取用户输入的用户名 UserName 和密码UserPwd,然后通过 HttpURLConnection post 方式与后台服务器进行通信,得到数据库中相应的用户信息,对两次取得的信息用 equals 函数进行验证,如果信息无误,根据 CheckBox的选择情况通过

SaveUserInfo()函数判断是否保存用户信息。实现用户信息保存的代码如下。

private void SaveUserInfo() {

if(ked()){

//保存

SharedPreferences uiState = getSharedPreferences("UserInfo",

Context. MODE_WORLD_READABLE);

//取得编辑对象

editor = ();

//保存用户信息

ing("userName", rName()).commit();

28

基于Android的打车系统的设计与实现

ing("userPwd", rPwd()).commit();

}

}

对于还没有进行注册的用户,可以在登录界面点击注册按钮。在监听注册按钮OnClickListener 的 Onclick()方法中定义一个 Intent 对象,用 setClass 指定 Intent 对象启动RegisterApp 类。注册按钮监听的代码实现如下。

kListener btnRegisterClick = new kListener() {

public void onClick(View v) {

//新建一个 Intent 对象

Intent intent = new Intent();

//指定 intent 要启动的类

ss(, );

//启动一个新的 Activity

startActivity(intent);

//关闭当前的 Activity

();

}

};

(2) 注册

注册界面的布局文件为 ,它的布局方式与登录界面的类似,只是在控件的种类和数量上有所差别,其中有一个 RadioGroup 组件,里面包含两个 RadioButton 控件,用户在选择是只能选择其中的一项。乘客端注册界面如图 5-6 所示,司机端注册界面如图5-7 所示。

图 5-6 乘客端注册界面

图 5-7 司机端注册界面

乘客端注册功能是在 中实现的,系统对于用户的注册信息有一定的要求,因此需要验证用户信息,例如系统要求两次输入的密码必须相同、手机号码为 11 位等。

29

基于Android的打车系统的设计与实现

当用户添加完相应的信息,点击立即注册按钮时,系统监听到此操作,然后调用函数checkUserInfo(),对信息进行验证。如果验证无误则调用函数 setUserInfo()赋值用户信息,再调用函数 register()注册并返回登录页面,如果验证时出错则给出相应的提示。点击返回按钮则直接返回登录页面。系统采用 XML 方式构造数据源,然后封装成相应的参数,使用GET 或者

POST 方法与数据后台进行通信,注册功能实现的重要代码如下。

private boolean Register(String userInfo) {

String params = null;

String userInfo1 = userInfo;

try {

//传递的参数设定编码格式,以防止乱码

params = ("userInfo", "UTF-8") + "="

+ (userInfo1, "gb2312");

} catch (UnsupportedEncodingException e) {

Log.e(DEBUG_TAG, "注册方法中参数传递错误!");

}

String resultData = null;

//得到字符串集合

resultData = tHttpURLConnByUrl(urlRigester, params);//解析结果

if (resultData != null && () > 0) {

if (ns("")) {

resultData = ing(

f("") + 8,

dexOf(""));

String flg="0";

flg=ing(0,1);

if(flg=="0"){ //注册失败

return false;

}else{ //注册成功

String id=ing(0,f("/"));

//保存用户信息

SaveUserInfo(id);

DisplayToast("用户注册成功,返回登录界面!");

returnLoginPage();

return true;

}

}

}

return false;

}

5.2.2 乘客打车模块的实现与测试

30

基于Android的打车系统的设计与实现

乘客端的打车模块分为现在打车和预约打车两部分,它们的布局文件分别为

和 ,采用 LinearLayout 布局,由 TextView、EditView、RadioButton等控件布局实现的。用户在主操作界面选择现在打车按钮或预约打车按钮,便可以进入到打车模块。系统的现在打车界面如图 5-8 所示,预约打车界面如图 5-9 所示,二者的实现过程基本相同,现在打车过程是在 类实现的,预约打车过程是在 类中实现,下面以现在打车为例对其实现进行介绍。

图 5-8 现在打车界面

图 5-9 预约打车界面

进入现在打车界面后,乘客手动添加起点、终点、愿加价、愿等车各项所对应的信息,点击立即打车按钮上传打车需求。对立即打车按钮设置一个OnClickListener函数进行监听,获取打车信息并存入系统数据库中,上传成功后,由 Intent 对象返回上一页面。实现代码如下。

kListener btnGetTaxiClick = new kListener() {

public void onClick(View v) {

if (checkGetTaxiInfo()) {

setGetTaxiInfo();// 赋值打车信息

GetTaxi(JoinGetTaxiInfo());// 打车

}

}

};

5.2.3 历史记录查询与评价模块的实现与测试

无论是司机还是乘客都可以通过 Android 客户端查看自己的打车记录,也都有对对方进行评价的权利,用户可以通过历史记录与评价模块完成这一过程,下面以乘客端为例介绍。

31

基于Android的打车系统的设计与实现

进入打车系统乘客端的历史记录查询界面后,用户即可浏览以往的打车记录。历史记录查询功能的实现是在 中完成的,重写 onCreat 方法,调用历史记录查询界面的布局文件 ,里面包含一个 LisView 控件,列表中的每一个项目都是由historylist_ 布局的,历史记录查询界面如图 5-10 所示。

图 5-10 历史记录查询界面

实现时首先根据乘客的用户信息从数据库中取出该乘客的打车历史记录的相关信息,将数据保存在 HashMap 中,然后将 HashMap 添加到 ArrayList 数组对象中,将 ArrayList对象作为 ListAdapter 数据适配器的参数传入,最后绑定在布局文件的 ListView 控件上。

HashMap 类实现了 Map 接口,它提供一种键值对保存数据的方式,键值对的映射关系就像表中的字段与表中的值的关系一样,可以把表中的查询结果转换成 HashMap 散列表的形式。ArrayList 对象是包含单一数据值的项目的集合,通过 Add()方法向 ArrayList 添加项目。实现的重要代码如下。

ArrayList> listItem=new ArrayList< HashMap

Object>>(); //初始化 ArrayList 数据源对象

//读取 Strings 中的值

urlUser = ing(foURL);

if (() > 0) {

if(getHistory(urlUser)){ //连接后台得到数据

setContentView(y); //加载界面

inithistoryData();//加载数据源

historylist = (ListView) findViewById(ew01); // 绑定 Layout 里面的

ListView

//生成适配器的 Item 和动态数组对应的元素

ListAdapter listItemAdapter = new SimpleAdapter(this, listItem, // 数据源

ylist_items,// layout 中的 historylist_items 子层

32

基于Android的打车系统的设计与实现

new String[] { "EvaluateButton", "ItemTime", "ItemStart", "ItemFinish"}, // 动态数据的子项new int[] { teButton, me, art, nish} // 绑定list_items 中的控件

);

// 添加到 listView 中

pter(listItemAdapter);

点击任意一条记录后面的评价按钮即可进入评价界面,如图 5-11 所示,评价界面的布局文件为 。乘客填写对本次打车过程中司机所提供服务的评价,选择满意程度,点击完成按钮即可完成评价过程,评价功能的实现是在 文件中完成的。点击完成按钮触发对这个控件的监听,系统获取乘客填写的评价信息并上传至数据库进行保存,与此同时通过

Intent 对象跳转到历史记录页面。

图 5-11 评价界面

5.2.4 司机抢单模块的实现与测试

司机抢单模块是本打车系统司机端的最主要功能,司机首先需要查看现有的打车需求,才能进行抢单操作。与历史信息查看的实现过程相似,需求列表的查看是在 中通过调用 实现文件布局,在 ListAdapter 与 HashMap 和 ArrayList 配合来实现的,打车需求界面如图 5-12 所示。

33

基于Android的打车系统的设计与实现

图 5-12 打车需求界面

当司机满意某条需求要进行抢单,点击对应的抢单按钮时,会跳出一个对话框,如图5-13

所示,要求用户再次确认,尽量避免查看需求列表时的误操作。

图 5-13 抢单确认界面

实现代码如下。

kListener btnEvaluateClick = new kListener() {

public void onClick(View v) {

r alertDialog = new r(this);

le("确认抢单?") //设置标题

.setPositiveButton("是",

new kListener() {

public void onClick(DialogInterface dialog, int which) {

//单击{"是",确认抢单

}

34

基于Android的打车系统的设计与实现

})

.setNeutralButton("否",

new kListener() {

public void onClick(DialogInterface dialog, int which) {

//单击"否",返回需求列表

}

}) .create();

(); //显示对话框

}

};

如果司机抢单成功,系统会跳出如图 5-14 所示的对话框通知用户,并提醒其与乘客取得联系。点击联系乘客按钮,拨号与乘客取得联系。

图 5-14 抢单成功界面

5.3 本章小结

本章根据上一章节对本系统的详细设计,首先对打车系统 Web 客服端进行了实现,然后从注册登录模块、乘客打车模块、历史记录查询与设计模块、司机抢单模块着手,实现了Android

客户端的各种功能需求,并对系统进行了测试。

35

基于Android的打车系统的设计与实现

第六章 总结与展望

6.1 总结

本文针对传统打车方式存在的既浪费时间,燃油费消耗又大的弊端,提出了基于Android

平台的打车系统设计与实现,将打车过程中的参与者乘客、司机和客服人员紧密地联系在同一个系统中,实现了打车过程的网络化,在一定程度上有效地解决了生活中常遇到的打车难问题。

本文的主要工作如下:

(1) 介绍了目前网络化发展的状况并对目前常用的传统打车方式进行了调查分析,系统地总结了国内外打车软件的发展状况,为打车系统的设计实现提供了方向;

(2)

学习研究 Android 操作系统平台的相关知识,搭建系统开发环境,熟悉系统开发工具,熟练 Java 语言编程的理论与技巧,掌握 Android 移动平台开发的要点;

(3) 在搭建的开发环境中设计实现了打车系统,并对该系统进行了测试。与其他打车软件相比,本系统创新地加入了客服端的设计实现,这样本系统的用户就不仅仅局限在拥有Android 操作系统平台的移动终端用户,其他用户也可以通过客服端使用本系统实现打车过程。

6.2 展望

基于 Android 的打车系统的基本结构虽然已经开发完成,但由于时间及设备条件等因素的制约,系统但仍然有一些问题有待完善:

(1) 目前系统所使用的数据都是作者录用的测试数据,数据库建设并不全面,在数据的真实性和完整性方面都存在一定的问题;

(2) 虽然系统实现了整个打车过程,但还可以衍生出更多的功能为打车过程服务,例如,可以在乘客端加入语音识别功能帮助录入打车需求信息,在司机端加入 Google 地图的使用,帮助司机导航等。此外,本系统的用户界面还可以更加的美观;

(3) 虽然当前打车软件市场的发展面临许多挑战,但是打车软件的出现为人们出行提供了方便这一点是毋庸置疑的。系统的设计实现应该更加规范,对系统加强管理,逐步调整,使其能更好地适应市场需求。

36

基于Android的打车系统的设计与实现

[

参考文献]

[1] 第 33 次中国互联网络发展状况统计报告[EB/OL]. /hlwfzyj/ hlwxzbg/

hlwtjbg/201401/t20140116_, 2014-01-16.

[2] 工业和信息化部发布 2013 年中国工业通信业运行报告[EB/OL]. /

n11293472/n11293832/n11293907/n11368223/, 2013-12-30.

[3] 沈仲亮. 打车难:难在哪如何办[N]. 中国旅游报, 2011-12-21 (009) .

[4] 曹小林. 打车 APP 的机遇和风险[J]. 互联网周刊, 2013,(9) : 48-49.

[5] 刘晓云. 指尖上的出租车[J]. V-MARKETING 成功营销, 2013, (4) : 60-62

[6] 蔺天子. 打车 APP 大比拼[J]. 中国汽车市场, 2013, (18) : 26-27.

[7] 张珍珍. 打车难缘由解析[J]. 今日中国论坛, 2012, (6) : 36-38.

[8] 吴亚峰, 苏亚光. Android 应用案例开发大全[M]. 北京: 人民邮电出版社, 2011:1-2.

[9] Reto Meier. Professional Android Application Development [M]. Indiana: WiIcy Publishing,

Inc.2009.

[10] 姚昱旻, 刘卫国. Android 的架构与应用开发研究[J]. 计算机系统应用. 2008, (11):

110-112.

[11] 郭宏志. Android 应用开发详解[M]. 北京: 电子工业出版社, 2011.

[12] 赵亮, 张维. 基于 Android 技术的界面设计与研究[J]. 电脑知识与技术, 2009, 5(29):

8183-8185.

[13] 马越. Android 的架构与应用[D]. 北京: 中国地质大学, 2008.

[14] Dave Smith, Jeff Friesen. Android Recipes: A Problem-solution Approach [M]. America:

Apress, 2012.

[15] 曾健平, 邵艳洁. Android 系统架构及应用程序开发研究[J]. 微计算机信息, 2011, 27(9):

1-3.

[16] 黄宏程, 胡敏, 陈如松. Android 移动应用设计与开发[M]. 北京: 人民邮电出版社,

2012. 29-30.

[17] 张仕成. 基于 Google Android 平台的应用程序开发与研究[J]. 电脑知识与技术, 2009,

5(28): 7959-7962.

[18] 公磊, 周聪. 基于 Android 的移动终端应用程序开发与研究[J]. 计算机与现代化. 2008,

(8).

[19] 孟岩. Android 组件模型评析(上)[J]. 程序员, 2008, (01): 49-51.

[20] 段琳. 深入剖析 Android Activity[J]. 中国新技术新产品, 2011, 16: 33-24.

[21] Android 生命周期[EB/OL]. /feisky/archive/2010/01/01/1637427.

html, 2010-01-01.

[22] Android 开发之 Broadcast Receiver 组件[EB/OL]. /service

37

基于Android的打车系统的设计与实现

-, 2012-08-08.

[23] 刘云. Android 四大组件之 Content Provider [EB/OL]. /kf/201308/

238500. html, 2013-08-23.

[24] 冯涛. 动态网站开发教程[M]. 北京: 清华大学出版社, 2011.

[25] 服务器控件分类简介[EB/OL]. /jinianjun/archive/2012/

01/03/, 2012-01-03.

[26] 内置对象的用法与区别[EB/OL]. /wmw1989/archive/

2008/12/14/, 2008-12-14.

[27] MySQL[EB/OL]. /link?url=znp8jrMOiEKgo5_ U2RSi4ov JNLmHfF

K- YVITdKpjOeUco2eETF-E4RkY5PUzAjdP.

[28] 杨少健. 基于 Android 的 LBS 移动订餐系统的设计与实现[D]. 广东: 暨南大学, 2012.

[29] 翟大昆, 陈春茶. Android 项目开发详解[M]. 北京: 机械工业出版社, 2012. 6.

[30] W. Frank Ableson, Charlie Collins, Robi Sen. Unlocking Android[M]. America: Manning

Publications, 2009.

[31] 吴亚峰, 于复兴. Android 应用开发完全自学手册——核心技术、传感器、2D/3D、多

媒体与典型案例[M]. 北京:人民邮电出版社, 2012. 3.

[32] 杜铭, 范辉. 基于 Android 的点餐系统的研究与实现[J]. 无线互联科技, 2012, (01):

84-86.

[33] 李佐彬. Android 开发入门与实战体验[M]. 北京: 机械工业出版社, 2011: 5-6.

[34] 孙铁鑫. 浅谈 B/S 和 C/S 结构的对比[J]. 今日科苑, 2007, (06): 42.

[35] 郑逦. 基于 Android 平台的无线点菜系统的设计与实现[D]. 济南: 山东大学, 2012.

[36] 孙浏毅. 零基础学 SQL[M]. 北京: 机械工业出版社, 2010.

38

基于Android的打车系统的设计与实现

致 谢

值此论文完成之际,特别感谢我的导师李光顺副教授,他不仅为我创造了优越的学习环境,而且为我指明了以后的发展方向。他严谨求实的治学态度、锐意创新的科研精神给我留下了深刻的印象,他深厚的学术功底、渊博的知识、开阔的视野和敏锐的思维令我受益匪浅。

感谢所有教过我的老师,你们的悉心教导是我完成这篇论文的基础。感谢夏小娜老师在思想和生活上给我无微不至的关怀。

感谢与我一路走来的同学们在学习和生活中给予我的关心和帮助。

39

2024年1月11日发(作者:不语柳)

基于Android的打车系统的设计与实现

摘 要

随着 3G 网络时代的到来,移动通信用户数量迅速增加,各种移动通信工具成为人们生活中的必需品,将无线通信技术运用到日常生活中是大势所趋。手机的广泛使用,互联网的综合扩展,信息的高度整合与快速传播,已经彻底改变了传统的社交、通信、娱乐和信息获取的方式,进入了一个全新的媒体时代。Android 操作系统以其完整、可靠、开放等优点,在移动通信工具的操作系统平台中脱颖而出,占据了大量的市场份额。

为了解决目前的打车难问题,本文针对人们的日常打车需求,设计实现了基于 Android的打车系统,将打车过程网络化。本系统把乘客、司机、客服紧密的联系在一起,打破了以往乘客路边等车,司机开车乱逛的传统打车方式。乘客通过打车系统的乘客端发布打车需求信息,或者致电客服,由打车系统 Web 端的客户服务人员代其发布打车需求。司机通过本打车系统的司机端获取打车需求信息,然后根据自己所处的位置选择抢单,抢单成功后与乘客取得联系,实现打车过程。

本论文的研究内容包括六部分。第一部分简要介绍了系统的研究背景、国内外研究现状,阐述了系统研究的目的与意义,并对本文的主要内容进行了概括。第二部分介绍了本系统的开发平台,主要针对开发过程中用到的各个相关工具,如:Android、、MySQL 等进行简单的说明。第三部分对基于 Android 的打车系统进行了需求分析,并介绍了所用到的关键技术。第四部分提出了基于 Android 的打车系统的设计方案,首先明确了设计目标,在此基础上,对

Android 客户端和 Web 客服端进行了设计,并详细地设计了Android 客户端的每一个功能模块,然后介绍了系统数据库的设计。第五部分阐明了本打车系统的实现过程,包括数据库类的实现、Web 客服端的实现以及 Android 客户端各个功能模块的实现,并对基于 Android 操作系统的打车系统的各个功能模块进行了模拟测试,保证系统可以稳定运行。第六部分对全文进行了归纳总结,并展望了未来打车系统的发展方向。

关键词: Android;;MySQL;打车

I

基于Android的打车系统的设计与实现

Abstract

With the advent of 3G network era, the number of mobile users increased rapidly, and themobile

communication tools became necessary in people's life. It is a general trend that thewireless

communication technologies are used in our daily life. The widespread use of mobilephone, the

comprehensive extension of the Internet and the high integration and rapidtransmission of

information have thoroughly changed people’s traditional manner of socialinteraction,

communication, entertainment and information obtainment. The public has entered anew media era.

The Android operating system has the advantages of complete system, reliableperformance and open

source, which make it stand out in the operating system platform ofmobile communication tools and

occupy a large amount of market share.

In order to meet people’s need of getting a taxi when they go out; this paper designed

andimplemented a system based on the Android operating system, which made people could get

ataxi through the network. In this system, the driver, the passenger and the customer service staffare

connected closely, which breaks the traditional way of getting a taxi in the past that thepassenger wait

for a taxi on the road side and the driver drive around aimlessly. A passengerreleases his demand

information through the passenger terminal based on the Android operatingsystem or he could call

the customer service staff that will help him to input his demand ofgetting a taxi into the system. A

taxi driver gets the information through the driver terminal basedon the Android operating system

and selects the information according to his location to get thatorder. If the driver gets the order

successfully he could connect the passenger to implement theprocess of taking a taxi.

The research content of this paper includes six chapters. The chapter one briefly introducedthe

research background, research at home and abroad, the research target and significance, andthe main

contents of this paper were also preferred. In chapter two, the system developmentplatform and the

main tools used in the system, such as Android, and MySQL wereintroduced. In chapter

three, the requirement of the system was analyzed, and the keytechnologies which will be used were

also introduced. In chapter four, the design of the systemwas proposed. Firstly, the goals of the

design were cleared. Secondly, the terminal with Androidoperating system and the terminal of Web

service were designed based on the target, and thedesign of each function module was preferred in

details. Thirdly, the database of the system wasprojected. In chapter five, the system was

implemented, including the database, the terminal ofWeb service and each module in the terminal of

Android operating system. At the same time, thesystem was verified that it could run stably. In

chapter six, the paper was summarized and thefuture development direction of the system was

presented.

II

基于Android的打车系统的设计与实现

Keywords: Android; ; MySQL; Get a Taxi

III

基于Android的打车系统的设计与实现

目 录

第一章 绪论 ..........................................................................................................................................

1

1.1 研究背景

........................................................................................................................................

1

1.2 国内外研究现状

...........................................................................................................................

1

1.3 研究目的与意义

...........................................................................................................................

2

1.4 论文的主要内容和章节安排

.....................................................................................................

3

第二章 开发平台介绍 .....................................................................................................................

4

2.1 Android 概述

.................................................................................................................................

4

2.1.1 Android 的发展

......................................................................................................................

4

2.1.2 Android 体系结构

.................................................................................................................

4

2.1.3 Android 应用程序构成

.........................................................................................................

6

2.2 简介

..............................................................................................................................

9

2.3 My SQL 简介

..............................................................................................................................

11

2.4 本章小结

......................................................................................................................................

11

第三章 系统方案研究 ...................................................................................................................

12

3.1 需求分析

......................................................................................................................................

12

3.1.1 功能需求

...............................................................................................................................

12

3.1.2 性能需求

...............................................................................................................................

13

3.2 关键技术介绍

.............................................................................................................................

13

3.2.1 用户界面构建

......................................................................................................................

14

3.2.2 Activity 间的跳转

...............................................................................................................

14

3.2.3 Android 客户端与后台的通信

..........................................................................................

14

3.3 本章小结

......................................................................................................................................

15

第四章 系统设计 .............................................................................................................................

16

4.1 系统总体设计

.............................................................................................................................

16

4.1.1 Android 客户端架构

............................................................................................................

16

4.1.2 Web 端架构

...........................................................................................................................

17

4.2 系统概要设计

.............................................................................................................................

17

4.3 Android 客户端各功能模块设计

............................................................................................

19

4.3.1 注册登录模块设计

.............................................................................................................

19

4.3.2 乘客打车模块设计

.............................................................................................................

20

4.3.3 历史记录查询与评价模块设计

........................................................................................

21

4.3.4 司机抢单模块的设计

.........................................................................................................

22

4.4 数据库设计

..................................................................................................................................

22

IV

基于Android的打车系统的设计与实现

4.5 本章小结

......................................................................................................................................

24

第五章 系统实现与测试 ..............................................................................................................

25

5.1 Web 客服端的实现与测试

.......................................................................................................

25

5.2 Android 客户端各功能模块的实现与测试

...........................................................................

27

5.2.1 注册登录模块的实现与测试

............................................................................................

27

5.2.2 乘客打车模块的实现与测试

............................................................................................

30

5.2.3 历史记录查询与评价模块的实现与测试

......................................................................

31

5.2.4 司机抢单模块的实现与测试

............................................................................................

33

5.3 本章小结

......................................................................................................................................

35

第六章 总结与展望 ........................................................................................................................

36

6.1 总结

...............................................................................................................................................

36

6.2 展望

...............................................................................................................................................

36

[参考文献] ...........................................................................................................................................

37

致谢 ........................................................................................................................................................

39

V

基于Android的打车系统的设计与实现

第一章 绪论

1.1 研究背景

网络技术与 3G 移动通信技术的发展,使得我国的信息化进程越来越快。网络通信的速度和质量不断提高,促使移动互联网业务逐渐繁荣。2014 年 1 月 16 日,中国互联网络信息中心(CNNIC)在北京发布的第 33 次《中国互联网络发展状况统计报告》中指出,截止到2013 年 12

月底,我国网络用户的数量达到了 6.18 亿,互联网的使用比率为 45.8%;手机网络用户达 5 亿,比上一年增长 19.1%,依旧稳居上网终端第一位的宝座。使用手机上网的用户在网络用户中所占的比例由上一年底的 74.5%上升至 81.0%,比使用其他设备上网的用户比例高出许多,手机用户仍然是我国网民最主要的组成部分[1]。在手机网络用户不断增长的同时也推动了各种手机应用软件的发展,成为了我国网络发展的一大特色。工信部发布的 2013 年中国工业通信业运行状况报告[2]也充分地显示了在网络技术突飞猛进发展的带动下 3G 网络的覆盖面也越来越广这一特点。

移动终端的发展促进了人们对操作系统的不断探索。目前,市场上的操作系统多种多样,像 Symbian、Android、iOS、BlackBerry、Windows 等都拥有自己的用户群,但是在众多的操作系统中 Android 凭借其开源、免费、稳定性好等优点稳居移动终端操作系统平台的主导地位,例如:三星、HTC、摩托罗拉、华为、中兴等众多国内外知名手机品牌都在使用 Android 操作系统。

各种手机应用已经深入到了人们生活中的各个方面,它们凭借其方便快捷的优势,深受众多用户的喜爱,在为人们的生活带来翻天覆地的变化的同时,也为企业带来了更多的经济效益。

“衣食住行”是人们生存最基本的主流需求,紧跟数字化浪潮,实现“衣食住行”的

信息化、网络化,已经成为时代发展的必经之路。就“行”这一项而言,出门打车是大多数人的选择,很多人认为打车是一种非常便捷的出行方式,但是现如今在许多城市都面临打车难这一现实问题[3]。如何利用网络技术来解决这一难题,从而更好地满足人们的日常需求,提高生活质量,是迈向信息化的重要一步[4]。

1.2 国内外研究现状

打车软件在国外早有试水。2011 年 11 月,出租车移动预订应用 Hailo 首先在英国伦敦得到推广,它拥有分别基于 Android 和 iOS 操作系统的两个版本,用户可以通过这个应用预订出租车,它还提供了现金支付和信用卡支付两种付款方式。Hailo 是由 6 个人共同创建的,其中三位是互联网企业家,分别是首席执行官 Jay Bregman、首席运营官 Caspar Wooley、主席 Ron

Zeghibe,另外三位是伦敦的出租车司机,他们是 Russell Hall、Gary Jackson 和Terry Runham。在这之前他们已经创办过一家以出租车为主题的公司。

1

基于Android的打车系统的设计与实现

打车应用 GetTaxi 推出了基于 Android、BlackBerry、iOS 和 Symbian 等多种操作系统的不同版本。乘客只需要通过 GetTaxi 发送自己的打车需求,GetTaxi 便会安排车到乘客身边。乘客在等车的时候可以随时查看电子地图了解车与自己的距离、大概多长时间能到以及司机的相关信息等。该应用同样支持使用信用卡付款,另外用户还可以累计积分,到达一定积分后可以享受相应的优惠。这款打车应用已经于 2011 年在英国、以色列正式推广,并且在不断地向德国、意大利、法国、西班牙和俄罗斯等国家延伸。

刚开始时美国的打车应用 Uber 只向用户提供私家车,通常是豪华轿车,因此收费较贵。从

2012 年 9 月份开始它才将一般的黄色出租车加入到提供服务的行列之中。Uber 的首席执行官 Kalanick 曾经表示,这一改变是 Uber 面向普通群众的第一步。

从 2011 年开始,日本也推出了一种智能手机打车服务,安装了这种打车软件的用户可以自由设定乘车点,对于有语言障碍的残疾人和外国乘客来说十分方便,相应的它会收取一些额外的费用。

国外的叫车服务不仅仅局限于出租车,在一定程度上充分利用了租车公司的车辆和一些私家车,例如上文提到的 Uber。另外,这些打车服务中很大一部分都是拼车服务。目前国内的打车软件还处在发展阶段,在北京、上海、广州、深圳等大城市,有超过一半的出租车都利用各种打车软件提供服务,这种服务在某种程度上的确对目前的打车难问题起到了一定的缓解作用。

2012 年 3 月开始上线测试的打车软件摇摇招车是我国出现较早的打车软件,它是由北京聚核众信信息技术有限公司开发的,同样有 Android 和 iOS 两个系统版本。

2012 年 9 月份,程维创办的小桔科技公司发布了打车应用软件——嘀嘀打车[5],在经历了一段艰难的创业初期后,2014 年 1 月嘀嘀打车加入了微信叫车和支付功能,目前在全国司机用户的数量已经达到 35 万。

由易达出行科技有限公司开发的手机应用软件易达打车将手机定位和云服务结合起来实现了互联网和移动终端的开发,是一个高度集成的系统。

“快的打车”是杭州快智科技有限公司自 2012 年创办以来自主研发的第一个手机应

用,包括 iOS 和 Android 两种操作系统版本[6]。

越来越多的国内外企业涉足智能化打车领域,它们的发展充分迎合了人们的需求,展现了打车软件发展的无限前景。

1.3 研究目的与意义

当代中国许多一线城市每天都有数以万计的出租车在提供出车服务,每年的营业额有上亿万元。但是人们出行通常还是只能选择在路边等待或者是提前一段时间预订才能坐上出租车。很容易解释造成这一尴尬局面的原因,大城市的交通非常繁忙,想打车的乘客恰好遇上一辆正在运营的空车的概率很低,打车完全靠碰运气。对出租车司机而言,他们要想拉到乘客,就得开着车像无头苍蝇一样满大街乱转,希望能恰好遇到想打车的顾客,这

2

基于Android的打车系统的设计与实现

样既浪费时间,又要消耗更多的燃料费。另外,部分司机的拒载行为也为打车出行增加了难度[7]。

我们要开发的打车系统,将乘客和司机通过这个系统的各个服务端连接到一起,使司机及时获取乘客的打车需求,能给乘客提供更便捷的服务,对乘客来说,这种打车方式也更加方便。它还能有效地减少拒载情况的发生,提高打车成功率。

1.4 论文的主要内容和章节安排

本文针对目前各大城市面临的打车难问题,从打车各方的需求着手,设计并实现了一款打车应用软件,研究的主要内容如下。

系统实现过程:乘客可以通过本系统乘客端直接发送打车需求,或者是给服务平台打电话,告知其所在位置及目的地等相关信息。服务平台的客服人员在收到打车电话后,在系统中发布这条打车需求。司机通过本系统的司机端查看到这条需求消息,如果司机认为可以接这单生意则进行抢单。系统对司机发送的抢单消息进行管理,并给最先抢到的司机发送确认消息。抢到单的司机收到确认消息后便可以与乘客取得联系,接着便可以提供出车服务。

打车过程完成后,乘客和司机都可以凭借其 Android 客户端对本次打车过程进行评价。

对于差评次数超过一定限制的系统用户,系统可以将其拉入黑名单,不再对其提供服务,当然也可以通过付费等形式由客服端再次开通。

本文的章节安排如下。

第一章,绪论,简要介绍了系统的研究背景、国内外研究现状,阐述了研究的目的和意义,并对本文的主要内容进行了概括,罗列了本文的章节安排。

第二章,开发平台介绍,主要针对开发过程中用到的各个相关软件,如:Android、、MySQL 等进行简单的介绍。

第三章,对基于 Android 的打车系统进行了需求分析并介绍了与系统开发相关的关键技术。

第四章,提出了基于 Android 的打车系统的设计方案,首先明确了设计目标,在此基础上,对 Android 系统客户端和 Web 服务端进行了设计,并对 Android 客户端的每一个功能模块进行详细的设计,此外,还介绍了数据库的设计。

第五章,阐明了本打车系统的实现过程,包括数据库类的实现、Web 客服端的实现以及Android 客户端各个功能模块的实现。在系统实现的同时,对基于 Android 的打车系统的各个功能模块进行了测试。

第六章,总结与展望,对全文的主要工作进行总结,并展望了未来打车系统的发展方向。

3

基于Android的打车系统的设计与实现

第二章 开发平台介绍

2.1 Android 概述

2.1.1 Android 的发展

Android 最初是由 Andy Rubin 创造的,其最初的目标是把 Android 打造成一个可以对所有软件设计人员开放的移动终端平台[8]。2005 年 Google 公司将其收购,并于 2007 年 11月份与众多硬件制造商、软件开发商及电信营运商共同建立了手机开放联盟(Open HandsetAlliance,OHA),同时发布了名为 Android 的智能手机平台[9]。自此,Android 开始走进了人们的视线。Android 的发布改变了以往智能手机的产业格局,打破了 Symbian、WindowsMobile 在操作系统市场的垄断地位。另外,Android 提供的统一应用开发方法为开发者带来了极大的方便,其平台化的特点也极大地丰富了手机应用软件的功能。

2.1.2 Android 体系结构

Android 平台是基于 Linux2.6 版本内核进行改造的移动操作系统,它与其他的操作系统一样也采用了软件分层的架构,分为 Linux 内核、系统运行库、应用程序框架和应用程序共 4

层[10][11]。Android 采用软件层叠的思想来构建各个层次,使得分开的各层既各自独立又相互关联。所有层次共同构成 Android 平台,每层都有各自的分工,互不干扰;底层发生改变时对它的上一层不会产生影响,极好地体现了层次之间的低耦合性[12],图 2-1 对这种分层架构进行了展示。

主屏

浏览器

应用程序层

联系人

应用程序框架

电话

...

活动管理器 内容管理器 位置管理器 通知管理器

包管理器 资源管理器 电话管理器 视图系统 窗口管理器

FreeType

应用程序框架

libc

LibWebCore

SGL

外观处理器

Linux内核

Android运行环境

核心库

Dalvik虚拟机

媒体框架 OpenGL|ES

QLite

SSL

音频驱动

闪存驱动

摄像头驱动

电源驱动

显示驱动

WiFi驱动

Bindre(IPC)驱动

键盘驱动

图 2-1 Android 系统架构图

(1) 应用程序层

4

基于Android的打车系统的设计与实现

应用程序层是系统最顶层,包含许多核心的应用程序,诸如浏览器、联系人、电话、日历等[13],还包括一些用户自己下载安装的应用。这些应用程序是由各公司基于 AndroidSDK 使用

Java 语言编写的,允许开发者自由获取和修改源代码或者开发新的应用程序,也就是说,这是一种具有开源性质的手机终端解决方案。

(2) 应用程序框架

应用程序框架为应用程序层提供支撑,是用来构建应用程序的一组构件[14]。应用程序框架面向所有的应用程序提供大量应用程序接口 API,对应用程序组件进行了简化和复用,使得开发者能够直接利用系统组件来快速地开发应用程序,也可以通过继承来灵活地加以扩展。本层包含的组件如下[15]。

活动管理器(Activity Manager):对所有活动的生命周期及 Activity 之间切换的共享活动栈进行管理。

内容提供器(Content Providers):对数据进行封装使应用程序之间能够相互存取和共享数据。

位置管理器(Location Manager):用来获取设备的物理位置,提供位置服务。

通知管理器(Notification Manager):在不对用户的当前活动造成影响的前提下,在状态栏中显示提示信息,例如短信提示等。

包管理器(Package Manager):对 Android 系统里面的程序包进行管理。

资源管理器(Resource Manager):管理各种与应用程序相关的非代码形式的资源,如布局文件、资源图片等。

电话管理器(Telephony Manager):负责管理移动设备的电话状态,包括接听和拨打电话等。

视图系统(View System):本组件对用户界面元素例如:文本框、按钮、列表和网格等进行管理。

窗口管理器(Window Manager):将屏幕上的元素组织到窗口中,并管理所有的窗口程序。

(3) 系统运行库

本层分成系统运行库和 Android 运行环境两大部分[16]。Android 提供了一系列的库供系统中的组件使用,开发者可以通过应用程序接口来访问这些库,这些系统运行库包含:支持点阵字、向量字等字体开发的 FreeType;源自 BSD 系统的标准 C 系统库 libc,它针对嵌入式

Linux 设备进行了优化;基于 WebKit,为系统提供高速网页浏览器引擎的核心库LibWebCore;基于 PacketVideo 公司的 OpenCore 的媒体框架,不仅能够处理静态图片还支持MPEG-4、H.264 等多种格式的影音文件的录制与播放;基于 OpenGL|ES 1.0 API 的OpenGL 的 3D 绘图开发库;提供底层 2D 图形引擎的 SGL 库;能够为所有应用提供服务的轻量型关系数据库

SQLite;基于安全套接层网络通信机制的 SSL;负责管理显示子系统的访问方式并将各种应用的 2D 和 3D 图形层无缝地组合在一起的外观管理器。

5

基于Android的打车系统的设计与实现

Android 运行环境由核心库和 Dalvik 虚拟机组成,这个核心库提供了 java 语言编程核心库的大部分功能,Dalvik 虚拟机是一种基于寄存器的 Java 虚拟机,它在执行 Android 应用程序时,先通过转换工具将编译后的 Java 文件转换成 dex 格式的文件,再由 Dalvik 虚拟机来执行。每个应用程序都在自己的进程中运行,都拥有一个独立的 Dalvik 虚拟机实例。

(4) Linux 内核

Android 平台采用 Linux2.6 版本的内核来为系统提供核心服务,如内存管理、安全性、网络协议栈、进程管理还有驱动模型等都依赖于 Linux 内核,同时它还扮演了介于硬件层和软件栈之间的抽象层的角色[17]。

2.1.3 Android 应用程序构成

对于一个 Android 应用程序来说,主要包括四种核心组件,分别为:Activity、Service、Broadcast Receiver 和 Content Provider[18][19]。它们之间的关系如图 2-2 所示:

Intent进

行切换

Activity

提供的接

Service

使用Intent

Receiver

应外部事件

Activity

外部事件

A i i y

ct v t

用Content Provider将数据

保存到文件和数据库中

(1) Activity

Activity 是为用户呈现应用程序可视化界面的组件,每一个用户界面 GUI 都是对Activity

类的扩展,Activity 用视图构成图形用户界面来显示信息并对用户操作做出响应,

一个 Activity 就相当于一个窗体。一个应用程序可以包含一个或多个 Activity,在对 Activity

进行开发时需要先在 AndroidMainfest 文件中对其进行声明。Android 系统对 Activity 的管理是通过任务栈来实现的,启动一个 Activity 时,系统将其压入到任务堆栈中,当结束一个Activity 时,将其从任务堆栈中弹出 [20]。

Activity 生命周期指的是 Activity 从创建到关闭的整个过程,在这一过程中,Activity一般经历 4 种状态:Active/Running、Paused、Stopped、Killed[21]。

A

n

dr

iod

M

i

afn

e

st

.

xlm

图 2-2 Android 构成及工作流程

6

基于Android的打车系统的设计与实现

Active/Running 即活跃状态,此时的 Activity 处于任务堆栈的最顶端,它的用户界面位于屏幕的最前端,用户可以与其进行交互操作。

Paused 即暂停状态,此时仍然可以在屏幕上看到这个 Activity,但是用户的焦点已经被另一个活跃状态的 Activity 所抢占,用户不能对其进行操作。这种状态下的 Activity 依旧是存活的,维持着原来的状态,但是当系统内存资源匮乏时,系统可能会选择结束暂停状态的

Activity。

Stopped 即结束状态,处于这种状态的 Activity 已经被其他的 Activity 完全遮盖,其用户界面在屏幕上全部不可见。系统会在内存中保存这个 Activity,便于当它可见时能够出现在用户面前,及时完成状态切换。这种状态的 Activity 也会由于内存不足的原因而被系统杀死回收。

Killed 即销毁或未启动状态,这种状态的 Activity 已经移出了任务堆栈。

这四种状态之间的转换关系如图 2-3 所示。

Active/Running

当前

Activity

完全被

遮住

当前

Activity

部分被

遮住

Paused

Stopped

Killed

图 2-3 Activity 4 种状态之间的转换图

Activity 的生命周期可以用 7 种回调方法表示,如图 2-4 所示。一般在第一次创建Activity

时,Android 会自动调用 onCreat()方法,来创建后台线程,对全局进行初始化。然后调用 onStart()和 onResume()方法使这个 Activity 处于最前端,准备为用户提供交互服务。

调用 onPause()方法使得 Activity 处于暂停状态,onStop()方法使 Activity 转变为隐藏状态,当一个已经暂停的 Activity 重新启动时会调用 onRestart()方法,Activity 退出时会调用onDestory()方法终止 Activity 的进程。当系统内存不足时,Android 自动实行进程回收,不受用户和开发者的控制。

7

用户浏览回到这个Activity

基于Android的打车系统的设计与实现

Activity开始

onCreate()

onStart()

onRestart()

onResume

()

进程被杀死

Activity运行

Activity移动到前台

Activity移动到后台

用户浏览回到这个Activity

onPause()

Activity不再显示

onStop()

onDestory()

Activity结束

Activity移动到前台

图 2-4 Activity 生命周期过程及历经的状态改变

(2) Service

Service 是一种没有图形化界面,不能够与用户进行交互,但是能在后台长期运行的组件,因此有应用程序的隐形工作者之称。它负责完成 Android 中一些耗时较长的操作和大部分数据处理的工作,例如:网络的连接,长时间的输入或输出操作等。

与 Activity 比较而言 Service 的生命周期相对较简单,它只继承了 onCreat()、onStart()和onDestroy()方法,初次启动 Service 要调用 onCreat()和 onStart()方法,结束 Service 要执行onDestroy()方法。

Service 有本地服务和远程服务两种类型。本地服务是在同一个进程中运行,用来实现后台服务的功能;远程服务是在单独的进程中运行,用于实现进程之间的通信。进程内的Service 调用如图 2-5 所示,而进程间的 Service 调用则需要使用 AIDL(Android 接口定义语言)定义进程间的通信接口,如图 2-6 所示。

Service

Service

My Service

My APP

My Service

My APP

My APP

图 2-5 进程内 Service 调用

8

图 2-6 进程间 Service 调用

(3) Broadcast Receiver

基于Android的打车系统的设计与实现

Android 系统中的广播形式多种多样,有像电池电量过低提示这种来自系统代码的广播,也有像完成某些下载任务后提示的来自应用的广播。

Broadcast Receiver 是负责接收和处理广播的组件,广播接收器的数量由应用程序任意设定,可以通过运行某个 Activity 来响应其接收的消息或者是利用通知管理器给用户以警示[22]。

(4) Content Provider

Content Provider 支持多个应用程序之间相互共享和访问数据,这些数据的存储位置任意,可以存放在 Android 文件系统中,也可以存放在 SQLite 数据库中,它是不同应用之间共享数据的唯一方法,如图 2-7 所示。Content Provider 实现了组件代码与原始数据格式的分离,能有效地防止数据格式变化时对原始数据的破坏,为直接访问原始数据提供了方便。

开发者可以自由获取 Android 系统在 android. provider 包中提供的 Content Provider,也可以创建属于自己的 Content Provider[23]。

Content Provider

/Write

D

ate

F

ile、DB、Internet

图 2-7 Content Provider 示意图

组成 Android 应用架构的四大组件之间是相互独立的,它们之间相互调用共同组成了一个完整 Android 应用程序,由 Intent 负责协助这些组件实现它们之间的通信。Intent 相当于一个媒介,提供不同组件之间的调用信息,系统通过 Intent 描述的某次操作的动作、类别、组件名称、相关数据等信息找到对应的组件,实现组件的调用。

2.2 简介

是由微软公司在借鉴了 JSP 的诸多优点之后,于 2000 年推出的一种全新的动态页面开发技术[24]。它是建立在. NET 框架平台上的完全面向对象的 Web 程序设计框架,用于创建 Web 应用程序,. NET 框架的层次结构如图 2-8 所示。 是运行在 Web 服务器上的,它为开发内容丰富、动态且有个性化的 Web 网站提供了一种新方法。与此同时, 也包含一些创建 XML Web Service 的必要技术,它还提供了组件用来创建基于Web

的分布式应用程序。

9

基于Android的打车系统的设计与实现

程序设计语言

(C# C++.NET J# „)

应用程序平台

( Windows应用程序 „)

类库

公共语言运行时(CLR)

图 2-8

.NET 框架层次结构

抛弃了解释型脚本语言转而采用编译型程序设计语言,支持多种开发语言,其首选语言为 或者是 C#,与其他动态网站开发技术相比执行效率大大提高。

实现了代码隐藏技术,即网站的显示界面与后台的程序代码分开,这样不仅使得网站的结构更加清晰,而且实现了功能的复用,使得在提高了开发效率的同时也更容易实现系统维护。用 开发的网页的扩展名一般为 aspx。它充分地利用. NET 框架类库为其提供的丰富功能,在服务器端通过编译器编译成中间语言,通过公共语言运行时来运行,因此, 在安全性和可靠性方面有很好的保证。

提供的控件非常丰富,Web 应用功能的实现都是依靠这些控件来完成的。

提供的控件可以分为三大类:HTML 控件、Web 服务器端控件还有用户自定义控件[25]。HTML 控件主要功能是帮助实现 的向下兼容,当需要将网站由静态网页升级为动态网页时就会用到它。Web 服务器端控件的数量繁多是 首选控件,VisualStudio

2008 提供的 Web 服务器端控件就有 80 个之多,根据它们的应用领域不同可以划分为8 个小类,分别为:标准控件类、数据控件类、验证控件类、导航控件类、登录控件类、WebParts 控件类、AJAX 扩展控件类和报表控件类。

提供了许多内置对象,开发时只需要了解对象的功能,然后按照需求直接调用这些对象即可,程序编写更加灵活。 中的 Page、Request、Response、Cookie、Session、Application 和 Server 等[26]内置对象较为常用,表 2.1 介绍了它们的功能。内置对象的访问可以通过 Web 窗体的属性来实现,如 Page 对象就是由 类实现的。

表 2.1 常用内置对象及其功能

对象

Page

Request

Response

Cookie

Session

Application

Server

功能

对 页面相关的内容进行处理

获取客户端及服务器端的相关信息

将 HTTP 响应数据及有关该响应的信息发送到客户端

存储客户和网站相关的信息

为客户的会话存储信息

保存应用程序需要多次访问的信息或 Web 服务的实例

提供一系列与 Web 相关的实用程序

10

基于Android的打车系统的设计与实现

2.3 MySQL 简介

系统开发离不开数据存储,要实现数据存储就不能缺少数据库。数据库是用来存储信息的“仓库”,这里的信息特指需要存储的数据。信息在数据库中的存储并不是凌乱不堪的,数据库借鉴了生活中常用的表格的形式,将数据存放在不同的二维表中,条理清晰,访问起来也更加的灵活。

MySQL 最早是由瑞典 MySQL AB 公司开发的一种关系型数据库管理系统(RDBMS),随后被 SUN 公司收购,现在属于 Oracle 公司。1998 年 1 月关系型数据库 MySQL 的第一个版本问世,它采用的是多线程运行机制,还提供了许多编程语言的接口,如 C、Java、C++、PHP 等。2001 年发布的 MySQL4.0 版本在原来的基础上进行了功能强化并添加了许多新的功能。到现在为止,MySQL 已经发展到了 5.6 版本,无论效率还是功能与以前的版本相比都有了很大的提高。

MySQL 对数据库的管理是通过结构化查询语言,即 SQL 语言实现的,SQL 语言在数据库管理中使用最为普遍[27]。由于 MySQL 的源代码是开放式的,因此开发者可以在取得通用许可证的前提下下载使用 MySQL,并根据自身的需要进行修改。MySQL 凭借其体积小、速度快、成本低、可靠性高和适应性强等特性备受关注。在大多数开发者看来,如果不需要进行事务化处理,MySQL 是不错的选择。MySQL 提供了许多连接数据库的方法,如TCP/IP、ODBC 和

JDBC 等都可以实现,使用起来非常方便。

由于 MySQL 具有操作简单,功能强大,高效可靠等优点,所以本打车系统采用 MySQL作为其后台数据库。

2.4 本章小结

本章介绍了本打车系统的开发平台,对 Android 开发平台进行了详细的介绍,包括Android 的发展、Android 的体系结构以及 Android 应用程序的构成等,并且对 框架及其常用内置对象,还有 MySQL 数据库进行了简单介绍,为后面的系统开发做好充分的准备。

11

基于Android的打车系统的设计与实现

第三章 系统方案研究

3.1 需求分析

随着人们生活水平的不断提高,打车成为了一种非常普遍的出行方式。公共交通的早晚高峰期及其拥挤、环境差、座位短缺等现状让不少人望而却步,停车收费、限行政策的实施等使得上路的私家车的数量减少,这些都促进了打车需求的不断上升。但是,在实际打车的过程中往往会出现一些问题。有些想要打车的人在路边等了半个小时都没发现有一辆空车可以搭乘,或者有时好不容易碰上一辆空车,却被司机以“交接班”、“已经有人预订”等各种借口拒载,被逼无奈的乘客只能继续等待或者选择提前预订。虽然乘客有他们的抱怨,但是出租车司机们也有他们的无奈,司机们为了拉到一个顾客整天开着车大街小巷的转悠,浪费时间不说还得搭上许多不必要的燃料费。以上种种困难使得打车出行方便快捷的优势变得不再明显。

如今,在 3G 手机及移动设备越来越普遍的同时,移动互联网络逐步成熟,移动应用也越来越多元化、生活化。打车系统就是乘客利用移动设备在网络上发布自己的打车需求,出租车司机可以根据查看到的这些需求选择是否接受这单生意,如果成功获得生意就与乘客取得联系,从而提高打车成功率,避免了过多时间和金钱的浪费。

3.1.1 功能需求

打车系统的主要服务对象是移动用户,包含了乘客、客服人员和出租车司机三种不同的用户,根据其角色的不同,他们对系统的需求也不一样。

乘客一般分为两种,一种是拥有 Android 操作系统移动设备的乘客,通过直接安装本打车系统乘客端应用,在其注册、登录以后,可以有选择的打车,在输入本用户的起点、终点、愿加价、愿等待多长时间以后,便可以发送打车请求,用户还可以选择查询该用户的历史打车记录,打车过程结束后乘客可以对本次打车进行评价;另一种是乘客不需要安装本系统的乘客端应用,直接给客服人员打一个电话,告知其相关的打车信息,然后由客服人员帮助其完成打车信息的发布工作,同样地,如果乘客对本次的打车服务有不满意的地方,也可以拨打电话向客服反映。乘客的需求用例图如图 3-1(a)所示。

客服人员首先要注册、登录系统,在接到乘客的电话以后,录入乘客的姓名、电话、起点、终点,发布打车信息。客服人员还可以对整个系统的打车信息进行管理,例如:查看某个乘客的打车记录,查看所有的打车请求并可以对这些请求进行修改、删除等操作等。

客服人员还需要对差评信息进行管理,对于因为差评次数超出系统界定而被加入黑名单的司机或乘客,客服人员可以对其再次开通。客服人员的需求用例图如图 3-1(b)所示。

12

基于Android的打车系统的设计与实现

注册

注册

注册

登录

登录

登录

查看打车请求

发布打车信息

乘客

客服人员

发布打车信息

司机

抢单

联系打车人

评价

查询打车记录

打车信息管理

评价

用户信息管理

(a)乘客需求用例图

(b)客服人员需求用例图

(c)司机需求用例图

图 3-1 打车系统需求用例图

出租车司机应先在 Android 系统的移动设备中下载安装本打车系统专门向司机提供服务的司机端应用,注册登录后,可以查看已发布的所有打车请求,如果有想接受的请求,可以抢先对该条消息进行确认,只有最先确认的司机才能获得这单生意。如果司机抢到这单生意可以通过拨打乘客电话的方式与其取得联系。同样地,如果司机在提供服务的过程中对乘客有什么不满,也可以给乘客差评。出租车司机的需求用例图如图 3-1(c)所示。

3.1.2 性能需求

本打车系统不仅要求实现其基本功能,而且在操作系统、用户界面、网络通信、数据库的选择等性能方面也有许多的要求。

(1) 操作系统:本打车系统是面向大众的,选择的操作系统应具有最大化的用户规模,使系统能被乘客和司机广泛应用,Android 恰好满足这一要求。而且 Android 系统稳定,操作简单,为打车系统能正常运行提供了基本条件。

(2) 用户界面:对于司机和乘客而言,是通过移动设备访问本打车系统的,要求界面结构清晰,操作简单,便于实现交互,给其以良好的体验;对于客服人员来说,界面的设计要系统化,便于对系统进行管理,访问起来方便快捷。

(3) 通信网络:本打车系统是通过移动互联网络实现其通信功能的,要求能快速的访问服务器,高效地实现数据传递。

(4) 数据库选择:本打车系统需要进行大量的数据存储,数据存取操作频繁,对数据库的安全性有一定的要求,多用户同时访问数据时,得到的数据必须准确可靠[28]。经过对比,选择

MySQL 数据库为系统提供数据支持。

13

3.2 关键技术介绍

为了满足系统的各种需求,需要许多关键技术提供支持。

3.2.1 用户界面构建

简洁美观的用户界面更加容易迎合用户的需要, Android 用户界面的实现方式通常有三种:通过 XML 配置文件生成、通过用户自己的界面接口生成和通过代码直接生成[29]。

为遵循系统开发时应尽量使用户界面与程序在逻辑上相互分离的原则,通过 XML 配置文件生成是构建用户界面的最佳选择,下面介绍几种布局方式。

(1) 线性布局

线性布局(LinearLayout)根据属性 Orientation 的值为 Vertical 还是 horizontal,将布局中的元素按垂直方式一行一行的显示或者按水平方式一列一列的显示。布局中元素的显示比例可以通过 layout_weight 属性的值来确定。

(2) 相对布局

相对布局(RelativeLayout)指的是任意一个元素的定位都必须以另一个元素的位置为参照的布局方式,这个用来参照的元素可以是父元素也可以是其他元素。

(3) 绝对布局

绝对布局(AbsoluteLayout)是指各个元素在界面上的位置是由坐标来决定的,Android手机的坐标系是以左上角的点为原点坐标(0,0),向右为 X 轴正方向,向下为 Y 轴正方向。

但是,这种布局方式在垂直切换时,往往会出现问题,而且元素较多时,计算坐标的位置比较麻烦。

(4) 表单布局

表单布局(TableLayout)与 HTML 中的 table 类似,TableLayout 里面是数量不等的TableRow,每个 TabelRow 表示一行,元素的具体定义是在 TableRow 里面完成的。

TableLayout 可以看成是 TableRow 的水平线性布局,因此,可以把它看成是线性布局的一个子类。

3.2.2 Activity 间的跳转

在 Android 系统中实现 Activity 之间的跳转,需要 Intent 对象和 startActivity()方法配合来完成,在主程序中使用 startActivity()方法来调用另一个 Activity,Intent 对象用来描述自己是什么,要执行的任务是什么。运行时,系统会根据 Intent 对象的描述,在

文件中找到已经提前声明且满足此 Intent 要求的 Activity,把它传送给Intent 对象,实现界面跳转。Intent 在这里相当于一个媒体中介,专门提供不同 Activity 之间相互调用的有关信息,实现主 Activity 与被调用的 Activity 之间的解耦[30]。

3.2.3 Android 客户端与后台的通信

本打车系统 Android 客户端与后台的通信主要是实现数据交互,为了实现这一交互过

14

基于Android的打车系统的设计与实现

程,必须保证服务器端的 MySQL 数据库的连接为打开状态且 Android 客户端能够通过网络访问服务器端。

Android 客户端与后台通信的方式有很多种,可以通过 Socket 通信,也可以通过

WebService 通信,还可以通过 Http 通信[31]。Socket 通信方式属于套接字通信方式。Http 通信是基于 HTTP 协议的,该协议可以说是目前网络上使用最频繁也是最为重要的一种协议,许多

java 应用程序都需要通过 HTTP 协议来访问网络资源。有关 Http 通信的包存在于 JDK的 包中,在该包中提供了实现 HTTP 协议访问的基本功能。本打车系统采用 Http通信,通信过程如图 3-2 所示。

声明Base URL常量

通过URL获得HttpGet对象

通过URL获得HttpPost对象

通过HttpGet获得HttpResponse对象

通过HttpPost获得HttpResponse对象

通过URL发送Post请求,返回请求结果

通过HttpPost发送Get请求,返回请求结果

通过HttpPost发送Post请求,返回请求结果

图 3-2 Android 客户端访问后台的 Http 通信过程

3.3 本章小结

本章首先对打车系统的需求进行了说明,并通过用例图的形式对系统的各个用户端进行了剖析。然后介绍了实现这些需求所要用到的一些关键技术,包括:用户界面的构建、不同

Activity 间的跳转和 Android 客户端与后台数据库之间的数据交互。

15

基于Android的打车系统的设计与实现

第四章 系统设计

4.1 系统总体设计

目前市场上存在各种各样的手机,不同厂家的手机的操作系统也存在一定的差异,由于本打车系统是在 Android 操作系统的基础上设计的,所以只能安装在 Android 操作系统上。对于操作系统不是 Android 的乘客来说不能下载使用本系统的乘客端,因此,系统增加了客服端,乘客可以通过电话告知客服人员自己的打车需求,使客服人员通过 Web 浏览器访问打车系统,来帮助乘客实现打车。Web 端具有方便经营系统、进行系统维护和管理的作用。拥有 Android

系统终端的司机和乘客可以直接下载安装他们各自所需要的用户端,然后通过无线网络访问服务器,实现整个打车过程。其中,Android 客户端和 Web 客服端通过同一个服务器来实现对后台数据库服务器的操作,这种设计有效地保证了它们获取数据的一致性,打车系统的总体设计框架如图 4-1 所示。

司机

Android

客户端

乘客

无线网

电话

服务器

客服

Web端

数据库服务器

图 4-1 系统总体框架图

4.1.1 Android 客户端架构

本系统 Android 客户端(包括司机端和乘客端)采用客户端/服务器模式,即 C/S 模式,Android 客户端的体系结构如图 4-2 所示。其中,客户端一方面要与用户进行交互,为其提供良好的用户界面,另一方面还要与服务器端进行数据交互。服务器端为客户端提供数据下载与上传的接口以便于交换数据,服务器端的另一侧连接数据库,可以对数据进行增、删、改、查等操作,客户端与服务器端通过 Http 通信方式交换数据[32]。

16

基于Android的打车系统的设计与实现

操作

服务器代理

用户

显示界面

客户端

监听

服务

器端

操作数据

数据库

服务器

图 4-2 基于 C/S 结构的 Android 客户端架构图

用户通过具有 Android 操作系统的移动设备操作 Android 客户端,用户界面通过 XML布局文件来生成,客户端的各个功能模块与用户的交互采用 Activity 活动类来实现。在服务器启动时监听接口 ServletContextList 就会对客户端进行监听,然后通过服务器代理线程与客户端通信,最后通过服务器操作后台的数据库[33]。

4.1.2 Web 端架构

本系统的 Web 客服端采用浏览器/服务器模式,即 B/S 模式。Web 客服端的体系结构如图 4-3 所示,在 B/S 模式的系统中,用户可以通过 Web 浏览器向网络中的服务器发送请求。B/S

模式的结构分为三个层次:(1)客户端即 Web 浏览器;(2)应用服务层,该层具有良好的可扩展性,Web 服务器就位于这一层;(3)数据层即数据库服务器[34]。为了保持系统各个模块之间相对独立,方便用户在浏览器上进行操作,Web 客服端采用模型-视图-控制器(Model - View –

Controller,即 MVC)设计模式,将数据业务处理与数据的显示分开,当对系统进行再开发时能更容易的实现新的业务或新类型的数据界面的添加,使系统的可扩展性大大增强[35]。

客户层

Web中间层

控制器

Controler

初始化

数据层

请求

数据库

服务器

Web

Web

用户

浏览器

服务器

应答(Model)

(View)

响应

图 4-3 基于 B/S 结构的 Web 端架构图

在 Web 客服端中,由 Web 服务器接收来自客户层 Web 浏览器的请求,并把这个请求传送给控制器;控制器初始化模型,并调用其对应的视图;根据控制器的请求模型会执行相应的业务逻辑功能,利用其构件对象处理数据库的同时把信息传送给视图;经过 Web 服务器解释之后,显示给用户。

4.2 系统概要设计

整个打车系统主要是为用户外出时提供方便的打车方式,全面掌握自己的打车过程,不必在路边苦等浪费时间。整个系统分为三个客户端:乘客端、客服端和司机端。其中,打车人端和司机端通过 Android 客户端实现,客服端通过 Web 端实现。

17

(1) 乘客端

基于Android的打车系统的设计与实现

乘客端主要是向需要打车的乘客提供服务。乘客在客户端下载安装上该系统乘客端软件以后就可以使用,初次使用该软件要先进行注册。登录系统后,乘客可以根据自己的需求使用该系统,比如,查看注册用户本人以往的打车记录,如果有打车需求可以进入打车模块,选择现在打车还是预约打车,然后填入打车所需的必要信息,上传信息后等待回复。

在一次打车交易完成后,乘客可以进入评价模块,对本次所享受的打车服务进行评价。根据乘客端的功能需求,本打车系统乘客端的功能模块图如图 4-4 所示。

开始

(2) 司机端

注册登录模块

打车模块

历史记录查询模块

评价模块

结束

图 4-4 乘客端功能模块图

司机端主要是向出租车司机提供服务,所有拥有 Android 操作系统的司机都可以下载该司机端应用。司机在注册登录后,可以选择查看已经发布的打车需求信息,如果发现合适的打车信息,可以进行抢单,然后等待抢单是否成功的反馈消息,如果抢单成功,可以与乘客取得联系进而提供相应的出车服务。司机还可以查看本人通过该系统实现的打车交易的历史信息,在提供完一次打车服务后,司机同样可以进入司机端的评价模块,对本次交易过程进行评价。根据功能需求概括本打车系统司机端的功能模块图如图 4-5 所示。

抢单模块

历史记录查询模块

评价模块

开始

注册登录模块

结束

图 4-5 司机端功能模块图

18

(3) 客服端

基于Android的打车系统的设计与实现

考虑到乘客不一定都拥有 Android 操作系统,因此本打车系统添加了一个客服端来代替乘客发布打车需求信息。乘客只需要给客服端打一个电话,告知客服人员其打车需求,由客服人员来完成剩下的打车过程,客服端的主要工作流程如图 4-6 所示。客服人员在 Web端注册登录系统后,可以将电话接收到的打车信息录入到本打车系统,然后发布出去供司机查看抢单。另外,客服端能够对系统的打车信息进行管理,例如查看历史打车信息,管理对乘客、司机的评价等,对于已经被加入黑名单的乘客和司机的信息进行管理,使他们能够再次使用本系统。

开始

已经注册?

N

Y

登录

注册

打车模块

用户信息管理

打车信息管理

现在打车

预约已经加入黑

名单?

Y

N

查看打车历史

填写打车信息

上传打车需求

修改用户信息

结束

图 4-6 客服端工作流程图

4.3 Android 客户端各功能模块设计

综合整个打车系统的 Android 客户端,即乘客端和司机端,系统的各功能模块主要有:注册登录模块、乘客打车模块、历史记录查询与评价模块、司机抢单模块。以下对各个模块进行详细设计。

4.3.1 注册登录模块设计

19

基于Android的打车系统的设计与实现

系统运行后,首先进入打车系统客户端登录界面,为了保证系统的安全,使用系统之前必须先进行注册,已经注册的用户输入个人的用户名和密码点击登录按钮进入系统,未经过注册的用户点击注册按钮进入注册页面先注册后再进行登录。在网络畅通的情况下,对用户的用户名和密码进行核对,需要将客户端输入的用户名作为参数访问服务端数据库取出该用户名下的内容,返回 Android 应用程序后根据数据库中的用户名、密码与输入的用户名、密码进行核对,核对无误后方可进入该系统。系统客户端的注册登录流程图如图4-7 所示。

开始

进入注册界面

输入注册信息

N

已经注册?

Y

输入用户名和

密码

N

网络是否正常?

Y

与服务器建立

链接并存储

返回登录界面

N

网络是否正常?

Y

与服务器建立链

接并进行匹配

N

登录信息正确?

Y

进入系统

图 4-7 注册登录模块流程图

结束

4.3.2 乘客打车模块设计

生活中打车一般分为两种情况,现在打车和预约打车。针对现实的打车需求状况,本打车系统也从这两个方面进行设计。用户进入系统后根据自身需求选择进入打车模块相应的界面,然后输入打车所需要的相关信息,通过网络将相应的参数传送给服务端数据库,以便司机能够查看到该打车需求给予响应,此时用户只需要等待回复即可。系统的打车模块的流程图如图 4-8

所示。

20

基于Android的打车系统的设计与实现

开始

现在打车?

N

N

预约打车?

Y

进入预约打车

界面

输入预约打车

信息

Y

进入现在打车

界面

输入现在打车

信息

发布打车需求

发布打车需求

结束

图 4-8 打车模块流程图

4.3.3 历史记录查询与评价模块设计

打车系统保存乘客和司机的历史记录,方便用户对于以往的打车历史进行查询。系统运行后,用户可以选择查看历史记录按钮,进入历史记录查询模块,用户即可浏览历史记录,并可以在该页面选择对某一条记录进行评价或选择再次打车。点击某条历史记录相应的评价按钮进入评价模块,填写评价信息给予评价。评价模块的设计主要是为了方便对打车系统进行管理,在一定程度上对司机和乘客的行为进行约束,尽量减少恶意打车行为的出现。历史记录查询与评价模块的流程图如图 4-9 所示。

21

开始

基于Android的打车系统的设计与实现

开始

N

查询历史记

录?

Y

进入历史记录

界面

进入打车需求界面

浏览打车需求列表

查看历史记录

满意某条订单请求?

Y

N

评价?

Y

进入评价界面

N

抢单

抢单确认

填写评价内容

N

抢单成功?

Y

上传评价信息

联系乘客

结束

结束

图 4-9 历史记录查询与评价模块流程图

图 4-10 司机抢单模块流程图

4.3.4 司机抢单模块的设计

司机抢单模块是本打车系统司机端的主要功能,成功登录本系统的司机可以选择进入本模块查看打车需求列表,列表里包含了所有乘客上传的打车服务请求,包括现在打车请求和预约打车请求。司机可以通过浏览该打车列表,找到想要接受的某条订单请求,点击该条订单请求后面的抢单按钮进行抢单。为了避免司机的误操作带来的影响,系统会提示司机进行再一次的抢单确认。如果司机抢到了本条订单,系统给予提示并让司机选择与乘客取得联系。司机抢单模块的流程图如图 4-10 所示。

4.4 数据库设计

数据服务层是打车系统中的重要组成部分,要求数据库能够实现大量的信息存取。虽然Android 提供的 SQLite 数据库可以直接在 Android 项目中建立小型数据库,对数据进行增、删、改、查等操作,但是,由于手机性能及内部存储容量的限制还有 SQLite 的功能并不是很完善等原因[35],要在 Android 应用程序中大量处理数据是不大合理的。考虑的本打车系统数据需求及 Web 端的应用,选择 MySQL 作为后台数据库,其易操作、高效、可靠

22

基于Android的打车系统的设计与实现

等优点可以为系统提供良好的服务[36]。根据打车系统的功能分析及各个部分的设计要求,共在本系统的数据库中设计了 4 个表,包括存储乘客信息的乘客信息表,存储司机信息的司机信息表、存储客服相关信息的客服人员信息表,存储每一次打车记录相关信息的打车记录表。

根据各自的需求分析,各个表的功能与结构设计如下:

(1) 乘客信息表(passenger):用于记录本系统乘客端注册用户的基本信息,用户可在系统注册过程中添加包括用户名、登录密码、姓名、性别、手机号等基本信息,还记录该注册用户的使用次数和差评次数的信息。该表的主键为乘客编号,具体设计如表 4.1 所示。

表 4.1 passenger 表的结构

字段名称

pid

p_unam

p_pwd

p_nam

p_gen

p_tel

pu_num

数据类型

int

nvarchar(50)

nvarchar(50)

nvarchar(50)

int

nvarchar(11)

int

int

是否允许为空

是否主键

说明

乘客编号

用户名

登录密码

乘客姓名

乘客性别

乘客电话

使用次数

差评次数

pb_num

(2) 司机信息表(driver):用于记录司机端注册用户的基本信息,用户可在系统注册过

程中添加包括用户名、登录密码、姓名、性别、手机号、车牌号、驾照号等基本信息,还记录注册司机的使用次数和差评次数信息。该表的主键为司机编号,具体设计如表 4.2 所示。

表 4.2 driver 表的结构

字段名称

did

d_unam

d_pwd

d_nam

d_gen

d_tel

lp

dl

pu_num

数据类型

int

nvarchar(50)

nvarchar(50)

nvarchar(50)

int

nvarchar(11)

nvarchar(20)

nvarchar(20)

int

int

是否允许为空

是否主键

说明

司机编号

用户名

登录密码

司机姓名

司机性别

司机电话

车牌号

驾照号

使用次数

差评次数

pb_num

(3) 客服人员信息表(service):用于记录注册客服人员的基本信息,包括客服人员的工

作编号、用户名、登录密码、姓名、性别、电话。其中工作编号为该表的主键,具体设计如表 4.3 所示。

23

基于Android的打车系统的设计与实现

表 4.3 service 表的结构

字段名称

sid

s_unam

s_pwd

s_nam

s_gen

s_tel

数据类型

int

nvarchar(50)

nvarchar(50)

nvarchar(50)

int

nvarchar(11)

是否允许为空

是否主键

说明

客服员编号

用户名

登录密码

客服员姓名

客服员性别

客服员电话

(4) 打车记录表(record):用于记录每次打车过程中使用的基本信息,包括记录号、司

机工号、打车人手机号、客服人员工作编号、起点、终点、打车时间等打车信息。该表的主键为记录编号,具体设计如表 4.4 所示。

表 4.4 record 表的结构

字段名称

pid

time

start

finish

pid

did

数据类型

int

datatime

nvarchar(50)

nvarchar(50)

int

int

是否允许为空

是否主键

说明

记录编号

打车时间

起点

终点

乘客编号

司机编号

4.5 本章小结

本章对打车系统进行了系统设计,首先介绍了本打车系统的设计目标,对系统的总体架构从 Android 客户端架构和 Web 端架构进行了设计。然后,从系统的乘客端、司机端和客服端三个部分介绍了其工作流程,并具体地描述了系统 Android 客户端的各个功能模块,包括注册登录模块、乘客打车模块、历史记录查询与评价模块和司机抢单模块。最后,针对系统的所有需求,在 MySQL 数据库中详细地设计了系统的各种表的结构。

24

基于Android的打车系统的设计与实现

第五章 系统实现与测试

打车系统包括 Android 客户端和 Web 客服端,其主要功能是基于 Android 和 平台开发的,采用 Java、C#等编程语言,具体实现平台如表 5.1 所示。开发平台已经在第二章进行了详细介绍。

表 5.1 系统实现平台

操作系统

开发工具

运行环境

虚拟设备

数据库

Windows7

Eclipse+ ADT+ Android SDK+ visual studio 2008

JDK+Android+

AVD

MySQL

5.1 Web 客服端的实现与测试

根据本打车系统的需求,Web 客服端所要实现的最主要的功能是代理乘客发布打车信息和对用户信息、打车信息进行管理。在对客服端的开发采用三层开发模型,分别创建数据层、业务逻辑层和表示层。开发的具体步骤为:申请域名和空间、网站设计与制作、预编译网站及网站上传发布。

客服人员注册登录后可以代替用户发布打车信息,系统实现界面如图 5-1 所示。

图 5-1 打车信息发布界面

除了发布打车信息,客服人员还可以对本打车系统的司机信息、乘客信息和打车记录信息进行管理包括查看、修改、删除等操作。司机信息管理页面如图 5-2 示。

25

基于Android的打车系统的设计与实现

图 5-2 司机信息管理页面

乘客信息管理页面如图 5-3 所示。

图 5-3 乘客信息管理页面

打车信息管理页面如图 5-4 所示。

26

基于Android的打车系统的设计与实现

图 5-4 打车信息管理页面

5.2 Android 客户端各功能模块的实现与测试

5.2.1 注册登录模块的实现与测试

由于本打车系统 Android 客户端包括乘客端和司机端两部分,这两部分的用户在使用本系统时都需要进行注册登录,它们的实现过程类似,这里以乘客端为例进行介绍。

(1) 登录

登录界面的布局文件 以线性布局 LinerLayout 中嵌套 LinerLayout 方式实现页面布局,在界面中放置了文本视图和按钮控件。其中定义两个文本控件 TextView,分别为用户名和密码,两个用来输入用户名和密码的文本输入控件 EditText,一个 CheckBox,用于选择是否记住本次输入的用户名和密码,便于下一次登录,两个 Button 控件,分别为登录和注册,这些控件的样式及布局在 中都有详细描述。此外,为了在 java 类中能够方便的调用这些控件,对于布局文件中的每一个控件都设计了唯一的 id 属性值。系统的登录界面如图 5-5 所示。

27

基于Android的打车系统的设计与实现

图 5-5 Android 客户端登录界面

乘客端创建一个继承了 Activity类的 LoginApp 类,首先在 LoginApp 类中重写 onCreate方法,通过在该方法中调用 setContentView 方法,将 作为参数传递进去,使得用户界面能够成功加载到已经定义的登录界面。事实上,开发者在任何项目中的res/layout 目录下定义的每一个布局文件都可以通过调用 setContentView 方法来打开页面。

调用登录页面的关键代码如下。

public void onCreate(Bundle savedlnstanceState) {

te(savedlnstanceState);

setContentView();

……}

乘客输入用户名和密码,点击登录按钮后,系统调用登录按钮的监听 OnClickListener中的

OnClick()方法,首先利用函数 getText()获取用户输入的用户名 UserName 和密码UserPwd,然后通过 HttpURLConnection post 方式与后台服务器进行通信,得到数据库中相应的用户信息,对两次取得的信息用 equals 函数进行验证,如果信息无误,根据 CheckBox的选择情况通过

SaveUserInfo()函数判断是否保存用户信息。实现用户信息保存的代码如下。

private void SaveUserInfo() {

if(ked()){

//保存

SharedPreferences uiState = getSharedPreferences("UserInfo",

Context. MODE_WORLD_READABLE);

//取得编辑对象

editor = ();

//保存用户信息

ing("userName", rName()).commit();

28

基于Android的打车系统的设计与实现

ing("userPwd", rPwd()).commit();

}

}

对于还没有进行注册的用户,可以在登录界面点击注册按钮。在监听注册按钮OnClickListener 的 Onclick()方法中定义一个 Intent 对象,用 setClass 指定 Intent 对象启动RegisterApp 类。注册按钮监听的代码实现如下。

kListener btnRegisterClick = new kListener() {

public void onClick(View v) {

//新建一个 Intent 对象

Intent intent = new Intent();

//指定 intent 要启动的类

ss(, );

//启动一个新的 Activity

startActivity(intent);

//关闭当前的 Activity

();

}

};

(2) 注册

注册界面的布局文件为 ,它的布局方式与登录界面的类似,只是在控件的种类和数量上有所差别,其中有一个 RadioGroup 组件,里面包含两个 RadioButton 控件,用户在选择是只能选择其中的一项。乘客端注册界面如图 5-6 所示,司机端注册界面如图5-7 所示。

图 5-6 乘客端注册界面

图 5-7 司机端注册界面

乘客端注册功能是在 中实现的,系统对于用户的注册信息有一定的要求,因此需要验证用户信息,例如系统要求两次输入的密码必须相同、手机号码为 11 位等。

29

基于Android的打车系统的设计与实现

当用户添加完相应的信息,点击立即注册按钮时,系统监听到此操作,然后调用函数checkUserInfo(),对信息进行验证。如果验证无误则调用函数 setUserInfo()赋值用户信息,再调用函数 register()注册并返回登录页面,如果验证时出错则给出相应的提示。点击返回按钮则直接返回登录页面。系统采用 XML 方式构造数据源,然后封装成相应的参数,使用GET 或者

POST 方法与数据后台进行通信,注册功能实现的重要代码如下。

private boolean Register(String userInfo) {

String params = null;

String userInfo1 = userInfo;

try {

//传递的参数设定编码格式,以防止乱码

params = ("userInfo", "UTF-8") + "="

+ (userInfo1, "gb2312");

} catch (UnsupportedEncodingException e) {

Log.e(DEBUG_TAG, "注册方法中参数传递错误!");

}

String resultData = null;

//得到字符串集合

resultData = tHttpURLConnByUrl(urlRigester, params);//解析结果

if (resultData != null && () > 0) {

if (ns("")) {

resultData = ing(

f("") + 8,

dexOf(""));

String flg="0";

flg=ing(0,1);

if(flg=="0"){ //注册失败

return false;

}else{ //注册成功

String id=ing(0,f("/"));

//保存用户信息

SaveUserInfo(id);

DisplayToast("用户注册成功,返回登录界面!");

returnLoginPage();

return true;

}

}

}

return false;

}

5.2.2 乘客打车模块的实现与测试

30

基于Android的打车系统的设计与实现

乘客端的打车模块分为现在打车和预约打车两部分,它们的布局文件分别为

和 ,采用 LinearLayout 布局,由 TextView、EditView、RadioButton等控件布局实现的。用户在主操作界面选择现在打车按钮或预约打车按钮,便可以进入到打车模块。系统的现在打车界面如图 5-8 所示,预约打车界面如图 5-9 所示,二者的实现过程基本相同,现在打车过程是在 类实现的,预约打车过程是在 类中实现,下面以现在打车为例对其实现进行介绍。

图 5-8 现在打车界面

图 5-9 预约打车界面

进入现在打车界面后,乘客手动添加起点、终点、愿加价、愿等车各项所对应的信息,点击立即打车按钮上传打车需求。对立即打车按钮设置一个OnClickListener函数进行监听,获取打车信息并存入系统数据库中,上传成功后,由 Intent 对象返回上一页面。实现代码如下。

kListener btnGetTaxiClick = new kListener() {

public void onClick(View v) {

if (checkGetTaxiInfo()) {

setGetTaxiInfo();// 赋值打车信息

GetTaxi(JoinGetTaxiInfo());// 打车

}

}

};

5.2.3 历史记录查询与评价模块的实现与测试

无论是司机还是乘客都可以通过 Android 客户端查看自己的打车记录,也都有对对方进行评价的权利,用户可以通过历史记录与评价模块完成这一过程,下面以乘客端为例介绍。

31

基于Android的打车系统的设计与实现

进入打车系统乘客端的历史记录查询界面后,用户即可浏览以往的打车记录。历史记录查询功能的实现是在 中完成的,重写 onCreat 方法,调用历史记录查询界面的布局文件 ,里面包含一个 LisView 控件,列表中的每一个项目都是由historylist_ 布局的,历史记录查询界面如图 5-10 所示。

图 5-10 历史记录查询界面

实现时首先根据乘客的用户信息从数据库中取出该乘客的打车历史记录的相关信息,将数据保存在 HashMap 中,然后将 HashMap 添加到 ArrayList 数组对象中,将 ArrayList对象作为 ListAdapter 数据适配器的参数传入,最后绑定在布局文件的 ListView 控件上。

HashMap 类实现了 Map 接口,它提供一种键值对保存数据的方式,键值对的映射关系就像表中的字段与表中的值的关系一样,可以把表中的查询结果转换成 HashMap 散列表的形式。ArrayList 对象是包含单一数据值的项目的集合,通过 Add()方法向 ArrayList 添加项目。实现的重要代码如下。

ArrayList> listItem=new ArrayList< HashMap

Object>>(); //初始化 ArrayList 数据源对象

//读取 Strings 中的值

urlUser = ing(foURL);

if (() > 0) {

if(getHistory(urlUser)){ //连接后台得到数据

setContentView(y); //加载界面

inithistoryData();//加载数据源

historylist = (ListView) findViewById(ew01); // 绑定 Layout 里面的

ListView

//生成适配器的 Item 和动态数组对应的元素

ListAdapter listItemAdapter = new SimpleAdapter(this, listItem, // 数据源

ylist_items,// layout 中的 historylist_items 子层

32

基于Android的打车系统的设计与实现

new String[] { "EvaluateButton", "ItemTime", "ItemStart", "ItemFinish"}, // 动态数据的子项new int[] { teButton, me, art, nish} // 绑定list_items 中的控件

);

// 添加到 listView 中

pter(listItemAdapter);

点击任意一条记录后面的评价按钮即可进入评价界面,如图 5-11 所示,评价界面的布局文件为 。乘客填写对本次打车过程中司机所提供服务的评价,选择满意程度,点击完成按钮即可完成评价过程,评价功能的实现是在 文件中完成的。点击完成按钮触发对这个控件的监听,系统获取乘客填写的评价信息并上传至数据库进行保存,与此同时通过

Intent 对象跳转到历史记录页面。

图 5-11 评价界面

5.2.4 司机抢单模块的实现与测试

司机抢单模块是本打车系统司机端的最主要功能,司机首先需要查看现有的打车需求,才能进行抢单操作。与历史信息查看的实现过程相似,需求列表的查看是在 中通过调用 实现文件布局,在 ListAdapter 与 HashMap 和 ArrayList 配合来实现的,打车需求界面如图 5-12 所示。

33

基于Android的打车系统的设计与实现

图 5-12 打车需求界面

当司机满意某条需求要进行抢单,点击对应的抢单按钮时,会跳出一个对话框,如图5-13

所示,要求用户再次确认,尽量避免查看需求列表时的误操作。

图 5-13 抢单确认界面

实现代码如下。

kListener btnEvaluateClick = new kListener() {

public void onClick(View v) {

r alertDialog = new r(this);

le("确认抢单?") //设置标题

.setPositiveButton("是",

new kListener() {

public void onClick(DialogInterface dialog, int which) {

//单击{"是",确认抢单

}

34

基于Android的打车系统的设计与实现

})

.setNeutralButton("否",

new kListener() {

public void onClick(DialogInterface dialog, int which) {

//单击"否",返回需求列表

}

}) .create();

(); //显示对话框

}

};

如果司机抢单成功,系统会跳出如图 5-14 所示的对话框通知用户,并提醒其与乘客取得联系。点击联系乘客按钮,拨号与乘客取得联系。

图 5-14 抢单成功界面

5.3 本章小结

本章根据上一章节对本系统的详细设计,首先对打车系统 Web 客服端进行了实现,然后从注册登录模块、乘客打车模块、历史记录查询与设计模块、司机抢单模块着手,实现了Android

客户端的各种功能需求,并对系统进行了测试。

35

基于Android的打车系统的设计与实现

第六章 总结与展望

6.1 总结

本文针对传统打车方式存在的既浪费时间,燃油费消耗又大的弊端,提出了基于Android

平台的打车系统设计与实现,将打车过程中的参与者乘客、司机和客服人员紧密地联系在同一个系统中,实现了打车过程的网络化,在一定程度上有效地解决了生活中常遇到的打车难问题。

本文的主要工作如下:

(1) 介绍了目前网络化发展的状况并对目前常用的传统打车方式进行了调查分析,系统地总结了国内外打车软件的发展状况,为打车系统的设计实现提供了方向;

(2)

学习研究 Android 操作系统平台的相关知识,搭建系统开发环境,熟悉系统开发工具,熟练 Java 语言编程的理论与技巧,掌握 Android 移动平台开发的要点;

(3) 在搭建的开发环境中设计实现了打车系统,并对该系统进行了测试。与其他打车软件相比,本系统创新地加入了客服端的设计实现,这样本系统的用户就不仅仅局限在拥有Android 操作系统平台的移动终端用户,其他用户也可以通过客服端使用本系统实现打车过程。

6.2 展望

基于 Android 的打车系统的基本结构虽然已经开发完成,但由于时间及设备条件等因素的制约,系统但仍然有一些问题有待完善:

(1) 目前系统所使用的数据都是作者录用的测试数据,数据库建设并不全面,在数据的真实性和完整性方面都存在一定的问题;

(2) 虽然系统实现了整个打车过程,但还可以衍生出更多的功能为打车过程服务,例如,可以在乘客端加入语音识别功能帮助录入打车需求信息,在司机端加入 Google 地图的使用,帮助司机导航等。此外,本系统的用户界面还可以更加的美观;

(3) 虽然当前打车软件市场的发展面临许多挑战,但是打车软件的出现为人们出行提供了方便这一点是毋庸置疑的。系统的设计实现应该更加规范,对系统加强管理,逐步调整,使其能更好地适应市场需求。

36

基于Android的打车系统的设计与实现

[

参考文献]

[1] 第 33 次中国互联网络发展状况统计报告[EB/OL]. /hlwfzyj/ hlwxzbg/

hlwtjbg/201401/t20140116_, 2014-01-16.

[2] 工业和信息化部发布 2013 年中国工业通信业运行报告[EB/OL]. /

n11293472/n11293832/n11293907/n11368223/, 2013-12-30.

[3] 沈仲亮. 打车难:难在哪如何办[N]. 中国旅游报, 2011-12-21 (009) .

[4] 曹小林. 打车 APP 的机遇和风险[J]. 互联网周刊, 2013,(9) : 48-49.

[5] 刘晓云. 指尖上的出租车[J]. V-MARKETING 成功营销, 2013, (4) : 60-62

[6] 蔺天子. 打车 APP 大比拼[J]. 中国汽车市场, 2013, (18) : 26-27.

[7] 张珍珍. 打车难缘由解析[J]. 今日中国论坛, 2012, (6) : 36-38.

[8] 吴亚峰, 苏亚光. Android 应用案例开发大全[M]. 北京: 人民邮电出版社, 2011:1-2.

[9] Reto Meier. Professional Android Application Development [M]. Indiana: WiIcy Publishing,

Inc.2009.

[10] 姚昱旻, 刘卫国. Android 的架构与应用开发研究[J]. 计算机系统应用. 2008, (11):

110-112.

[11] 郭宏志. Android 应用开发详解[M]. 北京: 电子工业出版社, 2011.

[12] 赵亮, 张维. 基于 Android 技术的界面设计与研究[J]. 电脑知识与技术, 2009, 5(29):

8183-8185.

[13] 马越. Android 的架构与应用[D]. 北京: 中国地质大学, 2008.

[14] Dave Smith, Jeff Friesen. Android Recipes: A Problem-solution Approach [M]. America:

Apress, 2012.

[15] 曾健平, 邵艳洁. Android 系统架构及应用程序开发研究[J]. 微计算机信息, 2011, 27(9):

1-3.

[16] 黄宏程, 胡敏, 陈如松. Android 移动应用设计与开发[M]. 北京: 人民邮电出版社,

2012. 29-30.

[17] 张仕成. 基于 Google Android 平台的应用程序开发与研究[J]. 电脑知识与技术, 2009,

5(28): 7959-7962.

[18] 公磊, 周聪. 基于 Android 的移动终端应用程序开发与研究[J]. 计算机与现代化. 2008,

(8).

[19] 孟岩. Android 组件模型评析(上)[J]. 程序员, 2008, (01): 49-51.

[20] 段琳. 深入剖析 Android Activity[J]. 中国新技术新产品, 2011, 16: 33-24.

[21] Android 生命周期[EB/OL]. /feisky/archive/2010/01/01/1637427.

html, 2010-01-01.

[22] Android 开发之 Broadcast Receiver 组件[EB/OL]. /service

37

基于Android的打车系统的设计与实现

-, 2012-08-08.

[23] 刘云. Android 四大组件之 Content Provider [EB/OL]. /kf/201308/

238500. html, 2013-08-23.

[24] 冯涛. 动态网站开发教程[M]. 北京: 清华大学出版社, 2011.

[25] 服务器控件分类简介[EB/OL]. /jinianjun/archive/2012/

01/03/, 2012-01-03.

[26] 内置对象的用法与区别[EB/OL]. /wmw1989/archive/

2008/12/14/, 2008-12-14.

[27] MySQL[EB/OL]. /link?url=znp8jrMOiEKgo5_ U2RSi4ov JNLmHfF

K- YVITdKpjOeUco2eETF-E4RkY5PUzAjdP.

[28] 杨少健. 基于 Android 的 LBS 移动订餐系统的设计与实现[D]. 广东: 暨南大学, 2012.

[29] 翟大昆, 陈春茶. Android 项目开发详解[M]. 北京: 机械工业出版社, 2012. 6.

[30] W. Frank Ableson, Charlie Collins, Robi Sen. Unlocking Android[M]. America: Manning

Publications, 2009.

[31] 吴亚峰, 于复兴. Android 应用开发完全自学手册——核心技术、传感器、2D/3D、多

媒体与典型案例[M]. 北京:人民邮电出版社, 2012. 3.

[32] 杜铭, 范辉. 基于 Android 的点餐系统的研究与实现[J]. 无线互联科技, 2012, (01):

84-86.

[33] 李佐彬. Android 开发入门与实战体验[M]. 北京: 机械工业出版社, 2011: 5-6.

[34] 孙铁鑫. 浅谈 B/S 和 C/S 结构的对比[J]. 今日科苑, 2007, (06): 42.

[35] 郑逦. 基于 Android 平台的无线点菜系统的设计与实现[D]. 济南: 山东大学, 2012.

[36] 孙浏毅. 零基础学 SQL[M]. 北京: 机械工业出版社, 2010.

38

基于Android的打车系统的设计与实现

致 谢

值此论文完成之际,特别感谢我的导师李光顺副教授,他不仅为我创造了优越的学习环境,而且为我指明了以后的发展方向。他严谨求实的治学态度、锐意创新的科研精神给我留下了深刻的印象,他深厚的学术功底、渊博的知识、开阔的视野和敏锐的思维令我受益匪浅。

感谢所有教过我的老师,你们的悉心教导是我完成这篇论文的基础。感谢夏小娜老师在思想和生活上给我无微不至的关怀。

感谢与我一路走来的同学们在学习和生活中给予我的关心和帮助。

39

发布评论

评论列表 (0)

  1. 暂无评论