版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学生在线考试系统的设计与实现摘要:学生在线考试系统使用最流行的的PHP/MySQL架构和全B/S模式,后台管理员录入的学员只要可以使用互联网,就可以通过学生在线考试系统,参加在线考试。考试能够对单选题、多选题、对错题直接在线评分,学员登录成功后,选择科目对应的试卷,即可开始考试,在规定的时间内答案所有题目,系统会自动计算出考试成绩。系统后台实现了对题库、试卷、学员、考试科目的管理,题库管理实现了对试题的添加、编辑、删除功能,考生信息可以添加、编辑、删除功能,试卷管理实现了对试卷的添加、编辑、删除和组卷的功能。全文分为绪论、系统分析、设计工具及关键技术介绍、系统概要设计、系统详细设计、系统测试、总结展望、参考文献。详细阐述了系统分析、系统设计的方法及其内容。关键词:学生在线考试系统;自助;PHP+Mysql前言在Internet飞速发展的今天,互联网已进入千家万户,社会进入网络时代,计算机网络已经成为社会发展的强大动力。网络不仅给我们带来的是无穷的信息,也带来了更多便利。不仅企业、政府的正常工作离不开网络,教育事业同样需要网络。远程教育成为现代教育技术发展方向之一,在线考试作为远程教育的一个子系统也成为一个重要的研究领域。Internet技术的发展使得考试的技术手段和载体发生了革命性的变化,Internet的开放性、分布性和基于的巨大的计算能力使得考试突破了时间和空间的限制。基于internet的考试系统正成为人们的研究热点之一。高校传统方式组织考试,需要经历出卷、考试、阅卷、分析4个阶段,存在一些弊端:第一,重复劳动,造成人力、财力、物力和时间资源的浪费;第二,人工出卷和人工阅卷本身存在较大的主观性和差异性,容易出错;第三,学生考试采用统一试卷,考试容易发生作弊现象。同时某些任课教师为了提高其任课班级的总体成绩,造成试题泄露抄袭使成绩不真实,影响教学质量检测的真实效果。在线考试系统可以克服传统考试方法的不足:第一,真正实现考教分离,创造一个公平开放的考试环境。这是一种建立在计算机网络技术之上的新型考试方式,不仅是考试本身技术的改变,而且还能促进考试结果趋向相对客观。利用计算机网络平台分发考试题给学生,考生可以选择不同的套题,这是传统纸质试卷无法做到的。假设题库合理科学有效,那么这种考试的结果将是公正客观的,学生舞弊的可能性将降低到最小。同时考生利用在线功能,在交卷之后能核对自己的答卷及得分情况,从而杜绝教师判卷中的失误。第二,有效压缩组织考试的各个阶段,提高工作效率。在线考试充分利用学校现有的计算机软、硬件资源和网络资源实现无纸化考试,减少资源的浪费。考生选择套题名称后,可以通过系统打开该试卷,进行考试,答题结束后点击交卷,提交答题试卷。用户注册登录,用户提交一系列注册信息进行注册登录后,可以修改密码或个人资料。修改密码,考生或者其他身份人登录后可修改密码。若考生忘记密码,可由管理员对其进行密码重置,重置后的密码为六位随机数字。查询成绩,成绩查询是在线考试系统必不可少的功能模块,用户输入学号和密码登录后,即可查询已考过的试卷成绩,同时可看到参考答案,与自己的答题内容进行对照,知道自己错在什么地方,这也使得考试成绩更加透明化。第三,采用无纸化考试,创造节约型校园氛围。在线考试系统的应用可以有效的利用校园网,进一步提升学校的信息化水平,其系统内包含大量的试题提供学生进行自我练习,而这些练习都是在网上进行,能够有效的节约纸张,达到环保节约校园的氛围。后面的考试也是无纸化进行,这样就避免了纸张的浪费,符合当前建设节约型社会的要求。在线考试系统的应用,大大简化了教师的出卷、判卷等工作程序,提高了教师在考试任务中的工作效率,并且大大节省了教学经费的开支。特别是在考试结束后,学生们能够看到自己的试卷成绩。根据自己在测试中的不足,及时补充相应的知识。但由于技术不足,也存在诸多不足,需要日后不断完善使之成熟。 一、概述(一)本课题的目的和依据在竞争激烈的今天,不管什么行业,社会都需要人才,这是事实,不容置疑,而人才选拔的重要途径是通过考试来判定。现阶段,学校考试大都是传统的考试方式:由老师纸上出题,学生纸上答题,老师人工阅卷,以及人工试卷分析四大步骤组成。这是一个漫长而复杂的过程,已经越来越不适应现代教学的需要。这样做一是给老师带来工作上的繁琐,不利于老师工作效率的提高;二是人工的考试方式由于工作量大从而容易出错;三是人为因素的不确定性,可能会造成选题范围过于狭窄。随着各种考试类型的不断增加和考试要求的不断提高,传统的考试方式已不能满足现在考试的需求。随着经济和计算机技术的快速发展,网络技术也在不断的进步。如今,网络技术已经应用于教育领域中的各个方面。现在很多国内外的高等院校开展了网络在线教育模式,通过计算机网络实现对学生进行网络在线课程培训和课程的考试。在对在线考试系统进行分析的基础上,实现网上考试,不但能够提高教师的工作效率,节约大量的人力、物力与财力,还可以优化教学管理,提高教学质量,更重要的是影响现代高校课程的教学模式。因此,网上考试系统也如计算机辅助教学系统一样,成了界定教育现代化程度的重要标志。在线考试已成为计算机辅助教学的发展趋势之一,互联网具有的交互性、共享性、分布性、开放性的特点使在线考试突破了时间和空间的限制,考试的形式也冲破了传统的笔和纸的界限,愈来愈多的高校考试采用计算机。(二)本课题的基本内容学生在线考试系统主要包括学生个人信息、参加考试、成绩查询及修改密码,学生可以对个人信息的修改,成绩的查询与检索;教师通过该系统可以实现对所有学信相关信息进行检索与查询,成绩的查询;管理员可以对学生信息、考试信息及题库信息的进行调整与更新,保证考试工作顺利进行。(三)课题的构想本系统是分为前台和后台两大部分,前台可以让学生查询所有学生的相关信息,学生可以修改自己的个人信息,参加考试以及查询考试成绩。在后台,主要包括对发布通知,考试管理,题库管理,所有学生成绩的统计等。(四)系统相关技术Apache2.2+PHP5.4.22+Mysql技术进行开发。(五)开发环境PHP,即“PHP:HypertextPreprocessor”,是一种被广泛应用的开源通用脚本语言,尤其适用于Web开发并可嵌入HTML中去。它的语法利用了C、Java和Perl,语法简单、易于学习、功能强大、灵活易用。该语言的主要目标是允许web开发人员快速编写动态生成的web页面,但PHP的用途远不只于此。以下罗列了PHP所具有的一些特点:和其它技术相比,PHP本身免费。跨平台性强,PHP语言可以运行于Unix、Linux、Window。PHP是解释性的脚本语言,写完代码以后即可以执行,不像c,java,c++等语言还需要去编译执行,相对来说比较节省时间。配置及部署相对简单一些。功能全面:PHP支持图形处理、编码与解码、压缩文件处理、XML解析等。(六)系统后端采用Mysql数据库进行管理MySQL是一个快速,易于使用的RDBMS,被用于许多小型和大型企业。MySQL由一个瑞典公司MySQLAB支持。正在开发,销售。MySQL变得如此受欢迎,因为许多很好的理由:MySQL在一个开源许可下发布。所以使用它不要担心什么问题。MySQL本身是非常强大的程序。它拥有可处理最昂贵,最强大的数据库软件包的相当大一部分功能。MySQL使用众所周知的SQL数据语言的标准形式。MySQL可运行在许多类操作系统和许多语言,包括PHP,PERL,C,C++,JAVA等MySQL运行得非常快,甚至在大型数据集也可以运行得很好。MySQL与PHP非常友好,是最受赞赏的Web开发语言。MySQL支持大型数据库,可达5千万行以上的表。表的默认文件大小限制为4GB,但可以增加(如果操作系统可以处理它),800万TB是一个理论极限TB).MySQL是定制的。开源GPL许可允许程序员修改MySQL软件,以适应自己的特定环境。二、系统需求分析与概要设计(一)功能需求软件的需求分析必须要有对原业务的一个深入了解、提取、抽象、升华的过程。在需求分析阶段,要对经过可行性分析所确定的系统目标和功能做进一步的详细论述,以确定系统是“做什么”的。需求分析的转化,核心是两个点,一是对这个业务的场景进行充分的理解和认知,二是想明白业务场景中需求点,要通过何种方式来满足它;实际的需求过程中,需要结合业务场景、用户场景把一些关键细节挖掘出来,并能在产品设计时考虑进去,以给用户一个良好的体验;只要你充分认清楚业务需求方的诉求、用户在执行具体任务时的诉求,并对产品的常规实现方式有了解的话,需求分析并不是一个多复杂的过程,就是这么一步步去推理、去转化的过程;而要把每个细节做透,就必须在实际中多去磨练,在生活中多体验,学会场景化的思维方式。需求分析的主要任务是:定义软件的范围及必须满足的约束;确定软件的功能和性能及与其他系统成分的接口,建立数据模型、功能模型和行为模型;最终提供需求规格说明,并用做评估软件质量的依据。需求分析的结果是系统开发的基础,关系到工程的成败和软件产品的量。因此,必须用行之有效的方法对软件进行严格的审查验证。(二)性能需求学生在线考试系统设计的主要目的是要学生在线做题和学生成绩通过网络进行管理。为学生、管理员提供便利。系统的用户有2种类型,分别为系统管理员、学生、系统对于一个用户只允许以一种身份登录。系统管理员登录系统后可对系统进行管理,基主要操作是维护学生、题库和考试相关信息;学生登录后主要操作是选择题库、参加考试、成绩查询、以及个人信息维护。将系统需求加以总结,得出系统需求如下。系统可以运行在Windows操作系统平台上,并具有友好的用户界面。系统用户类型为:学生、管理员系统对于一个用户只允许以一种身份登录管理员功能有:发布考试通知,组织考题,设置考试题型,维护试题库,包括增加,删除,及时更新试题,支持关键词搜索考生的成绩并进行分析统计。学生功能有:收到通知,查询考试通知,查询个人考试成绩,修改密码,完成在线考试。(三)系统模块设计学生在线考试系统的角色是管理员、学生,管理员对学生、教师、课程和班级信息进行维护;学生选择想要上的课程,查看所选的课程的成绩、修改个人信息及教师信息的查询;根据以上用户操作需求,将系统划分为如下2大功能,并对其模块的划分和功能进行描述。管理员功能登录:登录学生信息维护:查询、修改、删除。试题信息维护:查询、添加、修改、删除。考试信息维护:查询、添加、修改、删除。学生功能登录:登录、修改密码学生个人信息:修改。考试:在线考试。成绩:查询。系统功能模块图如图2.1所示:图2.1学生在线考试系统的功能模块图(四)系统业务流程分析与设计需求确定之后需要对系统进行整体分析和设计。这包括系统功能的描述、对功能模块的划分和系统流程的分析。下面首先对系统功能进行描述。模块分析是描述系统需求的一个过程,需要将需求分析中的感性描述进行抽象,提到出要实现的功能,这是整个系统开发的一个关键过程。业务流程如图2.2所示:图2.2业务流程图(五)数据库概念模型设计这一设计阶段是在需求分析的基础上,设计出能够满足设计需求的各种实体,以及他们之间的关系,为后面的逻辑结构设计打下基础。此阶段是要用E-R实体关系图设计数据库的概念模型。构成E-R图的基本要素是实体型、属性和联系。E-R图构成成分在ER图中有如下四个成分:矩形框:表示实体,在框中记入实体名。菱形框:表示联系,在框中记入联系名。椭圆形框:表示实体或联系的属性,将属性名记入框中。对于主属性名,则在其名称下划一下划线。连线:实体与属性之间;实体与联系之间;联系与属性之间用直线相连,并在直线上标注联系的类型。学生实体属性图2.3:图2.3学生实体属性图管理员实体属性图2.4:图2.4管理员实体属性图考试实体属性图2.5:图2.5考试实体属性图试题实体属性图2.6:图2.6试题实体属性图试卷实体属性图2.7:图2-7试卷实体属性图试卷试题实关系体属性图2-8:图2.7试卷实体属性图试卷试题实关系体属性图2.8:图2.8试卷试题关系实体属性图学生考试详情体属性图2.9:图2.9学生考试详情实体属性图通知实体属性图2.10:图2.10通知实体属性图学生在线考试系统E—R图2.11:
图2.11学生在线考试系统实体之间关系E-R图(六)系统数据流程分析与设计1.数据流图概述特指软件产品中,描述数据在不同节点被处理的过程所画的图表。主要表达计算机程序对于业务的实现原理。用户在功能流程图中的每一个操作,对应都会反映在数据流程图中。同时,数据流程图也可以叫程序流程图(ProgramFlowDiagram)。它是一种能全面地描述信息系统逻辑模型的主要工具。它可以利用少数几种符号综合的反映出信息在系统中的流动、处理和存储的情况。数据流程图具有抽象性和概括性。数据流程有四种基本符号:外部项、数据流、处理逻辑(加工)、数据元素和数据存储。图2.12数据流程基本符号(1)外部项外部项又称外部实体,是指不受系统控制的,在系统之外的事物或人。它表达了该系统的数据的外部来源或去处。它也可以是另外一个数据处理系统,它向该系统提供数据或接收来自该系统向它发出的数据。(2)数据流数据流用箭头表示数据流动的方向,并给予命名。一般采用单箭头,偶尔使用双箭头。数据流可以由某一个外部项产生,也可以由某一个处理逻辑产生,还可以来自某一个数据存储。一般来说,对每一个数据流可以在数据流箭头的上方加以简单的描述;对一些含义比较明显的数据流,就不一定作描述。也可以在数据流上写记号,然后另外描述记号的意义。(3)处理逻辑(加工)处理逻辑对数据的变换方式有两种:A、变换数据的结构B、在原有数据内容基础上产生新的数据内容
可以用一个长方形框表示处理逻辑。由三部分组成:标识部分、功能描述部分和功能执行部分。标识部分用于惟一地标识一个处理逻辑,以区别于其它逻辑。一般用数字编号表示主处理逻辑,编号下再接子编号,表示某个处理逻辑被进一步分解后某个处理逻辑下的某个子处理逻辑等。功能描述部分是处理逻辑必不可少的部分。它用一句非常简单的话,直接表示这个处理逻辑要做的事,即它的逻辑功能。在逻辑的功能描述部分中没有主语,只有动词和宾语组成。执行这项功能的主体可能是某一个部门,也可以是某一个人或计算机程序,它们被看作处理逻辑的执行者,书写在长方框的底部。功能执行部分同标识部分一样,不是必须的,只是作参考用,通常是不写出的。(4)数据元素数据元素是数据的最小组成单位,也就是不可分的数据单位。数据元素是数据流或数据存储中的基本成分。(5)数据存储(文件)数据存储用长方条表记,在长方条内部写上该数据存储的名称。用作标识的编号一般用英文字母D和数字组成。同外部项一样,允许在一张数据流程式图上重复出现相同的数据存储,以避免数据流线的交叉,这时应在重复的数据存储符号的左侧再加一条竖线。一个处理逻辑可能要从数据存储中读出某些数据,或者可能把一些数据存入到某个数据存储中,甚至修改数据存储中的某些数据,那么就得用数据流将处理逻辑和数据存储联结起来。(1)数据流程图的分解编制复杂的数据流程图,最好的办法是采用自顶向下扩展逐层分解。首先是系统关联图,给出外部实体与即将开发的计算机在线考试系统之间的数据流。哪些数据流从外部实体进入系统,又有哪些数据流从系统输出给外部实体。关联图回答系统从外部世界得到什么,系统将给外部世界又是什么。从关联图分解得到顶层图,又从顶层图分解得到一层数据流程图,再分解出二层数据流程图。在分解过程中,随着更具体和更详细,新的数据流和数据存储被引入,但外部世界输入到系统,系统输出到外部世界,在关联图中提及的那些数据流是不能再增加,也不允许被减少的。在上述分解过程中,上层的一个处理逻辑可能被分解成多个更具体的处理逻辑,新的数据存储和数据流被被引入。如此逐一分解扩展,直至不需要再分解为止2、学生在线考试系统的数据流图图2.13学生在线考试系统数据流图(七)数据字典1.定义数据流编号名称组成来源去向D1.1学生信息录入学员姓名+密码+联系电话管理员学生信息录入处理D1.2学生信息学员姓名+密码+联系电话管理员学生表D1.3学生信息查询姓名/联系电话F1.1学生表学生查询处理D1.4学生信息学员姓名+密码+联系电话F1.1学生表F1.2学生表D2.1试题信息录入描述+选项+题型+答案管理员试题信息录入处理D2.2试题信息描述+选项+题型+答案管理员试题表D2.3试题信息查询描述/选项/题型/答案管理员试题表查询处理D2.4试题信息描述+选项+题型+答案F2.1试题表F2.2试题表D3.1试卷信息录入考试类别编号+试卷名+试卷时长+试卷总分数管理员试卷信息录入处理D3.2试卷信息考试类别编号+试卷名+试卷时长+试卷总分数管理员试卷信息查询处理D3.3试卷信息查询考试类别编号/试卷名/试卷时长/试卷总分数F3.1试卷表试卷信息查询处理D3.4试卷信息考试类别编号+试卷名+试卷时长+试卷总分数F3.1试卷表F3.2试卷表D4.1通知信息录入通知内容管理员通知信息录入处理D4.2通知信息通知内容管理员通知表D4.3通知信息查询通知内容F4.1通知表通知表查询处理D4.4通知信息通知内容F4.1通知表F4.2通知表D5.1登录用户名+密码学生学生个人信息验证D5.2个人信息修改用户名/密码/联系电话学生修改个人信息D6.1考试试卷/试题/分数学生试卷信息查询处理D6.2试卷信息查询处理学生编号/分数学生F5.1试卷表D7.1查询成绩学生编号/分数学生学生考试详情D7.2查询成绩查询处理学生编号/分数学生F6.1学生考试详情表2.数据处理编号:P1.1输入的数据流:D1.1文件信息:F1.1输出的数据流:D1.2功能说明:学生信息录入,管理员录入学生信息。编号:P1.2输入的数据流:D1.3输出的数据流:D1.4功能说明:学生信息查询处理,管理员查询学生信息,查看学生是否在表。出错信息:出错后提示管理员编号:P1.3输入的数据流:D1.3文件信息:F1.2输出的数据流:D1.4功能说明:学生信息维护处理,管理员对学生信息进行新增、修改、删除、保存操作。出错信息:出错后提示管理员编号:P2.1输入的数据流:D2.1文件信息:F2.1输出的数据流:D2.2功能说明:试题信息录入,管理员录入试题信息。编号:P2.2输入的数据流:D2.3输出的数据流:D2.4功能说明:试题信息查询处理,管理员查询试题信息,查看试题是否在表。出错信息:出错后提示管理员编号:P2.3输入的数据流:D2.3文件信息:F2.2输出的数据流:D2.4功能说明:试题信息维护处理,管理员对试题信息进行新增、修改、删除、保存操作。出错信息:出错后提示管理员编号:P3.1输入的数据流:D2.1文件信息:F2.1输出的数据流:D2.2功能说明:试卷信息录入,管理员录入试卷信息。编号:P3.2输入的数据流:D2.3输出的数据流:D2.4功能说明:试卷信息查询处理,管理员查询试卷信息,查看试卷是否在表。出错信息:出错后提示管理员编号:P3.3输入的数据流:D2.3文件信息:F2.2输出的数据流:D2.4功能说明:试卷信息维护处理,管理员对试卷信息进行新增、修改、删除、保存操作。出错信息:出错后提示管理员编号:P4.1输入的数据流:D4.1文件信息:F4.1输出的数据流:D4.2功能说明:通知信息录入,管理员录入通知信息。编号:P4.2输入的数据流:D4.3输出的数据流:D4.4功能说明:通知信息查询处理,管理员查询通知信息,查看通知是否在表。出错信息:出错后提示管理员编号:P4.3输入的数据流:D4.3文件信息:F4.2输出的数据流:D4.4功能说明:通知信息维护处理,管理员对通知信息进行新增、修改、删除、保存操作。出错信息:出错后提示管理员编号:P5.1输入的数据流:D5.1输出的数据流:D5.2功能说明:修改学生个人信息编号:P5.2输入的数据流:D5.1输出的数据流:D5.2功能说明:修改学员信息编号:P5.3输入的数据流:D6.1输出的数据流:D6.1功能说明:学员考试编号:P5.4输入的数据流:D7.1输出的数据流:D7.2功能说明:查询学生考试成绩3.定义数据存储表2.7.3-1学生信息表字段名称数据类型字段大小索引是否可为空注释idVarchar64PKNO学生编码studentNameVarchar50NO学生名passwordVarchar32NO密码telphoneVarchar14YES联系方式lastLoginTimetimestampYES上次登录时间表2.7.3-2管理员表字段名称数据类型字段大小索引是否可为空注释idint11PKNO管理员namevarchar32NO管理员名称passwordvarchar32NO管理员密码lastLoginTimetimestampYES上次登录时间表2.7.3-3试卷类别信息表字段名称数据类型字段大小索引是否可为空注释idInt11PKNO考试类别编号nameVarchar32NO类别名表2.7.3-4试卷表字段名称数据类型字段大小索引是否可为空注释idInt11PKNO编号categoty_idInt11FKNO考试类别编号nameVarchar100NO试卷名称timeLengthInt11NO考试时长scoreFloat3,2NO分数表2.7.3-5试卷试题关系表字段名称数据类型字段大小索引是否可为空注释idInt11PKNO关系编号paper_idInt11FKNO试卷编号question_idInt11FKNO试题编号scorefloat3,2YES试题分数表2.7.3-6试题表字段名称数据类型字段大小索引是否可为空注释idInt11PKNO试题编号desctextNO试题描述optiontextYES试题选项typetinyint1NO题型(1单选题,2多选题,3判断题,4简答题)answertextNO答案表2.7.3-7学生考试详情表字段名称数据类型字段大小索引是否可为空注释idInt11PKNO编号user_idvarchar64FKNO学生编号paper_idInt11FKNO试卷编号question_idInt11FKNO试题编号scorefloat3,2YES试题分数表2.7.3-8通知表字段名称数据类型字段大小索引是否可为空注释IdInt11PKNO编号contenttextNO通知内容createTimetimestampYES发布时间
三、系统详细设计与系统实现(一)总体流程设计系统总体设计即通过制定统一的操作流程,完成系统需求分析中规定的所有功能。确定系统的实施方案,即系统的物理模型。系统总体流程图:图3-1系统总体流程图图3.1学员管理程序流程图(二)管理员后台模块相关程序流程设计功能:学员管理、试题管理、试卷管理、通知管理学员管理程序流程图如图3.2所示:图3.2学员管理程序流程图试题管理程序流程图如图3.3所示:图3.3试题管理程序流程图试卷管理程序流程图如图3.4所示:图3.4试卷管理程序流程图知管理程序流程图如图3.5所示:图3.5试卷管理程序流程图(三)学员考试程序流程设计学员考试程序流程图如图3.6所示:图3.6学员考试据库,关系型数据库在海量数据和单位时间响应事务处理请求等方面,有着明显的优势。关系型数据库是以服务器的方式提供数据服务的,其对于数据的管理有着良好的控制,在维护数据的完整性,数据的安全性方面有完善的考虑。相比之下,基于文件数据库只是以文件的方式提供简单的文件存储格式,数据管理需要自行编写程序控制。显然,在处理企业复杂的关键事务的时候,将数据放在基于文件的数据库是非常不合适的。使用关系型数据库是企业管理信息系统的唯一选择。浏览器/服务器作为客户机/服务器的升级,继承了客户机/服务器在联机事务处理方面的优点,在支持分布式数据处理方面和客户机/服务器是一样的。本系统是采用SQL语言建立的数据库,之间的关系如图3.7所示:图3.7数据库表关系图3.5界面设计3.5.1界面设计方法:遵循Windows界面的设计风格,并能充分体现用户功能的直观性和方便性、数据操作的规范性和统一性。将功能列表集中显示,方便用户查找使用,简单的操作逻辑可快速培养用户使用习惯。主要操作界面放在一个窗口显示,不会造成窗口过多,杂乱无章的情况。将界面划分为不同的功能区域,相互间不干扰,在一个界面内解决所有问题,便于用户使用和操作。1.登录模块界面设计提示:代码只显示了部分重要代码,具体详细代码查看附件压缩包文件.
前台部分:前台登录界面如图3.8所示图3.8前台登录界面图相关代码展示:
<divclass="moduleform-module"><divclass="form"><h2><center>登录你的账号</center></h2><formmethod="post"id="login"name="login"onsubmit="javascript:returnchkfrm(this);"action="/Index/doLogin"><inputtype="text"name="username"onpropertychange="javascript:if(this.value.length>=8)this.form.userpwd.focus();"placeholder="请输入用户名"/><inputtype="password"name="password"placeholder="请输入密码"/><inputtype="submit"value="登录"class="buttonh-login-button"></form></div></div>前台界面如图3.9所示图3.9前台首页界面图部分代码如下:<divclass="m-main-right"><h1class="m-main-right-title">欢迎使用何学章在线考试系统~</h1><divclass="m-main-right-content"><divclass="content-l-wrap"><divclass="content-l-item"><span>全真模拟:</span><label>全面模拟机考流程,给考生最贴近实际的机考体验。</label></div><divclass="content-l-item"><span>名师题库:</span><label>顶级名师团队精心编写,提醒全面,覆盖各类考点。</label></div><divclass="content-l-item"><span>全新体验:</span><label>最人性化的人机交互体验,锻炼考试操作能力和速度。</label></div><ahref="javascript:;"><divclass="start-btn"><ahref="/Index/allPaper"style="color:#fff">开始考试</a></div></a></div><divclass="content-r"><h1>温馨提醒!</h1><divclass="content-r-text">今天是<span>{{$smarty.now|date_format:'%Y'}}</span>年<span>{{$smarty.now|date_format:'%m'|intval}}</span>月<span>{{$smarty.now|date_format:'%d'}}</span>号,天气晴,请您合理安排考试时间,祝您考试顺利!</div></div></div></div>我的考试界面如图3.10所示图3.10我的考试界面图其页面部分代码:/*所有试卷*/publicfunctionallPaperAction(){ $allPaper=$this->model('Paper')->find(); $this->tpl->assign('category',$this->_getCategoryList()); $u=$this->getSession('userInfo'); //我的做题详情 foreach($allPaperas$key=>&$val){ $condition['where']="paper_id=".$val['id'].'ANDuser_id="'.$u['id'].'"'; $result=$this->model('StudentExamDetail')->find($condition); if($result){ $val['finish']=1; } } $this->tpl->assign('data',$allPaper); $this->tpl->display('allPaper.html');}开始做题界面如图3.11所示图3.11开始做题界面图其页面部分代码:
/*做题页面*/publicfunctiondoQuestionAction(){ $u=$this->getSession('userInfo'); $paperId=intval($this->get('paperId',0)); if($paperId>0){ //试卷信息 $data['paperInfo']=$this->model('Paper')->load($paperId); $data['questionInfo']=$this->_getPaperQuestion($data['paperInfo']); $data['questionType']=$this->model('Question')->questionType; $this->tpl->assign('data',$data); $this->tpl->display('doQuestion.html'); }}/***做题业务处理*/publicfunctiondoPaperQuestionAction(){ $paperId=intval($this->post('paperId',0)); $arrQuestion=$this->post('question'); if(is_array($arrQuestion)){ $objRelation=$this->model('StudentExamDetail'); $u=$this->getSession('userInfo'); foreach($arrQuestionas$question_id=>$answer){ $data=array( 'user_id'=>$u['id'], 'paper_id'=>$paperId, 'question_id'=>$question_id, 'answer'=>is_array($answer)?serialize($answer):$answer ); $objRelation->insert($data); } $this->alert('添加成功','/Index/allPaper'); }else{ echo$this->allPaperAction(); }}我的成绩界面如图3.12所示图3.12我的成绩界面图其页面部分代码:/**我的成绩页面*/publicfunctionmyScorePaperAction(){ $allPaper=$this->model('Paper')->find(); $this->tpl->assign('category',$this->_getCategoryList()); $u=$this->getSession('userInfo'); if($allPaper){ foreach($allPaperas$key=>&$val){ $condition['where']="paper_id=".$val['id'].'ANDuser_id="'.$u['id'].'"'; $result=$this->model('StudentExamDetail')->find($condition); if($result){ $val['finish']=1; }else{ unset($allPaper[$key]); } } } $this->tpl->assign('data',$allPaper); $this->tpl->display('myScorePaper.html');}试卷成绩详情界面如图3.13所示图3.13试卷成绩详情界面图其页面部分代码/***我的成绩*/publicfunctionmyScoreAction(){ $paperId=intval($this->get('paperId',0)); $u=$this->getSession('userInfo'); if($paperId>0){ //试卷信息 $data['paperInfo']=$this->model('Paper')->load($paperId); $data['questionInfo']=$this->_getPaperQuestion($data['paperInfo']); $data['question']=$this->_getPaperQuestionInfo($data['paperInfo']); $data['questionType']=$this->model('Question')->questionType; $condition['where']="paper_id=".$paperId.'ANDuser_id="'.$u['id'].'"'; $result=$this->model('StudentExamDetail')->find($condition); $data['paperInfo']['mySCore']=0; foreach($resultas$key=>$val){ if(!empty($val['answer'])){ //计算得分 if($data['question'][$val['question_id']]['answer']==$val['answer']){ $data['paperInfo']['mySCore']+=$data['question'][$val['question_id']]['score']; } $val['answer_decode']=@unserialize($val['answer'])?@unserialize($val['answer']):$val['answer']; } $data['detail'][$val['question_id']]=$val; } $this->tpl->assign('data',$data); $this->tpl->display('myScore.html'); }}个人信息界面如图3.14所示图3.14个人信息详情界面图其页面部分代码:{{includefile='common/header.html'}}<divclass="m-main01">{{includefile='common/left.html'currentPage='myPersonalInformation'}}<divclass="m-main-right"><divclass="m-main-right-info"><divclass="m-info-item"><label>用户名:</label><span>{{$data.studentName}}</span></div><divclass="m-info-item"><label>手机号:</label><span>{{$data.telphone|default:'暂无'}}</span></div><divclass="m-info-item"><label>上次登录时间:</label><span>{{$data.lastLoginTime}}</span></div><ahref="/Index/editPersonalInformation"class="m-info-edit">编辑</a></div></div></div>{{includefile='common/footer.html'}}通知界面如图3.15所示图3.15通知界面面图其部分代码:{{includefile='common/header.html'}}<divclass="m-main01">{{includefile='common/left.html'currentPage='notice'}}<divclass="m-main-right"><divclass="m-main-right-tips">{{$data.content|default:'暂无通知'}}</div></div></div>{{includefile='common/footer.html'}}后台部分:后台登录界面如图3.16所示图3.16后台登录界面默认管理员账号为admin密码为admin其部分代码:<divclass="m-login-wrap"><divclass="m-login"style="margin-top:175px;"><pclass="m-login-p1"><label>用户</label><inputname="username"type="text"></p><pclass="m-login-p2"><label>密码</label><inputname="password"type="password"><buttonid="h-js-loginBtn">登录</button></p></div></div><scripttype="text/javascript">$(function(){//登录$("#h-js-loginBtn").click(function(){varusernameObj=$("input[name='username']");varpasswordObj=$("input[name='password']");varusernameVal=usernameObj.val();varpasswordVal=passwordObj.val();if(usernameVal==''){usernameObj.focus();alert('请输入用户名');returnfalse;}if(passwordVal==''){passwordObj.select();alert('请输入密码');returnfalse;}$.ajax({type:"POST",url:"/admin/doLogin",dataType:'json',data:{username:usernameVal,password:passwordVal},success:function(msg){if(msg.Status==1){window.location='/admin/index';}else{alert(msg.Error);returnfalse;}}});});//退出$("#h-js-logoutBtn").click(function(){console.log($(this).html());});});</script>后台学员管理添加页面如图3.17所示图3.17后台学员管理添加页面其部分代码:publicfunctiondoAddAction(){ $info='参数不能为空'; $data=$this->post(); if(isset($data['id'])&&!empty($data['id'])){ //编辑 if(isset($data['password'])&&!empty($data['password'])){ $data['password']=md5($data['password']); }else{ unset($data['password']); } $info=false!==$this->objUser->update($data['id'],$data)?'编辑成功':'编辑失败'; }else{ if(!empty($data['studentName'])&&!empty($data['password'])){ $data['password']=md5($data['password']); $data['id']=getGuid(); $lastId=$this->objUser->insert($data); $info=false!==$lastId?'添加成功':'添加失败'; } } $this->setSession('doNotice',$info); $this->redirect("/Admin_Student/list");}后台试题管理页面如图3.18和3.19所示图3.18后台试题管理页面图3.19后台试题管理页面其部分代码:publicfunctionlistAction(){ $pageSize=10; $totalRowCount=$this->objQuestion->count('1=1'); $page=newCola_Com_Pager($totalRowCount,$pageSize); $>_ajax_func='common.ajaxPage'; $conditions=array( 'order'=>'`id`DESC', 'start'=>$>_start, 'limit'=>$pageSize ); $data['list']=$this->objQuestion->find($conditions); $data['pageHtml']=$>renderNav(); $this->tpl->assign('questionType',$this->objQuestion->questionType); $this->tpl->assign('data',$data); if($this->request->isAjax()){ echojson_encode(array('status'=>1,'html'=>$this->tpl->fetch("admin/question/_list.html"))); }else{ $this->tpl->display('admin/question/list.html'); }}publicfunctiondoAddAction(){$info='参数不能为空!';$data=$this->post();if(isset($data['option'])){$data['option']=serialize($data['option']);}if(isset($data['rightOption'])){if(is_array($data['rightOption'])){$data['answer']=implode(',',$data['rightOption']);}else{$data['answer']=$data['rightOption'];}}//判断题时if($data['type']==3){$data['option']=serialize(array('0'=>'错误','1'=>'正确'));}unset($data['rightOption']);if(isset($data['id'])&&!empty($data['id'])){$info=false!==$this->objQuestion->update($data['id'],$data)?'编辑成功':'编辑失败';}else{if(!empty($data['desc'])&&(!empty($data['answer'])||$data['answer']==0)){unset($data['id']);$lastId=$this->objQuestion->insert($data);$info=false!==$lastId?'添加成功':'添加失败';}}$this->setSession('doNotice',$info);if($info=='编辑成功'||$info=='添加成功'){$this->redirect("/Admin_Question/list");}else{$this->tpl->assign('questionType',$this->objQuestion->questionType);$this->tpl->assign('data',$data);$this->tpl->display('admin/question/add.html');}}后台试卷管理页面如图3.203.213.22所示图3.20后台试题管理页面图3.21后台试题管理页面图3.22后台试题管理页面其部分代码:publicfunctiondetailAction(){ $id=$this->get('id'); if(!empty($id)){ $data=$this->objPaper->load($id); $data['json']=http_build_query($data); //所有试题 $objQuestion=$this->model('Question'); $data['allQuestion']=$objQuestion->find(); $data['questionType']=$objQuestion->questionType; //试卷中的题目 $conditions=array( 'where'=>'paperId='.$id ); $result=$this->model('PaperQuestionRelation')->find($conditions); $data['questionIds']=$data['scores']=array(); if(!empty($result)){ foreach($resultas$key=>$item){ array_push($data['questionIds'],$item['questionId']); $data['scores'][$item['questionId']]=$item['score']; } } $this->tpl->assign('data',$data); } $this->tpl->display('admin/paper/detail.html');}publicfunctiondoAddAction(){ $info='参数不能为空!'; $data=$this->post(); if(isset($data['id'])&&!empty($data['id'])){ //编辑 if(false!==$this->objPaper->update($data['id'],$data)){ $this->redirect("/Admin_Paper/list"); }else{ $info='编辑失败'; } }else{ if(!empty($data['name'])&&!empty($data['category_id'])){ unset($data['id']); $lastId=$this->objPaper->insert($data); if(false!==$lastId){ $this->redirect("/Admin_Paper/list"); }else{ $info='添加失败'; } } } $this->setSession('doNotice',$info); $this->tpl->display('admin/paper/add.html');}后台通知页面如图3.233.24所示图3.23后台通知页面图3.24后台通知页面其部分代码:publicfunctiondoAddAction(){ $info='参数不能为空'; $data=$this->post(); $data['createTime']=!empty($data['createTime'])?$data['createTime']:date('Y-m-dH:i:s'); if(isset($data['id'])&&!empty($data['id'])){ if(false!==$this->objNotice->update($data['id'],$data)){ $this->redirect("/Admin_Notice/list"); } $info='编辑失败'; }else{ if(!empty($data['content'])){ unset($data['id']); $lastId=$this->objNotice->insert($data); if(false!==$lastId){ $this->redirect("/Admin_Notice/list"); } $info='添加失败'; } } $this->setSession('doNotice',$info); $this->tpl->display('admin/notice/add.html');}四、系统测试(一)软件测试概述软件测试(SoftwareTesting):使用人工和自动手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求或弄清楚预期结果与实际结果之间的差别。测试的目的是:(1)为了发现尽可能多的缺陷,并期望通过改错来把缺陷统统消灭,以能提高软件的质量。一个成功的测试用例在于发现了至今尚未发现的缺陷。(2)以最少的人力、物力和时间找出软件中潜在的各种错误和缺陷,通过修正各种错误和缺陷提高软件质量,回避软件发布后由于潜在的软件缺陷和错误造成的隐患所带来的商业风险。(二)软件测试的方法软件测试方法一般分为动态测试方法与静态测试方法。动态测试方法中又根据测试用例的设计方法不同,分为黑盒测试与白盒测试两类。1.静态测试静态测试是采用人工检测盒计算机辅助静态分析的手段对程序进行检测,方法如下:人工检测:是指不依靠计算机运行程序,而靠人工审查盒评审软件。计算机辅助静态分析:指利用静态分析软件工具对被测试程序进行特性分析,从程序中提取一些信息,来检查可能出错的变量、参数与代码等。2.动态测试动态测试与静态测试相反,只要是设计一组输入数据,然后通过运行程序来发现错误。一般有两种方法:黒盒测试和白盒测试。测试任何软件都有两种方法:黑盒测试和白盒测试法。黑盒测试也称功能测试,它是通过测试来检测每个功能是否都能正常使用。在测试中,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试。白盒测试[1]
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 好运常在课件
- 党课简报标题
- 公司人事管理制度范本
- 矿山监察局考试题及答案
- 上海公务员公安考试试题及答案
- 2025年度市司法局党组书记抓基层党建工作报告
- 2025年合成橡胶十年数据:高性能配方轮胎市场前景报告
- 2025年城市地下综合管廊PPP项目在智慧安防领域的应用前景分析报告
- 2025年化工行业新材料与精细化工发展报告
- 2025年互联网券商服务行业趋势五年预测报告
- 单人徒手心肺复苏操作评分表(医院考核标准版)
- 国家预算实验报告
- 工业园区综合能源智能管理平台建设方案合集
- 附件1:中国联通动环监控系统B接口技术规范(V3.0)
- 正弦函数、余弦函数的图象 说课课件
- 闭合性颅脑损伤病人护理查房
- GB/T 19216.21-2003在火焰条件下电缆或光缆的线路完整性试验第21部分:试验步骤和要求-额定电压0.6/1.0kV及以下电缆
- 《你看起来好像很好吃》绘本课件
- 囊袋皱缩综合征课件
- 硬件原理图设计规范
- 2023版北京协和医院重症医学科诊疗常规
评论
0/150
提交评论