Software Engineering and Applications
Vol.05 No.05(2016), Article ID:18803,11 pages
10.12677/SEA.2016.55033

Design and Implementation of Campus Express Application Program Based on Android Platform

Pan Luo, Lihua Song, Jing Zhang, Dong Xu, Yang Bai

School of Computing, North China University of Technology, Beijing

Received: Oct. 7th, 2016; accepted: Oct. 21st, 2016; published: Oct. 27th, 2016

Copyright © 2016 by authors and Hans Publishers Inc.

This work is licensed under the Creative Commons Attribution International License (CC BY).

http://creativecommons.org/licenses/by/4.0/

ABSTRACT

The business of sending express to houses brings great convenience to people’s life, but some schools prohibit the courier to the campus, which gives the teachers and students some inconvenience. In this paper, through the use of JSON, Hibernate and some of the basis of the development of Android technology, we develop a mobile phone application software—“Collecting Express”. It realizes sending messages online, one-to-one timely communication, receiving express for each other and other functions. The software has well solved the problem that teachers and students can’t receive the express in school conveniently. Using both Layered Structure and Hibernate in the service side of the system is a new form. In this way, developers can not only reduce the amount of code and improve readability of the code, but also save the time to develop manual use of SQL and JDBC. In addition, the Hibernate technology, JSON and other technologies used in this paper also provide a more complete software development framework for other software developers.

Keywords:Android Development, Hibernate, JSON, Mobile Phone Software

基于Android平台的校园快递代取应用程序设计与实现

罗攀,宋丽华,张静,徐东,白阳

北方工业大学计算机学院,北京

收稿日期:2016年10月7日;录用日期:2016年10月21日;发布日期:2016年10月27日

摘 要

快递上门业务给人们的生活带来极大便利,但部分学校禁止快递进入校园,这给校园内的师生收取快递造成了一些不便。本文通过综合使用Hibernate、JSON以及Android等开发技术开发出了一款“快递代取”手机应用软件,实现了在线群发消息、一对一及时沟通、互相代取快递等功能,很好地解决了校园内师生频繁出校收取快递的问题。在系统的服务器端使用分层结构结合Hibernate技术实现与数据库的交互是一次比较新颖的形式,这样的设计构思不仅能够使服务器端减少代码量、使程序的可读性提高,还大幅度减少了开发时人工使用SQL和JDBC处理数据的时间。同时本文所用到的Hibernate技术、JSON等技术也为其他软件开发学者提供了一个比较完备的软件开发框架。

关键词 :Android开发,Hibernate技术,JSON,手机软件

1. 引言

近几年由于网购业务的大量增长,快递业务也随之大量增长,快递上门使购物更加方便。但有些校园出于安全等原因禁止快递员进入校园,这给快递的收取造成了一些不便,如何解决校园快递的“最后100米”成为比较重要的问题。

随着智能手机的快速普及,手机应用软件已经成为日常生活中必不可少的工具。Android是由Google公司开发的一种基于Linux内核的操作系统,可以方便开发者开发应用软件。如何利用Android平台开发出一款能够方便用户快递代取的软件成为一个非常具有实际意义的问题。

本文针对以上问题,设计并实现了一款基于Android平台的校园快递代取应用软件,令学校师生不用到校外亲自取快递、使快递上门成为可能。该软件为用户提供了注册、登录、发单、接单等服务,同时也为类似软件提供了一个参考架构 [1] 。

2. 系统设计与实现

2.1. 系统结构设计目标

系统的客户端使用eclipse的IDE作为开发工具,开发的任务主要是客户端显示界面的设计与实现、客户端数据控制逻辑的设计与实现、客户端网络访问和客户端输入控制。

系统的服务器端使用Myeclipse结合MySQL作为开发工具,服务器端需要实现的功能包括:接收客户端的数据请求并且将请求数据转换为服务器端的编码格式、为各个数据处理功能设计程序接口、实现各个数据处理功能、使用Hibernate技术 [2] 简化数据库与服务器之间的相互访问。

根据系统结构和实际的需求,“快递代取”系统设计 [3] 的目标是:

1) 实现用户在系统中快速注册

2) 支持用户管理个人信息

3) 用户发单消息群发

4) 实现发单用户与接单用户一对一绑定

5) 客户端为用户提供服务,服务器端做业务处理

“快递代取”系统的功能分布结构图如图1所示。

基于上述目的,“快递代取”系统客户端与服务器端具体的功能如图2所示。

2.2. 系统功能

1) 用户注册功能

为了能够更加方便的管理用户信息和为用户提供更加优质的服务,用户第一次使用本系统时必须先进行注册,用户将注册时需要将必要信息填写完整。由系统审核通过后,该用户将在本系统中拥有自己的个人账户。只有拥有账户的用户才能够登陆本系统,使用本系统。

2) 用户登录功能

在本系统注册过的用户,可以凭借注册的用户名以及密码登录到系统中。登陆后的用户才可以使用本系统的发单、接单等其他功能。

Figure 1. Software function distribution

图1. 软件功能分布图

Figure 2. Details of client and server of “Collecting Express” System

图2. “快递代取”系统客户端与服务器端具体功能

3) 用户修改资料功能

为了方便用户能够管理自己的基本信息,系统提供用户资料修改功能。该功能能够让用户修改自己的一部分个人信息并保存到后台服务器中。用户使用用户资料修改功能不能修改个人财富等系统控制的信息,以此保证用户使用本软件的公平性。

4) 发单功能

发单功能是本系统的核心功能之一。每当用户需要别人帮忙代取快递时,用户可以点击发单按钮,填写所取快递的基本信息并将该任务发送到社区,等待其他人承接该任务。

5) 接单功能

接单功能也是本系统的核心功能。用户在空闲时或者去取自己快递时,可以在社区中查找自己能够帮别人代取的快递,承接该用户的订单,以此方法来获取虚拟金币(在用户需要别人代取快递时需要支付给接单者虚拟金币以此作为答谢)。

6) 查看接、发单历史记录功能

用户可以利用此功能查看自己曾经帮别人代取快递或者要求别人帮忙代取快递的详细记录,以便用户更好的了解自己的账户使用状况。

虚拟金币的设置保证了用户使用本软件的公平性。每一个用户可以通过帮别人代取快递而达到不用自己每次都要到校外取快递的目的。

2.3. 系统模块与实现

2.3.1. 客户端

系统客户端是与用户直接接触的,因此在设计用户端软件功能结构时要站在用户的角度要充分考虑用户体验。决定用户体验的两个重要因素分别是界面布局和软件运行流畅性。保证前者的关键在于在设计软件功能时保证功能之间的层次关系清晰明了,而保证后者的关键在于选择适合的开发技术。

基于以上论述,可以得到系统客户端的功能结构如图3所示。

2.3.2. 服务器端

系统的服务器端承担了系统中近70%的逻辑运算,是整个系统的核心。服务器端虽不需要向外界显示任何信息,但其能否正常运行却是系统能否向外界显示正确信息的关键。服务器端的设计使用分层结构设计思想,保证层与层之间留有固定的接口,这样即可以将各层的逻辑分开设计,减少编写代码的复杂度,又方便日后技术发展后对服务器端的优化。

服务器端的功能结构如图4所示。

2.4. 关键技术与算法

2.4.1. 客户端关键技术与算法

客户端针对每个界面功能的不同,都对应着不同的逻辑控制代码。另外,网络数据传输使用TCP/IP协议,在数据进入传输控制层之前使用JSON对其进行封装,当数据离开传输控制层之后解析封装的JSON,得到传输的具体数据。客户端逻辑控制程序使用模块化设计思想,减少控制逻辑之间的耦合度。

客户端逻辑控制部分全部基于以下几个技术开发的,下面主要对开发技术做进一步详细说明:

1) 线程的使用 [4] [5] :

在Android开发平台下,为了保障主进程的安全性,客户端的主进程是不允许直接访问网络的,所以每当客户端有访问网络的需求时,必须开启一个新的线程服务进而访问网络,向服务器发送服务请求。

Figure 3. The structure of client side

图3. 客户端功能结构图

Figure 4. The structure of server side

图4. 服务器端功能结构图

在客户端发送的请求中,所有的程序变量和JavaBean都使用JSON.toJSONString方法,封装成JSON [6] 对象后才向网络发送。当服务器接收到客户端的请求后,首先解析JSON对象,根据解析后的数据执行相应的服务并向客户端返回字节流,客户端在请求不超时的前提下读取字节流并使用utf-8编码标准将字节流转换为字符串,进而转换成客户端程序中的变量。

用户数据在客户端的流向如图5所示。

2) SharePreference的使用:

SharePreference是简单的持久化设置,它将所要共享的数据保存在一个xml文件中,这样其他的界面就可以通过程序的上下文获取该变量。

SharePreference的工作原理如图6所示。

客户端的某一个界面若想将本界面的某个变量共享到其他界面,该变量需调用SharePreference方法,这样该界面会作为根界面,其他界面可以根据上下文Context对象getSharePrefere方法得到共享变量的值。

3) Bundle的使用:

Bundle用非持久化的方法将数据信息传递到另一个上下文中。例如在本系统中,用户查看完自己的个人信息之后可以随时修改,这时就需要将前一界面的数据放到修改界面,此时使用Bundle最为合适。

4) 界面与程序之间数据的传递:

界面与程序之间数据的传递包含两个方向的传递 [7] 。

第一是界面向程序传递数据。用户在客户端界面输入的数据需要进行合法性验证、类型转换才可以在控制逻辑程序上下文中使用。在本系统中,对用户输入合法性的验证是使用正则表达式对输入数据进行检验。如果输入数据不符合正则表达式规定的标准则不允许改数据进入控制逻辑的上下文,用户需要

Figure 5. Data flow at client side

图5. 客户端数据流向图

Figure 6. The principle of SharePreference

图6. SharePreference方法原理图

重新输入。对于类型装换,逻辑控制程序可以通过FindViewById方法获取经过正则表达式检验合格的数据,再使用toString()等方法将其转换为程序变量。

第二是程序将数据写到界面上。相比界面向程序传递数据,由于逻辑控制程序中的数据一定是合法的,所以程序向界面传递数据并不需要检验数据的合法性,因此只需要调用Adapter即可将程序变量显示在界面上。

正则表达式:正则表达式是判断即将写入程序的变量是否合法的一个方法,使用正则表达式对输入信息进行合法性检验充分保障了系统的安全性。

图7是数据在界面与程序之间的转换关系。

2.4.2. 服务器端关键技术与算法

软件系统的服务器端使用分层结构设计,过滤器层、servlet层、数据库访问层、SessionFactory层分别有自己的任务,每层都是调用下层的方法,向上层提供服务,提高层内部的内聚,减少层之间的耦合,提高系统的运行效率,最终实现服务器端的整体功能。

下面按照从下往上的顺序依次介绍各主要层。

1) SessionFactory层:

SessionFactory是初始化Hibernate时调用的,在与数据库建立连接时,它充当了数据代理的角色,并且他还负责创建每一个Session对象。在框架技术中,SessionFactory已经是封装比较完善的一个类,在本系统中直接使用了Hibernate [8] [9] 中自带的SessionFactory类。SessionFactory层数是服务器端分层结构的最底层,它封装了对数据库具体操作的行为,只为数据库操作层提供一组接口,方便数据库操作层的调用。

Figure 7. Technological process of Regular Expression

图7. 正则表达式运行流程图

2) 数据库操作层:

数据库操作层调用SessionFactory层的接口向servlet层提供服务。

数据库操作层的构成如图8所示。

其主要由两大模块组成,第一个模块是对用户数据的操作,第二个模块是对快递信息的操作。这两个模块都继承了BaseHibernateDAO这个函数来实现对数据库的基本操作(包括增加数据、查询数据、修改数据、更新数据等)。

两个模块中每个模块都有接口和接口的实现两类class文件,接口是向上层提供服务的,上层函数调用接口实现某一功能时不需要知道这些接口是如何实现的,而接口的实现则是实现该功能的具体逻辑以及对下层接口的调用。

3) Servlet层(单元测试):

Servlet层主要的功能是:①接收前面客户端发出的请求;②调用相应的数据库操作层的接口来向客户端提供服务;③将数据库操作层返回的数据发送回前面用户端。

Servlet层是服务器端接收并处理客户端业务请求的核心控制层,它只调用下层(数据库操作层)为它提供的接口,不向上层(过滤器层)提供接口服务。解析和封装JSON数据在本层中是主要任务,但值得注意的是,在本层解析数据前一定要先经过过滤器层将数据转化为utf-8的编码格式才能正确的对数据进行解析。这也是服务器端最高层,过滤器层必要性的体现。

本系统中servlet层的具体逻辑如图9所示。

单元测试:单元测试是测试后台服务器端代码时使用的虚拟前端请求,在真实的使用环境中和前后端统一综合测试时不用修改代码,不影响系统运行。

4) 过滤器层:

过滤器层主要是使前面的客户端与后面的服务器端之间使用统一的编码格式,以此解决中文乱码的问题。本系统中,约定客户端与服务器端都是用utf-8的编码格式,所以当服务器端接收到客户端发来的数据请求后,过滤器层会通过与客户端之间的沟通将数据格式变为utf-8的编码格式。

3. 测试

3.1. 测试环境介绍

硬件环境:

1) 服务器端:

处理器:Intel(R) Core(TM) i5-3230M CPU @2.60GHz

已安装内存:4.00GB (3.87GB可用)

系统类型:64位操作系统,基于x64的处理器

Figure 8. Interface of data base

图8. 数据库操作层接口示意图

Figure 9. The structure of Servlet

图9. Servlet层逻辑结构图

2) 客户端:

本系统是一个不对称系统,系统只有一个服务器,但需要向多个客户端提供服务。为了能够尽量模拟系统使用时的真实环境,在本次测试过程中使用了三台客户端测试机。客户端三台测试机的基本参数如表1所示。

软件环境:

①服务器端:系统的服务器端MyEclipse2014和TomCat6.0软件与MySQL5.5数据库同时安装在同一台PC机上。

②客户端:针对系统投入运行时会安装在不同版本的Android系统中,所以本次测试采用的三台测试机安装的Android版本也不同。具体的信息如表2所示。

3.2. 网络拓扑结构介绍

测试环境的网络拓扑结构如图10所示。

Table 1. Basic parameters of testing machine

表1. 测试机基本参数表

Table 2. Android version of testing machine

表2. 测试机Android版本表

Figure 10. Network topology structure of testing environment

图10. 测试环境网络拓扑结构图

3.3. 测试策略

测试时,将服务器端部署到服务器端硬件上,打开Tomcat服务器。客户端采用三个硬件版本不同的测试机,将客户端软件分别安装到三台测试机上,分别进行测试。

测试过程中,要验证:

1) 客户端能否正确向服务器端发送数据。

2) 服务器端能否正确接收并解析客户端发来的数据。

3) 服务器端能否执行正确的算法,调用适合的方法解决客户端的请求。

4) 服务器端与数据库能否正常通信。

5) 客户端能否正确接收并解析服务器端的数据。

6) 当多个客户端同时访问服务器端时,服务器端的承受能力是否足大。

Table 3. Testing result

表3. 测试情况表

3.4. 测试结果

3.4.1. 功能验证

在保证服务器与测试机处于同一网络,并且网络畅通的情况下,测试结果如表3所示。

通过分析表3的测试结果,3台测试机均运行正常、后台服务器运行正常,系统设计的所有功能全部实现。

3.4.2. 性能分析

测试过程中,同时使用三台客户端测试机登陆不同的账户,服务器端响应正常并且向客户端传回了正确的数据。

4. 结语

本文系统实现了在Android手机客户端上的用户登录、注册、发订单、接订单、查看订单历史、修改个人基本信息等功能;数据传输过程中实现了使用JSON格式的字符串进行传输;后台服务器实现了使用Hibernate技术中的SessionFactory等类简化数据库连接与映射;MySQL数据库表的设计实现了三范式的标准。经过不同类型、不同型号的多种手机测试,软件运行良好 [10] 。相较于同类型系统,本系统主要优点是:使用方便,用户可以在群发的订单信息中直接与发单人建立一对一的对话;服务周到,系统几乎满足了所有师生对于代取快递的需求,包括用户信息与快递信息的共享、订单信息的更新等;维护简单,本系统的数据库相对其他系统而言小很多,软件运行后非常方便管理人员管理与维护数据库。此外,本文对“快递代取”的介绍涵盖了手机软件开发过程中所需的常用技术,为同类手机软件开发者提供了一个比较完整的参考框架。

基金项目

北京市大学生科学研究与创业行动计划资助项目,北方工业大学大学生科技活动资助项目。

文章引用

罗 攀,宋丽华,张 静,徐 东,白 阳. 基于Android平台的校园快递代取应用程序设计与实现
Design and Implementation of Campus Express Application Program Based on Android Platform[J]. 软件工程与应用, 2016, 05(05): 285-295. http://dx.doi.org/10.12677/SEA.2016.55033

参考文献 (References)

  1. 1. 黄金国, 罗震. 手机应用程序开发架构研究[J]. 计算机工程与科学, 2010, 32(11): 2-4.

  2. 2. 陈亚军, 缪勇. Struts 2+Spring+Hibernate 框架技术与项目实战[M]. 北京: 清华大学出版社, 2012.

  3. 3. 李东炜, 刘镇章. 基于Android智能手机的实验室预约系统设计[J]. 实验技术与管理, 2012, 29(12): 2-3.

  4. 4. 代林峰. Android 网络开发从入门到精通[M]. 北京: 机械工业出版社, 2015.

  5. 5. 李宁. Android开发完全讲义[M]. 北京: 中国水利出版社, 2015.

  6. 6. 高静, 段会川. JSON数据传输效率研究[J]. 计算机工程与设计, 2011, 32(7): 1-3.

  7. 7. Taba, S.E.S., Keivanloo, I., Zou, Y. and Wang, S.H. (2016) An Exploratory Study on the Usage of Common Interface Elements in Android Applications. The Journal of System and Software, Available Online, 12-14. http://dx.doi.org/10.1016/j.jss.2016.07.010

  8. 8. 张飞, 张建. 基于Spring与Hibernate的数据库访问技术研究[J]. 计算机工程与设计, 2009, 30(7): 1668-1670.

  9. 9. 任文娟, 王华, 鞠宏伟, 等. 基于Struts和Hibernate框架的Web应用的设计与实现[J]. 微计算机信息(管控一体化), 2006, 22(9-3): 1-4.

  10. 10. 倪红军. 基于Android平台的消息推送研究与实现[J]. 实验室研究与探索, 2014, 33(5): 2-5.

期刊菜单