1 需求分析
1.1 系统简介
在计算机教育领域,尤其是程序设计类课程,教学内容基本上是理论与实践相结合。对于的传统的手动批改源代码和程序的方式通常会耗费教师巨大的精力,也难以保证结果公正性,因此程序题自动批改系统备受关注。目前应用较为广泛的的程序自动批改系统是ACM/ICMP的Online Judge程序批改系统,但是在多数的程序设计类课程中,ACM/ICMP并不适用。ACM/ICMP系统只能够处理标准的输入输出程序,并且给出对或错两种结果,无法像手工批改一样,对各方面进行打分,同时给出具体的分数以及错误原因。
因此,设计一个程序题智能批改系统,采用提交-反馈的模式,让学生在离开老师的情况下,可以自己编写程序并交给系统进行批改,同时教师可在后台查看学生的学习情况,并予以反馈。这不仅提高了学生编写程序的积极性,也驱动学生去深入学习编程,大大减轻了教师的工作量。
1.2 需求说明
程序题智能批改系统可用于让学生在没有老师的监督下,独立编写程序并通过系统提交给后台。教师在后台可查看学生的学习情况,并针对不同学生的答题情况予以反馈。主要需求如下:
- 学生可以在线编程,并支持本地调试
- 学生可以将编写好的代码提交到服务器端,并查询自己的成绩
- 教师可以题库进行管理,例如:增加题目、修改答案等等
- 教师可以对学生成绩进行管理,并可查看成绩分析报告
- 教师可以在线批改学生代码,并予以反馈
- 管理员可以对学生及教师信息进行管理
1.3 用例分析
1.3.1 用例与角色
学生:
- 查询相关个人基本信息
- 查询成绩
- 在线编程答题
- 提交代码
- 测试代码
- 下载代码
- 问题反馈
教师:
- 题库管理
- 查询个人基本信息
- 在线批改
- 生成成绩分析报告
- 代码安全检测
- 成绩管理
管理员:
- 管理学生基本信息
- 管理教师基本信息
1.3.2 用例图
1.3.3 用例描述
用例名称:成绩查询 |
---|
描述:学生查询个人成绩信息 |
标识符:UC01 |
角色:学生 |
前置条件:学生成功登录系统 |
主事件流: 1.学生点击个人信息连接,跳转到个人信息页面 2.点击题目,查询所得成绩 3.用例结束 |
其他事件流: 1.学生未答题,未显示分数 |
用例名称:在线编程答题 |
---|
描述:学生进行在线编程答题 |
标识符:UC02 |
角色:学生 |
前置条件:学生成功登录系统并点击题目 |
主事件流: 1.学生选择题目类型 2.学生点击题目链接 3.跳转到程序编写界面进行编程 4.下载代码进行本地调试 5.用例结束 |
其他事件流: |
后置事件流:学生点击“保存”按钮 |
用例名称:测试代码 |
---|
描述:学生对编写好的代码进行测试 |
标识符:UC03 |
角色:学生 |
前置条件:学生编写好代码并点击“测试”按钮 |
主事件流: 1.学生编写代码 2.学生点击“测试按钮” 3.系统检查代码的安全性 4.返回测试结果 5.用例结束 |
其他事件流: 1.学生关闭窗口,提示“保存代码” 2.学生编写的代码运行异常,警告“疑似病毒” |
后置事件流:学生点击“提交”按钮 |
用例名称:提交代码 |
---|
描述:学生对测试好的代码进行提交 |
标识符:UC04 |
角色:学生 |
前置条件:学生编写好代码并点击“提交”按钮 |
主事件流: 1.学生编写代码 2.代码通过安全测试 3.学生点击“提交按钮” 4.用例结束 |
其他事件流: 1.学生代码安全测试未通过,提交按钮禁用 |
后置事件流:无 |
用例名称:下载代码 |
---|
描述:学生下载教师提供的参考代码 |
标识符:UC05 |
角色:学生 |
前置条件:教师上传参考代码 |
主事件流: 1.学生选择题目 2.点击参考代码链接进行下载 3.用例结束 |
其他事件流:无 |
后置事件流:无 |
用例名称:问题反馈 |
---|
描述:学生对题目的疑惑在留言中反馈 |
标识符:UC06 |
角色:学生 |
前置条件:无 |
主事件流: 1.学生输入问题内容 2.学生点击提交按钮 3.用例结束 |
其他事件流: 1.输入的内容为空,提示“输入的内容为空” |
后置事件流: 1.管理员审核通过,反馈显示 |
用例名称:题库管理 |
---|
描述:教师对编程题目进行管理 |
标识符:UC07 |
角色:教师 |
前置条件:教师成功登录系统 |
主事件流: 1.教师点击题库管理链接 2.教师可以增加或批量导入题目,并设置答案及上传参考代码 3.教师可以批量删除题目 4.教师可以修改题目信息,可以修改题目答案 5.教师可以对所有题目进行条件查询或者模糊查询 6.教师点击保存按钮,完成对题库的管理操作 7.用例结束 |
其他事件流: 1.关闭页面时,教师批量导入未点击保存按钮,提醒用户保存 2.查询条件为空,查询所有题目 |
后置事件流: 1.所有增加或者修改的题目信息均保存到数据库中,学生看到新的题目信息 |
用例名称:在线批改 |
---|
描述:教师在线对学生编写的代码进行批改并予以评价反馈 |
标识符:UC08 |
角色:教师 |
前置条件:教师成功登录系统 |
主事件流: 1.教师点击在线批改按钮,系统自动打分。 2.教师可以点击查看某个学生的具体答题情况,并予以评价 3.教师可对学生所提疑问进行在线解答 4.教师可以导出学生所写的代码 5.用例结束 |
其他事件流: 1.代码安全检测未通过,程序不予以执行 |
后置事件流: 1.题目的得分信息保存到数据库中,学生可看到自己的成绩 |
用例名称:成绩管理 |
---|
描述:教师对学生的成绩信息进行管理 |
标识符:UC09 |
角色:教师 |
前置条件:教师成功登录系统 |
主事件流: 1.教师点击学生成绩信息管理按钮 2.教师可以修改学生的成绩信息 3.教师可以删除学生的成绩信息 4.教师可以按条件查询学生的成绩信息 5.教师点击保存,完成对学生信息管理的操作 6.用例结束 |
其他事件流: 1.查询条件为空,查询所有的学生信息 |
后置事件流: 1.修改的成绩信息保存到数据库中,学生可看到自己修改后的成绩 |
用例名称:生成成绩分析报告 |
---|
描述:生成学生的成绩分析报告 |
标识符:UC10 |
角色:教师 |
前置条件:教师成功登录系统,点击了成绩管理按钮 |
主事件流: 1.教师点击学生成绩信息管理按钮 2.教师点击了生成学生成绩报告 3.教师可以按不同条件对成绩进行统计分析 4.教师可以下载生成的分析报告 5.用例结束 |
其他事件流:无 |
后置事件流:无 |
用例名称:学生信息管理 |
---|
描述:管理员对学生信息进行管理操作 |
标识符:UC11 |
角色:系统管理员 |
前置条件:管理员成功登录系统,并点击学生信息管理 |
主事件流: 1.管理员点击学生信息管理 2.管理员可以批量导入学生信息 3.管理员可以删除学生信息 4.管理员可以修改学生信息 5.管理员可以进行条件查询或者模糊查询 6.管理员点击保存完成对学生信息管理的操作 7.用例结束 |
其他事件流: 1.点击保存,学生信息为空或者不符合要求,提示“学生信息不符合要求” |
后置事件流: 1.对于新增的学生,学生可以通过账号密码登录系统 |
用例名称:教师信息管理 |
---|
描述:管理员对教师信息进行管理操作 |
标识符:UC12 |
角色:系统管理员 |
前置条件:管理员成功登录系统,并点击教师信息管理 |
主事件流: 1.管理员点击教师信息管理 2.管理员可以批量导入教师信息 3.管理员可以删除教师信息 4.管理员可以修改教师信息 5.管理员可以进行条件查询或者模糊查询 6.管理员点击保存完成对教师信息管理的操作 7.用例结束 |
其他事件流: 1.点击保存,教师信息为空或者不符合要求,提示“学生信息不符合要求” |
后置事件流: 1.对于新增的教师,教师可以通过账号密码登录系统 |
2 系统设计
2.1 实体关系建模
&实体关系模型直接从现实世界中抽象出实体类型和实体间联系,建立实体关系模型是系统设计的第一步。就本系统而言,「学生」(Student)、「教师」(Teacher)、「管理员」(Admin)、「问题」(Question)、「提交」(Submission)、「通知」(Notification)、「笔记」(Note)、「附件」(Enclosure)、「成绩」(Grade)以及「留言」(Message)都是经常出现的名词,它们也都是从需求描述中识别出来的「实体」。通过建立实体之间相应的关系,从而得到实体关系模型,以完成设计需求。
程序题智能批改系统是一个小型的在线编程评判系统,系统共11个实体类型,下图显示了它们之间的所有模型和关系。
2.2 数据库设计
本系统数据库使用MySQL5.0,一种关系数据库管理系统,数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,增加了速度并提高了灵活性。MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。本系统数据库中数据存放于10张表中,所有“id”键字段都是Java类型的Integer。数据库结构图如下图。
2.3 界面设计
2.3.1 页面跳转关系
系统首页展示的是教师发布的题目、推荐文章以及学生发布的笔记
学生登录进入学生后台,可查询自己的成绩、在线答题以及管理笔记等
教师登录进入后台可管理题库、发布通知、发布文章以及生成成绩分析报告
管理员登录进入后台可以管理学生以及老师的信息
页面跳转图分别如下图:
2.3.1 页面设计
本人对下述需求进行了代码实现,使用ssm框架。涉及到Java的动态编译方面的知识,另外,评分通过获取后台数据库中的测试用例,动态执用例进行评分。
需要源码的可以扫码关注公众号『嗜码』,回复「程序题批改系统」即可获取源码,源码使用的 spring mvc 框架。