目录
1、关于本课题
本次设计主要是对大学时间所学的 Android 技术开发 ,数据库等课程的一次巩固复习及应用。本设计根据用户确定的单词本以及在设置中自定义的学习量,要求系统有计划地每天帮用户安排单词复习;用户可以自由选择更换单词本以及重置学习记录;可以通过各大翻译平台提供的 API 查找单词例句,可以了解自己的学习记录和记忆情况,可以自定义系统主题;
2、开发平台
本课题的开发平台为:
-
操作系统:Microsoft Windows 10
-
程序语言:Java,XML
-
IDE 工具:AndroidStudio 4.1.1
-
IDE 插件:Database browser
-
数据库服务器:SQLite
-
其他工具:Android 7.0 以上系统的智能手机或者模拟器
3、系统分析
本章主要对系统构建进行较为详细的需求分析、目标分析和功能分析。
3.1 国外安卓应用发展的现状
据调查,2019 年美国的互联网用户规模已不低于 2.9 亿人,互联网使用率达到 89.4%,每日手机使用的平均时长超过三个小时。在免费应用中比较热门类型为社交类,游戏类,办公类及网络视频类;在付费应用中比较热门类型为工具类及网络游戏类。在 Android 平台,GooglePlay 中拥有庞大的应用程序;其数量和下载量均远超国内任意一家应用商店,由此可见国外使用移动应用程序的大潮早已来临,刺激了更多移动应用程序的开发需求。[17]不同于国内多数开发者在应用程序开发语言的选择上仍然使用 Java 作为开发语言,国外多数开发者普遍选用 Kotlin 作为开发语言。[18]
3.2 国内安卓应用发展的现状
国内的 Android 开发还是主要以应用开发为主,主要分成三类: 为企业开发应用、游戏开发和开发通用应用。
- 企业开发应用,此类应用一般被大规模公司所需求,这些公司主要为自有品牌或者其他品牌设计手机或者平板电脑的总体方案。
- 开发通用应用,这类应用的盈利方式主要有两种:为国外公司进行外包开发,通过内嵌广告获取广告分成以及通过付费购买的形式来盈利 [19]。
- 游戏开发,目前和第二类开发者类似。此类应用通过正确利用大多数用户的各种心理,不仅能使用户对保持应用的新鲜感而且更容易使通过付费购买的方式来盈利。
3.3 系统构建目标分析
背单词 App 的开发,需要用户能够随时地操作用户数据以及对每日任务和各单词出现的词频率自动做出调整,以满足用户高效率背诵单词的需要;因而在安排用户复习时对应单词本中的词频计算尤为重要,本系统目标是按艾宾浩斯遗忘曲线和用户熟识度相结合安排复习的方法来实现用户单词背诵效率最大化[20]。此外,应用还需要实时给出直观的用户熟识度统计和完成情况图:
- 实现熟识度计算词频
对各个单词的熟识度应由用户在复习单词时来自主选择;熟识度包括熟记,认识,模糊和忘记四个选项,每个熟识度将由系统判断在保证今日任务的情况下再次安排复习。保证用户在当天背诵记忆能够更加巩固,牢靠。
- 实现艾宾浩斯遗忘曲线计算词频
本应用充分利用艾宾浩斯遗忘曲线,使用户对非今日任务做一个合理的复习;艾宾浩斯遗忘曲线计算方法只依赖与系统时间戳;被由于艾宾浩斯遗忘曲线而安排用户复习的单词将刷新该单词的遗忘率(这与用户熟识度无关);从而保证用户对过去已学单词的背诵记忆够更加巩固,牢靠。
- 实现学习情况统计
通过数据库统计数据并且利用 API 以图的形式直观地展现给用户。统计图包括当前词本学习进度统计图,艾宾浩斯遗忘曲线图和学习情况统计图;其中学习情况统计图提供用户明确的用户熟识度情况,剩余计划和单词收藏情况。
- 实现用户数据操作
通过用户界面设置达到用户自定义每日任务量,用户学习任务管理和系统主题等目的,进一步提高用户的使用体验和学习效率。
3.4 系统构建功能分析
3.4.1 系统的总体架构
该系统由两个子系统构成:前台展示背单词子系统和后台数据管理子系统。同时主要包含两种 JSON 数据解析和一种 XML 数据解析过程:幽灵背单词 API 词汇本和词汇数据解析,爱词霸词典 API 数据解析。其中幽灵背单词 API 数据解析是关键部分,是全部相关词汇的数据来源。
3.4.2 系统功能模块
前台展示背单词子系统
前台展示背单词子系统简述
- 复习模块:背单词 App 的主要功能,安排用户背诵相应单词,更新用户信息和词汇信息数据库;
- 统计模块:显示用户学习进度扇形统计图,用户学习情况柱状统计图和艾宾浩斯遗忘数据折线统计图;
- 词本模块:变更当前所学习的英语词本,查看收藏词汇和搜索单词;
- 设置模块:设置背单词 App 的主题,每日背诵的单词任务量和操作用户数据;
- 导航栏模块:帮助用户快速切换到对应的功能模块,展示模块切换风格;
后台数据管理子系统
后台数据管理子系统简述
- 用户数据初始化:初始化当前用户信息数据库,包括用户 ID,用户所用词本 ID,用户任务量,用户今日任务进度,时间戳等信息;
- 词汇本数据初始化:初始化全部词汇本信息数据库,包括词汇本数据请求信息,词汇本 ID,词汇本词汇数量,是否存有词汇数据等信息;
- 词汇数据初始化:初始化全部词汇信息数据库,包括词汇 ID,词汇数据请求信息,词汇本 ID,词汇音标,词汇发音地址,词汇名,词汇释义,词汇是否被收藏,词汇时间戳,词汇记忆程度,词汇熟识度和词汇例句等信息;
- 词汇例句初始化:借助爱词霸 API 查询对应词汇的单词例句并更新词汇信息数据库;
3.4.3 应用功能规划图
该系统的主要功能规划如图 3-3 所示,这里展现的只是系统的主要流程的大致环节,详细说明会在后面功能模块的详细设计中涉及。
4、系统设计
4.1 前台背单词展示子系统详细设计
4.1.1 复习功能模块
复习功能模块是展示给用户的第一个 fragment,其工作原理和用户界面是背单词 App 最关键的部分,对是否能激发用户继续使用本应用起着非常巨大的作用。因此,复习功能模块的设计需要重视用户的体验度和美工设计,同时还需要兼具使用方便,信息全面等特点。在复习功能模块中,fragment 主体上从上到下依次分为三个框架,第一个框架显示该用户的今日进度和单词任务量信息;第二个框架是用户对当前单词的操作框架(例如单词收藏,单词发音和熟识度选择等);第三个框架是单词释义,音标,例句等信息。
为了方便叙述,先从第二框架和第三框架开始介绍。
对用户来说,如果不进行任何操作,第二框架和第三框架的可见部分只有单词,单词音标,单词发音和单词收藏。单词的词性,释义,和例句部分以及单词的熟识度选择部分会被完全隐藏起来。本项目将单词例句和单词词性控件上设置点击事件并由提示性点击文字。用户执行相应操作后则会显示第二框架和第三框架的用户熟识度选择,单词词性和单词例句。其中用户熟识度一共有四种选择,分别是熟记,认识,模糊和忘记。单词操作以及熟识度选择的作用如下:
- 熟记:该用户词汇数据表记录对当前单词的熟记标志位,并有 0% 的可能性使该单词在不计今日任务量的情况下再次被安排复习。
- 认识:该用户词汇数据表记录对当前单词的认识标志位,并有 20% 的可能性使该单词在不计今日任务量的情况下再次被安排复习。
- 模糊:该用户词汇数据表记录对当前单词的模糊标志位,并有 40% 的可能性使该单词在不计今日任务量的情况下再次被安排复习。
- 忘记:该用户词汇数据表记录对当前单词的忘记标志位,并有 60% 的可能性使该单词在不计今日任务量的情况下再次被安排复习。
- 单词收藏:该用户词汇数据表记录对当前单词的收藏或取消收藏标志位,可在词本功能模块中的“我的收藏中”再次查看已收藏和取消收藏操作。
- 单词发音:根据词汇数据表中的地址播放真人发音;
在初始化数据时,应用程序将准备 wordList 和 hitList。其中 wordList 中装有今日用户需要完成的所有单词而 hitList 装有所有被击中词汇(在这里将因熟识度而再次被安排复习的所有单词成为被击中词汇,下同)。用户必须在这四种熟识度中选择一个才能进行下一个单词的复习。在准备安排下一个单词复习时将由 50% 的可能性使该单词是来自 hitList;
第一框架中的今日进度和每日任务量数据都来自于用户数据表,当用户在进行熟识度选择并且下一个单词是来自于 wordList 时,今日进度加一。今日进度的最大值不大于每日任务量否则提示任务已完成信息。当用户未完成昨日任务量时,今日进度会重置为 1,但在安排复习时仍然从昨日未进行熟识度选择的那个单词开始计算。当用户在设置功能模块中重新设置任务量时分为以下几种情况:
- 用户新设定每日任务量大于原每日任务量:复习功能模块将会在 wordList 中追加新扩容的词汇并且根据新设定的值更新每日任务量的值;
- 用户新设定每日任务量小于原每日任务量:复习功能模块将会在 wordList 中按顺序从后往前删减多余词汇并且根据新设定的值更新每日任务量的值。如果新值已经小于今日进度则将今日进度重置为每日任务量最大值,并且提示今日任务已完成。但是明日依然从未进行熟识度选择的那个单词开始计算。
复习功能模块演示(白日主题和夜间主题)
4.1.2 统计功能模块
统计功能模块是被设计用来直观地反映用户学习情况的 fragment,其统计数据全部来源于数据库并且被实时更新。因此除一定的点击响应事件外(如扇形统计图可以随用户手势进行原地旋转),用户不可以直接对统计图进行编辑或修改操作。其运用了 HelloChart 图形绘制框架,可以描绘除各种漂亮的统计图。通过 HelloChart,本模块包含了用户学习进度扇形统计图,艾宾浩斯遗忘数据折线图和用户学习情况柱形统计图:
- 学习进度扇形统计图:针对当前词汇本而做出的统计,包含剩余计划词汇量,今日未完成词汇量,已完成词汇量,当前单词本的简要信息和学习进度;
- 艾宾浩斯遗忘数据折线图:德国心理学家艾宾浩斯对遗忘现象做了系统的研究,他用无意义的音节作为记忆的材料,把实验数据绘制成一条曲线,称为艾宾浩斯遗忘曲线。曲线的纵坐标代表记忆保持量,表明了遗忘发展的一条规律:遗忘进程是不均衡的,在识记的最初遗忘很快,以后逐渐缓慢,到了相当的时间,几乎就不再遗忘了,也就是遗忘的发展是“先快后慢”。本项目中每一个单词都有与其对应的记忆值和复习时的时间戳,用来表示艾宾浩斯遗忘曲线的纵坐标。需要说明的是,纵坐标的值只与其对应的时间戳有关。
- 学习情况柱形统计图:针对的是用户所有已学的单词做出的统计。其纵轴是单词数量,横轴包含用户熟识度统计量,单词收藏量和今日剩余未完成量。
统计功能模块演示(白日主题和夜间主题)长截图
4.1.3 词本功能模块
词本功能模块也是背诵单词 App 的核心模块之一,其主要功能是用来帮助用户更换当前所学词本,执行这个操作后再回到复习功能模块中会发现今日进度会被重置,但是用户每日任务量保持不变,在统计功能模块中针对当前所学词本的学习进度扇形统计图数据也发生改变。此外词本功能还有“我的收藏”选项以查看所有已收藏词汇并且用户可以任意取消收藏某个单词,还有搜索框以查询数据库中相关词汇和网络查询,这里只介绍最为主要的切换词本功能。词本中的所有数据是预加载的并直接通过 AsyncTask 同步到数据库和应用界面中,但是每个词本未必有单词数据,因为如果将全部数据预加载会出现 API 频繁访问错误。最终解决方案是用户必须要选择一个词汇本,再由 AsyncTask 将对应词汇本中的词汇数据同步到数据库和复习功能模块 fragment 中。当用户是初次使用本应用时,复习功能模块中所有控件都将不可用并且会给出选择词本提示,如图所示;
实现用户选择词本操作也很简单,全部书本列是可以滑动的,并设有点击事件;因此用户只需要直接点击所列词汇本名称即可,此时该功能模块界面会有切换成功提示。当然,如上所述相应的数据也会自动添加并更新到数据库和各大功能模块中。词本功能模块界面如图所示:
词本选择(白日主题和夜间主题)
4.1.4 设置功能模块
设置功能模块的功能主要有用户每日任务量设置,用户数据重置和应用主题切换,此外还有用户切换和当前单词本更新功能;其作用分别是:
- 用户每日任务量设置:用户任务量设置由用户自定义,是复习功能模块中对用户词汇数据表操作的重要依据;其作用已经在复习功能模块中说明,故此处不在赘述。
- 用户数据重置:该操作将会重置用户数据表和用户词汇数据表中的所有数据,重置后用户将犹如新用户一般不再有任何学习记录,但是相关数据库中的内容不用重新下载和解析。相关的数据变动也会实时同步到统计数据模块中,因此查看统计功能模块内容也是判断用户数据是否已经重置的依据。
- 应用主题切换:有黑夜和白日两种主题可选,引入黑夜主题迎合了 Android 开发的发展潮流和越来越高的用户需求。应用主题切换也是用户数据表中的字段,可根据不同用户需求自动切换到相应主题。
- 用户切换:由于所有的词汇数据来源都来自幽灵数据 API,而 API 提供的用户 ID 和用户密钥已经非常具有唯一性和私密性。故将用户账号和密码直接配置为 API 提供的用户 ID 和密钥。如在词汇本模块功能中所述,可以利用词汇本数据的预加载,初次使用时可在主活动使用加载 fragment 之前判断是否已有登陆状态,若已有登陆状态则直接加载各类 fragment;若无则根据返回数据判断是否可登录成功。若成功则记入用户数据表并加载 fragment 否则予以拒绝登录,不加载 fragment 只停留在主活动的登录页面(图 4-7)。故不再提供用户注册功能。
- 当前单词本更新:此操作将废除当前用户词汇本所对应的用户词汇数据表,然后重新申请 API 数据,重新初始化用户词汇数据表。
设置功能模块图例如图所示(白日主题和夜间主题):
用户登录界面:
代码界面,亲测无误
4.2 后台数据管理子系统详细设计
艾宾浩斯遗忘曲线的实现方式
艾宾浩斯遗忘曲线是有推荐公式的。但是为了系统效率更高,采用取点法使用艾宾浩斯遗忘曲线。在后台数据管理子系统中更新时间戳时,会利用当前时间戳与原时间戳作比较如果差值达到下表数值则更新为当前时间戳并且更新对应的记忆值。时间戳差值更新处理办法如表 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 之中;这样就实现了利用艾宾浩斯遗忘曲线实现对当前词汇本所有已学单词复习的过程。
5、数据库设计
5.1 表汇总
5.1.1 数据库表汇总表
表名 | 功能说明 |
---|---|
logs | 登录日志表,用户登录成功记录 |
users | 用户信息表,记录具体的用户信息 |
wordlist | 用户词汇数据表,记录用户词汇使用信息和词汇信息 |
booklist | 用户词汇本数据表,记录用户词汇本使用信息和词汇本信息 |
5.2 表明细
登录日志表
表名 | 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 | 例句 |
6、源代码
基于Android的背单词软件【源码+文档+答辩PPT】.zip-Android文档类资源-CSDN下载
原文地址:https://blog.csdn.net/vx1271487114
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。