admin 管理员组

文章数量: 887030


2023年12月18日发(作者:安装mysql未将对象引用设置到对象的实例)

移动通信课程设计

题 目 联系人管理

姓名学号

院 系 计算机与软件学院

专 业

指导教师

二O一二年六月五日1

联系人管理

1概述

1.1 设计平台介绍

Android是Google推出的开源手机操作系统。它基于Linux平台,由操作系统、中间件、用户界面和应用软件组成,具有以下5个特点:

1、开放性。

2、应用程序无界限。

3、应用程序是在平等条件下创建的。

4、应用程序可以轻松的嵌入网络。

5、应用程序可以并行运行。

Android平台特性:

1、应用程序框架 支持组件的重用与替换。

2、Dalvik 虚拟机 专为移动设备优化。

3、集成的浏览器 基于开源的WebKit 引擎。

4、优化的图形库 包括定制的2D图形库,3D图形库基于OpenGL ES 1.0 (硬件加速可选)。

5、SQLite 用作结构化的数据存储。

6、多媒体支持 包括常见的音频、视频和静态图像格式 (如 MPEG4, H.264, MP3, AAC,

AMR, JPG, PNG, GIF)。

7、GSM 电话技术 (依赖于硬件)。

8、蓝牙Bluetooth, EDGE, 3G, 和 WiFi (依赖于硬件)。

9、照相机,GPS,指南针,和加速度计(accelerometer) (依赖于硬件)。

10、丰富的开发环境 包括设备模拟器,调试工具,内存及性能分析图表,和Eclipse集成开发环境插件。

Android 架构:如图1-1

2

图1-1 android架构

Android的应用层是用Java语言编写的运行在虚拟机上的程序,我们课程设计中所用到开发语言就是Java。

1.2 课题描叙

这次课程设计我做的是一个手机联系人管理的小软件,它可以设置联系的详细资料,帮助你记住你朋友的号码,邮编,住址等。把QQ里面的头像图片加载了进来,可以根据你的喜爱设置你的朋友的可爱头像,并且可以把联系人备份到SD卡中,方便保存,以免在刷机等突发情况时丢失联系人信息,下次只要重新从SD卡中导入到手机中即可,非常方便实用。

1.3 需求分析

这是个信息膨胀的时代,随着网络的发展,我们的朋友越来越多,所以朋友的信息就越来越多了,朋友的手机号码,固定电话号码,家庭住址,邮编等。手机是现在人们最随身带的电子产品之一,所以想到了在手机上做一款联系人管理软件,来帮助我们记录和管理联系人的资料,随时随地都可以看到,方便实用,成本也很低。

基于以上的想法,进行了一些简单的可行性分析,主要问题在于技术的实现问题。就我们现在所学,对于实现我们想要的软件功能完全是可能的,所以借助于各种参考文献和网络资料,开始了软件的开发。

3

2移动通信软件的设计

2.1功能模块图

手机联系人管理软件包括以下几个功能:增加新的联系人,查找已有的联系人,删除单个联系人,删除所有联系人,修改联系人信息,备份联系人,还原联系人,检查软件更新信息。如图2-1所示:

图2-1功能总体模块图

2.2系统流程图

2.2.1系统整体流程图

用户进入系统后首先看到的是联系人列表界面,如果没有联系人则显示无信息。按下Menw建,我们会看到添加,查找,删除,菜单,退出几个选项,我们可以进行联系人的添4

加,查找,删除等操作。双击联系人,我们可以进入查看联系人信息的界面,可以进行修改资料,删除等操作。当我们点击菜单选项时,我们会看到显示所有联系人,删除所有,备份,还原,更新等,进行各项操作。如图2-2所示:

图2-2系统整体流程图

2.2.2添加联系人模块流图

添加联系人模块,在我们添加联系人时,会进行名字的判断,联系人列表中是否已经有该联系的名字和信息,如果有则会提醒出现错误,要求你返回联系人列表。所以该数据流图会有一个判定框的功能实现该检查功能。具体的数据流图如图2-3所示:

5

图2-3添加联系人数据流图

2.2.3修改联系人数据流图

我们在联系人菜单,对联系人进行信息修改时,需要对我们输入的联系人信息进行判断,判断其是否合乎我们要求的格式等,所以进行了一个判定,修改信息错误时会报错,具体功能实现,如下图2-4所示:

6

图2-4修改信息流程图

2.2.4删除联系人数据流图

删除联系人得原理和添加差不多,只是会提示是否确认删除,以免失误删除重要信息,数据流图2-5所示:

图2-5删除联系人数据流图

7

2.2.5备份与还原的数据流图

在菜单的选项中,实现数据的备份与还原时,数据是在手机和SD卡之间转换的,导入导出之前都进行确认询问,最终完成操作。具体数据流图如图2-6所示:

图2-6数据备份流图

2.3软件界面风格设计

进行了数据流图的分析之后,开始准备进行软件界面风格的整体和细节设计,主界面,联系人界面,各种操作的界面,都进行了设想与设计,以方便软件功能的实现,由于初次做,所以布局等可能有些不合理,界面比较粗糙。

3软件功能的具体实现

3.1联系人主界面模块

我们打开软件,第一个看到的就是联系人列表,显示联系人得头像,姓名和手机号码信息,很简约的风格,如图5-1所示。按下Menw键,我们可以看到下面会显示出5个功能8

菜单,所实现的功能是分别是添加新的联系人,查找具体的联系人,删除单个联系人,打开菜单选项和退出软件,如图5-2所示。

图5-1联系人列表界面

图5-2Menw功能选项

此时按下菜单键,会出现菜单的选项,出现如图5-3的功能选项。

图5-3菜单的功能选项

关键代码:

public class Main extends Activity {

ListView lv;

ArrayList list;

SimpleAdapter adapter;

GridView bottomMenuGrid;

GridView mainMenuGrid;

View mainMenuView;

View loginView;

LinearLayout searchLinearout;

LinearLayout mainLinearLayout;

EditText et_search;

EditText et_enter_file_name;

AlertDialog mainMenuDialog;

AlertDialog confirmDialog;

AlertDialog progressDialog;

AlertDialog enterFileNameDialog;

AlertDialog loginDialog;

boolean privacy = false;

int markedNum;

ArrayList deleteId;

9

String[] main_menu_itemName = { "显示所有", "删除所有", "备份数据", "还原数据", "更新", "后退"};

//主菜单图片

int[] main_menu_itemSource = {

String[] bottom_menu_itemName = { "增加", "查找", "删除", "菜单","退出" };

String fileName;

int[] bottom_menu_itemSource = {

_new_user,

_search,

_delete,

lbar_showtype_list,

_exit };

l,

_delete,

_backup,

_restore,

_fresh,

_return};

@Override

public void onCreate(Bundle savedInstanceState) {

te(savedInstanceState);

setContentView();

mainLinearLayout = (LinearLayout)findViewById(_ll);

DBHelper helper = new DBHelper(this);

tabase();

list = User(privacy);

lv = (ListView)findViewById(_userlist); //创建ListView对象

if(() == 0) {

10

Drawable nodata_bg = getResources().getDrawable(_bg);

kgroundDrawable(nodata_bg);

setTitle("没有查到任何数据");

}

adapter = new SimpleAdapter(this,

list,

em,

new String[]{"imageid","name","mobilephone"},

new

int[]{_image,_name,_mobilephone});

pter(adapter);

temClickListener(new OnItemClickListener() {

@Override

public void onItemClick(AdapterView arg0, View arg1, int arg2,

long arg3) {

HashMap item = (HashMap)mAtPosition(arg2);

int _id = nt(f(("_id")));

Intent intent = new Intent(,);

User user = new User();

user._id = nt(f(("_id")));

s = f(("address"));

y = f(("company"));

= f(("email"));

Phone = f(("familyphone"));

Phone = f(("mobilephone"));

Phone = f(("officephone"));

ontact = f(("othercontact"));

on = f(("position"));

= f(("remark"));

11

me = f(("name"));

e = f(("zipcode"));

d = nt(f(("imageid")));

ra("user", user);

if(searchLinearout != null

ibility()==E) {

ibility();

}

startActivityForResult(intent, arg2);

}

});

heColorHint(ARENT); //设置ListView的背景为透明

temLongClickListener(new OnItemLongClickListener(){

@Override

public boolean onItemLongClick(AdapterView arg0, View arg1,

int arg2, long arg3) {

if(deleteId == null) {

deleteId = new ArrayList();

}

HashMap item = (HashMap)mAtPosition(arg2);

Integer _id = nt(f(("_id")));

RelativeLayout r = (RelativeLayout)arg1;

ImageView markedView = (ImageView)ldAt(2);

if(ibility() == E) {

12

&&

}

ibility();

(_id);

} else {

}

return true;

ibility(E);

(_id);

});

Drawable bgDrawable = getResources().getDrawable(_bg);

ector(bgDrawable);

}

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

vityResult(requestCode, resultCode, data);

if(deleteId != null) {

}

if(resultCode == 3 || resultCode == 4) {

DBHelper helper = new DBHelper(this);

();

list = User(privacy);

adapter =

new SimpleAdapter(

this,

list,

em,

new String[]{"imageid","name","mobilephone"},

new

int[]{_image,_name,_mobilephone});

13

if(() > 0){

}

}

pter(adapter);

if(resultCode == 3) {

ection(());

kgroundDrawable(null);

} else {

}

ection(requestCode);

3.2菜单功能实现

菜单的功能选项是显示所有联系人,删除所有联系人,备份联系人,还原联系人,检查更新和返回。如图5-4所示为备份功能。

图5-4备份功能选项

关键代码:

private void loadMainMenuDialog() {

14

if(mainMenuDialog == null) {

LayoutInflater li = (this);

mainMenuView = e(_menu_grid, null);

= new mainMenuDialog

r(this).setView(mainMenuView).create();

mainMenuGrid = (GridView)ewById(ew);

SimpleAdapter menuAdapter = getMenuAdapter(main_menu_itemName,

main_menu_itemSource);

pter(menuAdapter);

temClickListener(new OnItemClickListener(){

@Override

public void onItemClick(AdapterView arg0, View arg1, int arg2,

long arg3) {

switch(arg2){

case 0:{

DBHelper helper = new DBHelper();

list = User(privacy);

adapter = new SimpleAdapter(

,

list,

em,

new String[]{"imageid","name","mobilephone"},

new

int[]{_image,_name,_mobilephone});

}

case 1:{

15

pter(adapter);//显示所有数据

s();

break;

r builder = new

r();

confirmDialog = ();

le("是否删除所有!?");

itiveButton("确定", new

kListener() {

{

DBHelper helper = new DBHelper();

@Override

public void onClick(DialogInterface dialog, int which)

All(0);

list = User(privacy);

adapter = new SimpleAdapter(

,

list,

em,

new

String[]{"imageid","name","mobilephone"},

new

int[]{_image,_name,_mobilephone});

pter(adapter);//显示所有数据

s();

});

取消", new

}

ativeButton("kListener() {

{

16

@Override

public void onClick(DialogInterface dialog, int which)

}

});

}

s();

().show();

break;

case 2:{

s();

new r()

.setTitle("是否需要备份记录到SD卡?")

.setPositiveButton("确定", new

kListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

LayoutInflater li = ();

View backup_view = e(_progress,

null);

progressDialog = new r()

.setTitle("备份正在进行中...")

.setView(backup_view)

.create();

();

DBHelper helper = new DBHelper();

Data(privacy);

ProgressBar bar = (ProgressBar)

backup_ewById(_backup);

Button btn_backup_ok =

(Button)backup_ewById(_backuup_ok);

(());

for(int i=0;i<=();i++) {

17

gress(i);

条记录");

{

null);

}

le("备份完成!一共 "+ () + "

btn_backup_ibility(E);

btn_backup_lickListener(new OnClickListener()

@Override

public void onClick(View v) {

s();

s();

}

});

}

})

.setNegativeButton("取消", null)

.create()

.show() ;

break;

}

case 3:{

LayoutInflater li = ();

View enterFileNameView = e(ilename,

enterFileNameDialog = new r()

.setView(enterFileNameView).setNegativeButton("取消", null)

.setPositiveButton("确定", new

18

kListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

DBHelper helper = new DBHelper();

fileName = et_enter_file_t().toString();

if(le(fileName)){

new r().setTitle("请选择方式")

.setPositiveButton("覆盖", new

kListener() {

@Override

public void onClick(DialogInterface dialog,

int which) {

DBHelper helper = new

DBHelper();

All(0);

eData(fileName);

list = User(privacy);

adapter = new

SimpleAdapter(,

list,

em,

new

String[]{"imageid","name","mobilephone"},

new

int[]{_image,_name,_mobilephone});

LayoutInflater li =

();

19

View backup_view =

e(_progress, null);

progressDialog = new

r()

.setTitle("正在还原数据...")

.setView(backup_view)

.create();

();

ProgressBar bar = (ProgressBar)

backup_ewById(_backup);

Button btn_backup_ok =

(Button)backup_ewById(_backuup_ok);

(());

for(int i=0;i<=();i++) {

}

le("还原完成!gress(i);

一共还原了 "+ () + " 条记录");

20

btn_backup_ibility(E);

btn_backup_lickListener(new OnClickListener() {

@Override

public void onClick(View v) {

s();

s();

if(() != 0) {

kgroundDrawable(null);

})

.setNegativeButton("添加", new

}

});

}

}

pter(adapter);

kListener() {

@Override

public void onClick(DialogInterface dialog,

int which) {

DBHelper helper = new

DBHelper();

int preNum = ();

eData(fileName);

list = User(privacy);

adapter = new

SimpleAdapter(,

list,

em,

new

String[]{"imageid","name","mobilephone"},

new

int[]{_image,_name,_mobilephone});

LayoutInflater li =

();

View backup_view =

e(_progress, null);

21

progressDialog = new

r()

.setTitle("正在还原数据...")

.setView(backup_view)

.create();

();

ProgressBar bar = (ProgressBar)

backup_ewById(_backup);

Button btn_backup_ok =

(Button)backup_ewById(_backuup_ok);

(());

for(int i=0;i<=();i++) {

}

le("还原完成!gress(i);

一共还原了 "+ (()-preNum) + " 条记录");

22

btn_backup_ibility(E);

btn_backup_lickListener(new OnClickListener() {

});

@Override

public void onClick(View v) {

}

s();

s();

pter(adapter);

})

}

.setNeutralButton("取消", new

kListener() {

@Override

public void onClick(DialogInterface dialog,

int which) {

"找不到备份文件",

}

}).create().show();

} else {

xt(text(),

_LONG).show();

})

.create();

et_enter_file_name =

}

}

(EditText)ewById(_enter_file_name);

et_enter_file_t("comm_data");

et_enter_file_tFocus();

et_enter_file_All();

();

adapter = new SimpleAdapter(

,

list,

em,

23

new String[]{"imageid","name","mobilephone"},

new

int[]{_image,_name,_mobilephone});

}

pter(adapter);//显示所有数据

s();

break;

3.3删除所选功能

长按联系人选项,会选中联系人,然后可以删除所选择的联系人,这个功能对于想删除多个联系人得时候比较方便,其如图5-5所示:

关键代码:

public boolean onKeyDown(int keyCode, KeyEvent event) {

if(keyCode == E_MENU) {

loadBottomMenu();

if(ibility() == E) {

if(searchLinearout != null && ibility()

E) {

ibility();

}

ibility();

} else {

ibility(E);

}

}

return own(keyCode, event);

}

private void loadBottomMenu() {

if(bottomMenuGrid == null) {

bottomMenuGrid = (GridView) findViewById(_buttom_menu);

kgroundResource(lgallery_bg);

Columns(5);

vity();

ticalSpacing(10);

izontalSpacing(10);

pter(getMenuAdapter(bottom_menu_itemName,

24

==

bottom_menu_itemSource));

temClickListener(new OnItemClickListener() {

public void onItemClick(AdapterView arg0, View arg1, int arg2,

long arg3) {

switch (arg2) {

case 0: {

if(searchLinearout != null &&

ibility()==E) {

ibility();

}

if(ibility() == E) {

ibility();

}

Intent intent = new Intent(,);

startActivityForResult(intent, 3);

break;

}

case 1:

loadSearchLinearout();

if(ibility()==E) {

ibility();

} else {

ibility(E);

et_tFocus();

et_All();

}

break;

case 2:

if(searchLinearout != null &&

ibility()==E) {

ibility();

}

if(deleteId == null || () == 0) {

xt(, " 没有标记任何记录n长按一条记录即可标记", _LONG).show();

} else {

new r()

.setTitle("确定要删除标记的"+()+"条记录吗?")

.setPositiveButton("确定", new

kListener() {

@Override

25

public void onClick(DialogInterface dialog, int which)

{

DBHelper helper = new DBHelper();

Marked(deleteId);

list = User(privacy);

adapter =

new SimpleAdapter(

,

list,

em,

new

String[]{"imageid","name","mobilephone"},

new

int[]{_image,_name,_mobilephone});

pter(adapter);

();

}

})

.setNegativeButton("取消", null)

.create()

.show() ;

}

break;

case 3:

if(searchLinearout != null &&

ibility()==E) {

ibility();

}

loadMainMenuDialog();

();

break;

case 4:

finish();

break;

}

}

});

}

}

26

4结论

通过这次课程设计,我对Android程序设计有了新的认识,自己还有很多方面不足,但同时也弄懂了许多基础理论。在这个循序渐进的过程中,解决了一些自己的认为比较难的地方后我又继续朝前行进着, 我相信在下面的过程中我会越做越顺的。

课程设计终于在我的努力下做完了。这个时候我更加深入的了解了Java的特点以及一些相关知识。 与其临渊羡鱼,不如退而结网。这次Android课程设计给我的最大的印象就是如果自己有了兴趣,就动手去做,在你的勇气和毅力下,困难是抬不了头的。如果你连失败都不怕了,那你还怕什么,拾起懒惰的心,勤奋就会走向成功。这次的课程设计在我未来的时日里,是一个标杆,因为它告诉了我,只要我努力没有什么事我做不好的。

参考文献

[1] 杨丰盛著.Android应用开发揭秘.北京:机械工业出版社,2011

[2] 百度文库中的关于Android应用平台与程序开发。

27


本文标签: 联系人 删除 信息