Android移动平台的客户关系管理系统Word格式文档下载.docx
《Android移动平台的客户关系管理系统Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《Android移动平台的客户关系管理系统Word格式文档下载.docx(39页珍藏版)》请在冰豆网上搜索。
1.3.5客户信息添加业务流程
图5
添加功能是在这个列表页面点击“添加”菜单进入的,页面跳转到客户信息添加页面,在这个添加页面中我们可以输入“客户名称”、“联系人”、“电话”、“E-mail”、“传真”和“地址”信息,输入完成后点击“确定”按钮,可以将客户信息插入到数据库中,返回到列表页面,并将查询的结果显示在列表页面。
如果点击“取消”按钮返回到列表页面。
1.3.6客户信息删除用例图
图6
1.3.7客户信息删除业务流程
图7
删除功能是在这个列表页面中,选择XX客户信息长按事件,弹出一个“修改”和“删除”操作选择对话框。
选择“删除”选项,删除数据库中的客户信息,返回列表页面并进行查询。
1.3.8客户信息修改用例图
图8
1.3.9客户信息修改业务流程
图9
修改功能是在这个列表页面中,选择XX客户信息长按事件,弹出一个“修改”和“删除”操作选择对话框。
选择“修改”选项,修改数据库中的客户信息,返回列表页面并进行查询。
1.3.10客户信息查看用例图
图10
1.3.11客户信息查看业务流程
图11
阅读功能是在这个列表页面中,选择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.4.13客户信息修改类图
图22
修改页面Activity(CRMModActivity)需要继承,并重写onCreate。
1.4.14客户信息删除UI——删除页面示意图
同客户信息查询UI部分列表页面。
1.4.15客户信息删除UI——删除页面项目说明
1.4.16客户信息删除UI——操作选择对话框示意图
图23
1.4.17客户信息删除UI——操作选择对话框项目说明
1.4.18客户信息删除类图
同客户信息查询类图。
1.4.19客户信息查看UI——查看页面示意图
1.4.20客户信息查看UI——查看页面项目说明
1.4.21客户信息查看UI——查看对话框示意图
图24
1.4.22客户信息查看UI——查看对话框项目说明
title客户名称,setView部分客户信息的内容,“关闭”按钮。
1.4.23客户信息查看类图
1.5数据库设计
我们的系统采用SQLite嵌入式数据库,在这个数据库中只有一个表——Client表。
图25
数据库名称
完成日期
版本
设计者
审核者
表名
Client
实体名称
客户
主键
_id
索引表名称和
索引字段名称
序号
项目名称
项目说明
类型(宽度)
位数
属性
备注
1
编号
integer
P、N
2
clientname
客户名称
varchar
200
N
3
linkman
联系人
100
4
phone
电话
5
email
电子邮箱
6
address
地址
:
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"
>
manifestxmlns:
android="
package="
android:
versionCode="
1"
versionName="
<
applicationandroid:
icon="
@drawable/icon"
label="
@string/app_name"
<
providerandroid:
name="
.DataProvider"
authorities="
/provider>
activityandroid:
.CRMListActivity"
<
intent-filter>
<
actionandroid:
/>
categoryandroid:
/intent-filter>
/activity>
.CRMAddActivity"
.CRMModActivity"
/application>
uses-sdkandroid:
minSdkVersion="
3"
/manifest>
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(200)"
(TAG,());
());
}catch(Exceptione){
}}
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方法
publicCursorquery(Uriuri,String[]projection,Stringselection,
String[]selectionArgs,StringsortOrder){
return,newString[]{
,
},selection,selectionArgs,null,
null,+"
asc"
在DataProvider类中修改(update)方法,参数为uri、修改值、where条件和where参数。
实例化dbhepler类中的getWritableDatabase方法,调用SQLiteOpenHelper类中的update方法,参数为表名、要修改值、where条件。
代码清单7文件中update方法
publicintupdate(Uriuri,ContentValuesvalues,Stringselection,
String[]selectionArgs){
Stringrowid=().get
(1);
StringwhereClause=
+"
+rowid
+((!
(selection)?
"
AND("
+selection+"
)"
:
));
return,values,whereClause,null);
1.6.4客户信息查询——布局文件
查询页面布局采用XML形式,文件放置在\res\layout\中。
页面中要声明一个ListView控件,采用LinearLayout布局方式,可以自动适应屏幕大小的变化。
代码清单8布局文件
LinearLayoutandroid:
id="
@+id/widget28"
layout_width="
fill_parent"
layout_height="
orientation="
vertical"
xmlns:
ListViewandroid:
@+id/listview"
android:
wrap_content"
/ListView>
/LinearLayout>
1.6.5客户信息查询——无条件查询方法
无条件查询方法是在初始化页面时候调用的,是通过CRMListActivity在onCreate方法中调用findAll实现的,在Android中的Activity中我们可以通过getContentResolver()方法获得ContentResolver对象,这个对象是可以通过Android框架调用到ContentProvider对象——DataProvider对象。
为了能够为ListView提供数据我们还要使用S