《安卓开发课程设计报告(共27页).docx》由会员分享,可在线阅读,更多相关《安卓开发课程设计报告(共27页).docx(27页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上武汉理工大学华夏学院课 程报告课程名称:智能手机软件开发 题 目:基于An droid的手机通讯录的设计与实现专业班级学号姓名成绩指导教师信息工程系2015年3月23日至2015年6月12日智能手机软件开发大作业根据所学的An droid手机开发的知识,采用Eclipse、JAVA开发一个基于An droid 平台的手机通讯录软件,具体要求如下:1. 要发该软件能够在 Android4.0 以上的平台上运行。2. 要求软件界面美观,操作方便,符合日常使用规范。3. 能够通过该手机通讯录来添加新的联系人,用来存放联系人的姓名、单位、 电话、QQ地址等信息。4. 能够通过
2、该手机通讯录来编辑联系人信息,来修改联系人的个人信息。5. 能够通过该手机通讯录来调用系统的通信接口, 直接给用户发短信, 打电话。6. 在手机通讯录中,添加合适的菜单,来操作手机通讯录。7. 将开发的过程写成报告,要求内容完整,格式规范,条理清晰。专心-专注-专业1设计目的随着手机通讯录功能的不断加强与完善,手机通讯录对于人们的意义, 已不仅仅像记事簿一样显示通讯地址, 而是向着个性化、人性化的方向发展移动 终端的应用软件和需要的服务将会有很大的发展空间。根据这个特点,设计一个 基于An droid平台的通讯录系统,能根据手机的特点,存储,管理,修改联系人 信息,并且能够根据选定的联系人,对
3、其拨打电话,发送短信等。手机通讯录作为手机的基本功能之一,每天我们都在频繁地使用着。根 据手机功能使用调查显示,通讯录从无到有,从英文到中文,经过了十几年的发展历程,今后的发展趋势就是从通讯录发展为名片夹,也就是在一个人名下,可以存储座机、手机、单位、地址、电子邮件等内容。所以手机通讯录功能越来越 齐全,满足了人们的需求。2开发环境由于该an droid通讯录是一个基于Java语言开发软件,所以选择了Eclipse3.4作为开发平台,作为插件,它能够安装An droid SDK从而可以安装使用An droid虚拟机,使得程序得以开发,亦更为方便。本通讯录系统就是在Eclipse3.4+A nd
4、roid 平台环境下编写设计而成的。3需求分析该系统针对的主要用户是 An droid手机用户。An droid手机通信管理系统包 括以下主要内容:(1) 用户通过联系人功能可以保存联系人的详细信息,可以对联系人进行编 辑、删除、拨打电话、发送短信可以根据索引条件搜索联系人。(2) 用户通过短信记录功能可以发送短信,删除短信记录。(3) 用户通过SD卡所储存信息向通讯录批量导入联系人信息。(4) 用户通过个人中心可以设置自己的详细信息,这样方便其他人了解自 己,也可以将具有相同名字的联系人合并。要设计一个良好的手机通讯录,就必须首先明确该应用环境对系统的要求。 An droid手机通讯录应用背
5、景:方便用户快捷通讯。(1) 类似于传统手机通讯录的联系人的添加、修改、查找、删除功能。(2) 指定联系人后,录音并发送给该联系人的留言功能。(3) 通过通讯录访问联系人的微博以实现与联系人互动的功能。(4) 接收短信、电话、语音留言和微博留言的信息并提醒用户。(5) 保存用户自身的个人信息以用于与他人联系时显示身份。4概要设计下面数据流图是对于An droid手机通讯管理软件主要功能模块包括的简单结 构图:联系人查看、联系人编辑、联系人添加、联系人删除、呼叫、发送短信、 搜索,如图所示:图4.1 An droid手机通讯管理软件主要功能模块联系人列表界面主菜单中包括添加联系人、搜索联系人、关
6、于及查看系统 版本号、退出菜单项。点击添加联系人,则进入联系人添加界面,添加成功后返 回列表界面。点击搜索菜单,则进入联系人搜索界面,输入联系人的全名或一个 字,即可查找相关联系人,点击联系人会进入联系人查看界面, 可以对联系人进 行编辑、删除、拨打电话、发送短信。如下图所示的 An droid手机通讯管理软件 业务流程图图4.2 An droid手机通讯管理软件业务流程图5 数据库设计5.1 SQLite 数据库简介SQLite,是一款轻型的数据库,是遵守 ACID的关联式数据库管理系统,它 的设计目标是嵌入式的, 而且目前已经在很多嵌入式产品中使用了它, 它占用资 源非常的低,在嵌入式设备
7、中,可能只需要几百 K 的内存就够了。它能够支持 Windows/Linux/Unix 等等主流的操作系统, 同时能够跟很多程序语言相结合, 比 如 Tel、C#、PHP、Java等,还有 ODBC 接口,同样比起 Mysql、PostgreSQL这 两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。 SQLite 第一个 Alpha 版本诞生于 2000年 5月. 至今已经有 10 个年头, SQLite 也迎来了 一个版本 SQLite 3 已经发布。本系统采用的是 Android 系统自带的 SQLite 轻型数据库数据库。 因此占用资 源非常小。5.2 数据库表结构首先创建
8、数据库,在数据库中创建表用来存储联系人数据,其中包括联系人 姓名、手机号、QQ地址等联系方式。6 详细设计与实现6.1 联系人浏览模块6.1.1 进入首界面,显示联系人列表。点击某个联系人会进入查看联系人界面, 可以查看联系人的详细信息,对联系人进行编辑、删除、拨打电话发送短信等。 截图所示:仏20呑ca联茶人CI嗨龟浙常O 80阿丁W0S6豪胡子豪xiaohon110图6.1.1通讯录联系人列表模块界面6.1.2点击菜单按钮时,就会显示添加、查找、关于和退出功能。如果点击退出 菜单,则会退出该软件。如图所示:图6.1.2通讯录主菜单项模块6.1.3长按菜单显示An droid手机通讯截图如图
9、所示:图6.1.3通讯录联系人界面菜单模块6.2查看联系人模块 6.2.1在联系人界面点中击某个联系人,则会跳转到该界面。该软件实现了给联 系人拨打电话和发送短信的功能。查看联系人界面截图如图所示:图6.2手机通讯查看联系人模块界面6.3编辑联系人模块 6.3.1联系人编辑界面设置了返回列表菜单和删除联系人菜单。点击返回列表菜单,会返回到联系人浏览界面。编辑联系人界面如图所示:图6.3手机通讯录编辑联系人界面模块6.4查找联系人模块查找到所有包含该部分的联系人,并在ListView中显示出来所有的联系人的姓名和手机号码,截图如图所示:图6.4通讯录查找联系人模块界面7总结这学期的智能手机开发课
10、程的学习,让我了解到手机开发端应用的广泛性,以及对自己所学知识的总结,做手机通讯录,让我了解到手机已经成为日常生活 中不可分割的一部分,所以手机上的功能满足人们的需求,才是手机通讯录开的 重要性。对于这次的课程设计,使我发现了自己所掌握的知识是真正如此的缺乏,自己综合应用所学的专业知识能力是如此的不足通过这次开发项目,我们学会了如何在一个项目中集成多种技术,如何合理的耦合各种小功能,如何解决各种开 发中出现的问题。同时在这次开发中出现的问题也暴露出了我们对java程序设计的一些问题,以及自己的动手能力还需要提高, 而且做一个项目首先要明白这 个项目的中心思想,这样才有目的去设计。通过课程设计,
11、使我深深体会到,干任何事都必须耐心,细致,课程设计过程中,许多迷惑有时不免令我感到有些心烦意乱,有几次因为不小心而出错,只能毫不情意地重来。但一想起老师对我们耐心的教导,认真对待的良好习惯这次课程设计使我在工作作风上得到了一次难得的磨练,一个人的性格很大程度上决定一件事情的进展以及对工作的态度和生活的态度, 所以养成好的习惯能够帮 助我克服各种苦难,能够帮助我在今后的学习中脚踏实地的工作。通过这次手机开发通讯录课程设计,我能够更加深刻的了解到手机通讯录开 发的前景以及所需的知识,总之在今后的学习中自己应该了解如今社会上开发手 机通讯录所需的最新的技术,不能一成不变, 只看书本上的知识,养成自我
12、学习 的良好习惯。参考文献1 罗伟基于An droid平台的即时通讯系统的研究与实现D 湖南师范大学,20092 李刚,疯狂Java讲义,电子工业出版社,20083 程峰,JAVA核心技术,机械工业出版社,20074 王鹏,JAVA语言程序设计,大连理工出版社,20059附录源代码public class DBHelper/*操作数据库和各个表*/public static final Stri ng DATABASE_NAME=CONTACT_DB;public static final Stri ng TABLE_CONTACTER=co ntact_perso n;public stat
13、ic final Stri ng TABLE_MOBLIEPHONE=pho ne_n umber;public static final Stri ng TABLE_GROUP=mygroup;public static final Stri ng TABLE_EMAIL=email;public static final Stri ng TABLE_QQ=qq;public static final Stri ng TABLE_HOMEPHONE=home_pho ne_number;public static final Stri ng TABLE_ADDRESS=address;pub
14、lic static final Stri ng TABLE_FAX=fax;/创建表的SQL语句public static Stri ng CreateTabelSQL;private static SQLiteDatabase dbIn sta nee;public static final int VERSION = 4;private MyDBHelper myDBHelper;private Con text con text;public DBHelper(C on text con text,Stri ng createtablesql)this.c on text=c on t
15、ext;this.CreateTabelSQL=createtablesql;public DBHelper(Co ntext con text)this.c on text=c on text;/*打开数据库*/public void ope nDatabase()if(db In sta nce=n ull)/创建数据库myDBHelper= new MyDBHelper(co ntext, DA TABASE_NAME, VERSION); dbI nsta nce=myDBHelper.getWritableDatabase();/* 返回所有联系人*/public ArrayList
16、HashMap getAllContacter(String condition) ArrayListHashMap contaclist = new ArrayList(); Cursor cursor;if(condition=null|condition.trim().equals() cursor=dbInstance.query(TABLE_CONTACTER, new Stringid,name,headImage, null, null, null, null, null);else StringBuffer sqlBuffer=new StringBuffer(); sqlBu
17、ffer.append(select id,name,headImage from ) .append(TABLE_CONTACTER) .append( where name like %) .append(condition) .append(%);cursor=dbInstance.rawQuery(sqlBuffer.toString(), null); cursor.moveToFirst(); while(!cursor.isAfterLast()HashMap item=new HashMap(); item.put(contacter_id, cursor.getInt(cur
18、sor.getColumnIndex(id); item.put(name, cursor.getString(cursor.getColumnIndex(name); item.put(headimage, cursor.getString(cursor.getColumnIndex(headImage); /返回第一个手机电话号码Cursor phoneCursor=dbInstance.query(TABLE_MOBLIEPHONE,new Stringphone_number, id=?, newStringString.valueOf(cursor.getInt(cursor.get
19、ColumnIndex(id), null, null, null);phoneCursor.moveToFirst(); item.put(phonenumber,phoneCursor.getString(phoneCursor.getColumnIndex(phone_number); contaclist.add(item);cursor.moveToNext();return contaclist;/* 根据编号返回一个联系人*/public Con tacter getC on tacter(i nt id)Con tacter con tacter = new Con tacte
20、r();Cursor con tacterCursor =dbI nsta nce.query(TABLE_CONTACTER,newStrin gid,group _n ame, name, nick_ name,birthday,worki ngun its,headlmage,id=?,new StringString.valueOf(id), null, null, null);con tacter.id=id;con tacterCursor.moveToFirst();con tacter. name=c on tacterCursor.getStri ng(c on tacter
21、Cursor.getColu mnln dex( name);con tacter. nickn ame=c on tacterCursor.getStri ng(c on tacterCursor.getColu mnln dex( nick_n ame);con tacter.worki nguni ts=c on tacterCursor.getStri ng(con tacterCursor.getColu mnln dex(worki ngun it s);if(con tacterCursor.getStri ng(c on tacterCursor.getColu mnln de
22、x(birthday).trim()!=null&!con tacterCursor.getStri ng(c on tacterCursor.getColu mnln dex(birthday).trim().equals()Stri ngstri ng=c on tacterCursor.getStri ng(c on tacterCursor.getColu mnln dex(birthday).trim();con tacter.birthday=Date.valueOf(c on tacterCursor.getStri ng(c on tacterCursor.getColu mn
23、ln dex(birt hday);con tacter.headimage=c on tacterCursor.get In t(c on tacterCursor.getColu mnln dex(headlmage);联系人的手机号码Cursor pho neCursor =db In sta nce.query(TABLE_MOBLIEPHONE,new Strin gpho ne_nu mber,id=?,new Strin gStri ng.valueOf(id),n ull,null, null);phon eCursor.moveToFirst();con tacter.mob
24、ileph one=new Strin gpho neCursor.getCo un t();for(i nt i=0;iph on eCursor.getCo un t();i+)con tacter.mobileph on ei=pho neCursor.getStri ng(ph on eCursor.getColu mnln dex(ph one_nu mber);phoneCursor.moveToNext();/联系人的座机号码Cursor homephoneCursor=dbInstance.query(TABLE_HOMEPHONE, new Stringhome_number
25、, id=?,new StringString.valueOf(id), null, null, null);homephoneCursor.moveToFirst();contacter.homephonenumber=new StringhomephoneCursor.getCount(); for(int i=0;ihomephoneCursor.getCount();i+)contacter.homephonenumberi=homephoneCursor.getString(homephoneCursor.getColumnIndex( home_number);homephoneC
26、ursor.moveToNext();/联系人的 emailCursor emailCursor=dbInstance.query(TABLE_EMAIL,new Stringemail,id=?, new StringString.valueOf(id), null, null,null);emailCursor.moveToFirst();contacter.email=new StringemailCursor.getCount();for(int i=0;iemailCursor.getCount();i+) contacter.emaili=emailCursor.getString
27、(emailCursor.getColumnIndex(email); emailCursor.moveToNext();/联系人的传真号码Cursor faxCursor=dbInstance.query(TABLE_FAX, new Stringfax_number,id=?,new StringString.valueOf(id), null, null,null);contacter.faxnumber=new StringemailCursor.getCount(); faxCursor.moveToFirst();for(int i=0;ifaxCursor.getCount();
28、i+)contacter.faxnumberi=faxCursor.getString(faxCursor.getColumnIndex(fax_number); faxCursor.moveToNext();/联系人的地址Cursor addressCursor=dbl nsta nce.query(TABLE_ADDRESS,newStri ngadd_code,provin ce,city,street,zip_code,cou ntry,id=?,new Stri ngStri ng.valueOf(id),n ull,null, null);addressCursor.moveToF
29、irst();con tacter.addresses=new addressaddressCursor.getCo un t();for(i nt i=0;i0) for(String email:contacter.email)flag&=insertEmail(id, email);/插入 QQ if(contacter.email!=null&contacter.QQ.length0) for(long qq:contacter.QQ)flag&=insertQQ(id, qq);/插入传真 if(contacter.faxnumber!=null&contacter.faxnumbe
30、r.length0) for(String fax:contacter.faxnumber)flag&=insertFax(id, fax);/插入电话 if(contacter.mobilephone!=null&contacter.mobilephone.length0) for(String phone:contacter.mobilephone)flag&=insertPhoneNumber(id, phone);/插入座机号码 if(contacter.homephonenumber!=null&contacter.homephonenumber.length0) for(Strin
31、g homephone:contacter.homephonenumber)flag&=insertHomePhone(id, homephone);/插入地址int i=0;if(contacter.addresses!=null&contacter.addresses.length0) for(address add:contacter.addresses)flag&=insertAddress(id, i+,add.province,add.city, add.street, add.zip_code, add.coutry);/*/retur n flag;更新联系人public vo
32、id updateC on tacter(C on tacter con tacter)先删除记录removeC on tacter(Stri ng.valueOf(c on tacter.id);再重新插入in sertC on tacter(c on tacter);/*删除联系人*/public void removeC on tacter(Stri ng id)dblnstance.delete(TABLE_EMAIL, id=?, new Stringid);dbInstance.delete(TABLE_FAX, id=?, new Stringid);dbln sta nce.d
33、elete(TABLE_HOMEPHONE, id=?, new Stri ngid);dblnstance.delete(TABLE_MOBLIEPHONE, id=?, new Stringid);dbInstance.delete(TABLE_QQ, id=?, new Stringid);dbln sta nce.delete(TABLE_CONTACTER, id=?, new Stri ngid);/数据库插入函数public boolean insertV aluesToTable(String tableName,ContentValues values) if( (long)
34、 dbln sta nce.i nsert(tableName, n ull, values)=-1)return false;elsereturn true;/*往表中插入数据*/往group插入数据public boolea n in sertGroup(Stri ng group name)Conten tValues values=new Conten tValues();values.put(group_ name, group name);if(insertva_uesTOTab_e(TABLEIGROUPNa_ues)recrn=rupe-serecrn fa-splmconQr
35、aperson蛊蒲 pub=c boo-ean insertconQrapersonunf id-Siring groupnampSiring nampSiring nickname-DaCDbirthday-Siring work=ngunis inf head-mage)宀 conCDnfva-ues va-uesunew conCDnfva-ueso 八va_ues.puf(=id=id= va-ues.puf(=grouplname=groupname)八 va-ues.puf(=name=name)八 va-ues.puf(=nicklname=nickname)八va-ues.pu
36、f(=birthday=birthdaylosmngo)八 va-ues.puf(=workingunifs=workiingunifs)八 va-ues.puf(=head-mage=head-mage)八 if (insertva-uesTOTab-euconfaalperson-ka-ues) recrn=rupe-serecrn fa-sp=0 Ema=pub=c boo-ean insertEmai-(inf idcnmng emai-)宀 conCDnfva-ues va-uesunew conCDnfva-ueso 八 va_ues.puf(=id=id= va-ues.puf(
37、=emai-=ema=)八 if (insertva-uesTOTab-e(=Emai-=va-ues)ref urn frupe-serefurn fa-spImaddressB pub=c boo-ean insertAddress(inf id-inf addlcodpSiring province-Siring Qw Siring s=reeLSiringN.PICOdp Siring CoUnfry) 宀conCDnfva-ues va-uesunew conCDnfva-ueso 八 va_ues.puf(=id=id= va-ues.puf(=addlcode=addlcode)
38、八 va-ues.puf(=pro蛊蒲議pub=c boo-ean insertQQ(inf ieong QQnumber) 宀conCDnfva-ues va-uesunew conCDnfva-ues(= va_ues.puf(=id=id= va-ues.puf(=QQInumber=QQnumber)八if (insertva-uesTOTab-e(=QQ=va-ues)ref urn frupe-serefurn fa-splmfax蛊蒲pub=c boo-ean insertFax(inf idcnmng faxInumber) 宀conCDnfva-ues va-uesunew
39、conCDnfva-ues(= va_ues.puf(=id=id= va-ues.puf(=faxlnumber=faxIn umber)八 if (insertva-uesT oT ab-e(=fax=va-ues)return true;elsereturn false;/ 往 home_phone_number 表插入数据public boolean insertHomePhone(int id,String home_number) ContentValues values=new ContentValues(); values.put(id, id);values.put(home_number, home_number);if (insertValuesToTable(home_phone_number,values) ) return true;else return false;/ 往 phone_number 表插入数据public boolean insertPhoneNumber(int id,String phone_number)ContentValues values=new ContentValues(); values.put(id, id);