ACM/ICPC培训管理系统的设计与实现
2014-04-29王顺利刘宝娥马元飞
王顺利 刘宝娥 马元飞
[摘 要] 鉴于ACM国际大学生程序设计竞赛(ACM/ICPC)在人才选拔和培养方面的显著作用,如何将ACM/ICPC竞赛活动嵌入常规教学,创新教学模式,结合专业教学,加强训练管理,提高培训效益,已成为人们关注的热点问题。针对这一应用需求,本文设计并开发了基于ACM/ICPC机制的大学生程序设计培训管理系统。系统采用B/S架构,以SQL Server 2005作为后台管理数据库,Visual Studio 和ASP.NET为前端开发工具。在分析系统功能的基础上,着重阐述了该系统设计与实现的关键技术。该系统实际运行稳定、可靠,为开展ACM/ICPC竞赛培训和教学提供了一种有效管理途径。
[关键词] ACM/ICPC;培训管理系统;Web开发;ASP.NET;数据库技术
doi : 10 . 3969 / j . issn . 1673 - 0194 . 2014 . 03. 015
[中图分类号] TP311 [文献标识码] A [文章编号] 1673 - 0194(2014)03- 0028- 03
1 引 言
ACM国际大学生程序设计竞赛(ACM International Collegiate Programming Contest, ACM ICPC) 由美国计算机协会(ACM)主办,始于1970年,至今已经有40多年的历史,是世界公认的规模最大、水平最高、影响广泛的国际大学生程序设计竞赛,竞赛优胜者是各大IT企业和科研院所青睐和优先选拔的人才[1]。近些年来,伴随着ACM/ICPC大学生程序设计竞赛在国内如火如荼地开展,计算机高等教育界更加关注在计算机应用人才培养方面,如何科学合理地引入、借鉴ACM/ICPC竞赛训练经验,将ACM/ICPC竞赛活动与常规专业课程教学有机结合起来,突破传统教学内容和教学方法,以有效培养学生的学习能力、创新意识和综合素质。这其中,如何有效组织开展ACM/ICPC竞赛训练,加强培训管理,提高培训效益,亦是人们关注的热点问题。
但就目前情况来看,组织开展此项竞赛活动的训练指导或教学培训还没有一个成熟通用的、基于ACM/ICPC竞赛机制的ACM/ICPC 训练和活动的教学管理平台。具体表现在:(1)尽管一些知名院校搭建了自己的在线测试平台[2-3],但由于大多采用英文表述问题,对于英语水平不高的低年级本科生和专科学生来说,在翻译题目和理解内容方面会出现偏差,导致在这些平台上进行在线模拟测验的效果并不理想;(2)很多网站虽然提供了ACM/ICPC竞赛的相关资料,比如网上题库、相关赛题的题解等,但这些资料在网上分布得比较分散,使得学生很难集中查阅,而且由于资料的层次性和难易性区分不明显,使得学生在查阅和收集资料时遇到很多困难;(3)关于ACM/ICPC的网上论坛不少,但大多内容仅介绍ACM/ICPC的发展、竞赛取得的成绩和心得体会,学生很难在程序的求解方法和求解过程方面进行适时的互动;(4)虽然上述网上交流方式和测试学习方式符合现代化教育的理念,但是从系统管理的角度看,这些功能模块比较分散,难以真正适应目前ACM/ICPC竞赛培训管理的需要。
基于上述应用需求,结合集宁师范学院多年参加这一赛事、组织开展ACM/ICPC竞赛训练活动的管理实践经验,我们开发了一个本专科通用的ACM/ACPC培训管理系统,该系统是一个基于B/S结构的多用户在线系统, 实现了资源共享、在线讨论、在线学习测试、网络化管理等功能。
2 系统分析
2.1 系统功能结构
ACM/ICPC培训管理系统是一个B/S结构的Web应用系统。ACM/ICPC培训管理系统的主要功能是完成网络学习的综合浏览、学习资源的上传和下载、在线讨论、在线测试和系统管理等功能,系统功能结构如图1所示。
2.2 功能模块需求分析
用户登录模块为用户提供安全的访问和数据操作,防止非法用户进入系统。本系统的登录模块分为系统管理员和登录用户。系统管理员可以完成登录用户的管理和系统后台数据库管理的功能;登录用户可以参与网上资源共享、在线讨论和在线测试等多方面的操作。
资源在线模块包括浏览资源、查找资源和下载资源3个部分,用来完成网上资源的查找、阅览和下载。登录用户能够将服务器中的资源下载到本地查看或进一步学习,也可以上传自己的资源。
在线论坛模块使得用户不但可以发表意见,而且可以浏览到其他用户在论坛发表的各种意见、问题等。本模块主要包括浏览帖子、发表帖子和回复帖子3个子模块。为了能够更好地管理好论坛,本模块主要提供了3种角色:匿名用户(没有注册的用户)、已经注册的用户和管理员。当匿名用户进入论坛之后,只能对网站的页面进行简单浏览;而已经注册的用户进入论坛之后,可以发表自己的评论和回复帖子。
在线测试模块包括在线选题、在线提交、系统测试的功能[2],该模块提供了一个符合ACM/ICPC竞赛需求的学习训练平台。用户可以按照问题的说明编写源代码,并通过在线提交子模块上传给系统。系统根据用户提供的语言和源代码生成对应语言扩展名的源程序文件,调出相应的编译器来运行源程序并进行测试。通过编译、执行后,系统将运行时捕捉的输出信息同预先存放的标准测试输出文件进行比较,返回测试结果(比较一致,则返回运行成功信息,否则返回运行错误信息),并将运行成功后的有关信息(程序源代码、用户数据表的通过数量、问题类别表的通过数量、计算机耗时等)存入数据库。
系统管理模块为负责组织开展ACM/ICPC训练活动的主管教师提供一个对培训平台信息集中管理的手段。主管教师以系统管理员身份登录后,通过对数据库信息的修改来实现对系统各个模块数据信息的管理和完善,通过直接操作数据库的方式,完成对数据库存放各个模块的数据信息增加、删除和修改的功能。
3 系统设计
ACM/ICPC培训管理系统作为一个网络化培训平台,系统采用Browser/Server(浏览器/服务器)结构,由客户端、WWW服务器和数据库服务器三部分组成[4],如图2所示。
B/S模式是一种平面型多层次的网状结构,其最大的特点就是与软硬件的无关性,应用逻辑和业务处理规则在服务器端实现,客户端可以做得尽可能简单,可以只是一个多媒体浏览器。在具体实现时,使用SQL Server 2005数据库管理系统建立和管理网站数据库;运用动态网页技术(ASP.Net)开发系统,使用HTML、C#等语言编写应用程序;使用Visual Studio 2008平台进行系统开发。
3.1 Web应用系统的开发技术
ASP.Net是Microsoft.Net Framework中一套用于生成Web应用程序和XML Web Services的技术,可以创建动态的Web页面。本系统选择了Visual Studio 2008作为开发ASP.Net程序的工具,网页开发的脚本语言选用了C#语言。Visual Studio 2008 提供了各种增强功能[5],例如可视化设计器(使用 .Net Framework 加速开发),对 Web 开发工具的大量改进,以及能够加速开发和处理所有类型数据的语言增强功能,并为开发人员提供了所有相关的工具和框架支持。C#是微软公司随.Net一起发布的新的语言。C#是C/C++语言家族中第一种面向组件的编程语言。它由C和C++派生而来,是一种使用简单、面向对象、类型安全的现代编程语言。C# 不仅具有Viusal Basic的高效性,而且具有C++的强大性,它是专门为.Net设计的一种语言,在.Net中起着不可替代的作用。
3.2 数据库技术
本文采用SQL Server 2005作为数据库管理系统,并采用ADO.Net技术进行数据库的操作和访问。ADO.Net是.Net Framework用于访问数据的组件,它的一个重要优点就是可以以离线方式操作数据库,减少应用程序对服务器资源的占用,提高应用程序的效率。.Net Framework提供了4个.Net Framework数据提供程序,其中SQL Server .Net Framework数据提供程序就是用于实现对SQL Server 的连接访问[6]。SQL Server .Net Framework的框架如图3所示。
针对ACM/ICPC培训管理系统的数据管理需求分析,本系统设计了用户信息表、资源分类数据表、资源数据表、论坛模块信息表、论坛帖子信息表、回复帖子信息表、问题类别信息表、问题表列信息表和运行状态信息表9个数据库表。
4 关键技术的实现
4.1 资源上传功能的实现
在上传资源页面管理中,系统先判断文件大小和文件名是否存在,如果文件大小满足要求且文件名不存在,为了节省存储空间,先将该文件内容转成二进制流,并和其他信息一起插入到资源数据表中。
获取上传文件、测试文件大小和将文件转换成二进制流的关键代码如下:
string FileName = myFile.Value;//获取上传的文件名
HttpPostedFile UpFile = myFile.PostedFile;//获取对由客户端指定的上传文件的访问
FileLength = UpFile.ContentLength;//获取上传文件的字节大小
if (FileLength == 0)
{ Response.Write("");
}
if (FileLength > 102400000)//判断文件是否大于5M(根据自己的需要判断大小)
{ Response.Write("");
}
else
{FileName = FileName.Substring(FileName.LastIndexOf("\\") +1);//文件名。
Byte[] FileByte = new Byte[FileLength];//将指定文件储存到数组
Stream ObjectStream = UpFile.InputStream;//建立数据流对象,该对象指向一个上载文件,读取该文件的内容
ObjectStream.Read(FileByte, 0, FileLength);//读取指定文件数据
}
4.2 测试系统的实现
在线测试模块的系统测试功能是本系统的设计关键,利用网络技术读取用户输入的源代码,并把源代码生成源代码文件。利用服务器上提供的程序编译器对源代码进行编译、链接和运行,把运行结果与数据库的标准答案进行对比并给出结果。
下面以C++程序为例来介绍系统测试功能的实现方法。主要包括以下3步:
(1)系统通过web.config文件的配置信息获取测试需要的路径配置信息,路径E:/Compiler/用于存放测试运行中需要处理的文件,路径E:/Compiler/Compiler/用于存放测试需要的编译器。
web.config文件的配置信息如下: