下载

0下载券

加入VIP
  • 专属下载券
  • 上传内容扩展
  • 资料优先审核
  • 免费资料无限下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 基于艾宾浩斯记忆曲线的单词记忆系统的设计与实现

基于艾宾浩斯记忆曲线的单词记忆系统的设计与实现.doc

基于艾宾浩斯记忆曲线的单词记忆系统的设计与实现

工夫被悄悄踏碎无法拼全
2018-03-08 0人阅读 举报 0 0 0 暂无简介

简介:本文档为《基于艾宾浩斯记忆曲线的单词记忆系统的设计与实现doc》,可适用于领域

基于艾宾浩斯记忆曲线的单词记忆系统的设计与实现中文题目基于艾宾浩斯记忆曲线的单词记忆系统的设计与实现英文题目DesignandImplementationoftheWordMemorySystemBasedonEbbinghausCurve系别:计算机科学与技术系专业年级:级软件工程,专升本,姓名:吴吕学号:指导教师:肖蕾职称:讲师年月日诚信声明书毕业设计(论文)诚信声明书本人郑重声明:在毕业设计(论文)工作中严格遵守学校有关规定恪守学术规范我所提交的毕业设计(论文)是本人在指导教师的指导下独立研究、撰写的成果设计(论文)中所引用他人的文字、研究成果均已在设计(论文)中加以说明在本人的毕业设计(论文)中未剽窃、抄袭他人的学术观点、思想和成果未篡改实验数据。本设计(论文)和资料若有不实之处本人愿承担一切相关责任。学生签名:年月日摘要摘要当前英语地位日趋重要词汇量成为制约大部分人英语能力的障碍。为帮助人们更加轻松、高效的完成单词记忆过程本次项目将结合心理学原理设计开发一个基于BS架构的单词记忆系统。系统主要实现记忆单词的基本功能如:基于艾宾浩斯记忆曲线的任务进程初始化、进程参数动态更新、记忆曲线每日修正、任务列表动态初始化、动态调整任务推送次序等核心功能。与其他同类系统不同的是该系统采用了心理学的研究成果更符合人类的记忆活动并能够根据用户的操作不断地更新用户的记忆曲线使之更符合用户个性化的记忆能力。系统采用java编程核心技术涉及:数据库编程、Strut框架、轻量级数据交换格式JSON、ExtJS的Ajax数据代理模式及界面显示技术。关键词:艾宾浩斯单词记忆系统记忆曲线更新IABSTRACTABSTRACTEnglishhasbeingbecomemoreandmoreimportant,LimitedvocabularyisabarriertosomanypeopleTohelppeoplerememberwordscomfortableandmoreefficientThisprojectappliedthepsychologicalprinciples,designandimplementationofsystembaseonBSarchitectureThesystemachievebasicfunctionofrememberwordsThecorebusinessincludesthefollowingfunctionsInitializeauserforgettingcurvebaseonEbbinghausCurveCurve’sparametersupdatedynamicallybyuseroperationRefreshusercurveGenerateareviewplanbyuserforgettingcurveUnlikeotherwordmemorysystem,ThissystemisbaseonEbbinghausCurvesoitcanupdateCurve’sparametersdynamicallyItmeansthatitbecomesmoreinaccordancewithhuman’smemorylevelThissystemcodeinJavaanditappliedtechniquelike:SQLprogramming,Struts,JSON,Ajax,ExtJSForgettingCurveWordMemorysystemRefreshusercurveKeyWords:EbbinghausII目录目录第章开发背景目的和意义设计思想开发目标第章使用技术说明StrutsSQL编程AJAX与ExtJSJSON轻量级数据格式简介第章系统需求分析引言项目背景假定和约束系统总体结构图系统功能模块分解用户模块词库模块记忆曲线模块复习计划模块复习模块及浏览模块第章系统概要设计系统设计思想系统总体设计系统工程分离系统类结构设计数据模型DAO层业务逻辑层控制层III目录数据库设计ER模型物理模型第章核心业务逻辑介绍核心业务逻辑层简述记忆曲线的相关业务逻辑详解记忆曲线初始化记忆曲线参数更新记忆曲线更新单词复习的业务逻辑详解任务列表初始化复习单词的过程单词卡片式浏览时的业务逻辑详解文字说明选择这种方式的原因方法的优点第章系统实现核心模块实现效果及说明首页复习模块页面单词浏览页面数据分析新技术应用Extjs、Ajax、JSON第章系统测试测试对象和要点测试环境测试用例第章结论与展望结论展望结束语IV目录致谢参考文献V第章开发背景第章开发背景目的和意义目前英语地位日趋重要单词的词汇量是一个人英语能力及水平极大的重要体现,而背单词依旧是困扰许多人的地方原因如下:英语单词多而繁杂面对整整一本的单词词典人们总是望而却步不从何入手。开始记忆以后没有安排恰当计划零散的记忆效率低下久而久之看不见成果便缺乏动力。根据双重遗忘理论人们不仅仅是忘记了单词本身还会忘记了今天自己该复习什么单词双重遗忘让我们错失了将单词从短期记忆转化成长期记忆的机会。背单词的行为本身涉及到两个概念“记忆”和“遗忘”。记忆是将需要记忆的元素在大脑中形成一种记忆的链结。它是学习的过程。艾宾浩斯曾提出记忆可以分为瞬时记忆、短时记忆和长期记忆。遗忘是指记忆元素之间的链结弱化甚至消失导致人们对某个记忆元素不再回忆起来。记忆和遗忘相互制衡并存,但它们是有规律的这就是著名的“艾宾浩斯遗忘原理”也就是“记忆曲线”或者“遗忘曲线”。众所周知,要记住一样东西必须反复的复习重复才能达到牢记状态而艾宾浩斯遗忘原理告诉我们遵循记忆与遗忘的规律进行复习将会事半功倍。鉴于以上种种原因本次项目设计了基于艾宾浩斯记忆曲线的单词记忆的系统通过它可以解决人们背单词的困扰系统能够每天提供新增单词交由用户记忆可以动态的根据“记忆曲线”将你最该复习的单词呈现给你将极大的提高人们记忆效率。设计思想该系统为Web项目。将采用MVC的设计模式基于BS架构使用Eclipse作为开发工具、MYSQL作为数据库实现。其实现语言涉及:Java、SQL、Javascript、html等等。项目涉及的技术思想包含:三层架构、Struts框架、JSON数据格式、ExtJS、Ajax、前台数据代理技术。第章开发背景后台项目的设计采用三层架构将业务逻辑与数据库操作做分层处理业务逻辑层不直接参与数据库操作的相关工作它将通过调用数据库操作层实现对数据库的访问。业务流程的具体实现则通过业务逻辑层方法的相互调用实现。前台的项目的实现采用Struts框架通过核心过滤器过滤页面请求使其调用相应后台业务逻辑进行数据采集与处理再通过Struts流转控制机制进行页面流转控制反馈给用户显示。开发目标该系统将主要实现以下几个目标与功能:帮助用户实现信息化管理自己记忆单词的日程安排。提供友好的界面供用户复习浏览单词、查看数据分析。根据艾宾浩斯记忆曲线原理生成用户记忆曲线。根据用户操作动态修正用户记忆曲线参数。根据用户记忆曲线动态调整复习计划。根据用户复习计划初始化任务列表。实现任务单词推送次序调整动态更新。系统通过实现以上几个核心功能达到提高用户记忆效率的效果。并在开发过程中使用较为新颖的技术及设计思想。力求项目的创新性与可靠性。第章使用技术说明第章使用技术说明Struts本系统中前台UI的控制流转全部由Struts实现故而在此对其进行简单的介绍。Struts是Struts与WebWork合并后的产物它的最大亮点便是抛弃了Struts中惹人厌的ActionFormBean。Struts对MVC模式的诠释更加的干净利落HTTP请求到达核心控制器之后经过处理直接找到Action对象执行完相应代码然后返回设定好的视图回到浏览器。整个流程清晰明了简单易懂只要学会了配置strutsxml文件。就可以轻松的完成UI页面流转的控制。同时Struts提供了丰富的标签库可以更高效的完成数据的处理。SQL编程考虑到业界对ORM组件效率的质疑。本次毕业设计将所有的数据库操作都使用SQL编程故在此对其进行简单介绍。SQL如今被广泛的采用很好的证明了它的价值SQL是非过程化语言这里提到的非过程化、过程化不同于面向对象和面向过程的概念所谓过程化就是我们必须告诉机器每一步需要干什么该怎么干。开发人员虽然没有参与计算但是机器执行的流程开放人员都了如指掌而非过程化语言只需要告诉机器做什么即可具体机器如何实现开发人员不必关心比如最简单的查询语句我们只需要告诉机器我们要查什么具体怎么查,交给机器去实现。所以非过程化语言在完成复杂任务的检索的时候具有不可比拟的优势我们只需要告诉机器我们想要的东西就可以了。而过程化语言我们必须事必躬亲去安排具体的流程和实现过程。前文提到ORM组件的效率问题这里不得不提到SQL的另一个特性轻松嵌套每条SQL语句的输入输出。并且其输入输出的都是同一种类型的对象(记录集)这意味着SQL语句具有嵌套的特性可以通过多个SQL语句嵌套完成更为复杂的功能而这些功能若是用其他语言将会极其繁琐。综合上述几点本次项目中决定采用SQL编程完成所有与数据库的相关的操作。AJAX与ExtJS第章使用技术说明ExtJS是一种用于创建前端用户界面的框架它同时也是一种基本与后台技术无关的前端Ajax框架。他提供了几乎所有的对于列表的操作另外它有着良好的界面和一系列封装好的组件供你使用。它同时提供了利用AJAX技术读取数据的数据代理功能,支持JSON格式的读取功能。JSON轻量级数据格式简介JSON(JavaScriptObjectNotation)它其实是一种轻量级的数据交换格式。它是基于JavaScript的一个子集。JSON采用了完全独立于语言之外的一种文本格式但也包含了一下C家族的某些习惯(包括类似C,C,Java,JavaScrip等等)。这些特性使得JSON理所当然的成为一种理想的数据交换语言。因为它不仅仅易于人的阅读和编写同时也易于机器的解析和生成。第章系统需求分析第章系统需求分析引言项目背景随着英语的地位日趋重要,很多人为了学好英语而绞尽脑汁,单词的词汇量是一个人英语能力及水平极大的重要体现,如何提高词汇量,如何提供记忆的效率成了人们关注的重心,大家都在寻找最省时最省力的方式来记忆单词。德国实验心理学家艾宾浩斯早在上世纪初就通过实验心理学的方式参透了人类记忆与遗忘的规律并且发布了他的研究报告。但是却并没有被大多数人所了解所以许多人在找寻的完美的记忆方式其实前人已经给出了答案时代变迁如今的科技已经可以让机器帮我们解决许多问题如何通过程序让百年前前人的智慧绽放光芒,解决现在人们的困难成了程序员的任务。为了帮助人们更加轻松高效的完成单词记忆的过程本次项目将结合心理学原理设计开发一个基于BS架构的单词记忆系统。本系统主要单词记忆将实现以下几个功能:一、用户记忆曲线生成、调整功能。二、用户复习计划生成、调整功能。三、用户任务列表生成、调整功能。四、用户单词复习、浏览功能。同时为了提高自身能力在系统设计的整个过程中将尽可能的合理使用新的技术和未曾使用的框架组件。例如:通过ExtJS的数据代理利用Ajax实现部分前后台数据JSON格式交互等等。假定和约束开发期限:系统预期的开发期限为天。开发环境:JDK。开发工具:Eclipse。数据库:MYSQL。操作系统:MicrosoftWindow。系统总体结构图单词记忆系统由词库模块、复习计划维护模块、复习模块、浏览模块、用户第章系统需求分析模块等子模块构成。每个子模块都具有特殊的操作方法和其特有的业务逻辑。系统总体结构图如图所示:图系统总体结构图系统功能模块分解用户模块模块描述:用户模块提供了用户登录验证等基本功能用户可以通过用户名及密码登录系统、可以设置每日新增单词数量等等。用户模块用例图如图所示:图用户模块用例图词库模块模块描述:管理员通过词库模块进行词库的浏览、添加和修改操作管理员可以选择手动添加单个单词也可以使用XML文件进行批量添加内部业务逻辑会自动判断词库中是否已经有该单词内容若该单词已在词库中存在将跳过该第章系统需求分析单词继续插入下一个单词。管理员还能对词库中的单词进行修改删除这些基本操作。词库模块用例图如图所示:图词库模块用例图记忆曲线模块记忆曲线模块用例图如图所示:图记忆曲线模块用例图模块描述:记忆曲线的相关操作(如:初始化、参数修正、曲线更新)均由系统完成触发相应业务逻辑时自动执行用户不参与其中。(具体业务的实现参见“第章核心业务逻辑介绍”)。复习计划模块模块描述:复习计划模块是指复习计划中单词的管理工作与处理复习行为的功能模块是两种不同概念请注意区分。用户登录后可以执行的操作有:浏第章系统需求分析览词库中没有加入自己复习计划中的单词添加词库中的单词到复习计划删除自己复习计划中的单词。这里不提供修改复习计划的功能若提供用户修改复习计划功能与系统的业务逻辑不合。复习计划中单词复习进度等信息的调整由系统根据用户复习单词时的操作自动更新(复习计划的调整更新操作将在“第五章核心业务逻辑介绍”中详细阐述)。复习计划模块用例图如图所示:图复习模块用例图复习模块及浏览模块此部分内容为核心模块其内容及流程将在第章“核心业务逻辑介绍”中详细阐述。第章系统概要设计第章系统概要设计系统设计思想采用敏捷迭代式开发使得该系统的开发是一个逐步求精的过程即开发随着需求和新的业务变化而不断完善。由于该项目是以学术学习为目的将不考虑商用因素在合理的情况下将选择当前最新的技术(项目所有引用的第三方组件框架等皆是官网下载的最新版本)目的是以便成文后可为他人在开发类似项目时提供绵薄的帮助与借鉴。所以整个项目的设计过程中贯彻如下的设计思想:创新:将选用时下最新的技术、工具、框架、组件使得该系统在一定时间内有一定的学术讨论价值。求精:一个好的方法和流程设计比无数个Systemoutprint()要更有价值。将更多的精力投入到代码的设计上去而不是功能的简单堆砌、重复。系统总体设计本系统采用时下非常流行的三层架构(MVC)设计可以这样说几乎所有的Web应用开发都是基于MVC设计模式的。在MVC设计模式中C(Controller)即控制器负责接收(监听)所有的请求(消息)M(Model)模型用于表示要被显示的数据和操作V(View)视图就是页面可以是html也可以是jsp等等它负责将Model以某种形式呈现给用户。在本次项目中的MVC三层架构设计中struts扮演着Controller的角色service层和其调用的数据模型数据库操作类都属于Model。前台页面就是View层。系统工程分离本次系统采用前后台系统分离的开发方式将前后台分离成两个工程WordMemory是后台工程WordMemoryUI是前台工程。前台工程通过引用后台工程来处理数据它只提供页面流转控制和业务逻辑调用所有数据的具体实现及操作将在后台工程中实现。系统工程分离的好处:这意味着在实现前台的时候不需要关心后台的实现若是多人开发将大有裨益。必要时更换前台工程就可以以另一种方式呈现UI及前台页面流转方式。此外将前后台分离后出现BUG时易定位出错位置。前后台工程分离结果如图所示:第章系统概要设计图工程目录图系统类结构设计数据模型本次项目将所有需要操作的实体抽象成数据对象也称之为数据模型。该包存在于后台工程中该包中存放着系统中所有数据模型为其他层提供抽象过后的类。将该包中的类实例化后便可以操作对象的方式进行数据操作。每个model类中都提供了属性的get()set()方法(接口)供程序访问。Model包内容如图所示:图model包DAO层本次项目中将所有与数据库操作相关的方法都集成在该包的类中DAO层将与数据库的交互集中管理方便业务逻辑层的调用。该包存在于后台工程中包含针对不同数据模型的数据库操作类提供了诸如:增删查改等相关的与数据库操作有关的方法。将其独立分包有利于厘清层次结构将DAO层完成后将不需要再操心底层数据库操作的方法。调用即可。DAO层中的类如图所示:图Dao层考虑到每次对数据库的操作都需要创建与数据库的连接为了降低系统负担及遵循代码复用的原则将建立、使用、释放数据库连接的方法集成成一个数据第章系统概要设计辅助类它为DAO层各类提供数据库连接和获取Statement、PreparedStatment对象关闭连接等方法。DAO层访问数据库辅助类方法如图所示:图数据库辅助类业务逻辑层本次项目将系统涉及的业务逻辑集成在一个层次中称之为业务逻辑层。该层存在于后台工程中包含了系统所有业务流程每个类中的方法均代表了该业务逻辑的各项操作将其组合就可以完成需求中要求的功能如:提供单词复习的TestProcessService类中调用了MissionService中的Init()方法用于在单词复习前对任务列表初始化等等。业务逻辑层中的类如图所示:图业务逻辑层控制层控制层的主要实现依托于Struts提供的方法它的主要功能是控制页面的流转及根据用户操作选择相应的业务逻辑层中的方法处理数据并将处理结果返回给预习定义好的返回页面完成人机交互过程。该包在前台工程中利用Struts框架控制页面流转调用业务逻辑层中的方法处理数据。控制层中的类如图所示:第章系统概要设计图控制层数据库设计ER模型根据前文对系统需求和业务逻辑的分析可以了解单词记忆系统中实体与实体之间的关系。而实体联系图(ER图)正是直观表现这种关系的好方法。本系统中的实体联系图如图所示。图单词记忆系统实体联系图实体图可以展示各个实体中所包含的属性。为开发数据库提供依据。下面将利用实体图一一介绍系统中的各个实体不再用文字赘述:用户实体图如图所示。第章系统概要设计图用户实体图词库中的单词实体图如图所示:图词库中单词实体图用户单词实体图如图所示:图用户单词实体图任务单词实体图如图所示:第章系统概要设计图任务单词实体图记忆级别实体图如图所示:图记忆级别实体图物理模型经过上述的分析和设计结合数据库设计的相关原则设计出如下几张表结构:用户表(user)主要用于存放用户信息及基本参数主要结构如表所示。表用户表字段名字段类型字段大小是否可为空关键字说明否是用户编号idint否是用户姓名nameVarchar否用户密码passwordVarchar最近一次更新任务时间hasinitdatetime每天新增单词数newwordnumint单词表(word)主要用于存放单词最基本的信息其中包括了单词、翻译、音标。系统中所有可使用的单词都必须存在其中。使用单词时根据单词的id到该表中查询单词的相关内容其主要结构如表所示第章系统概要设计表单词表字段名字段类型字段大小是否可为空关键字说明idint否是单词编号wordVarchar否是单词内容transVarchar单词翻译phoneticVarchar单词音标用户单词表(userword)如表所示用于存放与用户相关的单词该表中的单词相当于进入了用户的复习计划它通过wordid与单词表连接以便获取单词的内容。表用户单词表字段名字段类型字段大小是否可为空关键字说明idint否是用户单词useridint否用户编号wordidint否单词编号testtimesint复习次数righttimesint正确次数levelint记忆等级startdatedatetime进入复习计划的时间nextdatedatetime下次复习的时间任务单词表(mission)如表所示用户存放当天复习任务。表任务单词表字段名字段类型字段大小是否可为空关键字说明userwordidint否是用户单词编号useridint否用户编号priorityint否任务推送次序sortVarchar新旧单词标识firsttimeint是否是当天第一次出现记忆级别表(level)如表所示用于存放用户记忆级别的相关信息。表记忆级别表字段名字段类型字段大小是否可为空关键字说明idint否是用户单词编号useridint否用户编号levelint否记忆等级第章系统概要设计字段名字段类型字段大小是否可为空关键字说明testtimesVarchar测试次数righttimesint答对次数countint该级别下次出现时间的偏移量第章核心业务逻辑介绍第章核心业务逻辑介绍核心业务逻辑层简述涉及的核心业务逻辑的类有:LevelService、MissionService、TestProcessService、UserwordService。LevelServicejava(记忆曲线的业务逻辑):该业务逻辑提供所有对用户记忆曲线的参数调整曲线更新等业务需求的操作方法和流程这些方法通过调用Dao层相应的实现完成业务逻辑内容。图展示了LevelService中的方法:图LevelService中的方法MissionServicejava(任务列表的业务逻辑):该业务逻辑集成了任务列表的业务需求。提供了相应的实现方法系统只需要调用相应的方法即可实现想要的业务逻辑。图展示了MissionService中的方法:第章核心业务逻辑介绍图MissionService中的方法TestProcessServicejava(单词复习行为的业务逻辑):该业务逻辑实现了复习单词的业务需求它其中的许多方法是通过调用MissionService中的方法实现的。控制层在执行复习单词的业务需求时不需要直接调用MissionService层中的方法该业务逻辑相当于对MissionService做了业务流程上的二次封装从而简化了控制层Action中繁琐的调用。它还实现了复习过程中动态调整推送顺序的主要业务逻辑。图展示了TestProcessService中的方法:第章核心业务逻辑介绍图TestProcessService中的方法UserwordServicejava(复习列表操作逻辑):该业务逻辑是MissionService、TestProcessService中涉及复习计划操作的基础。所有涉及更新到复习计划的操作都是通过调用该业务逻辑实现。图展示了UserwordService中的方法:图UserwordService中的方法第章核心业务逻辑介绍记忆曲线的相关业务逻辑详解记忆曲线初始化当添加用户的时候系统自动为用户初始化记忆曲线。原始记忆曲线数据来源于艾宾浩斯记忆曲线。采用表驱动法实现下标获取指定信息。(特别说明由于涉及到记忆曲线更新策略程序中插入代码不包含各个级别的测试次数和回答正确次数此部分交由数据库默认插入默认值分别是测试次数回答正确次数。原因是为了在用户使用前期保证各部分正确率在之间通过用户不断地操作直到正确率下降或升高出边界再采取相应操作)。记忆曲线初始化流程图如图所示:图记忆曲线初始化流程图记忆曲线初始化核心代码如图所示:图记忆曲线初始化核心代码记忆曲线参数更新系统首先获取该单词所在的记忆级别然后根据用户是否记得该单词的回答情况更新该用户在该级别的具体测试情况(包含测试次数和答对次数其他模第章核心业务逻辑介绍块可由此得出该级别的平均正确率刷新用户记忆曲线的模块中就需要用到此参数)。记忆曲线参数更新流程图如图所示:图记忆曲线参数更新流程图记忆曲线参数更新的核心代码如图所示:图记忆曲线参数更新核心代码记忆曲线更新系统一次性获取用户所有记忆级别的信息。通过遍历逐个更新记忆级别中的内容。当所有级别全部更新完毕时用户记忆曲线更新结束。其中需要判断的内容包括正确率是否在合理范围内、正确率是小于还是大于(系统初始化时为:)、该级别是初级阶段还是中后期阶段(不同阶段调整的时间单第章核心业务逻辑介绍位和跨度并不相同)等等。记忆曲线更新流程图如图所示:图记忆曲线更新流程图记忆曲线更新核心代码如图所示它包含了图中的记忆曲线更新流程中的大部分方法前文提到的“不同阶段调整的时间单位和跨度并不相同”的操作方法在该核心代码中并未体现原因是根据记忆级别调整时间单位与跨度的操作并不在记忆曲线更新的业务逻辑中此判断与执行方法在复习单词的业务流程中故在此不作阐述。第章核心业务逻辑介绍图记忆曲线更新核心代码至此关于记忆曲线的相关核心业务逻辑已经介绍完毕其中有些细节和方法调用出于篇幅考虑并未展示读者可以通过阅读源码进一步了解。单词复习的业务逻辑详解任务列表初始化如图所示任务列表初始化的流程如下:通过获得用户表中的时间标识判断当天用户是否已经向任务列表更新了新单词若没有则更新标识则搜索新单词插入若当天已经添加了新单词则不作操作执行下一步复习计划中到期单词的初始化获取所有到期的复习单词插入任务列表。至此用户任务列表更新完毕。该业务逻辑并不关心最终是否有单词进入任务列表若任务列表在执行用户初始之后仍为空则说明该用户当前并没有单词需要记忆。控制层Action发现并无返回值则控制页面跳转至相应提示页面。用户任务列表初始化流程图如图所示:第章核心业务逻辑介绍图用户任务列表初始化流程图复习单词的过程图展示了获取任务列表中单词的方法:图获取单个单词的方法如图所示Service层中提供了getMission方法获取单个单词,该方法除了必须的用户id外还带有一个可选参数Sort可以切换从任务列表中获取新单第章核心业务逻辑介绍词还是旧单词。复习单词时用户可选的操作如图所示当用户选择记得或不记得后两种操作会在sort参数上进行区分以便程序判断用户操作选择相应的处理方式。用户操作后该单词进入更新阶段。图前台页面提供的两种可选操作在提交单词的这个方法中每个业务逻辑类中都对单词进行了判断和操作业务逻辑层根据用户操作选择相应的业务逻辑和操作的方式比如将该单词的记忆进程前移比如删除任务列表中该单词的副本等等。图展示了复习过程中用户复习计划单词更新的流程图:图复习过程中复习计划单词更新的流程图图展示了复习操作中更新复习单词的核心代码。它实现了图中展示的业务逻辑中的所有方法。第章核心业务逻辑介绍图TestProcessService中更新复习单词的方法核心进程进程中获取用户记忆曲线并根据记忆曲线内容更新单词下次出现时间的内容图展示更新下次出现时间的核心方法:图更新下次出现时间的方法以上是单词复习的核心业务流程介绍。单词卡片式浏览时的业务逻辑详解该部分的业务逻辑在细节上的思考值得讨论。图展示了其中核心代码:图单词卡片式浏览核心代码文字说明在UserWordDao层中此方法提供了根据用户不同的操作选择相应查询语句图中“PRE”是常量辅助类定义的常量值为字符串“pre”是为了防止参数错误第章核心业务逻辑介绍而特意设定的。图中的方法通过判断用户自定义参数选择获取当前显示单词的id的前一个或者后一个单词。选择这种方式的原因由于用户复习计划中单词是id并不一定是连续的如果采取指定id的方式直接获取将有可能出现如下情况:数据库中用户复习计划里有两个单词,单词编号分别为和。当前单词编号为我们想获取下一个单词根据需求我们应该得到单词编号为的单词然而简单的将用户编号自增后再查询是得不到单词编号为的单词的。所以存在异常的查询结果为空的情况。方法的优点图展示了获得用户单词的方法从中可以看出初始查询时不带单词编号系统默认按照单词编号设为用户自定义参数设为next。程序将从开始寻找用户编号最小的一个单词其优点在于。它不需要先查询出一个单词编号最小的单词就能拿到用户复习计划中id最小的单词。虽然SQL语句能够嵌套但为此多写一个专用方法并不是好的解决方案。这样的实现还能为Action层中减少因为错误参数而出现bug的几率。图获得用户单词的方法第章系统实现第章系统实现核心模块实现效果及说明首页图展示了项目完成后首页的界面。首页提供了用户各项操作接口。图首页复习模块页面图展示了复习单词时每个单词呈现的样式一个遮罩区将单词的中文释义遮住用户根据显示的英文回忆该单词的中文意思然后单击遮罩区域遮罩消失显示中文释义用户检查是否和自己记忆中的一样。用户单击遮罩区域后的界面如图所示。用户可以选择点击记得或者不记得来完成该单词的操作。无论选择什么系统内部都将对单词进行更新。唯一的区别是选择记得后该单词从当前任务列表中删除选择不记得系统只是调整该单词在任务列表中的推送次序它将再次出现直到任务列表中的单词全部被用户选择为记得为止。复习结束。第章系统实现图单词初显图释义显示并提供操作接口单词浏览页面单词浏览页面提供了用户浏览单词的页面用户可以选择是卡片浏览模式(如图所示)还是列表式浏览(如图所示)卡片式浏览提供了逐个浏览复习计划总单词的功能列表式浏览则提供了复习计划中单词的一览。其中列表式浏览中使用到了ExtJS的数据代理及JSON技术通过AJAX的方式向一个url请求数据该数据在Action中被重建成一个JSON的字符串格式数据传递到前台前台JS代码根据JSON字符串将其转换成对象进行操作。该方法提供了前台对象化操作数据的新模式。较之传统OGNL在服务器端操作对象再到前端显示的手段可以大大减少前后台的数据交互。提高系统性能。第章系统实现图卡片浏览模式图列表浏览模式数据分析数据分析中包含了两个页面图展示的是当前用户复习计划中各类单词的分布情况图展示的是用户使用系统以来的单词记忆情况。前者通过饼图展示了不同类别的单词占用户复习计划中单词的百分比。后者则通过柱状图展示了用户一年个月中每个月新增的熟记单词数。第章系统实现图当前用户复习计划中各类单词分布情况图用户使用该平台以来单词记忆情况新技术应用Extjs、Ajax、JSON为了体验JSON这种轻量级的数据交换格式。本系统将单词浏览页面中列表模式和数据展示模式使用了Extjs中的数据代理功能及ajax技术实现了前后台的数据交换其中传输的数据格式就是JSON。第章系统实现技术概述:前端JS代码:(定义了dataStore其数据代理属性设置为ajax)请求地址为字符串类型的变量(urlstr)其中存着一个自定义的Action地址。具体代码如图所示:图前端JS代码Extjs的数据代理将会自动为我们请求该地址。请求方式是ajax这是Extjs的新方式。图展示了利用firedebug调试的请求结果:图请求结果展示图展示了服务器端Action中将对象转化成JSON格式的实现方法。通过JsonHelper的getJsonFromList方法将得到的对象列表转换成JSON格式的字符串用于数据传递。第章系统实现图服务器端将对象转换成JSON的方法通过上述方法可以将对象转化成JSON格式。JSON格式大致如下,其将用户的属性转化成字符串格式供其他方面解析。{"results":,"items":{"name":"用户",”password”:””},{"name":”用户",”password”:””}}。由于得到的JSON字符串长度很大篇幅有限,故手写了简单格式提供参照。得到JSON字符串格式之后要在返回页面将其获取我配置的strutsxml中将返回页面配置userworddatajsp图展示了userworddatajsp中的内容。图接受数据的返回页面内容(提示:我曾经担心请求时当前页面会跳转Action返回的目标页从而导致显示错误这个理解是错误的其实数据代理的机制并不会实现页面的具体跳转。它拥有ajax的特点。)至此数据对象可以完整取出到当前页面并装载在Stroe中我们可以对Store进行操作。第章系统测试第章系统测试测试对象和要点软件的测试是软件生命周期中一个重要环节由于本系统分为两个前台和后台两个项目后台项目是由测试驱动开发每个主要的核心流程都事先用Junit写好了测试用例部分采用了Junit断言作为测试手段。每写好一个方法都会在测试用例上运行一遍检验是否正确完成边开发边测试。所以本项目所有后台程序的的白盒测试都已完成功能可以实现并无重大BUG。基于以上几点本章测试内容将着重于前台项目的黑盒测试。图展示了测试用例文件夹中的内容:图测试用例包一览测试环境硬件:CPU:酷睿双核GHz。内存:GB。软件:Firefox、Windows旗舰版。服务器:tomcat。测试用例第章系统测试表的测试用例用户测试复习模块是否能够正常工作。表测试用例一项目名称基于艾宾浩斯记忆曲线的单词记忆系统程序版本编制人吴吕编制时间功能模块名复习模块功能特性提供单词复习测试目的确认复习模块可以正常工作预置条件打开到首页用例编号测试步骤输入数据预期结果测试结果点击复习单词无跳转显示当成功前需要复习的单词数若没有单词需要复习则显示相应页面点击”单击显示释义”按钮无释义遮罩消成功失显示释义单击”记得”按钮无弹出下一个成功单词同时右上角当前记忆单词数单机”不记得”按钮无弹出下一个成功单,右上角单词记忆单词数不变不断点击”记得”直至完成无显示完成记成功所有单词记忆忆页面第章系统测试表的测试用例测试了用户浏览单词模块的相关功能表测试用例二项目名称基于艾宾浩斯记忆曲线的单词记忆系统程序版本编制人吴吕编制时间年月日功能模块名浏览模块功能特性提供单词浏览测试目的确认浏览模块可以正常工作预置条件打开到首页用例编号测试步骤输入数据预期结果测试结果点击”单词浏览”无显示卡片浏成功览模式点击”单击显示释义”按钮无释义遮罩消成功失显示释义单击”上一词”按钮无若是当前单成功词第一个单词则不变。若不是第一个则显示前一个单击”下一词”按钮无显示下一个成功单词,若是最后一个则不变单击右上角列表图标无跳转至列表成功浏览模式,并正常显示全部单词测试结论:通过设计两个核心模块的测试用例对本系统进行简单黑盒测试可以看出系统功能测试基本正常。但确实发现了一些问题然而这类问题多数是UI的显示问题涉及到浏览器的兼容性等等并不是本次项目的重点。将会在后续的开发中逐渐完善。第章结论与展望第章结论与展望这一章节将对这一阶段本次毕业设计中收获的经验与项目的完成情况做一个总结性的陈述。同时将对该系统未来的研究方向和实现手段做初步的展望。结论设计思路上:该系统基于MVC设计模式的设计思路是正确的。它能够直观合理的将系统分成相应层次。在实际开发过程中容易定位到自己需要的位置进行编码和调整。层次分明的目录结构也利于测试阶段的维护其次由于层次已经进行划分开发过程中只要任意一条业务流程顺利跑通剩下的工作就可以以该业务逻辑作为标准样本进行参考开发。极大的提高了开发效率。开发方式上:由测试驱动开发的开发方式在本次毕业设计中被证明是一种非常高效的开发方式。根据需求先写好测试用例针对测试用例中需要的方法进行编码实现。每完成一个方法就可以立刻进行测试。开发人员可以立刻知道该方法是否正常实现。在心理上也有助于开发者提高信心毕竟眼见自己的项目一点一点的完成是非常有成就感的事情。技术的选择:本次项目的设计思想是尽可能的使用新技术新方法这对于编程人员来说是一个极大的考验尤其是一般来说最新的第三方框架和组件并没有相应的中文API文档这就需要开发人员有较高的英语阅读水平和理解能力。也需要开发人员有比较强的耐心能够一点一点的尝试。版本的控制:相信大多数人并没有关注版本控制。然而在本次设计中严格贯彻了SVN版本控制的相关行业标准每次文件的修改提交都做了较为详细的描述和备注。本次设计中通过VisualSVN在本机搭建了一个SVN服务器。在SVN库中建立了该项目的资源库。里面包含了branches、tags、trunk三个文件夹。trunk文件夹作为项目主干一般不再其上进行开发操作具体的开发工作在branches文件中的相关版本中进行只有当测试稳定才将其合并到trunk版本中。而tags文件夹中则存着每个阶段的项目副本。方便回溯。时间的控制:“程序员的效率会随着deadline的临近而直线上升”这句话很好的描述了一些开发人员的状态。缺乏良好的时间管理手段最后一定会手忙脚乱。做好时间的控制每天都为明天安排好必须完成的任务诸如实现某个方法、查找什么资料能够有效的提供时间的利用率。以上便是这次项目中的结论与总结。第章结论与展望展望第一、该项目未来的发展方向除了完善记忆曲线的修正算法外可以在业务上进行拓展不应该局限于英语。第二、本次设计大部分实现是通过前后台不断的交互来完成每次操作都需要进行前后台的数据交互如果这个实现方式不修改的话下一阶段则需要考虑数据库连接池在该项目中的运用来提高运行效率减小资源消耗。如果需要进行实现方法的修改则可以考虑将业务逻辑的实现前推到UI层通过JS的操作完成数据的处理然后再以集合的方式将结果一次性传回后台。从而减少前后台的交互。第三、本次项目的实现都是基于SQL编程实现运行效率提高当编码效率却降低了下一阶段可以考虑实现数据库的通用方法。通过传入表名、字段名、参数名来实现以下基本的通用方法。简化开发成本。结束语结束语三个月的时间转瞬即逝三个月以来付出的汗水见证着我的成长从最初的毫无头绪到一点一滴积累筹备直至项目完结这段时间中苦恼过开心过愤怒过紧张过。会因为终于想到了一个好的解决方案而兴高采烈也有过在调试了一个下午未果的时候沮丧的流泪。然而青春就是这样付出总会有回报。三个月无休止的熬夜终日与电脑、资料为伴我终于在完成了本次的毕业设计。非常我的指导师肖蕾老师的指导和帮助我经常写代码到深夜遇到问题的时候经常不顾时间通过QQ向肖老师提问肖老师每次都会很耐心的给我指导。在这次毕业设计的过程中我独立设计和实现了单词记忆系统的所有功能模块和这几个模块的数据库设计。通过这次毕业设计我对MVC三层架构有了更清晰的认识掌握了SQL编程的方法同时熟练了对Struts框架的使用熟悉了前端Extjs组件的使用方法和AJAX原理对时下比较流行的技术有了更加深入的了解。为了完成此项目我特意搭建了SVN服务器进行版本控制这使得我在项目的版本控制上有了新的认识。本次毕业设计丰富了我的开发的经验提高了我的编程能力加深了我对理论知识的理解。通过编写本次毕业设计论文我还掌握了软件文档的编写方法和格式的要求。当然本系统的缺陷也是明显的如UI的设计、安全性等等。该项目有很大的改善空间而这些林林总总的问题也让我充分认识到了软件开发的困难。通过本次的毕业设计我学会了如何去了解并运用一门新型的工具去掌握一门新的技术Extjs是最近才更新的版本和有着极大的不同在互联网上找不到任何相关的文档我只能去看官方原版的英文API一点一点的学很多人对使用JSON需要的jar包语焉不详我必须一页一页的浏览百度搜索的结果找到正确的解决方案这些经历都将变成我宝贵的财富。总之这次毕业设计的经历为我今后的人生提供了许多宝贵的积累我可以明显的感觉到自己在这次毕业设计中得到了很大的提高我非常感谢各位老师、同学的支持与帮助。致谢致谢在本次毕业设计过程中~我得到了指导老师肖蕾老师的帮助与指导。在此我要特别感谢肖老师的悉心指导和帮助~肖老师在毕业设计的重心~开发的方向~项目的设计和总体的把握上给予了我极大的帮助。她在编程、数据库SQL语句编写等细节的工作上也给予了我许多耐心的指导~对我顺利完成此次毕业设计起到了至关重要的作用。同时我还要感谢姜春艳老师~感谢她在DOM解析XML文件的技术方面给予我的指点~让我能够写出批量录入单词的方法减轻了我的工作量~感谢杨剑芳同学在数据库时间与程序时间中转换方法上提供的指导~他非常热心的写了一个简单的示例文件供我学习~感谢吴俊清同学和我一起研究前后台数据交互的问题~正是在那次讨论中我认识到了自己对于服务器端对象生命周期的错误理解~让我少走了弯路。感谢母校厦门理工学院~感谢这两年学习生活中给予我极大关心和帮助的老师和同学们~是他们教会了我知识和为人处事的道理。通过这次毕业设计我明白了作为一名程序员~我们不应该仅仅只懂得编码~还应该从更高的层面去了解程序开发的过程。我会在今后的工作和学习中不断完善自己~为母校争光~为自己奋斗:年月日参考文献参考文献张利词汇专家模块的研究与实现D北京:邮电大学计算机应用技术,:HermannEbbinghausMemory:AContributiontoExperimentalPsychologyRGermany:HermannEbbinghaus,:AndrewHuntDavidThomasThePragmaticProgrammer:FromJourneymantoMasterMPearsonEducation,:潘亚,路晓亚基于MVC模式的struts框架的研究与应用J科技信息,():TerryHalpinObjectRoleModeling:PrinciplesandBenefitsJInternationalJournalofInformationSystemModelingandDesign(IJISMD),():王关祥,张焕远,夏亚东OracleSQL性能优化之探究J中国教育技术装备,():杨丽彬,李海林,邱望仁基于ExtJS的可视化Web页面设计系统J软件导刊,():于京,詹晓东基于JSON格式的生产线数据采集系统模型J制造业自动化,():彭志楠敏捷开发在软件开发中的应用研究D电子科技大学软件工程,:,基于MVC模式的数据访问模型设计J电脑与信息技术,():胡君SteveMcConnellCodeCompleteMMicrosoftCorporation,:徐锋UML面向对象建模基础M北京:水利水电出版社,:,陆小辉,周金付ExtJS数据存储类型应用对比分析J科技广场,():邱恩海浅析如何提升软件测试质量J数字技术与应用,():JohnJPatrickSQLFundamentalsMPearsonEducation,:

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

评分:

/51

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利