题 目 基于Android的云通讯录
系 别 信息与控制工程系
专 业 计算机科学与技术
班 级 1701
学 号 173230101
姓 名 丁海洋
指导教师 郭丹
目录
基于android的云通讯录系统设计与实现 3
1.1 系统需求分析 3
1.1.1 用例分析 3
1. 用例名称:登录 3
2. 用例名称:注册 4
3. 用例名称:添加 4
4. 用例名称:查询 4
5. 用例名称:搜索 4
6. 用例名称:修改 4
7. 用例名称:删除 4
1.1.2 数据逻辑模型 4
1.2 系统总体设计 5
1.3 系统数据库设计 5
1.4 系统详细设计 5
1.5 系统实现 8
添加模块 9
查询模块 11
修改模块 12
删除模块 14
搜索模块 16
1.6 系统测试 17
(1) 号码输入错误测试 17
(2) 删除数据测试 18
(3)按名称搜索测试 18
2.1技术说明 19
2.2清单文件 19
2.3总结 20
基于android的云通讯录系统设计与实现
1.1 系统需求分析
当今时代,计算机已经成为人们生活中不可或缺的一部分,它打破了地域时间限制,改变了人们的工作和生活方式。人们之间的联系越来越便捷,这就使得要经常与很多人保持着联系,而单纯依靠人脑已经很难记住所有人的联系方式还有其各做附加信息。云通讯录能方便用户的需求,满足用户迅速、准确的查找修改或者删除联系人信息,把各个联系人信息以文件保存。此系统的主要管理的信息由:联系人的姓名、性别、电话号码、地址、邮箱、QQ号码,要求能实现通讯录管理系统中的增加信息,删除信息,显示通讯里的所有信息,按名字查询信息,保存通讯录,退出系统。
1.1.1 用例分析
- 用例名称:登录
用例描述:用于用户登录
- 用例名称:注册
用例描述:用于用户注册
- 用例名称:添加
用例描述:用于用户添加联系人
- 用例名称:查询
用例描述:用于用户查询所有联系人
- 用例名称:搜索
用例描述:用于用户搜索特定联系人
- 用例名称:修改
用例描述:用于用户修改联系人信息
- 用例名称:删除
用例描述:用于用户删除联系人信息
1.1.2 数据逻辑模型
1.2 系统总体设计
本云通讯录具有五个功能:搜索、查询、添加、修改、删除。
搜索:对已录入的联系人进行按名称进行精确查找。
查询:对已录入的联系人进行所有查询。
添加:添加联系人的姓名、号码、地址、其他信息。
修改:对以录入的联系人的姓名、号码、地址、其他信息进行修改。
删除:对以录入的联系人信息进行整体的删除。
1.3 系统数据库设计
根据前面E-R图设计出实现系统功能所需要的数据库表的结构,并以表格的形式列出每一个数据库表的表结构,即字段名、类型、长度、小数位数、是否主键、索引、是否允许为空、说明等。并介绍表与表之间的逻辑关系。如表3.1所示:
表1.3数据库表结构
字段名 |
数据类型 |
长度 |
主键 |
索引 |
外键 |
可空 |
说明 |
_qq |
Varchar |
20 |
否 |
否 |
否 |
QQ帐号 |
|
_name |
Char |
8 |
是 |
否 |
否 |
姓名 |
|
_number |
Varchar |
11 |
否 |
否 |
否 |
号码 |
|
_mail |
Varchar |
20 |
否 |
否 |
否 |
邮箱 |
|
_dizhi |
Char |
20 |
否 |
否 |
否 |
地址 |
1.4 系统详细设计
界面实现:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="@drawable/android">
<TableLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<TableRow
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="60dp"
android:textSize="30sp"
android:text=" 云通讯录"
/>
</TableRow>
<TableRow
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_marginLeft="50dp"
android:textSize="24sp"
android:text="添加联系人"
android:id="@+id/addMember"
/>
</TableRow>
<TableRow
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:textSize="24sp"
android:layout_marginLeft="50dp"
android:text="查看所有看联系人"
android:id="@+id/queryAllMember"
/>
</TableRow>
<TableRow
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:textSize="24sp"
android:layout_marginLeft="50dp"
android:text="搜索联系人"
android:id="@+id/queryMember"
/>
</TableRow>
<TableRow
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:textSize="24sp"
android:layout_marginLeft="50dp"
android:text="修改联系人"
android:id="@+id/modifyMember"
/>
</TableRow>
<TableRow
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:textSize="24sp"
android:layout_marginLeft="50dp"
android:text="删除联系人"
android:id="@+id/deleteMember"
/>
</TableRow>
</TableLayout>
</LinearLayout>
1.5 系统实现
管理模块
管理模块一个有五个主要的功能:搜索、查询、添加、修改、删除某个联系人所有信息。
添加模块
点击添加按钮,服务器进入一个添加界面,在填写完想要添加的一个联系人的信息后,之后点击添加按钮,访问数据库并输出此联系人所对应的个人信息。
public void onClick(View v) {
nam= name.getText().toString().trim();
addre=address.getText().toString().trim();
phonum=phonenum.getText().toString().trim();
qqnu=qqnum.getText().toString().trim();
emai=email.getText().toString().trim();
// TODO Auto-generated method stub
ContentValues members=new ContentValues();
if(nam.length()>0){
members.put("name",nam);
}
else{
Toast.makeText(AddMember.this, "名字不能为空!", Toast.LENGTH_LONG).show();
flag=false;
}
if(radioMale.isChecked()){
members.put("sex", "男");
}
else{
members.put("sex", "女");
}
members.put("address", addre);
if(phonum.length()>0){
if(isPhoneNumberValid(phonum)){
members.put("phonenum", phonum);
}
else{
Toast.makeText(AddMember.this, "电话号码格式不正确!"+"\n"+"例如:1234-12345678:123-1234-1234", Toast.LENGTH_LONG).show();
flag=false;
}}
else{
Toast.makeText(AddMember.this, "电话号码不能为空!", Toast.LENGTH_LONG).show();
flag=false;
}
if(qqnu.length()>0){
if(!isNum(qqnu)){
Toast.makeText(AddMember.this, "QQ格式不正确!", Toast.LENGTH_LONG).show();
flag=false;
}
}
members.put("qqnum", qqnu);
if(emai.length()>0){
if(!isEmail(emai)){
Toast.makeText(AddMember.this, "Email格式不正确!", Toast.LENGTH_LONG).show();
flag=false;
}
}
members.put("email",emai);
if(flag){
DBHelper dbhelper=new DBHelper(getApplicationContext());
dbhelper.insert(members);
Toast.makeText(AddMember.this, "保存成功!", Toast.LENGTH_LONG).show();
finish();
Intent intent=new Intent(AddMember.this,ContactsActivity.class);
startActivity(intent);}
}
});
查询模块
点击查询按钮,服务器进入一个查询界面,服务器会将在界面显示所有联系人。
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.showmember);
name=(EditText) findViewById(R.id.name);
radioMale=(RadioButton) findViewById(R.id.radioMale);
radioFemale=(RadioButton) findViewById(R.id.radioFemale);
address=(EditText) findViewById(R.id.address);
phonenum=(EditText) findViewById(R.id.phonenum);
qqnum=(EditText) findViewById(R.id.qqnum);
email=(EditText) findViewById(R.id.email);
Intent intent=getIntent();
Bundle data=intent.getExtras();
List<Map<String, String>> list = (List<Map<String, String>>)data.getSerializable("data");
name.setText(list.get(0).get("name"));
String sexs=list.get(0).get("sex");
修改模块
点击修改按钮,服务器进入一个修改界面,点击想要修改的联系人,修改联系人信息,之后点击修改按钮,服务器会将数据插入到数据库中,如果插入成功会在界面显示修改成功!
public void onClick(View arg0) {
// TODO Auto-generated method stub
nam= name.getText().toString().trim();
addre=address.getText().toString().trim();
phonum=phonenum.getText().toString().trim();
qqnu=qqnum.getText().toString().trim();
emai=email.getText().toString().trim();
DBHelper dbhelper=new DBHelper(getApplicationContext());
ContentValues members=new ContentValues();String whereClause;String[] whereArgs={id};
whereClause="_id=?";
if(nam.length()>0){
members.put("name",nam);
}
else{
Toast.makeText(AfterModifyMember.this, "名字不能为空!", Toast.LENGTH_LONG).show();
flag=false;
}
if(radioMale.isChecked()){
members.put("sex", "男");
}
else{
members.put("sex", "女");
}
members.put("address", addre);
if(phonum.length()>0){
if(isPhoneNumberValid(phonum)){
members.put("phonenum", phonum);
}
else{
Toast.makeText(AfterModifyMember.this, "电话号码格式不正确!"+"\n"+"例如:1234-12345678:123-1234-1234", Toast.LENGTH_LONG).show();
flag=false;
}}
else{
Toast.makeText(AfterModifyMember.this, "电话号码不能为空!", Toast.LENGTH_LONG).show();
flag=false;
}
if(qqnu.length()>0){
if(!isNum(qqnu)){
Toast.makeText(AfterModifyMember.this, "QQ格式不正确!", Toast.LENGTH_LONG).show();
flag=false;
}
}
members.put("qqnum", qqnu);
if(emai.length()>0){
if(!isEmail(emai)){
Toast.makeText(AfterModifyMember.this, "Email格式不正确!", Toast.LENGTH_LONG).show();
flag=false;
}
}
members.put("email",emai);
if(flag){
dbhelper.update(members, whereClause, whereArgs);
Toast.makeText(AfterModifyMember.this, "修改成功!", Toast.LENGTH_LONG).show();
finish();
Intent intent=new Intent(AfterModifyMember.this,ContactsActivity.class);
startActivity(intent);}
}
});
删除模块
点击删除按钮,服务器进入一个删除界面,点击想要删除的联系人信息之后点击删除按钮,服务器会将数据从数据库中删除。
public void onItemClick(AdapterView<?> arg0, View view,
int position, long arg3) {
HashMap<String,String> map=(HashMap<String,String>)listView.getItemAtPosition(position);
id=map.get("id");
String name=map.get("name");
String sexs=map.get("sex");
String address=map.get("address");
String phonenum=map.get("phonenum");
String qqnum=map.get("qqnum");
String emails=map.get("email");
String message="";
message="姓名:"+name+","+"性别:"+sexs+"\n"+"地址:"+address+"\n"+"电话:"+phonenum+","+"\n"+""+"QQ:"+qqnum+","+"\n"+"Email:"+emails;
// TODO Auto-generated method stub
new AlertDialog.Builder(DeleteMember.this)
.setTitle("确认删除")
.setMessage(message)
.setPositiveButton("是", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
DBHelper dbHelper=new DBHelper(DeleteMember.this);
dbHelper.delete(Integer.parseInt(id));
Toast.makeText(DeleteMember.this, "删除成功!",Toast.LENGTH_LONG).show();
finish();
Intent intent=new Intent(DeleteMember.this,DeleteMember.class);
startActivity(intent);
//listView.postInvalidate();
}
})
.setNegativeButton("否",null)
.show();
}
});
搜索模块
点击搜索按钮,服务器会按照姓名在数据库中进行查找,点击后,想要搜索的联系人会弹出点击姓名可查看联系人信息。
public class DBHelper extends SQLiteOpenHelper{
private static final String DBName="contacts.db";
private static final String TALNmae="member";
private static final String CreateTAL="create table member(_id integer primary key autoincrement,name varchar(50),sex varchar(2),address varchar(200),phonenum varchar(200),qqnum varchar(20),email varchar(50))";
private SQLiteDatabase db;
public DBHelper(Context context) {
super(context, DBName, null, 1);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
this.db=db;
db.execSQL(CreateTAL);
}
public void insert(ContentValues contentvalues){
db=getWritableDatabase();
db.insert(TALNmae, null, contentvalues);
db.close();
}
public Cursor query(){
db=getReadableDatabase();
Cursor cursor=db.query(TALNmae, null, null, null, null, null, null);
return cursor;
1.6 系统测试
(1)号码输入错误测试
(2)删除数据测试
(3)按名称搜索测试
2.1技术说明
主要使用技术 |
使用地方 |
ListView |
联系人列表 |
SQLite数据库 |
联系人信息 |
Activity组件的应用 |
主要界面 |
拨号权限 |
拨打电话 |
2.2清单文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="contacts.contacts"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="7" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".ContactsActivity"
android:icon="@drawable/icon"
android:label="@string/app_name" >
</activity>
<activity android:name=".AddMember"></activity>
<activity android:name=".queryMember"></activity>
<activity android:name=".ShowMember"></activity>
<activity android:name=".QueryAllMember"></activity>
<activity android:name=".DeleteMember"></activity>
<activity android:name=".ModifyMember"></activity>
<activity android:name=".AfterModifyMember"></activity>
<activity android:name=".regist"></activity>
<activity android:name=".home">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-permission android:name="android.permission.CALL_PHONE"></uses-permission>
</manifest>
2.3总结
通过这一阶段的学习,我对这个通讯录管理系统有了一定的了解。我的项目设计主要是面向云通讯录,首先我们做的是通讯录的登录界面,其次还有添加信息、修改信息、修改、注册等界面。在课程设计中,程序设计主要的是采用Android,数据的存储采用连接数据库的方式.程序设计后通过运行调试,基本上可以实现解决通讯管理问题.在项目实施的过程中,首先对项目进行了整体规划。然后进行完成项目规划,然后进行整合。在老师的细心教导和积极指导下,首先是将所有的界面做好,然后就是开始编写代码。在整个项目实施过程中。积极处理各种在项目中遇到的问题,自己解决不了的就寻求帮助,整个项目完成。
原文地址:https://www.cnblogs.com/DOCEAN/p/11993239.html