安卓开发课程设计报告_第1页
安卓开发课程设计报告_第2页
安卓开发课程设计报告_第3页
安卓开发课程设计报告_第4页
安卓开发课程设计报告_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

武汉理工大学华夏学院课程报生口课程名称:智能手机软件开发题目:基于Android的手机通讯录的设计与实现专 业 信息工程系班级学 号姓 名成绩指导教师2015年3月23日至2015年6月12日智能手机软件开发大作业根据所学的Android手机开发的知识,采用Eclipse、JAVA开发一个基于Android平台的手机通讯录软件,具体要求如下:要发该软件能够在Android4。0以上的平台上运行。2。 要求软件界面美观,操作方便,符合日常使用规范。3。 能够通过该手机通讯录来添加新的联系人,用来存放联系人的姓名、单位、电话、QQ、地址等信息。能够通过该手机通讯录来编辑联系人信息,来修改联系人的个人信息。5。能够通过该手机通讯录来调用系统的通信接口,直接给用户发短信,打电话.6。 在手机通讯录中,添加合适的菜单,来操作手机通讯录.7。 将开发的过程写成报告,要求内容完整,格式规范,条理清晰。1设计目的随着手机通讯录功能的不断加强与完善,手机通讯录对于人们的意义,已不仅仅像记事簿一样显示通讯地址,而是向着个性化、人性化的方向发展移动终端的应用软件和需要的服务将会有很大的发展空间.根据这个特点,设计一个基于Android平台的通讯录系统,能根据手机的特点,存储,管理,修改联系人信息,并且能够根据选定的联系人,对其拨打电话,发送短信等。手机通讯录作为手机的基本功能之一,每天我们都在频繁地使用着.根据手机功能使用调查显示,通讯录从无到有,从英文到中文,经过了十几年的发展历程,今后的发展趋势就是从通讯录发展为名片夹,也就是在一个人名下,可以存储座机、手机、单位、地址、电子邮件等内容.所以手机通讯录功能越来越齐全,满足了人们的需求。2开发环境由于该android通讯录是一个基于Java语言开发软件,所以选择了Eclipse3.4作为开发平台,作为插件,它能够安装AndroidSDK,从而可以安装使用Android虚拟机,使得程序得以开发,亦更为方便。本通讯录系统就是在Eclipse3.4+Android平台环境下编写设计而成的.3需求分析该系统针对的主要用户是Android手机用户。Android手机通信管理系统包括以下主要内容:用户通过联系人功能可以保存联系人的详细信息,可以对联系人进行编辑、删除、拨打电话、发送短信可以根据索引条件搜索联系人。用户通过短信记录功能可以发送短信,删除短信记录.(3)用户通过SD卡所储存信息向通讯录批量导入联系人信息.(4)用户通过个人中心可以设置自己的详细信息,这样方便其他人了解自己,也可以将具有相同名字的联系人合并.要设计一个良好的手机通讯录,就必须首先明确该应用环境对系统的要求。Android手机通讯录应用背景:方便用户快捷通讯。(1)类似于传统手机通讯录的联系人的添加、修改、查找、删除功能。(2)指定联系人后,录音并发送给该联系人的留言功能。通过通讯录访问联系人的微博以实现与联系人互动的功能。接收短信、电话、语音留言和微博留言的信息并提醒用户。保存用户自身的个人信息以用于与他人联系时显示身份。4概要设计下面数据流图是对于Android手机通讯管理软件主要功能模块包括的简单结构图:联系人查看、联系人编辑、联系人添加、联系人删除、呼叫、发送短信、搜索,如图所示:版本号、退出菜单项.点击添加联系人,则进入联系人添加界面,添加成功后返回列表界面.点击搜索菜单,则进入联系人搜索界面,输入联系人的全名或一个字,即可查找相关联系人,点击联系人会进入联系人查看界面,可以对联系人进行编辑、删除、拨打电话、发送短信.如下图所示的Android手机通讯管理软件业务流程图.

图4。2 Android手机通讯管理软件业务流程图5数据库设计5。1SQLite数据库简介SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了.它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如Tc1、C#、PHP、Java等,还有0DBC接口,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快.SQLite第一个A1pha版本诞生于2000年5月。至今已经有10个年头,SQLite也迎来了一个版本SQLite3已经发布。本系统采用的是Android系统自带的SQLite轻型数据库数据库.因此占用资源非常小。5。2数据库表结构首先创建数据库,在数据库中创建表用来存储联系人数据,其中包括联系人姓名、手机号、QQ、地址等联系方式。6详细设计与实现6.1联系人浏览模块6.1。1进入首界面,显示联系人列表。点击某个联系人会进入查看联系人界面,可以查看联系人的详细信息,对联系人进行编辑、删除、拨打电话发送短信等。截图所示:14:2。唇14:2。唇iao联系人共有3个联系人Ooa<1图6.1.1通讯录联系人列表模块界面6.1.2点击菜单按钮时,就会显示添加、查找、关于和退出功能。如果点击退出菜单,则会退出该软件。如图所示:图6.1。2通讯录主菜单项模块6。1。3长按菜单显示Android手机通讯截图如图所示:

图6.1.3通讯录联系人界面菜单模块6.2查看联系人模块6。2.1在联系人界面点中击某个联系人,则会跳转到该界面.该软件实现了给联系人拨打电话和发送短信的功能。查看联系人界面截图如图所示:图6.2手机通讯查看联系人模块界面6.3编辑联系人模块6.3.1联系人编辑界面设置了返回列表菜单和删除联系人菜单。点击返回列表菜单,会返回到联系人浏览界面。编辑联系人界面如图所示:图6.3手机通讯录编辑联系人界面模块图6.3手机通讯录编辑联系人界面模块6.4查找联系人模块查找到所有包含该部分的联系人,并在ListView中显示出来所有的联系人的姓名和手机号码,截图如图所示:麻小也、日rchrorallcontacts图6。4通讯录查找联系人模块界面7总结这学期的智能手机开发课程的学习,让我了解到手机开发端应用的广泛性,以及对自己所学知识的总结,做手机通讯录,让我了解到手机已经成为日常生活中不可分割的一部分,所以手机上的功能满足人们的需求,才是手机通讯录开的重要性。对于这次的课程设计,使我发现了自己所掌握的知识是真正如此的缺乏,自己综合应用所学的专业知识能力是如此的不足通过这次开发项目,我们学会了如何在一个项目中集成多种技术,如何合理的耦合各种小功能,如何解决各种开发中出现的问题。同时在这次开发中出现的问题也暴露出了我们对java程序设计的一些问题,以及自己的动手能力还需要提高,而且做一个项目首先要明白这个项目的中心思想,这样才有目的去设计。通过课程设计,使我深深体会到,干任何事都必须耐心,细致,课程设计过程中,许多迷惑有时不免令我感到有些心烦意乱,有几次因为不小心而出错,只能毫不情意地重来。但一想起老师对我们耐心的教导,认真对待的良好习惯.这次课程设计使我在工作作风上得到了一次难得的磨练,一个人的性格很大程度上决定一件事情的进展以及对工作的态度和生活的态度,所以养成好的习惯能够帮助我克服各种苦难,能够帮助我在今后的学习中脚踏实地的工作。通过这次手机开发通讯录课程设计,我能够更加深刻的了解到手机通讯录开发的前景以及所需的知识,总之在今后的学习中自己应该了解如今社会上开发手机通讯录所需的最新的技术,不能一成不变,只看书本上的知识,养成自我学习的良好习惯。8参考文献罗伟.基于Android平台的即时通讯系统的研究与实现[D].湖南师范大学,2009.李刚,《疯狂Java讲义》,电子工业出版社,2008程峰,《JAVA核心技术》,机械工业出版社,2007王鹏,《JAVA语言程序设计》,大连理工出版社,20059附录源代码pub1icclassDBHelper{/大*操作数据库和各个表大/publicstaticfina1StringDATABASE_NAME="CONTACT_DB”;publicstaticfinalStringTABLE_CONTACTER=”contact_person”publicstaticfinalStringTABLE_MOBLIEPHONE="phone_number";publicstaticfinalStringTABLE_GROUP="mygroup”publicstaticfina1StringTABLE_EMAIL="email”;publicstaticfinalStringTABLE_QQ="qq”;publicstaticfinalStringTABLE_HOMEPHONE="home_phone_number”;publicstaticfina1StringTABLE_ADDRESS=”address”;publicstaticfinalStringTABLE_FAX="fax”;〃创建表的SQL语句publicstaticString[]CreateTabelSQL;privatestaticSQLiteDatabasedblnstance;publicstaticfinalintVERSION=4;privateMyDBHe1permyDBHelper;privateContextcontext;publicDBHe1per(Contextcontext,String[]createtablesql){this.context=context;this.CreateTabelSQL=createtablesql;}publicDBHelper(Contextcontext){。this.context=context;}/*大大打开数据库大/publicvoidopenDatabase(){if(dblnstance==null){//创建数据库

myDBHelpemyDBHelper=newMyDBHelper(context,DATABASJNAME,VERSION);gdbInstance=myDBHelper.getWritableDatabase();}}/大*。大返回所有联系人大/PublicArrayList〈HashMap<String,Object〉〉 getAllContacter(Stringcondition){ArrayList<HashMap〈String,Object>>contaclist=newArrayList();Cursorcursor;^if(condition==nullllcondition.trim()。equals(""))cursor=dbInstance。query(TABLE_CONTACTER,。 newString[]{"id”,"name”,"headlmage"},null,null,null,null,null);belse{^StringBuffersqlBuffer=newStringBuffer();bsqlBuffer。append("selectid,name,headlmagefrom")b oappend(TABLE_CONTACTER)b .append("wherenamelike'%”)bb .append(condition)b .append(”%‘");cursor=dbInstanceorawQuery(sqlBuffer.toString(), null);b}cursor.moveToFirst();while(!cursor.isAfterLast()){bHashMap〈String,Object〉item=newHashMap<String,Object>();bbitem.put("contacter_id",cursor.getInt(cursor.getColumnIndex(”id”)));bitem.put("name",cursor.getString(cursor.getColumnIndex("name”)));item.put("headimage",cursor。getString(cursor.getColumnIndex("headImage")));bb //返回第一个手机电话号码bCursorphoneCursor=dbInstance。query(TABLE_MOBLIEPHONE,bbb newString[]{"phone_number"},"id=?",b b newString[]{String.valueOf(cursorogetInt(cursor.getColumnIndex("id")))},bbb null,null,null);sphoneCursor。moveToFirst();item.put("phonenumber",phoneCursor.getString(phoneCursor。getColumnIndex(”phone_number")));contaclist.add(item);。cursor。moveToNext();。}。returncontaclist;}/***根据编号返回一个联系人大/publicContactergetContacter(intid){。Contactercontacter=newContacter();CursorcontacterCursor=dbInstance.query(TABLE_CONTACTER,。 newString[]{"id'',''group_name”,''name","nick_name'',''birthday",”workingunits”,"headImage"},。 "id=?",aa newString[]{String。valueOf(id)},null,null,null);acontacter。id=id;contacterCursoromoveToFirst();=contacterCursor.getString(contacterCursor。getColumnIndex("name"));acontacter°nickname=contacterCursor.getString(contacterCursor.getColumnIndex(”nick_name”));contacter。workingunits=contacterCursor.getString(contacterCursor.getColumnIndex("workingunits”));aif(contacterCursor.getString(contacterCursor.getColumnIndex("birthday")).trim()!=nullaa&&!contacterCursor.getString(contacterCursor.getColumnIndex("birthday”))。trim().equals("”))Stringstring=contacterCursor.getString(contacterCursor.getColumnIndex("birthday")).trim();a contacter.birthday=Date.valueOf(contacterCursor。getString(contacterCursor.getColumnIndex("birthday")));a}contacter.headimage=contacterCursor.getInt(contacterCursor.getColumnIndex(”headlmage”));〃联系人的手机号码aCursorphoneCursor=dbInstance。query(TABL_MOBLIEPHONE,aa newString[]{"phone_number”},aa "id=?",newString[](String.valueOf(id)},nu11,nul1,nul1);。phoneCursoromoveToFirst();contacter.mobi1ephone=newString[phoneCursor°getCount()];for(inti=0;i〈phoneCursor。getCount();i++){contacter.mobilephone[i]=phoneCursor°getString(phoneCursor.getColumnIndex(''phone_number''));^ phoneCursor.moveToNext();}〃联系人的座机号码CursorhomephoneCursor=dbInstance.query(TABLE_HOMEPHONE,newString[]{”home_number"},“ ”id=?”,s newString[]{String.valueOf(id)},null,nul1,null);homephoneCursor.moveToFirst();。contacter.homephonenumber=newString[homephoneCursor.getCount()];for(inti=0;i<homephoneCursor°getCount();i++){scontacter。homephonenumber[i]=homephoneCursor。getString(homephoneCursorogetCo1umnIndex(”home_number"));。homephoneCursor。moveToNext();。 }6 〃联系人的emai1。CursoremailCursor=dbInstance°query(TABLE_EMAIL,6 newString[]{"email"},666 "id=?”,newString[]{StringoVa1ueOf(id)},null,null,null);6emailCursor.moveToFirst();contacter.email=newString[emailCursor.getCount()];6for(inti=0;i<emailCursor。getCount();i++){contacter。email[i]=emailCursor。getString(emailCursor.getColumnIndex("email"));6 emailCursor.moveToNext();}//联系人的传真号码CursorfaxCursor=dbInstance.query(TABLE_FAX,newString[]{"fax_number"},newString[]{String。valueOf(id)}, null,null,null);^contacter.faxnumber=newString[emailCursor°getCount()];^faxCursor.moveToFirst();。for(inti=0;i<faxCursor.getCount();i++){。contacter.faxnumber[i]=faxCursor.getString(faxCursor。getColumnIndex("fax—number”));o faxCursor。moveToNext();}o//联系人的地址CursoraddressCursor=dbInstance.query(TABLE_ADDRESS,oo newString[]{"add_code”,''province”,”city”,"street”,"zip_code”,”country”},o "id=?”,o newString[]{String。valueOf(id)},nu1l,null,null);oaddressCursor°moveToFirst();contacter。addresses=newaddress[addressCursor.getCount()];for(inti=0;i(addressCursor.getCount();i++){contacter.addresses[i]=newaddress();contacter.addresses[i].add—code=addressCursor。getint(addressCursor。getColumnIndex("add_code"));contacter。addresses[i].province=addressCursor。getString(addressCursor。getColumnindex("province"));ocontacter.addresses[i]。city=addressCursor.getString(addressCursor.getColumnIndex("city”));contacter°addresses[i]。street=addressCursor.getString(addressCursor.getColumnIndex(”street"));contacter.addresses[i].zip_code=addressCursor.getString(addressCursor.getColumnindex("zip_code”));ocontacter。addresses[i]。coutry=addressCursor.getString(addressCursor.getColumnindex("country"));oaddressCursor.moveToNext();}returncontacter;}/大大自动生成联系人编码大/publicintgenerateContacterID(){Cursorcursor=dbInstance.query(TABLE_CONTACTER,newString[]{"id”},null,null,null,null,null);cursor.moveToFirst();inti=0;if(cursor.getCount()==0)«return0;whi1e(!cursor.isAfterLast()){if(i!=cursor.getInt(cursor.getColumnIndex(”id")))greturni;bbi++;g cursor°moveToNext();}breturni;}/*大*插入新的联系人大/publicbooleaninsertContacter(Contactercontacter){booleanflag;intid=generateContacterID();b //插入基本信息flag=insertContactPerson(id,contacter。groupname,contacter°name,contacter.nickname,contacterobirthday,bb contacteroworkingunits,contacter.headimage);//插入emailb if(contacter。email!=null&&contacter°email.length〉0)b for(Stringemail:contacter°emai1)bf1ag&=insertEmail(id, emai1);b//插入QQif(contacter.email!=nu1l&&contacter.QQ.1ength〉0)for(1ongqq:contacter.QQ)flag&=insertQQ(id,qq);b //插入传真bif(contacter.faxnumber!=null&&contacter.faxnumberolength〉0)bfor(Stringfax:contacter.faxnumber)f1ag&=insertFax(id, fax);//插入电话if(contacteromobilephone!=null&&contacter.mobilephone。length〉0)for(Stringphone:contacter.mobilephone)bflag&=insertPhoneNumber(id,phone);b //插入座机号码if(contacter.homephonenumber!=null&&contacter。homephonenumber。length〉0)for(Stringhomephone:contacter.homephonenumber)。flag&=insertHomePhone(id,homephone);//插入地址。inti=0;。if(contacter。addresses!=null&&contacter.addresses.1ength>0)for(addressadd:contacter。addresses)。{s f 1ag&=insertAddress(id, i++,vinc e,。 。addocity,add.street,add.zip_code,add。coutry);。 }returnflag;}/大大大更新联系人大/publicvoidupdateContacter(Contactercontacter){〃先删除记录removeContacter(String.valueOf(contacter.id));。//再重新插入。insertContacter(contacter);}/大大删除联系人大/publicvoidremoveContacter(Stringid){。dbInstance.delete(TABLE_EMAIL,"id=?", newString[]{id});dbInstance。delete(TABLE—FAX,"id=?”,newString[]{id});。dbInstance.delete(TABLE_HOMEPHONE,”id=?”,newString[]{id});。dbInstance。delete(TABLE_MOBLIEPHONE,"id=?",newString[]{id});dbInstance.delete(TABLE—QQ,”id=?”,newString[]{id});。dbInstanceodelete(TABLE_CONTACTER,"id=?”,newString[]{id});}//数据库插入函数publicbooleaninsertValuesToTable(StringtableName,ContentValuesvalues){aif((long)dbInstance.insert(tableName,null,values)==—1)returnfalse;else{。returntrue;}}/大*往表中插入数据大///往group插入数据publicbooleaninsertGroup(Stringgroupname){ContentValuesvalues=new ContentValues();values.put(”group_name”,groupname);if(insertValuesToTable(TABLE_GROUP,values))。returntrue;elsereturnfalse;}〃彳主ContactPerson表插入数据pub1icbooleaninsertContactPerson(intid,。 Stringgroupname,Stringname,。 Stringnickname,a Datebirthday,s Stringworkiingunits,a。 intheadImageaa ){aContentValuesvalues=newContentValues();avalues.put(”id”,id);values.put("group_name”, groupname);avalues.put(”name”,name);values.put("nick_name”,nickname);avalues.put(”birthday”,birthday.toString());values.put("workingunits”,workiingunits);values。put(”headimage”,headImage);if(insertValuesToTab1e("contact_person",va1ues))aareturntrue;aelsereturnfalse;}//彳主Email表插入数据publicbooleaninsertEmai1(intid,Stringemail){ContentValuesva1ues=newContentValues();avalues。put(”id”,id);va1ueSoput("email",email);if(insertVa1uesToTable(”Email",values))sreturntrue;。elsereturnfalse;}//往address表插入数据publicbooleaninsertAddress(intid,。 intadd_code,s Stringprovince,a Stringcity,。 Stringstreet,a Stringzip_code,Stringcountry){aContentValuesvalues=newContentValues();va1uesoput("id", id);values.put("add_code”,add—code);values,put("province”,province);a values.put("city",city);valueSoput("street",street);ava1ues.put("zip_code",zip—code);values.put("country",country);aif(insertValuesToTable("address",values))a returntrue;aaelsereturnfa1se;}//往QQ表插入数据publicbooleaninsertQQ(intid,longQQ_number){aContentValuesvalues=newContentValues();values.put("id",id);avalues.put("QQ_number",QQ_number);aif(insertValuesToTab1e("QQ",values))aa returntrue;elsereturnfalse;}//彳主fax表插入数据publicboo

温馨提示

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

评论

0/150

提交评论