(计算机应用技术专业论文)源代码在线评测系统的设计与实现(1).pdf_第1页
(计算机应用技术专业论文)源代码在线评测系统的设计与实现(1).pdf_第2页
(计算机应用技术专业论文)源代码在线评测系统的设计与实现(1).pdf_第3页
(计算机应用技术专业论文)源代码在线评测系统的设计与实现(1).pdf_第4页
(计算机应用技术专业论文)源代码在线评测系统的设计与实现(1).pdf_第5页
已阅读5页,还剩55页未读 继续免费阅读

(计算机应用技术专业论文)源代码在线评测系统的设计与实现(1).pdf.pdf 免费下载

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

文档简介

摘要 源代码在线评测系统的设计与实现 摘要 随着计算机的逐渐普及,程序设计能力正日益成为各专业学生的 必备技能之一。程序设计能力的提高需要大量的编程练习,大量难度 适宜的题目和及时的信息反馈是必不可少的。在国内各高校中,传统 上都是以手工方式对源代码进行评测的。手工评测方式的弊端是显而 易见的,如耗时耗力,使得教师无法投入更多精力到教学和科研工作 中;评测结果无法及时反馈给学生,且评测结果可靠性较差;评测结 果往往包含较多的主观因素等等。这些弊端的存在迫切要求开发出一 套能够对源代码进行自动评测的系统,以在程序设计类课程的辅助教 学中发挥重大作用,计算机技术的高速发展和互联网的日益普及使得 这种可能成为现实。 源代码在线评测系统原是为适应竞赛的要求而开发的,随着教学 改革的逐渐深入,该系统也逐渐从面向竞赛向面向教学转化。在国内, 众多高校纷纷开发出了自己的源代码在线评测系统,作为程序设计类 课程的辅助教学平台,同时也为大学生参加各种程序设计大赛提供一 个良好的练习场所。 本课题在参考兄弟院校的o n l i n e j u d g e 系统的基础上,根据本校 实际需要,设计并实现了一种源代码在线评测系统。该系统可对用户 提交的源代码进行动态测试( 包括黑盒测试和白盒测试) 并及时返回 评测结果。同时,作为一个教学辅助平台,系统还提供了较为丰富的 教学辅助功能。此外,本文还对提高系统性能的方法进行了较为详细 的探讨。 关键词:在线评测,黑盒测试,白盒测试,辅助教学 i i a b s t r a c t d e s i g na n di m p l e m e n t a t i o no fs o u r c ec o d e o n h n e j u d g i n g s y s t e m a b s t r a c t w i t ht h ep o p u l a r i z a t i o no fc o m p u t e r ,t h ea b i l i t yo fp r o g r a m m i n gi s i i l c r e a s i n g l yb e c o m i n gan e c e s s a 巧a b i l i t y f o r t h es t u d e n t si nm a n y s p e c i a l t i e s 1 1 l ei m p r o v e m e n to ft h ea b i l i t yo fp r o 铲a m i n i n gn e e d sal o to f p r o 伊a m m i n gp r a c t i c e s ,i nt h em e a n w h i l e ,al o to fp r o g r a m sw h i c hh 弱 a p p r o p r i a t ed i f 丘c i l l t ya n dt i l n e l yf c e d b a c ki sa l s o :i i l d i s p e n s a b l e i n t h c d o m e s t i cu n i v e f s i t i e s ,t r a d i t i o n a l l yt h ew a ya d o p t e di sm a n u a lj u d g e i h e a b u s eo fm a n u a l j u d g e i s o b v i o u s ,s u c h a s t i m e c o n s u m i n g a n d l a b o u r c o n s u m i n gw h i c hm a k et c a c h e r sh 弱 n om o r ee n e r a g et ob e e n g a g e di nt e a c h i i l ga n ds c i e n t i f i cr e s e a r c h 、o r k ;1 _ l l er e s u l tc a nn o tb e p a s s e db a c kt o s t u d e n t s t i m e l y a n dt h er e l i a b i l i t yo ft h ei e s u l ti s p o o r ;t h e r e a r ea l w a y sm a n ys u b j e c t i v ef a c t o r si nt h er e s u l t s ,a n ds 0 o n t h ee x i s t e n c eo ft h e s ea b u s e sm a k ea nu 玛e n tr e q u i r e m e n t ,t h a ti st o d e v e l o p ea n 锄t o m a t i cj u d g eo n l i n es y s t e ma n dt ob ea p p l i d et ot h e a s s i s t e di n s t m c t i o n 1 m er a p i dd e v e l o p m e n to fc o m p u t e rt e c h n o l o g ya n d t h eg r o w i n gp o p u l a r i t yo ft h ei n t e m e tm a k et h ep o s s i b i l i t yt oc o m et m e m 北京化t 人学坝i j 学位论义 t h es o u r c ec o d eo n l i n e j u d g es y s t e mw a so r i g i n a u yd e v e l o p e df o r c o n t e s t w i t ht h ei n - d e p t he x e c u t i o no ft h er e f b 珊o f t e a c h i n g ,t h i ss y s t e m i s t r a n s f o r m i n g f r o mf o rc o n t e s tt of o r t e a c h i n g i nc h i i l a ,m a n y u n i v e r s i t i e s d e v e l o p e dt h e i ro w no n l i n e j u d g es y s t e m s 弱t h ea s s i s t e d i n s t m c t i o n p l a t f b 肌,w h i c ha l s oa 肋r dag o o de x e r c i s e sp l a c e s f o r u n d e 玛r a d u a t et ot a k ep a r ti na l ll 【i n d so fp r o g r a m m i n gc o n t e s t s o nt h eb a s i so ff o rt h er e f e r e n c et oo n l i n e j u d g es y s t e m so fo t h e r u n i v e r s i t i e s ,a n da c c o r d i n gt ot h ea c t u a ln e e d so fs c h o o l ,t h ep f 町e c td e s i g i l a i l di m p l e m e n t 锄o n l i n e j u d g es y s t e m ,w h i c hc a nt e s tt h es o u r c ec o d ew i t h d y n a m i ct e s t ( i n c l u d i n gb l a e k b o xt e s ta n dw h i t e b o xt e s t ) a n dg i v et h e r e s u l tt i m e l y a sa na s s i s t e di n s t m c t i o np l a t f o 咖,i ta l s o p r o v i d em a n y a s s i s t e di n s t m c t i o nf u n c t i o n s o nt h eo t h e rh a n d ,t h i sp a p e rd i s c u s st h e w a y st oi m p r o v et h es y s t e mp e r f o m a n c ei nd e t a i l k e yw o l u d s :o n l i n ej u d g e ,b l a c i 出o xt e s t ,w h i t e b o xt e s t ,a s s i s t e d i n s t i i l c t i o n l v 北京化工大学位论文原创性声明 本人郑重声明:所呈交的学位论文j 是本人在导师的指导下, 独立进行研究工作所取得的成果。除文中已经注明引用的内容外,本 论文不含任何其他个人或集体已经发表或撰写过的作品成果。对本文 的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本 人完全意识到本声明的法律结果由本人承担。 作者签名:益燮 日期: 如订石乒 关于论文使用授权的说明 学位论文作者完全了解北京化工大学有关保留和使用学位论 文的规定,即:研究生在校攻读学位期间论文工作的知识产权单 位属北京化工大学。学校有权保留并向国家有关部门或机构送交 论文的复印件和磁盘,允许学位论文被查阅和借阅;学校可以公 布学位论文的全部或部分内容,可以允许采用影印、缩印或其它 复制手段保存、汇编学位论文。 保密论文注释:本学位论文属于保密范围,在业解密后适用 本授权书。非保密论文注释:本学位论文不属于保密范围,适用本授 权书。 作者签名: 导师签名: 日期:坚盟! 鱼:丝 日期:苎! 塑:签:三 第一章绪论 1 1 源代码评测现状 第一章绪论 随着计算机技术的普及和发展,人们已越来越认识到手工评测源代码方法 的不足,逐渐开发出了各种源代码评测系统对源代码进行自动评测。其中,最 为著名的是p c 2 在线评测系统,它是为支持a c m i c p c ( a c mi i l t e m a t i o n a l c o l l e 西a t ep r o 酉锄m i n gc o n t e s t ,国际大学生程序设计竞赛) 而开发的,并在实 际使用中取得了较好的效果。国内众多高校也相继开发出了自己的o n l i n c j u d g c 系统,作为大学生参加各种程序设计大赛的练习平台- ,其中比较知名的 o n l i n e j u d g e 系统有北京大学的 p e l 【i n gu n i v e r s i t y o n l i n e j u d g c ( h t t p :a 伽p l 【1 1 e d u c n ) ,浙江大学的刁uo n l i j u d g c ( h t t p :a c m z j u e d u c n ) 以 及同济大学的1 o n 西io n l i l l ej u d g c ( h n p :m :t m 西i e d u ) u 1 等。 最初的o n l i n c j u d g c 系统都是为各种程序设计大赛而开发的,随着各高校 教学改革的深入开展,o n l i n e j u d g e 系统也逐渐从面向竞赛向面向教学转化,在 o n l i n e j u d g e 系统中添加了各种教学辅助功能,将o n l i n e j u d g c 系统改造成一个 教学辅助系统并运用于多种程序设计类课程的辅助教学中。如在北大,已有计 算概论、程序设计实习、数据结构、问题求解与程序设计等多门课程 通过p o j 系统批发作业并进行网上实时上机考试。 自1 9 9 6 年首个支持网上教学的系统和平台的出现至今已有1 0 年时间。在 这1 0 年间,前人做了大量的研究与实践,进行了许多有益的探索,使得在线评 测技术已日趋成熟。 纵观各种已经实现的在线评测系统,大部分已经成功实现了用户登陆、在 线练习与自测、在线考试、试题管理、用户管理、自动批改记分等功能,有些 还具有自动组卷等功能陋别。这些系统虽然还不够完备,但有些已经基本能满足 某些行业某些方面的需求,并已投入使用。 p c 2 在线评测系统:该系统由加里福尼亚大学开发。系统能编译提交的程 序、执行程序,检查源代码和执行结果,返回结果给参赛队。系统自动对提交 参赛程序加上时间戳、归档,以不同方式维护和显示当前竞赛情况,允许评测 程序重新找到和执行已归档的程序。它还提供了一种机制,允许竞赛者提交请 求和询问评测系统,评测系统回答询问并对参赛队发布公告牌。另外,p c z 支 持竞赛同时在多点进行,通过自动在点与点之间传递竞赛信息,使站点之间考 试成绩自动更新。一系列的配置选项允许竞赛管理员定制具体竞赛操作。例如, 北京化t 人学坝i j 学位论义 队列的数目,参赛问题和竞赛使用编程语言;计分方法;与问题对应评测系统; 是否自动通知参赛队评测的结果;计分板更新的频率等都可以配置。系统提供 了编辑内部计分数据库和各种类型软硬件错误的恢复机制。系统允许源代码使 用任何语言开发工具,只要此语言能用命令行来激活并产生可执行文件。 p e l 【i n gu n i v e l l s i t yo n l i n ej u d g e :这个系统实现了许多教学辅助功能:用户注 册和管理、题库管理、在线提交和实时评测、网上考试、讨论、邮件服务等。 在网上布置作业题目,学生可以随时完成作业并提交获得评测。教员可以在网 上监督学生作业完成的情况,并能就存在的问题进行解答。网上实时的编程考 试,更考察学生的动手能力,同时有助于威慑和杜绝作弊现象。p o j 系统是一 套程序自动评测系统。该系统可对提交的题目依次进行编译,并及时返回下列 结果之一:w a i t i n g 、a c c 印t e d 、p r e s e n t a t i o ne r i o r 、w | r o n ga m s w e r 、r u n t i m ee n - o r 、 啊m el i m i te x c e e d e d ,同时系统还可及时统计每道题目的提交次数与通过 ( a i c c e p t e d ) 次数,以供教师与学生参考。 北京化工大学北方学院的“5 i c c 语言辅助教学平台:该系统适用于c 语 言,采用c s 模式,便于对考试的全过程进行完全监控。系统有练习与考试两 种主要功能,具有定义试卷、安排考试、自动评阅部分试题、及时返回练习结 果、查阅考试成绩等功能。尤其是该系统具有动态题目编排和“快门 恢复功 能。其中的“快门”恢复功能保证了考试在任何其它情况下都可以继续进行下 去。 源代码在线评测系统的主要流程是对提交的程序进行自动评测,无论采用 c s 模式还是b s 模式,其服务器端对程序评测过程一般都为:服务器接收程 序、对代码进行分析及预处理、编译、用相应的测试用例进行测试、作弊检查、 返回评测结果口1 。目前,在在线评测系统中采用的体系结构有以下2 种陋1 :( 1 ) c s ( c l i e n 临e e r ) 结构;( 2 ) b s ( b r o w e r s e r v e r ) 结构耵。1 羽;其中c l s 结构 在技术上很成熟,但该结构存在灵活性差、升级困难、维护工作量大和系统安全 性差等缺陷;而b s 结构具有系统维护升级方便、跨平台操作、具有良好的开 放性和可扩充性以及系统安全性等优点口。在已经实现的系统中,尤其是较早 设计的在线评测系统中,有些采用了c s 结构。但由于该结构的特点与缺点, 尤其是安全性方面的问题n 2 1 钉,使得这些系统一般仅用于局域网范围内,且一 般仅适合于作为练习和自测之用,不适合用于正规的考试或竞赛。近年来出现 的在线评测或在线考试系统多采用b s 模式三层结构体系。该结构的在线考试 系统以浏览器作为考试界面,中间层由考试服务器和w w w 服务器来完成对考 试的控制,后台连接数据库,这种方式也是目前网络考试的主体,代表了网络 考试的一个发展趋势。 2 第一币绪论 随着i i i t e m e t i l l t m e t 技术的不断发展,新的基于w e b 的开发技术不断出现。 前人在探索中也使用了各种各样的技术进行在线评测系统的设计。 在编程语言的选择方面,前人尝试了几乎各种语言,如v b n 阳、j a v a 、 p e d n 引、c + + 、c 带u 1 等等。 在界面设计方面,由于系统的操作界面都是w r c b 页面形式,而且需要对用 户的各种具体请求进行动态处理并返回结果,所以各种在线评测系统基本上都 采用了动态网页技术。目前动态网页技术有很多,比如c g i 、p h p 、j s p 、f r o n t p a g c 、 a s p 、a s p n e t 等等。几乎各种动态网页技术都已被尝试用于在线评测系统的 设计中,在所查到的文献中用到的技术就有:p h p 汹1 、f r o n t p a g c 、d r e a m w a v e f 、 a s p 陋蛐1 、a s p 如玎n 2 妇等等,且大部分都能较好地满足该系统对于动态显示效 果的要求。 要开发出交互式、动态、高效的在线评测系统还需依靠数据库技术的支持, 对于数据库引擎的选择也是多种多样,如某些简单的系统采用了a c c e s s n 州玎1 或 阳删,但大多数系统采用了s q ls e r v c r 们呻瑚1 嘲。s q ls e r y 盯是m i c r o s o f t 公 司开发的大型关系数据库管理系统,具有非常强大的关系数据库创建、开发、 设计及管理功能,其安全性远远高于桌面型的a c o e 鳃、f o x p r 0 等数据库。在线 评测系统是个开放的系统,有些系统不仅面向校内学生与老师,而且还可对校 外用户开放,s q ls e c r 的特点与优点使其成为在线评测系统较为适宜的数据 库引擎。 本课题的主要工作是对源代码进行动态测试,并给出评价结果。动态测试 又称运行代码测试,是指用事先准备的测试用例,按照事先规定的测试计划, 运行被测试的系统,取得运行后的数据,再将此数据与测试计划中的期望结果 相比较,若二者一致,测试通过;若二者不一致,则表明程序有错误。此处的 动态测试包括黑盒测试和白盒测试瞳4 j 。黑盒测试又称功能测试或数据驱动测试, 它是在已知产品所应具有的功能的情况下,通过测试来检测每个功能是否都能 正常使用。测试时不考虑程序内部结构和内部特性,只检查程序是否能适当地 接收输入数据且产生正确的输出信息。白箱测试也叫结构测试或者逻辑驱动测 试,它的目的是发现程序编码过程中的错误。它是已知产品的内部工作过程, 可以通过测试证明每种内部操作是否符合设计规格要求,所有内部成分是否已 经过检查。软件的白箱测试是对软件的过程性细节做细致的检查。这种方法是 把测试对象看作一个打开的盒子,它允许测试人员利用程序内部的逻辑结构及 有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。通过在不同 点检查程序状态,确定实际状态是否与预期的状态一致。因此,白盒测试可以 用来对代码结构进行全面的测试疆引。 3 北京化t 人学坝l j 学位论义 1 2 课题研究的意义 传统的手工评测方式有许多难以克服的弊端,对教学效果和学生编程能力 的提高造成了难以许多障碍。 耗时耗力。阅读别人的源代码是件很困难的事情,为此,教师不得不耗 费大量的时间与精力,难以将更多的时间与精力投入到教学和科研工作 中。 时效性较差。由于手工评测方式非常耗费时间,这也直接导致了评测结 果往往需较长时间才能送达学生,学生难以得到及时的信息反馈,因而 大大影响了学生的学习效果和学习兴趣。 错误率较高。评测结果不可避免地具有较高的错误率,易造成对学生的 错误导向,对教学质量的提高非常不利。 具有一定的主观因素。因评测者的习惯、偏好等的不同,同一段代码会 被给出不同的分数。即使同一个评测者,不同时间给出的评测结果也会 有所不同。 难以对代码运行效率给出评定。程序运行时间、所占内存等数据是判定 一个程序运行效率的重要指标,手工评测难以对此做出准确的评定。考 虑到手工评测方式的耗时性,实际工作中一般也不进行这方面的评定工 作。 只有选学该门课程的少数学生才能得到教师的亲自评测,而其它学生只 能通过其它方式来对自己编写的程序进行评测,评测效果难以保证,不 利于程序设计类课程的普及教育。 源代码评测系统多用于各高校的程序设计类课程的辅助教学,兼作为程序 设计大赛的练习平台,相对于传统的手工评测方法,具有许多显而易见的优点。 源代码评测系统原是为各种程序设计大赛而开发,评测方式多类似于 a c m i c p c 等大赛,其题库中既有较为简单的题目,也有许多大赛真题, 难度各异,有利于大学生快速提高编程水平,并为参加各种程序设计大 赛积极做好准备。 源代码评测系统多为采用b ,s 或c s 架构的w e b 系统,用户只需具备 上网条件,即可登陆系统进行自测、竞赛、考试等项目,不受时间和空 间的限制,大大扩展了系统的应用范围。 源代码评测系统可对用户提交的代码进行自动评测,并给出较为详细的 评测结果,大大提高了评测效率,有利于全面、客观、迅速、公正、高 效地对学生进行考核。 4 第一章绪论 系统具有多种类型的项目,用户可自由选择自测、竞赛或考试等项目, 并根据自己的编程水平选择相应难度的习题进行练习,有利于提高用户 的学习兴趣。 系统具有许多辅助教学功能,如项目管理、用户管理、班级管理等,程 序设计类课程的辅助教学均可采用该系统,同时,教师亦可使用该系统 来布置作业、安排考试等,有利于将教师从繁重的批改作业、试题等工 作中解脱出来,专心做好教学和科研工作。 可见,开发出一种适应本校需要的,能对源代码进行自动评测的辅助教学 系统,确实对“教”与“学”都是件极有意义的事情。 5 第一二章系统改汁 2 1 整体架构 第二章系统设计 图2 - l 系统整体架构 聊g 2 - la a r c h i t c c t l l r e0 ft h cs y s t e m 如图2 1 所示,系统采用b s 三层架构,用户通过浏览器连接评测系统, 属于表现层,是系统呈现给用户的使用界面,用户通过u i 进行登陆、浏览、 提交代码、后台管理等操作。业务逻辑层负责实现除测试部分以外各模块的功 能,这里主要是网站中的各种教学辅助功能,如科目管理、班级管理、学生管 理、教师管理等等。数据库中保存系统所需要的各种相关信息,如代码信息、 用户信息、题目信息等等。b s 三层架构是目前o n l i n e j u d g c 系统所采用的最流 行的架构。o n l i n e j u d g c 系统采用三层架构具有以下优点: 有利于不同层次的开发人员分工合作,只要遵循一定的接口标准就可以 进行并行开发。 业务逻辑便于增删修改,不必为了业务逻辑上的微小变化导致整个程序 的修改,而只需要修改商业逻辑层中的一个函数或一个过程即可。考虑 到今后还需对o n l i n e j u d g e 系统的功能进行进一步的修改和扩充,例如, 需要对普通用户的权限进行一些限制,需要增加更多的管理功能,需要 扩展系统对添加其它编程语言的支持功能,使其对那些不直接编译为e x e 文件的编程语言也能非常方便地添加到系统中来等等。因而,采用这种 三层架构对于今后系统的日常维护和功能扩展是非常有利的。 可实现应用服务级和数据库级的全面分布,较好实现负载上的平衡。 由于中间层即业务逻辑层的存在,数据的安全性大大提高了。 在许多o n l i n e j u d g e 系统中,测试模块是紧密嵌套在网站中的。本系统将 测试部分( 包括黑盒测试和白盒测试) 从网站中分离了出来,成为一个专门的 测试模块。测试模块和网站部分无交互,而只和数据库打交道,其任务是轮询 7 北京化t 人学硕i j 学位论义 数据库获取待评测的源代码,对其进行测试并将测试结果保存到数据库中。这 种将测试部分独立为一个单独的测试模块的做法具有以下优点: 易维护:对测试模块的修改增删都很容易进行,网站和数据库部分只需相 应地略做修改即可。例如,今后当开发出了新的测试方法之后,就可以非 常轻松地加入到测试模块中 易移植:条件允许时,对测试模块稍加修改即可轻松移至另一台电脑,成 为一个专门的测试服务器,从而大大提升系统的性能; 可控制性:不添置专门的测试服务器时,测试模块以w i n d o w s 服务的形式 驻留于本机,管理员可决定测试模块的运行与否。由于测试部分是整个 o n li n e j u d g e 系统最耗费资源的操作,当系统过于繁忙时,管理员甚至可 暂时停止该服务,先尽可能多地接受用户请求,稍后再重启该服务,对用 户提交的代码进行测试。这虽然是一个权宜之计,但也可有效地缓解服务 器的压力。 2 2 开发工具 源代码评测系统是一个采用b 届三层架构的w e b 系统,服务器端采用 w i n d o w s2 0 0 3s e e r 操作系统,以i i s 6 0 配置服务器。开发语言使用c 劳,数据 库使用s q l s e n ,e r 2 0 0 5 ,数据库的访问采用a d o n e t 技术,而动态交互的网站 则使用a s p n e t 技术实现。 2 3 数据库设计与访问 2 3 1 数据库设计 数据库中存储了o n l i n c j u d g e 系统使用的各类信息,包括用户信息、项目 信息、题目信息、提交信息等,具体为以下几个数据库表: c 0 m p i l e r u n h l f o 表( 编译及运行参数表) : 其中l 加g l l a g e d e s c s 表示编程语言,如c 、c + + 等。h n g l l a g e e x t s 、l 加g i l a g e e x e s 分别表示源代码文件的后缀及编译后的可执行文件的后缀,如对于c 语言分别 为印p 和e x e ,而j a v a 语言则分别为j a v a 和d a s s 。h n g l l a g e e x t m e m o r y 、 l 棚g t l a g e e x t t i m e 分别代表该种语言使用o n l i n e j u d g e 系统所需的基本内存消耗 和基本时间消耗。从作业统计信息中得到的内存值和时间值中分别减去上述两 值方为运行代码的实际消耗。c o m p i l e c l n d 表示编译命令,测试时需取出该语 言相对应的编译命令以对源代码进行编译测试。如j a v a 语言对应的编译命令为: 8 第二章系统设计 i a v a cm a i n j a v a ,而使用g + + 对c + + 语言进行编译时,其对应的编译命令为: c :i u d g c o n l i n c b i 吣酬) i 旭+ + 懿c - 缸0 弱m s - w - 0 1 一d o n l 删巳j u d g e 帕 n 锄n a m e 黝i 删n a m e e x t ,其中的n a m e 对j 直文件名, 姗对应于路径名,e x t 对应于文件后缀名,编译前需将这些项分别以实际 文件名,实际路径和实际后缀名先行替换。目前系统可对c 、c + + 、p 弱c a l 和 j a v a 语言的源代码进行测试,分别使用g c c 、g + + 、f p c 和j d k l 5 进行编译。 在数据库中存储该表信息而不是在程序中进行硬编码,可使系统具有良好的可 扩展性。对于那些能以命令行方式运行的编程语言,只需在该表中增加一项即 可提供对该种语言的支持,而网站部分和测试模块则无需修改。 u s e n l 哟表( 用户信息表) 该表中存储一些用户的基本信息,包含字段有u s e f n 锄e 、p 勰s w o r d 、n a m e 、 r e g n m e 、l o g i n t i m e s 、r e 酣p 、u s e r t y p e 、s e x 、e m a i l 、p h o n e 和m s n ,分别表 示用户d 、登陆密码、真实姓名、注册口、用户类型、性别、邮箱、电话和 m 踮,其中u s e i ,珂p c 为一个t i n ) ,i n t 类型的字段,分别以o 、1 、2 、3 来表示管 理员、教师、学生和普通用户。 c l a s s h l f 0 表( 班级信息表) 存储班级的相关信息,包含字段c l a s s i d 、c l 硒s n 锄e 和s c h 0 0 l n a m e ,分 别表示班级i d 、班级名称和学校名称。 t e a c h e r i n f o 表( 教师信息表) 存储教师的相关信息,包含字段u s e r n 锄e 、h c a d s h i p 和s c h 0 0 l n 锄e ,分 别表示用户名、头衔和学校名称。 s u b j e c t i n f o 表( 科目信息表) 存储科目的相关信息,包含字段s u b j e c t i d 和s u 眯c t n a m e ,分别表示科目 l d 和科目名称。 p r o j e c t i n f o 表( 项目信息表) 存储项目的相关信息,包含字段p r o j e c t i d 、p r o j e c t n a m e 、s u b j e c t i d 、 p r o j e c t i n t r 0 、s t a n t i m e 、f i n i s h t i m e 、s t a t u s 和l s n e e 山却p l y ,分别表示项目i d 、 项目名称、所属科目i d 、项目简介、项目开始时间、项目结束时间、项目状态 和项目是否需要申请。其中s t a t i i s 是一个t i n y i n t 类型的字段,分别以0 、l 、2 表示项目未开始、正在进行和已结束的状态。i s n e e d a p p l y 也是一个t i i l y i n t 类 型的字段,以1 表示项目需事先申请方可参加,以0 表示项目无需申请即可参 力b 。 p r o b l e m i n f 0 表( 题目信息表) 存储题目的相关信息,包含字段p r o b l e m i d 、p r o b l e m n a m e 、m e m l i m 、 t b l a l t i m e u m 、c a s e r n m e l i m 、c o n t e n l 、s u b m j t 币m e s 和a c c e p t t i m e s ,分别表 示题目i d 、题目名称、耗费内存限制、总耗费时间限制、单测试用例时间限制、 9 北京化丁人学硕i j 学位论义 题目内容、提交次数和通过次数。 p r o i e c t p r o b l e m i n f 0 表( 项目题目关系表) 存储项目和题目的关联关系,包含字段p r o j e c t m 和p r o b l e m i d ,分别表示 有关联关系的项目i d 和题目i d 。 p r o i e c t u s e 山f o ( 项目用户关系表) 存储项目用户关系的关联关系,包含字段p r o i e c t i d 、u s e r n 锄e 和i d ,其 中p r o j e c t i d 和u s e r n a m e 分别表示有关联关系的项目i d 和用户名。 t e a c h e r c l a s s i n f o ( 教师班级关系表) 存储教师和班级的关联关系,包含字段c l a s s l d 和u s e r n a m e ,分别表示有 关联关系的班级i d 和用户名。 t e a c h e r p r o i e c t i n f o 表( 教师项目关系表) 存储教师和项目的关联关系,包含字段u s e r n 锄e 和p r o j e c t i d ,分别表示 有关联关系的用户名和项目i d 。 s t u d e n t c l a s s h l f o 表( 学生班级关系表) 存储学生和班级的关联关系,包含字段u s e r 】m e 和a 勰s d ,分别表示有 关联关系的用户名和班级i d 。 s u b m i t i n f 0 表( 提交信息表) 存储用户提交的代码信息和评测结果,包含字段c 0 m p i l e m 、u s e r n a m e 、 p m b l e m i d 、p r o j e c t i d 、l 孤g 、s u b m i t t i m e 、c o d e l e n 舀h 、r e s u l t 、u s e d m e m o 、 u s e d t i m e 、c o m p i l e e n d r i n f 0 和s o u r c e c o d e ,分别表示编译编号、用户名、题 目i d 、项目i d 、编程语言、提交时间、代码长度、评测结果、耗费内存、耗费 时间、编译错误信息和源代码。其中r e s u l t 为一个t i n v i n t 类型的字段,以l 7 分别表示7 种评测结果:编译错误、答案正确、答案错误、运行时错误、格式 错误、时间超限和内存超限。 c o n f i 曲痢- 表( 配置参数表) 包含字段w b r k i n 妒a t h 和d a t a f i l e s p a t h ,分别表示工作路径和测试用例文 件存储位置。 2 3 2 数据库访问 对数据库的访问采用的是a d o n e t 技术。a d o n e t 提供了扩展数组特性 来实时处理数据( 与数据库建立连接) 或在与数据库断开连接的情况下处理数 据,它具有断开式数据结构、与) 【m l 的紧密集成、能够组合来自多个、不同 数据源的数据的通用数据表示形式以及为与数据库交互而优化等功能,在 a d o n e t 2 0 中还增加了批量加载各种数据源中的大量数据、批处理对数据库的 更新、且与数据库服务器之间的往返较少、对多个操作重用同一个实时连接以 及对数据库进行异步访问等大量新功能。 1 0 第一章系统改计 a d o m 玎具有很多优点,使得数据操作过程更加容易: 1 互操作性 a d o 三t 使用x m l 在组件之间以及层间传送数据集,这使得使用不同工 具开发的组件可以更加容易地进行通信。 2 高性能 在早期的a d o 中,是借助于c o m 组件使用纪录集的,传送数据时,纪 录集中的数据必须转换为c o m 数据类型。而在a d o n e t 中的数据存储采用 的是x m l 格式,不需要数据类型转换过程,从而提高了访问的效率。 3 标准化 这种标准化来源于a d o m 玎采用x m l 进行数据存储,而x m l 目前已成 为在i i l t e m e t 上传送数据的标准方式。 4 可编程性 a d o m 玎是玎f r a m 溅中的组件,可采用多种语言进行编程,是一 个强类型化的编程环境。 a d o n l 强中的数据提供程序包括c o 衄e c l i 蚰、c o m m 觚d 、d 砒a d a p 衙和 d a t a r e a d 盯对象。使用a d o n l 玎访问数据库的一般过程是:首先创建 c o 皿e c t i o n 对象,为其提供需要的信息,例如连接字符串。连接字符串为一个 类似于”s e e r = 2 2 2 1 9 9 2 3 0 事謇;d a t a b a s e = o n l i n e j u d g e ;u i d = s a ;p w d = 幸宰宰事掌宰;”这 样的字符串,一般将连接字符串存储在w 曲c o n 埏文件中为系统公用,这可以 有效使用数据库连接池从而改善性能;然后创建一个c c 帆m 觚d 对象,为其提 供要执行的命令的细节,这个命令可以是内置s q l 文本命令、存储过程或对表 的直接访问。如有必要,还可以为这些命令提供参数;在创建c o n n e c t i o n 和 c o m m 柚d 对象后,就必须确定命令是否返回结果集。若命令不返回结果集,就 可以通过调用几个e x e c i l t e 方法之一执行命令。另一方面,若命令返回结果集, 就要确定是否需要保留结果集,以备将来在不维持与数据库的连接的情况下使 用。若要保留结果集,就要创建一个d a t 诅d a p t e r 对象,并用它来填充d a t a s e t 或d a t a t a b l e 对象,这些对象可以在断开连接的情况下维护其中的信息。若不需 要保留结果集,就可以使用d a t a r e a d e r 对象快速执行命令,与d a t a s e t 和 d a t a l a b l e 对象不同的是,d a t 根e a d e r 对象需要与数据库的实时连接,它是一个 向前只读的光标。 如上所述,c o m m 锄d 对象执行的命令可以是内置s q l 文本命令、存储过 程或对表的直接访问。在本系统中全部采用了存储过程。存储过程是存储在服 务器上的一组预编译的s q l 语句和可选控制流语句的集合,它于创建时在服务 器上编译,在执行一次之后其执行规划就驻留在高速缓存中,以后运行时就直 北京化t 人学坝i j 学位论义 接从缓存中调用,因而其运行速度要比使用s q l 语句快得多。除了这个众所周 知的优点外,采用存储过程还可以防止s q l 注入攻击,将存储过程用于所有的 数据修改可以标准化访问对象的顺序( 即可以保证并发事务按同一顺序访问对 象) ,避免事务中的用户交互,将死锁减至最少从而增加事务的吞吐量并减少系 统开销。因而,没有理由不采用存储过程代替s q l 语句。接下来的问题就是存 储过程的分与合的问题,即将一个业务逻辑写入一个存储过程中还是分为几个 存储过程并在程序中实现事务。从数据库方面讲,后者的运行速度要比前者快 很多。但同时还需要考虑一下在a s p n e t 中访问数据库方面的问题。访问数据 库资源需要创建连接、打开连接、关闭连接三个操作,需要多次与数据库交换 信息以通过身份验证,在a s p :m 订中这是个很耗费资源的操作。虽然a s p m 玎 提供了数据库连接池以改善打开和关闭数据库对性能的不利影响,但连接池的 大小是有限的,如果达到了连接池的最大限度后仍要求创建连接,就会对性能 产生很大影响。因而,从性能方面考虑,应尽量减少访问数据库的次数,只有 在真正必要时再打开数据库的连接,用完应立即关闭。通过把一个完整的业务 逻辑写入一个存储过程中( 或者说把几个能够合而为一的存储过程加以合并) , 可以减少与数据库通信的次数,大大减少网络数据的流量。通过将存储过程分 开所取得的速度收益无法与其耗费的服务器资源相比,基于如上考虑,在新设 计的o n l i n e j u d g e 系统中,所有数据库操作均采用了存储过程,并且在存储过程 中实现事务操作。 第三章模块设汁 3 1 层级结构 第三章模块设计 在o n l i n e j u d g e 系统中具有2 种层级关系:用户层级关系和项目层级关系。 用户层级关系分为4 级:管理员、教师、学生和普通用户,其权限依次降 低,上一级用户均具有下一级用户的所有权限。学生和普通用户只具有使用权 限,而管理员和教师还具有管理权限,负责管理用户和项目等。目前普通用户 和学生的功能大致相同,增加普通用户级别以利于以后添加更多功能,以使两 者具有不同的权限。用户层级关系并不是简单地以数据库表中的一个字段来区 分的,在实际实现中,普通用户、学生、教师、管理员分别对应于业务逻辑层 中的一个类,且这四个类为层层继承的关系。在各个类中规定了该类用户可以 进行的操作。因而,这种层级关系很有利于今后对其功能进行修改或扩充,例 如,可以非常容易地修改普通用户类或学生类,以区别其相应的权限,或者修 改教师类和管理员类,以添加更多的管理功能等。 项目的层级关系分为3 级:科目、项目和题目。科目为诸如“数据结构 这样的学科,设置此级以利于将系统应用于多种程序设计类课程的辅助教学。 科目之下设项目,项目又可分为自测、竞赛、考试等,具体设置由项目添加者 设定,根据是否要求申请又可分为自测项目和非自测项目。项目之下设题目, 只有设置了关联关系的题目方出现在项目中。项目和题目之间采用多对多的关 系,同一道题目可同时设置与多个项目的关联关系,因而可以同时出现于多个 项目中,有效地提高了题目的使用率,避免了题目的重复添加。项目的层级关 系体现在数据库中,例如,在p r o i e c t l l l f o ( 项目信息表) 中的s u b j e c t i d 字段代 表了该项目属于哪个科目;若某个题目属于某个项目,则p r o i e c t p r o b l e m h l f 0 ( 项 目题目关系表) 中就会相应有一项记录,以表示两者具有关联关系。本系统中, 科目和项目为一对多的关系,而项目和题目则为多对多的关系,一个项目只可 属于一个科目,而一个题目则可以同时和多个项目具有关联关系。 3 2 前台设计 o n l i n e j u d g e 系统的网站部分分为前台和后台,前台是系统呈现给用户的使 用界面,主要供学生和普通用户使用。而后台则是教师和管理员使用的管理界 面。 北京化1 人学坝i j 学位论义 前台实现了以下各种功能: 1 未登陆用户查看信息 系统允许登陆用户具有有限的查看功能,未登陆用户可以查看自测项目中 的题目内容、竞赛和考试的简单介绍、用户排名情况等信息,但不能提交代码, 也不能查看考试和竞赛项目

温馨提示

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

评论

0/150

提交评论