《程序的设计评判系统设计说明书论文.doc》由会员分享,可在线阅读,更多相关《程序的设计评判系统设计说明书论文.doc(51页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 . 建筑大学毕业设计说明书毕 业 设 计 题 目 程序设计评判系统学院专业班级信息与控制工程学院计算机 班学 生 姓 名 性别指 导 教 师 职称 2014年 6月7日摘要随着Internet的广泛引用,计算机技术的飞速发展,同学们提高程序设计能力的愿望越发强烈。本在线评判系统利用B/S模式和Windows系统提供的应用程序接口,借助网络这一方便而又有效的平台,可以快速方便地返回评测结果给用户,并且提供了交流的场所,从而起到提高同学们计算机编程能力的作用。本系统以MyEclipse8.6作为开发环境,主要使用ORM对象持久化技术,以Hibernate作为后台解决方案,配合Struts框架作为
2、前台的开发,应用Tomcat6.0作为Web 服务器,同时选用开源的MySQL作为连接的数据库,实现了分层的目的,即显示层、业务逻辑层、数据持久层和数据库层。整个系统的各个模块保持高度的可重用性,各个模块之间的耦合程度非常低,保证了系统的高可扩展性、高可维护性。本文介绍了该系统的产生背景,并指出进行开发的需求分析;然后给出该系统的业务围,在各种基本功能要求下,分析了系统的具体需求。其次,本文阐述了关于该系统整体结构的概要设计方案,说明了模块的层次与处理的流程。再次,针对该系统的答题与判题模块,本文给出了详细的结构设计、逻辑流程,为后面所进行的编码实现打下了基础。最后,本文提出了系统测试方案,并
3、列出了针对判题处理模块的测试结果。关键词:STRUTS框架;HIBERNATE;MYSQL数据库AbstractWith the wider use of the Internet, computer technology has seen rapid development, students have a strong appetency of improving program design capacity. The online evaluation system using B / S mode and Windows API, using the network, this co
4、nvenient and effective platforms, we can quickly and easily return to the evaluation results to the users, and to provide a location for the exchange, the students have led us to enhance the ability of computer programming role.This system use MyEclipse8.6 as a development environment, mainly use OR
5、M object persistence technology, as a background to Hibernate solutions with the mainstream Struts framework as the future of development, Tomcat6.0 application as a Web server, subscribe to raise revenue as a link to the MySQL database, to achieve the purpose of layered demonstrate that the layer,
6、business logic tier. Data Persistence and the database layer. The entire system of the various modules to maintain a high degree of reusability and all the coupling between modules is extremely low. guarantee the systems high scalability, high maintainability. This paper introduced the system of bac
7、kground, and that the demand for development analysis; The system then gives the business scope of the basic functional requirements, analysis of the systems specific needs. Secondly, this paper on the structure of the overall system design outline on the module level with the process. Again, agains
8、t the system and the answer was that module, this paper presents a detailed structural design, logic flow, behind for the Coding laid the groundwork. Finally, this paper presents a specific and system testing program, and listing the processing module - that the test results. Key words: Struts frame
9、work; Hibernate; MySQL database; 47 / 51目录第一章课题概述31.1课题来源与背景31.1.1ACM/ICPC简介31.1.2课题的产生31.2课题产生的意义3第二章系统发展与软硬件要求52.1发展动态52.2课题主攻方向52.3系统开发环境与技术方案6第三章系统需求与分析73.1系统总体结构73.2系统可行性分析73.2.1 经济可行性73.2.2技术可行性73.2.3时间可行性83.3数据流程分析83.3.1功能级数据流整体分析83.3.2系统用例描述93.3.3系统开发技术方案10第四章系统总体设计与实现124.1.1逻辑结构设计124.1.2物理结
10、构设计12第五章系统的详细设计与实现265.1.1用户注册登录265.1.2用户信息修改285.2.1设计思想285.2.2试题浏览模块28第六章编码设计与测试346.1.1Hibernate 配置文件 hibernate.cfg.xml346.1.2编写持久层代码356.1.3编写业务层代码366.1.4编写展现层43第七章结论45致46参考文献47附录一 中文翻译附录二 外文翻译原文附录三 部分源代码第一章 课题概述1.1课题来源与背景1.1.1ACM/ICPC简介ACM-Association for Computing Machinery , 即美国计算机协会.ICPC-Interna
11、tional Collegiate Programming Contest , 即国际大学生程序设计竞赛.ACM国际大学生程序设计竞(英文全称:ACM International Collegiate ProgrammingContest(ACM-ICPC或ICPC)是由美国计算机协会(ACM)主办的,一项旨在展示大学生创新能力、团队精神和在压力下编写程序、分析和解决问题能力的年度竞赛。经过近30多年的发展,ACM国际大学生程序设计竞赛已经发展成为最具影响力的大学生计算机竞赛。引用至百度百科1.1.2课题的产生随着同学们对于编程积极性的不断提高, ,这就需要一套专门的评判系统来完成。虽然,有些
12、高校以有成功的在线评判软件,但都是基于自己本校具体情况来开发的,有些功能对其它院校来说,并非实用,题库和测试时间也难以自主控制,达不到集中的训练测重点。除此之外,只有在网络环境下才能够使用,而对于未连到Internet的局域网来说就不适用了。因此,重新开发一套适合的评判系统是很必要的。大多数高等院校都积极参加了程序设计大赛,我们院校也不例外,但是在练习和测验过程之中,发现并没有适合我们学院特色的程序设计评判系统,只能运用传统的方式进行练习。因此,我的课题是开发出一套程序设计评判系统,为程序设计比赛练习与平时测验而用,提高平时训练的质量与学习的效率,同时也提高同学们的动手能力。1.2课题产生的意
13、义开发一套适合本校的程序设计评判系统,除了提高了我们平时练习的效率此外,本系统还能应用在某些计算机学科上的训练与考试,如程序设计训练、校三级考试系统等学科上的应用,实现自动出题与评判工作,极减少了考务方面的冗繁环节,减清了老师的工作负担。第二章 系统发展与软硬件要求2.1发展动态国以有不少高校开发出了他们的在线评判系统(OJ onJudge),这些院校所用的大体上都是采用B/S架构,除了选用的开发语言和程序编译器不同,其它如出题的模块、答题的模块、判题的模块等模块大体上没有明显的区别。大学采用的是Servlet+JavaBean编程技术,运用G+、GCC、Java、Pascal、 C+、 C六
14、种程序编译器,可以说是包含了现在的所有主流的程序编译器;大学用PHP动态语言来开发的,运用了C、 C+、 GPC、 FPC四种程序编译器,因此,我的课题也选用C+编译器,。国外对程序设计评判系统的开发与研究以相当的完善。他们的开发理念、所运用的开发方法与国的完全不同。由于国各高校开发的系统,主要的使用者是面向我们中国的大学生而开发的,但是国外运用的是以文件上传的方式,其他人根本无法看到程序的源代码,保证了安全性。通过国与国外的对比不难发现,国开发的软件产品与设计理念更侧重于训练、测验模式,操作方便快捷,对于安全性的要求不是很高,出发点是训练编程的能力;而国外的软件产品更多的是侧重于编程者信息传
15、输的安全性与性。2.2课题主攻方向现在的OJ系统的业务逻辑与所运用的关键技术已经相当的纯熟,出题模块、答题模块、判题模块与线程轮询模块都相当完善,可以直接作为标准来引用;虽然技术上以相当成熟,但国各高校的OnJudge系统几乎都是两层的系统,即业务逻辑层和数据库层,绝大多数都使用Servlet单一技术来开发,这种结构的系统很难维护,没有很好的程序可扩展性。因此,我的课题主攻方向重点是研究OnJudge系统的层次结构,对原有的系统进行重构,运用先进的MVC设计模式和数据持久层技术来实现程序设计评判系统。经分析与考虑之后,OJ系统初步可划分为:表示层、业务逻辑层、持久化层,数据库层2.3系统开发环
16、境与技术方案1、采用Struts+Hibernate+JSP开发框架;2、系统采用四层体系结构;3、操作系统平台:Windows 7;4、数据库系统:MySQL 5.0;5、服务器平台:Tomcat 6.0;6、集成开发环境:MyEclipse 8.6;第三章 系统需求与分析3.1系统总体结构本系统主要包括四个模块,即用户管理模块, 题库管理模块、答题模块、判题模块。本系统的使用提高平时训练的质量与学习的效率。此外,还能够应用到小型上机考试中。该系统主要面向本校师生的程序设计服务,目的在于提高学生程序设计的动手能力。最终用户是我们学院的师生。同学们掌握的专业知识可以自己理解和操作该系统,需要较
17、少的维护人员,无需进行培训。预期使用频率为3050人/天。3.2系统可行性分析可行性分析对于整个系统的开发至关重要,是系统开发的成败的关键。系统可行性大致包括如下四类准则。经济可行性是对一个项目或方案的成本效益的度量。技术可行性是对一种特定技术方案的现实性以与技术资源和专家的可用性的度量。时间可行性是对项目时间表的合理性的度量。运行可行性是对方案在组织中的合适程度的度量,它也是就人们对该系统的感觉的度量。3.2.1 经济可行性开发所用的硬件设备都已配置好,采用Windows 7平台,软件设备所需要的Web服务器可以使用开源的Tomcat服务器,开发工具采用开源的MyEclipse开发平台,数据
18、库采用MySql,足够题库的数据存储,所有开发应用软件都是开源、免费的,因此无需额外的经济投入。开发这个系统所需的软硬件资源都已齐备,因此在经济上完全可行。3.2.2技术可行性面临的关键问题主要有:编译器如何在服务器端自动调用;如果编译阶段通过后,系统如何调用事先准备好的测试数据来检验程序;如何进行结果控制等;所用到的关键技术主要有:I/O流的管道技术;java调用外部程序的技术;线程轮询技术;文件管理技术。学校图书馆拥有大量所需资料、书籍和电子图书以供参考,外加导师的指导,在规定的时间,;鉴于现有的软硬件资源,系统可以基于B/S系统构建,采用MVC设计模式,保证系统的灵活性,可维护性。数据库
19、上采用开源的MySql做为后台开发,持久层采用Hibernate技术,并以开源的Eclipse作为开发环境,基本可以熟练的掌握,因此,开发这个系统在技术上是完全可行的。3.2.3时间可行性从系统开始确定到最终实施的时间,根据本项目的规模来分析,时间是充分的,基本上可以达到预期的目标,此外,根据实际的工作量和开发所面对的困难,可以在限定的时间完成。3.3数据流程分析3.3.1功能级数据流整体分析根据前面描述的系统基本特点与其完成的功能,可得系统与外部实体之间的操作关系。反应了普通用户和管理员两个外部实体与系统进行交互的整体关系,描述了系统的运作环境。系统的功能级数据流图如图3-1所示。3-1功能
20、级数据流图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技
21、术进行实现。普通用户和管理员通过WEB页登录到系统并获得不同的操作权限,然后完成各自的操作。3.4 Struts framwork的使用Struts为Java Web应用提供了现成的通用的框架。Struts可以大大提高Web应用的开发速度,如果没有Struts,开发人员不得不首先花大量的时间和精力来设计、开发自己的框架。如果在Web应用中恰到好处地Struts,将把从头开始设计的框架的时间节省下来,使得开发人员可以把精力集中在如何解决实际业务问题上。Struts有一组相互协作的类、Serlvet以与JspTagLib组成。基于Struts构架的web应用程序基本上符合JSP Model2的设计
22、标准,可以说是MVC设计模式的一种变化类型。根据上面对framework的描述,我们很容易理解为什么说Struts是一个web framwork,而不仅仅是一些标记库的组合。但 Struts 也包含了丰富的标记库和独立于该框架工作的实用程序类。Struts有其自己的控制器(Controller),同时整合了其他的一些技术去实现模型层(Model)和视图层(View)。在模型层,Struts可以很容易的与数据访问技术相结合,包括E,JDBC和Object Relation Bridge。在视图层,Struts能够与JSP, Velocity Templates,XSL等等这些表示层组件想结合。3
23、.5Hibernate简介Hibernate是一个开放源代码的对象关系映射框架,可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,Hibernate 是对象/关系映射(Object/Relational Mapping)的解决方案,简写为ORM,简单地说就是将Java 中的对象与对象关系映射至关系型数据库中的表格与表格之间的关系。Hibernate 提供了这个过程中自动对应转换的方法,是Java应用和关系数据库之间的桥梁,它负责Java 对象和关系数据之间的映射。Hibernate 部封装了通过JDBC访问数据库的操作,向上层
24、应用提供了面向对象的数据访问API。3.6关系型数据库关系型数据库在处理大量数据等方面,有着明显的优势.关系型数据库是以服务器的方式提供数据服务的,对于数据的管理有着良好的控制,在维护数据的完整性、安全性考虑全面。对于本系统而言,数据库整个过程的核心部分。本系统采用MySQL作为后台数据库,对后台数据进行操作(添加、修改、删除、查询等)。第四章 系统总体设计与实现4.1数据库设计4.1.1逻辑结构设计根据对系统整体结构的分析,为完成系统各个功能的需求,故在数据库中建立了下面几个具体的表。1、用户表(用户编号,密码,昵称,院校,类型,语言,提交数量,解决数量,注册时间,访问时间);2、题目表(题
25、目编号,标题,描述,输入,输出,输入路径,输出路径,用例输入,用例输出,提示,来源,日期,时间限制,存限制,正确数量,提交数量,错误数量,正确率,题目难度,提交人数,是否解决,用例时间限制);3、状态表(状态编号,题目编号,用户编号,运行结果,所用时间,所占存,提交时间,主类名,代码长度,选择语言,提交数量);4、源代码表(状态编号,源代码);5、编译表(状态编号,错误信息);4.1.2物理结构设计根据逻辑结构,本系统物理数据库设计结构如图4-1所示。4-1数据库表图数据库的具体设计表4-1用户信息表 users序号字段名称数据类型必须项关键字默认值字段描述1userIdVarchar(20)
26、YPRI用户编号2PasswordVarchar(20)Y用户密码3NickVarchar(100)Y用户昵称4SchoolVarchar(100)NNULL所属院校5EmailVarchar(100)YNULL邮 箱6userTypeInt(4)N0用户类型7LanguageInt(11)N0选择语言8SubmitInt(11)N0提交数量9SolvedInt(11)N0解答数量10regTimeDatetimeNNULL注册时间11accessTimeDatatimeNNULL访问时间表4-2题目信息表 problem序号字段名称数据类型必须项关键字默认值字段描述1proIdInt(11)
27、YPRINULL题目编号2TitleVarchar(200)Y题目标题3DescriptionTextNNULL题目描述4InputTextNNULL输入容5OutputTextNNULL输出容6Input_pathVarchar(255)NNULL输入路径7Output_pathVarchar(255)NNULL输出路径8sampleInputTextNNULL例子输入9sampleOutputTextNNULL例子输出10HintTextNNULL题干提示11SourceVarchar(100)NNULL题目来源12InDateDatetimeNNULL提交日期13timeLimitInt
28、(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题
29、目编号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编译信息表compi
30、leinfo序号字段名称数据类型必须项关键字默认值字段描述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(
31、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 us
32、ers;#= # 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,sampleInpu
33、t 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 def
34、ault 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,mo
35、meryint 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 comp
36、ileinfo 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系统架构图如图
37、4-3所示,系统物理上分为三个部分:浏览器客户端、应用服务器、数据库服务器。所有用户通过浏览器访问应用服务器,应用服务器和数据库服务器交互获得需要的数据。采用MySQL作为数据存储数据库。采用Hibernate+Struts技术作为系统的的解决方案,系统逻辑上分为四层:数据库、持久层、业务逻辑层和表现层,以使系统具有更好的可扩展性,保证了系统的高可扩展与高可维护性。后台数据持久层采用ORM(对象关系映射)模式,其体系结构示意图如图。采用Tomcat6.0作为系统的应用服务器,运用了hibernate默认的连接池技术,无需在另外配置。客户端采用浏览器形式,满足零客户端的易用性要求。4-3 ORM
38、模式图4.4系统功能设计整个系统初步划分为四个模块,即用户管理模块, 题库管理模块、答题模块、判题模块。用户管理模块主要包括用户登录、用户注册和用户信息修改;题库管理模块主要包括题目的添加、修改、删除、查询和用例添加;答题模块主要包括界面显示和问题提交;判题模块主要包括程序编译和程序运行。其中,所面临的关键问题就是编译器如何在服务器端正常运行。整个系统的功能结构如图4-4。4-4功能设计图如图4-5,整个系统四大功能介绍分别如下:(1)用户信息管理用户信息管理由普通用户与管理员共同完成,主要实现功能有3个:普通用户能够在线注册新用户信息,用户编号不能重复,用户注册模块将用户提交的个人信息存储到
39、数据库之中:如图。4-5用户注册实现图为了保证用户安全,普通用户可以对以注册的个人信息进行修改。业务处里过程中,管理员可对非法用户有删除的权限。(2)题库信息管理题库信息管理主要由管理员来完成,主要实现功能有3个:管理员能够按照固定的格式添加新的试题与试题用例。管理员有删除的权限。对于存在问题或有错误的试题,管理员可以进行修改。(3)答题模块普通用户能够浏览试题,或根据标题进行搜索来查看题目的详细信息,进入提交页面,选择所要答题的编号与所运用的语言,编写出所要实现的程序代码,提交程序,进入答题状态页面,查看所做的题目的相关信息。(4)判题模块主要由编译、运行和答案比对三个功能组成,整个过程运行
40、于服务器端,是本系统的核心部分。当用户把编写好程序代码提交后,系统首先会把代码存到数据库所对应的Sourcecode表中,同时,再把代码拷贝一份到有固定文件名(如main.app)中作为编译时的源文件,若再次提交,则上一次写入的源代码将会被新的代码所覆盖;然后,根据用户提交时所选择的语言,来调用相应的语言编译器对具有固定源文件名的文件进行编译,若有错误,则直接跳出判题模块到答题状态页面,显示结果为“Compile Error”;若编译通过,则进入运行环境,执行编译后的文件,若有运行时出现错误,则直接跳出判题模块到答题页面,显示结果为“Run Error”;若运行也通过,则调用测试用例对运行后的
41、文件进行逻辑测试,此时以进入答案比对功能模块,若测试用例的输出与所给的测试用例输出比较后,结果为真,则跳转到答题状态页面,显示结果为“接受(accepted)”,说明用户所提交的代码成功,相应表中的提交数量与解决数量都会加1,正确率也会发生改变;若比对的结果为假,跳转到答题状态页面,显示结果为“(Answer Error)”;除此之外,如果超过题目给定的限制时间、限制存大小与用例时间限制,则会在答题状态页面中显示结果为“超时”、“溢出”或“用例超时”等信息。由于系统使用轮询进程,同一时刻只能有一个用户的程序被评判,此时其它用户提交的程序只能进入等待状态,在答题状态页面结果显示为“等待中(Waitting)”信息,直到被评判过为止,最后完成判题功能。如图4-6所示。4-6判题流程图4.5页头和页尾设计页头和导航栏设计 head.html由于本段代码在各个页面都会用到,而且没有变化,因此单独提出静态页面文件,其他页面只须调用这条语句,就可以显示为各个页面的页头了。如图4-7所示。代码如下:/head.html首页|a