版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、-. z.*理工大学华夏学院课 程 报 告课程名称:智能手机软件开发题 目: 基于Android的手机通讯录的设计与实现专 业 信息工程系班 级 学 号 姓 名 成 绩 指导教师 2015年3月23日至2015年6月12日智能手机软件开发大作业根据所学的Android 手机开发的知识,采用Eclipse、JAVA开发一个基于Android平台的手机通讯录软件,具体要求如下: 1.要发该软件能够在Android4.0 以上的平台上运行。 2.要求软件界面美观,操作方便,符合日常使用规*。 3.能够通过该手机通讯录来添加新的联系人,用来存放联系人的*、单位、QQ、地址等信息。 4.能够通过该手机通
2、讯录来编辑联系人信息,来修改联系人的个人信息。 5.能够通过该手机通讯录来调用系统的通信接口,直接给用户发短信,打。 6.在手机通讯录中,添加适宜的菜单,来操作手机通讯录。7.将开发的过程写成报告,要求内容完整,格式规*,条理清晰。1 设计目的随着手机通讯录功能的不断加强与完善,手机通讯录对于人们的意义,已不仅仅像记事簿一样显示通讯地址,而是向着个性化、人性化的方向开展移动终端的应用软件和需要的效劳将会有很大的开展空间。根据这个特点,设计一个基于Android平台的通讯录系统,能根据手机的特点,存储,管理,修改联系人信息,并且能够根据选定的联系人,对其拨打,发送短信等。 手机通讯录作为手机的根
3、本功能之一,每天我们都在频繁地使用着。根据手机功能使用调查显示,通讯录从无到有,从英文到中文,经过了十几年的开展历程,今后的开展趋势就是从通讯录开展为名片夹,也就是在一个人名下,可以存储座机、手机、单位、地址、电子等内容。所以手机通讯录功能越来越齐全,满足了人们的需求。2 开发环境由于该android通讯录是一个基于Java语言开发软件,所以选择了Eclipse3.4作为开发平台,作为插件,它能够安装Android SDK,从而可以安装使用Android虚拟机,使得程序得以开发,亦更为方便。本通讯录系统就是在Eclipse3.4+Android平台环境下编写设计而成的。3 需求分析 该系统针对
4、的主要用户是Android手机用户。Android手机通信管理系统包括以下主要内容:(1) 用户通过联系人功能可以保存联系人的详细信息,可以对联系人进展编辑、删除、拨打、发送短信可以根据索引条件搜索联系人。(2) 用户通过短信记录功能可以发送短信,删除短信记录。(3) 用户通过SD卡所储存信息向通讯录批量导入联系人信息。(4) 用户通过个人中心可以设置自己的详细信息,这样方便其他人了解自己,也可以将具有一样名字的联系人合并。 要设计一个良好的手机通讯录,就必须首先明确该应用环境对系统的要求。Android手机通讯录应用背景:方便用户快捷通讯。(1)类似于传统手机通讯录的联系人的添加、修改、查找
5、、删除功能。(2)指定联系人后,录音并发送给该联系人的留言功能。(3)通过通讯录访问联系人的微博以实现与联系人互动的功能。(4)接收短信、语音留言和微博留言的信息并提醒用户。(5)保存用户自身的个人信息以用于与他人联系时显示身份。4 概要设计 下面数据流图是对于Android手机通讯管理软件主要功能模块包括的简单构造图:联系人查看、联系人编辑、联系人添加、联系人删除、呼叫、发送短信、搜索,如下图:Android手机通讯通讯列表搜索呼叫删除添加查看编辑发送短信 图4.1 Android手机通讯管理软件主要功能模块联系人列表界面主菜单中包括添加联系人、搜索联系人、关于及查看系统版本号、退出菜单项。
6、点击添加联系人,则进入联系人添加界面,添加成功后返回列表界面。点击搜索菜单,则进入联系人搜索界面,输入联系人的全名或一个字,即可查找相关联系人,点击联系人会进入联系人查看界面,可以对联系人进展编辑、删除、拨打、发送短信。如下列图所示的Android手机通讯管理软件业务流程图.开场选则功能编辑搜索发送短信拨打删除新建更新数据库选中条目输入搜索条件完毕输入新建联系人信息后保存显示搜索结果图4.2 Android手机通讯管理软件业务流程图5 数据库设计5.1 SQLite数据库简介SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式
7、产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linu*/Uni*等等主流的操作系统,同时能够跟很多程序语言相结合,比方 Tcl、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进入首界面,显示联系人列表。点击*个联系人会进入查看联系人界面,可以查看联系人的详细信息,对联系人进展编辑、删除、拨打发送短信等。截图所示:图 6.1.1 通讯录联系人列表模块界面6.1.2点击菜单按钮时,就会显示添加、查找、关于和退出功能。如果点击退出菜单,则会退出该软件。如下图:图6.1.2 通讯录主菜单项模块6.1.3长按菜单显示Android手机通讯截图如下图:图6.1.3 通讯录联系人界面菜单模块6.2查看联系人模块6.2.1在联系人界面点中击*个联系人,
9、则会跳转到该界面。该软件实现了给联系人拨打和发送短信的功能。查看联系人界面截图如下图:图6.2 手机通讯查看联系人模块界面6.3编辑联系人模块6.3.1联系人编辑界面设置了返回列表菜单和删除联系人菜单。点击返回列表菜单,会返回到联系人浏览界面。编辑联系人界面如下图:图6.3 手机通讯录编辑联系人界面模块6.4查找联系人模块查找到所有包含该局部的联系人,并在ListView中显示出来所有的联系人的*和手机,截图如下图:图6.4 通讯录查找联系人模块界面7 总结这学期的智能手机开发课程的学习,让我了解到手机开发端应用的广泛性,以及对自己所学知识的总结,做手机通讯录,让我了解到手机已经成为日常生活中
10、不可分割的一局部,所以手机上的功能满足人们的需求,才是手机通讯录开的重要性。对于这次的课程设计,使我发现了自己所掌握的知识是真正如此的缺乏,自己综合应用所学的专业知识能力是如此的缺乏通过这次开发工程,我们学会了如何在一个工程中集成多种技术,如何合理的耦合各种小功能,如何解决各种开发中出现的问题。同时在这次开发中出现的问题也暴露出了我们对java程序设计的一些问题,以及自己的动手能力还需要提高,而且做一个工程首先要明白这个工程的中心思想,这样才有目的去设计。 通过课程设计,使我深深体会到,干任何事都必须耐心,细致,课程设计过程中,许多迷惑有时不免令我感到有些心烦意乱,有几次因为不小心而出错,只能
11、毫不情意地重来。但一想起教师对我们耐心的教诲,认真对待的良好习惯.这次课程设计使我在工作作风上得到了一次难得的磨练,一个人的性格很大程度上决定一件事情的进展以及对工作的态度和生活的态度,所以养成好的习惯能够帮助我克制各种苦难,能够帮助我在今后的学习中脚踏实地的工作。通过这次手机开发通讯录课程设计,我能够更加深刻的了解到手机通讯录开发的前景以及所需的知识,总之在今后的学习中自己应该了解如今社会上开发手机通讯录所需的最新的技术,不能一成不变,只看书本上的知识,养成自我学习的良好习惯。8 参考文献1 罗伟. 基于 Android平台的即时通讯系统的研究与实现D.*师*大学, 2009.2 李刚,疯狂
12、Java讲义,电子工业,20083 程峰,JAVA核心技术,机械工业,20074 王鹏,JAVA语言程序设计,*理工,20059 附录源代码public class DBHelper /* *操作数据库和各个表 */ public static final String DATABASE_NAME=CONTACT_DB; public static final String TABLE_CONTACTER=contact_person; public static final String TABLE_MOBLIEPHONE=phone_number; public static final
13、String TABLE_GROUP=mygroup; public static final String TABLE_EMAIL=email; public static final String TABLE_QQ=qq; public static final String TABLE_HOMEPHONE=home_phone_number; public static final String TABLE_ADDRESS=address; public static final String TABLE_FA*=fa*; /创立表的SQL语句 public static String
14、CreateTabelSQL; private static SQLiteDatabase dbInstance; public static final int VERSION = 4; private MyDBHelper myDBHelper; private Conte*t conte*t; public DBHelper(Conte*t conte*t,String createtablesql) this.conte*t=conte*t; this.CreateTabelSQL=createtablesql; public DBHelper(Conte*t conte*t) thi
15、s.conte*t=conte*t; /* * 翻开数据库 */ public void openDatabase() if(dbInstance=null) /创立数据库 myDBHelper= new MyDBHelper(conte*t, DATABASE_NAME, VERSION); dbInstance=myDBHelper.getWritableDatabase(); /* 返回所有联系人 */ public ArrayListHashMap getAllContacter(String condition) ArrayListHashMap contaclist = new A
16、rrayList(); 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(); sqlBuffer.append(select id,name,headImage from ) .append(TABLE_CONTACTER) .appen
17、d( 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(cursor.getColumnInde*(id); item.put(name, cursor.getString(cursor.getColumnI
18、nde*(name); item.put(headimage, cursor.getString(cursor.getColumnInde*(headImage); /返回第一个手机 Cursor phoneCursor=dbInstance.query(TABLE_MOBLIEPHONE, new Stringphone_number, id=, new StringString.valueOf(cursor.getInt(cursor.getColumnInde*(id), null, null, null); phoneCursor.moveToFirst(); item.put(pho
19、nenumber, phoneCursor.getString(phoneCursor.getColumnInde*(phone_number); contaclist.add(item); cursor.moveToNe*t(); return contaclist; /* * 根据编号返回一个联系人 */ public Contacter getContacter(int id) Contacter contacter = new Contacter(); Cursor contacterCursor =dbInstance.query(TABLE_CONTACTER, new Strin
20、gid,group_name,name,nick_name,birthday,workingunits,headImage, id=, new StringString.valueOf(id), null, null, null); contacter.id=id; contacterCursor.moveToFirst(); =contacterCursor.getString(contacterCursor.getColumnInde*(name); contacter.nickname=contacterCursor.getString(contacterCu
21、rsor.getColumnInde*(nick_name); contacter.workingunits=contacterCursor.getString(contacterCursor.getColumnInde*(workingunits); if(contacterCursor.getString(contacterCursor.getColumnInde*(birthday).trim()!=null &!contacterCursor.getString(contacterCursor.getColumnInde*(birthday).trim().equals() Strin
22、g string=contacterCursor.getString(contacterCursor.getColumnInde*(birthday).trim(); contacter.birthday=Date.valueOf(contacterCursor.getString(contacterCursor.getColumnInde*(birthday); contacter.headimage=contacterCursor.getInt(contacterCursor.getColumnInde*(headImage); /联系人的手机 Cursor phoneCursor =db
23、Instance.query(TABLE_MOBLIEPHONE, new Stringphone_number, id=, new StringString.valueOf(id), null, null, null); phoneCursor.moveToFirst(); contacter.mobilephone=new StringphoneCursor.getCount(); for(int i=0;iphoneCursor.getCount();i+) contacter.mobilephonei=phoneCursor.getString(phoneCursor.getColum
24、nInde*(phone_number); phoneCursor.moveToNe*t(); /联系人的座机 Cursor homephoneCursor=dbInstance.query(TABLE_HOMEPHONE, new Stringhome_number, id=, new StringString.valueOf(id), null, null, null); homephoneCursor.moveToFirst(); contacter.homephonenumber=new StringhomephoneCursor.getCount(); for(int i=0;iho
25、mephoneCursor.getCount();i+) contacter.homephonenumberi=homephoneCursor.getString(homephoneCursor.getColumnInde*(home_number); homephoneCursor.moveToNe*t(); /联系人的email Cursor emailCursor=dbInstance.query(TABLE_EMAIL, new Stringemail, id=, new StringString.valueOf(id), null, null,null); emailCursor.m
26、oveToFirst(); contacter.email=new StringemailCursor.getCount(); for(int i=0;iemailCursor.getCount();i+) contacter.emaili=emailCursor.getString(emailCursor.getColumnInde*(email); emailCursor.moveToNe*t(); /联系人的 Cursor fa*Cursor=dbInstance.query(TABLE_FA*, new Stringfa*_number, id=, new StringString.v
27、alueOf(id), null, null,null); contacter.fa*number=new StringemailCursor.getCount(); fa*Cursor.moveToFirst(); for(int i=0;ifa*Cursor.getCount();i+) contacter.fa*numberi=fa*Cursor.getString(fa*Cursor.getColumnInde*(fa*_number); fa*Cursor.moveToNe*t(); /联系人的地址 Cursor addressCursor=dbInstance.query(TABL
28、E_ADDRESS, new Stringadd_code,province,city,street,zip_code,country, id=, new StringString.valueOf(id), null, null, null); addressCursor.moveToFirst(); contacter.addresses=new addressaddressCursor.getCount(); for(int i=0;i0) for(String email:contacter.email) flag&=insertEmail(id, email); /插入QQ if(co
29、ntacter.email!=null&contacter.QQ.length0) for(long qq:contacter.QQ)flag&=insertQQ(id, qq); /插入 if(contacter.fa*number!=null&contacter.fa*number.length0) for(String fa*:contacter.fa*number)flag&=insertFa*(id, fa*); /插入 if(contacter.mobilephone!=null&contacter.mobilephone.length0) for(String phone:con
30、tacter.mobilephone)flag&=insertPhoneNumber(id, phone); /插入座机 if(contacter.homephonenumber!=null&contacter.homephonenumber.length0) for(String homephone:contacter.homephonenumber)flag&=insertHomePhone(id, homephone); /插入地址 int i=0; if(contacter.addresses!=null&contacter.addresses.length0) for(address
31、 add:contacter.addresses) flag&=insertAddress(id, i+,vince, add.city, add.street, add.zip_code, add.coutry); return flag; /* * 更新联系人 */ public void updateContacter(Contacter contacter) /先删除记录 removeContacter(String.valueOf(contacter.id); /再重新插入 insertContacter(contacter); /* * 删除联系人 */ public
32、 void removeContacter(String id) dbInstance.delete(TABLE_EMAIL, id=, new Stringid); dbInstance.delete(TABLE_FA*, id=, new Stringid); dbInstance.delete(TABLE_HOMEPHONE, id=, new Stringid); dbInstance.delete(TABLE_MOBLIEPHONE, id=, new Stringid); dbInstance.delete(TABLE_QQ, id=, new Stringid); dbInsta
33、nce.delete(TABLE_CONTACTER, id=, new Stringid); /数据库插入函数 public boolean insertValuesToTable(String tableName,ContentValues values) if( (long) dbInstance.insert(tableName, null, values)=-1) return false; else return true; /* * 往表中插入数据 */ /往group插入数据 public boolean insertGroup(String groupname) Conten
34、tValues values=new ContentValues(); values.put(group_name, groupname); if (insertValuesToTable(TABLE_GROUP,values) ) return true; else return false; /往ContactPerson表插入数据 public boolean insertContactPerson(int id, String groupname, String name, String nickname, Date birthday, String workiingunits, in
35、t headImage ) ContentValues values=new ContentValues(); values.put(id, id); values.put(group_name, groupname); values.put(name, name); values.put(nick_name, nickname); values.put(birthday, birthday.toString(); values.put(workingunits, workiingunits); values.put(headImage, headImage); if (insertValue
36、sToTable(contact_person,values) ) return true; else return false; /往Email表插入数据 public boolean insertEmail(int id,String email) ContentValues values=new ContentValues(); values.put(id, id); values.put(email, email); if (insertValuesToTable(Email,values) ) return true; else return false; /往address表插入数
37、据 public boolean insertAddress(int id, int add_code, String province, String city, String street, String zip_code, String country) ContentValues values=new ContentValues(); values.put(id, id); values.put(add_code, add_code); values.put(province, province); values.put(city, city); values.put(street,
38、street); values.put(zip_code, zip_code); values.put(country, country); if (insertValuesToTable(address,values) ) return true; else return false; /往QQ表插入数据 public boolean insertQQ(int id,long QQ_number) ContentValues values=new ContentValues(); values.put(id, id); values.put(QQ_number, QQ_number); if (insertValuesToTable(QQ,values) ) return true; else return false; /往fa*表插入数据 public boolean insertFa*(int id,String fa*_number) ContentValues values=new ContentValues(); values.put(id, id); values.put(fa*_number, fa*_number); if (insertValuesToTable(fa*,values) return true;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 保温羊棚施工方案(3篇)
- 修车新年营销方案(3篇)
- 医院射线泄露应急预案(3篇)
- 电信落地施工方案范文(3篇)
- 市语言文字工作计划要点(2篇)
- 网络空间态势感知平台
- 深基坑开挖对邻近地铁隧道影响的多维度解析与应对策略
- 深圳市市场网格监管:模式、挑战与优化路径研究
- 深A上市公司费用粘性剖析:基于财务结构视角的影响因素探究
- 淬硬钢模具自由曲面铣削加工误差在机测量方法与精度提升策略
- 文书模板-诗词学会会员入会申请书
- 感染性休克诊治指南
- 江苏省低空空域协同管理办法(试行)
- 肿瘤代谢与营养
- 人保农险理赔试题
- 安徽省A10联盟2024-2025学年高一下学期4月期中政治试卷(扫描版含答案)
- 运输企业人事管理制度
- 2025年成都市锦江投资发展集团有限责任公司招聘笔试参考题库附带答案详解
- 2025年河南建筑职业技术学院单招职业技能测试题库附答案
- DBJ51-T 184-2021 四川省预成孔植桩技术标准
- DB51T 2772-2021 四川省医疗护理员服务规范
评论
0/150
提交评论