项目设计文档
目录
1. 开发规划
1.1. 概念术语描述
1.2. 基本设计描述
1.3. 主要界面流程描述
2. 总体设计
2.1. 开发人员
2.2. 开发环境与工具
3. 数据结构
4. 接口规范
5. 模块设计
1. 开发规划
1.1. 开发人员
陈兆庭、黄志鹏、吴雪晴:负责数据库部分编码,服务器部分编码,服务器与安卓端通信部分编码
胡宇晨、康鑫、林静雯、涂涵越:负责用户界面部分编码,及数据处理逻辑的编码
### 1.2. 开发环境和工具
工具 | 作用 |
---|---|
Android Studio | 安卓开发IDE |
Ubuntu | 服务器端系统 |
服务器端环境 | 提供web服务器功能 |
github | 团队项目管理 |
2. 总体设计
2.1. 概念术语描述
标签
描述日记、小纸条的属性。包括情绪类标签、生活类标签等。
日记
常规的日记。属于一个日记本,并包含一系列标签。
日记本
日记的容器,用于分门别类。
小纸条
碎片化的日记,可以用来写碎片化的心情和感悟,方便查看与分享。属于一个瓶子,并包含一系列标签。
瓶子
小纸条的容器,用于分门别类。
情绪统计
根据情绪类标签对一段时间的情绪进行统计。
### 2.2.基本设计描述
1.能够书写与查看日记和瓶子,支持富文本编辑。
2.能够在日记与瓶子中加入音乐、图片等多媒体信息。
3.能够对数据进行加密。
4.能够注册新用户并登录,根据用户将数据与服务器端同步。
5.UI清新怡人。
### 2.3主要界面功能流程描述
#### 主界面:
**功能1**:展示、查看日记。
以时间轴的方式展示最近的日记。
点击日记跳转到日记的查看界面。
功能2:编辑、删除日记。
长按日记:可选择编辑、删除日记。
功能3:新写一篇日记
点击写日记的按钮,跳转到编写日记界面,新写一篇日记。
功能4:进入瓶子界面。
点击瓶子按钮进入瓶子界面。
功能5:展示个人信息。
在标题栏左侧的滑动目录,展示个人信息如头像、邮箱等。
功能6:进入统计界面
在标题栏左侧的滑动目录中可进入统计界面。
功能7:设置。
标题栏右侧目录点击设置进入设计界面。
功能8:搜索。
标题栏右侧点击搜索进入搜索界面。
功能9:日历。
标题栏右侧点击搜索进入日历界面。
功能10:标签管理
标题栏左侧进入标签管理
功能11:数据同步
#### 搜索界面:
功能1:按标签搜索
功能2:按时间搜索
功能3:可选范围(日记/纸条/全部)
功能4:显示搜索历史
多瓶子界面:
功能1:添加、删除一个瓶子。
添加过程中给瓶子取一个名字,长按删除瓶子
功能2:查看瓶子具体内容。
进入瓶子,查看瓶子的描述,瓶子里的纸条。
瓶子界面:
功能1:删除该瓶子
功能2:编辑该瓶子的相关信息(瓶子名字和描述)
功能3:添加、删除、编辑瓶子中的纸条,编辑纸条进入纸条编辑界面。
功能4:查看纸条、进入查看界面。
日记查看界面:
功能1:进入日记编辑界面
功能2:查看前一篇日记,后一篇日记
纸条查看界面:
功能1:进入纸条编辑界面。
功能2:查看前一张纸条,后一张纸条。
标签管理界面:
功能1:添加标签、删除标签
功能2:建立标签组
功能3:进入标签组设置统计功能界面
标签组统计功能界面:
功能1:选择统计方式
功能2:进入统计模块
功能3:查看该标签组过去统计数据。
日历界面:
功能1:通过点击日历某一天来选中改日期
功能2:通过点击日历图标弹出上拉框实现快速选择日期
功能3:根据选中日期,在界面下方显示当天的日记内容(缩略)
功能4:上滑日记记录列表,显示更多列表信息,日历由月模式显示改为周模式显示
功能5:点击某一条日记记录跳转到详情展示界面
功能6:点击图片返回当前日期
功能7:左右滑动日历时根据不同的月份显示不同的图片
写日记界面:
功能1:输入文本
功能2:点击图片图标,插入本地图片
功能3:根据展示的背景样例,点击相应背景图片设置背景
功能4:滑动seekbar设置字体大小
功能5:根据展示的字体样例,点击相应按钮设置文本字体
功能6:点击确认图标,储存日记文件并跳转到详情界面
写瓶子界面:
功能1:点击编辑图标,跳转到写纸条界面(和写日记界面基本相同,只支持文本输入)
功能2:点击图片图标,选择本地图片并插入
功能3:点击确定图标,保存瓶子内容,并跳转到瓶子的展示界面
情绪统计界面:
功能1:选择日期范围
功能2:根据选择的日期范围,获取情绪值,将其在图表上显示出来
登录/注册界面:
功能1:点击登陆弹出登录对话框,用户需输入账号和密码,如果账号不存在,自动弹出注册界面
功能2:点击注册弹出注册界面
注册界面描述:输入基本信息,包括昵称、性别、手机号/邮箱,点击确认完成注册,并跳转到主界面
个人信息界面:
功能1: 设置昵称、头像
功能2: 跳转修改用户信息界面。
功能3: 退出登录
修改用户信息界面:
功能1: 修改邮箱
功能2: 修改绑定手机
功能3: 修改密码
## 3. 数据结构
### 本地数据库:
表名 | 作用 |
---|---|
Diary | 存储日记信息 |
Diarybook | 存储日记本信息 |
Sentence | 存储小纸条信息 |
Sentencebook | 存储瓶子信息 |
Label | 标签 |
DiaryLabel | 存储日记与标签的对应关系 |
SentenceLabel | 存储小纸条与标签的对应关系 |
SearchHistory | 存储搜索历史记录 |
SearchResults | 存储历史搜索结果 |
服务器数据库:
表名 | 作用 |
---|---|
Users | 存储用户信息 |
各个用户数据存储的表结构尚未确定。
4. 接口规范
4.1 数据库接口
Diary类
接口名称 | 参数 | 返回值 | 功能 |
---|---|---|---|
Diary | null | null | 空构造方法 |
Diary | String(内容) | null | 以内容构造日记 |
getText | null | String(内容) | 获取日记内容 |
setText | String(新的内容) | null | 设置/修改日记内容 |
getDate | null | Date(日期) | 获取日记日期 |
setDate | null | null | 新建并初始化日记日期 |
setDate | Data(新的日期) | null | 设置/修改日记日期 |
getDiarybook | null | Diarybook(日记所在日记本) | 获取日记所在日记本 |
setDiarybook | Diarybook(指定的日记本) | null | 一个普通的setter方法,设置diary book属性 |
insert | DatabaseHelper(数据库助手) | null | 添加日记 |
update | DatabaseHelper(数据库助手) | null | 修改日记 |
delete | DatabaseHelper(数据库助手) | null | 删除日记 |
insertLabel | DatabaseHelper(数据库助手),Label(添加的标签) | null | 给日记添加新标签 |
deleteLabel | DatabaseHelper(数据库助手),Label(指定的标签) | null | 删除指定标签 |
getByDate |
DatabaseHelper(数据库助手),Date(指定的日期) | List<Diary>(日记列表) | 获取指定日期的所有日记 |
getAll |
DatabaseHelper(数据库助手),Boolean(表示顺序,true为按创建日期升序排列,即最早的在最前面;false为按创建日期降序排列,即最晚的在最前面) | List<Diary>(日记列表) | 获取所有日记 |
getAllLabel | DatabaseHelper(数据库助手) | List<Label>(标签列表) | 获取日记的所有标签 |
getByRestrict |
DatabaseHelper(数据库助手),String(特定字段),Date(起始日期),Date(终止日期),List<Label>(标签列表),Boolean(表示顺序,类似前述) | List<Diary>(日记列表) | 获取所有符合条件的日记 |
countByDateLabel |
DatabaseHelper(数据库助手),Date(起始日期),Date(终止日期),List<Label>(标签列表) | long(日记数量) | 统计符合条件的日记数量 |
Label类
接口名称 | 参数类型 | 返回值类型 | 功能 |
---|---|---|---|
Label | null | null | 空构造方法 |
Label | String(标签名) | null | 以名称构造标签 |
getLabelname | null | String(标签名) | 获取标签名称 |
setLabelname | String(新的标签名) | null | 设置/修改标签名称 |
insert | DatabaseHelper(数据库助手) | boolean(是否成功) | 添加标签 |
delete | DatabaseHelper(数据库助手) | null | 删除标签 |
getAllLabel |
DatabaseHelper(数据库助手) | List<Label>(标签列表) | 获取所有标签 |
Sentence类
接口名称 | 参数类型 | 返回值类型 | 功能 |
---|---|---|---|
Sentence | null | null | 空构造方法 |
Sentence | String(内容) | null | 以内容构造纸条 |
getText | null | String(内容) | 获取纸条内容 |
setText | String(新的内容) | null | 设置/修改纸条内容 |
getDate | null | Date(日期) | 获取纸条日期 |
setDate | null | null | 新建并初始化纸条日期 |
setDate | Date(新的日期) | null | 设置/修改纸条日期 |
getSentencebook | null | Sentencebook(纸条所在瓶子) | 获取纸条所在瓶子 |
setSentencebook | Sentencebook(指定的瓶子) | 一个普通的setter方法,设置diary book属性 | |
insert | DatabaseHelper(数据库助手) | null | 添加纸条 |
update | DatabaseHelper(数据库助手) | null | 修改纸条 |
delete | DatabaseHelper(数据库助手) | null | 删除纸条 |
insertLabel | DatabaseHelper(数据库助手),Label(添加的标签) | null | 给纸条添加新标签 |
deleteLabel | DatabaseHelper(数据库助手),Label(指定的标签) | null | 删除指定标签 |
getByDate |
DatabaseHelper(数据库助手),Date(指定日期) | List<Sentence>(纸条列表) | 获取指定日期的所有纸条 |
getAll |
DatabaseHelper(数据库助手),Boolean(表示顺序,类似前述) | List<Sentence>(纸条列表) | 获取所有纸条 |
getAllLabel | DatabaseHelper(数据库助手) | List<Label>(标签列表) | 获取纸条的所有标签 |
getByRestrict |
DatabaseHelper(数据库助手),String(特定字段),Date(开始日期),Date(终止日期),List<Label>(标签列表),Boolean(表示顺序,类似前述) | List<Sentence>(纸条列表) | 获取所有符合条件的纸条 |
countByDateLabel |
DatabaseHelper(数据库助手),Date(开始日期),Date(终止日期),List<Label>(标签列表) | long(纸条数量) | 统计符合条件的纸条数量 |
Diarybook类
接口名称 | 参数类型 | 返回值类型 | 功能 |
---|---|---|---|
Diarybook | null | null | 空构造方法 |
Diarybook | String(日记本名) | null | 以名称构造日记本 |
getDiarybookName | null | String(日记本名) | 获取日记本名称 |
setDiarybookName | String(新的日记本名) | null | 设置/修改日记本名称 |
getAllSubDiary | DatabaseHelper(数据库助手) | List<Diary>(日记列表) | 获取日记本中所有日记 |
deleteSubDiary | DatabaseHelper(数据库助手) | null | 删除日记本中所有日记 |
insert | DatabaseHelper(数据库助手) | null | 添加日记本 |
update | DatabaseHelper(数据库助手) | null | 修改日记本 |
delete | DatabaseHelper(数据库助手) | null | 删除日记本 |
getAll |
DatabaseHelper,Boolean | List |
获取所有diary book;Boolean参数无意义 |
`getByName(DatabaseHelper, String(名字) | Diarybook | 通过名字获取一个diary book,如无该名字的则返回null | |
Sentencebook类
接口名称 | 参数类型 | 返回值类型 | 功能 |
---|---|---|---|
Sentencebook | null | null | 空构造方法 |
Sentencebook | String(瓶子名) | null | 以名称构造瓶子 |
getSentencebookName | null | String(瓶子名) | 获取瓶子名称 |
setSentencebookName | String(新的瓶子名) | null | 设置/修改瓶子名称 |
getAllSubSentence | DatabaseHelper(数据库助手) | List<Sentence>(纸条列表) | 获取瓶子中所有纸条 |
deleteSubSentence | DatabaseHelper(数据库助手) | null | 删除瓶子中所有纸条 |
insert | DatabaseHelper(数据库助手) | null | 添加瓶子 |
update | DatabaseHelper(数据库助手) | null | 修改瓶子 |
delete | DatabaseHelper()数据库助手 | null | 删除瓶子 |
getAll |
DatabaseHelper,Boolean | List |
获取所有sentence book;Boolean参数无意义 |
`getByName(DatabaseHelper, String(名字) | Sentencebook | 通过名字获取一个sentence book,如无该名字的则返回null | |
DiaryLabel类
接口名称 | 参数类型 | 返回值类型 | 功能 |
---|---|---|---|
DiaryLabel | null | null | 空构造方法 |
DiaryLabel | Diary(日记),Label(日记关联的一个标签) | null | 以日记<标签构造关系 |
getDiary | null | Diary(在一组日记<标签关系中的日记) | 获取关系中的日记 |
getLabel | null | Label(在一组日记<标签关系中的标签) | 获取关系中的标签 |
setDiary | Diary(在一组日记<标签关系中的日记) | null | 设置关系中的日记 |
setLabel | Label(在一组日记<标签关系中的标签) | null | 设置关系中的标签 |
insert | DatabaseHelper(数据库助手) | null | 添加关系 |
delete | DatabaseHelper(数据库助手) | null | 删除关系 |
SearchHistory类
接口名称 | 参数类型 | 返回值类型 | 功能 |
---|---|---|---|
SearchHistory | null | null | 空构造方法 |
SearchHistory | String(条目的内容) | null | 以条目构造历史记录 |
getEntry | null | String(条目的内容) | 获取条目 |
getAll |
DatabaseHelper(数据库助手) | List<SearchHistory>(历史记录列表) | 获取所有历史记录 |
deleteEntry | DatabaseHelper(数据库助手) | null | 删除条目 |
deleteAllEntry |
DatabaseHelper(数据库助手) | null | 删除所有条目 |
注:以上带加粗的为构造方法,带底纹
的为静态方法。
5. 模块设计
5.1. 安卓数据库模块
使用安卓自带的sqlite数据库,完成各种信息的存储。为了方便编码,使用了ormlite框架。为了给数据加密,使用sqlcipher开源包。
基本表结构:
5.2. 服务器模块
使用数据库,管理一张用户名、密码、用户信息的表,并存储每个用户同步的数据库数据。对于用户需要同步的文件,存在每个用户各自的文件夹下。
5.3. 网络通信模块
使用服务器与安卓各自的网络功能,完成通信。
5.4. UI模块
详见2.3