智慧旅游助手软件开发项目解决方案-智慧旅游开发设.docx

上传人:小飞机 文档编号:1615174 上传时间:2022-12-11 格式:DOCX 页数:54 大小:1.57MB
返回 下载 相关 举报
智慧旅游助手软件开发项目解决方案-智慧旅游开发设.docx_第1页
第1页 / 共54页
智慧旅游助手软件开发项目解决方案-智慧旅游开发设.docx_第2页
第2页 / 共54页
智慧旅游助手软件开发项目解决方案-智慧旅游开发设.docx_第3页
第3页 / 共54页
智慧旅游助手软件开发项目解决方案-智慧旅游开发设.docx_第4页
第4页 / 共54页
智慧旅游助手软件开发项目解决方案-智慧旅游开发设.docx_第5页
第5页 / 共54页
点击查看更多>>
资源描述

《智慧旅游助手软件开发项目解决方案-智慧旅游开发设.docx》由会员分享,可在线阅读,更多相关《智慧旅游助手软件开发项目解决方案-智慧旅游开发设.docx(54页珍藏版)》请在三一办公上搜索。

1、智慧旅游助手软件开发项目解决方案 目 次1 引言12 项目开发工具及环境搭建22.1 Eclipse22.2 下载搭建Eclipse环境所需的资料(及工具包)32.3安装及配置环境32.4 设置注释的风格62.5 新建一个简单的工程72.6 分别在虚拟机和真机上测试92.7 Photoshop102.8 下载Photoshop103.Android平台103.1 Android103.2 Android构成114.Android旅伴的总体设计134.1 研究目标134.2 需求分析144.3 UI界面设计154.4 程序模块设计164.5软件功能164.6 文件结构与用途174.7 程序主要代

2、码214.7.1 载入页面214.7.2 sqlite数据库内库、表的创建264.7.3 GPS定位36结论441 引言如今,人们对手机有着强烈的依赖性,手机已成为了人们生活中必不缺少的元素。尤其是大多数人手里的手机都已更新成了智能手机。如今的智能手机目前主要的操作系统有:Symbian(塞班)、Palm OS、Android(安卓)、IOS、Black Berry(黑莓) OS 6.0、Windows Phone8等。11.Symbian,将移动设备的通用技术和图形用户界面技术分开,符合了潮流的个性化,而且研发成本较低,具有强大的开放性。可惜就是兼容性较差。2.Palm OS,是专门用于掌上

3、电脑Plam的操作系统,在推出时就超过了苹果的Newton,因此而名声大噪,后被IBM、Sony、Handspring获得授权,被使用在其产品中。但不支援多工处理。23.Android,Google开发的基于Linux平台的开源手机操作系统,而且还有很多公司基于Android的基础上进行了二次开发,如HTC、LG、小米、华为等。34.IOS,苹果公司为iphone是以Darwin为基础的开发的操作系统,所以只能用于苹果公司的产品iphone、ipad、iPod touch上,非开源。4 5.Black Berry,是Research In Motion专用的专用系统,比较商业化,但是比较有限制

4、性,需要附有数码签署(digitally signed)。56.WinPhone系统是微软为了进军移动设备领域与诺基亚合作的重大调整。Windows Phone 8(WP8)是微软最新发布的全新移动操作系统,由于内核的变更,Windows Phone 7.5是无法升级到WP8的。6目前,android是全球智能手机用户使用最多的操作系统,因此,基于android开发的软件是非常受欢迎的。因此,本次毕业设计选择了使用Java语言开发的一个应用于android手机的智慧旅游助手软件。在这个软件项目中,主要包含这些功能:用户的注册及登录,用户的个人旅游信息、用户的旅行安排及行程的管理,用户所在处附近

5、的餐饮、住宿、交通、娱乐、景点、购物等多处信息的查询,还可以搜索推荐的旅行,查看合适的旅游安排等等。2 项目开发工具及环境搭建本项目共使用了两款软件:Eclipse和Photoshop。2.1 EclipseEclipse是基于Java的可扩展开发平台(开放源代码)。它附带一个插件集,包括了Java开发工具(Java Development Kit,JDK)。Eclipse最初由OTI和IBM两家公司的IDE产品开发组于1999年创建。对于Eclipse来说,一切都是插件,所有功能都以插件的形式附于Eclipse核心上。Eclipse基本内核包括了:图像API(SWT/Jface),Java开

6、发环境插件(JDT)、插件开发环境(PDE)等。72.2 下载搭建Eclipse环境所需的资料(及工具包)JDK下载:Eclipse的官网地址:选择适合平台的安装文件,windows32下目前最新版本为:jdk-6u25-ea-bin-b03-windows-i586-27_feb_2011.exe默认安装即可,安装完成后要配置环境变量。2.3 安装及配置环境安装JDK,双击打开并按提示完成安装操作设置环境变量配置如下:XP系统下,右击“我的电脑”-选择“属性”-选择“高级”-点击“环境变量”-点击“系统变量(S)”-新建JAVA_HOME(变量值为你JDK的安装路径,如图2.3.1所示)-

7、编辑CLASSPATH变量值(在最前面加上.;%JAVA_HOME%lib.;)(如图2.3.2所示)图2.3.1 Java_Home设置图2.3.2 CLASSPATH设置创建环境变量后,可以打开cmd,输入“java -version”验证是否安装成功。如图2.3.3所示:图2.3.3 java-version将下载好的Eclipse压缩包解压,打开其“eclipse”程序,关闭welcome。Eclipse ADT 配置:Help-Install New Software-Add,Name选项填写Android Plugin,Location选项填写:http:/dl-Available

8、 Software 界面点击该网址,可以看到 URL 中包含的插件列表,其中有 Developer Tools 一项。选择 Developer Tools 旁边的复选框,单击Install。如图2.3.4:图2.1. 4 ADT配置配置Android SDK:在Eclipse中选择 Window-Android SDK Manager,然后会弹出Android SDK Manager对话框,选择Virtual Devices,按new按钮创建虚拟设备,填出相关信息。如图2.3.5所示。图2.3.5 SDK设置2.4 设置注释的风格大家都知道注释是非常重要的,而且在团队中,统一注释风格是最为重要

9、的,要是没有统一好,当导入同伴写的文件时,不仅注释会成为乱码,导进的文件也会报错,而且错误原因不明。所以,我们要统一注释的风格:Window-Preferences-General-Editors-Text Editors-Spelling.将Encoding选为Default(GBK).如图2.4.1所示。图2.4.1 注释风格2.5 新建一个简单的工程File-New-Project-Android-Android Application Project-Next,之后填写新建工程的名字还有包名。如图2.5.1所示。图2.5.1 新建工程建立出的一个空的比较著名的Android程序Hell

10、oWorld如图2.5.1所示。图2.5.1 Helloworld2.6 分别在虚拟机和真机上测试在虚拟机中运行:选中项目,右击选择Run As(或直接点击菜单栏上的Run)-Android Application即可。在真机上运行:连接上数据线,打开手机USB调试模式(设置-应用程序-开发-点击”USB调试”),打开手机助手,连接手机(一般360手机助手会提示并在线自动安装手机所需要的驱动),选择Choose a running Android device(若已连接成功,则下方会有你当前测试的手机型号),然后选择OK。2.7 PhotoshopPhotoshop是一款用于处理图像的软件,通

11、过这款软件使用一些工具处理图片,使图片更加美观,而且还能在图片上添加所需要的文字信息。2.8 下载PhotoshopPhotoshop官方下载地址:3 Android平台3.1 AndroidAndroid是一个包含操作系统、应用程序以及中介架构层所产生出来的软件堆栈架构。Android的核心是嵌入式Linux系统,搭配Google公司为Android开发的类库,Android运行时,再配合应用程序架构,以此来开发各种不同的应用程序。3.2 Android架构分析图3.1.1 Android架构如图3.1.1所示11,就是Android架构的五大部分。3.2 Android构成一个完整的And

12、roid应用程序,一般是由Activity、IntentReceiver、Service、Content Provider四个部分的组成。Activity,活动,是一个有生命周期的对象 。Android 程序员可以决定一个 Activity 的“生”,但不能决定它的“死”,也就时说程序员可以启动一个 Activity,但是却不能手动的“结束”一个 Activity。12如图3.2.1所示。图3.2.1 ActivityIntent,意图,此机制是Android用来协助应用间的交互与通讯,它负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,而Android就根据Intent的描述去完成

13、相关调用。而IntentReceiver则使用NotificationManager通知用户,需在AndroidManifest.xml中注册,或者在代码中使用Context.registerReceiver()来进行注册。Service,服务,是运行在后台的一段代码。一般分为本地服务和远程服务这两种。本地服务(Local Service)应用于应用程序的内部。可以调用Context.startService()启动,调用Context.stopService()结束。而远程服务(Remote Service)不是应用于应用程序的外部,而是应用于android系统内部的各个应用程序之间。Con

14、tentProvider,内容提供者,是用来提供对设备上的数据进行访问。ContentResolver的query() 和 Activity 对象的 managedQuery()这两个方法可以用来查询Content Provider的方法。Broadcast,广播,广播接收器需手动实现,需先继承BroadcastReceiver,然后重写里面的onReceiver方法。可以代码动态生成广播接收器,它不是常驻型广播,跟随着程序的生命周期;也可以在AndroidManifest.xml中配置广播,它是常驻型广播,关闭应用程序后,即时有信息广播来,应用程序也会被系统调用自动运行。应用程序使用时,需要

15、在AndroidManifest.xml配置文件中进行配置。每个Android项目都会自动生成一个配置文件,该文件定义了应用程序的构成和工作程序,是系统的控制文件。如图3.2.2所示。图3.2.3 配置文件工作图4 Android旅伴的总体设计4.1 研究目标(1) 了解Android应用程序的设计和开发过程;(2) 使用多种组建进行Android旅伴软件的开发。本项目是使用Java语言在Eclipse上开发的一款Android手机上的智慧旅游软件,主要包括几个重要的界面,分别是:首页(Home Page)、导航(及菜单)(Guide)、我的旅行(MyTrip)、推荐旅行(Recommened

16、Trip)、我(User)等。如图4.1.1所示,是该软件的设计框架。图4.1.1 框架4.2 需求分析本软件是Android平台的一个智慧旅行助手软件,打开程序后能查看用户本人的旅游安排及行程,也能查看软件推荐的其他用户比较热衷、推荐的旅游安排,以及该软件所推荐的几个广告。从上面的描述中就可以基本了解了该软件的功能需求:(1)首先是用户自己的旅行安排,每个用户都要有旅行安排,则用户就需要个ID来以示区分;(2)其次是他人推荐的旅行,这些都该从服务器上来获取;各个城市的图片、景点、住宿、饮食、交通、娱乐、特产等相关信息,既然有交通,就需要获取用户与目的地所距距离,这就需要用到相关GPS功能;各

17、个城市的景点需具有相关的导游解说信息,这些也是从服务器上获取;能直接在软件上对相关饮食、住宿等消费进行可支付性;4.3 UI界面设计根据需求分析可以知道,应用程序需应包含五个主要的用户界面。这里就进一步分析每个界面中应该显示哪些内容。在首页,简单显示着广告部分、我的旅行、推荐旅行及周边旅行的相关信息,都可点击进入相关界面。而在主菜单,则罗列着各个功能。如图4.3.1所示,为用户界面草图。图4.3.1 用户界面草图4.4 程序模块设计从功能需求上分析可以看出,整个应用程序应划分为五个功能模块,分别是主菜单、我的旅行、推荐旅行、景点介绍、我的相关资料。在主菜单能进入到各种设置、各种界面。我的旅行里

18、面是用户自己的旅行安排表及其他相关信息。而推荐旅行则与景点介绍相连,由相关城市导入相关的景点,并根据用户的GPS定位获取与用户最近的景点及交通、餐饮、娱乐等相关信息,若用户已经在景点内,则会出现相关景点的导游解说。我的相关资料就包括了用户的账户信息。4.5 软件功能软件的载入页面也略微介绍了本软件,包括了软件名、版本号、公司网址,还有相关广告。当然,软件载入成功后,首先进入的就是首页,在首页,可以点击我的旅行、导游及周边旅行。在我的界面里,用户可以登录,输入用户的手机号码或者邮箱及密码即可登录。若没有账号,可以输入用户的电子邮箱或手机号码获取验证码进行注册。只有在登录的情况下才可以进入我的旅行

19、界面。在我的旅行界面,可以看到推荐旅行或者是用户自己创建的旅行。由于公司还有相关网页,手机上的信息可以和网站上用户的信息进行同步查看。用户可以对自己的旅行进行安排,也可以看到网上其他用户推荐的旅行安排。这样就方便用户出门旅行。给自己的旅行安排起一个名称,带出你旅游的好心情,然后选择自己的目的地城市,填写出发日期,这样你的旅行安排就建立啦!然后在你的安排里记录下交通、景点、住宿、餐饮、娱乐、购物或者事件。这样你的安排就一目了然了。如果用户到了某一城市,就会根据GPS定位获取用户所在位置,然后计算出最方便最合适的交通方式,提供最近的景点路线。如若用户到达了某一景点,则会提示景点的相关导游真人解说,

20、让用户对景点有了更进一步的了解,而且还省掉了一大笔的费用。4.6 文件结构与用途在程序的开发阶段,根据程序模块设计的内容我先设计了数据库说明文档和数据库设计文档,如图4.6.1和图4.6.2所示。然后确定了“Android智慧旅游助手软件开发”的工程名为TripFriend。下面表4.6.1是关于本项目的主要类名以及其功能的汇总表。表4.6.1 类及类名功能汇总表类名类功能HomePage首页,包括了我的旅行、推荐旅行、周边等信息MainPage主菜单,对所有界面的汇总,能够跳转进入任意一个界面。MyTrip我的旅行,对用户的旅行根据旅行名称及时间安排成表。RecomTrip推荐旅行,根据城市

21、名进行相关推荐,包括城市介绍、景点住宿等。CircumTrip周边旅行,根据用户的地理位置计算出最近的景点及交通信息。Android的资源文件保存在/res的子目录中。其中/res/drawable/目录中保存的是图像文件,/res/values目录中保存的是用来自定义字符串和颜色的文件,/res/xml目录中保存的是XML格式的数据文件。图4.6.1 功能说明图4.6.2 设计文档4.7 程序主要代码4.7.1 载入页面首先创建一个新的名为“TripFriend”的Android程序,我查询资料后考虑到使用本项目的用户的手机的版本可能较低,而且百度地图移动版只能使用在Android SDK1

22、.5以及以上,所以我只是选择了较低的版本:Android 2.2。开始编写程序时,我首先设置了该程序的载入页面。因为用户第一个接触该软件的就是软件的载入页面。这个功能对使用者来说就是一个持续1,2秒钟的等待页面。而且程序会在用户等待的同时做一些必要的检查以及数据准备工作。在此我仅是用UI实现了下。我把页面所需的背景、版本号、名称以及广告经过Photoshop工具进行处理分别作为图片,需要时即时插入。由于本人的审美观以及设计水平都为一般,所以只是把需要的先做下,以后方便专业人士修改。由于广告部分要到最后才设置,所以我先不设置广告部分。PS图片后将图片放入项目的res/drawable-mdpl文

23、件夹内,该文件主要放置中等分辨率的图片,因为Android系统会根据机器的分辨率来寻找对应的图片。完成图片资源的设置后就在res/layout文件内进行编写,这个layout采用RelativeLayout控件作为顶层控件,然后用ImageView控件分别实现版本号图片顶部靠左对齐显示、软件名称居中偏上对齐。如图4.7.1.1所示。图4.7.1.1 TripFriend载入页面在layout中的activity_main.xml中代码如下: 我还考虑到了用户在使用该软件时手机是横屏还是竖屏。这样背景图就需要分别使用两张相应的图片。获取屏幕是否横屏的代码如下:public static int

24、ScreenOrient(Activity activity) int orient = activity.getRequestedOrientation(); if(orient != ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE & orient != ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) /宽高为横屏,反正为竖屏 WindowManager windowManager = activity.getWindowManager(); Display display = windowManager.getDef

25、aultDisplay(); int screenWidth = display.getWidth(); int screenHeight = display.getHeight(); orient = screenWidth screenHeight ? ActivityInfo.SCREEN_ORIENTATION_PORTRAIT : ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE; return orient; 然后就需要编写一个名为AutoBackground的公共方法来实现其屏幕背景的自动切换,而且在后面每一个功能的后面都会使用到该方法:publ

26、ic static void AutoBackground(Activity activity,View view,int Background_v, int Background_h) int orient=ScreenOrient(activity); if (orient = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) /纵向 view.setBackgroundResource(Background_v); else /横向 view.setBackgroundResource(Background_h); 完成该方法后在MainActivity

27、的onCreate方法中调用AutoBackground方法进入屏幕调换:LinearLayout layout=(LinearLayout)findViewById(R.id.layout);/背景自动适应AndroidHelper.AutoBackground(this, layout, R.drawable.bg_v, R.drawable.bg_h);134.7.2 sqlite数据库内库、表的创建本项目是设想当用户打开软件显示载入页面的时候软件开始检查sqlite库中山否已经保存有用户的UserID、Password的记录。如果记录为空,则说明用户是第一次使用本软件。则软件从载入页面

28、跳转到用户注册界面。如果有记录,则读取记录后调用接口从服务器获取这些记录对应的用户信息,包括了用户的旅游安排。该功能涉及到了sqlite数据库的创建、数据表的创建、数据记录的添加以及数据记录的读取等操作,如图4.7.1所示,我新建了一个名为SqliteHelper.java的类文件来完成sqlite的数据表的创建及更新。图4.7.2.1 SqliteHelper代码如下:/用来保存UserID,Password的表名public static final String TB_NAME = users;public SqliteHelper(Context context, String nam

29、e, CursorFactory factory,int version) super(context, name, factory, version);/ TODO Auto-generated constructor stub/创建表Overridepublic void onCreate(SQLiteDatabase db) / TODO Auto-generated method stubdb.execSQL(CREATE TABLE IF NOT EXISTS +TB_NAME+(+UserInfo.ID+ integer primary key,+UserInfo.USERID+

30、varchar,+UserInfo.PASSWORD+ varchar,+UserInfo.USERNAME+ varchar,+UserInfo.USERIMAGE+ blob+);Log.e(Database, onCreate);/更新该表Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) / TODO Auto-generated method stubdb.execSQL(DROP TABLE IF EXISTS + TB_NAME);onCreate(db);Log.e(D

31、atabase, onUpgrade);/更新列public void updateColum(SQLiteDatabase db, String oldColumn, String newColumn, String typeColumn)trydb.execSQL(ALTER TABLE +TB_NAME + CHANGE +oldColumn + + newColumn + + typeColumn);catch(Exception ex)ex.printStackTrace();建立一个UserInfo类,将user的信息进行封装。如图4.7.2.2所示。图4.7.2.2 UserIn

32、fo然后就再建立了一个名为DataHelper.java的类文件来实现用户记录的创建、删除、更新等。如图4.7.2.3所示:图4.7.2.3 DataHelper代码如下:/数据库名称private static String DB_NAME = mytripfriend.db;/数据库版本private static int DB_VERSION = 1;private SQLiteDatabase db;private SqliteHelper dbHelper;public DataHelper(Context context)dbHelper = new SqliteHelper(co

33、ntext,DB_NAME,null,DB_VERSION);db = dbHelper.getWritableDatabase();public void Close()db.close();dbHelper.close();/获取userInfo表中的UserID、Password的记录public List GetUserList(Boolean isSimple)List userList = new ArrayList();Cursor cursor = db.query(SqliteHelper.TB_NAME, null, null, null, null, null, User

34、Info.ID+DESC);cursor.moveToFirst();while(!cursor.isAfterLast() & (cursor.getString(1)!= null)UserInfo user = new UserInfo();user.setId(cursor.getString(0);user.setUserId(cursor.getString(1);user.setPassword(cursor.getString(2);if(!isSimple)user.setUserName(cursor.getString(3);ByteArrayInputStream st

35、ream = new ByteArrayInputStream(cursor.getBlob(4);Drawable img = Drawable.createFromStream(stream, image);user.setUserImage(img.toString();userList.add(user);cursor.moveToNext(); cursor.close();/关闭游标return userList;/判断userInfo表中的是否包含某个UserID的记录 public Boolean HaveUserInfo(String UserId) Boolean b=fa

36、lse; Cursor cursor=db.query(SqliteHelper.TB_NAME, null, UserInfo.USERID + = + UserId, null, null, null,null); b=cursor.moveToFirst(); Log.e(HaveUserInfo,b.toString(); cursor.close(); return b; /更新userInfo表的记录,根据UserId更新用户昵称和用户图标 public int UpdateUserInfo(String userName,Bitmap userImage,String UserI

37、d) ContentValues values = new ContentValues(); values.put(UserInfo.USERNAME, userName); / BLOB类型 final ByteArrayOutputStream os = new ByteArrayOutputStream(); / 将Bitmap压缩成PNG编码,质量为100%存储 userIpress(Bitmap.CompressFormat.PNG, 100, os); / 构造SQLite的Content对象,这里也可以使用raw values.put(UserInfo.USERICON, os.

38、toByteArray(); int id= db.update(SqliteHelper.TB_NAME, values, UserInfo.USERID + = + UserId, null); Log.e(UpdateUserInfo2,id+); return id; /更新userInfo表的记录 public int UpdateUserInfo(UserInfo user) ContentValues values = new ContentValues(); values.put(UserInfo.USERID, user.getUserid(); values.put(Use

39、rInfo.PASSWORD, user.getPassword(); int id= db.update(SqliteHelper.TB_NAME, values, UserInfo.USERID + = + user.getUserid(), null); Log.e(UpdateUserInfo,id+); return id; /添加users表的记录 public Long SaveUserInfo(UserInfo user) ContentValues values = new ContentValues(); values.put(UserInfo.USERID, user.getUserid(); values.put(UserInfo.PASSWORD, user.getPassword(); Lon

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号