• 基于Android Studio+Android SDK的手机通讯录管理软件设计


    目录
    目录 2
    摘 要 I
    第一章 绪论 2
    1.1项目研究背景 2
    1.2项目研究的目的及意义 2
    1.3系统主要实现内容 2
    第二章 系统分析 3
    2.1系统可行性分析 3
    2.1.1技术可行性 3
    2.1.2经济可行性 3
    2.1.3操作可行性 3
    2.2Android通讯录的使用意义 4
    第三章 系统概要设计 4
    3.1系统总体设计 4
    3.2处理流程设计 5
    3.2.1业务流程图 5
    3.2.2数据增加流程图 5
    3.2.3数据修改流程图 5
    3.2.4数据删除流程 6
    3.3 数据库设计 7
    3.3.1 SQLite数据库简介 7
    3.3.3 数据库表结构 7
    第四章 系统详细设计 7
    4.1联系人浏览模块 7
    4.2查看联系人模块 9
    4.3编辑联系人模块 10
    4.4查找联系人模块 11
    4.5修改密码 11
    4.6分类管理 12
    总 结 13
    1.3系统主要实现内容
    通过对Android技术的相关研究,了解Android源码实现原理以及过程,从而设计出一款能够使用的手机通讯录。
    这款手机通讯录实现的相关内容如下:
    简洁、实用的操作界面
    联系人的增删改查
    分类的增删改查
    呼叫联系人
    登录、注册、修改密码
    群组的增删改查
    导入导出联系人
    支持模糊查询手机通讯录

    第二章 系统分析
    2.1系统可行性分析
    2.1.1技术可行性
    Java 应用编程接口为Java应用提供了一个独立于操作系统的标准接口,可分为基本部分和扩展部分。在硬件或操作系统平台上安装一个Java平台之后,Java 应用程序就可运行。现在Java平台已经嵌入了几乎所有的操作系统。这样Java程序可以只编译一次,就可以在各种系统中运行。
    本软件用的是Java开发语言,在Android Studio集成开发环境下,调试容易。当前的计算机硬件配置或则现有安卓手机的硬件配置也完全能满足开发的需求,因此技术上是绝独可行的。
    2.1.2经济可行性
    开发该系统所需的相关资料可以通过已存在的相关系统进行调查采集,所需的软件系统、硬件平台等都易于获得,本文转载自http://www.biyezuopin.vip/onews.asp?id=15301且不需要Android平台机器,用模拟器即可实现开发研究,开发成本低,容易实现,从经济角度来看,该系统可行。
    2.1.3操作可行性
    不管是安卓平台的手机,还是计算机,其成本的下降,导致计算机,安卓手机购买成本的降低.这套系统是利用自己的计算机,且使用安卓模拟器,使开发出来的系统有友好的用户界面、操作简单,因此在操作上是可行的。
    2.2Android通讯录的使用意义
    该系统针对的主要用户是Android手机用户。Android手机通信管理系统包括以下主要内容:联系人增删改查、呼叫联系人、分类增删改查、多条件搜索、导入导出联系人、修改密码等功能。要设计一个良好的手机通讯录,就必须首先明确该应用环境对系统的要求。

    package com.chengxiaoxiao.com.contractmanager.activity;
    
    import android.app.Activity;
    import android.app.AlertDialog;
    import android.content.DialogInterface;
    import android.content.Intent;
    import android.net.Uri;
    import android.os.Bundle;
    import android.text.Editable;
    import android.text.TextWatcher;
    import android.view.KeyEvent;
    import android.view.MenuItem;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.AdapterView;
    import android.widget.BaseAdapter;
    import android.widget.EditText;
    import android.widget.LinearLayout;
    import android.widget.ListView;
    import android.widget.PopupMenu;
    import android.widget.TextView;
    
    import com.chengxiaoxiao.com.contractmanager.R;
    import com.chengxiaoxiao.com.contractmanager.dao.ContractDao;
    import com.chengxiaoxiao.com.contractmanager.domain.Contract;
    import com.chengxiaoxiao.com.contractmanager.utls.ToastUtils;
    
    import java.util.List;
    
    public class MainActivity extends Activity
    {
        private EditText editSearch;
        private ListView listContract;
        private LinearLayout lineCata;
    
        private List list;
    
        @Override
        protected void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            editSearch = (EditText) findViewById(R.id.editSearch);
            listContract = (ListView) findViewById(R.id.listView);
            lineCata = (LinearLayout) findViewById(R.id.lineCata);
    
    
            //我的群组打开
            lineCata.setOnClickListener(new View.OnClickListener()
            {
                @Override
                public void onClick(View v)
                {
                    startActivity(new Intent(MainActivity.this, CatalogActivity.class));
                }
            });
    
            editSearch.addTextChangedListener(new TextWatcher()
            {
                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after)
                {
                }
    
                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count)
                {
                }
    
                @Override
                public void afterTextChanged(Editable s)
                {
                    list = ContractDao.getContract(editSearch.getText().toString(), MainActivity.this);
                    listContract.setAdapter(new MyAdapter());
    
                }
            });
    
    
            //设置listview
            list = ContractDao.get(MainActivity.this);
    
            listContract.setOnItemClickListener(new AdapterView.OnItemClickListener()
            {
                @Override
                public void onItemClick(AdapterView parent, View view, int position, long id)
                {
    
                    Intent intent = new Intent(MainActivity.this, ShowActivity.class);
                    intent.putExtra("id", list.get(position).getId());
                    startActivity(intent);
    
    
                }
            });
    
            listContract.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener()
            {
                @Override
                public boolean onItemLongClick(AdapterView parent, View view, final int position, long id)
                {
                    PopupMenu popupMenu = new PopupMenu(MainActivity.this, view);
                    popupMenu.getMenuInflater().inflate(R.menu.main, popupMenu.getMenu());
    
                    popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener()
                    {
                        @Override
                        public boolean onMenuItemClick(MenuItem item)
                        {
    
    
                            switch (item.getItemId())
                            {
                                case R.id.action_open:
                                    //打电话
    
                                    String number = list.get(position).getPhoneNum();
    
                                    Intent intent = new Intent(Intent.ACTION_DIAL);
                                    Uri data = Uri.parse("tel:" + number);
                                    intent.setData(data);
    
                                    startActivity(intent);
                                    break;
                                case R.id.action_edit:
                                    Intent intent1 = new Intent(MainActivity.this, EditActivity.class);
                                    intent1.putExtra("id", list.get(position).getId());
                                    startActivity(intent1);
                                    break;
                                case R.id.action_del:
                                    //删除
    
                                    AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                                    builder.setTitle("重要操作");
                                    builder.setMessage("确定要删除吗?");
                                    builder.setNegativeButton("取消", null);
                                    builder.setPositiveButton("确定", new DialogInterface.OnClickListener()
                                    {
                                        @Override
                                        public void onClick(DialogInterface dialog, int which)
                                        {
                                            int id = list.get(position).getId();
                                            ContractDao.delete(id, MainActivity.this);
                                            ToastUtils.makeText(MainActivity.this, "删除成功");
    
                                            //设置listview
                                            list = ContractDao.get(MainActivity.this);
                                            listContract.setAdapter(new MyAdapter());
    
                                        }
                                    });
    
    
                                    builder.show();
    
    
                                    break;
                                case R.id.action_send:
                                    //发送到桌面
                                    break;
                            }
    
    
                            return false;
                        }
                    });
    
    
                    popupMenu.show();
    
    
                    return true;
                }
            });
    
            listContract.setAdapter(new MyAdapter());
    
    
        }
    
        @Override
        protected void onRestart()
        {
            super.onRestart();
    
    
            //设置listview
            list = ContractDao.get(MainActivity.this);
            listContract.setAdapter(new MyAdapter());
    
    
        }
    
        /*
            *
            * 联系人的Adapter
            *
            * */
        class MyAdapter extends BaseAdapter
        {
    
            @Override
            public int getCount()
            {
                return list.size();
            }
    
            @Override
            public Object getItem(int position)
            {
                return list.get(position);
            }
    
            @Override
            public long getItemId(int position)
            {
                return position;
            }
    
            @Override
            public View getView(int position, View convertView, ViewGroup parent)
            {
                View v;
                if (convertView == null)
                {
                    v = View.inflate(MainActivity.this, R.layout.list_item_contract, null);
                } else
                {
                    v = convertView;
                }
    
                TextView textName = (TextView) v.findViewById(R.id.textName);
                TextView textDepart = (TextView) v.findViewById(R.id.textDepart);
                TextView textNumber = (TextView) v.findViewById(R.id.textNumber);
    
                Contract contract = list.get(position);
                textName.setText(contract.getName());
                textDepart.setText(contract.getDepartment());
                textNumber.setText(contract.getPhoneNum());
    
                return v;
            }
        }
    
    
        @Override
        public boolean onKeyDown(int keyCode, KeyEvent event)
        {
            if(keyCode ==KeyEvent.KEYCODE_MENU)
            {
                startActivity(new Intent(MainActivity.this,SettingActivity.class));
    
                return true;
            }
            return super.onKeyDown(keyCode, event);
        }
    
        /*
            * 添加
            * */
        public void addContract(View v)
        {
    
            startActivity(new Intent(MainActivity.this, AddActivity.class));
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
    • 170
    • 171
    • 172
    • 173
    • 174
    • 175
    • 176
    • 177
    • 178
    • 179
    • 180
    • 181
    • 182
    • 183
    • 184
    • 185
    • 186
    • 187
    • 188
    • 189
    • 190
    • 191
    • 192
    • 193
    • 194
    • 195
    • 196
    • 197
    • 198
    • 199
    • 200
    • 201
    • 202
    • 203
    • 204
    • 205
    • 206
    • 207
    • 208
    • 209
    • 210
    • 211
    • 212
    • 213
    • 214
    • 215
    • 216
    • 217
    • 218
    • 219
    • 220
    • 221
    • 222
    • 223
    • 224
    • 225
    • 226
    • 227
    • 228
    • 229
    • 230
    • 231
    • 232
    • 233
    • 234
    • 235
    • 236
    • 237
    • 238
    • 239
    • 240
    • 241
    • 242
    • 243
    • 244
    • 245
    • 246
    • 247
    • 248
    • 249
    • 250
    • 251
    • 252
    • 253
    • 254
    • 255
    • 256
    • 257
    • 258
    • 259
    • 260
    • 261
    • 262
    • 263
    • 264
    • 265
    • 266
    • 267
    • 268

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    开发 dApp 的三个步骤
    【lwip】06-网络接口层分析
    Servlet工作原理
    北京十大律师事务所排名前十名(8月最新发布)
    python枚举类定义和使用
    vxe-table 将表格指定行设置颜色后,选中行、悬浮行样式失效解决。
    移动跨平台技术方案浅析
    KingbaseES例程之拥有大量索引的表导入数据
    java链表(含案例代码展示)
    CAN通信波特率计算
  • 原文地址:https://blog.csdn.net/sheziqiong/article/details/126702584