613352322毕业设计(论文)基于android平台下通讯录的设计与开发.doc
实习设计说明书题目: 基于Android平台通讯录的开发与设计系 名 计算机科学与工程系 专 业 计算机科学与技术 年 级 08级 1班 姓 名 指导教师 第一章 引言1.1 编写目的本文旨在将该项目做具体分析,介绍选题目的,概括说明该系统的运行,详细介绍项目情况,并且将该项目做一整体说明。1.2 背景随着android技术的出现,越来越多的手机开发商采用android操作系统,于是android通讯录的开发也变的必不可少。1.3 目标本次项目的开发旨在通过android技术实现手机通讯录的基本功能,方便手机用户对联系人的管理。第二章 系统功能分析该系统需要实现以下基本功能,下面分别对一些主要功能模块进行介绍。2.1新用户的添加功能 对于新的联系人,手机用户可以添加新联系人的头像,姓名,手机号码,办公室电话,家庭电话,职务职称,单位名称,地址,邮政编码,Email,其他联系方式,备注这些信息。2.2查找联系人 可以输入联系人名字或者手机来查找联系人的信息,方便用户快速找到联系人,查询结果显示在当前页。2.3.删除联系人 通过长点击来删除要删除的联系人。2.4 修改联系人。 可以根据需要修改联系人的所有信息。2.5.菜单功能 菜单功能里包括显示所有,删除所有,备份数据,还原数据,更新和后退。 显示所有是把当前通讯录里所有的联系人都显示出来;删除所有是快速删除所有好友;备份数据是将要备份的联系人信息备份到其他文件夹以防彻底丢失联系人信息;还原数据可以将备份数据以覆盖,添加方式还原到通讯录。2.6 系统需求分析第三章 系统概要设计系统设计阶段的主要任务是将需求分析阶段所总结出来的反映了用户需求的系统逻辑模型转换成可以实施的物理模型,主要解决如何去做的问题。3.1系统功能结构设计根据需求分析结果,通讯录有如下功能。 3.2数据库逻辑结构设计表3.2-1 联系人信息表 表3.2-2 查询信息表第四章 系统详细设计与实现本系统实现了手机通讯录对联系人的增删改查,以及备份,还原,隐私保护等功能,下面就此做详细介绍。4.1.1 添加新的联系人。用户可以添加新联系人的头像,用户名,头像,姓名,手机号码,办公室电话,家庭电话,职务职称,单位名称,地址,邮政编码,Email,其他联系方式,备注这些信息。其中联系人的头像可进行如下选择。添加成功后,主页如图显示联系人。 点击设置按钮,出现下图五个按钮功能。 4.1.2 查找联系人。4.1.3 删除联系人。 如果没有长点击删除,则如下图: 删除时会出现删除对话框,询问用户是否删除,点击确定就会删除联系人。 4.1.4 修改联系人。 点击通讯录中的一个联系人,点击修改才可修改联系人的所有信息。4.1.5 菜单功能 点击菜单,则出现如下操作:点击删除所有,如下图: 点击备份,出现如下对话框: 备份成功,则显示如下对话框: 点击还原按钮,则显示如下对话框: 点击更新,如下图: 确定后,则显示下图:点击确定后,则进入秘密仓库,如下图: 4.1.6 其他功能(打电话,发短信,发邮件) 其中打电话还可以在多个号码中选择要拨打的电话,如下图: 4.2详细代码实现如下:数据库代码:package com.gaomeiyun.contact.db;import java.io.BufferedReader;import java.io.File;import java.io.FileOutputStream;import java.io.FileReader;import java.io.IOException;import java.util.ArrayList;import java.util.HashMap;import com.gaomeiyun.contact.entity.User;import android.content.ContentValues;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;import android.os.Environment;public class DBHelper public static final String DB_DBNAME="contact"public static final String DB_TABLENAME="user"public static final int VERSION = 4;public static SQLiteDatabase dbInstance; private MyDBHelper myDBHelper;private StringBuffer tableCreate;private Context context;public DBHelper(Context context) this.context = context;public void openDatabase() if(dbInstance = null) myDBHelper = new MyDBHelper(context,DB_DBNAME,VERSION);dbInstance = myDBHelper.getWritableDatabase();/* * 往数据库里面的user表插入一条数据,若失败返回-1 * param user * return 失败返回-1 */public long insert(User user) ContentValues values = new ContentValues();values.put("name", user.username);values.put("mobilephone", user.mobilePhone);values.put("officephone", user.officePhone);values.put("familyphone", user.familyPhone);values.put("address", user.address);values.put("othercontact", user.otherContact);values.put("email",user.email);values.put("position", user.position);values.put("company", pany);values.put("zipcode", user.zipCode);values.put("remark", user.remark);values.put("imageid", user.imageId);values.put("privacy", user.privacy);return dbInstance.insert(DB_TABLENAME, null, values);/* * 获得数据库中所有的用户,将每一个用户放到一个map中去,然后再将map放到list里面去返回 * param privacy * return list */public ArrayList getAllUser(boolean privacy) ArrayList list = new ArrayList();Cursor cursor = null;if(privacy) cursor = dbInstance.query(DB_TABLENAME, new String"_id","name","mobilephone","officephone","familyphone","address","othercontact","email","position","company","zipcode","remark","imageid", "privacy=1", null, null, null, null); else cursor = dbInstance.query(DB_TABLENAME, new String"_id","name","mobilephone","officephone","familyphone","address","othercontact","email","position","company","zipcode","remark","imageid", "privacy=0",null, null, null, null); while(cursor.moveToNext() HashMap item = new HashMap();item.put("_id", cursor.getInt(cursor.getColumnIndex("_id");item.put("name", cursor.getString(cursor.getColumnIndex("name");item.put("mobilephone", cursor.getString(cursor.getColumnIndex("mobilephone");item.put("officephone", cursor.getString(cursor.getColumnIndex("officephone");item.put("familyphone", cursor.getString(cursor.getColumnIndex("familyphone");item.put("address", cursor.getString(cursor.getColumnIndex("address");item.put("othercontact", cursor.getString(cursor.getColumnIndex("othercontact");item.put("email", cursor.getString(cursor.getColumnIndex("email");item.put("position", cursor.getString(cursor.getColumnIndex("position");item.put("company", cursor.getString(cursor.getColumnIndex("company");item.put("zipcode", cursor.getString(cursor.getColumnIndex("zipcode");item.put("remark", cursor.getString(cursor.getColumnIndex("remark");item.put("imageid", cursor.getInt(cursor.getColumnIndex("imageid");list.add(item);return list;public void modify(User user) ContentValues values = new ContentValues();values.put("name", user.username);values.put("mobilephone", user.mobilePhone);values.put("officephone", user.officePhone);values.put("familyphone", user.familyPhone);values.put("address", user.address);values.put("othercontact", user.otherContact);values.put("email",user.email);values.put("position", user.position);values.put("company", pany);values.put("zipcode", user.zipCode);values.put("remark", user.remark);values.put("imageid", user.imageId);dbInstance.update(DB_TABLENAME, values, "_id=?", new StringString.valueOf(user._id);public void delete(int _id) dbInstance.delete(DB_TABLENAME, "_id=?", new StringString.valueOf(_id);public void deleteAll(int privacy) dbInstance.delete(DB_TABLENAME, "privacy=?", new StringString.valueOf(privacy);public int getTotalCount() Cursor cursor = dbInstance.query(DB_TABLENAME, new String"count(*)", null, null, null, null, null);cursor.moveToNext();return cursor.getInt(0);public ArrayList getUsers(String condition, boolean privacy) ArrayList list = new ArrayList();String strSelection = ""if(privacy) strSelection = "and privacy = 1" else strSelection = "and privacy = 0"String sql = "select * from " + DB_TABLENAME + " where 1=1 and (name like '%" + condition + "%' " +"or mobilephone like '%" + condition + "%' or familyphone like '%" + condition + "%' " +"or officephone like '%" + condition + "%')" + strSelection;Cursor cursor = dbInstance.rawQuery(sql, null);while(cursor.moveToNext() HashMap item = new HashMap();item.put("_id", cursor.getInt(cursor.getColumnIndex("_id");item.put("name", cursor.getString(cursor.getColumnIndex("name");item.put("mobilephone", cursor.getString(cursor.getColumnIndex("mobilephone");item.put("officephone", cursor.getString(cursor.getColumnIndex("officephone");item.put("familyphone", cursor.getString(cursor.getColumnIndex("familyphone");item.put("address", cursor.getString(cursor.getColumnIndex("address");item.put("othercontact", cursor.getString(cursor.getColumnIndex("othercontact");item.put("email", cursor.getString(cursor.getColumnIndex("email");item.put("position", cursor.getString(cursor.getColumnIndex("position");item.put("company", cursor.getString(cursor.getColumnIndex("company");item.put("zipcode", cursor.getString(cursor.getColumnIndex("zipcode");item.put("remark", cursor.getString(cursor.getColumnIndex("remark");item.put("imageid", cursor.getInt(cursor.getColumnIndex("imageid");list.add(item);return list;public void deleteMarked(ArrayList<Integer> deleteId) StringBuffer strDeleteId = new StringBuffer();strDeleteId.append("_id=");for(int i=0;i<deleteId.size();i+) if(i!=deleteId.size()-1) strDeleteId.append(deleteId.get(i) + " or _id="); else strDeleteId.append(deleteId.get(i);dbInstance.delete(DB_TABLENAME, strDeleteId.toString(), null);System.out.println(strDeleteId.toString();public void backupData(boolean privacy) StringBuffer sqlBackup = new StringBuffer();Cursor cursor = null;if(privacy) cursor = dbInstance.query(DB_TABLENAME, new String"_id","name","mobilephone","officephone","familyphone","address","othercontact","email","position","company","zipcode","remark","imageid,privacy", "privacy=1", null, null, null, null); else cursor = dbInstance.query(DB_TABLENAME, new String"_id","name","mobilephone","officephone","familyphone","address","othercontact","email","position","company","zipcode","remark","imageid,privacy", "privacy=0",null, null, null, null); while(cursor.moveToNext() sqlBackup.append("insert into " + DB_TABLENAME + "(name,mobilephone,officephone,familyphone,address,othercontact,email,position,company,zipcode,remark,imageid,privacy)").append(" values ('").append(cursor.getString(cursor.getColumnIndex("name").append("','").append(cursor.getString(cursor.getColumnIndex("mobilephone").append("','").append(cursor.getString(cursor.getColumnIndex("officephone").append("','").append(cursor.getString(cursor.getColumnIndex("familyphone").append("','").append(cursor.getString(cursor.getColumnIndex("address").append("','").append(cursor.getString(cursor.getColumnIndex("othercontact").append("','").append(cursor.getString(cursor.getColumnIndex("email").append("','").append(cursor.getString(cursor.getColumnIndex("position").append("','").append(cursor.getString(cursor.getColumnIndex("company").append("','").append(cursor.getString(cursor.getColumnIndex("zipcode").append("','").append(cursor.getString(cursor.getColumnIndex("remark").append("',").append(cursor.getInt(cursor.getColumnIndex("imageid").append(",").append(cursor.getInt(cursor.getColumnIndex("privacy").append(");").append("n");saveDataToFile(sqlBackup.toString(),privacy);private void saveDataToFile(String strData,boolean privacy) String fileName = ""if(privacy) fileName = "priv_data.bk" else fileName = "comm_data.bk"try String SDPATH = Environment.getExternalStorageDirectory() + "/"File fileParentPath = new File(SDPATH + "zpContactData/");fileParentPath.mkdirs();File file = new File(SDPATH + "zpContactData/" + fileName);System.out.println("the file previous path = " + file.getAbsolutePath();file.createNewFile();System.out.println("the file next path = " + file.getAbsolutePath();FileOutputStream fos = new FileOutputStream(file);fos.write(strData.getBytes();fos.flush(); catch (IOException e) e.printStackTrace();public void restoreData(String fileName) try String SDPATH = Environment.getExternalStorageDirectory() + "/"File file = null;if(fileName.endsWith(".bk") file = new File(SDPATH + "zpContactData/"+ fileName); else file = new File(SDPATH + "zpContactData/"+ fileName + ".bk");BufferedReader br = new BufferedReader(new FileReader(file);String str = ""while(str=br.readLine()!=null) System.out.println(str);dbInstance.execSQL(str); catch(Exception e) e.printStackTrace();public boolean findFile(String fileName) String SDPATH = Environment.getExternalStorageDirectory() + "/"File file = null;if(fileName.endsWith(".bk") file = new File(SDPATH + "zpContact/"+fileName); else file = new File(SDPATH + "zpContact/"+fileName + ".bk");if(file.exists() return true; else return false;class MyDBHelper extends SQLiteOpenHelper public MyDBHelper(Context context, String name,int version) super(context, name, null, version);Overridepublic void onCreate(SQLiteDatabase db) tableCreate = new StringBuffer();tableCreate.append("create table ") .append(DB_TABLENAME) .append(" (") .append("_id integer primary key autoincrement,") .append("name text,") .append("mobilephone text,") .append("officephone text,") .append("familyphone text,") .append("address text,") .append("othercontact text,") .append("email text,") .append("position text,") .append("company text,") .append("zipcode text,") .append("remark text,") .append("imageid int,") .append("privacy int ") .append(")");System.out.println(tableCreate.toString();db.execSQL(tableCreate.toString();Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) String sql = "drop table if exists " + DB_TABLENAME;db.execSQL(sql);myDBHelper.onCreate(db);用户信息:package com.gaomeiyun.contact.entity;import java.io.Serializable;public class User implements Serializable public int _id;public String username;public String mobilePhone;public String officePhone;public String familyPhone;public String position;public String company;public String address;public String zipCode;public String email;public String otherContact;public String remark;public int imageId;public int privacy;/1代表隐私用户 0代表普通用户添加新用户:package com.gaomeiyun.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.Ad