试卷自动生成系统的设计和实现_第1页
试卷自动生成系统的设计和实现_第2页
试卷自动生成系统的设计和实现_第3页
试卷自动生成系统的设计和实现_第4页
试卷自动生成系统的设计和实现_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

四川师范大学成全部学院本科毕业设计试卷自动生成系统设计和实现学生姓名李锦超学号所在学院通信工程学院专业名称通信工程班级级宽带通信2班指导老师石彬四川师范大学成全部学院二○一六年五月试卷自动生成系统设计和实现学生:李锦超指导老师:石彬内容摘要:试卷自动生成系统,即用户经过自定义选择设置试题类型、难度、分数、时间等多个原因自动生成考试试题并给对错验证。伴随互联网络飞速发展、网络教育不停普及和提升,传统出题考试方法已经不能满足全部需求,一概而论不“因材施教”出题方法不利于考评不一样类型学生,也不满足现代教育发展需要。所以,现在已经逐步开始流行自定义、有难度、时间、类型选择控制出题方法来迎合目前社会考试所需。试卷自动生成系统诞生油然而生。该设计关键目标是帮助出题者和试题训练者能够依据不一样人群自定义设置难度、类型生成考试试题系统。系统为用户提供用户登录、开始试卷定制、选择题型、选择所占分数百分比、最高分数设定、考试时间限制设定、考试难度选择、生成试卷和答案查看等功效,将用户需要“因材施教”、“分门别类”地提供,由用户自定义选择,从而达成针对不一样层次考生训练和考验。同时,也方便了出题者逐一进行试卷试题选择,省去了出题者挨个设定过程,既提升了出题速度,也提升了出题整体质量。此次设计关键是以服务出题者、试题训练人等人群方便快速地完成试题结构并提升本身所需检测为目标试卷自动生成系统。整体设计使用是JAVA语言开发B/S(浏览器/服务器)应用系统。用户登录该系统后能够依据自己能力选择生成题目标难度,依据自己弱项针对题目类型进行生成试题,亦可依据自己熟练度选择答题时间。本系统代码框架采取了现在比较流行SSH(Spring+Struts+Hibernate)进行设计,在功效模型实现和页面处理方面严格遵从了MVC(Model,View,Controller)思想体系。配合Javascript和Xml对页面提取处理。数据库方面采取了中小型Mysql数据库进行处理,数据库工具使用了当下主流navicat进行操作,以减轻代码量负担和方便代码编写和功效实现。关键词:试卷自动生成B/SJavaMySQL数据库DesignandimplementationofautomatictestpapergenerationsystemAbstract:Automatictestpapergenerationsystem,thatis,bytheusertocustomizetheselectionofthetypeoftestquestions,difficulty,scores,timeandotherfactorsautomaticallygeneratetestquestionsandgivethewrongverification.WiththerapiddevelopmentofInternet,networkeducationpopularizationandpromotion,thetraditionalwayofexaminationquestionshasbeenunabletomeetalltheneedsofgeneralizationsdonotteachstudentsinaccordanceoftheiraptitudequestionsthewayisnotconducivetotheassessmentofdifferenttypesofstudents,alsodonotmeetthedevelopmentneedofthemoderneducation.Therefore,nowwehaveassemblypopularcustom,difficulty,time,typeselectioncontrolsetsthetopicthewaytocatertothesocialexaminationrequired.Automaticgenerationsystemoftestpaperbirtharisespontaneously.Themainpurposeofthedesignisthehelptopicandquestionsoftrainingcanbesetdifficulty,typeofgeneratingexaminationpaperssystemaccordingtothecustomofdifferentgroupsofpeople.Systemfortheuserprovidesuserloginandstartcustomizedpaper,multiple-choice,choosetheratio,thehighestscoreset,theexaminationtimelimitset,choosethedifficultyoftheexam,testgenerationandcheckyouranswersandotherfunctions,theuserneedto"teachstudentsinaccordancewiththeiraptitude","subcategories"toprovide,selectedbytheuser,soastoachieveforcandidatesofdifferentlevelsoftrainingandtest.,butalsotofacilitatethequestionsonebyoneofpapersselected,eliminatingthetopicandsetonebyone,bothtoenhancethespeedofquestions,thetopicandalsoimprovesthequalityofthewhole.Thisdesignismainlybasedonservicequestions,questionsoftrainingpeopleandotherpeopleeasilyandquicklycompletetheteststructureandenhanceitstestpaperautogeneratingsystem.TheoveralldesignistheuseofJAVAlanguagedevelopmentB/S(Browser/server)applicationsystem.Aftertheuserloginthesystemcanaccordingtotheirabilitytoselectthedifficultyofthequestionsintheform,accordingtotheirweaknessesfortypesofquestionsweregeneratedquestions,canalsochoosetoanswerthequestionsofthetimeaccordingtotheirproficiency.ThecodeframeworkofthesystemusingthenowpopularSSH(Spring+struts+Hibernate)isdesigned.ThefunctionmodelandtherealizationofpageprocessingstrictlycomplywiththeMVC(model,viewandcontroller)systemofthought.WithJavascriptandXmlonpageextraction.DatabaseusedinsmallMysqldatabaseprocessing,databasetoolsusedinthecurrentmainstreamNavicatoperation,inordertoreducetheburdenofwritingcodeandconvenientcodeandfunctionrealization.Keywords:AutomatictestpapergenerationB/SJavaMySQLdatabas目录序言 11系统功效介绍和分析 11.1用户登录功效 11.2试卷生成及试题判定功效 21.3题库维护功效 32数据库设计和开发 52.1数据库基础 52.2数据库设计需求 62.2.1数据库设计思绪 62.2.2数据库表和字段设置 73试卷自动生成系统步骤 83.1物理结构步骤 83.2文件结构步骤展示 114界面设计 124.1界面步骤展示 124.2界面设计示意图 135系统算法设计 195.1组卷方法设计 195.1.1随机法 195.1.2回朔法 205.1.3遗传算法 215.2试题难度算法 215.3试题分数算法 215.4系统算法总结 226关键功效代码展示 226.1登录功效代码展示 226.1.1数据库链接 226.1.2登录功效 246.1.3关键功效模块 276.2前端代码展示 306.2.1主界面代码 306.2.2图片轮播代码 317总结 32参考文件 34试卷自动生成系统设计和实现序言现代教育伴伴随互联网、自动化发展而快速地进行革新,传统试卷考试已经远远不能满足现在社会急促步伐,不仅如此,传统试题考试设计相当地消耗出题者时间和精力,而且没有针对性。这种方法已经不能满足现代考试紧凑步伐了。所以,能够快速而且含有针对性、为用户提供自定义难度、类型、时间选择试卷自动生成就显得尤为关键了。试卷自动生成系统油然而生。传统试卷出题方法需要经过人工进行,出题者或使用者需要依据自己经验进行题目标设置,这种方法往往需要人力对试题数据反复制订和验算、对题目合理性进行检验等等。制订题目标难度梯度,以满足不一样层次学生反应不一样学习水平。出题者往往还需要将以往试题和将要出试题考点、难度进行对比。由上诉需求能够看出,传统人工出题方法不仅没有将互联网联动优势利用起来,进行题库资源共享和使用,也使出题者浪费了大量研究和设置试题时间。互联网时代是个资源共享时代,现代教育也应该和时俱进,对于优异试题、适合学生做试题能够进行共享而且反复利用,而且也处理了出题者自我思索浪费大量时间问题。此次设计数据库能够存放大量物联网所提供各类试题需求,以满足资源共享和互补互助需求。另外,该系统还提供了多个一键选择功效方便用户意见集成试卷。同时,数据库使用也使得针对不一样用户也额外地分配个人对题库和试题编辑权限,用户能够自定义题目标难度、类型、分数等等,也能够新增、删除、查阅和编辑已经有试题。愈加人性化是,用户在完成试卷答题以后,系统会依据用户等分情况给出提升或降低难度一键生成试卷选项。从整个试卷出题到打分结束,整个步骤不仅和庞大数据库进行了资源共享,也极大地提升了出题质量和时间,可谓一举多得!试卷自动生成系统不停成熟将会逐步撼动传统出题和训练方法,伴随试卷自动生成系统不停完善和创新,用户将取得愈加好体验。此次设计关键研究试卷自动生成系统各项功效和相对传统出题方法所带来优势。1系统功效介绍和分析1.1用户登录功效每一个用户全部会有自己对题库和试题不一样需求,我们提供了Mysql数据库为每个人分配了单独IP而且开辟了独立空间。用户在输入帐号密码登录以后能够自由地依据需要管理自己题库和试题。用户登录系统设置很好地域分了不一样使用人群对不一样环境试题需求,也方便了使用者个人对特殊体型和试题编辑和修改操作。1.2试卷生成及试题判定功效本试卷自动生成系统为用户提供了多项一键生成功效,用户能够依据自己需要对生成试题类型、分数、难度、时间、所占百分比等等做出对应设置从而生成出对应试题。依据用户作答给出成绩而且提供提升难度和降低难度一键生成按钮方便用户依据实际情况调整试卷。而且用户能够依据自己需要,自定义增加、删除、查阅和编辑自己题库和试题。在用户登录该系统以后,用户会来到一个中转欢迎界面,用户能够选择查看题库对试题进行操作,也能够直接选择在线答题系统对自己所需试题要求进行设置而且一键生成。试题类型选择生成一套试题首先得明确这套试题结构组成,需要多个类型试题,每种试题、每道题所占分数百分比全部决定着这套试卷合理性。本系统为用户提供了现代考试最流行多个题目类型:选择题、填空题、问答题。用户能够依据自己需求合理安排各类题目在整个试卷中所占数量和分数百分比,比如单选题20道,每道1分;多选题10道,每道2分;填空题10道,每道2分,简答题5道,分别为6分、8分、8分、10分,共100分。试题难度选择作答难度设定关系这整套试卷出题质量,怎样合理地依据实际情况给出合适难度试题显得尤为关键。本系统为每一道试题全部给出了一个难度系数,数据库会依据给定难度系数自动为您提供您所需要难度系数试题供用户选择。难度系数设定在0-1之间,用户只需设定不一样类型题型难度系数系统即会自动为该类型进行题型分配。所以,用户在设置难度系数时候只需要把握好整套试题难度梯度即可。另外。该系统还会依据用户作答情况给出一键自动降低难度和一键自动提升难度试卷生成功效,很好地帮助用户找到目前阶段适合自己训练试题难度。考试时间选择不一样试题难度依据出题者分配,在设置难度时候需要注意就是难度和答题时间合理结合,该系统提供了自定义答题时间设定,方便使用者依据自己综合实力在不一样阶段设置需要完成试题时间。比如当用户第一次做时候能够将时间设置为两个小时,经过一段时间训练,用户一是能够经过提升难度来加强能力,同时也能够选择相同难度其它试题经过减短作答时间方法来得到提升。本系统提供时间设定很好地满足了用户这点需求。总分数设置用户能够依据试卷题量和考试需求自定义指定试卷总分数以此配合题型所占分数百分比,比如在高中学校应用此系统自动生成试题,理综试卷根据传统标准应该设置300分为满分;数学、英语和语文等学科应根据150分给出。在初中或小学等其它环境中亦可给出120分或100分甚至80分满分。当然,分数给定完全由用户自定义,具体情况以实际需要为主。同时也方便使用者在单独考试中能够合理地分配分数。生成试卷功效在完成了上诉试卷不一样类型试题难度系数设定、考试总时间分配、考试总分数设定以后,自动生成试卷就显得十分简单了,用户只需依据界面提醒一键生成即可从数据库中随机提取对应数量而且符合条件(如类型和难度系数)试题,开始答题以后,倒计时开始开启。若作答完题以后用户选择了提升难度或降低难度,那么系统也会自动依据目前试题难度系数做出判定,合适地降低或增加考试难度对数据库进行试题调取,再采取相同方法进行试题自动生成。试题判定功效当用户完成登录选题生成试题而且作答以后,点击提交试卷,系统会依据用户作答情况结合数据库答案对用户作答进行评分,用户依据得分情况从而选择是否增加难度或降低难度再次进行作答训练。针对单选题、多选题、判定题、填空题,经过正则处理过后Javascript能够自动忽略空格、空白字符等等干扰原因以确保空白空格等电脑认为操作带来误判。对于简答题,数据库会依据事先关键字提取去抓取用户答案中关键字进行对比,只要最关键关键字符出现,基础能够判定该题得分。关键字回复正确率也决定了该用户此题最终得分,经过分割多个关键字以确保系统判定正确率,极大地降低了误判,也满足了自动判定节省人力对比资源时间。1.3题库维护功效用户除了从数据库中搜索、提取自动生成出试题以外,有时候也需要将自己平时搜集部分优异题目录入题库并设定难度系数,增加题库题目库存方便下一次调用或自动生成。另外,对于部分易错、难懂题目我们不需要讲究题目内容形式,只需要对其关键参数进行修改即可重做以达成数次练习效果,这么既没有脱离题目考察内容本质,也节省了大量时间。当然,对于部分用户已经完全掌握试题,用户可能怕在下一次自动生成试题中再次碰到从而降低了训练量并耽搁自己训练时间。所以需要将其删掉。也有时,用户想要有针对性地训练,对于某种类型或自己常常犯错题进行反复练习,需要在茫茫题库中快速查找到某一道题。综上所诉,我们为该系统设置了题库试题增加、删除、查阅和编辑功效,以方便用户对题库多种功效需求。以下为具体功效具体介绍:增加、删除试题功效系统中每一道试题全部有且只有唯一一个ID作为主键,在不考虑恢复试题情况下,本系统采取了删除数据库ID字段方法直接对其数据进行删除和添加,删除数据ID数不会被新数据ID所替换,数据ID会依次呈上升形式无限排列下去。经过程序界面连接数据库语言,增加采取Mysql增加语句insertintot_user(id,degree(难度),style(类型),content(内容))values(xx,xx,xx,xx)来设置用户自定义试题;删除则采取Mysql删除语句deletefromtablename(表名)wherexx=xxxandxxx=xxxorxxx=xxx数来进行条件控制而且进行数据库删除操作数据。当然,数据库初始化时候处理关键键和主键不能为空以外,其它用户能够选择留空白,只需勾写必需条件即可完成增加删除功效。查阅试题功效查阅试题功效关键是为了方便使用者快速、直接地找到自己所需试题。快速搜索关键字方法能够为前台或后台来完成。使用后台方法需要在数据库当中设置一个问题关键字字段,在其中录入对应关键字,然后对其搜索按钮进行处理进行连接查询数据库得出符合结果试题。使用前台方法需要将关键字全部读取在指定文件当中,经过Javascript对其进行代码读取,采取正则和ajax等方法将对应关键字进行提取,然后在对比input框中输入数据从而得出符合条件试题。考虑到本系统采取了数据库读取方法,我们便能够在数据库模型搭建时候很好地估计所需要字段,方便了全部功效实现。所以本系统采取和后台数据库结合方法进行查询。采取Mysql查询语句selectid(试题ID),stname(试题名称),keyword(试题关键字)fromDB_name(表名)where(条件设置)degree(难度系数)isnum(数值)方法在界面得出用户所需要查找对应内容,当然,select后面根具体需要展示出来字段能够依据用户需要在设计时候作出调整,我们也能够全出查询出来,只在界面展示用户需要部分。Where后面跟条件当然也能够依据用户需求来改变设置,用户能够使用多个条件进行条件定义。最终满足全部条件试题将会被展示出来,不然题库中没有符合该条件试题。编辑试题功效对于题库编辑功效设定关键方便了用户对指定试题特殊要求做维护和修改,经过修改关键参数、内容环境以达成一题多用、举一反三。同时也方便了用户纠正指出被忽略试题错误。进入试题编辑页面进行完编辑功效后点击保留,程序将实施修改数据库Mysql语句updatetablename(表名)set字段=xx,字段=xxwhere(条件设置)xxx=xxxandxxx=xxx从而保留修改内容。题库编辑功效实现帮助了用户随时随地自定义地将试题修改成自己所需条件,对于不一样用户对同意试题难度了解定义、所花时间需要和出现频率不一样做了很好区分,每位用户全部能够结合自己实际情况进行试题考评。2数据库设计和开发2.1数据库基础在整个系统功效运行步骤当中,我们能够很轻易地发觉一条贯穿整个系统“线”,那就是数据库,不管是用户登录系统,还是题目标增加、删除、查阅和编辑,再到试卷生成、试题保留全部离不开数据库。那么接下来,我们就有必需对数据库进行部分基础性质讲解。我们常说数据库(Database)通俗地来讲就是利用主机空间开辟一个虚拟对数据结构进行储存、管理一个数据仓库。数据库最初诞生于1950年,最初只是用于储存和管理部分关键数据,发展至今,数据库已经得到了很广泛利用,存放资源种类也变得越来越多个多样。用户能够经过不一样类型代码对数据库进行连接从而对数据进行增加、删除、查阅和修改、展示等等功效。现在市面上常见数据库有ORACLE(甲骨文)、DB2、SQLServer、Sybase、Informix、MySQL、VF、Access等等。不过通常基于系统大小、开发速度、开源程度和成本考虑,在中小型系统或网站开发时候,我们往往选择Mysql数据库作为主流数据库。Mysql功效未必是最强大一个,它相对于ORACLE(甲骨文)、DB2等数据库功效上来说还略差一截,但就其开源程度和传输著名度来说,Mysql因其卓越开发速度和可靠性在中小型系统开发当中占据了不可或缺一席。数据库广泛利用使得市面上出现了很多数据库编辑使用工具。比较流行有phpAdmin、Navicat、SQLyog、SequelPro、MicrosoftSQLServer等等。每一款数据库管理软件全部有自己优劣势,不管使用哪一款,目标全部是为了简化方便对数据库管理和操作。phpAdmin是一款基于网页Mysql开源管理器,它以界面简单、功效齐全而深受广大用户喜爱。但本系统最终还是选择了Navicat作为数据库管理编辑软件。Navicat是一款跨平台(于Windows/Mac/Linux)管理数据工具,相对于页面形式phpAdmin来说,Navicat在界面优化和操作处理运行速度上来说更胜一筹,同时也避免了数据库软件受到网页浏览器影响情况。Navicat完全开源工作并不复杂,在网上能够轻易地搜索到教程而且在5分钟内搞定。本套试卷自动生成系统使用Mysql数据库,Navicat数据库管理工具进行操作管理。2.2数据库设计需求2.2.1数据库设计思绪在程序制作初始,将数据库所需要用到表一一罗列出来有利于帮助整个程序设计思绪和需求分析。本系统关键用到数据表有用户表、选择题型表、填空题型表、简答题型表和部分备用和拓展功效表。用户表关键用于不一样用户登录进行自定义题库操作时候对每个用户区分和数据保留;选择、填空、简答题型表关键用于用户对试题修改和提取和试卷自动生成功效使用。其它部分表(可选)可用于数据备份和恢复、考试时间、难度系数算法判定等等,当然,也能够用纯前端Javascript来进行算法关联,数据库大致设计思绪图图2.2.1-1所表示。图2.2.1-1数据库设计思绪示意图用户登录:用户登录首先需要进行用户注册以确保数据库能够识别下一次登陆并保留用户对试题相关操作。第一次登录用户会得到数据库试题全部初始数据,以后不一样用户对题库不一样编辑和修改将会依据各自账户保留为新数据。试题结构表:试题结构表关键是为了满足试题功效配置而设置数据表,比如选择题应该有ID、试题编号、题目类别、题目状态、创建时间、创建人、答案id、难度等级等多个字段结构而成。依次构建出选择题、填空题、简答题数据类型表,为用户在选择难度、试题类型、试题搜索、试题编辑等方面提供数据库切入字段,方便Mysql数据库语言调用。2.2.2数据库表和字段设置用户登录表字段:用户登录表关键统计字段有用户id、userName(用户名)、userNum(用户编号)(可选)、passWord(密码)、state(状态)(可选)、cTime(创建时间),表结构如表2.2.2-1所表示。表2.2.2-1数据库用户登录数据表字段名数据类型主关键字取值说明idvarchar(16)key用户独有IDuserNamevarchar(64)用户名userNumint(32)用户编号passWordvarchar(64)用户密码cTimevarchar(16)创建时间stateInt(8)用户状态选择试题表字段:选择题字段关键有id、subject(题目)、subNum(题目编号)、type(题目类型)、state(题目状态)(可选)、cTime(创建时间)、cuser(创建人)(可选)、answerId(答案id)、degree(难度系数)等等,表结构如表2.2.2-2所表示。表2.2.2-2数据库选择题表字段字段名数据类型主关键字取值说明idvarchar(16)key题目IDsubjectvarchar(16)题目subNumint(32)题目编号typevarchar(64)题目类型degreefloat(8)题目难度cuservarchar(64)创建人(可选)cTimevarchar(16)创建时间stateInt(8)题目状态(可选)填空试题表字段:前台系统下达订单后直接更新到后台,用户可对新增订单进行办理操作,表结构如表2.2.2-3所表示。表2.2.2-3数据库填空题表字段字段名数据类型主关键字取值说明idvarchar(16)key题目IDsubjectvarchar(32)题目subNumint(32)题目编号typevarchar(8)题目类型degreefloat(8)题目难度cuservarchar(32)创建人(可选)cTimevarchar(16)创建时间stateInt(8)题目状态(可选)简答试题表字段:用户系统角色增、删、改和角色对应系统资源分配表结构如表2.2.2-4所表示。表2.2.2-4数据库简答题表字段字段名数据类型主关键字取值说明idvarchar(16)key题目IDsubjectvarchar(64)题目subNumint(32)题目编号typevarchar(8)题目类型degreefloat(8)题目难度cuservarchar(32)创建人(可选)cTimevarchar(16)创建时间stateInt(8)题目状态(可选)3试卷自动生成系统步骤3.1物理结构步骤图3.1-1系统总体设计架系统关键两大块分为“试题处理”和“在线考试”两大板块,无疑二者全部和数据库相关辆。使用者经过登录系统进入主界面选择查看试题或在线考试。图3.1-2查看题库结构示意图查看题库是一个很庞大功效结构,进入查看题库界面以后,用户能够依据需要查看试题类型选择选择题、填空题和简答题,并结合数据库对齐进行增加试题、删除试题、查找试题、编辑试题等功效。若用户选择增加试题功效,那么用户将进入到新增试题界面,对其题目、类型、难度和分数等等数据进行填写,最终保留数据到数据库,新增试题成功。图3.1-3在线答题示意图在线答题作为两大功效模块之一,一样拥有强大功效体系。用户选择在线答题选项以后,将会跳转到考试试题需求选择界面,用户一次会对选择题、填空题、简答题中需要用到试题类型数量、单题分数、难度系数进行设定,系统会自动依据单题分数统计出总分数,帮助使用者合理地判定和安排自己总分数。最终用户设置完测试时间,即可点击试题生成按钮一键生成满足条件试题进行试题测试。图3.1-4试题作答示意图在试题测试过程中我们往往会碰到以下问题:用户因为特殊原因耽搁了时间,或用户在出完试题答题以后发觉自己设定难度并不符合自己水平要求,又或一些原因造成用户此次测试没有发挥出自己理想水平,测试结果并不能真实地表现自己水平,这个时候就需要重新作答或重新愈加合理地制作对应自己适合难度试题了。用户在试题作答过程中系统提供了交卷、重新作答、返回选题功效,很好地帮助用户处理了以上问题。3.2文件结构步骤展示此次系统程序架构关键采取SSH三大框架,使得代码编写愈加轻易。系统分层结构以下:图3.2-1系统代码结构从一个项目标文件夹结构能够看出一个项目标整体性是否完整,逻辑思绪是否紧密。一个优异项目肯定有其严谨文件夹结构。以本系统为例,根目录文件夹以作者名称拼音大写字母命名,下放关键文件夹如上图所表示。以下为文件夹结构说明:action文件夹:关键是存放各个实体类之间页面跳转控制。comms文件夹:关键是存放部分公共类和实体。entity文件夹:关键是存放各个实体类文件。fiter文件夹:关键用来存放各个过滤器类文件。Service文件夹:关键是存放各个实体类经过Action控制直接方法。applicationContext.xml:是hibernate配置文件perties:是连接数据库配置文件config.xml:是web项目标配置文件initSQL:是数据库初始化数据文件log4j:是项目日志文件persustence.xml:是jap数据库连接配置struts.xml:是Struts配置文件4界面设计4.1界面步骤展示图4.1-1系统界面步骤示意图本系统关键由8个关键界面组成,分别是用户登录界面、系统主界面(幻灯片+导航栏)、查看题库界面、在线答题界面、编辑题库界面、新增试题界面、选择试题要求界面和开始作答界面。用户使用本套试卷自动生成系统以后一次操作步骤将会图4.1-1所表示进行。4.2界面设计示意图此次系统界面设计关键采取灰色冷色调进行颜色搭配,蓝色作为辅色,即确保了考试试题这一严厉场所情景需求,也确保了色调不单一性,满足了用户视觉交互效果。本试题界面菜单中加入了Javascript设计用户交互体验,例以下拉菜单,图片轮播等等,同时也处理了传统尸体自动生成系统界面单调尴尬情况。图4.2-1系统用户登录界面展示用户使用该试卷自动生成系统,必需先经过注册用户到数据库以开辟属于自己独立空间,以保留符合自己需求自定义试题,完成对需求试题增删查改和自定义试卷生成。注册完成后,用户编辑额度数据将会被保留到目前用户,下次用户输入帐号密码即可连接到保留数据。用户也可选择注册多个数据以达成针对性试题分类训练效果。主界面功效导航菜单采取了Javascript作为用户交互延展,主界面关键提供查看题库和在线答题两大模块。用户可依据自己需求进行选择。图4.2-2系统功效导航菜单展示在线答题分为了两大块,一块为自主构建,一块为系统生成。自主构建关键用于用户自定义选择试题。系统生成是用户在选择了试题难度、分数、数量等等一系列条件以后系统在数据库中自动生成满足条件对应试题。图4.2-3系统试题菜单展示查看题库功效为用户提供了展示数据库题库功效,用户能够依据类型分别看到数据库中单选题、多选题、填空题和简答题库存和情况,方便用户进行试题查找和试题编辑。图4.2-4系统主页面展示系统登录进去主界面图4.2-4所表示,左边为功效导航菜单展示,右边为系统展示幻灯片,提供多套优异试题给用户使用,也能够放很多适用信息。图4.2-5系统试题编辑菜单展示系统试题编辑菜单界面为用户对试题编辑整理提供了极大帮助,在这里用户能够自定义每一道题目标增加、删除、查阅和编辑功效并保留到数据库中。图4.2-6单选题展示列表题目名称能够更具ajax去动态查数据库已经有单选题目,避免反复。题目类别利用了easyUIcombotree插件,能够去调用数据库查找已经有题目类别表,供用户选择,不能手动输入。图4.2-7依据题目类型来查找示意图图4.2-8编辑界面示意图题目名称能够更具ajax去动态查数据库已经有单选题目,避免反复。题目类别利用了easyUIcombotree插件,能够去调用数据库查找已经有题目类别表,供用户选择,不能手动输入。图4.2-9多选题制订示意图点击导航栏多选题,进入到多选题展示列表,一样展示了该题目标全部信息,此表格能够分页查询,也能进行题目关键字和类别筛选,点击新建,进入到多选题新建页面,和单选题类似,只是在答案便成了能够同时选择多个答案值:点击编辑按钮,进入编辑页面,并显示目前这条数据全部信息,能够进行修改,并保留。图4.2-10填空题制订示意图在导航栏点击填空题,进入到填空题展示列表,其中基础功效全部是一样,只是在题目中,用方框来表示应该填空格。点击新建,进去填空题新建页面,此页面题目输入采取了uedit文本编辑器插件,此插件能够自定义多个编辑样式,在此,只有一个方框样式,用户需要用方框来表示填空题空格图4.2-11简答题制订示意图点击新建,进入到简答题新建页面。其中需要用答案关键值来保留简答题答案,关键词能够保留多个,能够点进新增按钮,则和会在表格下新增一行,点击删除按钮,则删除目前关键字。当关键字个数只有一个后,假如用户继续点击删除,则会弹出提醒框,提醒用户必需最少保留一个关键字。点击编辑按钮,则进入到编辑页面,一样能够删除和添加关键字;同一个关键字只能保留一次,假如有两个相同关键字,则经过利用easyUIvalidatebox插件来检测数据,并提醒用户此关键字反复。图4.2-12新建题目类别示意图点击编辑,则进入到类别编辑页面,入宫将这类别状态改为停用,则会同时停用这类别下面全部题目。5系统算法设计 试卷自动生成系统当中存在着很多需要计算算法,比如试卷自动组成中抽取选定条件试题怎样从庞大数据库中调用抽取,对于易错题它针对个人难度怎样实现合理波动,用户试题得分计算等等,全部离不开各项算法研究。一套合理算法不仅仅能够帮助用户取得愈加好使用体验,帮助用户经过试题愈加好地提升本身需求,同时也严谨了整个系统逻辑设计,提升了系统设计科学性。以下我们就来介绍本套试题中设计到算法研究。5.1组卷方法设计试卷组卷算法是试卷自动生成表现自动化关键,它要求依据用户所选择试题难度、分数、数量、类型等等条件以后自动生成符合条件试题,那么其中就存在一套能够从符合众多条件庞大数据库题库中提取对应试题算法,而且要尽最大可能避免试题雷同情况。试题组卷优良程度是辅助教学关键缓解,怎样确保生成试卷满足不一样用户需求不一样指标就显得十分关键了。试卷组卷方法有很多,常见关键有随机法、回朔法和遗传算法。以下我们就来介绍多个比较常见试卷组题算法。5.1.1随机法随机法顾名思义就是随机选择,结合本系统设定即依据用户设定各项条件,在满足各项条件指标情况下随机地从数据库中调取满足需求题目。简单地说就好比在关联确定了用户生成哪种类型题目以后,依据这种题目标难度系数,结合特定随机计算方法生成一个在该难度系数试题中随机获取一条,然后经过这条信息主键确定一条数据库数据而且读取出来,统计到出题题目集合当中去。每随机到一道题目对象,就会和已经调用题目集合进行循环比较,若该值相等话就不予采取并退出继续调用下一个,若不相等话即以调用试题中还未出现过该题,给调用。随机法优点是简单直接,能够快速地生成基础满足用户需求试题,同时较为平均选择方法也能够避免作弊现象出现。不过随机法选题可能并不是试题选题中质量最优算法,因为它并不含有回朔性质,逻辑思绪稍微欠缺一点。5.1.2回朔法回朔法又称为探索和回朔法,也简称试探法。它是一个一步步根据最优解进行不停调整优越搜索法。当有很多个选择时候,回溯系统会对每个选项逐一进行比较,当发觉原先选项不是最优解或达不到设定目标时候,就会退回一步做出重新选择,知道将全部选择全部试探完,退回到原节点,然后做出最优解,选择前进路线,直至试题全部选出。从上述对回朔法描述我们不难看出回朔法能够很正确地给出试卷组装最优解而且高质量地完成试题组装,不过这种高成功率算法是建立在大量牺牲时间基础上面进行,往往完成一次回朔法我们已经能够完成N次随机法随机选择了,而且回朔法占用内存相当大,程序结构和逻辑性思绪要求比较高,选择试题又全部是最优解缺乏了一定随机性。所以往往在试题数量要求较小试题组装过程中,因为技术较小能够忽略那一点随机性而且也不是消耗过多时间,我们能够考虑选择回朔法。图5.1-2回朔法思绪示意图5.1.3遗传算法遗传算法由来其实是从模拟达尔文生物进化论中自然选择和遗传学机理生物进化过程计算模型。它其实是一个经过模拟生物进化过程中搜索最优解方法。由后人利用到了神经网络当中去而且取得了显著效果。不过,仿基因编码工作相当庞大复杂,我们往往采取二进制编码进行简化,经过“优胜劣汰”方法去判定出“衍生”、“变异”、“交叉组合”优劣性质而且做出判定。遗传算法以拟生物学方法得到了很多学家认可,同时也能够利用到和“选择”相关编码当中来,不过因为其原理过于复杂,本文不作具体研究。5.2试题难度算法 试题难度关键经过用户对试题难度设定,经过文本输入试题难度,正则控制文本输入内容已抵达数据库获取正确试题难度而且保留目标。本文中提到试题难度算法关键是在用户答完试题以后系统自动给出增加难度和降低难度算法设定,其原理也较为简单,在这里只做简单介绍。经过前面对系统介绍我们知道,在用户生成完试题而且进行完作答以后,系统会统计出该用户此次试题成绩而且提供增加试题难度和降低试题难度一键再次生成试题功效。试题难度增加或降低全部是根据系统试题难度算法做出对应改变调整。首先,系统会获取到此次试题出题类型、各个类型题目数量和难度系数、考试总分数和总时间,而且获取到对应数据库字段,其次,用户若选择增加难度,系统会根据N=N+(p/P)*0.2方法四舍五入保留一至二位小数给出该类型题目标新难度系数,而且从数据库中提取出满足难度系数条件及类型对应试题重新组题。若用户选择降低难度,则公式变为N=N-(p/P)*0.2。其中N代表难度系数,p代表此次得分,P代表总分数。5.3试题分数算法本系统分数算法关键解释系统怎样对用户得分做出评价。我们知道,系统在用户点击了提交试卷以后会依据用户作答情况给出对应分数。再给出分数之前,系统会对用户在文本中答案和标准答案进行对比,关键原理是采取了经过提取用户作题文本中数据和数据库答案数据对比方法进行等值判定,若相等,用户得分追加,若不相等则不作追加得分。相对于选择题、判定题、填空题能够很轻易地判定出对错,不过怎样判定简答题呢?在自动化系统当中当然不会像人工改卷一样,我们会依次读取用户在文本中答案,并提前在数据库中答案中给出试题答案关键字或关键语句,若用户答案当中存在和之相符关键字,则基础能够判定出用户该题得分。经过一题设置多个关键字方法有利于提升判定正确性,也有利于试题一题多问设置。比如P=p1*J1+p2*J2+n*num,其中P为总得分,p1、p2为类型题答题正确个数(简答题除外),J为该类型题目单体分数,n为简答题关键词或语句个体分数,num为简答题关键词或关键语句正确个数。从而计算出此次试卷考试用户总分数。5.4系统算法总结此次试卷自动生成系统试卷组卷方法最终选定了随机法。随机法也是目前最适合利用到试卷作答系统试卷组卷方法,相对于回朔法而言有效率快优点,相对于遗传法有简单、易算优势。另外,一套试题总量通常不会超出100道,庞大数据库试题支撑加上对于反复率判定处理极大化地减轻了随机法缺点。最关键试卷组题算法确定以后,我们在选择难度系数算法和得分算法时候做处理就显得略微简单一点。本身其实也用不着刻意地去提升这些难度算法难度,我们只需要做出能够满足用户需求功效以后,代码和算法其实越简单越好。6关键功效代码展示6.1登录功效代码展示6.1.1数据库链接这是利用Hibernate框架关键配置文件,其中配置了连接数据库地址,用户名,密码和框架中多种连接池、缓存池、对数据库操作规范,和在调用数据库时是否在控制台显示sql语句和日志保留等。<persistencexmlns="" xmlns:xsi="" xsi:schemaLocation=":///xml/ns/persistence/persistence_2_0.xsd" version="2.0"> <persistence-unitname="jpa"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <properties> <propertyname="hibernate.dialect"value="org.hibernate.dialect.MySQL5Dialect"/> <propertyname="hibernate.connection.driver_class"value="com.p6spy.engine.spy.P6SpyDriver"/> <propertyname="hibernate.connection.username"value="root"/> <propertyname="hibernate.connection.password"value="root"/> <propertyname="hibernate.connection.url"value="jdbc:mysql://localhost:3306/ljc?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=UTF-8"/> <propertyname="hibernate.max_fetch_depth"value="3"/> <propertyname="hibernate.hbm2ddl.auto"value="update"/> <propertyname="hibernate.jdbc.fetch_size"value="18"/> <propertyname="hibernate.jdbc.batch_size"value="10"/> <propertyname="hibernate.show_sql"value="true"/> <propertyname="hibernate.format_sql"value="false"/> <propertyname="vider_class" value="org.hibernate.connection.C3P0ConnectionProvider"/> <!--最小连接数--> <propertyname="c3p0.min_size"value="5"/> <!--最大连接数--> <propertyname="c3p0.max_size"value="30"/> <!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default:0--> <propertyname="c3p0.maxIdleTime"value="60"/> <!--取得连接超时时间,假如超出这个时间,会抛出异常,单位毫秒--> <propertyname="c3p0.timeout"value="1800"/> <!--最大PreparedStatement数量--> <propertyname="c3p0.max_statements"value="50"/> <!--每隔120秒检验连接池里空闲连接,单位是秒--> <propertyname="c3p0.idle_test_period"value="120"/> <!--当连接池里面连接用完时候,C3P0一下获取新连接数--> <propertyname="c3p0.acquire_inscrement"value="1"/> <!--是否每次全部验证连接是否可用--> <propertyname="c3p0.validate"value="false"/> </properties> </persistence-unit></persistence>6.1.2登录功效 登录功效实现在逻辑层上面关键分为了两层,两层之间有着对应调用关系,一层调用一层第一步进行是网页层,也叫显示层。显示层将账号密码提交到控制层(也就是Action层),Action层只是起到一个请求转发作用,它调用Service层,Service层来实施具体操作,然后返回Action,Action更具返回跳转,然后用户就能看到是登陆失败还是成功。显示层<%@pagelanguage="java"contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%><% Stringpath=request.getContextPath(); StringbasePath=request.getScheme()+"://" +request.getServerName()+":"+request.getServerPort() +path+"/"; StringsCode="";%><!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN"""><html><head><basehref="<%=basePath%>"><metacharset="utf-8"><linkrel="stylesheet"type="text/css"href="css/login.css"/><!--引入jquery --><scripttype="text/javascript" src="javascript/jquery/js/jquery-1.7.min.js"></script><scripttype="text/javascript"> $(function(){ if(window!=top) top.location.href=location.href;// $("#loginForm").submit(); }); functionclosetip(){ $("#tip").css("display","none"); }</script><title>试卷自动生成系统|LJCSoft</title></head><body> style="background:url(images/login_01.png)repeat-x;height:100%;width:100%"> <divid="box"> <divclass="login"> <form id="loginForm" method="post"action="IndexAction.action"> //提交到action <divclass="lg_label"> <labelfor="name">用户名:</label><inputtype="text" name="j_username"id="txtUserName"value="admin"/> </div> <divclass="lg_label"> <labelfor="code">密码:</label><inputtype="password"name="j_password"id="code"value="1"/> </div> <divclass="lg_btn"> <inputtype="submit"value=""class="btn"onfocus="this.blur()"/> </div> </form> <divid="tip"class="tip"${Feq1?'style="display:block" ':'style="display:none"'}> <div style="position:absolute;top:-1px;right:-4px;cursor:pointer"> <imgsrc="images/login_06.png"width="13"onclick="closetip()" height="13"> </div> <pclass="tip_atr">密码或用户名错误!</p> <pclass="tpi_ass"> <ahref="#">忘记密码?</a> </p> </div> </div> </div></body></html>Service层packagecom.xxsoft.service;importjavax.persistence.EntityManager;importorg.springframework.stereotype.Service;importms.database.QueryBuilder;importms.database.Restrictions;importcom.xxsoft.entity.EmployeeInfo;/***登陆Service*@authorLJC**/@Service("LoginService")publicclassLoginServiceextendsBaseService{ publicEmployeeInfoloign(finalEmployeeInfoinfo){ try{ return find(EmployeeInfo.class,newQueryBuilder(){ @Override publicRestrictionscreateRestrictions(Class<?>clazz, EntityManagerentityManager){ Restrictionsrestrictions=Restrictions.forClass(clazz,entityManager); restrictions.eq("username",info.getUsername()); restrictions.eq("userpwd",info.getUserpwd()); restrictions.isNull("failuredate"); restrictions.isNull("quitdate"); returnrestrictions; } }); }catch(Exceptione){ e.printStackTrace(); returnnull; } }}6.1.3关键功效模块Action方法/** *diy生成试卷方法 *@return */ publicvoiddiyPaper(){ HttpSessionre=getSession();//获取session域对象 re.removeAttribute("sqlist");//将session域上次四个题目变量删除 re.removeAttribute("sqCount");//将session域上次四个题目变量删除 re.removeAttribute("sqScore");//将session域上次四个题目变量删除 re.removeAttribute("mqlist"); re.removeAttribute("mqCount");//将session域上次四个题目变量删除 re.removeAttribute("mqScore");//将session域上次四个题目变量删除 re.removeAttribute("gqlist"); re.removeAttribute("gqCount");//将session域上次四个题目变量删除 re.removeAttribute("gqScore");//将session域上次四个题目变量删除 re.removeAttribute("shqlist"); re.removeAttribute("shqCount");//将session域上次四个题目变量删除 re.removeAttribute("shqScore");//将session域上次四个题目变量删除 re.setAttribute("paperName",getString("paperName")); //以前台获取试卷题目 re.setAttribute("paperTime",getString("paperTime")); //获取试卷时间 re.setAttribute("paperTotal",getString("paperTotal")); //获取试卷总分 re.setAttribute("paperUser",loginUser.getEmployeename());//获取答题人 if(sq!=null){ //判定sq对象是否为空,sq表示单选题对象,目前台没有选择单选题时为空,选择则不为空 //sq对象中包含了前台中选择题目类型,难度,数量,单个分值等信息 sq.setType(1); List<Question>sqlist=(List<Question>)service.getDiyList(sq); //将此对象Service中查询对应满足条件题目列表 if(sqlist==null){ //判定查询出来集合是否为空 Write("error"); //为空表示数据库犯错,并返回error提醒用户 }elseif(sqlist.size()!=sq.getCount()){ //假如不为空,则判定集合数量是否是要求数量,假如不一致则表示题库数不够,返回到前台提醒用户 Write("false1"); }else{ //题数够 re.setAttribute("sqlist",JSONHelper.toJson(sqlist)); re.setAttribute("sqCount",sq.getCount()); re.setAttribute("sqScore",sq.getScore()); } } if(mq!=null){ //判定多选题...和上述类似 mq.setType(2); List<Question>mqlist=(List<Question>)service.getDiyList(mq); if(mqlist==null){ Write("error"); }elseif(mqlist.size()!=mq.getCount()){ Write("false2"); }else{ re.setAttribute("mqlist",JSONHelper.toJson(mqlist)); re.setAttribute("mqCount",mq.getCount()); re.setAttribute("mqScore",mq.getScore()); } } if(gq!=null){ //判定填空题... gq.setType(3); List<GapFillingQuestion>gqlist=(List<GapFillingQuestion>)service.getDiyList(gq); if(gqlist==null){ Write("error"); }elseif(gqlist.size()!=gq.getCount()){ Write("false3"); }else{ List<GapFillingQuestion>list=newArrayList<>(); for(GapFillingQuestiong:gqlist){ //在前端转json对象时,因为Name中有标签字符,会造成转换失败,所以在此值读取fillName和id list.add(newGapFillingQuestion(g.getId(),g.getFillName())); } re.setAttribute("gqlist",JSONHelper.toJson(list)); re.setAttribute("gqCount",gq.getCount()); re.setAttribute("gqScore",gq.getScore()); } } if(shq!=null){ //判定简答题... shq.setType(4); List<Question>shqlist=(List<Question>)service.getDiyList(shq); if(shqlist==null){ Write("error"); }elseif(shqlist.size()!=shq.getCount()){ Write("false4"); }else{ re.setAttribute("shqlist",JSONHelper.toJson(shqlist)); re.setAt}/** *diy生成试卷方法 *@return */6.2前端代码展示6.2.1主界面代码 <divstyle="width:1085px;height:420px;overflow:hidden"> <iframeframeborder="1"src="jsp/index/turnRun/carousel.html"name="mainFrame"style="height:400px;width:100%;overflow:scroll;"id="mainframe"></iframe> </div> <divstyle="width:100%;height:20px;border:0pxsolid#FFF;"></div> <divstyle="width:100%;height:100px;"> <iframeframeborder="0"src="jsp/index/home/foot.html"name="mainFrame"style="height:100px;width:100%;overflow:scroll;"id="rootframe"></iframe> </div></body></html>6.2.2图片轮播代码<body><divstyle="margin:0pxauto;"><!--Inserttoyourwebpagewhereyouwanttodisplaythecarousel--><divid="amazingcarousel-container-1"><divi

温馨提示

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

评论

0/150

提交评论