3。2 可行性研究 。 10
3。2。1 经济可行性 。 10
3。2。2 技术可行性 。 11
3。2。3 操作可行性 。 11
3。3 分析建模 。。。 11
3。3。1 数据模型与 E-R 图 。。。 11
3。3。2 功能模型与数据流图 。 12
3。3。3 行为模型与状态转换图 。。。 13
第四章 详细设计与实现 14
4。1 前端模块设计 。。。 14
4。1。1 采用响应式布局的问题页 。 14
4。1。2 收集源代码的提交页 。 17
4。1。3 给出反馈的结果页 。。。 17
4。2 后端模块设计 。。。 19
4。2。1 后端总体设置 。。。 19
4。2。2 处理 HTTP 请求 。。 21
4。3 数据库模块设计 。 22
4。3。1 创建集合及插入数据 。 23
4。3。2 题库存储格式的设计 。 24
4。3。3 数据库操作分析 。 25
4。4 判题模块设计 。。。 27
4。4。1 可执行文件生成 。 27
4。4。2 运行测评 。。。 28
4。4。3 反馈结果 。。。 29
第五章 系统测试 。。。 30
5。1 测试平台与工具 。 30
5。2 测试方案设计 。。。 30
5。3 测试用例 。。。 31
5。4 测试结果与分析 。 32
结论 。 33
致谢 。 35
参考文献 36
第一章 绪论
在高级语言出现之后,程序员的工作效率得以成倍地提高。然而面对高级语言的 源代码,如何评判正误、是否存在 bug 成为棘手的问题。程序设计竞赛自动阅卷系统 采用在线判题的方式,能够以较低成本解决该问题。 论文网
1。1 研究背景与意义
ACM 国际大学生程序设计竞赛(ACM International Collegiate Programming Contest,简称 ACM-ICPC)可以称为程序设计竞赛中最著名的赛事。ACM-ICPC 由国际计 算机学会主办,每年举办一次,举办地点位于世界各地,每年都不相同。
赛事的历史可以追溯到 1970 年,在美国德克萨斯举办了首届比赛。最初的参赛
队伍多来自美国和加拿大。从 1997 年 IBM 开始赞助之后,赛事规模不断扩大。在 1997
年,总计有来自全球 560 所大学的 800 余支队伍参赛[1]。
在赛事早期,美国和加拿大统治了冠军地位。然而,进入上世纪 90 年代后,俄
罗斯和波兰数次夺得冠军。在 2002 年,中国的上海交通大学首次夺得冠军。目前为 止,中国共获得过四次全球总决赛冠军,其中上海交通大学获得过三次,浙江大学获 得过一次。在 2016 年的总决赛上,上海交通大学获得亚军,复旦大学排名第 12,获 得铜牌。
竞赛一般进行 5 个小时,有 7 道或以上问题,三名选手组成一队,共用一台电脑 协作完成。解决一道试题之后,可以将其提交给评委,由评委判断是否正确。如果不 正确,程序会被退回并追加罚时。最终的解题用时是实际时间加上罚时,因此,对解 题的准确性也有较高要求。
除了 ACM-ICPC 之外,比较著名的赛事有 Topcoder 公开赛、谷歌全球编程挑战赛 (Google Code Jam)、Facebook 黑客杯(Hacker Cup)等。在国内,有百度之星(Baidu Astar)、蓝桥杯等。在这些比赛中,除了问题的设计之外,最重要的就是阅卷系统的 设计了,一个好的阅卷系统必须快速地判断源代码的正误,给出反馈结果。