目錄
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