目前我国很多高职院校计算机课程缺乏有效的实 践教学。根据建构主义学习理论[I],教学过程实质上就 是教师帮助学生完成知识建构的过程,而不是教师灌 输理论知识的过程,学生才是学习的主体。当前国内也 有很多学者对程序设计课程提出了很多有意义的改革 思想和教学方法任务驱动教学法、基于问题的学 习法、案例教学法等)。但很少有学者提出相关实训支 撑平台研究开发。研究开发一套支撑教学过程的平台 工具[4-s],会使教学实训更有效率。 针对计算机程序设计课程教学中因教师人力制约而 无法实施个性化分层教学、训练题目单调、人工评判学生 编制的程序等不足,研究开发一个自动化的程序设计训 练系统,作为学生练习和实训的平台,提高实训成效。 1 系统总体设计 1.1系统总体架构 系统基于B/S架构,功能结构图如图1所示。 ![]() 1.2系统训练流程 教师根据课程授课计划设计好各类知识点的实训 项目(题目)和用于测试的数据,存人数据库。并设定好 系统,然后按以下流程运行。 ①学生登录网站,根据教学计划和自身能力选择 相应的任务/题目。按题目要求,根据自身爱好选择合 适语言(c/c++/Pascal/Java),按一定的小组协作模 式嘲讨论协作编制程序代码,通过网页向训练系统服 务器提交源程序。 ②训练系统对源程序进行试编译,如果出错则反 馈出错信息,并记录学生的尝试次数,让学生重新检查 语法,排除错误,并重复尝试。系统对编译通过的程序 代码生成可执行程序。 ③训练系统在安全空间里对可执行程序进行试运 行,对可执行程序进行安全性检查。对于恶意攻击,中 止用户行为并反馈信息。 ④训练系统根据题目要求,调用相应的测试用例对 用户程序进行黑盒测试[7],并判断用户程序是否产生预 期结果。如果用户程序通过所有数据测试,则反馈“正 确”结果,并记录成绩;否则,输出相应的错误,如运行错 误、超时、结果错等给学生,以引导学生进行相应排错。 ⑤学生完成当前题目后,训练系统根据设定的教 学计划或学生自身能力,引导学生解决下一个任务或 题目。 ⑥学生通过反复训练,达到强化程序编制实际动 手能力。教师可以从繁重的辅导中得到解放,把精力放 在监控学生的学习情况、实时更新试题库、调整教学策 略上,从而为不同学生提供不同的教学进度和教学内 容,实现分层教学。 2 系统关键技术 2.1系统开发环境 为使系统具有更高的性能,本系统在Linux环境 下开发。前台采用PHP脚本编写,后台核心程序采用 Unix C语言开发,数据库采用MySQL轻量型数据 库,网页服务器采用Apache。c/c++编译器采用 GCC,Pascal编译器采用FPC,Java编译器采用JDK。 2.2系统关键技术 本系统使用到的关键技术如下: 2.2.1进程及进程通信 进程是程序的一次执行过程,有独立的地址空间, 是资源分配的最小单位。Linux下的进程有6种状态: 新建(进程正在被创建)、就绪(进程正在等待被调度)、 运行(进程正占用CPU)、睡眠或阻塞(进程正在等待 一个事件)、僵死(进程已经结束,正在等待释放资源)。 进程各状态之间的转换如图Z所示。 ![]() 2.2.2 信号 信号是Linux操作系统中用来通知进程发生了某种事件的一种手段,提供了一种处理异步事件的方法。 当进程接收到一个信号,它可以忽略信号、捕获信号或 执行信号的默认动作。本系统使用到的信号及其含义 作用如表1所示。 ![]() Z.Z.3 CGl CGl(Common Gateway Interface),是一段可执 行程序,运行在网页服务器上,提供客户端Html页面 接口。CGI程序速度比PHP、ASP等脚本解释语言快 很多,但开发难度大。本系统采用了Linux下免费的 CGIC[8】(开发CGI的C函数库)开发工具包。本系统 核心模块采用Linux平台下的C语言编写的一个CGI |