程序设计评判系统设计毕业论文 .doc_第1页
程序设计评判系统设计毕业论文 .doc_第2页
程序设计评判系统设计毕业论文 .doc_第3页
程序设计评判系统设计毕业论文 .doc_第4页
程序设计评判系统设计毕业论文 .doc_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

程序设计评判系统设计毕业论文 第一章 课题概述1.1课题来源与背景1.1.1ACM/ICPC简介ACM-Association for Computing Machinery , 即美国计算机协会.ICPC-International Collegiate Programming Contest , 即国际大学生程序设计竞赛.ACM国际大学生程序设计竞(英文全称:ACM International Collegiate ProgrammingContest(ACM-ICPC或ICPC)是由美国计算机协会(ACM)主办的,一项旨在展示大学生创新能力、团队精神和在压力下编写程序、分析和解决问题能力的年度竞赛。经过近30多年的发展,ACM国际大学生程序设计竞赛已经发展成为最具影响力的大学生计算机竞赛。引用至百度百科1.1.2课题的产生随着同学们对于编程积极性的不断提高, ,这就需要一套专门的评判系统来完成。虽然,有些高校以有成功的在线评判软件,但都是基于自己本校具体情况来开发的,有些功能对其它院校来说,并非实用,题库和测试时间也难以自主控制,达不到集中的训练测重点。除此之外,只有在网络环境下才能够使用,而对于未连到Internet的局域网来说就不适用了。因此,重新开发一套适合的评判系统是很必要的。大多数高等院校都积极参加了程序设计大赛,我们院校也不例外,但是在练习和测验过程之中,发现并没有适合我们学院特色的程序设计评判系统,只能运用传统的方式进行练习。因此,我的课题是开发出一套程序设计评判系统,为程序设计比赛练习及平时测验而用,提高平时训练的质量及学习的效率,同时也提高同学们的动手能力。1.2课题产生的意义开发一套适合本校的程序设计评判系统,除了提高了我们平时练习的效率此外,本系统还能应用在某些计算机学科上的训练及考试,如程序设计训练、校三级考试系统等学科上的应用,实现自动出题及评判工作,极大地减少了考务方面的冗繁环节,减清了老师的工作负担。第二章 系统发展与软硬件要求2.1发展动态国内以有不少高校开发出了他们的在线评判系统(OJ onJudge),这些院校所用的大体上都是采用B/S架构,除了选用的开发语言和程序编译器不同,其它如出题的模块、答题的模块、判题的模块等模块大体上没有明显的区别。北京大学采用的是Servlet+JavaBean编程技术,运用G+、GCC、Java、Pascal、 C+、 C六种程序编译器,可以说是包含了现在的所有主流的程序编译器;浙江大学用PHP动态语言来开发的,运用了C、 C+、 GPC、 FPC四种程序编译器,因此,我的课题也选用C+编译器,。国外对程序设计评判系统的开发与研究以相当的完善。他们的开发理念、所运用的开发方法与国内的完全不同。由于国内各高校开发的系统,主要的使用者是面向我们中国的大学生而开发的,但是国外运用的是以文件上传的方式,其他人根本无法看到程序的源代码,保证了安全性。通过国内与国外的对比不难发现,国内开发的软件产品及设计理念更侧重于训练、测验模式,操作方便快捷,对于安全性的要求不是很高,出发点是训练编程的能力;而国外的软件产品更多的是侧重于编程者信息传输的安全性与保密性。2.2课题主攻方向现在的OJ系统的业务逻辑及所运用的关键技术已经相当的纯熟,出题模块、答题模块、判题模块及线程轮询模块都相当完善,可以直接作为标准来引用;虽然技术上以相当成熟,但国内各高校的OnJudge系统几乎都是两层的系统,即业务逻辑层和数据库层,绝大多数都使用Servlet单一技术来开发,这种结构的系统很难维护,没有很好的程序可扩展性。因此,我的课题主攻方向重点是研究OnJudge系统的层次结构,对原有的系统进行重构,运用先进的MVC设计模式和数据持久层技术来实现程序设计评判系统。经分析与考虑之后,OJ系统初步可划分为:表示层、业务逻辑层、持久化层,数据库层2.3系统开发环境及技术方案1、采用Struts+Hibernate+JSP开发框架;2、系统采用四层体系结构;3、操作系统平台:Windows 7;4、数据库系统:MySQL 5.0;5、服务器平台:Tomcat 6.0;6、集成开发环境:MyEclipse 8.6;第三章 系统需求与分析3.1系统总体结构本系统主要包括四个模块,即用户管理模块, 题库管理模块、答题模块、判题模块。本系统的使用提高平时训练的质量及学习的效率。此外,还能够应用到小型上机考试中。该系统主要面向本校师生的程序设计服务,目的在于提高学生程序设计的动手能力。最终用户是我们学院的师生。同学们掌握的专业知识可以自己理解和操作该系统,需要较少的维护人员,无需进行培训。预期使用频率为3050人/天。3.2系统可行性分析可行性分析对于整个系统的开发至关重要,是系统开发的成败的关键。系统可行性大致包括如下四类准则。经济可行性是对一个项目或方案的成本效益的度量。技术可行性是对一种特定技术方案的现实性以及技术资源和专家的可用性的度量。时间可行性是对项目时间表的合理性的度量。运行可行性是对方案在组织中的合适程度的度量,它也是就人们对该系统的感觉的度量。3.2.1 经济可行性开发所用的硬件设备都已配置好,采用Windows 7平台,软件设备所需要的Web服务器可以使用开源的Tomcat服务器,开发工具采用开源的MyEclipse开发平台,数据库采用MySql,足够题库的数据存储,所有开发应用软件都是开源、免费的,因此无需额外的经济投入。开发这个系统所需的软硬件资源都已齐备,因此在经济上完全可行。3.2.2技术可行性面临的关键问题主要有:编译器如何在服务器端自动调用;如果编译阶段通过后,系统如何调用事先准备好的测试数据来检验程序;如何进行结果控制等;所用到的关键技术主要有:I/O流的管道技术;java调用外部程序的技术;线程轮询技术;文件管理技术。学校图书馆拥有大量所需资料、书籍和电子图书以供参考,外加导师的指导,在规定的时间内,;鉴于现有的软硬件资源,系统可以基于B/S系统构建,采用MVC设计模式,保证系统的灵活性,可维护性。数据库上采用开源的MySql做为后台开发,持久层采用Hibernate技术,并以开源的Eclipse作为开发环境,基本可以熟练的掌握,因此,开发这个系统在技术上是完全可行的。3.2.3时间可行性从系统开始确定到最终实施的时间,根据本项目的规模来分析,时间是充分的,基本上可以达到预期的目标,此外,根据实际的工作量和开发所面对的困难,可以在限定的时间内完成。3.3数据流程分析3.3.1功能级数据流整体分析根据前面描述的系统基本特点及其完成的功能,可得系统与外部实体之间的操作关系。反应了普通用户和管理员两个外部实体与系统进行交互的整体关系,描述了系统的运作环境。系统的功能级数据流图如图3-1所示。3-1功能级数据流图3.3.2系统用例描述整个系统中存在管理员和普通用户两个角色,普通用户和管理员通过WEB页登录本系统后,可以完成各自相应的功能操作。系统用例图如3-2。3-2用例图用例描述如下:例1:学生在线判题1、新用户注册;2、注册后的用户登录;3、浏览试题题目,进入详细页面;4、用户开始答题;5、提交后,查看答题状态;例2:管理员后台管理1、管理员登录;2、管理员查看并添加新题目;3、对所添加的题目进行删除及修改;4、查看注册用户,对非法用户进行限制或删除;5、管理员退出登录;3.3.3系统开发技术方案本评判系统是基于四层结构B/S架构模式设计的,采用Hibernate+Struts+JSP技术进行实现。普通用户和管理员通过WEB页登录到系统并获得不同的操作权限,然后完成各自的操作。3.4 Struts framwork的使用Struts为Java Web应用提供了现成的通用的框架。Struts可以大大提高Web应用的开发速度,如果没有Struts,开发人员不得不首先花大量的时间和精力来设计、开发自己的框架。如果在Web应用中恰到好处地Struts,将把从头开始设计的框架的时间节省下来,使得开发人员可以把精力集中在如何解决实际业务问题上。Struts有一组相互协作的类、Serlvet以及JspTagLib组成。基于Struts构架的web应用程序基本上符合JSP Model2的设计标准,可以说是MVC设计模式的一种变化类型。根据上面对framework的描述,我们很容易理解为什么说Struts是一个web framwork,而不仅仅是一些标记库的组合。但 Struts 也包含了丰富的标记库和独立于该框架工作的实用程序类。Struts有其自己的控制器(Controller),同时整合了其他的一些技术去实现模型层(Model)和视图层(View)。在模型层,Struts可以很容易的与数据访问技术相结合,包括EJB,JDBC和Object Relation Bridge。在视图层,Struts能够与JSP, Velocity Templates,XSL等等这些表示层组件想结合。3.5Hibernate简介Hibernate是一个开放源代码的对象关系映射框架,可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,Hibernate 是对象/关系映射(Object/Relational Mapping)的解决方案,简写为ORM,简单地说就是将Java 中的对象与对象关系映射至关系型数据库中的表格与表格之间的关系。Hibernate 提供了这个过程中自动对应转换的方法,是Java应用和关系数据库之间的桥梁,它负责Java 对象和关系数据之间的映射。Hibernate 内部封装了通过JDBC访问数据库的操作,向上层应用提供了面向对象的数据访问API。3.6关系型数据库关系型数据库在处理大量数据等方面,有着明显的优势.关系型数据库是以服务器的方式提供数据服务的,对于数据的管理有着良好的控制,在维护数据的完整性、安全性考虑全面。对于本系统而言,数据库整个过程的核心部分。本系统采用MySQL作为后台数据库,对后台数据进行操作(添加、修改、删除、查询等)。45沈阳建筑大学毕业设计第四章 系统总体设计与实现4.1数据库设计4.1.1逻辑结构设计根据对系统整体结构的分析,为完成系统各个功能的需求,故在数据库中建立了下面几个具体的表。1、用户表(用户编号,密码,昵称,院校,邮箱,类型,语言,提交数量,解决数量,注册时间,访问时间);2、题目表(题目编号,标题,描述,输入,输出,输入路径,输出路径,用例输入,用例输出,提示,来源,日期,时间限制,内存限制,正确数量,提交数量,错误数量,正确率,题目难度,提交人数,是否解决,用例时间限制);3、状态表(状态编号,题目编号,用户编号,运行结果,所用时间,所占内存,提交时间,主类名,代码长度,选择语言,提交数量);4、源代码表(状态编号,源代码);5、编译表(状态编号,错误信息);4.1.2物理结构设计根据逻辑结构,本系统物理数据库设计结构如图4-1所示。4-1数据库表图数据库的具体设计表4-1用户信息表 users序号字段名称数据类型必须项关键字默认值字段描述1userIdVarchar(20)YPRI用户编号2PasswordVarchar(20)Y用户密码3NickVarchar(100)Y用户昵称4SchoolVarchar(100)NNULL所属院校5EmailVarchar(100)YNULL邮 箱6userType Int(4)N0用户类型7LanguageInt(11)N0选择语言8SubmitInt(11)N0提交数量9SolvedInt(11)N0解答数量10regTimeDatetimeNNULL注册时间11accessTimeDatatimeNNULL访问时间表4-2题目信息表 problem序号字段名称数据类型必须项关键字默认值字段描述1proIdInt(11)YPRINULL题目编号2TitleVarchar(200)Y题目标题3DescriptionTextNNULL题目描述4InputTextNNULL输入内容5OutputTextNNULL输出内容6Input_pathVarchar(255)NNULL输入路径7Output_pathVarchar(255)NNULL输出路径8sampleInputTextNNULL例子输入9sampleOutputTextNNULL例子输出10HintTextNNULL题干提示11SourceVarchar(100)NNULL题目来源12InDateDatetimeNNULL提交日期13timeLimitInt(11)N0时间限制14memoryLimitInt(11)N0内存限制15AcceptedInt(11)N0正确数量16SubmitInt(11)N1提交数量17RatioInt(11)N0正确率18DifficultyInt(11)N0题目难度19ErrorInt(11)N0错误数量20Submit_userInt(11)N0提交人数21Solvedint(11)N0是否解决22Case_time_limitInt(11)N0用例时间表4-3答题状态表 solution序号字段名称数据类型必须项关键字默认值字段描述1solIdInt(11)YPRI状态编号2proIdInt(11)YMUL题目编号3userIdVarchar(20)YMUL用户编号4TimeInt(11)N0所用时间5MomeryInt(11)N0所用内存6inDateDatetimeNNULL提交时间7classNameVarchar(20)N0主类名8ResultInt(11)NMUL0运行结果9codeLengthInt(11)N0代码长度10LanguageInt(11)N0选择语言11NumInt(4)N0提交数量表4-4源代码信息表sourcecode序号字段名称数据类型必须项关键字默认值字段描述1solidInt(11)YPRI状态编号2SourceTextNNULL源代码表4-5编译信息表compileinfo序号字段名称数据类型必须项关键字默认值字段描述1solidInt(11)YPRI状态编号2ErrorTextNNULL错误信息4.2 SQL脚本设计建立数据库的SQL脚本如下#= # databaseacm #=create database acm;useacm;#=# TABLE.1 users table field: 11 #=create table users(userIdvarchar(20),passwordvarchar(20) not NULL ,nickvarchar(100) not NULL,schoolvarchar(100),emailvarchar(100),userTypeint (4),languageint(11) default 0,submitint(11) default 1,solvedint(11) default 0,regTimedatetime default NULL,accessTimedatetime default NULL,primary key (userId);insert into users(userId,password,nick,userType,regTime) values(admin,admin,manager,2,2007-06-10 08:27:49);select * from users;#= # TABLE.2 problem table field:22#=create table problem(proIdint(11) not null auto_increment primary key,titlevarchar(200) not null,description text default NULL,input text default NULL,output text default NULL,input_pathvarchar(255) default NULL,output_pathvarchar(255) default Null,sampleInput text default NULL,sampleOutput text default NULL,hint text default NULL,sourcevarchar(100) default NULL,inDatedatetime default NULL,timeLimitint not null default 0,memoryLimitint not null default 0,acceptedint default 0,submitint default 1,ratioint not null default 0,difficultyint(11) not null default 0,errorint(11) default 0,submit_userint(11) default 0,solvedint(11) default 0,case_time_limitint(11) default 0);#=# TABLE.3 solution table field:11#=create table solution(solIdint(11) not null primary key,proIdint(11) default 0 not null ,userIdvarchar(20) not null ,timeint default 0 not null,momeryint default 0 not null,inDatedatetime not null default 0000-00-00 00:00:00,classNamevarchar(20) not null,resultint(11) default 0 not null ,codeLengthint(11) default 0 not null,languageint(4) default 0 not null,numint(4) default 0 not null,index(proId),index(userId),index(result);#=# TABLE.4 compileinfo table field:2 #=create table compileinfo(solIdint(11) default 0 primary key,error text default null);#=# TABLE.5 sourcecode table field:2 #=create table sourcecode(solIdint(11) default 0 primary key,source text);4.3系统架构设计为了满足程序设计评判系统的应用需求,进行灵活的评判分析,本系统采用B/S结构作为系统的解决方案。系统结构图如4-2图所示。4-2系统架构图如图4-3所示,系统物理上分为三个部分:浏览器客户端、应用服务器、数据库服务器。所有用户通过浏览器访问应用服务器,应用服务器和数据库服务器交互获得需要的数据。采用MySQL作为数据存储数据库。采用Hibernate+Struts技术作为系统的的解决方案,系统逻辑上分为四层:数据库、持久层、业务逻辑层和表现层,以使系统具有更好的可扩展性,保证了系统的高可扩展及高可维护性。后台数据持久层采用ORM(对象关系映射)模式,其体系结构示意图如图。采用Tomcat6.0作为系统的应用服务器,运用了hibernate默认的连接池技术,无需在另外配置。客户端采用浏览器形式,满足零客户端的易用性要求。4-3 ORM模式图4.4系统功能设计整个系统初步划分为四个模块,即用户管理模块, 题库管理模块、答题模块、判题模块。用户管理模块主要包括用户登录、用户注册和用户信息修改;题库管理模块主要包括题目的添加、修改、删除、查询和用例添加;答题模块主要包括界面显示和问题提交;判题模块主要包括程序编译和程序运行。其中,所面临的关键问题就是编译器如何在服务器端正常运行。整个系统的功能结构如图4-4。4-4功能设计图如图4-5,整个系统四大功能介绍分别如下:(1)用户信息管理用户信息管理由普通用户及管理员共同完成,主要实现功能有3个:普通用户能够在线注册新用户信息,用户编号不能重复,用户注册模块将用户提交的个人信息存储到数据库之中:如图。4-5用户注册实现图为了保证用户安全,普通用户可以对以注册的个人信息进行修改。业务处里过程中,管理员可对非法用户有删除的权限。(2)题库信息管理题库信息管理主要由管理员来完成,主要实现功能有3个:管理员能够按照固定的格式添加新的试题及试题用例。管理员有删除的权限。对于存在问题或有错误的试题,管理员可以进行修改。(3)答题模块普通用户能够浏览试题,或根据标题进行搜索来查看题目的详细信息,进入提交页面,选择所要答题的编号及所运用的语言,编写出所要实现的程序代码,提交程序,进入答题状态页面,查看所做的题目的相关信息。(4)判题模块主要由编译、运行和答案比对三个功能组成,整个过程运行于服务器端,是本系统的核心部分。当用户把编写好程序代码提交后,系统首先会把代码存到数据库所对应的Sourcecode表中,同时,再把代码拷贝一份到有固定文件名(如main.app)中作为编译时的源文件,若再次提交,则上一次写入的源代码将会被新的代码所覆盖;然后,根据用户提交时所选择的语言,来调用相应的语言编译器对具有固定源文件名的文件进行编译,若有错误,则直接跳出判题模块到答题状态页面,显示结果为“Compile Error”;若编译通过,则进入运行环境,执行编译后的文件,若有运行时出现错误,则直接跳出判题模块到答题页面,显示结果为“Run Error”;若运行也通过,则调用测试用例对运行后的文件进行逻辑测试,此时以进入答案比对功能模块,若测试用例的输出与所给的测试用例输出比较后,结果为真,则跳转到答题状态页面,显示结果为“接受(accepted)”,说明用户所提交的代码成功,相应表中的提交数量及解决数量都会加1,正确率也会发生改变;若比对的结果为假,跳转到答题状态页面,显示结果为“(Answer Error)”;除此之外,如果超过题目给定的限制时间、限制内存大小及用例时间限制,则会在答题状态页面中显示结果为“超时”、“溢出”或“用例超时”等信息。由于系统使用轮询进程,同一时刻只能有一个用户的程序被评判,此时其它用户提交的程序只能进入等待状态,在答题状态页面结果显示为“等待中(Waitting)”信息,直到被评判过为止,最后完成判题功能。如图4-6所示。4-6判题流程图4.5页头和页尾设计页头和导航栏设计 head.html由于本段代码在各个页面都会用到,而且没有变化,因此单独提出静态页面文件,其他页面只须调用这条语句,就可以显示为各个页面的页头了。如图4-7所示。代码如下:/head.html首页|试题浏览|答题|答题状态|用户注册|用户修改|帮助|管理员登录 4-7网页页头第五章 系统的详细设计与实现5.1用户管理模块5.1.1用户注册登录用户注册模块的功能是接受用户注册,在检查过用户注册数据的合法性后将用户信息写入数据库。下图5-1为用户注册模块图。5-1用户注册活动图当用户输入的信息正确合法时,则会把用户填写的信息录入数据库中;若输入信息不正确时,例如有些项目没有填等等,表单会显示给用户错误的信息提示,直到合法为止。注册时的界面如图5-2。5-2用户注册界面用户登录模块负责检查用户的登录信息,就是检查已经注册成功的用户填写的帐号和密码是否正确,如果正确则完成用户登录,否则重新转到登录界面并提示错误信息。5-3用户登录界面用户登录成功页面当用户输入用户名和密码进行登陆时,表单方法设置为post,将信息传给user.do?action=login,用于验证密码:同时,如果用户使用的登陆名不存在,也会提示用户进行注册。若登录成功,则把用户名及登录时间写入,在登录成功页面显示出来。5.1.2用户信息修改用户可以对以注册的信息进行修改,若不修改密码,保持原来的密码,则修改时为空,不用再次填写。用户把修改后的信息保存到editUserForm中,提交时调用,对提交的信息进行修改处理,最后返回修改成功页面5-4用户修改界面5.2试题浏览及答题模块5.2.1设计思想本模块主要包括两个Form即problemForm和submitForm,两个Action即problemAction和submitAction,负责所有事件的流程控制。problemAction应用包括显示所有试题事件、添加事件、修改事件和查询事件;submitAction应用包括状态显示事件、提交事件及判题的编译运行比对事件。5.2.2试题浏览模块试题浏览主要向答题用户展示了所有试题,每页显示十道题目,每道试题显示题目编号,题目名称,答题的正确率及题目添加的日期,其中正确率=接受数量/总提交数量,点击题目名称可进入试题的详细信息页面。试题浏览页面如下图详细信息页面根据传入相应的题目编号,从数据库中显示相应的题目信息,进入答题的页面。如下图5-5所示。5-5试题显示页面5-6详细试题页面5.3用户答题模块用户通过查看题目的详细信息,进入提交页面,选择所要答题的编号及所运用的语言,编写出所要实现的程序代码,提交程序,此时系统进入服务器端的后后判题进程,而前台以跳入了答题状态页面,只不过此时的状态为Waitting,进入了等待状态,显示相应的结果状态。答题页面如图5-7。5-7答题页面输入程序代码后,选择答题语言,点击提交,进入状态显示页面,如图5-12所示。提交给Online Judge 系统评判,Judge系统得到用户提交的消息之后,启动评判进程,为用户评判,用户可以在Status页面刷新,可以看到Judge status从Compiling到Running(如果没有编译错误),最后到评判的结果。如果用户程序申请过多的内存,则会显示Memory Limit Exceeded;当用户的程序在规定的时间内还没有运行结束,则会显示Time Limit Exceeded;若用户的程序调用不安全函数(如文件操作,网络操作),则会显示Restricted Function;如果用户的程序出现非法内存引用,则会显示SIGSEGV;当用户的程序里面答案错误,则会显示Answer Error;若只是空格回车等表达出错,则会得到Presentation Error.。5-8状态显示图5.4后台评测系统分析服务器后台运行守候进程,每一个时间间隔查询一次数据库,如发现有提交纪录,这启动评判进程,进行相关题目的评判。每道题目均对应一个数据输入输出文件,本次设计采用输入输出流管道处理,让评判进程启动一个子进程编译运行用户提交上来的程序,当程序启动时计时,在时间允许范围之内,如果其得到了正确答案,则修改数据库,令其result为Accepted,否则,如果答案错,或者表达错,运行错等,强行中止该进程,把数据库记录进行相应的修改。本设计采用逐字符比较的方式对程序进行评判。即评判程序每次从管道读入一个字符与标准输出数据比较,如果两个文件完全一样,则表示程序正确,如发现只是相差空格,Table,回车,则该程序为Presentation Error,如果发现其他字符的不匹配,立即中止该程序,修改数据库记录为Wrong Answer,用户可以查询status.jsp看到自己的程序的正确性。由于是WEB提交,程序在服务器本机上运行,故安全机制是非常关键的。为了让用户提交上来的程序不破坏本机的文件系统,本设计采用了管道技术,在执行用户程序之前,先把输入流定向到标准输入文件main.cpp中,让其只能在一个临时文件夹下面做操作。故该程序不可能破坏文件系统。5.5管理员流程模块管理员模块对各用户的个人信息进行管理,这个模块提供的功能只供系统的管理员专用。程序admin.jsp是显示所有会员列表的页面,只有系统的管理员才能进入这个页面。该程序还可以显示某个用户个人信息列表页面,管理员可以查看和删除这些信息。如图5-13所示。这里将页面显示最多信息设置为10条,“String pg=10”,如果搜寻到需要的信息,且信息过多,系统将分页显示这些信息。管理员可对附选框的一条或多条信息进行删除,把选中的用户编号,加入到一个delUserId的list中,可以实现多条删除。在题目管理中,题目的删除也是运用同样的功能来实现,不同的是删除的信息不同,当一道题目以被绝大数据用户所提交过,且达到规定试题难度的正确率,则本条试题就可删除了。也可多条同时删除,同时也实现了分页显示的功能。如图5-9所示。此外,题库的收集力求全面,主要是收集以前赛区的真题,输入文件命名为data1.in,输出文件命名为data1.out , 用来设置测试用例。5-9管理员用户管理页面对于题库的管理,不仅实现了删除题目的功能,而且还实现了添加题目、修改题目的功能。如图所示。5-10管理员修改题库页面5-11管理员添加题目页面第六章 编码设计与测试6.1判题算法设计实现本系统的主要判题算法设计如下,主要由SubmitAction.java Action类来实现题库管理设计实现,题库管理主要包括题目的添加、修改、删除、浏览以及相关文件的操作,按照四层设计模式实现。6.1.1Hibernate 配置文件 hibernate.cfg.xml基于Hibernate的Web应用程序的控制核心是配置文件hibernate.cfg.xml。下面整体地介绍一下,对本系统有个大概了解。代码如下:rootjdbc:mysql:/localhost:3306/acmorg.hibernate.dialect.MySQLDialectJDBC ACM111org.gjt.mm.mysql.Driver6.1.2编写持久层代码用户类Users.java 的部分代码如下:blem.hibernate;importjava.sql.Timestamp;public class Problem private intproId; /题目编号;private String title; /题目标题;private String description; /题目描述;private String input; /题目所要输入的内容介绍;private String output; /题目所要输出的内容介绍;private String inputPath; /题目的输入路径;private String outputPath; /题目的输出路径;private String sampleInput; /用例输入;private String sampleOutput; /用例输出;private String hint; /题目提示;private String source; /题目来源;private Timestamp inDate; /题目发布日期;private inttimeLimit; /题目运行时间限制;private intmemoryLimit; /题目运行内存限制;private int accepted; /提交正确数量;private int submit; /总共提交数量;private int ratio; /提交正确率;private int difficulty; /题目难度;private int error; /错误数量;private intsubmitUser; /总共有多少用户提交;private int solved; /是否解决 1为解决,0为未解决;private intcaseTimeLimit; /用例运行时间限制;6.1.3编写业务层代码本业务方法比较简单,包括对题目信息的添加、删除、修改、浏览4个操作。如下是ProblemDAO.java的代码:/ProblemDAO.java/包引用略public class ProblemDAO extends BaseDAO static Session session=null;static Transaction tx=null;static Logger logger=Logger.getLogger(ProblemDAO.class);/根据ID查找一个题目public static Problem findById(int id)Problem pro=null;trysession=HibernateUtil.getSession();tx=session.beginTransaction();pro=(Problem)session.get(Problem.class, id);mit();catch(HibernateException e)e.printStackTrac

温馨提示

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

最新文档

评论

0/150

提交评论