同学录管理系统设计与实现 - 图文

更新时间:2023-10-16 08:04:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

毕 业 设 计(论 文)

题 目 同学录管理系统设计与实现

姓 名 范方舟 学 号 0810311107 所在学院 计算机学院 专业班级 08计算1班 指导教师 吕瑾文 日 期 2012 年 6 月 7 日

毕业设计(论文)任务书

学 院 学生姓名 设计题目 计算机学院 范方舟 指导教师 专业班级 吕瑾文 08计算1班 职 称 学 号 讲师 0810311107 同学录管理系统设计与实现 (设计内容目标和要求、设计进度等) 设计进度: 2011.3.21-2011.3.27 完成毕业设计的开题报告 2011.3.28-2011.4.3 完成准备和需求分析 2011.4.4-2011.4.11 完成总体设计和详细设计 2011.4.12-2011.4.20 完成整体编码 2011.4.21-2011.4.26 完成系统测试 2011.4.26-2011.5.1 完成论文设计 2011.5.1-2011.6.6 完成毕业论文修改和打印 2011.6.7 参加毕业答辩 设 计 内 容 目 标 和 要 求 设计目标和要求: 1、完成坦克大战游戏设计。 2、进行系统需求分析。 3、根据需求分析完成系统的概要设计和详细设计。 4、进行编码和测试。 5、最终完成功能的实现。 6、能在JAVA模拟器上和实际手机上运行。 实现功能: 1、能够发射子弹打击敌人。 2、敌人能够移动。 3、敌人随机出现。 4、上方显示血条。 5、血条降低为零,游戏结束。 指导教师签名: 年 月 日 II

基层教学单位审核 学 院 审 核 此表由指导教师填写学院审核

III

毕业设计(论文)学生开题报告

课题名称 课题来源 学生姓名 学 生 自 主 选 题 范方舟 同学录管理系统设计与实现 课题类型 学 号 DX 0810311107 指导教师 专业班级 吕 瑾 文 08计算1班 国内外电子网络游戏的现状 游戏本身就是一种娱乐方式。自有人类文明的时候,就有了游戏,可以说游戏就是人们生活娱乐的一部分。在今天,借助于数字、电子、网络、创意、编剧、美工、音乐??等等“先进”的道具,网络游戏对于人们现实生活的虚拟达到了一个全新的境界,并且则在这新的境界上还原了游戏的本源--人与人的互动。网络游戏满足了现代社会必须的沟通需求,无疑它应该是适合所有人的。 国内网络游戏市场,已经坐拥了1000万用户且仍不断增长的游戏玩家市场,百余款游戏也着实热闹,但也体现出国内玩家的相对固定和游戏种类的相对单一,虽说运营商的推广手法也各具特点,可本质上的大同小异使得竞争空前惨烈,而由此诱发的种种问题更是招致了社会与媒体的不满,阻碍了游戏产业的发展。网络游戏市场的重新定位是最迫切需要解决的问题。大型游戏机除了在大众休闲娱乐方面,还在军事、国防、医疗等方面有良好的发展前景。广州大型游戏机所采用的尖端计算机图形图像技术、多样化的软件程序设计、成熟的机械和电子技术,被充分运用在军事、国防及医疗等方面。例如,在军事模拟对抗演习中,大型游戏机既可以模拟作战现场的地形、军力部署、天气等情况,还可以进行多兵种战术技能对抗训练;在国防训练方面,大型游戏机可以模拟坦克操纵、导弹发射、飞机驾驶、舰艇巡航等多种训练任务;在医疗培训方面,大型游戏机拥有的全息三维立体投影技术,可以逼真地展示人体的各部分构造和器官,以上这些方面的应用,都显示出大型游戏机在降低行业技能培训成本的优势。 本系统的现实意义 游戏本身是一种娱乐方式,能带给人们无尽的乐趣,而且游戏行业的发展还将会带动众多周边产业,如五金、塑料、机械、电子、 显像管,高端机型甚至使用了40英寸以上的大屏幕背投、液晶显示器等,这些显像设备不但要依赖国内众多显像管生产企业提供支持,更要针对游戏的内容进行深入开发和优化,以适应游戏内容的飞速发展和变化,大大突破了传统家电类显像设备的限制,对国内显像管制造企业的发展、创新具有极大的推动作用,大型游戏机的外部框体制造涉及工业设计、模具加工、五金加工、塑料成形、特殊印刷等工艺流程,由此带动了一大批相关的零部件生产制造企业,而这些企业均为生产密集型企业,大幅度增加了劳动就业的需

1

求。 本系统和其他开发游戏区别 本系统的坦克大战是基于Java语言设计开发的,支持单机运行,游戏基本玩法较简单,支持手机运行,游戏以消灭全部敌方坦克过关为目的。主要的功能简单罗列如下: 1、己方坦克可以发射子弹攻击敌人; 2、敌方坦克能够随机移动并且能够发射子弹; 3、显示生命值,生命值为零显示游戏结束; 4、敌方坦克消灭完毕为胜利。 系统运行的软件环境 (1)网络服务器操作系统:Windows XP; (2)开发工具:eclipse3.2; (3)运行环境:J2SDK 1.5; (4)编程语言:Java语言; 课题类型:

(1)A—工程实践型;B—理论研究型;C—科研装置研制型;D—计算机软件型;

E—综合应用型

(2)X—真实课题;Y—模拟课题; (1)、(2)均要填,如AY、BX等。

2

本课题的研究内容 1、Java图形编程 Java中的Graphics类是用于绘图和显示格式化文本的工具类。在Java程序中绘图必须在一个窗口(容器)中进行,绘图窗体经常被设计为一个组件容器。一般首先在一个面板中进行绘制,然后再将这个面板添加到显示窗口中去。 Graphics类是在Java.awt包中申明,显示格式化文本和绘图时通过调用Graphics类的draw()方法实现的,例如drawString(String),drawLine()等。绘图采用的坐标系是原点在左上角,纵轴向下以像素为单位的坐标系。 2、J2SE框架 J2SE软件是快速开发、部署关键任务和企业应用程序的首选解决方案。J2SE是基于Java跨平台技术和强有力的安全模块而开发的,其最新的特征和功能极大地提高了Java语言的伸缩性、灵活性、适用性,以及可靠性。J2SE特点:①良好的计算性能和缩放能力。J2SE提升了Java计算的性能与缩放能力,代表了Java技术的大跨步进展。通过J2SE框架更简易的步骤、花费更少的时间,采用Java技术开发与配置要求更高的应用了。J2SE在Java客户机应用方面得到了重大性能提升。基于Swing的Java小程序和应用程序在图形用户界面(GUI)的响应速度上也大有提高。②跨平台:J2SE是一个具有综合性能的平台,能使一个完整的、可缩放的高性能应用配置在任何种类的平台上。③支持Web服务: J2SE对SSL、LDAP等业界标准技术也给予支持,因此保证了在不同平台、系统和环境间的互操作能力。J2SE支持XML技术和一整套安全服务,因此为基于各类标准的可互操作应用与服务的创建奠定了重要基础。有了J2SE与Java Web Services Developer Pack的结合,开发商就能创建、测试和配置Web服务了。④完整性:J2SE还是一个完整的开发环境。开发商可基于这一环境创建功能丰富的交互式应用。这些应用可以配置在任何平台上。J2SE具有新的GUI控制功能、快速的Java 2DT图形功能、支持国际化与本地化扩展和新的配置选项,并对Windows XP提供扩展支持。总之,J2SE是多种不同风格软件的开发基础,包括客户端Java小程序和应用程序,以及独立的服务器应用程序等。J2SE版还是J2ME的基础,是J2EE执行程序的推动力。 3

本课题研究的实施方案、进度安排 基于android的手机订餐系统初步定于5月之前要全部完成,开始时间是从2011年3月正式开始的,下面则是实施该订餐系统的基本进度安排: 2011.3.5-3.21 (2012下同) 完成全部设计开题报告的初稿 3.22-4.1 在老师的指导下进行修改和审查,完成开题报告 4.2-4.16 完成毕业设计的可行性分析 4.7-4.11 完成毕业设计的需求分析 4.12-4.18 完成总体设计 4.19-4.24 细化整个坦克大战游戏,并完成详细设计 4.25-4.26 对整个系统选择语言,实现相应的编码 4.26-4.30 测试系统,对本系统进行最后的修改 5.1- 在规定时间完成详尽说明书 (注:在以上过程中随时和自己的指导老师进行沟通和交流。) 开题报告(2)

4

已查阅的主要参考文献 [1] 姜志强编著. Java语言程序设计 [M].北京:电子工业出版社,2007 [2] 侯俊杰编著. Java语言应用开发基础 [M]. [3] 孙更新, 宾晟, 吕婕编著. Java毕业设计指南与项目实践 [M]. 北京:科技出版社,2007. [4] 杜江, 管佩森编著. Java使用编程100例 [M]. 北京:中国贴到出版社,2004. [5] 殷兆麟编著. Java语言程序设计 [M]. 北京:高等教育出版社, 2002. [6] 侯俊杰编著. Java程序设计教程与实训 [M]. 北京:科学出版社, 2005. [7] 赵强, 陈洪译著. Java程序设计高级主题 [M]. 北京:北京大学出版社,2004. [8] 《电脑编程技巧与维护》杂志社编著. Java编程技巧典型案例解析 [J]. 北京:中国电力出版社,2005 [9]张基温,朱嘉钢,张景莉编著. Java程序开发教程 [M]. 北京:清华大学出版社,2002 [10]丁来佳,周静. 基于JAVA平台事件驱动模型的研究与设计[J]. 黄冈师范学院学报 , 2008,(S1) . 指导教师意见 指导教师签名: 年 月 日 开题报告(3)

5

同学录管理系统设计与实现 吕瑾文(讲师) 毕业设计(论文)学生申请答辩表

课 题 名 称 指导教师(职称) 申 请 理 由 学生所在学院 经过长时间的充分准备,所有设计资料已经准备齐全,现提出正式申请。 计算机学院 专业班级 08计科2班 学号 0810311103 学生签名: 日期:2011.6.7

毕业设计(论文)指导教师评审表

序号 评分项目(理工科、管理类) 1 2 3 4 5 6 工作量 文献阅读与外文翻译 技术水平与实际能力 研究成果基础理论与专业知识 文字表达 学习态度与规范要求 评分项目(文科) 外文翻译 文献阅读与文献综述 创新能力与学术水平 论证能力 文字表达 学习态度与规范要求 满分 15 10 25 25 10 15 评分 是否同意参加答辩: 总分 评 语 指导教师签名: 另附《毕业设计(论文)指导记录册》 年 月 日 3

6

毕业设计(论文)评阅人评审表

学生姓名 设计(论文)题目 评阅人 范方舟 专业班级 07计科2班 学号 0710312118 基于android的手机订餐系统的设计与开发 评阅人职称 评分项目(文科) 外文翻译 文献阅读与文献综述 创新能力与学术水平 论证能力 文字表达 学习态度与规范要求 满分 15 10 25 25 10 15 总分 评分 序号 评分项目(理工科、管理类) 1 2 3 4 5 6 工作量 文献阅读与外文翻译 技术水平与实际能力 研究成果基础理论与专业知识 文字表达 学习态度与规范要求 评 语 评阅人签名: 年 月 日 4

7

毕业设计(论文)专用纸

——————————————————————————————————————

第一章 绪论

手机订餐的出现必将改变人们对订餐的看法。在手机订餐之前,无论是学生族还

是上班族,电话订餐往往是采用最普遍的订餐方式。然而美在线订餐网站GrubHub通过发布iphone和android的手机订餐应用,在短短的5个月时间内融资达到2000万美元。[7]这个数字足以使我们对手机订餐的前景刮目相看。电话订餐相对于手机订餐而言有很大的局限性,首先是时效问题,订餐高峰期,一部电话根本招架不住那么多的订餐顾客;其二,不利于同学们对周围饭店信息的广泛获取;其三,点菜不方便;其四,是打电话的成本过高。综上所述,我们需要推广手机订餐来取代人们所习惯的电话订餐方式。[13]

手机订餐的出现得益于互联网的发展,在Internet高速发展的今天,互联网已经越来越成为人们快速获取、发布和传递信息的重要渠道,它在人们的经济、政治、生活等各方面发挥着越来越重要的地位,而互联网发展的短短十年间,智能手机的发展和手机的3G化已然成为互联网发展的两个最新热点。我们现在所使用的HTC智能手机,就运行着当代最流行的智能手机操作系统之一的android系统。围绕着该操作系统,android market开放平台上截止至今已经有25万个应用。每个Android平台上的开发人员都希望自己能拥有属于自己的应用程序发布到开放平台中,设计与开发android的应用软件对我们把握移动电子商务市场行情有着重要的意义。[11]

1.1 知识背景

1.1.1 android系统简介

Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。[16] 同时android系统以linux作为核心,使用Java作为编程语言,使接口到功能,都有层出不穷的变化,其中Activity等同于J2ME的MIDlet,一个Activity类别(class)负责创建视窗(window),一个活动中的Activity就是在foreground(前

——————————————————————————————————————

13

毕业设计(论文)专用纸

——————————————————————————————————————

景)模式,背景执行的程序叫做Service。两者之间透过由ServiceConnection和 AIDL连结,达到复数程序同时执行的效果。如果执行中的Activity全部画面被其他Activity取代时,该Activity便被停止(stopped),甚至被系统清除(kill)。 View等同于J2ME的Displayable,程序人员可以透过View类别与“XML layout”档将UI放置在视窗上,Android 1.5的版本可以利用View打造出所谓的Widgets,其实Widget只是View的一种,所以可以使用xml来设计layout,HTC的Android Hero手机即含有大量的widget。至于ViewGroup是各种layout的基础抽象类别(abstract class),ViewGroup之内还可以有ViewGroup。View的构造函数不需要再Activity中调用,但是Displayable的是必须的,在Activity中,要通过findViewById()来从XML中取得View,Android的View类的显示很大程度上是从 XML中读取的。View与事件(event)息息相关,两者之间透过Listener结合在一 起,每一个View都可以注册一个event listener,例如:当View要处理用户触碰 (touch)的事件时,就要向Android框架注册View.OnClickListener。[18] Android系统在google创建之初就已经大致定下了以下的4层体系结构,其中4层体系结构图大致可以由下图来表示:

图1 android体系结构图[18]

其中蓝色部分:应用程序。绿色及黄色部分:中间件。 红色部分:作业系统。

14

毕业设计(论文)专用纸

——————————————————————————————————————

Android语言在程序语言方面有很大的提高,其本身执行于Linux kernel之上,但并不是GNU/Linux。因为在一般GNU/Linux里支持的功能,Android大都没有支持,包括Cairo、X11、Alsa、FFmpeg、GTK、Pango及Glibc等都被移除掉了。Android又以bionic取代Glibc、以Skia取代Cairo、再以opencore取代FFmpeg等等。Android为了达到商业应用,必须移除被GNU GPL授权证所约束的部份,例如Android将驱动程序移到userspace,使得Linux driver与Linux kernel彻底分开。bionic/libc/kernel/ 并非标准的kernel header files。Android的kernel header是利用工具由Linux kernel header所产生的,这样做是为了保留常数、资料结构与宏。

Android在中介程序的选择和构建方面完成的非常出色,其包括有:

一、作业系统与应用程序的沟通桥梁,并用分为两层:函数层(Library)和虚拟机器(Virtual Machine)。 Bionic是Android改良libc的版本。Android同时包含了Webkit,所谓的Webkit就是Apple Safari浏览器背后的引擎。Surface flinger是就2D或3D的内容显示到萤幕上。

二、Android使用工具链Toolchain为Google自制的Bionic Libc;采用OpenCORE作为基础多媒体框架。OpenCORE可分7大块:PVPlayer、PVAuthor、Codec、PacketVideo Multimedia Framework(PVMF)、Operating System Compatibility Library(OSCL)、Common、OpenMAX。使用skia为核心图形引擎,搭配OpenGL/ES。skia与Linux Cairo功能相当,但相较于Linux Cairo, skia功能还只是阳春型的。2005年Skia公司被Google收购。

三、多媒体资料库采用SQLite资料库系统。资料库又分为共用资料库及私用资料库。用户可透过ContentResolver类别(Column)取得共用资料库。

四、Android的中间层多以Java实作,并且采用特殊的Dalvik虚拟机器(Dalvik Virtual Machine)。Dalvik虚拟机器是一种“暂存器型态”(Register Based)的Java虚拟机器,变数皆存放于暂存器中,虚拟机器的指令相对减少。

——————————————————————————————————————

15

毕业设计(论文)专用纸

——————————————————————————————————————

五、Dalvik虚拟机器可以有多个实例(instance),每个Android应用程序都用一个自属的Dalvik虚拟机器来执行,让系统在执行程序时可达到优化。Dalvik虚拟机器并非执行Java字节码(Bytecode),而是执行一种称为.dex格式的档案。

1.1.2 android application层应用

在上一节android体系结构图中,我们可以看出Android的最上层包含有两个重

要的层次,及Application层和Application Framework层,这里就牵涉出一些有关Application层的基本内容,这里面包含有常用的Activity、Home、Contents、 Phone、Browser这样五个在android sdk开发中经常用到的5个概念,因此下面有必要介绍有关Application层和Application Framework层的基本内容。

Application Framework层:

Android在基于Linux2.6的内核下,依靠自身提供的类似虚拟机结构。通过提供开放的开发平台,使开发者能够编制极其丰富和新颖的应用程序。开发者可以自由地利用设备硬件优势、访问位置信息、运行后台服务、设置闹钟、向状态栏添加通知等等,很多很多。 开发者可以完全使用核心应用程序所使用的框架APIs。应用程序的体系结构旨在简化组件的重用,任何应用程序都能发布他的功能且任何其他应用程序可以使用这些功能(需要服从框架执行的安全限制)。这一机制允许用户替换组件。 所有的应用程序其实是一组服务和系统,包括: 视图(View)--丰富的、可扩展的视图集合,可用于构建一个应用程序。包括包括列表、网格、文本框、按钮,甚至是内嵌的网页浏览器 内容提供者(Content Providers)--使应用程序能访问其他应用程序(如通讯录)的数据,或共享自己的数据 资源管理器(Resource Manager)--提供访问非代码资源,如本地化字符串、图形和布局文件 通知管理器(Notification Manager)--使所有的应用程序能够在状态栏显示自定义警告 活动管理器(Activity Manager)--管理应用程序生命周期,提供通用的导航回退功能。

Application 层:

——————————————————————————————————————

16

Android装配一个核心应用程序集合,包括电子邮件客户端、SMS程序、日历、地图、浏览器、联系人和其他设置。所有应用程序都是用Java编程语言写的。更加丰富的应用程序有待我们去开发! 从上面我们知道Android的架构是分层的,非常清晰,分工很明确。Android本身是一套软件堆迭(Software Stack),或称为「软件迭层架构」,迭层主要分成三层:操作系统、中间件、应用程序。那么其中 Phone为Android电话通信和短信发送功能提供了基本的功能,Home又是Android 启动的一切基础,Browser则足以使Android在浏览器领域和web2.0时代成为IT企业中的领军人物,这一切都为我们使用Android打下了良好的基础。

1.2 eclipse安装及android sdk配置

在了解有关Android系统的简单知识后,下面要知道的是如何在windows平台下

安装google官方推荐的eclipse编译器,并在eclipse编译器下集成android sdk开发环境的步骤:[13] 一.相关下载 (1) java JDK下载: 进

:

http://java.sun.com/javase/downloads/index.jsp

图2 java jdk下载界面

选择 Download JDK 只下载JDK,无需下载jre.

(2)eclipse下载

进入该网页:应选择第一个(即eclipse IDE for java EE Developers) (3)下载Android SDK,在android官方网站上下载专门的sdk。

说明: Android SDK两种下载版本,一种是包含具体版本的SDK的,一种是只有

17

an android.Circuits and Systems[C], 2009. MWSCAS '09. 52nd IEEE International Midwest symposium on,pages 314-320 ,2-5 Aug. 2009 [17] Android维基百科,自由的百科全书[Z/OL] http://zh.wikipedia.org/wiki/Android

附录1:软件流程图

附录

43

InitRestaurant.Menu.javaEditRestaurant.Menu.javaChooseRestaurant.Menu.java CreateRestaurant.Menu.SqlLite.javajava继承自继承自MySqlLiteOpenHelper.java主类ActivityGeoPointImageOverlay.java5-1手机订餐系统类组织结构图

44

进入餐厅欢迎Activity界面用户操作是否添加餐馆结果为T用户进入新建餐厅栏目中添加到餐厅数据库中结果为F编辑删除结果为T编辑餐馆的Activity事件中是否编辑或删除餐厅编辑删除结果为F从数据库中选出所有餐厅的数据地图上得到所要访问的餐厅,程序运行到此结束

图5-2 Android手机订餐系统界面流程图

45

附录2:英文文献及翻译

Google Android:A Comprehensive Security Assessment

As an operating system for mobile devices,Google’s Android—an open,

programmable software framework—is vulnerable to typical smart-phone attacks. Such attacks can make the phone partially or fully unusable, cause unwanted SMS/MMS (short message service/multi-media messaging service) billing, or expose private information.1 Smart-phone attack vectors include cellular networks, Bluetooth, the Internet (via Wi-Fi, General Packet Radio Service/Enhanced Data Rates for Global Evolution, or 3G network access), USB, and other peripherals.2 Smart-phone malware evolve very quickly due to the experience malware writers have gained with PC malware. As Alexander Gostev estimates,3 two years are sufficient for smart-phone viruses to evolve to a level that computer viruses only reached after 20 years. Thus, the challenge in ensuring smart-phone security is becoming similar to that confronting the PC.4 Among the most prominent smart-phone malware types are the Lasco/Cabir5 and Commwarrior/Mabir worm families,6 the Flex- iSpy, RedBrowser, and Skulls Trojan horses, the WinCE.Duts and CardTrap viruses,7 and, recently,the iPhone ikee worm and iPhone/Privacy.A hack- ing tool that exploited vulnerabilities in jail-broken iPhone systems.

So far, smart-phone pandemic outbreaks have been limited in their scale and impact due to a re-stricted number of potential victims. Nevertheless,smart-phone market share in the US has increased from 11 percent of all cellular phone subscribers in 2008 to 17 percent in 2009, and it is expected to in-crease significantly over the next few years.8 Conse- quently, smart phones are likely to become a fertile ground for various types of malware.

The number of smart phones based on the Google Android operating system are expected to increase 10 percent during 2010.8 The risks to Android are never- theless significant, mainly because it’s an open source software stack operated in a heterogenic mobile en-vironment. Thus, hackers can more easily access, manipulate, and exploit the operating system code.Here, we review and assess the security mechanisms incorporated into Google’s new Android framework and whether they’re

46

adequate in light of the emerging threats to smart phones.

Android is an application execution environment formobile devices. It includes an operating system, ap-plication framework, and core applications. The Android software stack is built on the Linux kernel, which is used for its device drivers, memory management, process management, and networking. The next level up contains the Android native libraries. Various system components in the upper layers use these libraries, which are written in C/C++. Incorporating these libraries in Android applications is achieved via Java native interfaces. The next level is the Android run- time, comprising the Dalvik virtual machine and the core libraries. Dalvik runs .dex (Dalvik-executable) files that are designed to be more compact and memory-efficient than Java class files. The core libraries are written in Java and provide a substantial subset of the Java 5 SE packages as well as some Android-specific libraries. The application framework layer, written fully in Java, includes Google-provided tools as well as pro-prietary extensions or services. The topmost application layer provides applications such as a phone, Web browser, email client, and more.

Each application in Android is packaged in an .apk archive for installation. This archive is similar to a Java standard jar file in the way that it holds all code and noncode resources (such as images or manifest) for the application. Android applications are written in Java based on the APIs the Android software de-velopment kit (SDK) provides. William Enck and his colleagues discussed the main components of an An-droid application and how to use an Android-specific mechanism to protect Android applications.9

In general, several security mechanisms are incor-porated into the Android framework (see Table 1). We can cluster them into three general groups: Linux mechanisms, environmental features, and Android-specific mechanisms.

47

升级工具,而不包含具体的SDK版本,后一种大概20多M,前一种70多M。 二.Eclipse配置

1 安装android 开发插件

(1)打开Eclipse, 在菜单栏上选择 help->Install New SoftWare 出现如下界面:

图3 eclipse install安装

点击 Add按钮,出现如下界面:

18

图4 add进入界面

输入网址:

点击 Next按钮 ,出现如下界面:

图5 Android Development Tools 安装界面

后面即可通过选择I accept来完成相应android sdk开发环境的安装,成功后会在eclipse的工具栏上出现android机器人的相应图标,此时说明android环境已 安装好。

2.配置android sdk

19

(1)点击菜单window->preferences,进入如下界面:

图6 android preferences配置界面

选择你的android SDK解压后的目录,选错了就会报错,这个是升级工具,目前还没有一个版本的SDK。

(2)升级SDK版本,选择菜单 window->Android sdk and avd manager,在里面

勾选update all的选项,则android对应的每个sdk api开始执行安装。 (3)新建AVD(android vitural device),和上面一样,进入android sdk and avd manager,选中Vitural Devices 在点击New按钮,名称可以随便取,target选择 你需要的SDK版本,SD卡大小自定义,点击 Create AVD,则创建AVD完毕。 3.新建Android项目

在file目录下选择new选项,并选择下一级菜单中的other选项,这样就可以新建得到一个android project,到此即完成了android sdk的所有工作。

20

第二章 系统分析

2.1 系统概要

开发android平台下的手机订餐系统,主要目的是为了满足两方面的需求:一方面是满足以android为系统的手机用户软件使用需要;另一方面则是为了满足上班族对中餐的需要。因此我们要结合以上两方面来分析手机订餐系统的设计意义。上班族希望自己每天的饮食能同时做到经济、实惠。但是很多时候上班族都忙于自己的工作,一方面他们无法将自己的精力分摊到饮食中,而另一方面现在许多餐馆的食品质量实在是无法让人恭维。民以食为天。特别对于上班族来说,很多人孤身一人在外面上班,现实生活中每一个人与周围同事之间总为了每天中午应该吃什么而发愁。那么开发android平台下的手机订餐系统对于解决上班族的问题起着至关重要的作用。

2.1.1 Android概要

本系统中最重要的功能即要完成数据库的及时更新,对Android手机而言,最

好的方式莫过于使用SQLite热量骰子地图来整合应用。因此在Android概要中,SQLite的应用过程显得非常重要,Android整合了轻量级的SQL数据库,从而大大减轻了开发者的负担。

数据库支持每个应用程序无论大小的生命线,除非所有的应用程序只处理简单

的数据,那么就需要一个数据库系统存储你的结构化数据,Android使用SQLite数据库,它是一个开源的、支持多操作系统的SQL数据库。在Android中,当我们为某个应用程序创建的数据库,只有它可以访问,其它应用程序是不能访问的,数据 库位于Android设备/data/data//databases文件夹中,包含了基本数据库所具有的各种语言功能。

2.2 总体设计

Android地图整合应用部分采用了SQL数据库,程序使用了手机里的SQLlite创建数据,提供了ListView Widget来作为搜索加载(SELECT),以显示餐厅数据之用,除了新建餐厅资料之外,在ListView上设计与User交互的OnClick Listener,使用户随时可以进入餐厅维护的界面,同时在以上步骤中支持各个餐厅的“删除”与“修改”功能。[2]

通过以下这张表来简单反映出该程序的6个部分和其主要功能:

21

程序名称 程序说明 CreateRestaurant.Menu.java Activity进入点为欢迎界面Activity,提供了3个Menu功能(添加餐馆、编辑餐馆、今天饮食),使用户可以从这个界面开始操作。 InitRestaurantMenu.java “添加餐馆”Activity,提供一个新建餐厅表单Layout以及两个Menu功能(编辑、今天饮食),在这个Activity中,让用户新建餐厅数据进入数据库,当数据库发现欲创建的餐厅名称已存在于数据库,便不运行添加的动作,在User单击“送出”按钮后,随即前往“编辑”Activity。 EditRestaurantMenu.java “编辑餐馆”Activity,这是一个TestView与一个LIstView所组成,在加载此Activity的同时,自数据库中选出已创建好的餐厅数据,将之显示于ListView当中。当用户单击餐厅名称,则跳出对话窗口提供“编辑”或“删除”餐厅数据功能。 续表 ChooseRestaurant.java \今天饮食\,这个Activity包含了一个TextView显示被勾选的餐厅资料之外,也提供了一个MapView来显示该餐厅的地图,运行此Activity程序会自数据库里选出所有餐厅数据,接着,以随机数的方式随机取出餐厅名称、地址以及热量等数据。 GeoPointImageOverlay.java 自定义在地图上放置图片的Overlay类,可让程序调用直接传入Drawable ID与GeoPoint在MapView上显示图片文件Overlay。 22

MySQLiteOpenHelper.java 自定义数据库访问类,包含新建数据表 (OnCreate())、查询数据表(select())、删除数据记录(delete())以及新建数据记录(Insert())等方法。 表1 订餐系统总体设计介绍

六个大类的设计从整体上相辅相成,类的组织则由附录中的类的组织结构图来完成。本设计类图在论文的最后,包含有软件设计的全部流程图和全设计类图。这个类图主要的作用是用来说明本程序的基本运行流程和该系统在设计过程中界面和类的整体结构。以上的6个类的内容在整体设计中都会利用到GPS+Camera的混搭,让创建餐馆功能得以轻松完成,而且不需要键入任何地址数据,也能让照片拥有地理坐标,最后存储在数据库中,让程序骰子取出使用。

23

第三章 详细设计

3.1 具体类的设定

3.1.1 类CreateRestaurant.Menu.java的实现

第一个类CreateRestaurant类主要是为了给用户提供了在进入欢迎界面后完成后面后续步骤的操作。这个Menu导引用户实现其对应的功能,整个程序内容中主要包含了有关Menu菜单的描述。主程序中包含了3个Menu功能菜单,这3个菜单分别指向了系统中包含的其它3个功能,即新建餐馆、编辑餐馆和今天饮食的问题。 对于程序中可能出现的问题,则要事先设置好相应的访问规则,这里有3个分支,所以在选择结构中我考虑使用到switch-case选择结构,这样判定不仅准确性高,而且能更好的提高程序整体的复用性。以下是该程序中的关键步骤: 在创建菜单栏过程中,以下3个android菜单创建过程最为关键。通过这3个步骤来依次管理Menu的3个部分下对应的菜单,以下是3条执行语句。 /* 建立3个Menu选单 */

menu.add(idGroup1, MENU_ADD, orderItem1,

R.string.str_manu1).setIcon(android.R.drawable.ic_menu_add);

menu.add(idGroup1, MENU_EDIT, orderItem2,

R.string.str_manu2).setIcon(android.R.drawable.ic_dialog_info);

menu.add(idGroup1, MENU_DRAW, orderItem3, R.string.str_manu3).setIcon(R.drawable.hipposmall);

Android在menu选项中加入identifier,这些identifier的作用是给刚才的menu选单提供识别标识,从而能使它们可以唯一被计算机所识别。点击Menu时,系统调用当前Activity的onCreateOptionsMenu方法,并传一个实现了一个Menu接口的menu对象供你使用。

/* 独一无二的menu选项identifier,用以识别事件 */

static final private int MENU_ADD = Menu.FIRST; static final private int MENU_EDIT = Menu.FIRST+1; static final private int MENU_DRAW = Menu.FIRST+2;

3.1.2 类InitRestaurantMenu.java的实现

\添加餐厅\程序,提供了一个输入表单,该表单内包含餐厅名称、地

24

址以及热量三个字段,皆为必填字段,当用户单击\送出\按钮,则先查询数据库里是否有已存在的餐厅名称。当餐厅名称未存在时,才创建新的餐厅数据进数据库,随后关闭该Activity,前往“编辑餐馆”Activity进行维护与查看餐厅数据列表。

欲使用自定义数据库访问类(MySQLiteOpenHelper.java)来查询数据,则是调用dbHelp.select()来进行查询,需传入的参数选项依次为数据表名称(table)、查询取得字段(columns)、查询条件名称(selection)、查询条件值(selectionArgs) 、分组别GROUPBY参数(groupBy)HAVING参数(having)以及ORDERBY参数(orderby)。

在使用数据库新建数据的过程中,由于数据表(t_restaurant)字段有4个:f_id 、f_name、f_address和f_cal,分别代表数据ID、餐厅名称、餐厅地址与消耗热量,创建的字段类型除了f_id为自动增加的整数类型之外,其余均使用text类型,这样做的一个好处是有效避免了UI会检查各种格式的问题。以下是该程序中的关键步骤:

在数据库中每添加一个餐厅资料,那么需要我们对每一个新建的餐厅资料要有明确的标识方式,就像关系数据库有标识符和对应关系一样,我们需要明确餐厅的基本资料,下面的申明就是对应餐厅的资料使用:

/* version必须大于等于1 */ int version = 1; /* Table数据表 */

String tables[] = { \ /* 字段名称 */

String fieldNames[][] = {

{ \ };

/* 字段类型 */

String fieldTypes[][] = {

{ \ };

25

这个餐厅数据界面在启动功能选项的时候,我可以在该界面停留并做出两个选择。其中一个是前往编辑功能、而另外一个是前往系统随机数选择餐厅功能,为了区分开这两个选项,在上一个类中已经预先定义好了MENU_EDIT和MENU_DRAW这两个标识符来标识程序的流向。

switch(item.getItemId()) {

case (MENU_EDIT): /* 前往编辑功能 */

if(dbHelper!=null && dbHelper.getReadableDatabase().isOpen()) {

dbHelper.close(); }

intent.setClass(EX10_06_02.this, EX10_06_03.class); startActivity(intent); finish(); break;

case (MENU_DRAW):

/* 前往系统随机数选择餐厅功能 */

if(dbHelper!=null && dbHelper.getReadableDatabase().isOpen()) {

dbHelper.close();

}

intent.setClass(EX10_06_02.this, EX10_06_04.class); startActivity(intent); finish(); break; }

return super.onOptionsItemSelected(item); }

26

3.1.3 类EditRestaurantMenu.java的实现

类EditRestaurant的主要功能是为了完成“编辑餐馆”的Activity功能,该 Activuty在UI部署上设计了两个TextView(mTextView01)与ListView(mListView01),前者用以显示此Activity的功能描述,后者则是提供在数据库搜索之后得到的显示结果。此过程于onCreate()同时,调用mListView01.setOnItemListener()方法捕捉User在ListView上单击按键或单击餐馆名称之后要处理的事件,如程序里所描述的,当User在ListView上单击了其中一个餐厅名称,便会跳出AlertDialog,在这个Dialog对象上显示两个Item选项即“数据修改”和“删除数据”。

运行“数据修改”功能,程序依据用户选择餐厅的intItemSelected(数据库字段f_id)进行数据库更新的工作(dbHelper.update()),而在更新之前,会带入该餐厅原本的数据于AlertDialog里的3个EditText Widget当中,这样可以供用户参考旧的记录进行修改。以下是该程序中的关键步骤:

从类的结构来看,这个类作为本程序的核心类,我们自然要关注的是这个类的核心功能。那么依照我们前面对数据库的定义方式,当我们确定google map定位的具体位置时,比如我目前在武汉,则数据库应该保存处于武汉这个地区所有可能的餐厅进行选择,因此我们要对数据字段进行初始化说明。

private List allRestaurantID; private List allRestaurantName; private List allRestaurantAddress; private List allRestaurantCal;

private List lstRestaurant;

private int intItemSelected=-1; /* 数据库数据表 */

private String tables[] = { \ /* 数据库字段名称 */

private String fieldNames[][] = {

{ \

};

27

/* 数据库字段数据型态 */ private String fieldTypes[][] = {

{ \

};

更新ListView数据的清单对整个系统的稳定运行和维护起到作用,在前一个查询得到的数据之后通过更新来完成对餐厅的多次查询,经过多次查询后完成对新一片区域餐厅的搜索,最终可以删除餐厅的数据。当数据库无数据的时候,我们就把flag位置为-1,这样好区分数据库是否有无记录。 if(lstRestaurant.size()>0) {

ArrayAdapter adapter = new ArrayAdapter(EX10_06_03.this,

R.layout.simple_list_item_single_choice, lstRestaurant); mListView01.setItemsCanFocus(true);

mListView01.setChoiceMode(ListView.CHOICE_MODE_SINGLE); mListView01.setAdapter(adapter); } else {

/* 数据库无纪录,将flag设定为-1 */ intItemSelected = -1;

ArrayAdapter adapter = new ArrayAdapter(EX10_06_03.this,

R.layout.simple_list_item_single_choice, lstRestaurant); mListView01.setItemsCanFocus(true);

mListView01.setChoiceMode(ListView.CHOICE_MODE_SINGLE); mListView01.setAdapter(adapter);

}

28

有关android每个函数的用法,我参考的是android的widget合集中每一个部分的使用方法。跟类CreateRestaurant.Menu.java有类似的地方在于我们要定义一个boolean函数onMenuItemSelected(),这个函数就会用到我们在第一个类中已经定义的3个识别标识identifier,利用switch-case结构来实现对进入界面所需要的选择步骤。

switch(item.getItemId()) {

case (MENU_ADD): /* 前往新建餐厅功能 */

if(dbHelper!=null && dbHelper.getReadableDatabase().isOpen()) {

dbHelper.close(); }

intent.setClass(EX10_06_03.this, EX10_06_02.class);

startActivity(intent); finish(); break;

case (MENU_DRAW):

/* 前往系统随机数选择餐厅功能 */

if(dbHelper!=null && dbHelper.getReadableDatabase().isOpen()){ dbHelper.close(); }

intent.setClass(EX10_06_03.this, EX10_06_04.class); startActivity(intent); finish(); break; }

return super.onMenuItemSelected(featureId, item); }

29

3.1.4 类ChooseRestaurant.java的实现

ChooseRestaurant类将会对每一个你将要选择的餐厅进行一次二次选择,而为了保证我们在餐厅选择过程中保持有一定的客观性,所以该Activity会以随机数选择餐厅数据drawRestaurant(),所以要从该类的oncreate()方法开始,便会向数据库运行查询所有餐厅的工作(select f[] from tables[0]),通过该查询得到的查询结果将会以List存放,同时包含有以下4个对象即allRestaurtantID (f_id)、allRestaurtantName(f_name)、allRestaurtantAddress(f_address)、与 allRestaurtantCal(f_cal)。随机数取得众餐厅里的ID值(allRestau-rantID),依次此ID我们可以查出选择餐厅的地址、名称以及中午吃饭所能获得的热量。 在这个Activity当中,除了TextVIew Widget外,尚有一个com.google.Android .maps.MapViewWidget,所以这个类我们需要注意的是它并不直接继承自Activity,

而是继承自MapActivity,关键方法部分也必须重写isRouteDisplayed()方法,否 则可能会导致程序在编译过程中产生错误。

当我们有了被勾选的餐厅地址(allRestaurtantAddress.get(intItemSele)), 便可以利用android中非常重要的自定义函数getGeoByAddress()来反查该地址的 GeoPoint坐标,获得坐标后最后调用refreshMapViewByGeoPoint()函数来更新Map View里的Google地图。下面是程序关键部分说明:

这个类的使用需要注意的地方是我们要用到google地图所提供的API接口,地 图精确定位是google利用卫星所创造的优势,那么我们编写利用google地图完成 勾选餐厅位置功能,大致的步骤是需要先获得查询地址的地理坐标->依照地理地址 反查询地理坐标->更新MapView地图->在地图上显示OverLay图片,由此步骤我们 用到的有关android.maps下的地图包。

查询GeoPoint类下的函数来取得地理坐标,以下是实现部分: /* 以地址查询地理坐标 */ GeoPoint gp =

getGeoByAddress(allRestaurantAddress.get(intThrowIndex)); if(gp==null) {

/* 地址无法反查为GeoPoint时 */

30

mMapView01.setVisibility(MapView.GONE); } else {

/* 更新MapView地图 */

mMapView01.setVisibility(MapView.VISIBLE); showImageOverlay(gp);

refreshMapViewByGeoPoint(getGeoByAddress

(allRestaurantAddress.get(intThrowIndex)),mMapView01,intZoomLevel, true); } } else {

/* 数据库无纪录 */ }

GeoPoint类在系统中是属于自定义的私有类型,因此我需要重新描述这个函数, 传递给这个函数的参数实际上就是一个地址字符串strSearchAddress,最终得到的 返回对象是地理坐标对象。

private GeoPoint getGeoByAddress(String strSearchAddress) {

GeoPoint gp = null; try {

if(strSearchAddress!=\ {

Geocoder mGeocoder01 = new Geocoder(EX10_06_04.this, Locale.getDefault());

List lstAddress =

31

mGeocoder01.getFromLocationName(strSearchAddress, 1); if (!lstAddress.isEmpty()) {

}

Address adsLocation = lstAddress.get(0); /* 1E6 = 1000000*/

double geoLatitude = adsLocation.getLatitude()*1E6; double geoLongitude = adsLocation.getLongitude()*1E6; gp = new GeoPoint((int) geoLatitude, (int) geoLongitude);

}

}

catch (Exception e) {

e.printStackTrace(); }

return gp; }

3.1.5 类GeoPointImageOverlay.java的实现

GeoPointImageOverlay类继承自Overlay类,调用其内覆盖的draw()方法即可在OverLay上绘制文字或图标,以此类为例,则是放置一张drawable图片。该Overlay类有3中构造方法,程序中以第三种传入GeoPoint对象的方式来构建,在MapVier上指定GeoPoint的经纬度来放置一张图片。以下是该类调用方法的基本说明:

Android中Overlay类是一个基类,本身它表示可以显示在地图上方的覆盖类。 添加一个overlay时,从这个基类派生出一个子类,创建一个实例,然后把它加入到一个列表中。这个列表通过调用 MapView.getOverlays()得到。为了允许用户触摸去对齐一个点,子类应当实现Overlay.Snappable接口。Overlay类中同时包含有一些draw和touch方法,这些方法的调用可以使放置图片与创造经纬度的方式更加容易。

32

本文来源:https://www.bwwdw.com/article/0rdf.html

Top