目录
1、关于本课题
2、开发平台
3、系统分析
3.1 国外安卓应用发展的现状
3.2 国内安卓应用发展的现状
3.3 系统构建目标分析
3.4 系统构建功能分析
3.4.1 系统的总体架构
3.4.2 系统功能模块
3.4.3 应用功能规划图
4、系统设计
4.1 前台背单词展示子系统详细设计
4.1.1 复习功能模块
4.1.2 统计功能模块
4.1.3 词本功能模块
4.1.4 设置功能模块
4.2 后台数据管理子系统详细设计
5、数据库设计
5.1 表汇总
5.1.1 数据库表汇总表
5.2 表明细
6、源代码
本次设计主要是对大学时间所学的 Android 技术开发 ,数据库等课程的一次巩固复习及应用。本设计根据用户确定的单词本以及在设置中自定义的学习量,要求系统有计划地每天帮用户安排单词复习;用户可以自由选择更换单词本以及重置学习记录;可以通过各大翻译平台提供的 API 查找单词例句,可以了解自己的学习记录和记忆情况,可以自定义系统主题;
本课题的开发平台为:
操作系统:Microsoft Windows 10
程序语言:Java,XML
IDE 工具:AndroidStudio 4.1.1
IDE 插件:Database browser
数据库服务器:SQLite
其他工具:Android 7.0 以上系统的智能手机或者模拟器
本章主要对系统构建进行较为详细的需求分析、目标分析和功能分析。
据调查,2019 年美国的互联网用户规模已不低于 2.9 亿人,互联网使用率达到 89.4%,每日手机使用的平均时长超过三个小时。在免费应用中比较热门类型为社交类,游戏类,办公类及网络视频类;在付费应用中比较热门类型为工具类及网络游戏类。在 Android 平台,GooglePlay 中拥有庞大的应用程序;其数量和下载量均远超国内任意一家应用商店,由此可见国外使用移动应用程序的大潮早已来临,刺激了更多移动应用程序的开发需求。[17]不同于国内多数开发者在应用程序开发语言的选择上仍然使用 Java 作为开发语言,国外多数开发者普遍选用 Kotlin 作为开发语言。[18]
国内的 Android 开发还是主要以应用开发为主, 主要分成三类: 为企业开发应用、游戏开发和开发通用应用。
背单词 App 的开发,需要用户能够随时地操作用户数据以及对每日任务和各单词出现的词频率自动做出调整,以满足用户高效率背诵单词的需要;因而在安排用户复习时对应单词本中的词频计算尤为重要,本系统目标是按艾宾浩斯遗忘曲线和用户熟识度相结合安排复习的方法来实现用户单词背诵效率最大化[20]。此外,应用还需要实时给出直观的用户熟识度统计和完成情况图:
对各个单词的熟识度应由用户在复习单词时来自主选择;熟识度包括熟记,认识,模糊和忘记四个选项,每个熟识度将由系统判断在保证今日任务的情况下再次安排复习。保证用户在当天背诵记忆能够更加巩固,牢靠。
本应用充分利用艾宾浩斯遗忘曲线,使用户对非今日任务做一个合理的复习;艾宾浩斯遗忘曲线计算方法只依赖与系统时间戳;被由于艾宾浩斯遗忘曲线而安排用户复习的单词将刷新该单词的遗忘率(这与用户熟识度无关);从而保证用户对过去已学单词的背诵记忆够更加巩固,牢靠。
通过数据库统计数据并且利用 API 以图的形式直观地展现给用户。统计图包括当前词本学习进度统计图,艾宾浩斯遗忘曲线图和学习情况统计图;其中学习情况统计图提供用户明确的用户熟识度情况,剩余计划和单词收藏情况。
通过用户界面设置达到用户自定义每日任务量,用户学习任务管理和系统主题等目的,进一步提高用户的使用体验和学习效率。
该系统由两个子系统构成:前台展示背单词子系统和后台数据管理子系统。同时主要包含两种 JSON 数据解析和一种 XML 数据解析过程:幽灵背单词 API 词汇本和词汇数据解析,爱词霸词典 API 数据解析。其中幽灵背单词 API 数据解析是关键部分,是全部相关词汇的数据来源。
前台展示背单词子系统
前台展示背单词子系统简述
后台数据管理子系统
后台数据管理子系统简述
该系统的主要功能规划如图 3-3 所示,这里展现的只是系统的主要流程的大致环节,详细说明会在后面功能模块的详细设计中涉及。
复习功能模块是展示给用户的第一个 fragment,其工作原理和用户界面是背单词 App 最关键的部分,对是否能激发用户继续使用本应用起着非常巨大的作用。因此,复习功能模块的设计需要重视用户的体验度和美工设计,同时还需要兼具使用方便,信息全面等特点。在复习功能模块中,fragment 主体上从上到下依次分为三个框架,第一个框架显示该用户的今日进度和单词任务量信息;第二个框架是用户对当前单词的操作框架(例如单词收藏,单词发音和熟识度选择等);第三个框架是单词释义,音标,例句等信息。
为了方便叙述,先从第二框架和第三框架开始介绍。
对用户来说,如果不进行任何操作,第二框架和第三框架的可见部分只有单词,单词音标,单词发音和单词收藏。单词的词性,释义,和例句部分以及单词的熟识度选择部分会被完全隐藏起来。本项目将单词例句和单词词性控件上设置点击事件并由提示性点击文字。用户执行相应操作后则会显示第二框架和第三框架的用户熟识度选择,单词词性和单词例句。其中用户熟识度一共有四种选择,分别是熟记,认识,模糊和忘记。单词操作以及熟识度选择的作用如下:
在初始化数据时,应用程序将准备 wordList 和 hitList。其中 wordList 中装有今日用户需要完成的所有单词而 hitList 装有所有被击中词汇(在这里将因熟识度而再次被安排复习的所有单词成为被击中词汇,下同)。用户必须在这四种熟识度中选择一个才能进行下一个单词的复习。在准备安排下一个单词复习时将由 50% 的可能性使该单词是来自 hitList;
第一框架中的今日进度和每日任务量数据都来自于用户数据表,当用户在进行熟识度选择并且下一个单词是来自于 wordList 时,今日进度加一。今日进度的最大值不大于每日任务量否则提示任务已完成信息。当用户未完成昨日任务量时,今日进度会重置为 1,但在安排复习时仍然从昨日未进行熟识度选择的那个单词开始计算。当用户在设置功能模块中重新设置任务量时分为以下几种情况:
复习功能模块演示(白日主题和夜间主题)
统计功能模块是被设计用来直观地反映用户学习情况的 fragment,其统计数据全部来源于数据库并且被实时更新。因此除一定的点击响应事件外(如扇形统计图可以随用户手势进行原地旋转),用户不可以直接对统计图进行编辑或修改操作。其运用了 HelloChart 图形绘制框架,可以描绘除各种漂亮的统计图。通过 HelloChart,本模块包含了用户学习进度扇形统计图,艾宾浩斯遗忘数据折线图和用户学习情况柱形统计图:
统计功能模块演示(白日主题和夜间主题)长截图
词本功能模块也是背诵单词 App 的核心模块之一,其主要功能是用来帮助用户更换当前所学词本,执行这个操作后再回到复习功能模块中会发现今日进度会被重置,但是用户每日任务量保持不变,在统计功能模块中针对当前所学词本的学习进度扇形统计图数据也发生改变。此外词本功能还有“我的收藏”选项以查看所有已收藏词汇并且用户可以任意取消收藏某个单词,还有搜索框以查询数据库中相关词汇和网络查询,这里只介绍最为主要的切换词本功能。词本中的所有数据是预加载的并直接通过 AsyncTask 同步到数据库和应用界面中,但是每个词本未必有单词数据,因为如果将全部数据预加载会出现 API 频繁访问错误。最终解决方案是用户必须要选择一个词汇本,再由 AsyncTask 将对应词汇本中的词汇数据同步到数据库和复习功能模块 fragment 中。当用户是初次使用本应用时,复习功能模块中所有控件都将不可用并且会给出选择词本提示,如图所示;
实现用户选择词本操作也很简单,全部书本列是可以滑动的,并设有点击事件;因此用户只需要直接点击所列词汇本名称即可,此时该功能模块界面会有切换成功提示。当然,如上所述相应的数据也会自动添加并更新到数据库和各大功能模块中。词本功能模块界面如图所示:
词本选择(白日主题和夜间主题)
设置功能模块的功能主要有用户每日任务量设置,用户数据重置和应用主题切换,此外还有用户切换和当前单词本更新功能;其作用分别是:
设置功能模块图例如图所示(白日主题和夜间主题):
用户登录界面:
艾宾浩斯遗忘曲线的实现方式
艾宾浩斯遗忘曲线是有推荐公式的。但是为了系统效率更高,采用取点法使用艾宾浩斯遗忘曲线。在后台数据管理子系统中更新时间戳时,会利用当前时间戳与原时间戳作比较如果差值达到下表数值则更新为当前时间戳并且更新对应的记忆值。时间戳差值更新处理办法如表 4-1 所示:
表 4-1 时间戳差值更新处理办法
差值 | 刚刚 | 15min | 20min | 1h | 8h | 1 天 | 2 天 | 6 天 | 30 天 |
---|---|---|---|---|---|---|---|---|---|
记忆值 | 100 | 58 | 44 | 36 | 34 | 28 | 25 | 21 | 15 |
在复习功能模块中,首先选择与包含在当前书本内的,记忆值小于 40 且大于 0(即已学过且遗忘值大于 60)的单词,并将遗忘值传入击中函数。若该单词被击中则放入 wordList 之中;这样就实现了利用艾宾浩斯遗忘曲线实现对当前词汇本所有已学单词复习的过程。
表名 | 功能说明 |
---|---|
logs | 登录日志表,用户登录成功记录 |
users | 用户信息表,记录具体的用户信息 |
wordlist | 用户词汇数据表,记录用户词汇使用信息和词汇信息 |
booklist | 用户词汇本数据表,记录用户词汇本使用信息和词汇本信息 |
登录日志表
表名 | logs | logs |
---|---|---|
字段 | 数据类型 | 说明 |
user_id | integer | 非空 |
user | text | 非空 |
appkey | text | 非空 |
date_num | integer | 日期 |
用户信息表
表名 | users | users |
---|---|---|
字段 | 数据类型 | 说明 |
user_id | integer | PK |
user | text | 非空 |
appkey | text | 非空 |
class_id | text | 书本 id |
word_position | integer | 默认 100 |
today_progress | integer | 默认 1 |
date_num | integer | 日期 |
theme_night | integer | 1—黑夜主题;;0—白日主题;;默认 0 |
用户
表名 | booklist | booklist |
---|---|---|
字段 | 数据类型 | 说明 |
msg | text | 默认 failure |
title | text | 书本名 |
class_id | text | 书本 id |
word_num | integer | 默认 0 |
course_num | integer | 默认 0 |
existence_item | integer | 1—词汇数据存在;;0—词汇数据不存在;;默认 0 |
用户词汇数据表
表名 | wordlist | wordlist |
---|---|---|
字段 | 数据类型 | 说明 |
word_id | integer | PK,自增 |
msg | integer | 默认 failure |
class_id | integer | 书本 id |
course_num | integer | 默认 0 |
symbol | text | 音标 |
sound | text | 发音地址 |
name | text | 英文单词 |
descrimination | text | 释义 |
favorites | integer | 1—收藏单词;;0—不收藏单词;;默认 0 |
time_stamp | integer | 时间戳;默认 1618674655870 |
memory | integer | 记忆值,默认 0 |
word_operation | integer | 3—熟记;;2—认识;;1—模糊;;0—忘记;;默认 0 |
example_sentence | text | 例句 |
基于Android的背单词软件【源码+文档+答辩PPT】.zip-Android文档类资源-CSDN下载