1、基于Android的校园快递平台的设计与实现 摘 要:随着智能手机的普及以及移动互联网的快速发展,很多人尤其是在校大学生已经习惯于使用手机应用来享受生活的便利。本文设计了一款基于Android的校园快递平台,该平台可以方便快递人员进行快递的收件和分件。本系统以Android作为开发基础,客户端采用HTTP协议和服务器交互,服务器端使用MyEclipse10。7作为开发工具,tomcat6。0.13作服务器,以MYSQL5。5作为数据库,采用了Hibernate主流框架。本系统采用现如今最流行的Android开发,具有受众面广,易于操作与维护等特征,很好的满足了校园快递的需求. 关键字:校
2、园快递;Androi;MySQL;快递人员 18 1 概述 自从Google在2008年10月发布第一部Android智能手机以来,Android就以它强大的开源性以及易用性迅速席卷了全球的智能手机市场。2011年第一季度,Android在全球的市场份额跃居第一,这是它首次超过诺基亚的塞班系统。时代在进步,Android的发展也在昂首阔进,正如之前的“诺基亚时代"一样,现在是属于Android的时代。在Android面世的第五个年头,它就已经牢牢占据将近八成的全球市场,全世界采用Android系统的设备数量达到了10亿台.因此,当代大学生拥有一部属于自己的Android手机已经是一件
3、很平常的事情了。Android的流行在于它是一个高度开源的操作系统,拓展性非常强,国内最大的两家手机厂商小米和魅族,他们的手机操作系统都是基于原生Android上定制而成的.对于开发者来说,他们利用Android开发的应用具有无限的可能性,这些Android应用可以涵盖生活的方方面面,无论衣食住行,我们都可以在任意一个Android应用市场上找到与之相关的应用.可以说移动应用已经改变了我们的生活方式,在这种情况下,为了满足人们日愈丰富的移动生活需求,开发基于Android的应用是很必要的。 随着Android智能手机的普及,越来越多的大学生已经习惯于使用手机为自己的学习和生活提供便利。在当前
4、的校园生活中,快递已经成为了大学生日常不可缺少的一部分。如何提高快递的发送效率是各个快递员最为关注的问题.基于该背景,我们设计斌 2 相关技术简介 2.1 Android技术概述 Andy Runbin创立了Android公司并开发了Android系统.Android系统的巨大潜力引起了Google的极大注意,并花重金买下了Andy Runbin创立的Android公司.开放手机联盟及开放手机软件平台也应用而生.相比于IOS、黑莓、塞班等系统,Android系统有点更加突出,更加开放。 Android系统首先是基于Linux内核而设计,因此Android系统架构的底层为Linux内核
5、还包括各种设备的驱动程序的,Linux内核是Android系统最核心的地方.基于Linux内核,Google开发了Android的类库及各种各样的应用程序。安卓系统中具有四大组件,其中Activity是最主要的组件之一.Android系统中Activity的生命周期如图2-1所示. 图2-1 安卓Activity的活动周期 Activity是Android系统中的重要组件之一.主要完成两个工作:首先是处理业务逻辑,其次是渲染视图.Activity是组成应用的基本元素,不同Activity之间的互联形成整个应用的业务逻辑。在应用程序中,必需要规定某一个Activity作为Main Acti
6、vity,作用就是将它设置为进入应用时显示的第一个Activity界面。各个Activity之间的跳转非常灵活,Android中利用Intent类就可以实现不同Activity之间的跳转动作。每当某一Activity获得执行焦点,即启动运行时,它的前一个Activity就会停止工作。Android程序中所有的Activity都会被存储在一个栈中,因此停止运行的Activity并不会被销毁,而会存储在栈中.新启动的Activity会先存储于栈中,随即获取活动焦点。如果在某个Activity运行时执行返回操作,就会将当前的Activity从栈中获取并消除,这时前一个Activity就会重新取回活动
7、焦点. 2.2 JSP技术 JSP的全称为Java Server Pages,本质上来时,JSP就是简易的Servlet。JSP语法采用<%, %〉形式.与Servlet相同的是,其操作也是在服务器端运行.儿返回给前端的基本是个HTML文本。所以,JSP的运行非常的灵活,只需要有浏览器就可以. 在程序设计中,习惯上把系统分为模型(Model)、视图(View)、控制器(Controller)三种模块的设计方式称为MVC设计模式。MVC设计模式中每个模块的功能均不同,模型(Model)模块的主要功能是描述应用程序的业务逻辑和状态,一般分为业务模型和数据模型两种模型;视图(View)负责向
8、用户提供可交互的界面,向用户显示模型的数据;控制器(Controller)的主要功能是响应用户的请求,根据接收的客户请求来操作模型,并通过视图把模型的响应结果展示给用户.图4-1是MVC模式的示意图: 图4—1 MVC模式图 采用MVC设计模式来进行系统设计有以下好处: (1)名司其职、互不干涉:在MVC设计模式中,三种模块的功能相对独立,分工明确,如果哪一个模块的需求发生变更,只需要修改相应模块中的代码,对其他模块不造成影响,有效降低了系统的耦合度。 (2)有利于开发中的分工:在MVC设计模式中,由于系统模块是按照层次划分的,而每个层是间隔开来的,这样可以更好地在开发过程中进行分工,
9、提高系统的开发效率。如:美工设计人员可以专注于开发系统的界面,对业务熟悉的开发人员可以专注于开发模型中的相关业务处理方法,而其他开发人员可以专注开发控制器,以便更好地进行程序控制。 (3)有利于组件的重用:因为MVC设计模式最重要的特征就是把显示与数据分离开来,所以在MVC模式中各个层的组件的重用是很容易实现的。如:控制层的组件可以独立出来成为一个通用的组件,视图层的组件也可以独立出来成为通用的系统操作界面。 3。 系统分析与建模 3。1。 系统可行性分析 本节将从技术可行性、经济可行性、操作可行性等方面对该系统的可行性进行阐述,以表明该系统的实际可行性. 技术可行性:android
10、手机客户端开发技术目前已发展多年,网上及图书馆有关android开发的资料也很多,与服务端通信的技术也相对程序.而JSP技术作为目前广泛的应用技术,已经被大量的开发者的所采纳,MVC模型-视图—控制开发模式在实践中也被大量应用,因此在技术上,采用android和JSP技术是完全可行的 经济可行性,本系统中服务端采用MyEclipse+Tomcat+Mysql开发软件及平台,其中服务器部署软件Tomcat和数据库软件Mysql都是开源免费的,使得该系统在服务端的开发成本非常的小,只需要一台能够运行Tomcat和Mysql的PC机就可以。而对于客户端,目前几乎人人都有android智能手机,因此
11、用户不需要单独采用任何的设备来使用该android系统。综上所述,该系统在经济上不需要投入太多设备,软件也都是开源的,在经济上完全可行 操作可行性,该快递平台运行在Android客户端,只需用户有一台android手机就可以运行,目前几乎人人都在使用智能手机,尤其是年轻一代,对于智能手机的操作得心应手,因此该系统在操作上也完全是可行的。 综上所述,该系统在技术、经济、操作等方面都是可行的, 3。2。 需求分析 经过调研分析,该快递平台主要分为以下二个角色:系统管理员、用户。如图3-1所示。 图3—1 校园快递系统角色 该个校园快递系统的每个角色的主要功能需求如下所示: 管理员:主
12、要完成对系统信息的管理,包括对物品分类、用户、反馈信息以及举报信息的管理等. 用户:注册、登录系统,可以查看物品、发布二手物品、举报发布者、收发私信、收藏物品、反馈等功能. 系统用例图如图3—2所示。 图3—2 系统顶层用例图 3.3。 系统的非功能性需求 通过调研,该系统具有如下的肺功能性需求: (1)整体要求 随着移动设备深入人们的生活,移动APP的UI设计越来越重要,该设备维修系统的UI需要简洁大方,各个控件之间的布局合理,UI系统的风格及搭配需要统一.对于用户的点击响应时间应该在4s以为,超过该时间,用户会无法忍受。 (2)安全性要求 为了防止他人进入系统并保护用户的
13、个人信息,系统在传输数据的过程中应该对敏感数据进行加密。 4。 校园快递系统设计 4.1. 系统总体架构设计 4。1。1。 系统总体架构图 本校园快递系统采用MVC(模型-视图-控制)的架构,系统分为服务端和客户端两大部分,android手机通过无线网络访问服务器,如图4-1所示为基于android 的校园快递系统体框架。 图4—1 系统的整体架构 4.1.2 系统实现流程架构 整个系统的数据流图如图4-2所示.数据请求的过程如下所示:首先android手机端提出数据请求,通过TCP/IP的方式连接至服务端,服务端响应客户端的请求,按照具体的请求对数据库进行操作,操作完成后,将数
14、据按照JSON的方式返回给客户端。 图4—2校园快递系统数据流框架 4。2。 系统功能设计 4.2.1。服务端设计 该服务端采用JSP的MVC框架进行设计与实现。 MVC设计模式是指模型(model)、视图(view)、控制器(controller)构成的软件架构模式。 M:Model模型.Model是应用程序中用来操作数据逻辑的主要部分,对数据库的操作常放在该层.V:View视图。View是视图层。用以和用户直接的交互工作,例如用户输入或者提交表单,主要是显示处理结果;在Android应用中一般采用XML数据格式作为用户界面布局语言。 C:Controller控制层。Androi
15、d控制层的操作需要在Activity中完成,控制层是大多数业务流程的编写部分。 主要功能是管理校园地址信息的管理,框图如图4—3所示: 4。2。2。客户端功能设计 本客户端主要分为两个角色,快递管理员以及快递人员: 快递管理员的主要功能为:登录系统、收件、发件以及个人资料管理。 快递人员的主要功能为:查看分配给自己的快递,快递状态更新以及个人资料管理。 客户端的功能框图如图4—3所示: 图4—3客户端功能框图 4。3。 数据库简要设计 数据库用来存储系统的数据,并供用户查找使用数据,是整个系统的核心所在,根据前面的系统分析,本节设计并实现了如下5个表,分别为管理员表、校园地址
16、表、分件表、快递表、用户表. 表4—1 tb_admin管理员表 字段 类型 含义 name varchar(50) 用户名,主键 password varchar(50) 密码 表4—2 tb_address校园地址表 字段 类型 含义 id int 编号,自动加1,主键 aname varchar(50) 名称 表4—3 tb_assign 分件表 字段 类型 含义 id int 编号,自动加1,主键 expressid int 快递id username varchar(50) 快递人员 astate int 状态
17、 adate varchar(50) 日期 表4-4 tb_express快递表 字段 类型 含义 id int 编号,自动加1,主键 eno varchar(50) 快递编号 eaddress varchar(100) 收件地址 ename varchar(50) 收件人 ephone varchar(50) 联系电话 edate varchar(50) 收件日期 estate int 状态 addressed int 所属校园地址 表4—5 tb_user 用户表 字段 类型 含义 account varchar(10
18、0) 账号,主键 password varchar(100) 密码 uphone varchar(50) 电话 urealname varchar(50) 用户名 addressid int 所属校园地址 整个系统ER图如图4—4所示,该ER图表示了各个数据表之间的关系。 图4—5 数据库ER图 5。 基于Android平台的快递系统实现 5。1。 开发环境搭建 整个系统的开发环境如下所示: 开发语言:JSP, android Android手机开发平台:Android系统4.0以上 PC端操作系统平台:WINDOWS Win7 开发工具:Eclip
19、se4。2+MyEclipse10。0+Tomcat6.5+Mysql5.5 5。2。 关键技术实现 5。2.1 数据交换格式 本系统的重点是服务端与客户端的良好连接及数据交互。在服务器端通过JSP Servlet与客户端进行通信。其中数据交换主要通过JSON格式。JSON是一种轻量级的数据交换格式,相比于xml等交换格式,JSON格式在可读性及便捷性上有所提高,而且JSON支持大部分的主流平台,因而普及性也比较高.JSON采用的文本格式兼容性很高,与C语言体系的行为类似。JSON的类主要包括以下几个. JSONObject:JSON的基本单元,主要包括键值对,最外被大括号包裹,其中的
20、Key和Value被冒号“:"分隔)。其对于内部(Internal)行为的操作格式略微,例如:new JSONObject()。put(”JSON", ”Hello, World!"),在Key和Value之间是以逗号”,"分隔.Value的类型包括:Boolean、JSONArray、JSONObject、Number、String或者默认值JSONObject。NULL object 。 JSONArray:它代表一组有序的数值。用方括号包裹,数值以逗号“,”分隔把它转换成String输出(toString)作为它的表现的形式。同时这个类的内部也拥有查询行为,通过利用index索引返回g
21、et()和opt()这两种方法指定的数值,添加或者替换数值可以使用put()方法。同样这个类的value类型可以包括:Boolean、JSONArray、JSONObject、Number、String或者默认值JSONObject。NULL object。 5.2。2 Fragment Android是在Android 3。0发布时使用Fragment的。Fragment能够作为Activity当中的一个模块,与Activity相似,Fragment也有活动周期,同时也具有自己的逻辑和视图,并能单独处理自己的输入。Fragment使用起来非常灵活,可以在Activity运行的时候动态装载
22、或者移除Fragment,也可以将Fragment设计成能够在多个Activity中复用的模块。例如搜索栏,在多个Activity中都需要使用,如果是在Activity中编程,那么就需要重复多次的工作编写同样的代码.如果使用Fragment,将搜索栏作为Activity的一个部件引入,那么将搜索栏的逻辑和页面在Fragment中编写一次即可,需要使用搜索栏模块时,Activity只需要在程序中声明引入即可. Fragment必须重写onCreateView()方法,需要在此方法中完成Fragment的逻辑,并且绑定Fragment的View视图。 5.2。3 AsyncTask 客户端和
23、服务端数据交互是整个应用的核心部分,AsyncTask是客户端向服务端请求数据时使用的重要类。Android 4。0版本之后取消了在UI线程进行网络访问的功能,否则会出现 android。os.NetworkOnMainThreadException异常。因此,需要启动一个异步线程完成网络连接方面的操作.在Android的设置中,UI的更新只能在主线程中完成,因此异步处理是不可避免的。在Android系统中完成异步操作的方式有两种:Handler和AsyncTask。 Handler方式需要给每个异步任务创建一个新的Thread线程,任务完成后使用Handler的方法向UI主线程发送
24、消息,UI线程收到消息后就会更新界面,这种方法对于异步操作的控制会非常细致,但同时也导致了一些问题,比如代码结构臃肿,在有多个线程任务运行时,不方便对线程进行精确的控制。因此在新版本中,Android提供了专门的异步任务类android.os.AsyncTask,它的使用方法相对Handler而言更加简单易用,不需要定义线程,只需要按照规则重写AsyncTask类方法就能够完成和Handler同样的功能. 5。2。4 页面设计 Eclipse提供了可视化的UI编辑器,利用XML语言完成元素编写和布局.Activity和Fragment均能定制自己的视图文件。一个视图通常由布局、控件、样式三
25、部分构成. 常用的页面布局方式为:LinearLayout线性布局,RelativeLayout相对布局。LinearLayout是线性布局控件,它包含的子元素会按照横向或纵向的方式排列,按照相对位置来排列各种组件或者其他的容器,内容超过边界时,某些控件将缺失或消失。因此一个纵向线性布局的每一行只能有一个组件或者是容器,而不管它们的宽度是多少,而一个水平线性布局就只会有一个行高。线性布局会保持其子组件或者是子容器之间的间隔以及互相对齐。RelativeLayout布局可以定义其子元素按照相对位置进行布局,因此可以对元素进行任意位置的摆放,因而RelativeLayout比LinearLayo
26、ut的使用灵活性更高。 5.2。5 ListView ListView是应用中最常用的控件之一,它以列表的形式展示数据。基础的ListView控件可以展示文字和图片,还可以给列表中的每个条目绑定点击事件.ListView通常需要三个元素构成:每个条目的视图布局,需要展示的数据和一个数据适配器。适配器实际上就是将数据绑定到ListView的工具,同时,适配器还有自定义列表的功能。有时基础的列表显示是无法满足需求的,若想在列表中添加checkbox、editview等控件,并为这些控件定义事件的话,就必须利用适配器的扩展功能。BaseAdapter是一个基础适配器类,继承此类后可以重写类方法,
27、以此自定义ListView的视图和功能.
5。3。 服务端主要功能部分模块的实现与测试
为了减少底层数据对上层设计的影响,服务端数据库操作部门采用了Hibernate进行设计实现。图5—1所示为本服务端生产的Hibernate文件,每个表都对应一个hbm.xml文件
图5—1 Hibernate文件
其配置信息在hibernate。cfg。xml文件中,具体如下所示:
28、connection.url”>jdbc:mysql://localhost:3306/testtestdb 〈propertyname="connection。username"〉root〈/property〉 〈propertyname=”connection。password"〉123〈/property> 〈propertyname=”connection。driver_class”〉 com。mysql。jdbc。Driver 〈/property〉 〈propertyname=”myeclipse.connection。profile”〉mysql
29、 〈mappingresource=”com/school/express/model/TbAssign.hbm.xml”/> 〈mappingresource=”com/school/express/model/TbExpress.hbm。xml”/〉 〈mappingresource=”com/school/e
30、xpress/model/TbUser.hbm.xml”/〉
31、ervlet
处理与快递分发有关的操作
AppExpressServlet
处理与快递有关的操作
AppGoodServlet
处理与物品有关的操作
AppUserServlet
处理与用户原有关的操作
LoginServlet
处理与快递员登录有关的操作
RegisterServlet
处理与注册有关的操作
Login2Servlet
处理与管理员登录有关的操作
配置信息(以AppAddressServlet为例)如下所示:
〈servlet〉
32、class〉com.wuye。app.servlet。 AppAddressServlet
〈/servlet〉
〈servlet-mapping〉
〈servlet-name> AppAddressServlet 〈/servlet-name>
33、每个不同的URL地址会得到相应不同的内容。当Android客户端需要访问数据时,已经知道需要访问的服务端URL地址,再将参数写入已知的URL格式当中,然后构造HttpGet访问对象,以此来访问服务器,如图5-5所示。 图5-5 客户端和服务器的交互模型 5。4.客户端主要功能部分模块的实现与测试 5。4.1UI实现 客户端UI主要通过ViewPage+Fragment实现,主界面如图5-5所示。该界面中的下方为导航界面,其上方为显示界面。 图5—5 系统主界面 该界面采用Activity+Frameng的架构,具体实现代码如下所示: publicvoid changeFragme
34、nt(intindex)//同时保存每个fragment { FragmentTransaction beginTransaction = fragmentManager.beginTransaction(); hideFragments(beginTransaction); switch (index) { case 0: if(home==null){ home=new FragmentSifu(); beginTransaction。add(R.id.main_content,home); }else{ beginTransaction。show(home); }
35、 break; case 1: if(person==null){ person=new FragmentSifuPersonal(); beginTransaction。add(R.id。main_content,person); }else{ beginTransaction。show(person); } break; default: break; } beginTransaction。commit();//需要提交事务 } privatevoid hideFragments(FragmentTransaction transaction) { if
36、home != null) transaction。hide(home); if (person != null) transaction。hide(person); } 5。4.2登录注册功能 注册时身份证号码仅限数字输入且不为空;需输入两次密码,两次输入必须非空且相同.登陆时验证账号和密码是否正确,不正确则无法登录,如图5—6所示。 图5—6 登录注册页面 5。4。3管理员收件功能 收件功能主要是添加收到的快递,其主要界面如图5—7所示。 图5-7 添加快递 5。4。4管理员分件功能 图5—8所示为管理员分件的主界面,主要查看校园地址以及查
37、看该校园地址下的物品列表。
图5-8分件页面
该功能主要是通过ListView实现,首先从服务端获得所有的通知信息,然后将这些信息绑定到对应的Adapter中,查看分类的关键代码如下所示
privateclass GetExpressTask extends AsyncTask 38、servlet/AppExpressServlet?action=3&addressid=”+params[0]+”&state=0”;
String result = HttpUtil.queryStringForGet(url);
Type listType = new TypeToken 39、ectedvoid onPostExecute(String result) {
super.onPostExecute(result);
expressAdapter。setList(expressList);
expressAdapter。notifyDataSetChanged();
}
}
5。4。5. 查询界面
图5-9所示为查询界面
图5—9快递查询界面
5。4。6快递人员查看功能
图5—10所示快递人员查看自己收到的分发界面,包括待派送、已签收以及退货三个部分。
图5-10快递人员页面
该功能的实现与5。4.3的功能类似,都是通过获得服务端的数据然后通过L 40、istView显示数据。
实现该功能的核心代码如下所示:
privateclass GetDataTask extends AsyncTask 41、 = HttpUtil.queryStringForGet(url);
Type listType = new TypeToken〈List 42、notifyDataSetChanged();
super。onPostExecute(result);
}
}
6。 结论
本课题设计并实现了基于Android的快递管理系统。该系统具有操作简单、安全易扩展、界面简洁大方、使用方便等特点. 通过该系统设计,自己熟悉并掌握了JSP的MVC开发技术,mysql的使用以及网页服务器的部署以及访问。熟悉了Android客户端的开发流程,并掌握了基于JSON格式的服务端和客户端的交互访问。
在这次毕业设计的过程中,由于需要接纳并学习的东西很多,所以不是轻而易举就能够完成的。在研究所涉及的知识的过程中,我花费了相当大的时间与精力。这是本人第 43、一次制作这样一个较为完整的系统,相信仍有许多不足之处有待改进。
参考文献
[1] 陈昱, 江兰帆。 基于Google Android 平台的移动开发研究[J]。 福建电脑, 2008, 24(11).
[2] 杨丰盛。 Android 应用开发揭秘[M]。 北京: 机械工业出版社, 2010
[3] 李宁. Android/ Ophone 开发完全讲义[M]。 北京: 中国水利水电出版社, 2010。
[4] 白文江. 基于Android平台的移动应用开发研究[J].太原大学学报,2011 (03).
[5] 李刚. 疯狂安卓讲义。 北京:电子工业出版社[M], 2012。
[ 44、6] 杨丰盛. Android 应用开发揭秘[M]。 北京: 机械工业出版社, 2010.
[7] 姚昱旻,刘卫国. Android的架构与应用开发研究[J].计算机系统应用, 2008(11).
[8] 蔡罗成。 Android后台监听实现机制浅析[J]。 信息安全与通信保密, 2010(6)。
[9] 王会进, 方锦亮。 基于JAVA 的自定义控件应用技术研究[J] . 微型机与应用, 2005(5)。
[10] 赵亮, 张维。 基于Android技术的界面设计与研究[J] .电脑知识与技术, 2009(29)。
[11] 刘正, 陈强. 基于Android的GPS应用中的研究与 45、开发[J]. 中国西部科技, 2010(32).
[12] 高亮. 基于Android的日历提醒软件的设计与实现[J]. 中原工学院学报, 2011(03)。
[13] 李宁. 实现基于Android的日历系统[J]。 电脑编程技巧与维护, 2011(05)。
[14] 周颖颖, 周波. 基于Android的手机系统信息查看系统的设计[J]。 电脑知识与技术, 2012(18).
[15] 刘仙艳。 移动终端开放平台-Android[J].信息通信技术, 2011(04).
[16] 马建红, 姬莉霞, 卫权岗。 基于Android平台的移动个人助手设计与实现[J]. 现代电子技 46、术, 2012(02)。
致谢语
首先,非常感谢我的母校,xxx学校所有的老师对于我四年来的培养与教导,特别感谢,我本次毕业设计的指导老师xx老师,给予我极大的帮助与辅导,不仅是我在学校计算机方面的启蒙老师,更教会了我许多学习计算机的技巧与方法,使我终身受用。
XX老师渊博的知识、敏锐的学术思想、严谨的教学作风以及平易近人的态度都是我学习的榜样。在毕设期间,xx老师给了我们充分的信任和自主权,让我们充分地发挥个人能力,并给与我们悉心的指导,帮助我们完成课题.在此,对XX老师无私的帮助和教诲表示衷心的感谢。
本次毕业设计,就我而言,是一次对大学期间所学课程的总结,也是一次对许多新技术的尝试。开发系统,就像是在爬山,刚爬完一个山坡,又会遇到下一个山坡,然而,这些被我攀登过山坡就如同设计的经验,逐渐将我扶上最高峰.网站系统的设计使结合了我自己工作方面遇见的各种实际问题,所以能都轻车熟路地理清思路,这些也都要感谢我的启蒙老师对于我的帮助.
万分感谢各位评审的老师在百忙之中能够评阅我的毕业设计,你们的宝贵意见将是我大学四年中的一笔珍贵的财富。
感谢在毕设期间每一位指导我的同学,因为他们的一些观点、方法让我受益匪浅,没有他们的帮助我也不会这么顺利的完成论文。
感谢我的父母,是他们给了我学习的机会,在这十多年的学习生活中,他们一直给我支持和鼓励,感谢父母养育之恩.






