毕业设计说明书和论文(程序设计评判系统)

沈阳建筑大学

毕业设计说明书

毕 业 设 计 题 目 程序设计评判系统 学院专业班级 信息与控制工程学院计算机 班 学 生 姓 名 性别 指 导 教 师 职称

2014年 6月7日

摘要

随着Internet 的广泛引用, 计算机技术的飞速发展, 同学们提高程序设计能力的愿望越发强烈。

本在线评判系统利用B/S模式和Windows 系统提供的应用程序接口,借助网络这一方便而又有效的平台, 可以快速方便地返回评测结果给用户,并且提供了交流的场所,从而起到提高同学们计算机编程能力的作用。本系统以MyEclipse8.6作为开发环境,主要使用ORM 对象持久化技术, 以Hibernate 作为后台解决方案, 配合Struts 框架作为前台的开发,应用Tomcat6.0作为Web 服务器, 同时选用开源的MySQL 作为连接的数据库, 实现了分层的目的,即显示层、业务逻辑层、数据持久层和数据库层。整个系统的各个模块保持高度的可重用性,各个模块之间的耦合程度非常低,保证了系统的高可扩展性、高可维护性。

本文介绍了该系统的产生背景,并指出进行开发的需求分析;然后给出该系统的业务范围,在各种基本功能要求下,分析了系统的具体需求。其次,本文阐述了关于该系统整体结构的概要设计方案,说明了模块的层次与处理的流程。再次,针对该系统的答题及判题模块,本文给出了详细的结构设计、逻辑流程, 为后面所进行的编码实现打下了基础。最后,本文提出了系统测试方案,并列出了针对判题处理模块的测试结果。

关键词:STRUTS 框架;HIBERNATE ;MYSQL 数据库

Abstract

With 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 convenient 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 ORM 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, 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 system's high scalability, high maintainability.

This paper introduced the system of background, and that the demand for development analysis; The system then gives the business scope of the basic functional requirements, analysis of the system's specific needs. Secondly, this paper on the structure of the overall system design outline on the module level with the process. Again, against 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 framework; Hibernate; MySQL database;

目录

第一章 课题概述 ...................................................................................................... 3

1.1课题来源与背景 .................................................................................................. 3

1.1.1ACM/ICPC简介 ...................................................................................... 3

1.1.2课题的产生 ............................................................................................. 3

1.2课题产生的意义 .................................................................................................. 3

第二章 系统发展与软硬件要求 .............................................................................. 5

2.1发展动态 .............................................................................................................. 5

2.2课题主攻方向 ...................................................................................................... 5

2.3系统开发环境及技术方案 .................................................................................. 6

第三章系统需求与分析 ............................................................................................ 7

3.1系统总体结构 ...................................................................................................... 7

3.2系统可行性分析 .................................................................................................. 7

3.2.1 经济可行性 .............................................................................................. 7

3.2.2技术可行性 ............................................................................................... 7

3.2.3时间可行性 ............................................................................................... 8

3.3数据流程分析 ...................................................................................................... 8

3.3.1功能级数据流整体分析 ........................................................................... 8

3.3.2系统用例描述 ........................................................................................... 9

3.3.3系统开发技术方案 ................................................................................. 10

第四章系统总体设计与实现 .................................................................................. 12

4.1.1逻辑结构设计 ......................................................................................... 12

4.1.2物理结构设计 ......................................................................................... 12

第五章系统的详细设计与实现 .............................................................................. 26

5.1.1用户注册登录 ......................................................................................... 26

5.1.2用户信息修改 ......................................................................................... 28

5.2.1设计思想 ................................................................................................. 28

5.2.2试题浏览模块 ......................................................................................... 28

第六章编码设计与测试 .......................................................................................... 34

6.1.1Hibernate 配置文件 hibernate.cfg.xml .................................................. 34

6.1.2编写持久层代码 ..................................................................................... 35

6.1.3编写业务层代码 ..................................................................................... 36

6.1.4编写展现层 ............................................................................................. 43

第七章结论 .............................................................................................................. 45

致谢 .......................................................................................................................... 46

参考文献 .................................................................................................................. 47

附录一 中文翻译

附录二 外文翻译原文

附录三 部分源代码

第一章 课题概述

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系统总体结构

本系统主要包括四个模块,即用户管理模块, 题库管理模块、答题模块、判题模块。本系统的使用提高平时训练的质量及学习的效率。此外,还能够应用到小型上机考试中。该系统主要面向本校师生的程序设计服务,目的在于提高学生程序设计的动手能力。最终用户是我们学院的师生。同学们掌握的专业知识可以自己理解和操作该系统,需要较少的维护人员,无需进行培训。预期使用频率为30—50人/天。

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 作为后台数据库,对后台数据进行操作(添加、修改、删除、查询等) 。

第四章 系统总体设计与实现

4.1数据库设计

4.1.1逻辑结构设计

根据对系统整体结构的分析,为完成系统各个功能的需求,故在数据库中建立了下面几个具体的表。

1、用户表(用户编号,密码,昵称,院校,邮箱,类型,语言,提交数量,解决数量,注册时间,访问时间);

2、题目表(题目编号,标题,描述,输入,输出,输入路径,输出路径,用例输入,用例输出,提示,来源,日期,时间限制,内存限制,正确数量,提交数量,错误数量,正确率,题目难度,提交人数,是否解决,用例时间限制);

3、状态表(状态编号,题目编号,用户编号,运行结果,所用时间,所占内存,提交时间,主类名,代码长度,选择语言,提交数量);

4、源代码表(状态编号,源代码); 5、编译表(状态编号,错误信息);

4.1.2物理结构设计

根据逻辑结构, 本系统物理数据库设计结构如图4-1所示。

4-1数据库表图

数据库的具体设计

表4-1用户信息表 users

表4-2题目信息表 problem

表4-3答题状态表 solution

表4-4源代码信息表sourcecode

表4-5编译信息表compileinfo

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 。下面整体地介绍一下,对本系统有个大概了解。代码如下:

"-//Hibernate/Hibernate Configuration DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

root

jdbc:mysql://localhost:3306/acm

org.hibernate.dialect.MySQLDialect

JDBC ACM

111

org.gjt.mm.mysql.Driver

6.1.2编写持久层代码

用户类Users.java 的部分代码如下:

packagecom.acm.problem.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; try{ session=HibernateUtil.getSession(); tx=session.beginTransaction(); pro=(Problem)session.get(Problem.class, id); tx.commit(); }catch(HibernateException e){ } finally{ } return pro; HibernateUtil.closeSession(); e.printStackTrace(); tx.rollback();

//查找下一题目ID

publicintfindNextId(){ intproId=0; try{ session=HibernateUtil.getSession(); tx=session.beginTransaction(); Query q=session.createQuery("select max(p.proId) from Problem p "); List list=q.list(); for(inti=0;i

}

tx.rollback();

}finally{ }

returnproId;

HibernateUtil.closeSession();

//根据标题查找题目集合

public static List findByName(String title){ }

//查找所有题目的集合

public static List getAllProblem(){

List list=null; List list=null; try{

session=HibernateUtil.getSession(); tx=session.beginTransaction();

Query q=session.createQuery("from Problem p where p.title=:title");

q.setString(1, title); list=q.list();

tx.commit();

}catch(HibernateException e){

e.printStackTrace(); tx.rollback();

}finally{ } return list;

HibernateUtil.closeSession();

}

session =HibernateUtil.getSession(); tx=session.beginTransaction();

list=session.createQuery("from Problem").list(); tx.commit();

}catch(HibernateException e){

e.printStackTrace(); tx.rollback();

}finally{ } return list;

HibernateUtil.closeSession();

//删除问题

public List delProblem(int [] delProblemId){ try{

session=HibernateUtil.getSession(); tx=session.beginTransaction(); for(inti=0;i

tx.commit();

Problem problem=(Problem)session.get(Problem.class, delProblemId[i]); session.delete(problem);

}catch(HibernateException e){

e.printStackTrace(); tx.rollback();

}finally{

HibernateUtil.closeSession();

}

returngetAllProblem();

//查询一道题目信息

public Problem getOneProblem(intproId){ }

//修改题目信息

public void updateProblem(Problem problem){ try{

session=HibernateUtil.getSession(); tx=session.beginTransaction(); session.update(problem); tx.commit();

}catch(HibernateException e){

e.printStackTrace(); Problem problem=null; try{

session=HibernateUtil.getSession(); tx=session.beginTransaction();

problem=(Problem)session.get(Problem.class, proId); tx.commit();

}catch(HibernateException e){

e.printStackTrace(); tx.rollback();

}finally{ }

return problem;

HibernateUtil.closeSession();

}

}finally{

HibernateUtil.closeSession();

} }

该类继承了BaseDAO.java ,而BaseDAO.java 主要实现了所有模块通用的增加、删除、修改功能,单独提出来,是为了其它模块的共享使用,简化代码长度。BaseDAO.java 代码如下: //BaseDAO.java //包引用略;

public class BaseDAO {

static Session session=null; static Transaction tx=null; //创建新对象

public static void createObj(Problem o){

try{

session=HibernateUtil.getSession(); tx=session.beginTransaction(); session.save(o); tx.commit();

}catch(HibernateException e){ } finally{ }

if(session!=null)

HibernateUtil.closeSession(); e.printStackTrace(); tx.rollback();

//删除对象

public static void delObject(int id){ }

//修改对象

public static void mdfObj(Object o){

try{

session=HibernateUtil.getSession(); tx=session.beginTransaction(); session.update(o); tx.commit(); try{

session=HibernateUtil.getSession(); tx=session.beginTransaction(); Object o=session.get(Problem.class, id); session.delete(o); tx.commit();

}catch(HibernateException e){ } finally{

HibernateUtil.closeSession();

}

e.printStackTrace(); tx.rollback();

}catch(HibernateException e ){

e.printStackTrace(); tx.rollback();

}finally{

HibernateUtil.closeSession();

}

}

6.1.4编写展现层

展现层的上报是提供友好的界面传递信息并与用户交互。JSP 只是负责输入输出,它没有处理数据的能力;而Action 则把将要给JSP 页面的数据处理准备好,把数据放入request 中,然后把数据导向输出的页面。

1. 编写ActionForm

在持久层有一个Problem 类封装了持久数据的信息,它与展现层的ActionForm 意义不一样,但代码去一样,之所以要编写两个相似的类,是因为这样可以减少层之间的耦合性。

2. 编写Action

Action 就好像是数据指路牌,处理数据并将数据导向正确的页面。本项目中的所有Action 都继承了DispatchAction 类,这样处理业务更为方便,不用为每一项业务都写一个Action 类,运用一个参数action 来导向。

6.2测试

测试是把各个模块程序合在一起,看各接口之间的连接是否正常,各部分功能是否能被正常实现。

表6-1测试结果表

第七章 结论

在毕业设计的这段时间里,我得到了锻炼,熟悉了框架编程,体会到编程的乐趣,扩大了知识领域,在制作过程中体会到一种求实创新,不断进取的精神。但也遇到了许多的困难和许多需要解决的问题,在老师的指导和同学的帮助下,都被很好的解决了,在解决问题的时候,我学到了很多有价值的技术和知识,积累了一些对我来说很重要的经验。

好的设计是成功的关键,设计帮助我把用户需求准确地转变为最终的软件产品,也是后续的所有软件开发和软件维护步骤的基础,一个好的软件设计,不仅可以给开发人员带来极大的方便,还可以缩短开发的时间和减少开发成本,为项目的开发成功奠定了很好的基础。

发现的重要性。每个软件工程方法都试图创建的一个环境中能够尽可能早地做出最重要的发现,这是很重要的,软件项目在本质上就是以发现为中心的项目,随着时间的过去,对客户、应用、环境以及发起者的认识也会随着项目的进展而增加。因此必须得做好适应新发现的知识的准备。

开发文档也具有重要性。开发文档的作用有利于自己对项目的理解,有利于保持一致性,提高开发效率。同时编写必需的文档也在一定程度上降低了系统的风险,使项目不会受到重大的影响。

在这次的毕业设计中,我不仅学到了很多有价值的知识和技术,也认识到了自己的缺点和不足,希望在以后的学习和工作中能够摒弃缺点,弥补不足,积极的努力学习知识和技术,充分的提高自己的实力。

致谢

毕业设计已经结束。这里面每一个功能的实现,每一行语句的调试,每一段文本的输入有我辛勤的汗水。设计时间虽然短暂,我却从中学到了很多的东西。在这段时间里,我得到了指导教师韩子扬老师以及其同学们的关心、帮助以及大力支持,较顺利的完成了设计任务。在设计过程中,我结合了过去三年学习过的基础和专业课理论,较好的解决了问题,为今后走向工作岗位打下了坚实的基础,所以我也要感谢三年以来教导过我、给予我很多帮助的老师们。

本文是在韩子扬老师的精心指导下完成的。从论文的选题、文章结构的构筑到最后的定稿,都得到了导师的细心指点和提携。导师的严谨治学的作风也让我记忆颇深。在这里,我特别向我的指导老师韩子扬老师表示衷心的感谢!

最后,在整个的毕业设计过程还得到了广大同学们的帮助。特此,向所有关心、支持和帮助过我的老师、同学致以诚挚的谢意!

参考文献

[1] (美) 阿卢(Alur,Deepak.)等著. 刘天北等译.J2EE 核心模式(原书第2版) .北京:机械工业出版社,2009.3.

[2]孙更新,周峰,宾晟编著.白领就业指南:J2EE 开发员成长之路.北京:电子工业出版社,2010.8.

[3] (美)Bruce Eckel著.京京工作室译.Java 编程思想[M].北京:机械工业出版社,2008.4. [4]闫鸿编著.java 与模式. 北京:电子工业出版社,2011.10.

[5]孙卫琴编著.精通Struts :基于MVC 的JavaWeb 设计与开发. 北京:电子工业出版社,2009.8.

[6]蔡雪焘.Hibernate 开发及整合应用大全[M].北京:清华大学出版社,2011.3. [7]朗波.Java 语言程序设计[M].北京:清华大学出版社,2009.5. [8]萨师煊,王珊. 数据库系统概论[M].北京:高等教育出版社,2009.2.

沈阳建筑大学

毕业设计说明书

毕 业 设 计 题 目 程序设计评判系统 学院专业班级 信息与控制工程学院计算机 班 学 生 姓 名 性别 指 导 教 师 职称

2014年 6月7日

摘要

随着Internet 的广泛引用, 计算机技术的飞速发展, 同学们提高程序设计能力的愿望越发强烈。

本在线评判系统利用B/S模式和Windows 系统提供的应用程序接口,借助网络这一方便而又有效的平台, 可以快速方便地返回评测结果给用户,并且提供了交流的场所,从而起到提高同学们计算机编程能力的作用。本系统以MyEclipse8.6作为开发环境,主要使用ORM 对象持久化技术, 以Hibernate 作为后台解决方案, 配合Struts 框架作为前台的开发,应用Tomcat6.0作为Web 服务器, 同时选用开源的MySQL 作为连接的数据库, 实现了分层的目的,即显示层、业务逻辑层、数据持久层和数据库层。整个系统的各个模块保持高度的可重用性,各个模块之间的耦合程度非常低,保证了系统的高可扩展性、高可维护性。

本文介绍了该系统的产生背景,并指出进行开发的需求分析;然后给出该系统的业务范围,在各种基本功能要求下,分析了系统的具体需求。其次,本文阐述了关于该系统整体结构的概要设计方案,说明了模块的层次与处理的流程。再次,针对该系统的答题及判题模块,本文给出了详细的结构设计、逻辑流程, 为后面所进行的编码实现打下了基础。最后,本文提出了系统测试方案,并列出了针对判题处理模块的测试结果。

关键词:STRUTS 框架;HIBERNATE ;MYSQL 数据库

Abstract

With 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 convenient 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 ORM 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, 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 system's high scalability, high maintainability.

This paper introduced the system of background, and that the demand for development analysis; The system then gives the business scope of the basic functional requirements, analysis of the system's specific needs. Secondly, this paper on the structure of the overall system design outline on the module level with the process. Again, against 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 framework; Hibernate; MySQL database;

目录

第一章 课题概述 ...................................................................................................... 3

1.1课题来源与背景 .................................................................................................. 3

1.1.1ACM/ICPC简介 ...................................................................................... 3

1.1.2课题的产生 ............................................................................................. 3

1.2课题产生的意义 .................................................................................................. 3

第二章 系统发展与软硬件要求 .............................................................................. 5

2.1发展动态 .............................................................................................................. 5

2.2课题主攻方向 ...................................................................................................... 5

2.3系统开发环境及技术方案 .................................................................................. 6

第三章系统需求与分析 ............................................................................................ 7

3.1系统总体结构 ...................................................................................................... 7

3.2系统可行性分析 .................................................................................................. 7

3.2.1 经济可行性 .............................................................................................. 7

3.2.2技术可行性 ............................................................................................... 7

3.2.3时间可行性 ............................................................................................... 8

3.3数据流程分析 ...................................................................................................... 8

3.3.1功能级数据流整体分析 ........................................................................... 8

3.3.2系统用例描述 ........................................................................................... 9

3.3.3系统开发技术方案 ................................................................................. 10

第四章系统总体设计与实现 .................................................................................. 12

4.1.1逻辑结构设计 ......................................................................................... 12

4.1.2物理结构设计 ......................................................................................... 12

第五章系统的详细设计与实现 .............................................................................. 26

5.1.1用户注册登录 ......................................................................................... 26

5.1.2用户信息修改 ......................................................................................... 28

5.2.1设计思想 ................................................................................................. 28

5.2.2试题浏览模块 ......................................................................................... 28

第六章编码设计与测试 .......................................................................................... 34

6.1.1Hibernate 配置文件 hibernate.cfg.xml .................................................. 34

6.1.2编写持久层代码 ..................................................................................... 35

6.1.3编写业务层代码 ..................................................................................... 36

6.1.4编写展现层 ............................................................................................. 43

第七章结论 .............................................................................................................. 45

致谢 .......................................................................................................................... 46

参考文献 .................................................................................................................. 47

附录一 中文翻译

附录二 外文翻译原文

附录三 部分源代码

第一章 课题概述

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系统总体结构

本系统主要包括四个模块,即用户管理模块, 题库管理模块、答题模块、判题模块。本系统的使用提高平时训练的质量及学习的效率。此外,还能够应用到小型上机考试中。该系统主要面向本校师生的程序设计服务,目的在于提高学生程序设计的动手能力。最终用户是我们学院的师生。同学们掌握的专业知识可以自己理解和操作该系统,需要较少的维护人员,无需进行培训。预期使用频率为30—50人/天。

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 作为后台数据库,对后台数据进行操作(添加、修改、删除、查询等) 。

第四章 系统总体设计与实现

4.1数据库设计

4.1.1逻辑结构设计

根据对系统整体结构的分析,为完成系统各个功能的需求,故在数据库中建立了下面几个具体的表。

1、用户表(用户编号,密码,昵称,院校,邮箱,类型,语言,提交数量,解决数量,注册时间,访问时间);

2、题目表(题目编号,标题,描述,输入,输出,输入路径,输出路径,用例输入,用例输出,提示,来源,日期,时间限制,内存限制,正确数量,提交数量,错误数量,正确率,题目难度,提交人数,是否解决,用例时间限制);

3、状态表(状态编号,题目编号,用户编号,运行结果,所用时间,所占内存,提交时间,主类名,代码长度,选择语言,提交数量);

4、源代码表(状态编号,源代码); 5、编译表(状态编号,错误信息);

4.1.2物理结构设计

根据逻辑结构, 本系统物理数据库设计结构如图4-1所示。

4-1数据库表图

数据库的具体设计

表4-1用户信息表 users

表4-2题目信息表 problem

表4-3答题状态表 solution

表4-4源代码信息表sourcecode

表4-5编译信息表compileinfo

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 。下面整体地介绍一下,对本系统有个大概了解。代码如下:

"-//Hibernate/Hibernate Configuration DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

root

jdbc:mysql://localhost:3306/acm

org.hibernate.dialect.MySQLDialect

JDBC ACM

111

org.gjt.mm.mysql.Driver

6.1.2编写持久层代码

用户类Users.java 的部分代码如下:

packagecom.acm.problem.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; try{ session=HibernateUtil.getSession(); tx=session.beginTransaction(); pro=(Problem)session.get(Problem.class, id); tx.commit(); }catch(HibernateException e){ } finally{ } return pro; HibernateUtil.closeSession(); e.printStackTrace(); tx.rollback();

//查找下一题目ID

publicintfindNextId(){ intproId=0; try{ session=HibernateUtil.getSession(); tx=session.beginTransaction(); Query q=session.createQuery("select max(p.proId) from Problem p "); List list=q.list(); for(inti=0;i

}

tx.rollback();

}finally{ }

returnproId;

HibernateUtil.closeSession();

//根据标题查找题目集合

public static List findByName(String title){ }

//查找所有题目的集合

public static List getAllProblem(){

List list=null; List list=null; try{

session=HibernateUtil.getSession(); tx=session.beginTransaction();

Query q=session.createQuery("from Problem p where p.title=:title");

q.setString(1, title); list=q.list();

tx.commit();

}catch(HibernateException e){

e.printStackTrace(); tx.rollback();

}finally{ } return list;

HibernateUtil.closeSession();

}

session =HibernateUtil.getSession(); tx=session.beginTransaction();

list=session.createQuery("from Problem").list(); tx.commit();

}catch(HibernateException e){

e.printStackTrace(); tx.rollback();

}finally{ } return list;

HibernateUtil.closeSession();

//删除问题

public List delProblem(int [] delProblemId){ try{

session=HibernateUtil.getSession(); tx=session.beginTransaction(); for(inti=0;i

tx.commit();

Problem problem=(Problem)session.get(Problem.class, delProblemId[i]); session.delete(problem);

}catch(HibernateException e){

e.printStackTrace(); tx.rollback();

}finally{

HibernateUtil.closeSession();

}

returngetAllProblem();

//查询一道题目信息

public Problem getOneProblem(intproId){ }

//修改题目信息

public void updateProblem(Problem problem){ try{

session=HibernateUtil.getSession(); tx=session.beginTransaction(); session.update(problem); tx.commit();

}catch(HibernateException e){

e.printStackTrace(); Problem problem=null; try{

session=HibernateUtil.getSession(); tx=session.beginTransaction();

problem=(Problem)session.get(Problem.class, proId); tx.commit();

}catch(HibernateException e){

e.printStackTrace(); tx.rollback();

}finally{ }

return problem;

HibernateUtil.closeSession();

}

}finally{

HibernateUtil.closeSession();

} }

该类继承了BaseDAO.java ,而BaseDAO.java 主要实现了所有模块通用的增加、删除、修改功能,单独提出来,是为了其它模块的共享使用,简化代码长度。BaseDAO.java 代码如下: //BaseDAO.java //包引用略;

public class BaseDAO {

static Session session=null; static Transaction tx=null; //创建新对象

public static void createObj(Problem o){

try{

session=HibernateUtil.getSession(); tx=session.beginTransaction(); session.save(o); tx.commit();

}catch(HibernateException e){ } finally{ }

if(session!=null)

HibernateUtil.closeSession(); e.printStackTrace(); tx.rollback();

//删除对象

public static void delObject(int id){ }

//修改对象

public static void mdfObj(Object o){

try{

session=HibernateUtil.getSession(); tx=session.beginTransaction(); session.update(o); tx.commit(); try{

session=HibernateUtil.getSession(); tx=session.beginTransaction(); Object o=session.get(Problem.class, id); session.delete(o); tx.commit();

}catch(HibernateException e){ } finally{

HibernateUtil.closeSession();

}

e.printStackTrace(); tx.rollback();

}catch(HibernateException e ){

e.printStackTrace(); tx.rollback();

}finally{

HibernateUtil.closeSession();

}

}

6.1.4编写展现层

展现层的上报是提供友好的界面传递信息并与用户交互。JSP 只是负责输入输出,它没有处理数据的能力;而Action 则把将要给JSP 页面的数据处理准备好,把数据放入request 中,然后把数据导向输出的页面。

1. 编写ActionForm

在持久层有一个Problem 类封装了持久数据的信息,它与展现层的ActionForm 意义不一样,但代码去一样,之所以要编写两个相似的类,是因为这样可以减少层之间的耦合性。

2. 编写Action

Action 就好像是数据指路牌,处理数据并将数据导向正确的页面。本项目中的所有Action 都继承了DispatchAction 类,这样处理业务更为方便,不用为每一项业务都写一个Action 类,运用一个参数action 来导向。

6.2测试

测试是把各个模块程序合在一起,看各接口之间的连接是否正常,各部分功能是否能被正常实现。

表6-1测试结果表

第七章 结论

在毕业设计的这段时间里,我得到了锻炼,熟悉了框架编程,体会到编程的乐趣,扩大了知识领域,在制作过程中体会到一种求实创新,不断进取的精神。但也遇到了许多的困难和许多需要解决的问题,在老师的指导和同学的帮助下,都被很好的解决了,在解决问题的时候,我学到了很多有价值的技术和知识,积累了一些对我来说很重要的经验。

好的设计是成功的关键,设计帮助我把用户需求准确地转变为最终的软件产品,也是后续的所有软件开发和软件维护步骤的基础,一个好的软件设计,不仅可以给开发人员带来极大的方便,还可以缩短开发的时间和减少开发成本,为项目的开发成功奠定了很好的基础。

发现的重要性。每个软件工程方法都试图创建的一个环境中能够尽可能早地做出最重要的发现,这是很重要的,软件项目在本质上就是以发现为中心的项目,随着时间的过去,对客户、应用、环境以及发起者的认识也会随着项目的进展而增加。因此必须得做好适应新发现的知识的准备。

开发文档也具有重要性。开发文档的作用有利于自己对项目的理解,有利于保持一致性,提高开发效率。同时编写必需的文档也在一定程度上降低了系统的风险,使项目不会受到重大的影响。

在这次的毕业设计中,我不仅学到了很多有价值的知识和技术,也认识到了自己的缺点和不足,希望在以后的学习和工作中能够摒弃缺点,弥补不足,积极的努力学习知识和技术,充分的提高自己的实力。

致谢

毕业设计已经结束。这里面每一个功能的实现,每一行语句的调试,每一段文本的输入有我辛勤的汗水。设计时间虽然短暂,我却从中学到了很多的东西。在这段时间里,我得到了指导教师韩子扬老师以及其同学们的关心、帮助以及大力支持,较顺利的完成了设计任务。在设计过程中,我结合了过去三年学习过的基础和专业课理论,较好的解决了问题,为今后走向工作岗位打下了坚实的基础,所以我也要感谢三年以来教导过我、给予我很多帮助的老师们。

本文是在韩子扬老师的精心指导下完成的。从论文的选题、文章结构的构筑到最后的定稿,都得到了导师的细心指点和提携。导师的严谨治学的作风也让我记忆颇深。在这里,我特别向我的指导老师韩子扬老师表示衷心的感谢!

最后,在整个的毕业设计过程还得到了广大同学们的帮助。特此,向所有关心、支持和帮助过我的老师、同学致以诚挚的谢意!

参考文献

[1] (美) 阿卢(Alur,Deepak.)等著. 刘天北等译.J2EE 核心模式(原书第2版) .北京:机械工业出版社,2009.3.

[2]孙更新,周峰,宾晟编著.白领就业指南:J2EE 开发员成长之路.北京:电子工业出版社,2010.8.

[3] (美)Bruce Eckel著.京京工作室译.Java 编程思想[M].北京:机械工业出版社,2008.4. [4]闫鸿编著.java 与模式. 北京:电子工业出版社,2011.10.

[5]孙卫琴编著.精通Struts :基于MVC 的JavaWeb 设计与开发. 北京:电子工业出版社,2009.8.

[6]蔡雪焘.Hibernate 开发及整合应用大全[M].北京:清华大学出版社,2011.3. [7]朗波.Java 语言程序设计[M].北京:清华大学出版社,2009.5. [8]萨师煊,王珊. 数据库系统概论[M].北京:高等教育出版社,2009.2.


相关文章

  • 层次分析法数学建模范例
  • 对学生建模论文的综合评价分析 摘要 本文研究的是五篇建模论文的评价和比较问题.首先,研读分析了五篇论文,并写出评语.其次,进行综合量化评价,主要运用的方法是层次分析法和模糊综合评判.最后,依据所得权重大小对论文排序. 针对问题一,我们对论文 ...查看


  • 综合医院建设项目投资决策评价体系(1)
  • 医睦毽煎!啦aD值D王bu <中国医院管理>第28卷第2期(总第319期)2008年2月 综合医院建设项目投资决策评价体系 高喜珍①韩 洁① 摘要结合公共工程项目的特点,参照<综合医院建设标准>和相关医院建设文件,构 ...查看


  • 建立[审计人员素质能力评估系统]的设想
  • 作者:尚尔刚黄靖 军队审计 2013年06期 <审计人员素质能力评估系统>(以下简称<评估系统>)即应用于审计部门业务干部素质能力训练考核评估的计算机软件,是审计部门运用信息化技术,对审计人员进行训练考核评估的一种手 ...查看


  • 化妆品的购买决策数学模型_数学系毕业论文
  • 化妆品的购买决策数学模型 摘要:本文将层次分析方法与模糊综合评判理论相结合用于化妆品购买决策的研究,给 出一种模糊判断的权重计算方法,建立了化妆品购买决策的层次模糊决策模型.应用该模型对保定地区三种销售的化妆品调查评判,研究该地区消费者的化 ...查看


  • 内容分析法
  • 一.内容分析法 ⑴概念:内容分析法是一种主要以各种文献为研究对象的研究方法.早期的内容分析法源于社会科学借用自然科学研究的方法,进行历史文献内容的量化分析. ⑵一般过程:内容分析法将非定量的文献材料转化为定量的数据,并依据这些数据对文献内容 ...查看


  • PM500平面磨床主轴的模态分析
  • 第28卷第12期 竺! 煤矿机械 Vol28No.12 !!旦鱼趔丛鱼!丛翌地!!盟 竺:!!竺 PM500平面磨床主轴的模态分析 万宏强..自婕静..李晓明2 (1西安工业大学,西安710032:2.西安光辉设备制造有限责任公司,西安71 ...查看


  • 中国临床运动心理学论文的内容分析
  • 摘 要:本文对1981年至2010年间我国临床运动心理学研究的680篇论文进行内容分析,以揭示我国临床运动心理学研究的现状与问题.研究结果表明:研究者主要来自体育学院(研究所):运动功能损害和运动退役研究薄弱:.研究主要以认知行为理论为基础 ...查看


  • 电商毕业论文
  • 石家庄法商职业学院 毕业设计(论文) 题目: 系 (部) 经济贸易与法律系 专业班级 08电子商务一班 学 号 xxxxxxxxxx 学生姓名 xxxxxx 指导教师 刘xxxx 职 称 讲师 2011年 4 月 2 日 原创性声明 本人郑 ...查看


  • 水质模糊综合评价模型的建立与应用
  • 第22卷第20期2006年10月 CHlNA 中国给水排水 WATER&WASTEWATER V01.22No.20 0Ct.2006 帚秘零撰鹕零举零祭撰劫 蕤p萼岱<乏啦<}<砖&飞%<:.8s姑 ...查看


热门内容