程序设计评判系统毕业设计说明书论文.docx
《程序设计评判系统毕业设计说明书论文.docx》由会员分享,可在线阅读,更多相关《程序设计评判系统毕业设计说明书论文.docx(40页珍藏版)》请在冰豆网上搜索。
程序设计评判系统毕业设计说明书论文
沈阳建筑大学
毕业设计说明书
毕业设计题目程序设计评判系统
学院专业班级信息与控制工程学院计算机班
学生姓名性别
指导教师职称
2014年6月7日
摘要
随着Internet的广泛引用,计算机技术的飞速发展,同学们提高程序设计能力的愿望越发强烈。
本在线评判系统利用B/S模式和Windows系统提供的应用程序接口,借助网络这一方便而又有效的平台,可以快速方便地返回评测结果给用户,并且提供了交流的场所,从而起到提高同学们计算机编程能力的作用。
本系统以MyEclipse8.6作为开发环境,主要使用ORM对象持久化技术,以Hibernate作为后台解决方案,配合Struts框架作为前台的开发,应用Tomcat6.0作为Web服务器,同时选用开源的MySQL作为连接的数据库,实现了分层的目的,即显示层、业务逻辑层、数据持久层和数据库层。
整个系统的各个模块保持高度的可重用性,各个模块之间的耦合程度非常低,保证了系统的高可扩展性、高可维护性。
本文介绍了该系统的产生背景,并指出进行开发的需求分析;然后给出该系统的业务范围,在各种基本功能要求下,分析了系统的具体需求。
其次,本文阐述了关于该系统整体结构的概要设计方案,说明了模块的层次与处理的流程。
再次,针对该系统的答题及判题模块,本文给出了详细的结构设计、逻辑流程,为后面所进行的编码实现打下了基础。
最后,本文提出了系统测试方案,并列出了针对判题处理模块的测试结果。
关键词:
Struts框架;Hibernate;MySQL数据库
Abstract
WiththewideruseoftheInternet,computertechnologyhasseenrapiddevelopment,studentshaveastrongappetencyofimprovingprogramdesigncapacity.
TheonlineevaluationsystemusingB/SmodeandWindowsAPI,usingthenetwork,thisconvenientandeffectiveplatforms,wecanquicklyandeasilyreturntotheevaluationresultstotheusers,andtoprovidealocationfortheexchange,thestudentshaveledustoenhancetheabilityofcomputerprogrammingrole.ThissystemuseMyEclipse8.6asadevelopmentenvironment,mainlyuseORMobjectpersistencetechnology,asabackgroundtoHibernatesolutionswiththemainstreamStrutsframeworkasthefutureofdevelopment,Tomcat6.0applicationasaWebserver,subscribetoraiserevenueasalinktotheMySQLdatabase,toachievethepurposeoflayereddemonstratethatthelayer,businesslogictier.DataPersistenceandthedatabaselayer.Theentiresystemofthevariousmodulestomaintainahighdegreeofreusabilityandallthecouplingbetweenmodulesisextremelylow.guaranteethesystem'shighscalability,highmaintainability.
Thispaperintroducedthesystemofbackground,andthatthedemandfordevelopmentanalysis;Thesystemthengivesthebusinessscopeofthebasicfunctionalrequirements,analysisofthesystem'sspecificneeds.Secondly,thispaperonthestructureoftheoverallsystemdesignoutlineonthemodulelevelwiththeprocess.Again,againstthesystemandtheanswerwasthatmodule,thispaperpresentsadetailedstructuraldesign,logicflow,behindfortheCodinglaidthegroundwork.Finally,thispaperpresentsaspecificandsystemtestingprogram,andlistingtheprocessingmodule-thatthetestresults.
Keywords:
Strutsframework;Hibernate;MySQLdatabase;
附录一中文翻译
附录二外文翻译原文
附录三部分源代码
第一章课题概述
1.1课题来源与背景
1.1.1ACM/ICPC简介
ACM-AssociationforComputingMachinery,即美国计算机协会.
ICPC-InternationalCollegiateProgrammingContest,即国际大学生程序设计竞赛.
ACM国际大学生程序设计竞(英文全称:
ACMInternationalCollegiateProgrammingContest(ACM-ICPC或ICPC)是由美国计算机协会(ACM)主办的,一项旨在展示大学生创新能力、团队精神和在压力下编写程序、分析和解决问题能力的年度竞赛。
经过近30多年的发展,ACM国际大学生程序设计竞赛已经发展成为最具影响力的大学生计算机竞赛。
[引用至XX百科]
1.1.2课题的产生
随着同学们对于编程积极性的不断提高,,这就需要一套专门的评判系统来完成。
虽然,有些高校以有成功的在线评判软件,但都是基于自己本校具体情况来开发的,有些功能对其它院校来说,并非实用,题库和测试时间也难以自主控制,达不到集中的训练测重点。
除此之外,只有在网络环境下才能够使用,而对于未连到Internet的局域网来说就不适用了。
因此,重新开发一套适合的评判系统是很必要的。
大多数高等院校都积极参加了程序设计大赛,我们院校也不例外,但是在练习和测验过程之中,发现并没有适合我们学院特色的程序设计评判系统,只能运用传统的方式进行练习。
因此,我的课题是开发出一套程序设计评判系统,为程序设计比赛练习及平时测验而用,提高平时训练的质量及学习的效率,同时也提高同学们的动手能力。
1.2课题产生的意义
开发一套适合本校的程序设计评判系统,除了提高了我们平时练习的效率此外,本系统还能应用在某些计算机学科上的训练及考试,如程序设计训练、校三级考试系统等学科上的应用,实现自动出题及评判工作,极大地减少了考务方面的冗繁环节,减清了老师的工作负担。
第二章系统发展与软硬件要求
2.1发展动态
国内以有不少高校开发出了他们的在线评判系统(OJonJudge),这些院校所用的大体上都是采用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、操作系统平台:
Windows7;
4、数据库系统:
MySQL5.0;
5、服务器平台:
Tomcat6.0;
6、集成开发环境:
MyEclipse8.6;
第三章系统需求与分析
3.1系统总体结构
本系统主要包括四个模块,即用户管理模块,题库管理模块、答题模块、判题模块。
本系统的使用提高平时训练的质量及学习的效率。
此外,还能够应用到小型上机考试中。
该系统主要面向本校师生的程序设计服务,目的在于提高学生程序设计的动手能力。
最终用户是我们学院的师生。
同学们掌握的专业知识可以自己理解和操作该系统,需要较少的维护人员,无需进行培训。
预期使用频率为30—50人/天。
3.2系统可行性分析
可行性分析对于整个系统的开发至关重要,是系统开发的成败的关键。
系统可行性大致包括如下四类准则。
经济可行性是对一个项目或方案的成本效益的度量。
技术可行性是对一种特定技术方案的现实性以及技术资源和专家的可用性的度量。
时间可行性是对项目时间表的合理性的度量。
运行可行性是对方案在组织中的合适程度的度量,它也是就人们对该系统的感觉的度量。
3.2.1经济可行性
开发所用的硬件设备都已配置好,采用Windows7平台,软件设备所需要的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.4Strutsframwork的使用
Struts为JavaWeb应用提供了现成的通用的框架。
Struts可以大大提高Web应用的开发速度,如果没有Struts,开发人员不得不首先花大量的时间和精力来设计、开发自己的框架。
如果在Web应用中恰到好处地Struts,将把从头开始设计的框架的时间节省下来,使得开发人员可以把精力集中在如何解决实际业务问题上。
Struts有一组相互协作的类、Serlvet以及JspTagLib组成。
基于Struts构架的web应用程序基本上符合JSPModel2的设计标准,可以说是MVC设计模式的一种变化类型。
根据上面对framework的描述,我们很容易理解为什么说Struts是一个webframwork,而不仅仅是一些标记库的组合。
但Struts也包含了丰富的标记库和独立于该框架工作的实用程序类。
Struts有其自己的控制器(Controller),同时整合了其他的一些技术去实现模型层(Model)和视图层(View)。
在模型层,Struts可以很容易的与数据访问技术相结合,包括EJB,JDBC和ObjectRelationBridge。
在视图层,Struts能够与JSP,VelocityTemplates,XSL等等这些表示层组件想结合。
3.5Hibernate简介
Hibernate是一个开放源代码的对象关系映射框架,可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,Hibernate是对象/关系映射(Object/RelationalMapping)的解决方案,简写为ORM,简单地说就是将Java中的对象与对象关系映射至关系型数据库中的表格与表格之间的关系。
Hibernate提供了这个过程中自动对应转换的方法,是Java应用和关系数据库之间的桥梁,它负责Java对象和关系数据之间的映射。
Hibernate内部封装了通过JDBC访问数据库的操作,向上层应用提供了面向对象的数据访问API。
3.6关系型数据库
关系型数据库在处理大量数据等方面,有着明显的优势.关系型数据库是以服务器的方式提供数据服务的,对于数据的管理有着良好的控制,在维护数据的完整性、安全性考虑全面。
对于本系统而言,数据库整个过程的核心部分。
本系统采用MySQL作为后台数据库,对后台数据进行操作(添加、修改、删除、查询等)。
第四章系统总体设计与实现
4.1数据库设计
4.1.1逻辑结构设计
根据对系统整体结构的分析,为完成系统各个功能的需求,故在数据库中建立了下面几个具体的表。
1、用户表(用户编号,密码,昵称,院校,邮箱,类型,语言,提交数量,解决数量,注册时间,访问时间);
2、题目表(题目编号,标题,描述,输入,输出,输入路径,输出路径,用例输入,用例输出,提示,来源,日期,时间限制,内存限制,正确数量,提交数量,错误数量,正确率,题目难度,提交人数,是否解决,用例时间限制);
3、状态表(状态编号,题目编号,用户编号,运行结果,所用时间,所占内存,提交时间,主类名,代码长度,选择语言,提交数量);
4、源代码表(状态编号,源代码);
5、编译表(状态编号,错误信息);
4.1.2物理结构设计
根据逻辑结构,本系统物理数据库设计结构如图4-1所示。
4-1数据库表图
数据库的具体设计
表4-1用户信息表users
序号
字段名称
数据类型
必须项
关键字
默认值
字段描述
1
userId
Varchar(20)
Y
PRI
用户编号
2
Password
Varchar(20)
Y
用户密码
3
Nick
Varchar(100)
Y
用户昵称
4
School
Varchar(100)
N
NULL
所属院校
5
Email
Varchar(100)
Y
NULL
邮箱
6
userType
Int(4)
N
0
用户类型
7
Language
Int(11)
N
0
选择语言
8
Submit
Int(11)
N
0
提交数量
9
Solved
Int(11)
N
0
解答数量
10
regTime
Datetime
N
NULL
注册时间
11
accessTime
Datatime
N
NULL
访问时间
表4-2题目信息表problem
序号
字段名称
数据类型
必须项
关键字
默认值
字段描述
1
proId
Int(11)
Y
PRI
NULL
题目编号
2
Title
Varchar(200)
Y
题目标题
3
Description
Text
N
NULL
题目描述
4
Input
Text
N
NULL
输入内容
5
Output
Text
N
NULL
输出内容
6
Input_path
Varchar(255)
N
NULL
输入路径
7
Output_path
Varchar(255)
N
NULL
输出路径
8
sampleInput
Text
N
NULL
例子输入
9
sampleOutput
Text
N
NULL
例子输出
10
Hint
Text
N
NULL
题干提示
11
Source
Varchar(100)
N
NULL
题目来源
12
InDate
Datetime
N
NULL
提交日期
13
timeLimit
Int(11)
N
0
时间限制
14
memoryLimit
Int(11)
N
0
内存限制
15
Accepted
Int(11)
N
0
正确数量
16
Submit
Int(11)
N
1
提交数量
17
Ratio
Int(11)
N
0
正确率
18
Difficulty
Int(11)
N
0
题目难度
19
Error
Int(11)
N
0
错误数量
20
Submit_user
Int(11)
N
0
提交人数
21
Solved
int(11)
N
0
是否解决
22
Case_time_limit
Int(11)
N
0
用例时间
表4-3答题状态表solution
序号
字段名称
数据类型
必须项
关键字
默认值
字段描述
1
solId
Int(11)
Y
PRI
状态编号
2
proId
Int(11)
Y
MUL
题目编号
3
userId
Varchar(20)
Y
MUL
用户编号
4
Time
Int(11)
N
0
所用时间
5
Momery
Int(11)
N
0
所用内存
6
inDate
Datetime
N
NULL
提交时间
7
className
Varchar(20)
N
0
主类名
8
Result
Int(11)
N
MUL
0
运行结果
9
codeLength
Int(11)
N
0
代码长度
10
Language
Int(11)
N
0
选择语言
11
Num
Int(4)
N
0
提交数量
表4-4源代码信息表sourcecode
序号
字段名称
数据类型
必须项
关键字
默认值
字段描述
1
solid
Int(11)
Y
PRI
状态编号
2
Source
Text
N
NULL
源代码
表4-5编译信息表compileinfo
序号
字段名称
数据类型
必须项
关键字
默认值
字段描述
1
solid
Int(11)
Y
PRI
状态编号
2
Error
Text
N
NULL
错误信息
4.2SQL脚本设计
建立数据库的SQL脚本如下
#============
#databaseacm#
#============
createdatabaseacm;
useacm;
#=======================
#TABLE.1userstablefield:
11#
#=======================
createtableusers(
userIdvarchar(20),
passwordvarchar(20)notNULL,
nickvarchar(100)notNULL,
schoolvarchar(100),
emailvarchar(100),
userTypeint(4),
languageint(11)default0,
submitint(11)default1,
solvedint(11)default0,
regTimedatetimedefaultNULL,
accessTimedatetimedefaultNULL,
primarykey(userId)
);
insert