安卓开发课程设计报告.docx
《安卓开发课程设计报告.docx》由会员分享,可在线阅读,更多相关《安卓开发课程设计报告.docx(33页珍藏版)》请在冰点文库上搜索。
安卓开发课程设计报告
武汉理工大学华夏学院
课程报告
课程名称:
智能手机软件开发
题目:
基于 Android 的手机通
讯录的设计与实现
专业信息工程系
班级
学号
姓名
成绩
指导教师
2015 年 3 月 23 日至 2015 年 6 月 12 日
智能手机软件开发大作业
根据所学的 Android 手机开发的知识,采用 Eclipse、JAVA 开发一个基于 Android
平台的手机通讯录软件,具体要求如下:
1.要发该软件能够在 Android4.0 以上的平台上运行。
2.要求软件界面美观,操作方便,符合日常使用规范。
3.能够通过该手机通讯录来添加新的联系人,用来存放联系人的姓名、单位、
电话、QQ、地址等信息。
4.能够通过该手机通讯录来编辑联系人信息,来修改联系人的个人信息。
5.能够通过该手机通讯录来调用系统的通信接口,直接给用户发短信,打电话。
6.在手机通讯录中,添加合适的菜单,来操作手机通讯录。
7.将开发的过程写成报告,要求内容完整,格式规范,条理清晰。
1 设计目的
随着手机通讯录功能的不断加强与完善,手机通讯录对于人们的意义,
已不仅仅像记事簿一样显示通讯地址,而是向着个性化、人性化的方向发展移动
终端的应用软件和需要的服务将会有很大的发展空间。
根据这个特点,设计一个
基于 Android 平台的通讯录系统,能根据手机的特点,存储,管理,修改联系人
信息,并且能够根据选定的联系人,对其拨打电话,发送短信等。
手机通讯录作为手机的基本功能之一,每天我们都在频繁地使用着。
根
据手机功能使用调查显示,通讯录从无到有,从英文到中文,经过了十几年的发
展历程,今后的发展趋势就是从通讯录发展为名片夹,也就是在一个人名下,可
以存储座机、手机、单位、地址、电子邮件等内容。
所以手机通讯录功能越来越
齐全,满足了人们的需求。
2 开发环境
由 于 该 android 通 讯 录 是 一 个 基 于 Java 语 言 开 发 软 件 , 所 以 选 择 了
Eclipse3.4 作为开发平台,作为插件,它能够安装 Android SDK,从而可以安装
使用 Android 虚拟机,使得程序得以开发,亦更为方便。
本通讯录系统就是在 Eclipse3.4+Android 平台环境下编写设计而成的。
3 需求分析
该系统针对的主要用户是 Android 手机用户。
Android 手机通信管理系统包
括以下主要内容:
(1) 用户通过联系人功能可以保存联系人的详细信息,可以对联系人进行编
辑、删除、拨打电话、发送短信可以根据索引条件搜索联系人。
(2) 用户通过短信记录功能可以发送短信,删除短信记录。
(3) 用户通过 SD 卡所储存信息向通讯录批量导入联系人信息。
(4) 用户通过个人中心可以设置自己的详细信息,这样方便其他人了解自己,
也可以将具有相同名字的联系人合并。
要设计一个良好的手机通讯录,就必须首先明确该应用环境对系统的要求。
Android 手机通讯录应用背景:
方便用户快捷通讯。
(1)类似于传统手机通讯录的联系人的添加、修改、查找、删除功能。
(2)指定联系人后,录音并发送给该联系人的留言功能。
(3)通过通讯录访问联系人的微博以实现与联系人互动的功能。
(4)接收短信、电话、语音留言和微博留言的信息并提醒用户。
(5)保存用户自身的个人信息以用于与他人联系时显示身份。
4 概要设计
下面数据流图是对于 Android 手机通讯管理软件主要功能模块包括的简单结
构图:
联系人查看、联系人编辑、联系人添加、联系人删除、呼叫、发送短信、
搜索,如图所示:
Android 手机通讯
通讯列表
添
加
查
看
编
辑
删
除
呼
叫
发送
短信
搜
索
图 4.1Android 手机通讯管理软件主要功能模块
联系人列表界面主菜单中包括添加联系人、搜索联系人、关于及查看系统
版本号、退出菜单项。
点击添加联系人,则进入联系人添加界面,添加成功后返
回列表界面。
点击搜索菜单,则进入联系人搜索界面,输入联系人的全名或一个
字,即可查找相关联系人,点击联系人会进入联系人查看界面,可以对联系人进
行编辑、删除、拨打电话、发送短信。
如下图所示的 Android 手机通讯管理软件
业务流程图.
开始
选则功
能
选中条目
新建
编辑
删除
拨打电话
发送短信
输入新建
搜索
联系人信
息后保存
输入搜索
条件
更新数据库
显示搜索
结果
结束
图 4.2Android 手机通讯管理软件业务流程图
5 数据库设计
5.1 SQLite 数据库简介
SQLite,是一款轻型的数据库,是遵守 ACID 的关联式数据库管理系统,它
的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资
源非常的低,在嵌入式设备中,可能只需要几百 K 的内存就够了。
它能够支持
Windows/Linux/Unix 等等主流的操作系统,同时能够跟很多程序语言相结合,比
如 Tcl、C#、PHP、Java 等,还有 ODBC 接口,同样比起 Mysql、PostgreSQL 这
两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。
SQLite
第一个 Alpha 版本诞生于 2000 年 5 月. 至今已经有 10 个年头,SQLite 也迎来了
一个版本 SQLite 3 已经发布。
本系统采用的是 Android 系统自带的 SQLite 轻型数据库数据库。
因此占用资
源非常小。
5.2 数据库表结构
首先创建数据库,在数据库中创建表用来存储联系人数据,其中包括联系人
姓名、手机号、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 在联系人界面点中击某个联系人,则会跳转到该界面。
该软件实现了给联
系人拨打电话和发送短信的功能。
查看联系人界面截图如图所示:
图 6.2手机通讯查看联系人模块界面
6.3 编辑联系人模块
6.3.1 联系人编辑界面设置了返回列表菜单和删除联系人菜单。
点击返回列表菜
单,会返回到联系人浏览界面。
编辑联系人界面如图所示:
图 6.3 手机通讯录编辑联系人界面模块
6.4 查找联系人模块
查找到所有包含该部分的联系人,并在 ListView 中显示出来所有的联系人的姓
名和手机号码,截图如图所示:
图 6.4 通讯录查找联系人模块界面
7 总结
这学期的智能手机开发课程的学习,让我了解到手机开发端应用的广泛性,
以及对自己所学知识的总结,做手机通讯录,让我了解到手机已经成为日常生活
中不可分割的一部分,所以手机上的功能满足人们的需求,才是手机通讯录开的
重要性。
对于这次的课程设计,使我发现了自己所掌握的知识是真正如此的缺乏,
自己综合应用所学的专业知识能力是如此的不足通过这次开发项目,我们学会了
如何在一个项目中集成多种技术,如何合理的耦合各种小功能,如何解决各种开
发中出现的问题。
同时在这次开发中出现的问题也暴露出了我们对 java 程序设
计的一些问题,以及自己的动手能力还需要提高,而且做一个项目首先要明白这
个项目的中心思想,这样才有目的去设计。
通过课程设计,使我深深体会到,干任何事都必须耐心,细致,课程设计过
程中,许多迷惑有时不免令我感到有些心烦意乱,有几次因为不小心而出错,只
能毫不情意地重来。
但一想起老师对我们耐心的教导,认真对待的良好习惯.这
次课程设计使我在工作作风上得到了一次难得的磨练,一个人的性格很大程度上
决定一件事情的进展以及对工作的态度和生活的态度,所以养成好的习惯能够帮
助我克服各种苦难,能够帮助我在今后的学习中脚踏实地的工作。
通过这次手机开发通讯录课程设计,我能够更加深刻的了解到手机通讯录开
发的前景以及所需的知识,总之在今后的学习中自己应该了解如今社会上开发手
机通讯录所需的最新的技术,不能一成不变,只看书本上的知识,养成自我学习
的良好习惯。
8 参考文献
[1] 罗伟. 基于 Android平台的即时通讯系统的研究与实现[D].湖南师范大学, 2009 .
[2] 李刚,《疯狂 Java 讲义》,电子工业出版社,2008
[3] 程峰,《JAVA 核心技术》,机械工业出版社,2007
[4] 王鹏,《JAVA 语言程序设计》,大连理工出版社,2005
9 附录源代码
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 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_FAX="fax";
//创建表的 SQL 语句
public static String[] CreateTabelSQL;
private static SQLiteDatabase dbInstance;
public static final int VERSION = 4;
private MyDBHelper myDBHelper;
private Context context;
public DBHelper(Context context,String[] createtablesql)
{
this.context=context;
this.CreateTabelSQL=createtablesql;
}
public DBHelper(Context context)
{
this.context=context;
}
/**
* 打开数据库
*/
public void openDatabase()
{
if(dbInstance==null)
{
//创建数据库
myDBHelper= new MyDBHelper(context, DATABASE_NAME, VERSION);
dbInstance=myDBHelper.getWritableDatabase();
}
}
/**
* 返回所有联系人
*/
public ArrayList> getAllContacter(String condition)
{
ArrayList> contaclist = new ArrayList();
Cursor cursor;
if(condition==null||condition.trim().equals(""))
cursor=dbInstance.query(TABLE_CONTACTER,
new String[]{"id","name","headImage"}, null, null,
null, null, null);
else {
StringBuffer sqlBuffer=new StringBuffer();
sqlBuffer.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(cursor.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 String[]{"phone_number"}, "id=?
",
new
String[]{String.valueOf(cursor.getInt(cursor.getColumnIndex("id")))},
null, null, null);
phoneCursor.moveToFirst();
item.put("phonenumber",
phoneCursor.getString(phoneCursor.getColumnIndex("phone_number")));
contaclist.add(item);
cursor.moveToNext();
}
return contaclist;
}
/**
* 根据编号返回一个联系人
*/
public Contacter getContacter(int id)
{
Contacter contacter = new Contacter();
Cursor contacterCursor =dbInstance.query(TABLE_CONTACTER,
new
String[]{"id","group_name","name","nick_name","birthday","workingunits","headImage"},
"id=?
",
new String[]{String.valueOf(id)}, null,
null, null);
contacter.id=id;
contacterCursor.moveToFirst();
contacter.name=contacterCursor.getString(contacterCursor.getColumnIndex("name"));
contacter.nickname=contacterCursor.getString(contacterCursor.getColumnIndex("nick_name"));
contacter.workingunits=contacterCursor.getString(contacterCursor.getColumnIndex("workingunit
s"));
if(contacterCursor.getString(contacterCursor.getColumnIndex("birthday")).trim()!
=null
&&!
contacterCursor.getString(contacterCursor.getColumnIndex("birthday")).trim().equals(""))
{
String
string=contacterCursor.getString(contacterCursor.getColumnIndex("birthday")).trim();
contacter.birthday=Date.valueOf(contacterCursor.getString(contacterCursor.getColumnIndex("bir
thday")));
}
contacter.headimage=contacterCursor.getInt(contacterCursor.getColumnIndex("headImage"));
//联系人的手机号码
Cursor phoneCursor =dbInstance.query(TABLE_MOBLIEPHONE,
new String[]{"phone_number"},
"id=?
",
newString[]{String.valueOf(id)},null,
null, null);
phoneCursor.moveToFirst();
contacter.mobilephone=new String[phoneCursor.getCount()];
for(int i=0;i{
contacter.mobilephone[i]=phoneCursor.getString(phoneCursor.getColumnIndex("phone_number"
));
phoneCursor.moveToNext();
}
//联系人的座机号码
Cursor homephoneCursor=dbInstance.query(TABLE_HOMEPHONE,
new String[]{"home_number"},
"id=?
",
new String[]{String.valueOf(id)}, null,
null, null);
homephoneCursor.moveToFirst();
contacter.homephonenumber=new String[homephoneCursor.getCount()];
for(int i=0;i{
contacter.homephonenumber[i]=homephoneCursor.getString(homephoneCursor.getColumnIndex(
"home_number"));
homephoneCursor.moveToNext();
}
//联系人的 email
Cursor emailCursor=dbInstance.query(TABLE_EMAIL,
new String[]{"email"},
"id=?
",
newString[]{String.valueOf(id)},null,
null,null);
emailCursor.moveToFirst();
contacter.email=new String[emailCursor.getCount()];
for(int i=0;i{
contacter.email[i]=emailCursor.getString(emailCursor.getColumnIndex("email"));
emailCursor.moveToNext();
}
//联系人的传真号码
Cursor faxCursor=dbInstance.query(TABLE_FAX,
new String[]{"fax_number"},
"id=?
",
new String[]{String.valueOf(id)}, null, null,null);
contacter.faxnumber=new String[emailCursor.getCount()];
faxCursor.moveToFirst();
for(int i=0;i{
contacter.faxnumber[i]=faxCursor.getString(faxCursor.getColumnIndex("fax_number"));
faxCursor.moveToNext();
}
//联系人的地址
Cursor addressCursor=dbInstance.query(TABLE_ADDRESS,
new
String[]{"add_code","province","city","street","zip_code","country"},
"id=?
",
newString[]{String.valueOf(id)},null,
null, null);
addressCursor.moveToFirst();
contacter.addresses=new address[addressCursor.getCount()];
for(int i=0;i{
contacter.addresses[i]=new address();
contacter.addresses[i].add_code=addressCursor.getInt(addressCursor.getColumnIndex("add_code
"));
contacter.addresses[i].province=addressCursor.getString(addressCursor.getColumnIndex("provinc
e"));
contacter.addresses[i].city=addressCursor.getString(addressCursor.getColumnIndex("city"));
contacter.addresses[i].street=addressCursor.getString(addressCursor.getCo