基于Android的手机通讯录设计

发布时间:2025-12-10 11:47:21 浏览次数:10

目 录

1.系统描述 1
1.1 问题描述 1
1.2 功能描述 1
1.3 数据需求 2
1.4 设计意义 2
2.背景介绍 2
2.1 Android系统概述 2
2.2 Android开发组件 4
2.2.1 Activity组件 4
2.2.2 Service 组件 7
2.2.3 BroadcastReceiver 组件 8
2.2.4 Content Provider 组件 8
2.3 Android数据库 9
2.3.1 SQLite数据库 9
2.3.2 SQLite数据库特点 10
3.可行性研究 11
3.1 技术可行性 11
3.2 经济可行性 11
3.3 操作可行性 11
4.需求分析 12
4.1 前期调研 12
4.2 数据流图 12
4.3 数据字典 13
5.系统设计 14
5.1 总体设计 14
5.2 数据库表结构 14
5.2.1 实体 14
5.2.2 系统E-R图 15
5.2.3 数据库表设计 15
5.3 输入/输出设计 16
5.4 处理过程设计 17
5.4.1 业务流程图 17
5.4.2 系统Activity设计 18
5.4.3 功能处理设计 19
5.4.4 系统界面设计 23
6.详细设计 28
6.1 开发环境 28
6.2 程序设计 29
6.2.1 数据类设计 29
6.2.2 Main(Activity)设计 32
6.2.3 AddNew(Activity)设计 33
6.2.4 UserDetail(Activity)设计 34
6.2.5 MainPrivacy(Activity)设计 35
7.系统测试 36
7.1 程序调试 36
7.2 系统的测试 36
7.2.1 测试的意义及目的 36
7.2.2 测试步骤 36
7.2.3 测试的主要内容 37
7.3 测试数据 38
7.3.1 添加模块测试 38
7.3.2 查看编辑模块测试 39
7.3.3 查询模块测试 41
7.3.4 删除模块测试 43
7.3.5 备份与还原模块测试 46
8设计总结 48
8.1 设计特点 48
8.2 经验与收获 49
本科生课程设计成绩评定表 51
4.需求分析
4.1 前期调研
通过对已有的手机通讯录的研究,对其基本业务流程进行分析,确定出基本的处理需求:
用户的行为:增、删、改、查、备份与还原。
增:增加联系人的基本信息;
删:删除已有联系人的基本信息;
改:修改已有联系人的信息;
查:查询联系人的基本信息;
备份与还原:备份该通讯录数据库中的数据到SD卡上,或者从SD卡上还原备份的数据。
4.2 数据流图
根据“功能分解,逐步求精”的原则,此次需求分析的数据流图主要分为三层:顶层数据流图:确定系统的输入与输出、第一层数据流图:对系统进行第一层功能分解,确定系统的主要工作、第二层数据流图:确定系统详细的工作流图
顶层数据流图:

底层数据流图:

4.3 数据字典
数据流图表达了数据和处理的关系,数据字典则是系统中的各类数据描述的集合,是进行详细的数据手机和数据分析做得到的主要成果,可以自己设计一套适合阅读的图表。
本设计的数据字典有:联系人的信息,具体如下:

5.系统设计
5.1 总体设计
Android手机通讯管理软件主要功能模块包括:联系人添加、联系人查看、联系人编辑、联系人删除、联系人查找、呼叫、发送短信、数据备份与还原、个人空间等,如图5-1所示:

图5-1 总体设计图

package com.luting.contact;import android.app.Activity;import android.app.AlertDialog;import android.content.Context;import android.content.DialogInterface;import android.content.Intent;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.view.View.OnClickListener;import android.view.animation.AnimationUtils;import android.widget.AdapterView;import android.widget.BaseAdapter;import android.widget.Button;import android.widget.EditText;import android.widget.Gallery;import android.widget.ImageButton;import android.widget.ImageSwitcher;import android.widget.ImageView;import android.widget.Toast;import android.widget.AdapterView.OnItemSelectedListener;import android.widget.ImageView.ScaleType;import android.widget.ViewSwitcher.ViewFactory;import com.luting.contact.db.DBHelper;import com.luting.contact.entity.User;import com.luting.contact.R;public class AddNew extends Activity implements ViewFactory {EditText et_name;EditText et_mobilePhone;EditText et_officePhone;EditText et_familyPhone;EditText et_position;EditText et_company;EditText et_address;EditText et_zipCode;EditText et_otherContact;EditText et_email;EditText et_remark;Button btn_save;Button btn_return;int privacy;//用于判断添加的用户是不是保密的ImageButton imageButton;//头像按钮View imageChooseView;//图像选择的视图AlertDialog imageChooseDialog;//头像选择对话框Gallery gallery;//头像的GalleryImageSwitcher is;//头像的ImageSwitcherint currentImagePosition;//用于记录当前选中图像在图像数组中的位置int previousImagePosition;//用于记录上一次图片的位置boolean imageChanged;//判断头像有没有变化/*** 所有的图像图片*/private int[] images = {R.drawable.image1,R.drawable.image2,R.drawable.image3,R.drawable.image4,R.drawable.image5,R.drawable.image6,R.drawable.image7,R.drawable.image8,R.drawable.image9,R.drawable.image10,R.drawable.image11,R.drawable.image12,R.drawable.image13,R.drawable.image14,R.drawable.image15,R.drawable.image16,R.drawable.image17,R.drawable.image18,R.drawable.image19,R.drawable.image20,R.drawable.image21,R.drawable.image22,R.drawable.image23,R.drawable.image24,R.drawable.image25,R.drawable.image26,R.drawable.image27,R.drawable.image28,R.drawable.image29,R.drawable.image30,/*R.drawable.bane,R.drawable.bat,R.drawable.bb,R.drawable.bl,R.drawable.bm,R.drawable.br,R.drawable.bs,R.drawable.bt,R.drawable.chen,R.drawable.ck,R.drawable.coco,R.drawable.cw,R.drawable.df,R.drawable.dk,R.drawable.doom,R.drawable.dp,R.drawable.dr,R.drawable.ds,R.drawable.eh,R.drawable.en,R.drawable.fv,R.drawable.fw,R.drawable.ga,R.drawable.goblin,R.drawable.huskar,R.drawable.jugg,R.drawable.kael,R.drawable.kotl,R.drawable.lich,R.drawable.lina,R.drawable.lion,R.drawable.loa,R.drawable.luna,R.drawable.mag,R.drawable.magic,R.drawable.med,R.drawable.meepo,R.drawable.mk,R.drawable.mor,R.drawable.na,R.drawable.naga,R.drawable.naix,R.drawable.nec,R.drawable.ns,R.drawable.nw,R.drawable.od,R.drawable.ok,R.drawable.om,R.drawable.pa,R.drawable.panda,R.drawable.pl,R.drawable.pom,R.drawable.puck,R.drawable.pugna,R.drawable.qop,R.drawable.razor,R.drawable.sa,R.drawable.sb,R.drawable.sf,R.drawable.sg,R.drawable.sk,R.drawable.sniper,R.drawable.snk,R.drawable.spe,R.drawable.spe,R.drawable.ss,R.drawable.st,R.drawable.sven,R.drawable.ta,R.drawable.tc,R.drawable.tf,R.drawable.th,R.drawable.thd,R.drawable.tiny,R.drawable.tp,R.drawable.troll,R.drawable.ts,R.drawable.ud,R.drawable.ursa,R.drawable.veno,R.drawable.vip,R.drawable.visage,R.drawable.vs,R.drawable.wd,R.drawable.wl,R.drawable.wr,*/};protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.addnew);Intent intent = getIntent();//先确定好保密类型if(intent.getExtras()!=null && intent.getExtras().getInt("privacy") == 1) {privacy = 1;} else {privacy = 0;}et_name = (EditText)findViewById(R.id.username);et_mobilePhone = (EditText)findViewById(R.id.mobilephone);et_officePhone = (EditText)findViewById(R.id.officephone);et_familyPhone = (EditText)findViewById(R.id.familyphone);et_position = (EditText)findViewById(R.id.position);et_company = (EditText)findViewById(R.id.company);et_address = (EditText)findViewById(R.id.address);et_zipCode = (EditText)findViewById(R.id.zipcode);et_otherContact = (EditText)findViewById(R.id.othercontact);et_email = (EditText)findViewById(R.id.email);et_remark = (EditText)findViewById(R.id.remark);btn_save = (Button)findViewById(R.id.save);btn_return = (Button)findViewById(R.id.btn_return);imageButton = (ImageButton)findViewById(R.id.image_button); /*** 响应点击事件*/btn_save.setOnClickListener(new OnClickListener(){public void onClick(View v) {//判断姓名是否为空String name = et_name.getText().toString();if(name.trim().equals("")) {Toast.makeText(AddNew.this, "姓名不许为空!", Toast.LENGTH_LONG).show();return;}//从表单上获取数据User user = new User();user.username = name;user.address = et_address.getText().toString();user.company = et_company.getText().toString();user.email = et_email.getText().toString();user.familyPhone = et_familyPhone.getText().toString();user.mobilePhone = et_mobilePhone.getText().toString();user.officePhone = et_officePhone.getText().toString();user.otherContact = et_otherContact.getText().toString();user.position = et_position.getText().toString();user.remark = et_remark.getText().toString();user.zipCode = et_zipCode.getText().toString();//判断头像是否改变,若改变,则用当前的位置,若没有改变,则用前一回的位置if(imageChanged) {user.imageId = images[currentImagePosition%images.length];} else {user.imageId = images[previousImagePosition%images.length];}user.privacy = privacy;//创建数据库帮助类DBHelper helper = new DBHelper(AddNew.this);//打开数据库helper.openDatabase();//把user存储到数据库里long result = helper.insert(user);//通过结果来判断是否插入成功,若为1,则表示插入数据失败if(result == -1 ) {Toast.makeText(AddNew.this, "添加失败!", Toast.LENGTH_LONG);}setTitle("联系人添加成功!");//返回到上一个Activity,也就是Main.activitysetResult(3);//销毁当前视图finish();}});btn_return.setOnClickListener(new OnClickListener(){public void onClick(View v) {finish();}});imageButton.setOnClickListener(new OnClickListener(){public void onClick(View v) {loadImage();//为gallery装载图片initImageChooseDialog();//初始化imageChooseDialogimageChooseDialog.show();}});}public void loadImage() {if(imageChooseView == null) {LayoutInflater li = LayoutInflater.from(AddNew.this);imageChooseView = li.inflate(R.layout.imageswitch, null);//通过渲染xml文件,得到一个视图(View),再拿到这个View里面的Gallerygallery = (Gallery)imageChooseView.findViewById(R.id.gallery);//为Gallery装载图片gallery.setAdapter(new ImageAdapter(this));gallery.setSelection(images.length/2);is = (ImageSwitcher)imageChooseView.findViewById(R.id.imageswitch);is.setFactory(this);is.setInAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_in));//卸载图片的动画效果is.setOutAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_out));gallery.setOnItemSelectedListener(new OnItemSelectedListener(){public void onItemSelected(AdapterView<?> arg0, View arg1,int arg2, long arg3) {//当前的头像位置为选中的位置currentImagePosition = arg2;//为ImageSwitcher设置图像is.setImageResource(images[arg2 % images.length]);}public void onNothingSelected(AdapterView<?> arg0) {}});}}/*** 自定义Gallery的适配器* @author Administrator**/class ImageAdapter extends BaseAdapter {private Context context;public ImageAdapter(Context context) {this.context = context;}public int getCount() {return Integer.MAX_VALUE;}public Object getItem(int position) {return position;}public long getItemId(int position) {return position;}/*** gallery从这个方法中拿到image*/public View getView(int position, View convertView, ViewGroup parent) {ImageView iv = new ImageView(context);iv.setImageResource(images[position%images.length]);iv.setAdjustViewBounds(true);iv.setLayoutParams(new Gallery.LayoutParams(80,80));iv.setPadding(15, 10, 15, 10);return iv;}}public View makeView() {ImageView view = new ImageView(this);view.setBackgroundColor(0xff000000);view.setScaleType(ScaleType.FIT_CENTER);view.setLayoutParams(new ImageSwitcher.LayoutParams(90,90));return view;}public void initImageChooseDialog() {if(imageChooseDialog == null) {AlertDialog.Builder builder = new AlertDialog.Builder(this);builder.setTitle("请选择图像:").setView(imageChooseView).setPositiveButton("确定", new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int which) {imageChanged = true;previousImagePosition = currentImagePosition;imageButton.setImageResource(images[currentImagePosition%images.length]);}}).setNegativeButton("取消", new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int which) {currentImagePosition = previousImagePosition;}});imageChooseDialog = builder.create();}}/*** 当退出的时候,回收资源*/protected void onDestroy() {if(is != null) {is = null;}if(gallery != null) {gallery = null;}if(imageChooseDialog != null) {imageChooseDialog = null;}if(imageChooseView != null) {imageChooseView = null;}if(imageButton != null) {imageButton = null;}super.onDestroy();}}




























需要做网站?需要网络推广?欢迎咨询客户经理 13272073477