基于艾宾浩斯记忆曲线的单词记忆系统的设计与实现_第1页
基于艾宾浩斯记忆曲线的单词记忆系统的设计与实现_第2页
基于艾宾浩斯记忆曲线的单词记忆系统的设计与实现_第3页
基于艾宾浩斯记忆曲线的单词记忆系统的设计与实现_第4页
基于艾宾浩斯记忆曲线的单词记忆系统的设计与实现_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 毕 业 设 计中文题目基于艾宾浩斯记忆曲线的单词记忆系统的设计与实现英文题目Design and Implementation of the Word-Memory System Based on Ebbinghaus Curve 系 别:计算机科学与技术系专业年级:10级软件工程(专升本)姓 名:吴吕学 号:指导教师:肖蕾职 称:讲师2012 年 5 月 26 日毕业设计(论文)诚信声明书本人郑重声明:在毕业设计(论文)工作中严格遵守学校有关规定,恪守学术规范;我所提交的毕业设计(论文)是本人在 指导教师的指导下独立研究、撰写的成果,设计(论文)中所引用他人的文字、研究成果,均已在设计(论

2、文)中加以说明;在本人的毕业设计(论文)中未剽窃、抄袭他人的学术观点、思想和成果,未篡改实验数据。本设计(论文)和资料若有不实之处,本人愿承担一切相关责任。学生签名: 年 月 日摘 要当前英语地位日趋重要,词汇量成为制约大部分人英语能力的障碍。为帮助人们更加轻松、高效的完成单词记忆过程,本次项目将结合心理学原理设计开发一个基于B/S架构的单词记忆系统。系统主要实现记忆单词的基本功能,如:基于艾宾浩斯记忆曲线的任务进程初始化、进程参数动态更新、记忆曲线每日修正、任务列表动态初始化、动态调整任务推送次序等核心功能。与其他同类系统不同的是,该系统采用了心理学的研究成果,更符合人类的记忆活动,并能够根

3、据用户的操作不断地更新用户的记忆曲线使之更符合用户个性化的记忆能力。系统采用java编程,核心技术涉及:数据库编程、Strut2框架、轻量级数据交换格式JSON、ExtJS的Ajax数据代理模式及界面显示技术。关键词:艾宾浩斯;单词记忆系统;记忆曲线更新ABSTRACTEnglish has being become more and more important, Limited vocabulary is a barrier to so many people. To help people remember words comfortable and more efficient. Th

4、is project applied the psychological principles, design and implementation of system base-on B/S architecture. The system achieve basic function of remember words. The core business includes the following functions. Initialize a user forgetting curve base-on Ebbinghaus Curve.Curves parameters update

5、 dynamically by user operation. Refresh user curve. Generate a review plan by user forgetting curve. Unlike other wordmemory system, This system is base-on Ebbinghaus Curve so it can update Curves parameters dynamically. It means that it becomes more in accordance with humans memory level. This syst

6、em code in Java and it applied technique like: SQL programming, Struts2, JSON, Ajax, ExtJS.Key Words: Ebbinghaus Forgetting Curve;WordMemory system; Refresh user curve目录第1章 开发背景11.1 目的和意义11.2 设计思想11.3 开发目标2第2章 使用技术说明32.1 Struts232.2 SQL编程32.3 AJAX与ExtJS32.4 JSON轻量级数据格式简介4第3章 系统需求分析53.1 引言53.1.1 项目背景

7、53.1.2 假定和约束53.2 系统总体结构图53.3 系统功能模块分解63.3.1 用户模块63.3.2 词库模块63.3.3 记忆曲线模块73.3.4 复习计划模块73.3.5 复习模块及浏览模块8第4章 系统概要设计94.1 系统设计思想94.2 系统总体设计94.3 系统工程分离94.4 系统类结构设计104.4.1 数据模型104.4.2 DAO层104.4.3 业务逻辑层114.4.4 控制层114.5 数据库设计124.5.1 E-R模型124.5.2 物理模型14第5章 核心业务逻辑介绍175.1 核心业务逻辑层简述175.2 记忆曲线的相关业务逻辑详解205.2.1 记忆曲

8、线初始化205.2.2 记忆曲线参数更新205.2.3 记忆曲线更新215.3单词复习的业务逻辑详解235.3.1 任务列表初始化235.3.2 复习单词的过程245.4 单词卡片式浏览时的业务逻辑详解265.4.1 文字说明265.4.2 选择这种方式的原因275.4.3方法的优点27第6章 系统实现286.1 核心模块实现效果及说明286.1.1 首页286.1.2 复习模块页面286.1.3 单词浏览页面296.1.4 数据分析306.2 新技术应用316.2.1 Extjs、Ajax、JSON31第7章 系统测试347.1 测试对象和要点347.2 测试环境347.3 测试用例34第8

9、章 结论与展望378.1 结论378.2 展望38结束语39致 谢40参考文献41第1章 开发背景1.1 目的和意义目前英语地位日趋重要,单词的词汇量是一个人英语能力及水平极大的重要体现, 而背单词依旧是困扰许多人的地方,原因如下:英语单词多而繁杂,面对整整一本的单词词典人们总是望而却步,不从何入手。开始记忆以后没有安排恰当计划,零散的记忆,效率低下,久而久之看不见成果,便缺乏动力。根据双重遗忘理论,人们不仅仅是忘记了单词本身,还会忘记了今天自己该复习什么单词1,双重遗忘让我们错失了将单词从短期记忆转化成长期记忆的机会。背单词的行为本身涉及到两个概念“记忆”和“遗忘”。记忆是将需要记忆的元素在

10、大脑中形成一种记忆的链结。它是学习的过程。艾宾浩斯曾提出,记忆可以分为瞬时记忆、短时记忆和长期记忆2。遗忘是指记忆元素之间的链结弱化甚至消失,导致人们对某个记忆元素不再回忆起来。记忆和遗忘相互制衡并存,但它们是有规律的,这就是著名的“艾宾浩斯遗忘原理”也就是“记忆曲线”或者“遗忘曲线”。众所周知,要记住一样东西必须反复的复习重复,才能达到牢记状态,而艾宾浩斯遗忘原理告诉我们遵循记忆与遗忘的规律进行复习,将会事半功倍。鉴于以上种种原因,本次项目设计了基于艾宾浩斯记忆曲线的单词记忆的系统,通过它,可以解决人们背单词的困扰,系统能够每天提供新增单词交由用户记忆,可以动态的根据“记忆曲线”将你最该复习

11、的单词呈现给你,将极大的提高人们记忆效率。1.2 设计思想该系统为Web项目。将采用MVC的设计模式,基于B/S架构,使用Eclipse作为开发工具、MYSQL作为数据库实现。其实现语言涉及:Java、SQL、Javascript、html等等。项目涉及的技术思想包含:三层架构、Struts2框架、JSON数据格式、ExtJS、Ajax、前台数据代理技术。后台项目的设计采用三层架构,将业务逻辑与数据库操作做分层处理,业务逻辑层不直接参与数据库操作的相关工作,它将通过调用数据库操作层实现对数据库的访问3。业务流程的具体实现则通过业务逻辑层方法的相互调用实现。前台的项目的实现采用Struts2框架

12、,通过核心过滤器过滤页面请求,使其调用相应后台业务逻辑进行数据采集与处理,再通过Struts2流转控制机制进行页面流转控制反馈给用户显示。1.3 开发目标该系统将主要实现以下几个目标与功能:1. 帮助用户实现信息化管理自己记忆单词的日程安排。2. 提供友好的界面供用户复习浏览单词、查看数据分析。3. 根据艾宾浩斯记忆曲线原理生成用户记忆曲线。4. 根据用户操作动态修正用户记忆曲线参数。5. 根据用户记忆曲线动态调整复习计划。6. 根据用户复习计划初始化任务列表。7. 实现任务单词推送次序调整动态更新。系统通过实现以上几个核心功能,达到提高用户记忆效率的效果。并在开发过程中使用较为新颖的技术及设

13、计思想。力求项目的创新性与可靠性。第2章 使用技术说明2.1 Struts2本系统中前台UI的控制流转全部由Struts实现,故而在此对其进行简单的介绍。Struts2是Struts与WebWork合并后的产物,它的最大亮点便是抛弃了Struts1中惹人厌的ActionForm Bean。Struts2对MVC模式的诠释更加的干净利落,HTTP请求到达核心控制器之后,经过处理直接找到Action对象,执行完相应代码,然后返回设定好的视图回到浏览器。整个流程清晰明了,简单易懂,只要学会了配置struts.xml文件。就可以轻松的完成UI页面流转的控制。同时Struts2提供了丰富的标签库,可以更

14、高效的完成数据的处理4。2.2 SQL编程考虑到业界对ORM组件效率的质疑5 。本次毕业设计将所有的数据库操作都使用SQL编程,故在此对其进行简单介绍。SQL如今被广泛的采用很好的证明了它的价值,SQL是非过程化语言,这里提到的非过程化、过程化不同于面向对象和面向过程的概念,所谓过程化就是,我们必须告诉机器每一步需要干什么,该怎么干。开发人员虽然没有参与计算,但是机器执行的流程开放人员都了如指掌,而非过程化语言只需要告诉机器做什么即可,具体机器如何实现,开发人员不必关心,比如最简单的查询语句,我们只需要告诉机器我们要查什么,具体怎么查?交给机器去实现。所以非过程化语言在完成复杂任务的检索的时候

15、具有不可比拟的优势,我们只需要告诉机器我们想要的东西就可以了。而过程化语言我们必须事必躬亲,去安排具体的流程和实现过程6。前文提到ORM组件的效率问题,这里不得不提到SQL的另一个特性,轻松嵌套,每条SQL语句的输入输出。并且其输入输出的都是同一种类型的对象(记录集),这意味着SQL语句具有嵌套的特性,可以通过多个SQL语句嵌套完成更为复杂的功能,而这些功能若是用其他语言将会极其繁琐。综合上述几点,本次项目中决定采用SQL编程完成所有与数据库的相关的操作。2.3 AJAX与ExtJSExtJS是一种用于创建前端用户界面的框架,它同时也是一种基本与后台技术无关的前端Ajax框架。他提供了几乎所有

16、的对于列表的操作,另外它有着良好的界面和一系列封装好的组件供你使用 7。它同时提供了利用AJAX技术读取数据的数据代理功能,支持JSON格式的读取功能。2.4 JSON轻量级数据格式简介JSON(JavaScript Object Notation) 它其实是一种轻量级的数据交换格式。它是基于JavaScript的一个子集。 JSON采用了完全独立于语言之外的一种文本格式,但也包含了一下C家族的某些习惯(包括类似C+,C,Java, JavaScrip等等)。这些特性使得JSON理所当然的成为一种理想的数据交换语言。因为它不仅仅易于人的阅读和编写,同时也易于机器的解析和生成8。第3章 系统需求

17、分析3.1 引言3.1.1 项目背景随着英语的地位日趋重要,很多人为了学好英语而绞尽脑汁,单词的词汇量是一个人英语能力及水平极大的重要体现,如何提高词汇量,如何提供记忆的效率成了人们关注的重心,大家都在寻找最省时最省力的方式来记忆单词。德国实验心理学家艾宾浩斯早在上世纪初就通过实验心理学的方式参透了人类记忆与遗忘的规律,并且发布了他的研究报告。但是却并没有被大多数人所了解,所以许多人在找寻的完美的记忆方式,其实前人已经给出了答案,时代变迁,如今的科技已经可以让机器帮我们解决许多问题,如何通过程序让百年前前人的智慧绽放光芒,解决现在人们的困难成了程序员的任务。为了帮助人们更加轻松高效的完成单词记

18、忆的过程. 本次项目将结合心理学原理设计开发一个基于B/S架构的单词记忆系统。本系统主要单词记忆将实现以下几个功能:一、用户记忆曲线生成、调整功能。二、用户复习计划生成、调整功能。三、用户任务列表生成、调整功能。四、用户单词复习、浏览功能。同时,为了提高自身能力,在系统设计的整个过程中,将尽可能的合理使用新的技术和未曾使用的框架组件。例如:通过ExtJS的数据代理利用Ajax实现部分前后台数据JSON格式交互等等。3.1.2 假定和约束开发期限:系统预期的开发期限为60天。开发环境:JDK1.6。开发工具:Eclipse。数据库:MYSQL。操作系统:Microsoft Window 7。3.

19、2 系统总体结构图单词记忆系统由词库模块、复习计划维护模块、复习模块、浏览模块、用户模块等子模块构成。每个子模块都具有特殊的操作方法和其特有的业务逻辑。系统总体结构图如图3.1所示:图3.1 系统总体结构图3.3 系统功能模块分解3.3.1 用户模块模块描述:用户模块提供了用户登录验证等基本功能,用户可以通过用户名及密码登录系统、可以设置每日新增单词数量等等。用户模块用例图如图3.2所示:图3.2 用户模块用例图3.3.2 词库模块模块描述:管理员通过词库模块进行词库的浏览、添加和修改操作,管理员可以选择手动添加单个单词,也可以使用XML文件进行批量添加,内部业务逻辑会自动判断词库中是否已经有

20、该单词内容,若该单词已在词库中存在将跳过该单词继续插入下一个单词。管理员还能对词库中的单词进行修改删除这些基本操作。词库模块用例图如图3.3所示:图3.3 词库模块用例图3.3.3 记忆曲线模块记忆曲线模块用例图如图3.4所示:图3.4 记忆曲线模块用例图模块描述:记忆曲线的相关操作(如:初始化、参数修正、曲线更新)均由系统完成,触发相应业务逻辑时自动执行,用户不参与其中。(具体业务的实现参见“第5章 核心业务逻辑介绍”)。3.3.4 复习计划模块模块描述:复习计划模块是指复习计划中单词的管理工作,与处理复习行为的功能模块是两种不同概念,请注意区分。用户登录后,可以执行的操作有:浏览词库中没有

21、加入自己复习计划中的单词,添加词库中的单词到复习计划,删除自己复习计划中的单词。这里不提供修改复习计划的功能,若提供用户修改复习计划功能,与系统的业务逻辑不合。复习计划中单词复习进度等信息的调整由系统根据用户复习单词时的操作自动更新(复习计划的调整更新操作将在“第五章 核心业务逻辑介绍”中详细阐述)。复习计划模块用例图如图3.5所示:图3.5 复习模块用例图3.3.5 复习模块及浏览模块此部分内容为核心模块,其内容及流程,将在第5章“核心业务逻辑介绍”中详细阐述。第4章 系统概要设计4.1 系统设计思想采用敏捷迭代式开发,使得该系统的开发是一个逐步求精的过程9,即开发随着需求和新的业务变化而不

22、断完善。由于该项目是以学术学习为目的,将不考虑商用因素,在合理的情况下将选择当前最新的技术(项目所有引用的第三方组件框架等,皆是官网下载的最新版本),目的是以便成文后,可为他人在开发类似项目时提供绵薄的帮助与借鉴。所以整个项目的设计过程中,贯彻如下的设计思想:创新:将选用时下最新的技术、工具、框架、组件,使得该系统在一定时间内有一定的学术讨论价值。求精:一个好的方法和流程设计,比无数个System.out.print();要更有价值。将更多的精力投入到代码的设计上去而不是功能的简单堆砌、重复。4.2 系统总体设计本系统采用时下非常流行的三层架构(MVC)设计,可以这样说几乎所有的Web应用开发

23、都是基于MVC设计模式的10。在MVC设计模式中C(Controller)即控制器负责接收(监听)所有的请求(消息),M(Model)模型,用于表示要被显示的数据和操作,V(View)视图,就是页面可以是html也可以是jsp等等,它负责将Model以某种形式呈现给用户。在本次项目中的MVC三层架构设计中,struts2扮演着Controller的角色,service层和其调用的数据模型,数据库操作类都属于Model。前台页面就是View层。4.3 系统工程分离本次系统采用前后台系统分离的开发方式,将前后台分离成两个工程,WordMemory是后台工程,WordMemoryUI是前台工程。前台

24、工程通过引用后台工程来处理数据,它只提供页面流转控制和业务逻辑调用,所有数据的具体实现及操作将在后台工程中实现。系统工程分离的好处:这意味着在实现前台的时候不需要关心后台的实现,若是多人开发,将大有裨益。必要时,更换前台工程就可以以另一种方式呈现UI及前台页面流转方式。此外,将前后台分离后,出现BUG时易定位出错位置。前后台工程分离结果如图4.1所示:图4.1 工程目录图4.4 系统类结构设计4.4.1 数据模型本次项目将所有需要操作的实体抽象成数据对象,也称之为数据模型。该包存在于后台工程中,该包中存放着系统中所有数据模型,为其他层提供抽象过后的类。将该包中的类实例化后便可以操作对象的方式进

25、行数据操作。每个model类中都提供了属性的get(),set()方法(接口)供程序访问。Model包内容如图4.2所示:图4.2 model包4.4.2 DAO层本次项目中将所有与数据库操作相关的方法都集成在该包的类中,DAO层将与数据库的交互集中管理,方便业务逻辑层的调用。该包存在于后台工程中,包含针对不同数据模型的数据库操作类,提供了诸如:增删查改等相关的与数据库操作有关的方法。将其独立分包有利于厘清层次结构,将DAO层完成后,将不需要再操心底层数据库操作的方法。调用即可。DAO层中的类如图4.3所示:图4.3 Dao层考虑到每次对数据库的操作都需要创建与数据库的连接,为了降低系统负担及

26、遵循代码复用的原则,将建立、使用、释放数据库连接的方法集成成一个数据辅助类,它为DAO层各类提供数据库连接和获取Statement、 PreparedStatment对象,关闭连接等方法。DAO层访问数据库辅助类方法如图4.4所示:图4.4 数据库辅助类4.4.3 业务逻辑层本次项目将系统涉及的业务逻辑集成在一个层次中,称之为业务逻辑层。该层存在于后台工程中,包含了系统所有业务流程,每个类中的方法均代表了该业务逻辑的各项操作,将其组合就可以完成需求中要求的功能,如:提供单词复习的TestProcessService类中调用了MissionService中的Init()方法用于在单词复习前对任务

27、列表初始化等等。业务逻辑层中的类如图4.5所示:图4.5 业务逻辑层4.4.4 控制层控制层的主要实现依托于Struts2提供的方法,它的主要功能是控制页面的流转及根据用户操作选择相应的业务逻辑层中的方法处理数据,并将处理结果返回给预习定义好的返回页面,完成人机交互过程。该包在前台工程中,利用Struts2框架控制页面流转,调用业务逻辑层中的方法处理数据。控制层中的类如图4.6所示:图4.6 控制层4.5 数据库设计4.5.1 E-R模型根据前文对系统需求和业务逻辑的分析,可以了解单词记忆系统中实体与实体之间的关系。而实体联系图(E-R图)正是直观表现这种关系的好方法12。本系统中的实体联系图

28、,如图4.7所示。图4.7 单词记忆系统实体-联系图实体图可以展示各个实体中所包含的属性12。为开发数据库提供依据。下面将利用实体图一一介绍系统中的各个实体,不再用文字赘述:用户实体图如图4.8所示。图4.8 用户实体图词库中的单词实体图如图4.9所示:图4.9 词库中单词实体图用户单词实体图如图4.10所示:图4.10 用户单词实体图任务单词实体图如图4.11所示:图4.11 任务单词实体图记忆级别实体图如图6.6所示:图4.12 记忆级别实体图4.5.2 物理模型经过上述的分析和设计,结合数据库设计的相关原则,设计出如下几张表结构:用户表(_user)主要用于存放用户信息及基本参数,主要结

29、构如表4.1所示。表4.1 用户表字段名字段类型字段大小是否可为空关键字说明idint11否是用户编号nameVarchar45否是用户姓名passwordVarchar45否用户密码hasinitdatetime最近一次更新任务时间newwordnumint11每天新增单词数单词表(_word)主要用于存放单词最基本的信息,其中包括了单词、翻译、音标。系统中所有可使用的单词都必须存在其中。使用单词时根据单词的id到该表中查询单词的相关内容,其主要结构如表4.2所示表4.2 单词表字段名字段类型字段大小是否可为空关键字说明idint11否是单词编号wordVarchar45否是单词内容tran

30、sVarchar500单词翻译phoneticVarchar10单词音标用户单词表(_userword)如表4.3所示,用于存放与用户相关的单词,该表中的单词相当于进入了用户的复习计划,它通过wordid与单词表连接,以便获取单词的内容。表4.3 用户单词表字段名字段类型字段大小是否可为空关键字说明idint11否是用户单词useridint11否用户编号wordidint11否单词编号testtimesint11复习次数righttimesint11正确次数levelint11记忆等级startdatedatetime进入复习计划的时间nextdatedatetime下次复习的时间任务单词表

31、(_mission)如表4.4所示,用户存放当天复习任务。表4.4 任务单词表字段名字段类型字段大小是否可为空关键字说明userwordidint11否是用户单词编号useridint11否用户编号priorityint11否任务推送次序sortVarchar45新旧单词标识firsttimeint1是否是当天第一次出现记忆级别表(_level)如表4.5所示,用于存放用户记忆级别的相关信息。表4.5 记忆级别表字段名字段类型字段大小是否可为空关键字说明idint11否是用户单词编号useridint11否用户编号levelint11否记忆等级字段名字段类型字段大小是否可为空关键字说明test

32、timesVarchar45测试次数righttimesint11答对次数countint11该级别下次出现时间的偏移量第5章 核心业务逻辑介绍5.1 核心业务逻辑层简述涉及的核心业务逻辑的类有:LevelService、MissionService、TestProcessService、UserwordService。LevelService.java(记忆曲线的业务逻辑):该业务逻辑提供所有对用户记忆曲线的参数调整,曲线更新等业务需求的操作方法和流程,这些方法通过调用Dao层相应的实现完成业务逻辑内容。图5.1展示了LevelService中的方法:图5.1 LevelService中的方

33、法MissionService.java(任务列表的业务逻辑):该业务逻辑集成了任务列表的业务需求。提供了相应的实现方法,系统只需要调用相应的方法即可实现想要的业务逻辑。图5.2展示了MissionService中的方法:图5.2 MissionService中的方法TestProcessService.java(单词复习行为的业务逻辑):该业务逻辑实现了复习单词的业务需求,它其中的许多方法是通过调用MissionService中的方法实现的。控制层在执行复习单词的业务需求时不需要直接调用MissionService层中的方法,该业务逻辑相当于对MissionService做了业务流程上的二次

34、封装,从而简化了控制层Action中繁琐的调用。它还实现了复习过程中动态调整推送顺序的主要业务逻辑。图5.3展示了TestProcessService中的方法:图5.3 TestProcessService中的方法UserwordService.java(复习列表操作逻辑):该业务逻辑是MissionService、TestProcessService中涉及复习计划操作的基础。所有涉及更新到复习计划的操作都是通过调用该业务逻辑实现。图5.3展示了UserwordService中的方法:图5.4 UserwordService中的方法5.2 记忆曲线的相关业务逻辑详解5.2.1 记忆曲线初始化当

35、添加用户的时候,系统自动为用户初始化记忆曲线。原始记忆曲线数据来源于艾宾浩斯记忆曲线。采用表驱动法实现下标获取指定信息11。(特别说明,由于涉及到记忆曲线更新策略,程序中插入代码不包含各个级别的测试次数和回答正确次数,此部分交由数据库默认插入,默认值分别是 测试次数100,回答正确次数85。原因是为了在用户使用前期保证各部分正确率在80%-90%之间,通过用户不断地操作,直到正确率下降或升高出边界再采取相应操作)。记忆曲线初始化流程图如图5.5所示:图5.5 记忆曲线初始化流程图记忆曲线初始化核心代码如图5.6所示:图5.6 记忆曲线初始化核心代码5.2.2 记忆曲线参数更新系统首先获取该单词

36、所在的记忆级别,然后根据用户是否记得该单词的回答情况,更新该用户在该级别的具体测试情况(包含测试次数和答对次数,其他模块可由此得出该级别的平均正确率,刷新用户记忆曲线的模块中就需要用到此参数)。记忆曲线参数更新流程图如图5.7所示:图5.7 记忆曲线参数更新流程图记忆曲线参数更新的核心代码如图5.8所示:图5.8 记忆曲线参数更新核心代码5.2.3 记忆曲线更新系统一次性获取用户所有记忆级别的信息。通过遍历,逐个更新记忆级别中的内容。当所有级别全部更新完毕时,用户记忆曲线更新结束。其中需要判断的内容包括正确率是否在合理范围内、正确率是小于80%还是大于90%(系统初始化时为:85%)、该级别是

37、初级阶段还是中后期阶段(不同阶段调整的时间单位和跨度并不相同)等等。记忆曲线更新流程图如图5.9所示:图5.9 记忆曲线更新流程图记忆曲线更新核心代码如图5.10所示,它包含了图5.9中的记忆曲线更新流程中的大部分方法,前文提到的“不同阶段调整的时间单位和跨度并不相同”的操作方法,在该核心代码中并未体现,原因是,根据记忆级别调整时间单位与跨度的操作并不在记忆曲线更新的业务逻辑中,此判断与执行方法在复习单词的业务流程中,故在此不作阐述。图5.10 记忆曲线更新核心代码至此,关于记忆曲线的相关核心业务逻辑已经介绍完毕,其中有些细节和方法调用出于篇幅考虑并未展示,读者可以通过阅读源码进一步了解。5.

38、3 单词复习的业务逻辑详解5.3.1 任务列表初始化如图5.11所示,任务列表初始化的流程如下:通过获得用户表中的时间标识,判断当天用户是否已经向任务列表更新了新单词,若没有则更新标识,则搜索新单词插入,若当天已经添加了新单词则不作操作,执行下一步复习计划中到期单词的初始化,获取所有到期的复习单词插入任务列表。至此,用户任务列表更新完毕。该业务逻辑并不关心最终是否有单词进入任务列表,若任务列表在执行用户初始之后仍为空,则说明该用户当前并没有单词需要记忆。控制层Action发现并无返回值则控制页面跳转至相应提示页面。用户任务列表初始化流程图如图5.11所示:图5.11 用户任务列表初始化流程图5

39、.3.2 复习单词的过程图5.12展示了获取任务列表中单词的方法:图5.12 获取单个单词的方法如图5.12所示,Service层中提供了getMission方法获取单个单词,该方法除了必须的用户id外,还带有一个可选参数Sort可以切换从任务列表中获取新单词还是旧单词。复习单词时用户可选的操作如图5.13所示,当用户选择记得或不记得后,两种操作会在sort参数上进行区分,以便程序判断用户操作选择相应的处理方式。用户操作后,该单词进入更新阶段。图5.13 前台页面提供的两种可选操作在提交单词的这个方法中,每个业务逻辑类中都对单词进行了判断和操作,业务逻辑层根据用户操作选择相应的业务逻辑和操作的

40、方式,比如将该单词的记忆进程前移,比如删除任务列表中该单词的副本等等。图5.14展示了复习过程中用户复习计划单词更新的流程图:图5.14 复习过程中复习计划单词更新的流程图图5.15展示了复习操作中更新复习单词的核心代码。它实现了图5.14中展示的业务逻辑中的所有方法。图5.15 TestProcessService中更新复习单词的方法核心进程进程中获取用户记忆曲线并根据记忆曲线内容更新单词下次出现时间的内容,图5.16展示更新下次出现时间的核心方法:图5.16 更新下次出现时间的方法以上,是单词复习的核心业务流程介绍。5.4 单词卡片式浏览时的业务逻辑详解该部分的业务逻辑在细节上的思考值得讨

41、论。图5.17展示了其中核心代码:图5.17 单词卡片式浏览核心代码5.4.1 文字说明在UserWordDao层中此方法提供了根据用户不同的操作选择相应查询语句,图中“PRE”是常量辅助类定义的常量值为字符串“pre”,是为了防止参数错误而特意设定的。图中的方法通过判断用户自定义参数选择获取当前显示单词的id的前一个或者后一个单词。5.4.2 选择这种方式的原因由于用户复习计划中单词是id并不一定是连续的.如果采取指定id的方式直接获取,将有可能出现如下情况:数据库中用户复习计划里有两个单词,单词编号分别为2和4。当前单词编号为2,我们想获取下一个单词,根据需求我们应该得到单词编号为4的单词

42、,然而简单的将用户编号自增后再查询是得不到单词编号为4的单词的。所以存在异常的查询结果为空的情况。5.4.3方法的优点图5.18展示了获得用户单词的方法,从中可以看出,初始查询时不带单词编号,系统默认按照单词编号设为0,用户自定义参数设为next。程序将从0开始寻找用户编号最小的一个单词,其优点在于。它不需要先查询出一个单词编号最小的单词就能拿到用户复习计划中id最小的单词。虽然SQL语句能够嵌套,但为此多写一个专用方法,并不是好的解决方案。这样的实现还能为Action层中减少因为错误参数而出现bug的几率。图5.18 获得用户单词的方法 第6章 系统实现6.1 核心模块实现效果及说明6.1.

43、1 首页图6.1展示了项目完成后首页的界面。首页提供了用户各项操作接口。图6.1 首页6.1.2 复习模块页面图6.2展示了复习单词时每个单词呈现的样式,一个遮罩区将单词的中文释义遮住,用户根据显示的英文回忆该单词的中文意思,然后单击遮罩区域,遮罩消失,显示中文释义,用户检查是否和自己记忆中的一样。用户单击遮罩区域后的界面如图6.3所示。用户可以选择点击记得或者不记得来完成该单词的操作。无论选择什么,系统内部都将对单词进行更新。唯一的区别是,选择记得后,该单词从当前任务列表中删除,选择不记得,系统只是调整该单词在任务列表中的推送次序,它将再次出现,直到任务列表中的单词全部被用户选择为记得为止。

44、复习结束。图6.2 单词初显图6.3 释义显示并提供操作接口6.1.3 单词浏览页面单词浏览页面提供了用户浏览单词的页面,用户可以选择是卡片浏览模式(如图6.4所示)还是列表式浏览(如图6.5所示),卡片式浏览提供了逐个浏览复习计划总单词的功能,列表式浏览则提供了复习计划中单词的一览。其中列表式浏览中使用到了ExtJS的数据代理及JSON技术,通过AJAX的方式向一个url请求数据,该数据在Action中被重建成一个JSON的字符串格式数据传递到前台,前台JS代码根据JSON字符串将其转换成对象进行操作。该方法提供了前台对象化操作数据的新模式。较之传统 OGNL在服务器端操作对象再到前端显示的

45、手段,可以大大减少前后台的数据交互。提高系统性能。图6.4 卡片浏览模式图6.5 列表浏览模式6.1.4 数据分析数据分析中包含了两个页面,图6.6展示的是当前用户复习计划中各类单词的分布情况,图6.7展示的是用户使用系统以来的单词记忆情况。前者通过饼图展示了不同类别的单词占用户复习计划中单词的百分比。后者则通过柱状图展示了用户一年12个月中每个月新增的熟记单词数。图6.6 当前用户复习计划中各类单词分布情况图6.7 用户使用该平台以来单词记忆情况 6.2 新技术应用6.2.1 Extjs、Ajax、JSON为了体验JSON这种轻量级的数据交换格式。本系统将单词浏览页面中列表模式和数据展示模式

46、使用了Extjs中的数据代理功能及ajax技术实现了前后台的数据交换13,其中传输的数据格式就是JSON。技术概述:前端JS代码:(定义了dataStore,其数据代理属性设置为ajax),请求地址为字符串类型的变量(urlstr)其中存着一个自定义的Action地址。具体代码如图6.8所示:图6.8 前端JS代码Extjs的数据代理将会自动为我们请求该地址。请求方式是ajax.这是Extjs4.0的新方式。图6.9展示了利用firedebug调试的请求结果:图6.9 请求结果展示图6.10展示了服务器端Action中将对象转化成JSON格式的实现方法。通过JsonHelper的getJson

47、FromList方法将得到的对象列表转换成JSON格式的字符串用于数据传递。图6.10 服务器端将对象转换成JSON的方法通过上述方法可以将对象转化成JSON格式。JSON格式大致如下,其将用户的属性转化成字符串格式供其他方面解析。results:10,items:name:用户1,”password”:”22”,name:”用户2,”password”:”22”。由于得到的JSON字符串长度很大,篇幅有限,故手写了简单格式提供参照。 得到JSON字符串格式之后,要在返回页面将其获取,我配置的struts.xml中将返回页面配置userworddata.jsp,图6.11展示了userword

48、data.jsp中的内容。图6.11 接受数据的返回页面内容(提示:我曾经担心请求时当前页面会跳转Action返回的目标页,从而导致显示错误,这个理解是错误的,其实数据代理的机制并不会实现页面的具体跳转。它拥有ajax的特点。)至此,数据对象可以完整取出到当前页面,并装载在Stroe中,我们可以对Store进行操作。第7章 系统测试7.1 测试对象和要点软件的测试是软件生命周期中一个重要环节14,由于本系统分为两个前台和后台两个项目,后台项目是由测试驱动开发,每个主要的核心流程都事先用Junit写好了测试用例,部分采用了Junit断言作为测试手段。每写好一个方法都会在测试用例上运行一遍检验是否

49、正确完成,边开发边测试。所以,本项目所有后台程序的的白盒测试都已完成,功能可以实现,并无重大BUG。基于以上几点,本章测试内容将着重于前台项目的黑盒测试。图7.1展示了测试用例文件夹中的内容:图7.1 测试用例包一览7.2 测试环境硬件:CPU:酷睿双核 1.86GHz 。内存:2GB。软件:Firefox、Windows 7旗舰版。服务器:tomcat6.0。7.3 测试用例表7.1的测试用例用户测试复习模块是否能够正常工作。表7.1 测试用例一项目名称基于艾宾浩斯记忆曲线的单词记忆系统程序版本编制人吴吕编制时间2012-5-10 功能模块名复习模块功能特性提供单词复习测试目的确认复习模块可

50、以正常工作预置条件打开到首页用例编号测试步骤输入数据预期结果测试结果001点击复习单词无跳转显示当前需要复习的单词数,若没有单词需要复习则显示相应页面成功002点击”单击显示释义”按钮无释义遮罩消失,显示释义成功003单击”记得”按钮无弹出下一个单词,同时右上角当前记忆单词数+1成功004单机”不记得”按钮无弹出下一个单,,右上角单词记忆单词数不变成功005不断点击”记得”,直至完成所有单词记忆无显示完成记忆页面成功表7.2的测试用例测试了用户浏览单词模块的相关功能表7.2 测试用例二项目名称基于艾宾浩斯记忆曲线的单词记忆系统程序版本编制人吴吕编制时间2012年5月10日 功能模块名浏览模块功

51、能特性提供单词浏览测试目的确认浏览模块可以正常工作预置条件打开到首页用例编号测试步骤输入数据预期结果测试结果001点击”单词浏览”无显示卡片浏览模式成功002点击”单击显示释义”按钮无释义遮罩消失,显示释义成功003单击”上一词”按钮无若是当前单词第一个单词,则不变。若不是第一个,则显示前一个成功004单击”下一词”按钮无显示下一个单词,若是最后一个,则不变成功005单击右上角列表图标无跳转至列表浏览模式,并正常显示全部单词成功测试结论:通过设计两个核心模块的测试用例对本系统进行简单黑盒测试,可以看出系统功能测试基本正常。但确实发现了一些问题,然而这类问题多数是UI的显示问题,涉及到浏览器的兼

52、容性等等,并不是本次项目的重点。将会在后续的开发中逐渐完善。第8章 结论与展望这一章节将对这一阶段本次毕业设计中收获的经验与项目的完成情况做一个总结性的陈述。同时将对该系统未来的研究方向和实现手段做初步的展望。8.1 结论设计思路上:该系统基于MVC设计模式的设计思路是正确的。它能够直观合理的将系统分成相应层次。在实际开发过程中容易定位到自己需要的位置进行编码和调整。层次分明的目录结构也利于测试阶段的维护,其次,由于层次已经进行划分,开发过程中只要任意一条业务流程顺利跑通,剩下的工作就可以以该业务逻辑作为标准样本进行参考开发。极大的提高了开发效率。开发方式上:由测试驱动开发的开发方式在本次毕业

53、设计中被证明是一种非常高效的开发方式。根据需求先写好测试用例,针对测试用例中需要的方法进行编码实现。每完成一个方法就可以立刻进行测试。开发人员可以立刻知道该方法是否正常实现。在心理上也有助于开发者提高信心,毕竟,眼见自己的项目一点一点的完成是非常有成就感的事情。技术的选择:本次项目的设计思想是尽可能的使用新技术新方法,这对于编程人员来说是一个极大的考验,尤其是一般来说最新的第三方框架和组件并没有相应的中文API文档,这就需要开发人员有较高的英语阅读水平和理解能力。也需要开发人员有比较强的耐心,能够一点一点的尝试。版本的控制:相信大多数人并没有关注版本控制。然而在本次设计中严格贯彻了SVN版本控

54、制的相关行业标准,每次文件的修改提交都做了较为详细的描述和备注。本次设计中通过VisualSVN在本机搭建了一个SVN服务器。在SVN库中建立了该项目的资源库。里面包含了branches、tags、trunk三个文件夹。trunk文件夹作为项目主干,一般不再其上进行开发操作,具体的开发工作在branches文件中的相关版本中进行,只有当测试稳定才将其合并到trunk版本中。而tags文件夹中则存着每个阶段的项目副本。方便回溯。时间的控制:“程序员的效率会随着deadline的临近而直线上升”这句话很好的描述了一些开发人员的状态。缺乏良好的时间管理手段,最后一定会手忙脚乱。做好时间的控制,每天都为明天安排好必须完成的任务,诸如实现某个方法、查找什么资料能够有效的提供时间的利用率。以上便是这次项目中的结论与总结。8.2 展望第一、该项目未来的发展方向除了完善记忆曲线的修正算法外,可以在业务上进行拓展,不应该局限于英语。第二、本次设计大部分实现是通过前后台不断的交互来完成,每次操作都需要进行前后台的数据交互,如果这个实现方式不修改的话,下一阶段则需要考虑数据库连

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论