基于Android的手机通讯录_第1页
基于Android的手机通讯录_第2页
基于Android的手机通讯录_第3页
基于Android的手机通讯录_第4页
基于Android的手机通讯录_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

..本科毕业设计<论文>基于android的云通讯录的设计学院信息工程学院专业信息工程<电子信息工程方向>年级班别2011级〔2班学号3111002767学生姓名潘欢欢指导教师童怀2015年5月..摘要三号黑体加粗<摘要内容>论文摘要应能概括研究题目的内容和主要观点,中文摘要在400字左右,并译成英文。三号黑体加粗摘要正文后下空一行打印"关键词"三字〔四号黑体,加粗,关键词一般为3~5个,每一关键词之间用逗号分开,最后一个关键词后不打标点符号。目录中各章题序的阿拉伯数字用TimesNewRoman体,第一级标题用小四号黑体,其余用小四号宋体。关键词:关键词1,关键词2,关键词3,关键词4,关键词5注:摘要和封面之间不需要竖排"书脊"页,一切以此模板的格式为准。注:本设计〔论文题目来源于老师的国家级〔或部级、省级、厅级、市级、校级、企业科研项目,项目编号为:____________。..Abstract<Abstractcontent.>Keywords:keywords1,keyword2目录1.系统描述11.1问题描述11.2功能描述11.3数据需求21.4设计意义22.背景介绍22.1Android系统概述22.2Android开发组件42.2.1Activity组件42.2.2Service组件72.2.3BroadcastReceiver组件82.2.4ContentProvider组件82.3Android数据库92.3.1SQLite数据库92.3.2SQLite数据库特点103.可行性研究113.1技术可行性113.2经济可行性113.3操作可行性114.需求分析124.1前期调研124.2数据流图124.3数据字典135.系统设计145.1总体设计145.2数据库表结构145.2.1实体145.2.2系统E-R图155.2.3数据库表设计155.3输入/输出设计165.4处理过程设计175.4.1业务流程图175.4.2系统Activity设计185.4.3功能处理设计195.4.4系统界面设计236.详细设计286.1开发环境286.2程序设计296.2.1数据类设计296.2.2Main<Activity>设计326.2.3AddNew<Activity>设计336.2.4UserDetail<Activity>设计346.2.5MainPrivacy<Activity>设计357.系统测试367.1程序调试367.2系统的测试367.2.1测试的意义及目的367.2.2测试步骤367.2.3测试的主要内容377.3测试数据387.3.1添加模块测试387.3.2查看编辑模块测试397.3.3查询模块测试417.3.4删除模块测试437.3.5备份与还原模块测试468设计总结488.1设计特点488.2经验与收获49本科生课程设计成绩评定表51..毕业设计〔论文任务书学生姓名潘欢欢专业班级11级电子信息工程2班学号3211002837指导教师姓名及职称童怀教授题目基于Android的云通讯录的设计与开发论文〔设计的主要任务与具体要求主要任务:1>联系人的新增、编辑、删除功能。2>可进行联系人的备份与恢复功能。3>个人空间登录功能。4>直接拨打和发送短信。5>长按联系人可进行批量删除联系人6>在搜索联系人界面下,可按拼音或汉字等搜索快速搜索具体要求:1搭建相关的开发环境和数据库环境;2搜集与课题有关的JDK、Eclipse、ADT、AndroidSDK、AVD、微信开放平台SDK工具,并结合工具实现相关功能;3>论文篇幅10000字以上,材料详实、论描述完整、严密;4>语言通顺,逻辑性强。进度安排〔包括时间划分和各阶段主要工作内容1、第一阶段:20XX12月~2015年3月,收集资料,确定研究方向,完成论文选题。2、第二阶段:2015年3月~4月,完成论文开题报告、撰写提纲3、第三阶段:20XX4月~5月,完成论文初稿、二稿。4、第四阶段:20XX5月~6月,毕业论文完稿,答辩。主要参考文献[1]靳岩.GoogleAndroid开发入门与实战[M][M].北京:人民邮电出版社,2009:1-12.[2]景保玉.2010中国移动应用开发现状与趋势大调查[M].[R].北京:人民邮电出版社,2011.[3]郭志宏..Android应用开发详解[M].[M].北京:电子工业出版社,2010.[4]韩超,梁泉..Android?系统开发原理及开发要点详解[M][M].北京:电子工业出版社,2010.[5]余志龙.GoogleAndroidSDK开发范例大全<第2版>[M].[M].北京:人民邮电出版社,2010.系审核意见:审核人签名及系公章:年月日任务下达人〔签字年月日任务接受人〔签字年月日基于Andriod环境的通讯录系统设计1.系统描述1.1问题描述设计与实现一个在Android系统上运行的手机通讯管理软件,实现手机通讯录的基本功能,包括:添加联系人、查看联系人、修改联系人、删除联系人、拨打、发送短信、查询联系人,以及联系人的导入导出功能即联系人的备份。主要开发基于Android的手机的通讯管理软件。以Java语言为基础,结合Android移动开发平台,并利用Android提供的SDK,实现在Android平台上运行的手机通讯录,方便广大手机用户更加便捷地对联系人的信息进行管理。该手机通讯录面向所有的Android手机用户,为他们提供更实际便捷的手机服务,具有拨号、通讯记录等基本功能。该通讯录的数据导出功能是该软件的一个特色,可以实现联系人数据导出到文本,实现数据备份。大家生活当中经常遇到手机丢失,出现故障,和其他一些事故。最担心的就是丢失手机里的号码。1.2功能描述此次设计的软件主要功能有:添加__可以添加联系人的基本信息,如:姓名、、单位、住址等信息;查看信息:查看某个联系人的具体信息;查询__根据输入的条件查询联系人;修改联系人的信息;数据备份与还原:可以将整个通讯录备份到SD卡上,以防止信息丢失、抑可将备份的数据还原到通讯录中;1.3数据需求本程序的数据为通讯录中的联系人信息,这些信息有用户输入,并保存在Android的SQLite数据库中,主要有:联系人的姓名、手机、家庭、公司、单位、家庭地址、电子邮件、备注等信息。1.4设计意义随着3G网络的使用,移动终端不再仅是通讯网络的终端,还将成为互联网的终端。因此,移动终端的应用软件和需要的服务将会有很大的发展空间。在Google和Android手机联盟的共同推动下,Android在众多手机操作系统中脱颖而出,受到广大消费者的欢迎。手机通讯录作为手机的基本功能之一,每天我们都在频繁地使用着。根据手机功能使用调查显示,有八成以上的消费者使用手机通讯录功能。随着手机通讯录功能的不断加强与完善,手机通讯录对于人们的意义,已不仅仅像记事簿一样显示通讯地址,而是向着个性化、人性化的方向发展。通讯录从无到有,从英文到中文,经过了十几年的发展历程,今后的发展趋势就是从通讯录发展为名片夹,也就是在一个人名下,可以存储座机、手机、单位、地址、电子邮件等内容。这种名片夹在薄的基础上,大大丰富了内容,同时结构也发生了革命性变化,而且随着手机的发展,相信更优秀的通讯录会越来越受到社会各层人士的喜爱。2.背景介绍2.1Android系统概述Android一词的本义指"机器人",同时也是Google在20XX11月5日宣布的基于Linux内核的开源手机系统的名称,中文注册商标"安致",该平台由操作系统、中间件、用户界面和应用软件组成,是一个为移动终端打造的真正开放和完整的智能手机系统。其早期为Google开发,后由开放手机联盟〔OpenHandsetAlliance开发。它采用了软件堆层〔softwarestack,又名以软件叠层的架构,主要分为三部分,底层以Linux内核为基础,由C语言开发,只提供基本功能;中间层包括数据库Library和虚拟机VirtualMachine,由C++开发;最上层是由各公司自行开发,以Java编写的各种应用软件,如通话程序,短信程序等。Android平台架构:Android平台整体自底向上由以下四个层次组成:Linux内核层、Android运行库和其他库层、应用框架层、应用程序层。Linux内核层Android基于Linuxversion内核开发的,主要是添加了一个名为Goldfish的虚拟CPU以及Android运行。所需的特定驱动代码,该层用来提供系统的底层服务,包括安全机制、存管理、进程管理、网络堆栈及一系列驱动模块。作为一虚拟的中间层,该层位于硬件和软件层之间。但这个内核操作系统并非类GNU/Linux的,所以其系统库、系统初始化和编程接口都和标准Linux系统有所不同的。它没有采用虚拟内存文件系统。而是采用YAFFS2文件系统YAFFSYetAnotherFlashFileSystem文件系统是一个开源的,专门为NANDFlash设计的文件系统,具有很好的可移植性,也是一种日志型文件系统,能够在Linux,uCLinux和WindowsCE上运行。YAFFS目前有YAFFS和YAFFS2两个版本,一般来说,YAFFS对小页面528字节/页有很好的支持,而更大的页面2K64字节/页就需要支持超大容量的NANDFlash。所以采用支持大页面的YAFFS2文件系统。Android运行库和其他库层Android运行库包含一组核心库和Dalvik虚拟机。同时Android提供了丰富的库类支持且大部分为开源代码,如采用的数据库为SQLite。Android选择它作为移动终端的嵌入式数据库有以下优点,它无需安装和管理配置,它是一个存储在单一磁盘文件中的完整数据库,体积小只有250KB但支持数据库大小至2TB,提供了对事务功能和并发处理的支持,而且比目前流行的大多数数据库运行速度快。应用框架层在应用框架Android开发人员可以跟那些核心应用一样拥有访问框架APIS的全部权限。应用的系统机构化设计简化了各组件之间的重用,任何应用都可以分发自己的足见,任何应用也可以使用这些分发的足见。应用程序层Android本身会附带一些核心的应用程序,包括e-mail客户端、短信程序、日历、地图、浏览器、通讯录等等,目前所有的应用程序都是由java语言开发的。图2-1Android体系结构2.2Android开发组件Android开发四大组件分别是:活动<Activity>:用于表现功能;服务<Service>:后台运行服务,不提供界面呈现;广播接收器<BroadcastReceiver>:用于接收广播;内容提供商〔ContentProvider:支持在多个应用中存储和读取数据,相当于数据库。2.2.1Activity组件Android中,Activity是所有程序的根本,所有程序的流程都运行在Activity之中,Activity可以算是开发者遇到的最频繁,也是Android当中最基本的模块之一。一般一个Android应用是由多个Activity组成的,这多个Activity之间可以进行相互跳转,每个Activity都是一个单独的类,它扩展实现了Activity基础类。这个类显示为一个有Views组成的用户界面,并响应事件。大多数程序有多个Activity。某些情况下,一个Activity可能会给前一个Activity返回值。打开一个新界面后,前一个界面被暂停,并放入历史栈中。使用者可以回溯前面已经打开的存放在历史栈中的界面,也可以从历史栈中删除没有价值的界面。Activity的生命周期如图2-1所示,Activity的5中状态之间的如何切换与运作图2-2Activity的生命周期一个Activity的启动顺序:onCreate<>-->onStart<>-->onResume<>当另一个Activity启动时:第一个ActivityonPause<>-->第二个ActivityonCreate<>-->onStart<>-->onResume<>-->第一个ActivityonStop<>当返回到第一个Activity时:第二个ActivityonPause<>-->第一个ActivityonRestart<>-->onStart<>-->onResume<>-->第二个ActivityonStop<>-->onDestroy<>一个Activity的销毁顺序:情况一:onPause<>--><ProcessKilled>情况二:onPause<>-->onStop<>--><ProcessKilled>情况三:onPause<>-->onStop<>-->onDestroy<>每一个活动Activity都处于某一个状态,对于开发者来说,是无法控制其应用程序处于某一个状态的,这些均由系统来完成。但是当一个活动的状态发生改变的时候,开发者可以通过调用onXX<>的方法获取到相关的通知信息。在实现Activity类的时候,通过覆盖override这些方法即可在你需要处理的时候来调用。onCreate:当活动第一次启动的时候,触发该方法,可以在此时完成活动的初始化工作。onCreate方法有一个参数,该参数可以为空null,也可以是之前调用onSaveInstanceState〔方法保存的状态信息。onStart:该方法的触发表示所属活动将被展现给用户。onResume:当一个活动和用户发生交互的时候,触发该方法。onPause:当一个正在前台运行的活动因为其他的活动需要前台运行而转入后台运行的时候,触发该方法。这时候需要将活动的状态持久化,比如正在编辑的数据库记录等。onStop:当一个活动不再需要展示给用户的时候,触发该方法。如果内存紧张,系统会直接结束这个活动,而不会触发onStop方法。所以保存状态信息是应该在onPause时做,而不是onStop时做。活动如果没有在前台运行,都将被停止或者Linux管理进程为了给新的活动预留足够的存储空间而随时结束这些活动。在一些情况下,onPause方法或许是活动触发的最后的方法,因此开发者需要在这个时候保存需要保存的信息。onRestart:当处于停止状态的活动需要再次展现给用户的时候,触发该方法。onDestroy:当活动销毁的时候,触发该方法。和onStop方法一样,如果内存紧张,系统会直接结束这个活动而不会触发该方法。onSaveInstanceState:系统调用该方法,允许活动保存之前的状态,比如说在一串字符串中的光标所处的位置等。Activity栈每个Activity的状态是由它在Activity栈〔是一个后进先出LIFO,包含所有正在运行Activity的队列中的位置决定的。当一个新的Activity启动时,当前的活动的Activity将会移到Activity栈的顶部。如果用户使用后退按钮返回的话,或者前台的Activity结束,活动的Activity就会被移出栈消亡,而在栈上的上一个活动的Activity将会移上来并变为活动状态。如图2-3所示,Activity在栈中的活动顺序:图2-3Activity栈每个Activity都有一个默认窗体;另外Activity也会使用额外的窗体,例如:弹出式对话框,窗体中的元素是由view类的对象生成的,它们都继承自基类View。2.2.2Service组件Service是android系统中的一种组件,它跟Activity的级别差不多,但是它不能自己运行,只能后台运行,并且可以和其他组件进行交互。Service是没有界面的长生命周期的代码。Service是一种程序,它可以运行很长时间,但是它却没有用户界面。开启service有两种方式:<1>Context.startService<>:Service会经历onCreate->onStart〔如果Service还没有运行,则android先调用onCreate<>然后调用onStart<>;如果Service已经运行,则只调用onStart<>,所以一个Service的onStart方法可能会重复调用多次;stopService的时候直接onDestroy,如果是调用者自己直接退出而没有调用stopService的话,Service会一直在后台运行。该Service的调用者再启动起来后可以通过stopService关闭Service。注意,多次调用Context.startservice<>不会嵌套〔即使会有相应的onStart<>方法被调用,所以无论同一个服务被启动了多少次,一旦调用Context.stopService<>或者stopSelf<>,他都会被停止。补充说明:传递给startService<>的Intent对象会传递给onStart<>方法。调用顺序为:onCreate-->onStart<可多次调用>-->onDestroy。<2>Context.bindService<>:Service会经历onCreate<>->onBind<>,onBind将返回给客户端一个IBind接口实例,IBind允许客户端回调服务的方法,比如得到Service运行的状态或其他操作。这个时候把调用者〔Context,例如Activity会和Service绑定在一起,Context退出了,Srevice就会调用onUnbind->onDestroyed相应退出,所谓绑定在一起就共存亡了。2.2.3BroadcastReceiver组件在Android中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制。而BroadcastReceiver是对发送出来的Broadcast进行过滤接受并响应的一类组件。可以使用BroadcastReceiver来让应用对一个外部的事件做出响应。例如,当呼入这个外部事件到来的时候,可以利用BroadcastReceiver进行处理。BroadcastReceiver不能生成UI,也就是说对于用户来说不是透明的,用户是看不到的。BroadcastReceiver通过NotificationManager来通知用户这些事情发生了。BroadcastReceiver既可以在AndroidManifest.xml中注册,也可以在运行时的代码中使用Context.registerReceiver<>进行注册。只要是注册了,当事件来临的时候,即使程序没有启动,系统也在需要的时候启动程序。各种应用还可以通过使用Context.sendBroadcast<>将它们自己的intentbroadcasts广播给其他应用程序。2.2.4ContentProvider组件ContentProvider是Android提供的第三方应用数据的访问方案。在Android中,对数据的保护是很严密的,除了放在SD卡中的数据,一个应用所持有的数据库、文件、等等内容,都是不允许其他直接访问的。Andorid当然不会真的把每个应用都做成一座孤岛,它为所有应用都准备了一扇窗,这就是ContentProvider。应用想对外提供的数据,可以通过派生ContentProvider类,封装成一枚ContentProvider,每个ContentProvider都用一个uri作为独立的标识,形如:content://com.xxxxx。所有东西看着像REST的样子,但实际上,它比REST更为灵活。和REST类似,uri也可以有两种类型,一种是带id的,另一种是列表的。另外,ContentProvider不和REST一样只有uri可用,还可以接受Projection,Selection,OrderBy等参数,这样,就可以像数据库那样进行投影,选择和排序。查询到的结果,以Cursor的形式进行返回,调用者可以移动Cursor来访问各列的数据。ContentProvider屏蔽了内部数据的存储细节,向外提供了上述统一的接口模型,这样的抽象层次,大大简化了上层应用的书写,也对数据的整合提供了更方便的途径。ContentProvider内部,常用数据库来实现,Android提供了强大的Sqlite支持,但很多时候,你也可以封装文件或其他混合的数据。2.3Android数据库2.3.1SQLite数据库SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生于20XX5月.至今已经有10个年头,SQLite也迎来了一个版本SQLite3已经发布。SQLite数据类型:一般数据采用的固定的静态数据类型,而SQLite采用的是动态数据类型,会根据存入值自动判断。SQLite具有以下五种常用的数据类型:NULL:这个值为空值VARCHAR<n>:长度不固定且其最大长度为n的字串,n不能超过4000CHAR<n>:长度固定为n的字串,n不能超过254。INTEGER:值被标识为整数,依据值的大小可以依次被存储为1,2,3,4,5,6,7,8.REAL:所有值都是浮动的数值,被存储为8字节的IEEE浮动标记序号.TEXT:值为文本字符串,使用数据库编码存储<TUTF-8,UTF-16BEorUTF-16-LE>.BLOB:值是BLOB数据块,以输入的数据格式进行存储。如何输入就如何存储,不改变格DATA:包含了年份、月份、日期。TIME:包含了小时、分钟、秒。2.3.2SQLite数据库特点轻量级SQLite和C/S模式的数据库软件不同,它是进程内的数据库引擎,因此不存在数据库的客户端和服务器。使用SQLite一般只需要带上它的一个动态库,就可以分享它的全部功能。而且动态库的尺寸也相当小。独立性。SQLite数据库的核心引擎不依赖第三方软件,使用它也不需要"安装"。所以在部署的使用能省去不少麻烦。隔离性SQLite数据库中所有的信息〔比如表、视图、触发器等都包含在一个文件内,方便管理和维护。跨平台性SQLite数据库支持大部分操作系统,除了我们在电脑上使用的操作系统之外。很多手机操作系统都可以运行,比如Android、WindowsPhone、Symbin、Plam、IOS等。多语言接口SQLite数据库支持很多编程语言接口,比如C/C++、Java等,得到很多开发者的喜爱。安全性SQLite数据库通过数据库级上的独占性和共享锁实现独立事务处理。这就意味着多个进程可以在同一时间从同一数据库读取数据,但只有一个可以写入数据。在某个进程或线程向数据库执行写入操作之前,必须取得独占锁。在发出独占锁后,其他的读或写操作将不会在发生。3.可行性研究3.1技术可行性本系统设计到的技术因素主要有如下几个方面:UI页面的设计Android控件的各种函数的应用,实现其功能Activity的之间的跳转,页面之间值得传递方式,如何利用Intent数据库的创建和操作,如何把联系人的信息存储到数据库中,并把它显示出来配置环境,装有Windows电脑一台,安装Eclipse,安装AndroidSDK,安装JDK,并配置了环境变量,安装ADT插件。开发技术:本次设计用的是Java开发语言和Android相关开发知识,由于Android是开源项目,基于Java,语法上并不难,网络上学习资源较多,因此技术上可行,调试相对简单。硬件支持:当前的计算机硬件配置也完全能满足开发的需求,能够良好的运行哥开发软件和Android虚拟机。软件方面:相关的开发软件,可以方便的从网上下载,易于获得,且可以满足系统需求。综上所述:技术上可行!3.2经济可行性由于软件资源可以从网络上免费获得,因此,软件尚不需要花费,另外,由于Android有自己的运行虚拟机,因此开发的应用不用在Android实体机上运行,省去了一部分硬件成本,因此经济上可行。3.3操作可行性开发的应用完全可以运行在Android虚拟机上,当然也可以运行在实体机上,而且整个应用操作上相对简单,操作上可行。4.需求分析4.1前期调研通过对已有的手机通讯录的研究,对其基本业务流程进行分析,确定出基本的处理需求:用户的行为:增、删、改、查、备份与还原。增:增加联系人的基本信息;删:删除已有联系人的基本信息;改:修改已有联系人的信息;查:查询联系人的基本信息;备份与还原:备份该通讯录数据库中的数据到SD卡上,或者从SD卡上还原备份的数据。4.2数据流图根据"功能分解,逐步求精"的原则,此次需求分析的数据流图主要分为三层:顶层数据流图:确定系统的输入与输出、第一层数据流图:对系统进行第一层功能分解,确定系统的主要工作、第二层数据流图:确定系统详细的工作流图顶层数据流图:底层数据流图:4.3数据字典数据流图表达了数据和处理的关系,数据字典则是系统中的各类数据描述的集合,是进行详细的数据手机和数据分析做得到的主要成果,可以自己设计一套适合阅读的图表。本设计的数据字典有:联系人的信息,具体如下:名字:联系人信息名字:联系人信息别名:Contacts描述:联系人的详细信息定义:联系人的信息=头像+姓名+手机号码+办公室号码+家庭+职务职称+单位名称+地址++Email+其他联系方式+备注位置:联系人信息表5.系统设计5.1总体设计Android手机通讯管理软件主要功能模块包括:联系人添加、联系人查看、联系人编辑、联系人删除、联系人查找、呼叫、发送短信、数据备份与还原、个人空间等,如图5-1所示:图5-1总体设计图5.2数据库表结构5.2.1实体根据需求分析的数据流图,对其进行自底向上的分析。抽象出设计视图,集成局部视图,得到全局的概念结构。本数据库的实体为:联系人信息〔头像,姓名,手机号码,办公室号码,家庭,职务职称,单位名称,地址,,Email,其他联系方式,备注5.2.2系统E-R图根据E-R的设计过程,根据初始数据流图设计初始的E-R图,而后将各分E-R图集成,消除冲突、消除冗余,得到最初的E-R图,对其进行分析和根据规范化理论进行规范化,集成视图,最后形成基本的E-R图。其过程如图所示:联系人实体E-R图图5-2联系人信息实体E-R图5.2.3数据库表设计根据上述联系人实体E-R图,设计出数据库的表,如表5-1所示,表5-1user表的设计字段名数据类型是否为空约束条件备注_idint非空主键自动增量nameText非空mobilephoneText可以为空officephoneTextfamilyphoneTextaddressTextothercontactTextemailTextpositionTextcompanyTextzipcodeTextremarkTextimageidintprivacyint隐私用户1普通用户05.3输入/输出设计在这个系统中,通过对系统的分析,可以识别出参与者:用户。对于用户而言,通讯录上按钮、菜单、输入框是用户向系统输入的操作请求的输入设备,GUI与是用于向用户输出信息的输出设备。按钮、菜单、输入框按钮、菜单、输入框SQLite数据库GUI系统SQLite数据库GUI系统图5-3 通讯录的参与者事件是来自人操作的重要的消息,表5-2给出了通讯录系统中可能发生的所有事件。表5-2 系统响应及其执行结果事件系统响应执行结果1从手机屏幕点击软件系统调用函数入口,启动系统,进入该软件进入该软件,显示联系人列表2点击"Menu",选择添加联系人调用添加函数进入添加界面3点击其中一个联系人调用查看/修改某个联系人函数进入联系人详细界面4在联系人详细界面点击"Menu",可对联系人进行发送短信调用系统发送短信函数进入发送短信界面5在联系人详细界面点击"Menu",可对联系人进行拨打调用系统拨打函数进入呼叫联系人界面6在联系人详细界面点击"Menu",可对联系人进行修改调用修改函数修改联系人信息7在联系人详细界面点击"Menu",可对联系人进行删除调用删除函数调用删除函数8在联系人列表界面点击"Menu",选择查找调用查找联系人函数显示用户查找结果9在联系人列表界面点击"Menu",选择退出调用退出函数退出通讯录软件10在联系人列表界面点击"Menu",选择菜单调用菜单函数先是菜单界面11在菜单界面选择显示所有人信息调用显示函数显示所有人信息12在菜单界面选择删除所有人信息调用删除函数删除所有人信息13在菜单界面选择备份所有人信息调用备份函数备份信息到SD卡14在菜单界面选择还原所有人信息调用还原函数进入还原界面,还原信息到数据库15在菜单界面选择个人空间调用私人空间类进入私人界面其中的输入包括:用户选择的上述按钮、菜单,还包括输入框的内容,包括:联系人头像、联系人姓名、手机号、家庭、单位、单位名、职位、住址、、备注等信息。其中输出包括:根据用户的选择输出的相应内容,如:联系人列表显示信息、联系人详细信息等。5.4处理过程设计5.4.1业务流程图用户进入手机通讯管理软件后,会看到联系人列表界面。联系人列表界面主菜单中包括:添加、搜索、删除、菜单、退出;其中菜单又包括:显示所有联系人、删除所有联系人、备份信息到SD卡、还原数据到通讯录、个人空间、退出。点击添加联系人,则进入联系人添加界面,添加成功后返回联系人列表界面。点击搜索菜单,则进入联系人搜索界面,输入联系人的全名或一个字,即可查找到相关联系人,点击联系人会进入联系人查看界面,可以对联系人进行编辑、删除、拨打、发送短信,,长按某分联系人,可以选中该联系人,点击删除,会删除已经标记的联系人。点击菜单,可进入菜单界面:点击所有联系人,可以显示所有人信息、点击删除所有联系人,可以删除所有人信息、点击备份信息到SD卡,可以将数据库数据备份到SD卡、点击还原数据到通讯录,可以从SD卡上备份的数据还原到数据库、点击个人空间,输入密码并进入个人操作界面、点击退出,退出到主界面。该软件的业务流程如图5-4所示:用户用户手机通讯管理软件添加联系人编辑联系人删除联系人联系人列表联系人搜索联系人菜单呼叫联系人发送短信退出通讯录显示所有联系人删除所有联系人备份还原个人空间退出菜单图5-4系统业务流程图5.4.2系统Activity设计根据Android的Activity设计原则,设计出整个系统的界面,如图5-5所示:图5-5系统Activity设计图5.4.3功能处理设计浏览联系人用例名称:浏览联系人用例描述:浏览联系人列表角色:手机用户前置条件:通讯录中已有联系人后置条件:显示出所有联系人基本路径打开通讯录系统查询数据库显示出联系人列表查看联系人用例名称:查看联系人用例描述:查看联系人信息角色:手机用户前置条件:通讯录中已有联系人后置条件:给出联系人信息基本路径 A.查看联系人信息 B.给出相关信息编辑联系人用例名称:编辑联系人用例描述:编辑联系人信息角色:手机用户前置条件:通讯录中已有联系人后置条件:修改联系人信息基本路径 A.输入要修改的新信息 B.修改联系人信息删除联系人用例名称:删除联系人用例描述:删除联系人角色:手机用户前置条件:通讯录中已有联系人后置条件:删除联系人基本路径 A.选中联系人,选择删除操做 B.询问是否确定删除操作 C.删除联系人上述三种业务操作的流程图开始开始联系人列表单击某个联系人查看/修改/删除跳转到联系人信息Activity结束联系人数据库图5-6查看/修改/删除流程图查询联系人用例名称:查询联系人用例描述:查询联系人信息角色:手机用户前置条件:通讯录中已有联系人后置条件:给出联系人信息基本路径 A.输入查找的数据 B.查询列表根据数据动态现实出信息点击Menu菜单,选择查找联系人跳转SearchContactActivity,在查找联系人界面中,TextView被监听,根据TextView输入的数据,进行查询后在List中显示。开始开始联系人列表按查询按钮跳转到查看联系人Activity结束输入查询条件显示信息修改/删除操作打、发短信联系人数据库图5-7查询联系人流程图菜单操作用例名称:菜单操作用例描述:选择菜单功能角色:手机用户前置条件:单击菜单按钮后置条件:进入菜单界面基本路径 A.单击菜单按钮 B.选择菜单的功能开始开始联系人列表按查询按钮跳转到菜单Activity结束查看所有联系人数据库删除所有备份还原个人空间退出菜单SD卡数据图5-8菜单操作流程图5.4.4系统界面设计本系统一共有11个页面文件,主要的界面如下:Main.xml文件,如图5-9所示,显示已经存储的联系人数据数据:图5-9系统主界面AddNew.xml文件,如图5-10所示,显示添加联系人的选项,完成联系人的添加:图5-10添加联系人界面Main-menu_grid.xml显示弹出的主菜单的对话图5-11主菜单界面Userdetail.xml文件如图5-12所示,显示联系人的信息具体选项,可以完成数据的编辑和删除:图5-12查看修改界面Imgaeswitch.xml显示用户头像的切换:图5-13选择头像界面Numchoose.xml打时弹出的对话框显示图5-14打发短信界面Item_menu.xml显示主页的菜单图5-15子菜单界面Login.xml为特权用户登录图5-16个人空间登陆界面进入后的界面:图5-17个人空间界面6.详细设计完成上述的操作后,便是进行代码的编写和调试,使用Java语言和AndroidAPI进行程序设计。6.1开发环境开发软件:Eclipse、JDK1.7、AndroidSDK、ADT开发环境:Windows7虚拟设备:AndroidAVD开发版本:Android2.16.2程序设计6.2.1数据类设计用户User类如图6-1所示,主要用于暂存页面获得的信息,然后再存入数据库中。图6-1User类DBhelper类如图6-2所示,主要完成数据库的表的创建和数据的添加删除以及备份的功能,以下是各个具体的函数和变量。图6-2DBhelper类insert<User>函数实现:完成数据的插入,并根据插入是否成功,返回一个长整型的值getAllUser<boolean>的实现:完成数据的显示,使用SQLiteDatabase.query<>方法,利用cursor对象,一一取出字段的值,放入一个hasp表中,最后存入数组列表中,返回给数组列表。modify<User>函数的实现:使用user类中的字段,更新数据库delete<int>函数的实现:根据数据的id进行单个数据的删除deleteAll<int>函数的实现:删除所有数据getTotalCount<>函数的实现:使用cursor对象getint<>方法得到数据的个数getUsers<Stringboolean>函数的实现:完成数据的查找,使用SQL语句中的模糊查找,然后放入数组列表,进行返回。deleteMarked<ArrayList<Integer>>函数的实现:删除被标记多个数据的数据,backupData<boolean>函数的实现:新建一个字符串,把当前所有数据的值写成一个insert语句存入字符串中,以便备份的时候能够插入到数据库中saveDataToFile<string,boolean>函数的实现:把插入字符串写到zpcontacData下的文件中publicvoidbackupData<booleanprivacy>{StringBuffersqlBackup=newStringBuffer<>;Cursorcursor=null;if<privacy>{cursor=dbInstance.query<DB_TABLENAME,newString[]{"_id","name","mobilephone","officephone","familyphone","address","othercontact","email","position","company","zipcode","remark","imageid,privacy"},"privacy=1",null,null,null,null>;}else{cursor=dbInstance.query<DB_TABLENAME,newString[]{"_id","name","mobilephone","officephone","familyphone","address","othercontact","email","position","company","zipcode","remark","imageid,privacy"},"privacy=0",null,null,null,null>;}while<cursor.moveToNext<>>{sqlBackup.append<"insertinto"+DB_TABLENAME+"<name,mobilephone,officephone,familyphone,address,othercontact,email,position,company,zipcode,remark,imageid,privacy>">.append<"values<'">.append<cursor.getString<cursor.getColumnIndex<"name">>>.append<"','">.append<cursor.getString<cursor.getColumnIndex<"mobilephone">>>.append<"','">.append<cursor.getString<cursor.getColumnIndex<"officephone">>>.append<"','">.append<cursor.getString<cursor.getColumnIndex<"familyphone">>>.append<"','">.append<cursor.getString<cursor.getColumnIndex<"address">>>.append<"','">.append<cursor.getString<cursor.getColumnIndex<"othercontact">>>.append<"','">.append<cursor.getString<cursor.getColumnIndex<"email">>>.append<"','">.append<cursor.getString<cursor.getColumnIndex<"position">>>.append<"','">.append<cursor.getString<cursor.getColumnIndex<"company">>>.append<"','">.append<cursor.getString<cursor.getColumnIndex<"zipcode">>>.append<"','">.append<cursor.getString<cursor.getColumnIndex<"remark">>>.append<"',">.append<cursor.getInt<cursor.getColumnIndex<"imageid">>>.append<",">.append<cursor.getInt<cursor.getColumnIndex<"privacy">>>.append<">;">.append<"\n">;}saveDataToFile<sqlBackup.toString<>,privacy>;}restoreData<string>函数的实现:载入备份文件,读出插入字符串,写到数据库中,完成备份findFile<string>函数的实现:判断文件是否存在,能否备份MyDBHleper类:继承于SQLiteOpenHelper,主要有俩个函数,onCreate<>和onUpgrade<>onCreate<>函数主要用于数据库中表的创建。onUpgrade<>函数主要用于数据库的版本不对应,重新创建表。6.2.2Main<Activity>设计如图6-3所示,显示了Main<Activity>涉及的变量以及调用和重写的函数:图6-3Main<Activity>onCreate<Bundle>为主函数,创建ListView对象,将数据与adapter集合起来,显示给用户看,然后响应ListView的点击事件,跳转用户详细信息页面。onActivityResult〔函数的实现:此函数主要是判断是从那些页面跳转到主页面,并刷新主页面onKeyDown<intKeyEvent>的函数实现:响应点击Menu按钮时的事件,用于设置底部菜单是否可见loadBottomMenu<>函数的实现:主菜单的点击事件的响应,实现各种功能模块getMenuAdapter<string[]>函数的实现:将图片和文字设置在一个集合中,组成一个菜单6.2.3AddNew<Activity>设计如图6-4所示,AddNew<Activity>用到的变量以及函数图6-4AddNew<Activity>onCreate〔函数的实现:实现头像的选择,数据的填写。loadImage<>函数实现:使用gallery控件和imageswith实现头像的加载和选择ImageAdapter类的实现自定义头像适配器publicViewmakeView<>{ ImageViewview=newImageView<this>; view.setBackgroundColor<0xff000000>; view.setScaleType<ScaleType.FIT_CENTER>; view.setLayoutParams<newImageSwitcher.LayoutParams<90,90>>; returnview; }initImageChooseDialog<>函数实现:完成图像的选择对话框6.2.4UserDetail<Activity>设计函数基本同AddNew<Activity>,增加了修改按钮的点击事件和删除按钮的点击事件。增加的函数有:loadUserData<>:获得控件,为控件赋值setEditTextAble<>:把页面中的控件可修改setColorToBlack<>设置显示的字体颜色为黑色setColorToWhite<>设置显示的字体颜色为白色setEditTextDisable<>把设置控件不可修改privatevoidmodify<>{数据更新函数 delete<>数据删除函数onCreateOptionsMenu<Menu>的实现:通讯菜单的实现,完成联系人的打,发短信,发邮件功能6.2.5MainPrivacy<Activity>设计如图6-5所示,MainPrivacy<Activity>涉及到的变量以及函数图6-5MainPrivacy<Activity>类图用到的函数:onCreate<>;onActivityResult<>;onKeyDown<int,KeyEvent>;loadBottomMenu<>;loadMainMenuDialog<>;loadSearchLinearout<>;getMenuAdapter<String[],int[]>;onDestroy<>;函数与Main<Activity>的函数相同,不再赘述。7.系统测试7.1程序调试由于以前只学过Java,对Android的开发没有接触过,所以这课设计完全是在自学的基础上进行的开发,开发过程充满了艰辛了喜悦,程序开发中遇到各种问题,如语法的错误,程序逻辑设计的错误。程序开发是一个循序渐进的过程。开发完一个功能,需要及时的测试,待功能测试通过后,方可以进行下一个功能的开发,这样可以保证程序的质量。在程序开发中,使用了打印调试信息,debug调试和断点调试等方法。7.2系统的测试7.2.1测试的意义及目的系统测试是为了发现错误而执行程序的过程,成功的测试是发现了至今尚未发现的错误的测试。测试的目的就是希望能发现潜在的各种错误和缺陷。应根据开发各阶段的需求、设计等文档或程序的内部结构精心设计测试用例,并利用这些实例来运行程序,以便发现错误。7.2.2测试步骤1.模块测试这个测试步骤中是为了发现编码和详细设计的错误。2.系统测试这个测试步骤是为了发现软件设计中的错误。3.验收测试这个测试步骤是为了发现系统需求说明书中的错误。7.2.3测试的主要内容为了保证测试的质量,测试过程包括:代码审查、单元测试、集成测试、确认测试以及系统测试。代码审查代码审查为了发现代码中冗余的部分,不合理的部分。单元测试单元测试〔模块测试是编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。通常而言,一个单元测试是用于判断某个特定条件〔或者场景下某个特定函数的行为。1.集成测试集成测试是在单元测试的基础上,测试在将所有的软件单元按照概要设计规格说明的要求组装成模块、子系统或系统的过程中各部分工作是否达到或实现相应技术指标及要求的活动。也就是说,在集成测试之前,单元测试已经完成,集成测试中所使用的对象是已经经过单元测试的软件单元。如果不经过单元测试,集成测试的效果将会受到很大影响,并且会大幅增加软件单元代码纠错的代价。2.确认测试确认测试又称有效性测试。有效性测试是在模拟的环境下,运用黑盒测试的方法,验证被测软件是否满足需求规格说明书列出的需求。任务是验证软件的功能和性能及其他特性是否与需求一致。对软件的功能和性能要求在软件需求规格说明书中已经明确规定,它包含的信息就是软件确认测试的基础。3.系统测试系统测试是针对整个产品系统进行的测试,目的是验证系统是否满足了需求规格的定义,找出与需求规格不符或与之矛盾的地方,从而提出更加完善的方案。〔1功能测试经测试:该软件系统的添加联系人功能、查看联系人、编辑联系人、查找联系人、拨打、发送短息、导入导出功能皆正常。软件的质量可以达到保证。〔2健壮性测试经测试:该软件系统在异常情况下能正常运行的能力。如:直接退出,没有点退出菜单,程序数据不会受到破坏。〔3性能测试经测试:该软件系统处理事务的速度快捷。测试过程中运存占用平均为1.4MB左右。正常该软件时,手机的耗电量并未明显增加。〔4界面测试。经测试:该软件系统的易用性较强,可操作性强,界面视觉效果而等。7.3测试数据在系统运行时,由于系统数据库没有数据,会在背景显示"NoContacts",提示用户添加数据。7.3.1添加模块测试选择菜单->添加,进入添加界面,输入如下信息:职务职称:学生单位:GDUT地址:XX:510006Email:163选择头像后点击保存,保存成功!系统回到主界面,可以显示添加的数据!图7-1添加联系人测试图说明:测试编号测试输入期待输出实际输出说明1联系人信息联系人主要信息主界面显示联系人主要信息添加模块功能完成7.3.2查看编辑模块测试在按照7.3.1添加好一定的联系人信息后,在主界面打击某个联系人,则会进入查看、编辑修改模块。通过滑动屏幕可以查看联系人的详细信息;单击修改按钮,则联系人的信息框会变成可编辑模式,用户能输入修改信息,修改好后,可以打击保存修改按钮,则会保存用户的修改,如输入:然后单击保存修改,用户信息已改变!图7-2修改联系人信息测试图若单击删除按钮,则会弹出删除确定对话框,提示用户删除确定。若单击菜单,则会提示打或者发短信,若该联系人有几个号码,则会提示选择号码:图7-3打/发短信号码选择测试界面选中一个号码,进入打或者发短信界面:图7-4打/发短信测试界面说明:测试编号测试输入期待输出实际输出说明2修改的联系人信息修改后联系人主要信息主界面显示联系人主要信息修改模块功能完成3删除按钮提示用户删除,确定后删除成功提示并删除成功删除模块功能完成4进入联系人详细信息界面,选择菜单打发短信按钮若有多个号码,提示选择号码,如无,则进入打或者发短信界面有多个号码,提示选择号码,如无,则进入打或者发短信界

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论