欢迎光临散文网 会员登陆 & 注册

[优秀论文]基于Android的旅游导航APP的设计与实现

2022-05-10 12:42 作者:趣毕业  | 我要投稿

基于Android的旅游导航APP的设计与实现

摘  要

截止目前我国已经建成比较完善的高速铁路系统,交通十分便捷,同时80、90后悄然成为了社会主体他们崇尚自由时尚的生活方式,乐于与人分享自己的生活,喜爱在路途中结交志同道合的朋友而前往全国乃至全球各地旅游正是表达他们鲜活个性的重要方式之一,手机旅游类APP应用而生,观察我们周围的人,旅游类手机应用基本是必备的,因此旅游APP设计具有极其广阔的市场前景。

本文采用了Java语言作为主要的开发语言,并结合安卓系统所能提供的功能,对旅游信息进行了整理与分类,可以方便的查询不同地点、不同时间、不同分类的旅游信息进行展示,用户可以查看旅游的主题、具体的旅游地点、旅游的出发时间、行程、以及旅游的价格,此外还提供了发起此次旅游的俱乐部,可以致电旅游的负责人咨询具体情况。用户还可以浏览不同景点的魅力图片,可以实时了解驴友们在外发回的景点信息,以及他们对这个景点的评价,方便用户更真切的了解这个景点的相关信息,此外,还为用户规划了出行的路线,推荐的景点,还可以使用第三方登陆,发表个人看法和观点等。

 

关键字:数据分类;Android组件冲突处理;旅游;导航

 

 

 

 

 

 

 

 

 

 

Based on the Design and Implementation of Android's Travel Navigation APP

Abstract

So far our country has built more perfect high-speed rail system, the traffic is very convenient, quietly after 80, 90, at the same time is to become the social main body, they advocate free fashionable way of life, to share your life and people, love in the way of making friends. And went to the country and travel around the world is one of the important way to express their lively personality, an APP for mobile travel class, observe the people around us, tourist class mobile APPlication basic is necessary, so the travel APP design has very broad market prospects.

This article used the Java language as the main development language, and combined with the functionality provided by the android system, tourist information for the arrangement and classification, can easily query different locations, different time, different classification of tourism information display, the user can view the theme and specific tourist destination of tourism, tourist's departure time, travel, and tourism, in addition also provides the travel club, can call the travel, the head of the advisory details. Users can also see pictures the charm of different sites, can live more information you trekkers out back to the scenic spots, and their evaluation in the scenic spot, convenient for users to more real understanding of the information about the scenic spots, in addition, also for the user to plan the travel route, the recommended attractions, you can also use the third party and published personal views and opinions, etc.

 

Key Words : data classification ; Android component processing ; tourism conflict ; navigate

 

 

 

 

 

 

 


目  录

1  概论

1.1 研究现状

1.2 系统开发意义

1.3 系统开发背景

2  开发环境以及相关技术

2.1 Eclipse

2.2 Adroid

2.2.1 基本概念

2.2.2 简介

2.2.3 系统架构

2.2.4 四大组件

2.3 Java语言

2.4 SQLite

2.4.1 简介

2.4.2 架构

2.4.3 特点

2.5 FastJson

2.5.1 简介

2.5.2 FastJson解析JSON步骤

3  需求分析

3.1 可行性分析

3.1.1 技术可行性

3.1.2 经济可行性

3.1.3 社会可行性

3.2 功能需求分析

3.3 特性需求分析

4  概要设计

4.1 系统总体功能结构

4.2 系统总体架构

5  详细设计与实现

5.1 系统总体功能设计

5.1.1 服务器端说明

5.1.2 客户端说明

5.2 系统的实现

5.2.1 活动模块

5.2.2 游记模块

5.2.3 导航模块

5.2.4 我的模块

5.3 实现的技术点

5.3.1 界面布局的实现

5.3.2 代码中所用到的技术

6  软件测试

6.1 软件测试的重要性

6.2 测试实例的研究与选择

6.3 系统运行情况

6.4 系统评价

7  总结

参考文献

  

外文原文

中文翻译

 

 


1  概论

1.1 研究现状

随着手机通信技术在近些年的迅猛发展,智能手机时代悄然到来。这是一个新的时代,它改变着我们的生活方式,穿衣人们会去“淘宝”、“京东”足不出户的买到喜欢的衣服,吃的会有“饿了么”等外卖的软件,住又有诸如“58同城”这样的APP应用软件,出行更有“12306”等众多的手机应用帮你订票,订酒店,先进的网络通信和智能手机让我们的生活变得更加便捷,移动手机端的网络用户人数早已经超越其他方式上网人数,有用户就会有市场,这是一个崭新的通信时代。

手机的操作系统,Android与IOS占据了绝大部分,由于IOS只应用于苹果手机,因此Android系统是应用最为广泛的移动端操作系统,它是开源的,系统整体也是开放的,更新比较快,操作简单,用户界面友好型在不断进步,正是因为这些其他系统不具备的优点,Android毫无疑问的成为了手机端操作系统的第一。

80、90后正在爱上旅行,在我的针对大学生是否愿意外出旅游的问卷调查中,只有极少数的人表示不愿意出行旅游,绝大多数人表示会在每年的起码有两次出行旅游的计划。另外有关调查也证实,年轻人出行更愿意自由自主结伴而行,在人数上以2到7人居多,其中可能有人是素未谋面,主要依靠网络交流沟通,不是很愿意集体报团出行。

我们与他人的认识往往是通过一个班,一个学校,一个社团、一个公司等等的一个个的小圈子互相了解,这样的认识方式有着很大的局限性,你不知道你是否会遇到和你一样喜欢旅行的人,旅游APP的出行正好解决这个问题,人们在这里交流,写下自己的心得体会,可以结伴出行,可以给还没出行旅游准备去的人建议,甚至于大家可以在路上进行交流,这样的应用极大程度的减少了我们自己去筛选朋友去旅行的时间,给了喜欢旅行的人们一片快捷交流的乐土。

1.2 系统开发意义

我们可以看到,周边的智能手机越来越多的出现,几乎已经成为了年轻人的必需物品,这个比例还在不断的增大,与此同时4G已经是全面进入了我们的生活,用户的需求越来越多要求越来越高,正是在这样的大的时代背景下,各种应用软件开始进入手机市场,并且日益成为互动娱乐的焦点。

我国的旅游业有着极其广阔的市场,旅游已经成为了大多数家庭每年的假期必备的活动之一,各个旅游景点的收入几何式良性增长,景区投入不断增多,基础设施不断得到改善,给了游客更加美好的旅游体验,进一步吸引着游客的到来,这是一种良性的增长,旅游市场必将继续长期健康发展,中国的旅游人数规模每一年都在创造新的记录,这得益于我们的国家的迅猛进步,全世界都在争夺中国的游客,优惠措施不断,目前出境游也是比较普遍的一种旅游方式。

因此,旅游业的迅猛发展是的传统的人工导游方式不在能满足新时代用户的多元化需求,长期以来游客在景点旅游时只能是走马观花,对景点信息了解甚少,并且对于一些外来游客可能会由于语言障碍而导致旅游质量下降。于是,基于上述种种,旅游导航APP也成为了现在炙手可热的手机APP之一。

本设计是为实现一个方便用户出行的目的。具体而言,本设计可以推荐旅游景点,浏览驴友们在野外徒步的场景,通过导航信息,用户可以方便的了解一个景点的特色,最近的活动,有没优惠价,以及根据时间分类,可以准确的推荐最近一段时间的旅游团动向,并附有旅游团的联系方式,方便用户直接用电话进行咨询,再确定是否参加本次活动;在此基础上,根据数据源的数据结构以及字段分析,把旅游的信息按地点进行分类,每个城市的旅游信息直观的展现在用户的面前,并且将旅游的类型进行了汇总,冒险类、休闲类、娱乐类等丰富信息供用户选择,此外也考虑到了用户的经济承受能力,所以,还实现了根据本次旅游的价格信息进行进一步整合,可以让用户很直观并且很快得找见适合自己经济承受能力的旅游景点。当然,光有这些信息是完全不够的,用户之间最好能进行互动,交流旅游心得,欣赏对方去过的地方,还可以进行点赞,要实现这个功能,当然离不开第三方登陆,微博、QQ可以任意选择,在登陆成功后可以对个人信息进行查看与设置,拥有这些功能,符合广大用户的需求,这也是我做这个软件的初衷。

1.3 系统开发背景

近些年来,手机有关于旅游的智能应用在旅游人群中的使用越来越普遍,整个旅游业,在这种大背景的情况下,已经进入了一个手机客户端时代,这里面的原因显而易见,相比传统的旅游营销形式,它的成本相对低廉,给游客更加直观的体验,旅游资源丰富,所展示的旅游资源更便于被游客接受选择。我们现在看国内目前的情况,途牛旅游,阿里旅行等等众多APP已经在线上有了不俗的表现,这个市场正在蓬勃发展,前景非常好。面对众多的旅游类APP,我们开发的应用软件有着残酷的竞争环境,为了让我们的应用有一席之地,这就要求我们必须严把软件质量关,优化界面,提供便捷的功能,也需要后期推广工作的跟进。下面我们来谈论一下我国有关旅游的APP的几种类型:

1.导游类

导游类可以说是旅游类APP中最多的类型之一,应用及其广泛,它拥有着很强大的功能,可以为游客提供导航、查看地图、语音助手等多种帮助,甚至有一部分APP拥有规划出行行程的功能。我们以“澳门旅游导览”智能手机为例,游客在使用时,只需要将摄像头对准周围建筑,就可以得到景点、饭店、交通方式等信息在屏幕上,此时游客可以选择查看需要的详细信息;还有以“图读世界”为特色的FotoPedia,他们聘用专业的摄影师,在每一个城市中取景、拍摄,进而进行图片的整理和分类,这样,游客就可以在家里完善自己的APP上有的城市的旅游行程。当然这些手机应用软件都是需要部署在智能手机之上的。

2.工具类

工具类APP相比其他主要类型,数量比较少,它针对特殊的一类游客,用以满足游客的特别需求,因为它的功能单一,所以推广范围偏小。例如,蜗牛科技的“旅游翻译随我行”,这个APP可以为用户提供翻译的服务,针对的是所在旅游地区的外语、方言等,便于游客的异乡交流,作为游客的工具存在。又例如百度推出多年的“百度地图”,可以为游客提供地铁公交等不同的出行路线、方式,简单易用,可以为我们在旅行中避免很多的麻烦。

3.预定类

预定类旅游APP是经常出差,商务人士的必备软件,同时也是很多游客所必需的旅游APP,可以十分便捷的解决用户的的住、行两大问题,提供火车、飞机等不同出行方式,便捷购票,也可以 让我们便捷的预定酒店。这类APP的突出优势就是它的网络预定服务,为用户解决了主要的问题。这类APP也是占据了主要的市场,携程旅行APP、艺龙等手机应用就是他们的突出代表,它们与航空公司、铁路部门等合作,提供了便捷的出行方式,它们与众多连锁酒店合作,长期提供高中低各种酒店的预定服务,无论是对于酒店还是游客都提供了极大的便利。

4.分享类

当前的网络中,社交网络是最具影响力的,没有之一。什么都离不开社交网络的曝光和推广。第四大类旅游APP我们就来说说分享类APP,它是旅行与社交结合的产物,这类APP提供了不同时期不同地区的游客对于特定旅游地的不同感觉,给别人提供一种参考,也可以是一种心得的分享,类似于在朋友圈的秀生活。它们把拥有同样爱好旅行和社交的人都聚集在一起,给人们以交流空间。这里以“面包旅行APP”为例,它可以获取游客的GPS定位记录以及所拍照片的位置,软件将会帮我们把足迹连接起来,得到完整的足迹,也可以生成照片墙,带有时间轴,当然也就可以为其他有兴趣的游客实现直播一路的风景。这类APP还在发展中,数量不是特别多,但是用户不易流失,因为他们都是社交与旅行的共同爱好者。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2  开发环境以及相关技术

2.1 Eclipse

开发环境对于Android开发来说那一定是非常重要且必不可少的一项。我所使用的开发环境就是在Eclipse中配置了一下JDK的环境变量,然后还需要配置SDK(Software Development Kit)和ADT(Android Development Tools),从而搭建起开发Android所需要的环境。

Eclipse 是一个跨平台的自由的集成性的软件开发环境(IDE),是一个开放源代码的、基于Java的可扩展开发平台。它是一个框架以及一组服务,可以构建我们所需要的开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。很多程序员喜欢把 Eclipse 视为 Java 开发环境(IDE),然而Ecplicse的功能却完全不止这些而已。它还提供了插件的开发环境(PDE),软件的开发相关人员可以使用这个来进行功能的扩展。

SDK简介:SDK提供了在Windows/Linux等系统下开发Android软件的组件,Android支持的所有平台,其包含了在Android平台上开发移动应用的各种工具集。SDK的基础语言是Java,Android软件应用可以在此基础上进行开发。

ADT简介:在IED中建立安卓应用的插件,它扩展了极其丰富的功能,使得Eclipse更加实用,更加方便的创建一个APP的用户界面。

在SDK与ADT的配置全部成功之后,Android应用程序就可以正式开始进行了。

2.2 Adroid

2.2.1 基本概念

Android在英文中译为“机器人”,它是一个应用于移动端手机的操作系统,也就是中文所说的安卓,安卓系统改革了手机的使用方式,触摸屏开始广泛被使用。于互联网的推广起到了极大的推进作用。众所周知Android,实际上是由java语言编写而成,在面向对象方面,更易操作,使用的门槛特别低,这就为安卓的应用开发以及推广都提供了极大极大的便利。

2.2.2 简介

Android系统有以下5个特点:

1.开放性。

2.应用程序无界限。

3.应用程序方便扩展。

4.应用程序可以更便于嵌入接口。

5.应用程序可以并行运行。

2.2.3 系统架构

Android SDK是由内核层、运行层、框架层以及应用层组成:

1.应用层:使用仿真器运行java程序。

2.框架层:简化开发过程,规范开发的设计过程。

3.运行层:在运行时可以通过一些不同的库使得不同的组件可以更好的运行,进而更好的为我们服务。

4.内核层:是Linux内核搭载下的Android的核心系统服务。

图2-1 Android系统架构图


2.2.4 四大组件

Android系统有四大组件,它们是安卓系统上实现对应用程序的实例化所必需的部分,下面我们分别来看:

1Activity

为Java开发的应用程序提供一个可视化的,可以提供给用户的界面。

2Service

后台运行的,持续伴随用户使用的服务,service可以在用户使用时提供其他服务。

3 Broadcast Receiver

接收响应通知,特殊一类型的组件,它不包含任何的用户界面。

4Content Provider

这是由Android提供的一种标准的、可以共享数据的机制。

2.3 Java语言

Java的编程语言风格,十分接近C、C++语言。从它诞生以来就由于它的简单易学的特性而饱受喜爱,而且它又是面向对象的语言,帮助程序员简化了很多问题,跨平台的特性更是具有极大的现实意义,自带了垃圾回收机制,使得操作得到简化,因为它拥有的这些众多优点,java语言应用十分广泛。

2.4 SQLite

2.4.1 简介

SQLite是一个开源的嵌入式关系数据库。它是D. RichardHipp建立的公有领域项目。数据库应用广泛,也是应用最广泛的数据库操作系统之一,要求硬件环境低,操作简单,易于管理,容易嵌入到软件中。

2.4.2 架构

SQLite架构由四个子系统构成:

1.接口(Interface)

2.编译器(Compiler)

3.虚拟机(Virtual Machine)

4.后端(Back-End)

2.4.3 特点

1.零配置(Zero Configuration)

2.可移植(Portability)

它是运行在Windows,Linux,BSD,Mac OS X和一些商用Unix系统,比如Sun的Solaris,IBM的AIX,同样,它也可以工作在许多嵌入式操作系统下,比如QNX,VxWorks,Palm OS, Symbin和Windows CE。

3、小而紧凑(Compactness)

SQLite是被设计成轻量级,自包含的。

4、简单(Simplicity)

5、灵活(Flexibility)

6、可靠(Reliability)

SQLite采用模块化的编码方式,因此语句比较可靠,也比较容易让人认知。

2.5 FastJson

2.5.1 简介

    阿里巴巴的FastJson是一个Json处理工具包,包括“序列化”和“反序列化”两部分,它具备如下特征:

1、速度最快:

测试表明,Fastjson具有极快的性能,超越任何其他的Java Json parser。包括自称最快的JackJson;

    2、功能强大:

完全支持Java Bean、集合、Map、日期、Enum(枚举);支持范型,支持自省;无依赖,能够直接运行在Java SE 5.0以上版本;支持Android;

Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。

public static final Object parse(String text); // 把JSON文本parse为JSONObject或者JSONArray

public static final JSONObject parseObject(String text); // 把JSON文本parse成JSONObject    

public static final  T parseObject(String text, Class clazz); // 把JSON文本parse为JavaBean

public static final JSONArray parseArray(String text); // 把JSON文本parse成JSONArray

public static final  List parseArray(String text, Class clazz); //把JSON文本parse成JavaBean集合

public static final String toJSONString(Object object); // 将JavaBean序列化为JSON文本

public static final String toJSONString(Object object, boolean prettyFormat); // 将JavaBean序列化为带格式的JSON文本

public static final Object toJSON(Object javaObject); 将JavaBean转换为JSONObject或者JSONArray。

2.5.2 FastJson解析JSON步骤

A、服务器端将数据转换成json字符串

首先,服务器端项目要导入阿里巴巴的fastjson的jar包至builtPath路径下;

图2-2 fastjson的jar包


然后将数据转为json字符串,核心函数是:

        public static String createJsonString(Object value)

             {

                 String alibabaJson = JSON.toJSONString(value);

                 return alibabaJson;

             }

B、客户端将json字符串转换为相应的javaBean

1、客户端获取json字符串

public class HttpUtil

      {

          public static String getJsonContent(String urlStr)

          {

              try

              {// 获取HttpURLConnection连接对象

                  URL url = new URL(urlStr);

                  HttpURLConnection httpConn = (HttpURLConnection) url

                          .openConnection();

                  // 设置连接属性

                  httpConn.setConnectTimeout(3000);

                  httpConn.setDoInput(true);

                  httpConn.setRequestMethod("GET");

                  // 获取相应码

                  int respCode = httpConn.getResponseCode();

                  if (respCode == 200)

                  {

                      return ConvertStream2Json(httpConn.getInputStream());

                  }

              }

              catch (MalformedURLException e)

              {

                  // TODO Auto-generated catch block

                  e.printStackTrace();

              }

              catch (IOException e)

              {

                  // TODO Auto-generated catch block

                  e.printStackTrace();

              }

              return "";

          }

    

          private static String ConvertStream2Json(InputStream inputStream)

          {

              String jsonStr = "";

              // ByteArrayOutputStream相当于内存输出流

              ByteArrayOutputStream out = new ByteArrayOutputStream();

              byte[] buffer = new byte[1024];

              int len = 0;

              // 将输入流转移到内存输出流中

              try

         {

                  while ((len = inputStream.read(buffer, 0, buffer.length)) != -1)

                  {

                      out.write(buffer, 0, len);

                  }

                  // 将内存流转换为字符串

                  jsonStr = new String(out.toByteArray());

              }

              catch (IOException e)

              {

                  // TODO Auto-generated catch block

                  e.printStackTrace();

              }

              return jsonStr;

          }

 }

2、使用泛型获取javaBean(核心函数)

          public static T getPerson(String jsonString, Class cls) {

              T t = null;

              try {

                  t = JSON.parseObject(jsonString, cls);

              } catch (Exception e) {

                  // TODO: handle exception

              }

              return t;

          }

 public static List getPersons(String jsonString, Class cls) {

              List list = new ArrayList();

              try {

                  list = JSON.parseArray(jsonString, cls);

              } catch (Exception e) {

              }

              return list;

          }

 public static List> listKeyMaps(String jsonString) {

              List> list = new ArrayList>();

              try {

                   list = JSON.parseObject(jsonString,

                          new TypeReference>>() {

                  });

              } catch (Exception e) {

                  // TODO: handle exception

              }

              return list;

          }

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3  需求分析

系统分析的真正含义就是对系统,从技术可行性、经济可行性以及操作可行性来进行分析。

3.1 可行性分析

在这里就依次从技术的、经济的、社会的可行性三个方面来对本旅游导航APP进行深入的分析和研究。

3.1.1 技术可行性

该软件是基于Java语言、并以SQLite为后台数据库。硬件、软件的性能要求、环境条件等各项条件均良好。利用现有技术条件预计完全可以达到该软件的功能目标。时间安排相对比较充裕,预计完成没有问题。

由以上分析可以知道:本设计是具有技术可行性的。

3.1.2 经济可行性

本设计采用的开发软件都是开源的,不需用额外花费费用,这样削减很多的精力和资源,起到减少成本的作用,因此在经济上具有可行性。

由以上分析可以知道:本设计具有经济的可行性。

3.1.3 社会可行性

本设计的社会可行性主要需要从法律因素、用户使用可行性这两方面进行研究。

1.法律因素

本设计是根据80、90的青年人旅行的实际情况开发研制的,是通过大量的调研得出的,系统的软件设计是在独立的环境下完成的,无可供抄袭的软件产品。

2.用户使用可行性

本设计对用户的要求,除了需要具备移动设备以及第三方账号外,并不需要特别的技术能力。使用系统的管理员,需要具备对java语言及Android开发环境的使用能力,在投入使用前,无需对操作系统的人员进行培训。这样减少了投入成本简化了操作环节。

由以上分析可以知道:本设计完全具有社会的可行性。

3.2 功能需求分析

Android系统目前在市场上占有很大的份额,从2010前Android就已经呈现出很强劲的发展势头,而且到目前为止,还处于不断的上升阶段。无论你走在大街上、校园里、地铁上亦或是公交上,总能看到人们拿着智能手机专心致志的做自己的事情,而且不难发现,绝大多数都是Android手机,人们低头聚精会神的玩游戏、看小说、刷刷微博等等。手机中安装的各种APP可以丰富并且满足人们对业余生活的要求以及期望,其中的游戏娱乐、在线购物也是极大的刺激着整个社会的消费水平。随着时代的不断发展,兼娱乐与通信功能的手机越发的流行,成为人们的一种新的追求。因而,这就更进一步的促进激发着手机软件APP研发人员的热情与积极性。

综上,本设计是为了实现一个方便用户出行,并可以推荐旅游景点的目标。用户可以通过浏览驴友们在野外徒步旅行是的场景,全方位的了解自己想要去的景点。通过展示的信息,用户可以方便的了解一个景点的人文特色,最近是否有活动,是否拥有优惠价,以及根据时间分类,可以准确的推荐最近一段时间的旅游团动向,并附有旅游团的联系方式,方便用户直接用电话进行咨询,从而来确定是否参加本次活动;并且在此基础上,根据数据源的数据结构以及字段分析,把旅游的信息按地点进行一些分类,每个城市的旅游信息就可以直观的展现在用户的面前,并且将旅游的类型进行了汇总,冒险类、休闲类、娱乐类等丰富的信息以供用户选择,此外也考虑到了用户的经济承受能力,还实现了根据本次旅游的价格信息进行进一步的整合,可以让用户更加直观并且很快的找见适合自己经济承受能力的旅游景点。当然,光有这些信息是远远不够的,用户之间最好能够进行互动,互相交流旅游心得,欣赏了解对方去过的地方,还可以进行点赞,要想实现这个功能,当然是离不开第三方登陆的,微博、QQ可以任意选择,因而就要求用户必须要拥有一个属于自己的第三方的账号,在登陆成功后可以对个人信息进行查看。

3.3 特性需求分析

一个较好的软件应该具有以下特性:

1、易操作和功能简单明确。一个好的旅游导航系统应该功能明确,用户可以很快的熟悉使用流程,而不是看到界面不知道应该如何的操作,即操作要简单,界面友好易懂。

2、软件功能流畅。软件运行时候不会发生崩溃和卡顿等问题,整个界面操作起来快捷流畅。

3、软件易维护性。系统各个设计模块明确,核心代码要有必要的注释,方便软件的后期维护。

 

 


4  概要设计

概要设计是软件开发周期过程中最重要的部分之一,具有极强的指导性,是最为重要的技术型文档。

本设计主要是应用于整个80、90后的旅游管理,所以对于实际中不同爱好的用户,在本设计中基本都有着对应其不同的页面,即虽然不同的用户拥有不同的功能,但是互相之间是有联系的,不可独立,从而体现了该软件的完整性。

通过对旅游大巷系统的需求分析,了解了系统的总体功能结构和模块,以及各个模块要实现什么功能,以下介绍了系统的总体功能模块和系统总体架构。

4.1 系统总体功能结构

通过对旅游导航的需求分析,了解了本系统的基本逻辑结构和功能。本系统实现了4个功能模块,分别是活动、游记、导航、我的四部分。系统功能模块图如图4-1所示。

图4-1系统设计图


4.2 系统总体架构

旅游导航的设计和实现的工作模式是客户-服务器模式。服务端在服务器上运行,服务端是各个景点的展示平台,本文中设计的旅游导航APP则属于客户端, 是基于Android手机平台的,使用了徒步去旅行tubu.ibuzhai.com的api接口,以及百度地图SDK。

在实现本设计的过程中,我主要是使用服务、 网络和客户三部分构成, 其中服务器由请求数据的服务器和中间服务器构成, 网络主要有Internet、 3G/WLAN构成。详细了解徒步去旅行和百度地图的查询接口, 并获得授权访问。另一方面, 必须很好的设计客户软件和中间服务器间的访问接口, 此外, 在客户软件在提供的用户使用时, 我们必须建立好中间服务器。目前考虑到实际需要, 中间的服务器没有自己设计, 选择了徒步去旅行和百度地图来实现我们的系统。

 


5  详细设计与实现

5.1 系统总体功能设计

5.1.1 服务器端说明

服务器端是负责数据的获取和对外提供接口的,服务器端的数据是会定时进行更新的,同时也会对获取的数据进行简单的分类与整合。例如:在空间里评论别人消息的具体过程为:服务器端提供评论接口,让用户可以进行评论,客户端将用户的评论信息进行提交,同时会提醒用户是否已提交成功。而服务器端接收用户的提交请求后,获取用户的评论信息,同时又对外提供一个显示不同用户评论信息的接口。然后客户端进行刷新,这样用户便可看到自己以及其他人的评论信息内容。

除此之外,由于安卓的智能手机型号较多又十分的繁杂。所以,安卓应用的屏幕适配一直是一个较为头疼的问题。服务器端进行配合是十分必要的。客户端可以获取不同手机的屏幕尺寸和分辨率,并将这些信息提交到服务器端,服务器端会根据不同型号手机不同的分辨率信息,并且向客户端返回不同大小不同分辨率的图片,进行屏幕的自适应。

5.1.2 客户端说明

客户端的主要工作是对数据进行处理与分类,然后进行信息的展示,可以让用户直观的查看各种服务。服务器端虽然对整体数据有一定的分类和归纳,但那仅仅是相对于计算机而言(根据字段或者关键字进行的分类),客户端的灵魂是有良好的用户体验,因而服务器端的数据分类是远远不能满足实际用户操作的需求的,而这些数据的处理,就是在客户端进行的。

用户不但可以查看当前的旅游信息,在游记模块中,专门为用户做了一个信息的筛选和推荐功能的推荐小组,进入这个推荐便是全国各地中热门的旅游景点,包括对这些景点的详细介绍,当然还会推荐适合的人群类型,让真正的爱好者找到自己真正想要去的地方,领略每个地方的美丽。

5.2 系统的实现

运行本设计,首先你会进入到主页面:

本设计大致分为4个模块:活动模块、游记模块、导航模块、我的模块。每个模块各有自己的特点。


图5-1整体界面图


5.2.1 活动模块

相比即将介绍到的推荐模块这个以游客信息为主的模块,活动模块则更多是官方发布的信息,信息的分类更多而且更加全面。活动模块可以分为两个层次:第一个层次为官方分类的信息,有八种分类,分别为全部、周末活动、长线活动、摄影、入门、进阶、雪山、培训这八项,各种包含有不同特色的旅游以及时间段的区分,目的是更方便用户的出行。第二个层次则是具体的信息,提供的参考字段主要有:景点信息的简要描述description、所属的类型type、具体的位置信息place、出发的时间starttime、行程的天数duration、出行的费用price、所属的发布单位club、景点的插图picture、是否属于热门景点ishot、是否处于特惠时间段内islow等,这个层次是对景点的直观展示,以便用户对景点了解更加深刻。


图5-2活动模块图

 


5.2.2 游记模块

从名字就可以知道,游记模块侧重于介绍各种出行信息,这些数据信息都是进行分类罗列出来的,也是最近一段时间的信息,在游记这个模块中,又详细的分为直播和推荐两个模块,以下是这两个小模块的单独介绍:

5.2.2.1 推荐模块

在推荐模块中,主要包含这几个字段:景点的简要描述description,旅游的出发时间starttime,总共花费的时间duration,图文的发表人user,用户设置的个人头像head,点赞的数量number,评论的数量comments,被查看的人次people,景点的图片pictures,此处景点是否处于热门ishot,以上字段大致的介绍了景点的基本信息,也满足了用户了解景点信息的基本需求,在用户感兴趣时可以进一步查看其详细:

 

图5-3推荐



图5-4推荐详图


在推荐的详细信息内,除了包含以上字段信息外,还记录了用户每天的出行计划,以及当前游玩的心得等,你可以进行评论和点赞。

5.2.2.2 直播模块

直播模块是最近一段时间内的出行信息,一周前,各个月前等等都有可能,直播则是相对于其而进行设计的,它是用户出行的实时信息,也许就是此时此刻的游玩信息,它的时间跨度只有几天,一半是不会超过一周。

 

图5-5直播模块图


 

在此模块中,包含的字段信息有:用户名name,用户头像head,更新的图片数量picturenumber,更新的时间updatetime,更新的图片pictures,更新的地点place,更新状态的描述description等,由于用户主要针对80、90的年龄,所以这种设计是基于比较熟悉的QQ空间模式的,目的是为了用户之间良好的互动交流能力。

 

图5-6直播详情图


直播详情中,侧重于图片的展示,你从中可以看出,这些图片完全是从一个游客的角度拍摄的,更具备真实性,将此信息进行展示的目的是为了防止某些景点用虚假的景点图片将游骗至其景点,这样的话游客行至此处时完全是和图片信息是相符的。

5.2.3 导航模块

导航模块主要是用于外出旅行时起导航作用的。由于百度地图是开源的并且有例子可以参考,所以在这个模块,就直接在我的Android项目中调用百度地图,来实现定位以及导航的功能。

百度地图 的Android SDK是一套基于Android 2.1及以上版本设备的应用程序接口。在运用的过程中该套 SDK开发适用于Android系统移动设备的地图应用。通过调用地图SDK接口,使用者就可以很顺利的调用百度地图服务和数据,构建功能丰富、交互性强的LBS(地图类)应用程序。百度地图Android SDK提供的所有服务是免费的,接口使用无次数限制。所以如果想要使用它,只需申请密钥(key)后,即可使用了。

图5-7定位           

图5-8目的地输入图

 


图5-9导航页面图


5.2.4 我的模块

我的模块主要是个人信息的设置,这个主要是涉及到了第三方登陆,而所谓的第三方登陆,就是借助于国内国外拥有得到庞大用户量的平台,如Facebook、腾讯QQ、微博、人人、微信等等的平台。实现方式主要是借助于第三方的shareSDK,然后根据接口文档,下载完SDK后,即可以实现第三方平台的登陆操作。具体的登陆界面效果图如下:

图5-10用户登录图


在当游客以自己的账号成功的登陆以后,登陆的界面就会显示游客在第三方平台上的游客昵称,以及游客的头像,还有粉丝和关注的信息则是使用本APP上用户之间的互粉与关注,在通知栏里信息是用户在浏览景点时与其他用户交流信息,或者预定了某个景点的信息。路线栏里包括用户自己在出行时对路线进行的标记,包括去过的地方和想去的地方。活动信息是用户在本APP上预定过的景点信息,以及参加过什么样的团体活动等等。点赞信息栏则是汇总用户自己对看到的其他用户所发布的游记或者图片点赞后的消息统计集合。

图5-11用户成功登陆图



综上所述,所有本设计上的功能点就基本介绍完毕了,实现的初衷是为了方便用户的使用。所以,本设计的侧重点在于信息的分类与展示,用户之间的交流,咨询活动的组织者以及对特定地点的查询导航的功能等。

5.3 实现的技术点

5.3.1 界面布局的实现

首先,进入程序的首页为一个activity,这个activity整体上是一个垂直的LinearLayout(线性布局),在这个布局中又划分为上下两个布局,上面布局用于承载活动、游记、导航、我的这四个模块的fragment,activity的下面放置了一个radiogroup组,在radiogroup组里放置了四个radiobutton,这四个button分别对应活动、游记、导航、我的这四个信息。

    <LinearLayout

        android:id="@+id/ll_main_layout"

        android:layout_width="match_parent"

        android:layout_height="match_parent"

        android:gravity="bottom"

        android:orientation="vertical" >

        <FrameLayout

            android:id="@+id/fragments_container"

            android:layout_width="match_parent"

            android:layout_height="0dp"

            android:layout_weight="1" >

        </FrameLayout>

        <RadioGroup

            android:id="@+id/rg_bottom"

            android:layout_width="match_parent"

            android:layout_height="wrap_content"

            android:background="#f6f5ec"

            android:gravity="center"

            android:orientation="horizontal" >

            <RadioButton

                android:id="@+id/rb_onlive"

                style="@style/bottom_five_button"

                android:drawableTop="@drawable/bottom_activity"

                android:text="活动" />

            <RadioButton

                android:id="@+id/rb_recommend"

                style="@style/bottom_five_button"

                android:checked="true"

                android:drawableTop="@drawable/bottom_travel"

                android:text="游记" />

            <RadioButton

                android:id="@+id/radioButton3"

                style="@style/bottom_five_button"

                android:drawableTop="@drawable/bottom_route"

                android:text="导航" />

            <RadioButton

                android:id="@+id/radioButton4"

                style="@style/bottom_five_button"

                android:drawableTop="@drawable/bottom_mine"

                android:text="我的" />

        </RadioGroup>

    </LinearLayout>

    <LinearLayout

        android:id="@+id/ll_cover"

        android:layout_width="match_parent"

        android:layout_height="match_parent"

        android:visibility="gone"

        android:orientation="vertical"

        android:background="#a0000000" >

</LinearLayout>

5.3.1.1 活动模块布局的实现

活动模块的一级界面大致可以分为三个部分。

第一部分是水平的LinearLayout:最左边是一个ImageView,里面放置一个图片信息,然后是一个地点的分类信息,最后边放置一个ImageButton,用于搜索的点击按钮。

第二个部分是分类信息的展示,采用的是Android中的GridView控件,它可以指定每行放置图片的个数,以及横行纵行图片的间距。

第三部分是一个ListView,它的每个Item元素复用同一个布局,他可以加载一批具有不同内容但有相同的布局的元素,在每个布局中主要采用的是线性布局,这种布局的优点在于不容易变形,对与不同屏幕可以进行很好的适配。

5.3.1.2 游记模块布局的实现

在游记模块中,分为三个布局,上面的LinearLayout是显示当前处的模块,第二部分又是一个RadioGroup组,里面放置两个RadioButton,分别显示直播、推荐这两个子模块,以保证当前只能选中一个子模块;第三部分是一个可以左右滑动的ViewPager,在Viewpager中又放置了两个fragment,在两个子fragment中分别放置了一个ListView,用于承载显示的具体信息,直播和推荐两个子模块除了每个Item的布局不同外,其余布局都基本相同。

5.3.1.3 导航模块布局的实现

在导航模块的布局过程中,既有自己位置定位的布局,也有搜索目的地的页面布局。在编写定位页面的代码过程中,当然要先申请一个百度地图API,下载过程是比较顺利的。其中最主要的申请百度的API Key,这就要求要用本机的Eclipse的SHA1指纹以及自己项目的包名,当然由于你的Eclipse中显示的指纹肯定和我的是不一样的,所以否则申请到的key也没有用。当然在编码之前还是需要先将百度地图Android版的SDK准备好。Libs目录是专门用来存放第三方jar包的地方,而armeabi目录则是专门用来存放压缩包中so文件的地方。So文件是用c或c++语言进行编写,然后再用NDK编译出来的。而libBaiduMapSDK_v2_3_1.so这个文件已经由百度帮助我们编译好了,因此直接放到armeabi目录就可以使用了。然后就可以开始编写这个页面了。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical" >

    <LinearLayout

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:background="#33B5E5" >

        <ImageView

            android:id="@+id/iv_activity_logo"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:padding="8dp"

            android:src="@drawable/icon_titlebar" />

        <TextView

            android:id="@+id/tv_activity_country"

            android:layout_width="wrap_content"

            android:layout_height="match_parent"

            android:gravity="center"

            android:padding="8dp"

            android:text="导航"

            android:textColor="#fffffb"

            android:textSize="20sp" />

    </LinearLayout>

<LinearLayout

    android:orientation="vertical" android:layout_width="match_parent"

    android:layout_height="match_parent">

    <LinearLayout

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:orientation="horizontal">

        <Button

            android:id="@+id/locate"

            android:text="定位"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:layout_weight="1"/>

        <Button

            android:id="@+id/navi"

            android:text="导航"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:layout_weight="1"/>

    </LinearLayout>

    <com.baidu.mapapi.map.MapView

        android:id="@+id/bmapView"

        android:layout_width="fill_parent"

        android:layout_height="fill_parent"

        android:clickable="true" />

</LinearLayout>

</LinearLayout>

5.3.1.4 我的模块布局的实现

 我的模块主要是分为两个布局,上面是一个linearlayout,里面放置的一个imageView,用户显示用户未登录是的头像图片,下面的一个linearlayout,里面则是放置的两个textView,用于实现第三方登陆。

这样页面布局就基本介绍完毕了

5.3.2 代码中所用到的技术

在实际实现各项功能的过程中,毫无疑问的遇到了很多问题,Android中解决事件之间的冲突尤为重要,而且不同的功能点进行组合时还会遇到很多问题,以下是遇到并解决的技术点。

5.3.2.1 活动模块

1.滑动冲突的解决:在活动模块中用到的Android控件有Viewpager、Gridview、Listview,这三个控件为上中下三个层次的,他们三个要实现一起联动就要在外层套一个Scrollview,即同时上滑或者同时下滑,其中Gridview和Listview这两个控件本身就在数据加载过多时就能滑动,它的父View Scrollview也是可以滑动的,所以会起冲突,具体表现为Gridview和ListView显示的数据不全问题,解决的办法是重写Gridview和Listview中的OnMersure()方法,让其重新计算下数据的高度,便可解决此类冲突。

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

// TODO Auto-generated method stub

int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,

MeasureSpec.AT_MOST);

super.onMeasure(widthMeasureSpec, expandSpec);

}

public boolean dispatchTouchEvent(MotionEvent ev) {

if (ev.getAction() == MotionEvent.ACTION_MOVE) {

return true;

}

return super.dispatchTouchEvent(ev);

}

}

2.Popupwindow与Listview之间的绑定:在实现地点的切换时,Listview中的数据要跟着地点的不同展示当前选中地点的信息,地址栏的展示使用的是Popupwindow,要想实现这种效果就必须把Popupwindow的点击事件与Listview进行绑定,要实现的方法时设置点击事件OnClickListener,Android中的点击事件类似于C语言的接口回调技术。

popup1.setBackgroundDrawable(drawables);

popup1.setOutsideTouchable(true);

popup1.setFocusable(true);

llFirst.setOnClickListener(this);

3.不同界面之间的传值:在活动模块一级界面与二级界面跳转的过程中涉及到数据的传递,Android中有一种跳转机制为Intent,它可以携带数据信息,具体代码为:

Intent intent=new Intent(this,MainActivity.class); intent.putExtra(“value”,1);

startActivity(intent);这样便可以实现界面与界面之间的跳转,并且携带跳转时数据信息。

5.3.2.2 游记模块

1.界面的刷新:在这个模块中比较重视数据的实时性,所获得的数据必须要最新的,这就需要对界面的数据进行刷新,Android在不断的改进发展过程中已经有了很好的刷新控件,但是在这里我仍然使用的是第三方的可刷新库,PulltoRefresh,它的基本原理也是重写Android源码,在刷新时经常遇到的问题是刷新回不去,一直在刷新的情况,经过摸索,解决的办法是在Android中的Handler机制中执行刷新的回调方法。

public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {

// TODO Auto-generated method stub

if (currrentPage <= totalPage) {

ExecutorService service = Executors.newSingleThreadExecutor();

service.execute(new Runnable() {

@Override

public void run() {

// TODO Auto-generated method stub

currrentPage++;

String url = APPConfig.RECOMMENDHEAD + currrentPage

+ APPConfig.RECOMMENDEND;

UpdateData(url);

handler1.sendEmptyMessage(1);

}

});

} else {

Toast.makeText(getActivity(), "已加载全部!", Toast.LENGTH_LONG).show();

}

}

2.Listview每个Item点击事件的冲突处理:由于Listview每个Item复用一个布局,在点击一个按钮时会起冲突,解决的办法是在BaseAdapter适配器中对每个点击事件进行处理。

View vv = getLayoutInflater().inflate(

R.layout.activity_sort_laout_style, null);

sortAdapter = new ArrayAdapter<String>(this,

R.layout.activity_sort_text_style, R.id.tv_activity_sort, sort);

sortList = (ListView) vv.findViewById(R.id.lv_activity_sort_listview);

sortList.setAdapter(sortAdapter);

popup2 = new PopupWindow(vv);

popup2.setWidth(getWindowManager().getDefaultDisplay().getWidth() / 2);

popup2.setHeight(LayoutParams.WRAP_CONTENT);

ColorDrawable drawabless = new ColorDrawable(Color.WHITE);

popup2.setBackgroundDrawable(drawabless);

popup2.setOutsideTouchable(true);

popup2.setFocusable(true);

llSecond.setOnClickListener(this);

5.3.2.3 导航模块

在我的导航模块中主要是调用百度地图,在导入到项目的过程中,会有一些错误,但是通过搜索解决方案,在不断地尝试后终于得到解决,找到合理的方式,实现了导航功能。

     private void initNavi() {

BNOuterTTSPlayerCallback ttsCallback = null;

BaiduNaviManager.getInstance().init(this, mSDCardPath, APP_FOLDER_NAME, new NaviInitListener() {

@Override

public void onAuthResult(int status, String msg) {

if (0 == status) {

authinfo = "key校验成功!";

Log.i("key校验","success");

} else {

authinfo = "key校验失败, " + msg;

}

BNDemoMainActivity.this.runOnUiThread(new Runnable() {

@Override

public void run() {

Toast.makeText(BNDemoMainActivity.this, authinfo, Toast.LENGTH_LONG).show();

}

});

}

public void initSuccess() {

Toast.makeText(BNDemoMainActivity.this, "百度导航引擎初始化成功", Toast.LENGTH_SHORT).show();

Log.i("初始化","success");

initSetting();

}

public void initStart() {

Toast.makeText(BNDemoMainActivity.this, "百度导航引擎初始化开始", Toast.LENGTH_SHORT).show();

}

public void initFailed() {

Toast.makeText(BNDemoMainActivity.this, "百度导航引擎初始化失败", Toast.LENGTH_SHORT).show();

}

},  null, ttsHandler, null);

}

5.3.2.4 我的模块

在我的模块中的关键技术就是第三方登陆了,第三方登陆时依赖于第三方提供的sharesdk,登陆时要进行授权的处理,在用户登陆成功以后要获取用户的账户信息,如头像、昵称等个人设置信息,然后将这些信息展现到APP界面中。

public void onClick(View v) {

// TODO Auto-generated method stub

switch (v.getId()) {

case R.id.share_qq:

plat = ShareSDK.getPlatform(acticity, QQ.NAME);

plat.setPlatformActionListener(this);

if (plat == null) {

return;

}

   plat.SSOSetting(true);

plat.showUser(null);

break;

case R.id.share_Sina:

plat = ShareSDK.getPlatform(acticity, SinaWeibo.NAME);

plat.setPlatformActionListener(this);

if (plat == null) {

return;

}

plat.SSOSetting(true);

plat.showUser(null);

break;

case R.id.btn_login_notify:

Intent intent = new Intent(acticity, NotifyActivity.class);

startActivity(intent);

break;

case R.id.iv_minefragment_setting:

Intent intent1 = new Intent(acticity, SettingActivity.class);

startActivity(intent1);

break;

default:

break;

}

}

以上只是APP中一级界面要用的部分技术,此外还要处理数据量过大时造成的OOM(内存溢出),数据的分类算法,各种点击事件回调的处理等技术,开发以上APP使用的第三方框架有:XUtils框架、PulltoRefresh可刷新库、viewpagerindicatorlibrary等。


6  软件测试

在我们的安卓应用软件开发的过程中,软件测试也是极其重要的一环。大量的测试可以帮我们有效的保证设计软件的质量。这个测试的过程就是在条件的控制下对设计的各个模块进行预期结果的对比,尽可能的用软件容易出现错误的例子进行验证,进行各种各样所设计软件可能遇到的情况下的反馈是否正常,测试软件的健壮性、正确性等。用朴实的话来讲,针对设计软件的测试,实际上就是找错。

6.1 软件测试的重要性

这个模块是非要重要的,测试必不可少,我们可以从各大IT公司看到,测试岗位是不可或缺的,软件测试甚至重要性要远远高于我们程序的编码阶段,我们通过课本的学习已经知道,软件测试是有着很重要的地位的,它甚至可能会伴随整个的软件生命周期。好的测试环节,可以帮助我们的设计在使用后拥有较好的稳定性,同时在开发中,越早的发现错误,无疑是耗损越小的。

基于Android的旅游导航APP同样需要进行大量的软件测试,在每一个模块,在每一个设计阶段,模块的测试,都是必不可少的,系统测试也是关乎软件开发的进程。在本APP的开发过程中,软件测试的工作实际上占据了很大的比例,在测试中发现自己的问题,然后回头查找问题,进而改正问题。正是因为有着这样的全面的软件测试,才让开发顺利进行,也让我更加深刻的认识到测试的重要性。总而言之,这是一项必不可少的工作。

6.2 测试实例的研究与选择

在我们大学的学习中,我们知道程序测试的概念,它的方法中主要有白盒方式测试、黑盒方式测试。

白盒测试:顾名思义,白盒测试实际上就是将我们所要被测试的软件视为一个可视的白色盒子,一切结构以及逻辑都是可以看到的,因此它也是一种针对结构的一种测试。这样的测试,主要要达到的预期结果是判断逻辑是否正确,结构是否合理。需要提出的是,这种测试方法要对源码进行十分必要的全部覆盖,要发现所有可能存在的错误,具体主要有两种覆盖方法:逻辑覆盖法,路径覆盖法。

黑盒测试:也就是我们针对被测试程序的功能进行测试。不去关心它的实现,不去关心它的逻辑、结构,只重视结果,只考虑我们预期的功能是否实现,判断规格说明书中的内容是否被合理实现。等价分类的方法,因果图法,利用边界值进行分析方法等都是黑盒测试的常用方法。

基于Android的旅游导航APP软件测试采用白盒测试、黑盒测试相结合的方法,综合了二者各自优点,在测试当中遵循了“尽早地和不断进行测试”,“确保了测试用例有效、完整”原则。通过测试达到以下测试目的:

1.功能检查:查阅功能是否全部完善。

2.接口检查:检查做好的接口是否可以正常使用。

3.数据检查:数据结构是否正确,数据文件是否可以正常访问。

4.性能检查:检查性能需求能否得到满足。

5.初始化、终止检查:检查是否能够进行开始停止。

6.3 系统运行情况

进行全面的系统测试后,测试结果都是正常的,本软件是完全可以正常运行的。

以下是运行的主要结果截图:

图6-1主页面


本设计主要有4个模块,其中第一部分是活动模块,详细图如下:

图6-2活动页面详细图


第二部分是游记模块,具体可以分为直播和推荐两个部分:


图6-3直播页面   


  图6-4推荐页面


第三部分是导航页面,具体实现如下:

图6-5定位页面

   

                图6-6输入目的地
图6-7导航页面


第四部分为用户登录界面,详细图如下:

图6-8用户登录界面

         

   图6-9用户成功登陆界面


6.4 系统评价

系统评价就是指,我们对系统的功能、经济、技术等方面的客观评价。针对本设计的评价如下:

1.系统功能评价

在开发完成后,我进行了大量的测试运行,经过验证,基本实现了原先设定的功能,可以满足既定用户的不同需求,这说明设计较为合理。

2.系统技术评价

技术上,我们设计的APP响应速度还比较快,功能基本完善的实现了,在测试中,长期运行也没有问题,程序的安全性高,实用性强,占用大小适中。可以预见会给用户提供良好的服务。

3.系统经济评价

开发过程由自己进行,所需要的时间并不长,开发周期短,后期维护费用低廉,可以为用户提供稳定安全可靠的服务。为用户节约大量的时间,节约旅游爱好者的旅游费用。


7  总结

本软件就为了青年人们出去旅行更加方便快捷高效而进行各地旅游信息的整合及归类,以Android为基础,基本实现了预期的功能,并且界面美观友好,操作方便,做出了自己的特色。为了成功的完成毕设,我先对各个方面的需求进行分析,查阅了很多旅游类APP的现状以及市面上已有的旅行APP应用,看看有哪些可以借鉴的东西。第二步是概要设计,就是对之前调查的总结分析,整理出一套可行的系统以及框架结构。第三步是详细设计,是前两步具体落实阶段。第四步就是编码,这也是最重要的一步,是把想法完全实现在眼前的过程。在这期间要细心再细心,这样也可以省去因为修改错误代码所浪费的时间。这个过程虽然很辛苦,但是确实在自己不断地编写过程中,学到了很多以前没有学习到的内容,很大的补充了自己的整体知识体系。不仅如此,在遇到某一些自己没有办法解决的问题,通过多方面的搜索、请教,让自己了解了一部分以前没有学到过得知识。所以总体来说,编码这个过程是痛并且快乐着的,也使得自己很满足的很充实。第五步显然就是对自己设计软件的测试了,虽然基本代码已经完成但是具体界面以及某一些功能显然还是要补充完整的。在测试过程中当然也遇到了多多少少,大大小小的问题,但是都即时通过网络或者请教老师同学,将问题很好的解决了。然后逐渐修改代码,把自己的界面做的更加形象更加符合用户操作。

我一路看着系统中的各种功能从空想到实现,这其中的艰难和收获,让我感慨颇多。这次的毕业设计就像是一场求学之路上必须经过的磨难,又像是将理想照进现实的魔镜,它使我明白了自己过去的学习是多么的粗心大意,并且自己所做的努力是多么的微不足道。大一大二甚至到了大三的时候,还总觉得学习的专业课是多么多么的无聊,技术是多么多么的落后,殊不知这些都是通向成才之路上的一块又一块牢固的基石,如果没有这些基础的技术支持,那么我们的技术根本就难以向更高的层次去进发去发展。在这次本科的毕业设计过程中,遇到不会的问题,我都会先去查找相关的资料,锻炼自己对于松散资料的整合能力,这也是自学能力培养中很重要的一部分。由于自己在大学的学习中付出的努力太少,对于相关技术的掌握程度不是太好,这个系统的设计还有不少的缺陷有待改进。我一定会在今后的学习生活中继续着自己没有完成的磨难,把自己打磨的耀眼一点。如此,便可不负自己的青葱岁月。

参考文献

[1]  曾薪夷. 基于Android平台的GPS导航系统的设计与实现[J]. 重庆金美通信有限责任公司. 2012.

[2]  马凯. 基于Android平台的移动学习系统的设计与实现[C]. 北京: 北京工业大学, 2013.

[3]  朱少民. 软件工程导论[M]. 清华大学出版社, 2009.

[4]  叶达峰.  ECLIPSE编程技术与实例(附光盘)[M]. 人民邮电出版社, 2006.

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

[6]  杨云君.  Android的设计与实现[M]. 北京: 机械工业出版社, 2013.

[7]  Eckel B. Thinking in Java[M]. Prentice Hall, 2006.

[8]  Meier R. Professional Android APPlication Development[M]. Wrox Press Ltd., 2008.

[9]  Silva V. Pro Android Games[M]. Springer, Berlin, 2013.

[10] W. Frank Ableson, Charlie Collins, Robin Sen. Android APPlication Fundamentals [M]. 北京: 人民邮电出版社, 2010:32-50.

[11] 王宜贵. 软件工程[M]. 北京: 机械工业出版社, 2002:20-79.

[12] (美)克利夫顿. Android用户界面设计[M]. 北京: 电子工业出版社, 2014.

[13]  贺晓能, 薛涛. 手机应用层软件的功能要求和测试方法[J]. 现代电信科技, 2007.

[14]  崔启亮, 胡一鸣. 国际化软件测试[M]. 电子工业出版社, 2006.

[15] 张晟. 基于Android的GSP应用系统的研究与开发[M]. 湖北工程职业学院信息(管理)工程系,2015.

 

 

 

 

 

 

 

 

致  谢

随着时间的流逝,不知不觉的就迎来了毕业的日子,毕业设计也接近尾声。经过几个月的努力毕设也终于完成了。

在这个过程中我特别的感谢我的指导老师,每当我遇到问题或者有消极情绪的时候总是孜孜不倦的开导我,为我解答疑惑。他就像是一位长者,在我成长的过程中授业解惑,让我受益良多。还有就是我的同学们,大家在一起讨论问题,相互帮助,听一听不同的建议帮助可以让我更好的理解知识,在这里由衷感谢老师和同学们。谢谢你们!

感谢我的家人们,你们是我永远的支持者,是你们坚定的义无反顾的支持我才一步一步的完成我的学业,没有你们就没有现在的我!我会一直把你们放在心里,是你们让我拥有一个温馨的家庭,在这个环境中,学会了感恩和做人。你们的支持和鼓励是我永远前进的动力。

在这几个月的时间里,自己不但是做了毕业设计,还思考了开发者四年的大学生活。一开始以为毕设知识单纯的运用四年学到的知识就能解决,可在实践的过程中才知道,自己的知识是多么的浅薄,很多东西都不了解或是知之甚少,学习的东西还很多提升的东西也还很多,在马上要毕业的日子里。刚刚毕业的更应该抱着一颗学习的心去面对社会。回想大一入校时候的懵懂少年,那时候刚来大学,什么都不懂,什么都是新鲜的事物,转眼之间就要毕业了,四年的磨练让开发者的肩头多了一份责任和承担。

回忆过去,许许多多的事情浮现在脑海:懵懂的我初入校园,一切都是那么新鲜,那么富有吸引力。回想起来,有快乐也有艰辛,有收获也有失落。这次毕设完成的过程是我人生中一段相当难忘的经历,一路走来我获得了很多人的帮助。最后我还要再次在此衷心的感谢指导老师对我的教导,由于之前没有项目开发的经验,独自一人完成毕业设计还是相当有难度的。当我有解决不了的问题时,总是向老师请教,无论时间早晚,老师总是及时的回复我,并且根据自己的经验和广阔的知识面为我提供绝佳的解决方法,使我能够顺利的完成这次的毕业设计。其次要感谢我的室友和同学,他们在我没有头绪的时候总是带给我意想不到的收获,为我搬掉了很多毕设路上的拦路虎,也帮助我弥补了不少知识点的空白。当然,最后要感谢太原理工大学给了我美好的四年大学生活,培养了我专业的技能知识和学习能力,也祝母校的发展越来越好!

 



[优秀论文]基于Android的旅游导航APP的设计与实现的评论 (共 条)

分享到微博请遵守国家法律