Android应用程序开发

 

目录

1.           基于android的简易备忘录的设计与实现... 2

1.1系统需求分析... 2

1.1.1用例分析... 2

1.1.2数据逻辑模型... 4

1.2系统设计... 4

1.2.1主界面功能模块... 4

1.2.2笔记/待办的添加模块... 5

1.2.3备忘录的修改模块... 6

1.2.4备忘录的删除模块... 7

1.3系统数据库设计... 8

1.4系统实现... 9

1.4.1主界面功能的实现... 9

1.4.2添加功能的实现... 16

1.4.3修改功能的实现... 17

1.4.4删除功能的实现... 18

切换布局的实现... 20

1.5系统测试... 22

2课设总结... 23

2.1课设体会... 23

附件... 24

1. 基于android的简易备忘录的设计与实现

1.1系统需求分析

随着Android系统在市场上的强大爆发,在智能手机领域已经成为用户量最多的操作系统。Android智能手机也正在成为人们日常获取信息的主要设备,尤其在“学生一族”和青年群体中表现最为突出,并且通过Android智能手机,他们可以便捷的获取各种所需信息。因此,基于Android的智能手机的便捷服务类应用会有一个很好的发展机会和发展空间,手机随身备忘录就是它们中的一员。 在该系统下的备忘录软件中,可以为用户提供非常方便的备忘事件查询的功能,为快节奏的生活提供高效率的保障。另外,由于Android平台是开放的,平台使用成本基本可以忽略不计,所以能够很好的控制软件的成本,为此类备忘录的普及做出贡献。

1.1.1用例分析

    (1)    用例名称:增加笔记                                                                                                                 

执行者是用户

说明:增加一个笔记

先决条件是App的用户

请求结果是增加一个笔记

使用频率高

    (2)    用例名称:修改笔记

执行者是用户

说明:对一个笔记的信息进行修改

先决条件是App的用户

请求结果是一个笔记的信息被修改

使用频率低

    (3)    用例名称:查询笔记

执行者是用户

说明:查询所有笔记

先决条件是App的用户

请求结果是返回所有笔记

使用频率高

    (4)    用例名称:删除笔记

执行者是系统的用户

说明:删除选中的笔记

先决条件是App的用户

请求结果是删除成功

使用频率高

    (5)    用例名称:增加待办(待完成的事情)

执行者是用户

说明:增加一个待办

先决条件是App的用户

请求结果是增加一个待办

使用频率高

    (6)    用例名称:修改待办

执行者是用户

说明:对一个待办的信息进行修改

先决条件是App的用户

请求结果是一个待办的信息被修改

使用频率低

    (7)    用例名称:查询待办

执行者是用户

说明:查询所有待办

先决条件是App的用户

请求结果是返回所有待办

使用频率高

    (8)    用例名称:删除待办

执行者是App的用户

说明:删除选中的待办

先决条件是系统的用户

请求结果是删除成功

使用频率高

1.1.2数据逻辑模型

 

1.2系统设计

1.2.1主界面功能模块

分为两个功能模块,笔记总览功能模块与待办总览功能模块。用户在点击进入程序以后,进入主界面默认看到的是笔记总览模块,然后点击待办按钮即可进人待办总览功能模块。

在这里为什么要把分为笔记和待办(待完成的事情)?

这是因为笔记中主要记录学习和工作中的注意事项,而待办一般会记录一些近日需要办的事情。

 

 

1.2.2笔记/待办的添加模块

用户在进入主界面后,点击笔记总览界面/待办总览界面上的添加按钮,就会弹出备忘录添加界面,。内容添加完成后,点击保存按钮,备忘录添加成功。返回主界面后,即可看到刚刚添加的备忘事件。

添加流程图1-2-2所示

 

                    图1-2-2

1.2.3备忘录的修改模块

用户进入笔记总览界面/待办总览界面后,可以看到已保存的备忘事项一览表,找到需要修改的备忘记录并点击,会弹出备忘录修改界面,用户可以对备忘具体内容进行修改。修改完成后,点击保存按钮,备忘内容即被修改成功。

修改流程图 1-2-3所示

                           图1-2-3

1.2.4备忘录的删除模块

用户进入主界面后,在笔记总览界面/待办总览界面中找到想要删除的内容,并长按,会弹出删除窗口,点击删除按钮,所选备忘内容即被删除,系统提示删除成功。或在修改界面中删除。

删除流程图如图1-2-4所示

             

                           图1-2-4所示

5、视图转换模块,在主界面的左上角,有一个视图转换菜单,根据个人喜好来设置列表视图还是宫格视图。

本软件在做到基本的备忘事件记录同时,还提供了简单的修改和删除以及通知栏通知等功能,方便用户对备忘录的及时更新,提高了用户的办事效率。而且还分为笔记与待办两个模块,一定程度上减轻了用户的操作量。

1.3系统数据库设计

本系统主要由一张表组成的                   表1-3-1备忘事件信息表

序号

字段名

字段说明

类型

长度

NULL

主键

1

     _id

备忘事件ID

int

-

NOT

2

content

内容

text

-

NOT

3

notetime

创建时间

varchar

25

NOT

4

type

所述类型

varchar

1

NOT

 

 

 

 

图1-3-2

1.4系统实现

1.4.1主界面功能的实现

    首先,用户进入备忘录,用户主页页面会有笔记、 待办、 增加、 菜单栏  、四个控件, 当用户没有向备忘录储存信息,主界面会显示暂无待办(这里用待办总览界面为例)如图1-4-1所示, 如果有数据如图1-4-2所示,点击增加会跳转在增加界面如图1-4-3所示,点击菜单栏会显示列表视图与宫格视图选项如图1-4-5所示,长按数据会弹出删除窗口如图1-4-6所示

     

              

                    图1-4-1                                    图1-4-2                                图1-4-3  

              

                    图1-4-5                                        图1-4-6

主页面部分关键代码:  

protected void onCreate(Bundle savedInstanceState) {

              super.onCreate(savedInstanceState);

              setContentView(R.layout.activity_notepad);

              init();

              getlist();

              itemLongOngClick();

              mLw.setOnItemClickListener(new OnItemClickListener() {

                     @Override

                     public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

//                          关键

                            NotepadBean notepadBean = mList.get(position);

                            Intent intent = new Intent(NotepadActivity.this, RecordActivity.class);

                            intent.putExtra("id", notepadBean.getId());

                            intent.putExtra("time", notepadBean.getNotetime());

                            intent.putExtra("content", notepadBean.getContent());

                            intent.putExtra("text", mNws);

                            startActivityForResult(intent, 1);

                     }

              });

              mGw.setOnItemClickListener(new OnItemClickListener()

                     @Override

                     public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

//                          关键

                            NotepadBean notepadBean = mList.get(position);

                            Intent intent = new Intent(NotepadActivity.this, RecordActivity.class);

                            intent.putExtra("id", notepadBean.getId());

                            intent.putExtra("time", notepadBean.getNotetime());

                            intent.putExtra("content", notepadBean.getContent());

                            intent.putExtra("text", mNws);

                            startActivityForResult(intent, 1);

                     }

              });

       }

       private void itemLongOngClick() {

              mLw.setOnItemLongClickListener(new OnItemLongClickListener() {

                     @Override

                     public boolean onItemLongClick(AdapterView<?> parent, View view, final int position, long id) {

                            Builder builder = new Builder(NotepadActivity.this).setMessage("是否删除此记录")

                                          .setPositiveButton("确定", new OnClickListener() {

                                                 @Override

                                                 public void onClick(DialogInterface dialog, int which) {

//                                                      关键

                                                        NotepadBean notepadBean = mList.get(position);

                                                        mSQLiteHelper = new SQLiteHelper(NotepadActivity.this);

                                                        if (mSQLiteHelper.Delect(notepadBean.getId())) {

                                                               mList.remove(position); // 删除对应的Item

                                                               getlist();// 更新记事本界面

                                                               Toast.makeText(NotepadActivity.this, "删除成功", 0).show();

                                                        }

                                                 }

                                          }).setNegativeButton("取消", new OnClickListener() {

                                                 @Override

                                                 public void onClick(DialogInterface dialog, int which) {

                                                        dialog.dismiss();

                                                 }

                                          });

                            AlertDialog dialog = builder.create();

                            dialog.show();

                            return true;

                     }

              });

              mGw.setOnItemLongClickListener(new OnItemLongClickListener() {

                     @Override

                     public boolean onItemLongClick(AdapterView<?> parent, View view, final int position, long id) {

                            Builder builder = new Builder(NotepadActivity.this).setMessage("是否删除此记录")

                                          .setPositiveButton("确定", new OnClickListener() {

                                                 @Override

                                                 public void onClick(DialogInterface dialog, int which) {

//                                                      关键

                                                        NotepadBean notepadBean = mList.get(position);

                                                        mSQLiteHelper = new SQLiteHelper(NotepadActivity.this);

                                                        if (mSQLiteHelper.Delect(notepadBean.getId())) {

                                                               mList.remove(position); // 删除对应的Item

                                                               getlist();// 更新记事本界面

                                                               Toast.makeText(NotepadActivity.this, "删除成功", 0).show();

                                                        }

                                                 }

                                          }).setNegativeButton("取消", new OnClickListener() {

                                                 @Override

                                                 public void onClick(DialogInterface dialog, int which) {

                                                        dialog.dismiss();

                                                 }

                                          });

                            AlertDialog dialog = builder.create();

                            dialog.show();

                            return true;

                     }

              });

       }

//获取焦点刷新数数据

       @Override

       protected void onResume() {

              getlist();

              super.onResume();

       }

//获取listView中的值

       private void getlist(){

              mSQLiteHelper = new SQLiteHelper(this);

              mList = mSQLiteHelper.Query(mType);

              mListIndex = mList.size();

              mAdapter= new NotepadAdapter(mList, this);

              if(mLg==0) {

                     mLw.setAdapter(mAdapter);

              }else {

                     mGw.setAdapter(mAdapter);

              }

             

              if(mListIndex>0) {

                     mBj.setVisibility (View.GONE);

              }else {

                     mBj.setVisibility(View.VISIBLE);

              }

             

       }

// 初始化变量

       private void init() {

              mIv = (ImageView) findViewById(R.id.add);

              mNote = (ImageView)findViewById(R.id.note);

              mWart = findViewById(R.id.wart);

              mIv.setOnClickListener(this);       

              mNote.setOnClickListener(this);          

              mWart.setOnClickListener(this);          

              mLw = (ListView) findViewById(R.id.Lw);

              mTw =  (TextView)findViewById(R.id.Tw);

              mGw =  findViewById(R.id.gv);

              mBjtext = (TextView)findViewById(R.id.bjtext);

              mBj = (LinearLayout)findViewById(R.id.bj);

       }

       @Override

       public void onClick(View v) {

              switch (v.getId()) {

              case R.id.add:

                     setText();

                     break;

              case R.id.note:

                     mType = "0";

                     mNw = "编辑笔记";

                     mNws = "笔记";

                     mBjtext.setText("没有笔记");

                     mTw.setText("全部笔记");

                     getlist();

                     break;

              case R.id.wart:

                     mType = "1";

                     mNw = "待办事项";

                     mNws = "待办";

                     mBjtext.setText("没有待办");

                     mTw.setText("全部待办");

                     getlist();

                     break;

              }    

       }

//

       private void setText() {

              Intent intent = new Intent(this, RecordActivity.class);

              intent.putExtra("text", mNw);

              intent.putExtra("type", mType);

              startActivityForResult(intent, 1);

       }

//     创建菜单栏

    @Override

    public boolean onCreateOptionsMenu(Menu menu) {

         getMenuInflater().inflate(R.menu.notepad, menu);

             return true;

      }

    }

1.4.2添加功能的实现

用户向添加界面添加笔记或待办这里用待办为例添加前后如图1-4-7、1-4-8、1-4-9、

               

                  图1-4-7                                 图1-4-8                              图 1-4-9

添加界面部分关键代码:

String content = mContent.getText().toString();

                     if(content.length()==0) {

                            Toast.makeText(this, "填写内容不得为空", 0).show();

                            return;

                     }else if(mSQLiteHelper.Insert(content, mDBUtils.getTime(), mType)) {

                            Toast.makeText(this, "保存成功", 0).show();

                     }

 

 

 

 

 

 

 

 

 

 

1.4.3修改功能的实现

用户在修改界面中修改内容(已修改待办内容)的实现前后如图1-4-10、1-4-11、1-4-12

    

     图1-4-10                   图1-4-11               图 1-4-12

修改界面部分代码:

String content2 = mContent.getText().toString();

                            if(content2.length()==0) {

                                   Toast.makeText(this, "填写内容不得为空", 0).show();

                                   return;

                            }else if(mSQLiteHelper.Upadta(content2, mDBUtils.getTime(), mId)){

                                   Toast.makeText(this, "修改成功", 0).show();

                            }

 

 

 

 

 

 

 

 

 

 

1.4.4删除功能的实现

用户在主界面进行删除操作的前后的如图1-4-13、1-4-14、1-4-15

                 

                   图1-4-13                                 图1-4-14                             图1-4-15

删除部分关键代码:

setOnItemLongClickListener(new OnItemLongClickListener() {

                     @Override

                     public boolean onItemLongClick(AdapterView<?> parent, View view, final int position, long id) {

                            Builder builder = new Builder(NotepadActivity.this).setMessage("是否删除此记录")

                                          .setPositiveButton("确定", new OnClickListener() {

 

                                                 @Override

                                                 public void onClick(DialogInterface dialog, int which) {

//                                                      关键

                                                        NotepadBean notepadBean = mList.get(position);

                                                        mSQLiteHelper = new SQLiteHelper(NotepadActivity.this);

                                                        if (mSQLiteHelper.Delect(notepadBean.getId())) {

                                                               mList.remove(position); // 删除对应的Item

                                                               getlist();// 更新记事本界面

                                                               Toast.makeText(NotepadActivity.this, "删除成功", 0).show();

                                                        }

                                                 }

                                          }).setNegativeButton("取消", new OnClickListener() {

                                                 @Override

                                                 public void onClick(DialogInterface dialog, int which) {

                                                        dialog.dismiss();

                                                 }

                                          });

切换布局的实现

用户切换布局的的前后实现如图1-4-16、1-4-17、所示

         

          图 1-14-16                  图1-4-17

切换布局的部分代码:

public boolean onOptionsItemSelected(MenuItem item) {

          switch (item.getItemId()) {

              case R.id.list:

                     mLg = 0;

                     mLw.setAdapter(mAdapter);

//                   隐藏布局

                     mGw.setVisibility (View.GONE);

//          显示布局

                     mLw.setVisibility(View.VISIBLE);

              break;

              case R.id.griv:

                     mLg = 1;

                     mGw.setAdapter(mAdapter);

                     mLw.setVisibility (View.GONE);

                     mGw.setVisibility(View.VISIBLE);

                     break;

              }

              return true;

    }

1.5系统测试

    测试环境:

开发技术 :android  sqlite

数据库 SQLite3.5.83

开发工具 eclipse

系统测试,即对软件进行全面而统一的测试,包括对功能、性能以及软件所运行的软硬件环境进行调试。这里主要对功能性进行测试。本系统包括笔记总览界面/待办总览界面、修改视图模块、删除模块等模块进行测试。具体测试如表6-1所示:

                             表1-5-1测试内容

测试内容(模块)

具体测试方法

  预期结果

    实际测试运行结果

笔记总览界面(以笔记总览界面为例)

把App数据清空然后新增一个笔记内容 ,查看系统是否会从一个以暂无笔记的页面变为一个存在一条数据的界面

页面正常显示

页面正常测试结果见下

图1-5-2、1-5-3

修改视图模块

把视图从列表视图转设置为宫格视图,查看视图是否正确转换(以笔记总览界面为例)

页面正确转换

页面正常测试结果见下

图1-5-4、1-5-5

删除模块

在主页面中的长按一条笔记或待办看是否会弹出删除窗口(以笔记为例)

删除窗口正常单出并且可以删除成功

页面正常测试结果见下

图1-5-6

                 

           

               图1-5-2                                  图1-5-3                                  图1-5-4

       

              图1-5-5                                图1-5-6

2课设总结

2.1课设体会

在开发该电子备忘录的期间我学到了很多东西,整个软件的开发过程,让我从课本的理论步入到了实践过程中,同时也对Android有了更加深层次的理解。电子备忘录是我们日常生活的必备品。本人设计开发的基于Android 电子备忘录基本完成,主要采用Java语言和eclipse开发工具开发。对于Android平台上电子备忘录的开发,是第一次独立开发设计一款软件,期间遇到了不少的问题,从需求分析、设计流程到代码的编写、模块测试,都要学会独立完成,对自己来说是个不小的挑战。但是在完成后,自己完全忘却了遇到困难时的困扰,而是看到自己努力的结果,是兴奋和喜悦。经过这次软件开发,我对Android产生了更加浓厚的兴趣,为我日后的学习起到了很大的帮助作用,相信自己在以后的工作中和学习中,能够像这次课程设计中所表现出来的韧性,在未来能够有更好的发展。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

附件

基于android的简易备忘录开发的设计与实现

技术说明

1.UI设计:多个界面嵌套 四个界面以上

2.SQLite数据库: 对笔记或待办的增删改查

3. Activity组件的应用:多个界面的切换

4. android中Visibility的应用:列表视图与宫格视图的相互转换

5. ListView和GridView的使用:查询笔记或待办中数据的显示

6. androidHong 中Menu:列表视图与宫格视图的按钮显示

UML类图

 

代码

清单文件:

  布局文件:

1.  截图

2.  原文件

  ….

Java原码

         

类说明

     NotepadAdapter :该类继承自BaseAdapter,用于获取Item总数、对应Item对象、Item对象Id、对应的Item视图。

     NotepadBean:用于储存每条记录的各种属性

NotepadActivity:查询数据中存放的记录信息并实现笔记与待办切换,添加按钮的点击事件,切换视图。

RecordActivity:实现添加与修改功能

DBUtils:该类中定义数据库的名称、表名、数据库版本、数据库表中的列名以及获取当前日期。

SQLiteHelper:定义数据库的添加、删除、修改、查询、方法

    

 

原文地址:https://www.cnblogs.com/zqxxx/p/12013579.html