论文部分内容阅读
摘 要:针对于计算机语言教师阅读与调试程序工作量大的问题,借助于计算机工具,设计并实现一套程序设计语言在线评测系统,以减少教师对程序评测的工作量并提高学生的学习效率。
关键词:在线 程序设计 评测 系统
中图分类号:TP311.51 文献标识码:A 文章编号:1007-3973(2013)003-065-02
1 引言
如今计算机技术发展迅速,计算机已经成为了人们在日常生活和工作中不可缺少的一种现代化工具。而要想充分的利用计算机的高效处理能力,程序设计就显得尤为重要。在高校中,很多专业都开设的有程序设计课程,要求学生具备一定的程序设计能力,以便能够借助于计算机这种现代化工具解决一些学习和工作中遇到的实际问题。因而学好一门计算机程序设计语言,具备一定的程序设计能力已经成为现代大学生必不可少的一种技能。在学习计算机程序设计语言时,学生们往往要编写大量的程序,教师要对学生们所编写的每一个程序进行调试运行,以便指出并纠正学生们在程序设计中出现的一些错误。从学生提交程序开始,到教师编译、调试,运行,到最后对程序做出评价结果。每一个阶段都是一个非常繁琐的过程,学生提交的程序越多,教师在程序设计评测过程中所花费的时间和精力就越多,大大增加了教师的工作量。
设计一套在线的程序设计与评价系统,可以让学生们在线进行程序设计,并能通过网络直接提交给系统,由系统对学生们提交的程序自动进行编译运行,自动反馈编译运行中的错误信息或程序运行的最终评价结果。该系统即方便了学生提交程序,也减少了教师对程序评测的工作量。同时,学生们能通过系统的评测,较快的了解程序设计中所出现的错误,以及时更正,提高学习程序设计的效率。
2 系统功能设计
系统以减少教师工作量,提高学生学习计算机程序设计语言的效率为目的,应具有以下功能:
(1)学生在线答题。
学生可通过系统页面登录,登录后选择程序试题,在线进行答题并将编写好的程序源程序提交到Web服务器端。
(2)自动程序评测。
Web服务器端对学生提交的程序进行在线评测,并给出评测结果。
(3)在线成绩查询。
学生可在线查询自己所提交程序的评测结果。
(4)在线考试与竞赛组题。
系统可用于平时计算机语言课程的考试与竞赛。考试或竞赛时允许教师指定相应考试题目,学生对教师指定的考试和竞赛题目在规定时间内答题,答题后在线提交并能实时查询自己的答题成绩。
3 系统总体设计
整个系统的设计采用B/S(Browser/Server)的模式,开发遵循MVC的三层架构,及底层Model层负责数据模型、中间层Control层负责业务逻辑的处理、高层View层负责用户界面。三个层次功能上相互独立,有益于系统的日常维护及进一步的扩展。
Browser客户端页面主要用来实现View层,负责用户界面,学生可通过客户端页面进行用户注册、登录以及在线答题和成绩查询;教师则可通过客户端页面进行试题与试题答案和要求的编辑与上传,还可根据考试或竞赛的需要进行试题的组织与编排。
业务逻辑层主要在Web服务器端能够对数据库中的程序源代码进行读取并生成相应语言的源程序以进行编译运行和评测,并最终给出评测结果,将评测各阶段的数据信息写入数据库中。
底层的数据模型主要用来保存学生和教师的信息、试题相关信息、学生提交的程序源代码信息、学生程序在服务器端的编译运行信息,以及学生最终的程序评测结果信息。
4 系统详细设计
根据系统的功能需要和总体设计,系统的详细设计主要分为以下几个模块:
(1)用户注册与登录模块。
学生或教师可通过系统进行注册,注册后不同身份对系统有不同的权限,如学生可在线答题,而教师可在线试题录入与编辑。
(2)学生在线答题与成绩查询模块。
程序试题按不同难度级别进行分类,学生可根据自己的学习程度选择不同难度的试题。选题后,学生可选择不同的计算机程序语言来进行具体实现,实现后学生通过系统页面将编写好的源程序代码直接提交给Web服务器。
待服务器端对程序做出评测结果后,学生可在线访问服务器端数据库中的评测信息与结果。如果没有编译通过,学生能查询到未通过编译的错误信息,可进一步修改程序后再次提交;如果通过了编译,学生可查询自己的程序是否执行正确以及程序运行的效率程度和最终的评测结果。
(3)程序在线评测模块。
学生在线答题的程序源代码提交到Web服务器端的数据库。在Web服务器端运行着一个守护线程,该守护线程不断检测提交到数据库中的源程序代码,一旦检测到尚未评测的代码,守护线程自动将该程序代码从数据库中读取出来,根据学生所选的计算机程序语言类别建立相应的源程序文件,并在Web服务器端调用相应的计算机语言编译环境进行源程序的编译,将编译时的编译信息写入数据库。若编译错误,则将编译时的错误信息写入数据中,可在线反馈给学生;若编译正确则进入程序运行测试阶段。运行测试时,需从数据库中读取该试题的测试数据,一般有三到五组的测试数据,一一代入编译后的程序中进行测试运行,运行后将每次运行的结果与运行时所花费的时间复杂度与空间复杂度记录到数据库中,并将每次运行的结果与数据库中该试题的正确结果进行比对,以判断该程序是否运行正确。进一步判断程序每次运行的时间复杂度与空间复杂度是否在该试题规定的时间复杂度与空间复杂度内,以确定该程序的运行效率是否达到试题的规定要求。系统将根据程序运行的正确程度以及运行效率给出不同的评测等级结果。
(4)教师试题录入与编辑模块。
教师在客户端页面录入并编辑试题更新到服务器端的数据库中,完成试题的编制工作。 5 开发与实现
使用Eclipse开发工具,综合Spring技术、Hibernate技术,数据库使用MySQL,系统整体部署在Tomcat服务器,所有开发工具、数据库、服务器、框架全部为开源的免费软件,并且根据各个软件的授权协议进行使用。系统功能,构建具有良好的扩展性、开放性的系统,易于维护,升级方便。
底层使用Hibernate框架访问数据库,主要的类有BaseDao。BaseDao为所有DAO的父类,使用了泛型。BaseDao定义了数据库操作的常用方法,子类只需继承便可使用对应的方法,因为使用了泛型,所以更新操作的返回值为各个实体类Entity,返回的Entity向上层提供给Service进行业务逻辑处理。
数据库表所对应的类为实体类,一个实体类进行数据库的映射,默认自动对应的数据库表是和类名同名的数据表,如果数据库表和类名不同名可以设置@Table(name="users")进行映射。同样数据库字段名默认情况下是和类的属性名同名的,如果不同名可用@Column(name="user_id")进行映射设置。@Id说明该属性对应的字段为数据库主键。
Service为业务逻辑层,通过Spring的依赖注入,注入不同的DAO,进行数据库操作。DAO返回给Service的是Entity,在service的不同方法里面通过DataTransferUtil类进行转换,转换为页面需要的域模型Domain,提供给上层。
6 总结
该系统的设计可完成在线计算机程序设计的评测工作,一定程度上减少了教师阅读程序和调试程序的工作量。但在程序效率的评测上还不够精确,这取决于程序运行时的时间复杂度与空间复杂度的测定算法,系统中该算法的应用尤为重要,应着重设计实现。
(2012年河南省信息技术教育研究项目 ITE 12165)
参考文献:
[1] (美)威尔顿,麦可匹克.JavaScript入门经典(第3版)[M].施宏斌,译.北京:清华大学出版社,2009.
[2] (美)Marty Hall,Larry Brown.Servlet与JSP核心编程(第二版)[M].赵学良,译.北京:清华大学出版社,2004.
[3] 孙卫琴.精通Struts:基于MVC的Java Web设计与开发[M].北京:电子工业出版社,2004.
[4] 张孝祥.Java就业培训教程[M].北京:清华大学出版社,2003.
[5] 王国辉,李立文,杨亮.JSP数据库系统开发完全手册[S].
[6] 陈鹏,程勇.J2EE项目开发实用案例[M].北京:科技出版社,2006.
[7] (美)Bruce Eckel.Java编程思想[M].陈昊鹏,译.北京:机械工业出版社,2007.
[8] 赵元杰.Oracle 10g系统管理员简明教程[M].北京:人民邮电出版社,2006.
[9] 程伟,汪孝宜.开发者突击:JSP网络开发经典模块实现全集[M].北京:电子工业出版社,2008.
关键词:在线 程序设计 评测 系统
中图分类号:TP311.51 文献标识码:A 文章编号:1007-3973(2013)003-065-02
1 引言
如今计算机技术发展迅速,计算机已经成为了人们在日常生活和工作中不可缺少的一种现代化工具。而要想充分的利用计算机的高效处理能力,程序设计就显得尤为重要。在高校中,很多专业都开设的有程序设计课程,要求学生具备一定的程序设计能力,以便能够借助于计算机这种现代化工具解决一些学习和工作中遇到的实际问题。因而学好一门计算机程序设计语言,具备一定的程序设计能力已经成为现代大学生必不可少的一种技能。在学习计算机程序设计语言时,学生们往往要编写大量的程序,教师要对学生们所编写的每一个程序进行调试运行,以便指出并纠正学生们在程序设计中出现的一些错误。从学生提交程序开始,到教师编译、调试,运行,到最后对程序做出评价结果。每一个阶段都是一个非常繁琐的过程,学生提交的程序越多,教师在程序设计评测过程中所花费的时间和精力就越多,大大增加了教师的工作量。
设计一套在线的程序设计与评价系统,可以让学生们在线进行程序设计,并能通过网络直接提交给系统,由系统对学生们提交的程序自动进行编译运行,自动反馈编译运行中的错误信息或程序运行的最终评价结果。该系统即方便了学生提交程序,也减少了教师对程序评测的工作量。同时,学生们能通过系统的评测,较快的了解程序设计中所出现的错误,以及时更正,提高学习程序设计的效率。
2 系统功能设计
系统以减少教师工作量,提高学生学习计算机程序设计语言的效率为目的,应具有以下功能:
(1)学生在线答题。
学生可通过系统页面登录,登录后选择程序试题,在线进行答题并将编写好的程序源程序提交到Web服务器端。
(2)自动程序评测。
Web服务器端对学生提交的程序进行在线评测,并给出评测结果。
(3)在线成绩查询。
学生可在线查询自己所提交程序的评测结果。
(4)在线考试与竞赛组题。
系统可用于平时计算机语言课程的考试与竞赛。考试或竞赛时允许教师指定相应考试题目,学生对教师指定的考试和竞赛题目在规定时间内答题,答题后在线提交并能实时查询自己的答题成绩。
3 系统总体设计
整个系统的设计采用B/S(Browser/Server)的模式,开发遵循MVC的三层架构,及底层Model层负责数据模型、中间层Control层负责业务逻辑的处理、高层View层负责用户界面。三个层次功能上相互独立,有益于系统的日常维护及进一步的扩展。
Browser客户端页面主要用来实现View层,负责用户界面,学生可通过客户端页面进行用户注册、登录以及在线答题和成绩查询;教师则可通过客户端页面进行试题与试题答案和要求的编辑与上传,还可根据考试或竞赛的需要进行试题的组织与编排。
业务逻辑层主要在Web服务器端能够对数据库中的程序源代码进行读取并生成相应语言的源程序以进行编译运行和评测,并最终给出评测结果,将评测各阶段的数据信息写入数据库中。
底层的数据模型主要用来保存学生和教师的信息、试题相关信息、学生提交的程序源代码信息、学生程序在服务器端的编译运行信息,以及学生最终的程序评测结果信息。
4 系统详细设计
根据系统的功能需要和总体设计,系统的详细设计主要分为以下几个模块:
(1)用户注册与登录模块。
学生或教师可通过系统进行注册,注册后不同身份对系统有不同的权限,如学生可在线答题,而教师可在线试题录入与编辑。
(2)学生在线答题与成绩查询模块。
程序试题按不同难度级别进行分类,学生可根据自己的学习程度选择不同难度的试题。选题后,学生可选择不同的计算机程序语言来进行具体实现,实现后学生通过系统页面将编写好的源程序代码直接提交给Web服务器。
待服务器端对程序做出评测结果后,学生可在线访问服务器端数据库中的评测信息与结果。如果没有编译通过,学生能查询到未通过编译的错误信息,可进一步修改程序后再次提交;如果通过了编译,学生可查询自己的程序是否执行正确以及程序运行的效率程度和最终的评测结果。
(3)程序在线评测模块。
学生在线答题的程序源代码提交到Web服务器端的数据库。在Web服务器端运行着一个守护线程,该守护线程不断检测提交到数据库中的源程序代码,一旦检测到尚未评测的代码,守护线程自动将该程序代码从数据库中读取出来,根据学生所选的计算机程序语言类别建立相应的源程序文件,并在Web服务器端调用相应的计算机语言编译环境进行源程序的编译,将编译时的编译信息写入数据库。若编译错误,则将编译时的错误信息写入数据中,可在线反馈给学生;若编译正确则进入程序运行测试阶段。运行测试时,需从数据库中读取该试题的测试数据,一般有三到五组的测试数据,一一代入编译后的程序中进行测试运行,运行后将每次运行的结果与运行时所花费的时间复杂度与空间复杂度记录到数据库中,并将每次运行的结果与数据库中该试题的正确结果进行比对,以判断该程序是否运行正确。进一步判断程序每次运行的时间复杂度与空间复杂度是否在该试题规定的时间复杂度与空间复杂度内,以确定该程序的运行效率是否达到试题的规定要求。系统将根据程序运行的正确程度以及运行效率给出不同的评测等级结果。
(4)教师试题录入与编辑模块。
教师在客户端页面录入并编辑试题更新到服务器端的数据库中,完成试题的编制工作。 5 开发与实现
使用Eclipse开发工具,综合Spring技术、Hibernate技术,数据库使用MySQL,系统整体部署在Tomcat服务器,所有开发工具、数据库、服务器、框架全部为开源的免费软件,并且根据各个软件的授权协议进行使用。系统功能,构建具有良好的扩展性、开放性的系统,易于维护,升级方便。
底层使用Hibernate框架访问数据库,主要的类有BaseDao。BaseDao为所有DAO的父类,使用了泛型。BaseDao定义了数据库操作的常用方法,子类只需继承便可使用对应的方法,因为使用了泛型,所以更新操作的返回值为各个实体类Entity,返回的Entity向上层提供给Service进行业务逻辑处理。
数据库表所对应的类为实体类,一个实体类进行数据库的映射,默认自动对应的数据库表是和类名同名的数据表,如果数据库表和类名不同名可以设置@Table(name="users")进行映射。同样数据库字段名默认情况下是和类的属性名同名的,如果不同名可用@Column(name="user_id")进行映射设置。@Id说明该属性对应的字段为数据库主键。
Service为业务逻辑层,通过Spring的依赖注入,注入不同的DAO,进行数据库操作。DAO返回给Service的是Entity,在service的不同方法里面通过DataTransferUtil类进行转换,转换为页面需要的域模型Domain,提供给上层。
6 总结
该系统的设计可完成在线计算机程序设计的评测工作,一定程度上减少了教师阅读程序和调试程序的工作量。但在程序效率的评测上还不够精确,这取决于程序运行时的时间复杂度与空间复杂度的测定算法,系统中该算法的应用尤为重要,应着重设计实现。
(2012年河南省信息技术教育研究项目 ITE 12165)
参考文献:
[1] (美)威尔顿,麦可匹克.JavaScript入门经典(第3版)[M].施宏斌,译.北京:清华大学出版社,2009.
[2] (美)Marty Hall,Larry Brown.Servlet与JSP核心编程(第二版)[M].赵学良,译.北京:清华大学出版社,2004.
[3] 孙卫琴.精通Struts:基于MVC的Java Web设计与开发[M].北京:电子工业出版社,2004.
[4] 张孝祥.Java就业培训教程[M].北京:清华大学出版社,2003.
[5] 王国辉,李立文,杨亮.JSP数据库系统开发完全手册[S].
[6] 陈鹏,程勇.J2EE项目开发实用案例[M].北京:科技出版社,2006.
[7] (美)Bruce Eckel.Java编程思想[M].陈昊鹏,译.北京:机械工业出版社,2007.
[8] 赵元杰.Oracle 10g系统管理员简明教程[M].北京:人民邮电出版社,2006.
[9] 程伟,汪孝宜.开发者突击:JSP网络开发经典模块实现全集[M].北京:电子工业出版社,2008.