学生在线考试系统的设计与实现-毕业论文_第1页
学生在线考试系统的设计与实现-毕业论文_第2页
学生在线考试系统的设计与实现-毕业论文_第3页
学生在线考试系统的设计与实现-毕业论文_第4页
学生在线考试系统的设计与实现-毕业论文_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

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

文档简介

本科毕业论文(设计)模板本科毕业论文(设计)论文题目:在线考试系统的设计与实现 学生姓名:罗伟 学号:1205290203专业:软件工程班级:软件1202指导教师:王命宇完成日期:2016年5月30日绪论(一)系统开发的目的随着C++、java、C#等面向对象编程语言的出现。OOP的编程模式深入软件工程师们的内心。但是在大多数网站应用似乎被javastructs框架、jsp框架、.net框架所垄断,尽管如此,这些框架在一些领域因为其执行效率的低下而被用户诟病。比如,java需要在JVM环境下运行,对大量内置数据类型进行过度封装,其在效率、性能方面的不足也体现出来。C/C++一直在效率方面表现出色,被广泛应用于系统、驱动、服务器和游戏行业软件的开发。C++同样也适合于开发网站,并因其效率方面的优点,本系统就是为了在这方面做进一步尝试。C++对开发者的技术要求高、难度大,所以在开发web应用方面,应用极少。通过本系统介绍用C++进行开发web应用,期望可以推广C++在web领域得到程序员们的青睐,激发广大编程初学者对C++的热爱,敢于迎难而上,攻克难关,推动我国乃至世界软件业的发展。除了为了推广C++在不同的领域、业务中的应用外。开发此系统是为那些打算开发出高并发、高性能、稳定健壮网站的程序员们提供一个示例和样本。改善大量用户同时在线访问时,出现的服务器崩溃、宕机、响应延时高、不稳定、产生错误的瓶颈。(二)系统开发的意义本系统开发的意义不仅仅在其对C++语言的推广,鼓励更过的后来者勇于登上计算机科学的高峰,解决一个接一个的难题,最终推动计算机科学的发展的学术性意义。更重要的是,它也具有很大的商业价值和实际意义。相对于传统的线下考试,在线考试不需要安排实际的‘物理考场’。安排大量的考场,设置过多的考点、密切关注对考场秩序的调度。这会带来大量的人力资源成本,并且效率低下,不符合信息时代对效率的要求。在线考试也不局限于地理位置的分布而呈现出任何差异,所有参加考试的考生只需登录到系统就可以进行答题。这方便了考生合理安排自己的答题环境。对教师而言,减轻了大量手工批阅试卷的负担,客观题部分完全自动化阅卷。主观题则只需和管理员沟通制定相应的评分细则,系统采用类似于标准答案关键词匹配比例的算法即可比较公正地批改试卷。非常轻松简捷,方便,降低了人工阅卷的难度。一、系统简介随着大数据、云存储、云计算、高并发、集群与分布式计算这些新技术的出现,使得人们对效率和性能的关注度也急剧升温。本系统是拟为学生参加在线编程技术考试而开发的。系统采用B/S架构,nginx反向代理服务器部署在Linux后端服务器集群系统中,使用memcached高性能分布式缓存技术,在大量考生同时参与考试时,使得服务器正常工作的同时,还保证了效率和性能。这相比线下考试具有更大的灵活性和稳定性。另外,在日常生活中中我们访问的大量的web应用程序都是使用javastructs、jsp、asp、.net等框架开发架构的。而本系统则是使用C++语言开发web后端服务器程序。C++因其面向对象编程特性(OOP)及向前兼容C面向过程式编程,这使得C++在程序执行效率上与C语言处于同一水平。众所周知,C语言主要用于开发系统级别的应用或驱动程序,而C++语言则用在服务器、部分系统级别的底层开发(尤其是游戏服务器)。之所以使用C++语言是因为C不适合大型项目或具有通用性和代码可高度可重用性的开发。国内外的web网站几乎都会用到程序连接访问数据库,而大量地访问数据库,会给应用程序带来很多负担,解决方案是除了使用memcached高性能的分布式缓存服务器外,可以在语言上做出选择。大部分数据库对于C/C++语言都提供了源码级别的支持,再加上C/C++程序执行效率高,这对于频繁访问数据库的web应用是一个不错的选择。和前文提到的类似,由于web应用需要大量地访问数据库,可以考虑在服务器端部署memcached分布式缓存服务器以减少应用程序对数据库的访问次数,从而提高web动态应用的响应速度和可扩展性。本文主要是为了在C/C++开发高并发响应的web应用方面做出一些尝试。(一)环境简介整个考试系统涉及的开发语言、开发平台、运行平台、运行环境要求及限制、使用的技术手段的详细信息参见表1-1。表1-1 系统环境汇总表开发语言C++开发平台Linux(Centos6.664bits)Web反向代理服务器nginx数据库mysqlWeb文档Html2.0(>=)缓存服务器memcached其他辅助开发工具模板引擎、js/cssfcgi后端服务器运行环境任何unix-like的操作系统。本系统使用的是Centos6.6。Web客户端运行环境操作系统平台:Winall/Linux/Unix-like/Mac-OS浏览器:Google(推荐)、IE、firefox等主流浏览器。(二)nginx简介Nginx(“enginex”)最早是由俄国软件工程师Igor.Sysoev采用C语言、Linux系统平台的epollIO多路复用技术、kqueue网络IO模型编写的httpweb反向代理服务器。在高并发大数据量连接的场景下,nginx是Apache非常好的不二选择。并且具有效率高、稳定性好、高并发、负载均衡、内存、CPU等硬件资源消耗低的优点,以至于Nginx在国内外众多的互联网门户网站的应用已经呈现出锐不可当之势。比如Facebook、腾讯3G下载、网易新闻、迅雷安全中心、新浪博客播客、酷六、豆瓣、六间房、水木社区、新华网RSS订阅频道等国内外知名的门户网站。Nginx在http代理和反向代理服务器方面的应用几乎会取代Apache(本文并没有任何诋毁和轻蔑Apache在行业中的地位,仅仅是个人的预测)。同其他的http服务器和反向代理服务器一样,Nginx既可以响应静态页面请求(即http服务器),又可以响应动态页面请求(通过与后端服务器fcgi或cgi交互,把数据返回给客户端浏览器)。下面归纳总结了使用nginx相对于其他老牌服务器(Apache为例)的优缺点对比,参见表3-2。表1-2 各服务器优缺点对比nginxApache是否轻量级是(线程级别)否,重量级(进程级别)静态页面处理能力约平均是Apache的3倍性能高并发性能nginx处理请求是异步非阻塞的,因此支持高并发。Apache则是阻塞型的,高并发连接下会出现大量错误或拒绝客服端访问。资源消耗内存,CPU消耗低高并发下,资源消耗非常大是否支持负载均衡是否是否支持热部署是否Rewrite模块逊于Apacherewrite,比nginx的rewrite强大对动态页面的响应不太好非常好因为,两者都支持http服务和反向代理、正向代理。又基于两者各自的优缺点,在一些应用场景下,已经考虑让nginx和Apache共存,以提供给客户端更优质的响应。在性能方面,Nginx是专门为性能优化而开发的,在实现上非常注重效率。Nginx在高并发连接和大量静态页面请求下,性能出众,稳定性好。基于效率优先的前提,本系统采用nginx作为http服务器和反向代理服务器。(三)cgi与f-cgi原理简介在说明FastCGI之前,先说说CGI的前世今生。CGI即CommonGatewayInterface公共网关接口。CGI后端服务器程序的原理是:每次当客户请求到来时(即请求CGI),http服务器或反向代理服务器就会fork+exec生成替换一个新的CGI进程处理客户请求。当CGI执行完毕后,该CGI子进程将会被服务器进程kill掉。也就是说由服务器管理着处理客户请求的CGI子进程。显而易见,当高并发连接环境下,这样的工作模式是很受程序员诟病的。因为频繁地创建和销毁子进程将加大系统的开销和负担。FastCGI(即fcgi,后文将用fcgi简言之),本质上是对CGI的改进。其工作原理是将用于处理客户连接请求的子进程,即CGI解释器进程长期驻留于内存中并因此获得在性能上的提高。fcgi克服了CGI的弊病,CGI解释器的反复加载是CGI性能低下的主要原因,相反,用fcgi进程管理器调度管理常驻在内存中的CGI解释器会明显提高服务器的性能。fcgi完整的工作过程如下所述:首先,fcgi进程管理器(nginx下fcgi与反向代理服务器是分离的)在http服务器或反向代理服务器启动时即载入内存。接着,fcgi进程管理器进行初始化,随后同时启动多个CGI解释器进程,等待来自客户端的连接。紧接着,当客户端连接请求到达Http服务器或反向代理服务器时,fcgi进程管理器选择并连接到一个CGI解释器进程。由我们的Http服务器或反向代理服务器将CGI环境变量和标准输入重定向到fcgi子进程。fcgi子进程执行完处理后将标准输出和错误信息重定位到客户端浏览器。这就是本系统客户端和服务器交互通信的原理。当fcgi子进程关闭连接时,请求便告处理完成。fcgi子进程接着等待并处理来自fcgi进程管理器(运行在Http服务器或反向代理服务器中)的下一个连接,而不急着退出系统,换出到磁盘。而CGI进程在传统的CGI模式中,执行完后就不存在了。显而易见的是,CGI相对于fcgi相当慢。每一个Web请求到来都要生成一个子进程去处理请求,完成请求时又被主进程析构掉。使用fcgi,所有这些都只在nginx主进程启动时发生一次。一个额外的好处是,持续数据库连接可以工作并运行良好。简单地说,fcgi服务器优于cgi服务器。因为每次有新的客户链接请求到来时,fcgi使用的是多线程处理方式去处理请求,而cgi则是fork+exec复制替换一个进程去处理请求,存在多进程的开销和负担。(四)memcached简介Memcached是一款分布式内存对象缓存软件,主要用途是动态Web应用中,减轻数据库负载。它通过将已经访问过的数据和对象缓存于内存中,减少对数据库的读访问次数,提高访问数据库的速度。Memcached内部数据结构使用一个存储键值对的哈希表(HashMap),用C语言编写的守护进程(daemon),而客户端可以采用任何语言编写只需要遵循memcached约定的应用层协议即可与memcached服务器端守护进程通信。因此,memcached具有极强的分布式缓存的能力。memcached的存储机制是,其API使用循环冗余校验计算出存储键值,基于处理哈希冲突的方式寻找出合理的存储数据的服务器,当内部HashMap表格满后,采用LRU(最近未使用的算法)替换出那些不太重要的数据存放在内存中。大多数web应用架构都是将服务器端的重要数据存储在数据库中,把客户端用户请求的数据从数据库中读取并显示在客户端浏览器界面。但对于那些对数据集中访问的大量客户端请求,服务器端从数据库取数据的速度和性能会非常糟糕,最终导致服务器端和客户端响应时延加长,网站访问速度极慢。memcached就可以非常好的解决这个问题。从前文的介绍中不难得出,memcached是一款性能极高的分布式缓存服务器,其主要用途是:通过缓存数据库查询结果,减少对数据库访问次数,提高动态Web应用的响应速度。本文只是引进对memcached的使用,并非是一个对memcached的历史、发展、使用目的、用途、通信机制和原理、存储算法和优化、安装配置使用的完全指南。更过这方面的细节,可以关注网上或图书中关于memcached的详细介绍。总而言之,与memcached通信是十分简单可行的,因为他们遵循的是应用层的协议,只要遵循这种协议通信机制,任何语言都可以和memcached服务器端通信。比如:Perl、PHP、Python、Ruby、C#、C/C++、Lua。这就是本系统选择memcached作为缓存机制的最好诠释。(五)mysql数据库简介Mysql数据库是一种开源关系型数据库(RDBMS)软件,后被oracle公司收购。mysql广泛使用于应用程序的后台数据库或企业管理日常数据。对于其社区版本(免费版)提供的功能完全足够用于本系统的开发。Mysql在windows、Linux、类unix操作系统下都有对应版本可供安装使用。二、可行性研究可行性研究是软件进行之前必须做的工作,可行性分析的结果最终决定了是否继续开发这个项目。本系统主要研究了在经济、技术、法律方面的可行性以及在可行性研究阶段,以概括的形式表达对现有系统的认识的工具:系统流程图、数据流图、数据字典。(一)经济可行性本系统一定是具有很好的经济效益的,并且所获得的经济效益并不会少于或略高于其开发成本。随着线上线下O2O概念的流行,越来越多的企业或个人经营者都愿意出资将自身的服务挂牌在网上,使之得到良好的宣传、推广、盈利。假设开发系统的周期为21工作日,各个团队的每日平均工资如表2-1统计所示。表2-1 工程团队的资金流预算单位:人数/人工资/元天数/天人数日工资工作天数开发团队530020需求分析团队102406测试团队101808系统设计团队830010根据以上预算,项目总支出为:8.28w。一旦上线,则按每日代理的企业和学校等其他需要在线考试的单位所获得的平均报酬为1600/d,那么预估两年后将会获得116.8w的收入,净利润为108.52w。很显然这在两年内的价值已经是一个相当可观的收入了。(二)技术可行性当今现有的技术水平以及开发团队的素质对于实现学生在线登录、注册、答题、查询考试成绩以及管理员管理试题、发布试题、批阅试题、发布成绩等功能具有高度可行性。系统拟采用c++编写后端服务器逻辑处理(即功能),使用nginx作为反向代理服务器以支持高并发大数据处理,获得性能和效率上的可行性。另外,memcached这种高级的缓存技术,在国内外应用早就变得十分成熟。因此,系统在技术上的可行性也就非常明显。(三)法律可行性系统在开发过程中完全遵循独立自主的开发流程,开发过程中使用到的一部分技术也是FSF(自由软件基金会)范围的开源软件或工具,不存在知识产权和产品最终解释权的纠纷。项目中的各部分合同也经过法律程序反复校验,所以,系统在法律方面的可行性是顺理成章的。(四)系统流程图在可行性分析阶段,主要的图表是系统流程图。该图表是概括的描绘物理系统的传统工具。其基本思想是用图形符号以黑盒子形式描绘组成系统的各个部件(程序、文件、数据库、人工过程、表格等)。系统流程图是描绘数据在系统各个部件之间的流动情况,不是对数据进行加工处理的控制过程。如图2-1。图2-1 系统流程图(五)数据流图DFD数据流图是指信息流和数据从数据源点输入开始,经系统各个程序模块之间经变换处理输出到终点的过程中的流动状态的一种图形化技术。数据流图只关心系统做什么,而不关心如何做的问题。不同于系统流程图,在数据流图中的数据和信息流不能经过任何的物理部件。是一种逻辑模型,其很好地描述了系统的各个逻辑功能。这对于计算机专业人员和非专业人员的用户来说,非常便于沟通和反馈。同时,这将在日后的实际开发中起到非常重要的作用,实际的开发必须立足于此。下面是系统的顶层和分层的数据流图展示。图2-2顶层数据流图图2-3学生模块数据流图图2-4管理员模块数据流图(六)数据字典DD数据字典也是一种逻辑模型。数据字典服务器数据流图,其用于描述数据流图中涉及到的所有元素,包括数据源点/终点、信息流、变换处理、数据存储等。尽管数据字典如前所述定义了数据流、数据流分量、数据存储、数据处理。一般可以把数据流图中的数据处理用别的形式加以描述(如IPO图或PDL图)。需要注意的是数据元素允许别名,对别名的使用与直接使用该数据元素的名字具有等价意义。如何定义数据流图中存在的元素,标准是什么,是本节关心的重点。一般而言,定义一个事物,通常是定义组成改事物的成分的组合。但是这些组成事物的成分可能还是一个需要分解的事物。因此,数据定义是一个自顶向下的逐步分解过程。当分解的元素并不需要重新去定义时,这个分解过程就完成了。基于此,下面图表给出了上文数据流图的数据字典。表2-2 IO处理进程数据字典标识符DFD_top01名字用户浏览器终端IO处理进程别名fcgi程序的标准IO描述接受来自用户的输入或把web文档显示在终端显示屏定义用户浏览器终端IO处理进程=[fcgi标准输入|fcgi标准输出]位置顶层数据流图表2-3 http请求数据字典标识符DFD_top02名字Http请求别名描述一切以客户端浏览器形式向服务器端发送请求的基于http协议的字节流定义Http请求=http请求报文头+(http数据部分)位置顶层数据流图表2-4 http应答数据字典标识符DFD_top03名字http应答别名描述服务器返回基于http协议的字节流给客户端浏览器定义Http请求=http应答报文头+(http数据部分)位置顶层数据流图表2-5 后台数据数据字典标识符DFD_top04名字后台数据描述Fcgi程序逻辑处理的一切中间结果或某些重要数据的备份定义后台数据=学生数据+试题数据+题目数据位置顶层数据流图表2-6 数据字典之查询结果集标识符DFD_top05名字查询结果集描述Fcgi程序逻辑处理过程中需要的某些存放在本地数据库中的数据集合定义查询结果集=0{[学生数据|试题数据|题目数据]}3位置顶层数据流图标识符DFD_stu01名字学生事务描述和学生有关的操作。比如注册、登录、答题、查询成绩。定义学生事务=[注册|登录|答题|查询成绩]位置学生模块数据流图表2-7 数据字典之网页数据标识符DFD_stu02名字网页数据描述将相应事务的处理结果以web文档的形式返回给客户端定义网页数据=处理结果的html文档位置学生模块数据流图、管理员模块数据流图表2-8 数据字典之学生事务处理结果标识符DFD_stu03名字学生事务处理结果描述通过fcgi逻辑处理程序把相应事务的处理结果反馈给客户端定义学生事务处理结果=网页数据位置学生模块数据流图表2-9 数据字典之管理员事务标识符DFD_admin01名字管理员事务描述与管理员有关的操作。比如管理试题、发布试题、批阅试卷、发布成绩定义管理员事务=[管理试题|发布试题|批阅试卷|发布成绩]位置管理员模块表2-10 数据字典之管理员事务处理结果标识符DFD_admin02名字管理员事务处理结果描述通过fcgi逻辑处理程序把相应事务的处理结果反馈给客户端定义管理员事务处理结果=网页数据位置管理员模块三、需求分析需求分析的主要任务是提炼出客户的所有需求,需求分析人员必须对客户的每一点需求明确无误。在需求分析阶段会使用SA(结构化)分析的思想对系统进行“自顶向下,逐步细化”的求精分析。所以该过程主要会产生实体联系图(ER图)。以下章节将逐步详解。(一)功能需求功能需求主要描述用户对于系统需要完成哪些功能做的约束。通过用例图则可以很好地描述。用例图如图3-1所示。图3-1系统用例图(二)性能需求1)大量考生同时在线,系统不能因为大数据量连接而中断考生的请求;2)系统对于任意考生的响应速度控制在2秒内;3)经常访问的数据提供缓存机制;4)服务器工作的稳定性必须良好,不能再考试过程中出现故障;5)大量考生相同的请求,不能以加重对数据库的访问代价而实现;6)必须确保后端服务器集群的稳定工作;(三)ER图实体联系图是一种概念性的数据模型。其描述了实体、实体的属性以及实体之间的关系。实体联系图ER图如图3-2。图3-2系统ER图四、总体设计(概要设计)(一)系统概要设计系统概要设计主要是系统功能和后台数据库的概要设计。1.WBS图系统概要设计就是得出系统由哪些功能模块组成。用WBS图则可以很好地描述系统功能模块的组成和模块之间的关系。图4-1系统WBS2.系统功能模块与界面设计学生模块最核心的功能就是:注册,登录,答题,查询成绩。管理员是本系统的最高权限者,操持着对学生、试题、企业、图片、音乐等各方面资源的生杀大权。其界面的设计可以稍微简约。比如以命令行的方式来管理系统中的资源,因为省去了太多的资源加载和响应时间,当涉及到大量用户动态地企图修改服务器端资源的请求时,如果因为加载时延太大,会大大影响服务器的实时响应效率。Linux系统就是这种哲学,因此,许多服务器部署在Linux上会获得更大的稳定性和效率。而管理员模块则可以以控制台命令行的方式来管理试题、发布试卷、阅卷、发布成绩等操作。因此界面设计主要是考生用户的界面设计。学生注册(RegisterForStudent):任何学生最终可能会被管理员和用人单位联系到。所以需要有个唯一标识用户存在的帐号,供学生登录,使用系统。但是在登录注册之前,需要为考生提供一个使用系统前的前台索引页面,此索引界面有两个入口,学生登录入口和注册入口。考生点击点击相应入口即可跳转到具体页面。学生登录(LoginForStudent):为了保证登陆的安全性,建议使用考试帐号登录和注册。此考号可以唯一地标识学生在本系统中的身份。因为,当用户名和密码重复时,不一定保证学生正确登陆系统。也可以使用邮箱登陆,因为邮箱帐号是唯一的。学生必须填写正确的帐号和密码的表单,点击登录,方可登陆系统,然后,系统会匹配数据库中的学生,判断是否让其登陆。为提高容错性:系统必须提供检测帐号或密码是否任一为空,是否有任一不正确,以错误信息提示给学生。登录成功的学生可以进入网站首页main.html,否则,系统再次输出登录页给学生。个人主页界面:个人主页功能可以展示考生的基本信息和详细信息,个人在必要的时候还可以修改保存个人的资料。网站主界面:这是学生登录系统后的第一个界面main.html,所有的功能请求都将通过此界面跳转,直接或间接地得到实现。考生可以通过此页面获取近期的考试安排,考试进度,考试结束后的成绩查询,访问个人主页,联系管理员等。(二)数据库概要设计数据库概要设计主要工作是得出该数据库的ER模型和相关数据库表。1.ER模型本系统涉及的实体主要有:考生、考试、试题、管理员。以及实体间的关系,考生需要在考试开考前提前预约自己期望的考试场次,学生在预约指定场次的在线考试时,还需答题,在成绩放榜后,学生需要查询成绩。管理员需要管理试题、发布试题、发布考试成绩等。因此,系统涉及的所有用户实体和实体间关系,详细见下表3-1。ER模型图在需求分析就已经给出。参见需求分析中的图3-2。2.关系模型设计关系模型请参见表4-1。表4-1 实体间关系汇总表关系名称参与双方关系类型描述可省补充考生、考生资料(1,1)作为考生的详细说明管理考生考生、管理员(m,n)管理员管理考生信息预约考试考生、试卷(m,n)考生预约考试考试考生、题目(m,n)考生答题管理试题管理员、题目(m,n)管理试题集管理考试管理员、试卷(m,n)管理员管理试卷包含隶属试卷、题目(1,n)若干试题只能出现在一套试卷中五、详细设计详细设计的主要任务是确定如何具体的设计系统,但不是具体的编码。但是在这个过程中设计的好坏直接关乎到软件实现的质量。而详细设计主要是系统的人机交互界面设计和数据库的详细设计。(一)功能设计系统分为两大模块:学生功能模块和网站管理员模块。以下是各个模块在其身份范围内所具有的功能。使用程序流程图来描述每个模块的逻辑处理过程。1.学生功能模块(StudentModule)1)学生注册(RegisterForStudent):不是所有用户都可以使用系统,因为那样的话,就失去了系统的意义。系统旨在为学生提供一个网上考试平台供学生检测掌握知识的程度,以及用人单位企业甚至管理员可以联系到考生,所以需要审核用户是否是合法的学生身份。故而需要填写关于个人资料的表单,完成注册,提交给服务器。如图5-1。2)登录(LoginForStudent):考生所有的操作都应该在登录到系统才能完成。如图5-2。3)答题(AnswerExamPaper):提供考生在规定时间内答题,提交前提醒考生是否真的确定提交,且支持边做边保存功能。如图5-3。4)查询成绩(QuerExamGrades):在成绩放榜后学生可以登录系统查询。支持在线查看成绩和导出生成成绩单。成绩由各大题的分值组成、参与考试的学生排名。还支持纠错功能。如果考生有疑问可以点击“对成绩,我有疑问”,对比自己的答案和标准答案进行求证。若有考生认为标准答案有错误,可以尝试联系管理员以更正标准答案和所有学生的成绩、排名。如图5-4。图5-1学生注册逻辑流程图图5-2学生登录逻辑流程图图5-3学生答题逻辑流程图图5-4学生查询成绩逻辑流程图2.网站管理员模块(AdminModule)1)发布试题(ReleaseExamination):在首页点击发布试题,跳到试题管理页面,完成增删改试题后,点击发布,生成试题html,供后续考试使用,并返回首页。当管理本次试题(增删改试题列表)、涉及到页面和数据库题号的变动。经过管理员确认最终的试题集之后,点击发布,相关题就被写入题目html及服务器的后台数据库。所有靠攀升通过访问此页面进行答题。如图5-5。2)批改试卷(CorrectExamPaper):客观题部分把学生提交的答案与标准答案进行比对。并计算相应分值。编程题部分的评分标准,可由企业或教师直接与管理员商议。学生提交的答案和标准答案都存放在数据库中。如图5-6。3)登记成绩(EnrollExamGrades):此功能先显示所有考生的成绩,输入指定考生的考生号和成绩,将把新的数据重写到数据库,并显示在此页。点击返回将返回到网站首页。提供首次登记成绩及以后更改成绩使用。如图5-7。4)发布成绩(ReleaseExamination):此功能先显示所有考生的成绩,点击发布成绩按钮,将把所有考生的成绩格式化输出到studentsGrades.html页面,供学生查询成绩。格式如下:前三名高亮显示,状元、榜眼、探花。显示所有考生的成绩排名。通过上一页下一页实现跳转查看。如图5-8。图5-5管理试卷逻辑流程图图5-6批阅试卷逻辑流程图图5-7登记成绩逻辑流程图5-8发布成绩流程程图(二)数据库表详细设计表5-1 考生基本信息表(tBasicInfo_stu)字段类型描述examNoint(7)用于唯一标识考生。登录、使用系统时使用。主键约束。passWordvarchar(12)考生密码,登录时使用。sNamevarchar(20)考生姓名。sSexchar(4)考生性别。sTelNochar(11)手机号,方便管理员联系考生。或用于以后密码找回或帐号激活行为。sEmailvarchar(30)邮箱,方便管理员联系考生。或用于以后密码找回或帐号激活行为。sBirthDate出生日期。sAgetinyint(3)考生年龄。isAlivedtinyint(2)是否激活。激活帐号才可以登录使用系统。表5-2 考生详细信息表(tDetailInfo_stu)字段类型描述该表的所有字段作为保留字段。在后续的需求中可能会用到。表5-3 考试基本信息表(tBasicInfo_exam)字段类型描述examIDint(7)唯一标识某场考试。主键约束。examNamevarchar(30)考试名称。描述当场考试。examTypevarchar(30)考试类型。描述当场考试。examDatedatetime考试日期和具体时间。examTimevarchar(30)考试时长。单位:分钟examStatusvarchar(30)考试状态,总共5有种考试状态:已发布试题、未发布试题、未发布成绩、已发布成绩、考试已结束、考试正在进行、此考试已下架。不同的状态描述了考试的进度,方便管理和考生查询。numOfStudentsint(7)此场考试的学生人数。表5-4 考试详细信息表(tDetailInfo_exam)字段类型描述该表的所有字段作为保留字段。在后续的需求中可能会用到。表5-5 学生考试成绩表(tGradesInfo_stu)字段类型描述examIDint(7)唯一标识某场考试。外键约束,码字段。examNoint(7)用于唯一标识考生。登录、使用系统时使用。外键约束,码字段。sGradesdouble(3,2)学生成绩。examStatusvarchar(30)考试状态,总共5有种考试状态:已发布试题、未发布试题、未发布成绩、已发布成绩、考试已结束、考试正在进行、此考试已下架。不同的状态描述了考试的进度,方便管理和考生查询。表5-6考试题目信息表(tItemInfo_exam)字段类型描述examIDint(7)唯一标识某场考试。外键约束,码字段。itemNotinyint(3)唯一标识某道题。码字段。itemAnsvarchar(512)题的正确答案。itemQusvarchar(256)描述题干信息。itemPathvarchar(256)部分需要涉及图片的题目。itemPointstinyint(2)每题的分值不超过2位数。表5-7学生答案表(tStuAns)字段类型描述examIDint(7)唯一标识某场考试。外键约束,码字段。examNoint(7)用于唯一标识考生。登录、使用系统时使用。外键约束,码字段。itemNotinyint(3)唯一标识某道题。外键约束,码字段。stuAnsvarchar(300)学生关于此题的答案。

六、编码与单元测试编码和单元测试其实属于同一个阶段。每当程序员实现出一个单元的逻辑,就需要对这个单元的逻辑进行测试。因为,“边编码,边测试,反复测试”总是一个好的指导思想。而单元测试正是检测软件设计中的最小单元--模块。(一)单元编码本节将列出系统的主要的八大功能的逻辑实现,对于底层调用的更多子例程不会详细介绍。感兴趣的读者可以参见系统源码。或者关注CSDN等网站,作者将会以开源的形式上传源码。伪代码形式说明模块的执行流程。boolCStudent::registerForStudent():此函数用于实现考生登录。算法如下:考生点击登录,是,则2,否则显示登录页面;帐号、密码任意一个为空或错误,打印准确的错误提示给考生,否则3);帐号存在,已激活否,是则4),否则,出错;登录成功。boolCStudent::registerForStudent():此函数用于实现考生注册。算法如下:1)考生点击注册,是,则2,否则显示注册页面;2)考生填写的任意一个基本项为空或错误,打印准确的错误提示给考生,否则3);3)点击注册,系统生成新的考生号给考生。并要求考生确认激活帐号。constCStudent::CGrades*CStudent::queryExamGrades(intexamID):此函数用于实现考生查询成绩。算法如下:1)考生点击查询成绩链接;2)输入要查询的考试场次examID,及人数;3)输入无效,则出错,否则4;4)系统根据examID查询考试进度,最终返回给考生。voidCStudent::answerExamPaper():此函数用于实现考生在线答题。算法如下:1)考生点击开始答题链接;2)输入要进行的考试场次examID;3)输入无效,则出错,否则4;4)系统根据examID查询考试进度,若进度为正在考试或将要考试,则进入考试,否则出错。boolCAdministrator::manageExamPaper(intexamID,intop):此函数用于实现管理员管理试卷。算法如下:1)管理员点击管理试题链接,进入管理界面2)输入要操作的考试场次examID及操作类型;3)输入无效,则出错,否则4;4)系统根据examID查询数据库表,并更新到所有关联的表。boolCAdministrator::publicExamPaper(intexamID):此函数用于实现管理员发布试卷。算法如下:1)管理员点击发布试题链接,进入发题界面(一般根据约定,将在考试前十分钟发卷);2)输入要发布的考试场次examID;3)输入无效,则出错,否则4;4)系统根据examID查询数据库表,并更新到所有关联的表。boolCAdministrator::correctExamPaper(intexamID):此函数用于实现管理员批改试卷。算法如下:管理员点击阅卷试链接;输入要阅卷的考试场次examID;3)输入无效,则出错,否则4;4)系统根据examID查询数据库表,遍历数据库中的所有当前考试的考生、试题、成绩,程序进行计算成绩并更新到所有关联的表。boolCAdministrator::publicExamGrades(intexamID):参见发布试卷的算法。(二)界面展示根据系统的概要设计,学生模块包括注册,登录,答题,查询成绩。管理员模块全程在类似于控制台命令行的方式操作。下面依次展示了编码实现后的各模块的界面。图6-1考生索引界面图6-2学生登录界面图6-3学生登录界面图6-4学生答题界面图6-5学生查询成绩界面图6-6个人博客界面图6-7网站主界面(三)单元测试单元测试关心的是模块能否正常的工作,将模块看成是黑盒子,不关心其内部具体实现。假设系统有个1024539,密码是11的学生,且有场过期的考试examID为1102009,测试用例如表6-1。表6-1 单元测试用例表模块测试用例预期输出登录examNo=1024539,passwd=11ok注册examNo=1024539,passwd=11error答题examID=1102009error查询成绩examID=1102009error管理试题examID=1102009,op=delok[发布试题|发布成绩|阅卷]examID=1102009error七、系统测试在软件开发过程中,测试一直是个很重要的主题之一。甚至可以和需求分析阶段的重要程度并驾齐驱。软件测试是为了找出并纠正软件中的潜在缺陷,是软件质量保证中的重要一环。随着软件测试技术的兴起和发展,软件测试分为黑盒测试、白盒测试、功能测试、性能测试、容错测试、集成测试、系统测试等。本章节的主要内容是结合模块实例围绕黑盒测试和白盒测试展开。黑盒测试关心接口或模块的功能是否正确地实现,而这些测试已经在上一章的单元测试得以体现,这里就不再赘述。假设系统有个1024539,密码是11的学生,且有场过期的考试examID为1102009,有场正在进行的考试examID=1024668,有场已经阅完卷的考试examID=1668998。系统测试阶段的所有测试用例参见表7-1。表7-1 系统测试用例表测试对象测试用例测试类别覆盖类别预期输出CStudent::registerForStudent()uName=”LiMing”passWord=”123”rePassWord=”123”emailAddr=“myEmail@126.com”tel=nfisifsiiAgree=true白盒测试判定覆盖电话号码不是11位手机号格式。CStudent::loginForStudent()examNo=1024539passwd=“qq”白盒测试判定覆盖密码不正确。CStudent::queryExamGrades(intexamID)examID=1102009白盒测试判定覆盖该考试已下架。CStudent::answerExamPaper()isAlived=truecurrentStatus=LOGINEDisNextItemClicked=true白盒测试判定覆盖输出下一题。CAdministrator::manageExamPaper(intexamID,intop)examID=1102009op=DELETE白盒测试语句覆盖删除试题成功。CAdministrator::publicExamPaper(intexamID)examID=1102009白盒测试判定覆盖发布试题失败,该考试已下架。CAdministrator::correctExamPaper(intexamID)测试用例1{examID=1002894}测试用例2{examID=1024668}白盒测试条件组合覆盖用例1测试无效的考试examID(必须是7位数字);用例2。用例2测试正在进行的考试examID(必须是7位数字),阅卷失败。CAdministrator::publicExamGrades(intexamID)examID=1668998白盒测试判定覆盖发布试题成功。八、系统维护(一)项目部署与网站发布系统开发完成后,后端服务器源码在Linux平台编译、运行,通过nginx反向代理允许考生在线登录、使用。有关nginx的安装在网络链接如此发达的今天,可以便捷地因特网上搜索到在Linux上的安装配置与使用,这里不再赘述。将网站发布出去,只需要将nginx的服务器目录下的location段(因特网用户访问网站服务器的根目录)设置为后端服务器所在目录即可。(二)性能调优和运维后期系统的维护主要任务就是维护nginx性能和效率。这些内容在nginx使用手册上随处可见。在一个正规的OTO公司中必然设有系统运维方面的职位,这方面的工作也就落在这部分专业人士的身上。比如,一般nginx可以在连续7天工作(甚至更长)不宕机,但是,如果nginx配置文件修改需要重启nginx,而重启可能会使得当前的用户请求中断,nginx在慢启动、平滑升级等功能支持很好。这使得可以既保证考生的实时请求不会受到影响,还能实现nginx的重启工作。一个好的运维工程师一定对于这些知识胸有成竹、了然于心。在系统维护上,企业和web应用开发团队应该高度引起重视,因为,软件维护是也是软件生命周期中的一部分,而且也不容忽视,当客户的需求变更或升级都会在原版本系统上做出更改。结论本系统的开发落下帷幕。关于前文提到的所有功能也完全实现。可以看到,学生相关的操作,注册、登录、答题、查询成绩以及管理员管理试题、发布试题、批阅试卷、发布成绩都可以运行良好。最重要的是,本系统在Linux下模拟了上万的客户连接并提供超长时间的服务。系统也达到了预期的设想。即高并发条件下保持着出色的性能和效率,且健壮而稳定,对于用户的操作都能快速的响应。

温馨提示

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

最新文档

评论

0/150

提交评论