移动应用开发技术

期末考核报告

题   目:        基于Android平台的记事本软件            

学生姓名                            

学生学号                            

专    业                          

班    级                             

指导教师                          

 

2022 年   06  月  20   日  

目录

1.    项目来源及背景... 4

2.    需求分析... 4

2.1 记事功能需求分析:... 4

2.1.1 显示记事... 4

2.1.2 添加记事... 4

2.1.3 编辑记事... 5

2.2 账户管理... 5

2.2.1 注册账号... 5

2.2.2 登录... 5

2.2.3 修改密码... 5

2.2.4 注销账号... 5

2.3 数据库需求分析... 6

2.4 界面需求分析... 6

3.    系统总体设计... 7

3.1账户管理... 7

3.1.1登录... 7

3.1.2 注册... 8

3.1.3 修改密码... 9

3.1.4 注销... 10

3.2 记事功能... 11

4.    详细设计与实现... 12

4.1 记事相关功能... 12

4.1.1 显示记事... 12

4.1.2 添加记事... 14

4.1.3     编辑记事... 15

4.1.4 账户管理... 18

4.2 数据库... 21

4.3 背景音乐... 21

4.4 界面美化... 22

4.5其他细节... 23

5.    总结与体会... 23

参考文献... 24

项目来源及背景

据准确数据调查,截至2021年全球人口数量为78.3亿,全球有52.2亿人使用手机,相当于世界总人口的66.6%,互联网正在占领着全球化的趋势。随着生活节奏的加快, 工作和生活的双重压力全面侵袭着人们,如何避免忘记工作和生活中的诸多事情而造成不良的后果,就显得非常重要。为此,我开发了一款基于Android系统的简单记事本,它能够便携记录生活和工作的诸多事情,从而帮助人们有条理的进行时间管理。

本系统在Windows系统下的Android Studio平台中开发,代码采用Java语言编写,数据库为安全轻便的SQLite。使用的配置也是简单的BaseAdapter作为基础数据适配器,简单而又高效的进行开发。虽然本项目只是一款基础的日记本,但是会在今后不断的探索中将功能与维护性进一步的修正、改造与完善,满足各类客户的需求。

需求分析

2.1 记事功能需求分析:

2.1.1 显示记事

用户打开记事本一定要能够看到之前的写的记事内容,所以进入主页面后,软件应该从数据库中搜索出该用户所写的全部记事,并按照一定顺序排列输出。

记事本记事可以添加多条记事(理论上无数条,只要数据库能放下),在主页面用户看到的应该是记事列表,该列表存放了其所写的所有记事。记事内容不应该显示直接在列表中,这样太占空间,所以数据库中设计标题列,将标题标题显示在列表中,点击标题进入另一界面,显示详细记事内容。

2.1.2 添加记事

设置添加记事内容入口,用户点击后进入,开始编辑记事的标题和内容。

2.1.3 编辑记事

在主界面的记事列表中。点击一条记事,能够进行编辑,包括更改记事(更新)和删除记事。

2.2 账户管理

为了更好的保护客户的隐私要求,也为了能让同一台手机的不同用户能够使用该软件,软件有专门的账户管理。

记事本供本机中多名用户使用,设计账户管理可以让多个用户使用该软件,且保证每个人只能看到自己的记事内容。这就相当于是一把锁。

2.2.1 注册账号

注册账号是要对密码进行确认,防止用户填写密码时填写错误,而导致该账号虽然注册了,但是密码相当于遗忘了,相当于账号刚注销变报废。当然,账号和密码都不能为空。

2.2.2 登录

登录时对账号密码进行检验,包括是否为空,账号密码是否正确。根据不同错误,对用户进行提示。

为了让用户不用每次登录都要输入账号密码,要增加记住密码选项。(记住密码也有不足之处,如果其他用户使用该机中的此软件,那他就可以直接登录)

2.2.3 修改密码

修改密码时,要输入账号、旧密码、新密码并确认新密码,四项缺一不可,任何一项为空,都要对用户进行提示。四项填写完成用户确认后,进行账号密码比对,验证成功再进行新密码的确认,最后更换密码。

2.2.4 注销账号

用户不想再使用该软件后,可以主要注销账户。注销账户要同时删除数据库中该用户的记事数据。

2.3 数据库需求分析

软件主要分为两大模块(登录和记事),所以需要创建两个表,分别为用户表和记事表

2.4 界面需求分析

界面在移动开发平台开发中非常重要,也是用户使用软件的先决条件。该记事本软件总共有8个界面,分别为登录界面、注册界面、密码修改界面、注销界面、记事列表显示界面(主界面)、添加记事界面和编辑记事界面和更新记事界面。

背景色调要以简洁、清新为主,尽量不让使用者产生厌烦的心理。

系统总体设计

3.1账户管理

3.1.1登录

3.1.2 注册

 

3.1.3 修改密码

 

3.1.4 注销

 

3.2 记事功能

 

详细设计与实现

4.1 记事相关功能

4.1.1 显示记事

 

登录后主界面为Listview组件展示的记事列表,该组件显示用户的所有记事数据,每一条记事数据展示在item上的只是该条记事数据中的标题和最新编辑时间。

记事列表显示以最新编辑时间递减显示,这样可以让用户最新添加和编辑的记事排在最前面,更加人性便捷。

由于记事本界面的记事列表是使用ListView控件展示的,因此需要创建一个数据适配器对ListView控件进行数据适配,具体步骤如下:

创建MemoAdapter类

创建一个MemoAdapter类继承自BaseAdapter类。

创建Holder类

在MemoAdapter类中创建一个Holder类来初始化ltem界面中的控件。

BaseAdapter是一款是最万能最好用的数据适配器之一,BaseAdapter的

View getView(final int position, View convertView, ViewGroup parent) 填充每个item的可视内容并返回。getView方法是由系统自动回调的方法,每当可视区域内需要刷新一个item时就会被调用,用来填充item内容、绑定事件等其他操作。因此,对ListView内容的数据填充都在这个方法中实现。

在Holder类中,只有两个TextView参数,text和textTime,分别代表一个记事的标题和最新的编辑时间。

第一次调用getView方法时convertView都为null,因此刚进入主页面是,会对布局实例化:convertView = LayoutInflater.from(context).inflate(R.layout.list_member, null);

View.inflate作用是将layout_item转换成View对象。界面中ListView能显示多少个item,getView就要被调用多少次。

getView中实例化一个Holder对象holder,holder中的参数分别用显示界面中对应的TextView实例化,这相当于holder绑定了界面中的两个组件。

用convertView.setTag(hodler), 将holder数据存储在convertView中。

如果convertView实例化,那么直接用getTag取出其中的holder数据,此时holder绑定了界面中的两个组件。

View中的setTag()表示给View添加一个格外的数据,可以用getTag()将这个数据取出来。

之后便是用游标将数据中的对应的数据(标题和最新编辑时间)取出来,再复制给holder中的两个对应的成员(现在是xml中的TextView组件)。这样就将数据显示出来了。

详细代码见源程序。

4.1.2 添加记事

添加记事,只要将组件中的String内容取出,再放入数据库中就可以了。

数据操作语句:database.insert(sqliteHelper.tableName, null, values);

向数据库中插入记事数据时,要在也要插入用户名,以便显示记事数据时,能精准查询到具体某个用户所写的记事。这就要求从登录后,用户名要在各个Activity之间传递,只需要用Intent传递就可以了。

编辑记事

 

编辑包括删除和修改(更新)。

删除根据该条记事数据的id删除,id为每条记事数据的自增列,也是主键。delete(sqliteHelper.tableName, sqliteHelper.id + "=" + pos, null);

为了避免误删除,设置提示:

AlertDialog.Builder builder = new AlertDialog.Builder(OneMemoActivity.this);                  builder.setMessage("你确定要删除吗?")                          .setTitle("提示")                          .setPositiveButton("确定",                                  new DialogInterface.OnClickListener() {                                      @Override                                      public void onClick(DialogInterface dialog, int which) {                                          deleteByPos();                                          dialog.dismiss();                                          finish();                                      }                                  })                          .setNegativeButton("不,刚才我手滑了",                                  new DialogInterface.OnClickListener() {                                      @Override                                      public void onClick(DialogInterface dialog, int which) {                                          dialog.dismiss();                                      }                                  })                          .show(); 

效果如下图:

用户点击编辑按钮,进入编辑界面,进行记事的修改,修改后点确认就完成修改。修改就和添加记事的操作一致了。见下图:

 

4.1.4 账户管理

              1) 注册、修改密码、注销

注册、密码修改和注销实大同小异。不同的是注销是,也要在数据库中删除注销用户的记事数据。

delete(sqliteHelper.tableName, sqliteHelper.user + "=" + userName, null);

从左到右分别为注册、修改密码、注销

登录

登录实际上主要涉及的是账户密码的验证,这只需要用数据库语句从数据库中查询是否有该用户名和密码的一致的数据就可以了。

       这里的新颖之处在于账号记住密码:

       为了让用户不用每次登录都要输入账号密码,要增加记住密码选项。(记住密码也有不足之处,如果其他用户使用该机中的此软件,那他就可以直接登录)

4.2 数据库

软件主要分为两大模块(登录和记事),所以需要创建两个表,分别为用户表和记事表

字段名 数据类型 是否为主键 描述 id integer 是 编号 datas text 否 记事内容 user text 否 用户名 lastModifyTime text 否 最新编辑时间 title text 否 记事标题

字段名 数据类型 是否为主键 描述 _id integer 是 编号 user_name text 否 用户名 user_pwd text 否 密码

项目中MemoSQLiteOpenHelper类继承于SQLiteOpenHelper,用于创建记事本数据库数据表。UserDataManager类是数据操作管理类,数据库数据表的创建,数据的增删改查代码都在这里。

4.3 背景音乐

背景音乐的添加也是很简单的,这和实验中做过的代码一样,需要注意的是,Service需要在AndroidManifest.xml中经行注册。用编译软件快捷添加的Service实际上会自动进行注册。

Service在主显示Activity(MainActivity)启动时开始运行,在该Activity销毁时,同时也把改Service也进行销毁。这样用户登录成功后,背景音乐便会想起。

注:此程序的默认Activity是LoginActivity,因为用户进入软件必须要进行登录。修改默认Activity在AndroidManifest.xml进行。

背景音乐存放在res/raw文件夹下。

4.4 界面美化

为了让软件更加美观,对软件图标进行了设置,软件中的界面也添加了一些图标、图片,添加记事的按钮采用悬浮按钮,按钮中也添加了图片。

悬浮按钮:

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:id="@+id/add"

            android:layout_gravity="right|bottom"

            android:layout_marginRight="10dp"

            android:layout_marginBottom="10dp"

            android:src="@drawable/add"

            app:borderWidth="0dp"

            app:fabSize="auto"

            app:maxImageSize="56dp"

            app:backgroundTint="#99ccff"

            app:rippleColor="#33728dff"

            app:elevation="8dp"

            app:pressedTranslationZ="16dp"/>

           

 您阅读本篇文章共花了: