Android移动平台的客户关系管理系统.docx
《Android移动平台的客户关系管理系统.docx》由会员分享,可在线阅读,更多相关《Android移动平台的客户关系管理系统.docx(39页珍藏版)》请在冰豆网上搜索。
Android移动平台的客户关系管理系统
Android实训项目教程
第1章基于Android移动平台的客户关系管理系统
本章重点
&Android布局
&Activity与Activity之间的跳转
&ListView控件和CursorAdapter使用
&Android对话框
&SQLite数据库
&ContentProvider使用
1.1实训目的
通过这个项目的学习,使学员掌握Android平台中的ListView、Activity、Activity的跳转、Button、TextView、EditView、Adatper和Dialog等有关UI技术,熟悉嵌入式数据库SQLite、以及Android的数据持久化技术SQLiteOpenHelper和ContentProvider等技术,并能掌握adb等Android调试工具的使用。
此外,通过完成一个完整的项目使学员了解软件开发周期过程、UML常用元素的含义,更能够增强学员的团队合作精神,培养学员的沟通能力,学会自我管理。
1.2项目任务概述
1.2.1项目背景
随着移动设备处理能力的增强,用户手机中存放客户信息已是可能,3G版CRM(客户关系管理)能够在手机中存放客户信息,使用方便,节省时间,保密性强,携带方便。
我们可以在任何时间地点查找客户信息,做到随时掌握客户信息。
1.2.2项目任务
本项目实现在Android移动设备上管理客户信息。
由于是移动设备,所以使用起来方便快捷,可以随时随地的查找客户,查看相应的客户信息,也可以随时随地的添加客户信息,并对客户信息进行修改。
客户信息存放在手机内的SQLite嵌入式数据库内。
1.3需求分析
用户可以使用该系统实现客户信息的查询,增加,修改和删除,客户信息查看。
1.3.1总体用例图
图1
1.3.2客户信息查询用例图
图2
1.3.3客户信息查询业务流程
图3
用户通过点击桌面CRM图标进入客户关系管理系统,进入系统需要查询所有客户信息列表。
查询功能是在这个列表页面点击“查询”菜单进入的,弹出条件输入对话框,在这个对话框中我们可以输入“客户名称”、“联系人”和“电话”进行查询,这三个条件都是进行的模糊查询,并且是“与”关系。
点击对话框“确定”则进行查询,并将查询的结果显示在列表页面,如果没有符合条件的数据则显示原来书籍列表信息。
点击对话框“取消”则不进行查询,并保留原来的客户信息在列表页面中。
1.3.4客户信息添加用例图
图4
1.3.5客户信息添加业务流程
图5
用户通过点击桌面CRM图标进入客户关系管理系统,进入系统需要查询所有客户信息列表。
添加功能是在这个列表页面点击“添加”菜单进入的,页面跳转到客户信息添加页面,在这个添加页面中我们可以输入“客户名称”、“联系人”、“电话”、“E-mail”、“传真”和“地址”信息,输入完成后点击“确定”按钮,可以将客户信息插入到数据库中,返回到列表页面,并将查询的结果显示在列表页面。
如果点击“取消”按钮返回到列表页面。
1.3.6客户信息删除用例图
图6
1.3.7客户信息删除业务流程
图7
用户通过点击桌面CRM图标进入客户关系管理系统,进入系统需要查询所有客户信息列表。
删除功能是在这个列表页面中,选择XX客户信息长按事件,弹出一个“修改”和“删除”操作选择对话框。
选择“删除”选项,删除数据库中的客户信息,返回列表页面并进行查询。
1.3.8客户信息修改用例图
图8
1.3.9客户信息修改业务流程
图9
用户通过点击桌面CRM图标进入客户关系管理系统,进入系统需要查询所有客户信息列表。
修改功能是在这个列表页面中,选择XX客户信息长按事件,弹出一个“修改”和“删除”操作选择对话框。
选择“修改”选项,修改数据库中的客户信息,返回列表页面并进行查询。
1.3.10客户信息查看用例图
图10
1.3.11客户信息查看业务流程
图11
用户通过点击桌面CRM图标进入客户关系管理系统,进入系统需要查询所有客户信息列表。
阅读功能是在这个列表页面中,选择XX客户信息短按事件,弹出一个客户信息查看对话框。
点击“关闭”按钮关闭对话框,返回列表页面。
1.4系统设计
1.4.1客户信息查询UI——列表页面示意图
图12图13
1.4.2客户信息查询UI——列表页面项目说明
1.ListView控件:
每个ListView项中包含三个TextView控件,即“客户名称”、“联系人”和“电话”,“客户名称”控件字体大小20dip、“联系人”控件字体大小15dip和“电话”控件字体大小15dip。
2.Menu控件:
有两个菜单项,即“查询”和“添加”。
1.4.3客户信息查询UI——查询对话框示意图
图14
1.4.4客户信息查询UI——查询对话框项目说明
1.Dailog控件:
用户点击“查询”菜单则弹出“查询”对话框,包括:
“客户名称”TextView、“客户名称”EditView、“联系人”TextView、“联系人”EditView控件、“电话”TextView、“电话”EditView控件,“确定”按钮和“取消”按钮。
1.4.5客户信息查询类图
图15
列表页面Activity(CRMListActivity)需要继承,并重写onCreate、onCreateOptionsMenu和onOptionsItemSelected。
ØonCreate方法是列表页面的初始化方法,在这个方法中我们要初始化页面中用到的ListView等控件信息。
ØonCreateOptionsMenu方法是列表页面中初始化菜单信息。
ØonOptionsItemSelected方法是列表页面中处理菜单点击事件。
ØfindAll方法是查询所有客户信息方法,该方法为私有方法。
ØfindByInfo方法是按照条件查询符合条件有客户信息方法,参数是clientname(客户名称)、linkman(联系人)和phone(电话)都是String类型,该方法为私有方法。
图16
图的类图反映的是数据持久化部分的类图,事实上这部分类在客户信息删除、修改和添加等模块也都使用,在其它模块介绍中就不再介绍这些类了。
DBHelper类是数据库帮助类继承SQLiteOpenHelper类,在这个类中我们可以创建数据库中的表,当数据库版本变化的时候,可以删除旧版本的表再建立新版本的表。
ØDBHelper方法是一个构造方法。
ØonCreate方法是数据库的初始化方法,在这个方法中我们要初始化数据库中用到的表。
ØonUpgrade方法是数据库的更新方法,在这个方法中我们要比较数据库版本是否变化,如果数据库版本变化了则删除数据库中的表,再重建表。
DataProvider类是数据库操作类继承ContentProvider,在这个类中我们可以对数据库中的表实现CRUD(增加、查询、更新和删除)操作。
ØonCreate方法是数据库操作类的初始化方法,在这个方法中我们要DBHelper类,以备在CRUD操作中使用。
ØgetType返回ContentProvider的数据类型。
Øinsert插入数据方法。
Ødelete删除数据方法。
Øquery查询数据方法。
Øupdate更新数据方法。
1.4.6客户信息添加UI——添加页面示意图
图17图18
1.4.7客户信息添加UI——添加页面项目说明
1.“客户名称”TextView控件,默认字体大小。
2.“客户名称”EditView控件,默认字体大小。
3.“联系人”TextView控件,默认字体大小和样式。
4.“联系人”EditView控件,默认字体大小和样式。
5.“电话”TextView控件,默认字体大小和样式。
6.“电话”EditView控件,默认字体大小和样式。
7.“E-mail”TextView控件,默认字体大小。
8.“E-mail”EditView控件,默认字体大小。
9.“地址”TextView控件,默认字体大小和样式。
10.“地址”EditView控件,默认字体大小和样式。
11.“确定”按钮,默认字体大小和样式。
12.“取消”按钮,默认字体大小和样式。
1.4.8客户信息添加类图
图19
添加页面Activity(CRMAddActivity)需要继承,并重写onCreate。
ØonCreate方法是添加页面的初始化方法,在这个方法中我们要初始化页面中用到的TextView、Button和EditView等控件信息。
1.4.9客户信息修改UI——操作选择对话框示意图
图20
1.4.10客户信息修改UI——操作选择对话框项目说明
Dailog控件:
用户长按XX客户信息项,弹出“操作选择”对话框,包括:
“修改客户信息”和“删除客户信息”选择项。
1.4.11客户信息修改UI——修改页面示意图
图21
1.4.12客户信息修改UI——修改页面项目说明
1.“客户名称”TextView控件,默认字体大小。
2.“客户名称”EditView控件,默认字体大小。
3.“联系人”TextView控件,默认字体大小和样式。
4.“联系人”EditView控件,默认字体大小和样式。
5.“电话”TextView控件,默认字体大小和样式。
6.“电话”EditView控件,默认字体大小和样式。
7.“E-mail”TextView控件,默认字体大小。
8.“E-mail”EditView控件,默认字体大小。
9.“地址”TextView控件,默认字体大小和样式。
10.“地址”EditView控件,默认字体大小和样式。
11.“确定”按钮,默认字体大小和样式。
12.“取消”按钮,默认字体大小和样式。
1.4.13客户信息修改类图
图22
修改页面Activity(CRMModActivity)需要继承,并重写onCreate。
ØonCreate方法是添加页面的初始化方法,在这个方法中我们要初始化页面中用到的TextView、Button和EditView等控件信息。
1.4.14客户信息删除UI——删除页面示意图
同客户信息查询UI部分列表页面。
1.4.15客户信息删除UI——删除页面项目说明
同客户信息查询UI部分列表页面。
1.4.16客户信息删除UI——操作选择对话框示意图
图23
1.4.17客户信息删除UI——操作选择对话框项目说明
Dailog控件:
用户长按XX客户信息项,弹出“操作选择”对话框,包括:
“修改客户信息”和“删除客户信息”选择项。
1.4.18客户信息删除类图
同客户信息查询类图。
1.4.19客户信息查看UI——查看页面示意图
同客户信息查询UI部分列表页面。
1.4.20客户信息查看UI——查看页面项目说明
同客户信息查询UI部分列表页面。
1.4.21客户信息查看UI——查看对话框示意图
图24
1.4.22客户信息查看UI——查看对话框项目说明
Dailog控件:
title客户名称,setView部分客户信息的内容,“关闭”按钮。
1.4.23客户信息查看类图
同客户信息查询类图。
1.5数据库设计
我们的系统采用SQLite嵌入式数据库,在这个数据库中只有一个表——Client表。
图25
数据库名称
完成日期
版本
设计者
审核者
表名
Client
实体名称
客户
主键
_id
索引表名称和
索引字段名称
序号
项目名称
项目说明
类型(宽度)
位数
属性
备注
1
_id
编号
integer
P、N
2
clientname
客户名称
varchar
200
N
3
linkman
联系人
varchar
100
N
4
phone
电话
varchar
100
N
5
email
电子邮箱
varchar
200
N
6
address
地址
varchar
200
:
U:
唯一(Unique)P:
主键(Primary)N:
非空(NotNull)
F:
外键(Foreign)D:
默认(Default)I:
自增长(autoincrement)
1.6系统实现代码解析
1.6.1系统配置文件——
是系统中的配置文件,我们需要将系统中用到的Android组件全都在这个文件中注册,其中CRMListActivity是启动屏幕显示的Activity。
DataProvider是我们系统中ContentProvider组件,用于实现数据持久化的操作。
代码清单1
xmlversion=""encoding="utf-8"?
>
android=""
package=""android:
versionCode="1"android:
versionName="">
icon="@drawable/icon"android:
label="@string/app_name">
name=".DataProvider"android:
authorities="">
name=".CRMListActivity"android:
label="@string/app_name">
name=""/>
name=""/>
name=".CRMAddActivity"android:
label="@string/app_name"/>
name=".CRMModActivity"android:
label="@string/app_name"/>
minSdkVersion="3"/>
1.6.2系统常量定义
作为良好的编程习惯,我们应该把系统中用到的常量都定义到一个接口文件中。
代码清单2
publicinterfaceSysConst{
publicstaticfinalStringDATABASE_NAME="";
publicstaticfinalStringTABLE_NAME="client";
publicstaticfinalStringTABLE_FIELD_ID="_id";
publicstaticfinalStringTABLE_FIELD_CLIENTNAME="clientname";
publicstaticfinalStringTABLE_FIELD_LINKMAN="linkman";
publicstaticfinalStringTABLE_FIELD_PHONE="phone";
publicstaticfinalStringTABLE_FIELD_EMAIL="email";
publicstaticfinalStringTABLE_FIELD_ADDRESS="address";
publicstaticfinalStringAUTHORITY="";
publicstaticfinalUriCONTENT_URI=(""+AUTHORITY
+"/"+TABLE_NAME);
}
1.6.3数据持久化部分代码
持久化部分的代码包括:
数据库帮助类DBHelper和数据操作类DataProvider。
DBHelper类:
编写一个DBHelper类,此类继承SQLiteOpenHelper。
在此类中我们重写父类中的onCreate方法和onUpgrade方法,同时创建数据库。
onCreate方法中创建表,在onUpgrade方法中删除表,并重新调用onCreate方法,当数据库版本号发生改变时就调用该方法。
代码清单3
ublicclassDBHelperextendsSQLiteOpenHelper{
publicDBHelper(Contextcontext){
super(context,,null,4);
}
@Override
publicvoidonCreate(SQLiteDatabasedb){
try{
StringBuffersql=newStringBuffer();
("CREATETABLE");
;
("(");
;
("INTEGERPRIMARYKEYautoincrement,");
;
("varchar(200),");
;
("varchar(100),");
;
("varchar(100),");
;
("varchar(200),");
;
("varchar(200)");
(");");
(TAG,());
());
}catch(Exceptione){
(TAG,());
}}
@Override
publicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){
("DROPTABLEIFEXISTS"+;
onCreate(db);
}
}
DataProvider类:
编写一个DataProvider类,此类继承ContentProvider。
在此类插入(insert)方法,参数为uri和values。
实例化dbhepler类中的getWritableDatabase方法,调用SQLiteOpenHelper类中的insert方法,参数为表名、要插入的值。
如果返回值大于零则插入成功,失败则抛出异常。
代码清单4文件中insert方法
@Override
publicUriinsert(Uriuri,ContentValuesvalues){
SQLiteDatabasedb=();
longrowId=,null,values);
if(rowId>0){
代码清单5文件中delete方法
et
(1);
StringwhereClause=+"="+rowid;
return,whereClause,null);
}
在DataProvider类中查询(query)方法,参数为uri、字段名称集合、where条件、where参数和查询出结果的排序情况。
实例化dbhepler类中的getWritableDatabase方法,调用SQLiteOpenHelper类中的query方法,参数为表名、字段名称数组、where条件、where参数数组和查询结果的排序情况。
代码清单6文件中query方法
@Override
publicCursorquery(Uriuri,String[]projection,Stringselection,
String[]selectionArgs,StringsortOrder){
SQLiteDatabasedb=();
return,newString[]{
,
,
,
},selection,selectionArgs,null,
null,+"asc");
}
在DataProvider类中修改(update)方法,参数为uri、修改值、where条件和where参数。
实例化dbhepler类中的getWritableDatabase方法,调用SQLiteOpenHelper类中的update方法,参数为表名、要修改值、where条件。
代码清单7文件中update方法
@Override
publicintupdate(Uriuri,ContentValuesvalues,Stringselection,
String[]selectionArgs){
SQLiteDatabasedb=();
Stringrowid=().get
(1);
StringwhereClause=
+"="
+rowid
+((!
(selection)?
"AND("+selection+")"
:
""));
return,values,whereClause,null);
}
1.6.4客户信息查询——布局文件
查询页面布局采用XML形式,文件放置在\res\layout\中。
页面中要声明一个ListView控件,采用LinearLayout布局方式,可以自动适应屏幕大小的变化。
代码清单8布局文件
xmlversion=""encoding="utf-8"?
>
id="@+id/widget28"
android:
layout_width="fill_parent"android:
layout_height="fill_parent"
android:
orientation="vertical"xmlns:
android="">
id="@+id/listview"android:
layout_width="fill_parent"
android:
layout_height="wrap_content">
1.6.5客户信息查询——无条件查询方法
无条件查询方法是在初始化页面时候调用的,是通过CRMListActivity在onCreate方法中调用findAll实现的,在Android中的Activity中我们可以通过getContentResolver()方法获得ContentResolver对象,这个对象是可以通过Android框架调用到ContentProvider对象——DataProvider对象。
为了能够为ListView提供数据我们还要使用S