Разработка модуля для проверки задач по программированию в электронной обучающей системе "Moodle"

"Moodle" - модульная объектно-ориентированная динамическая среда обучения, ее использование для разработки систем дистанционного обучения. Общее представление о дистанционном практикуме по программированию. Разработка структуры данных и алгоритмов.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 09.11.2016
Размер файла 1,2 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

$username = $USER->lastname;

$username. = ' ';

$username. = $USER->firstname;

$date_today = date ("d. m. y");

$date_today. = ' ';

$date_today. = date ("H: i: s");

$randomnum = rand (1, 1000);

$url = "http://atpp. vstu.edu.ru/cgi-bin/arh_problems. pl? re_login=$randomnum&id_prb=$progid";

$curl = curl_init ("$url");

curl_setopt ($curl, CURLOPT_FOLLOWLOCATION, 1);

curl_setopt ($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);

curl_setopt ($curl, CURLOPT_USERPWD, "epo2012_vis: 11111"); // авторизируемся в системе

$curlT = curl_init ("http://atpp. vstu.edu.ru/cgi-bin/arh_problems. pl? id_prb=$progid");

curl_setopt ($curlT, CURLOPT_RETURNTRANSFER,true);

$problem = curl_exec ($curlT);

curl_close ($curlT);

preg_match ('|<hr class="hr_up_prb"> (. *) <hr class="hr_down_prb">|isU', $problem, $problemtext);

$utftext = mb_convert_encoding ($problemtext [0], "UTF-8", "windows-1251");

echo "<h2 align='center'>";

echo format_string ($autochecker->name);

echo "</h2>";

// если заполнено поле текст задачи, то выводим его, если нет, то берём текст задачи со страницы задачи на сайте кафедры

if ($autochecker->intro) {

echo $OUTPUT->box (format_module_intro ('autochecker', $autochecker, $cm->id), 'generalbox mod_introbox', 'autocheckerintro');

} else {

echo $utftext;

}

$compid = $_POST ['id_compiler'];

$progtext = $_POST ['source'];

$progtext = str_replace (";", "%3B", "$progtext");

$progtext = str_replace ("&", "%26", "$progtext");

$progtext = str_replace ("+", "%2B", "$progtext");

$progtext = mb_convert_encoding ($progtext, "windows-1251", "UTF-8");

$record = new stdClass ();

$grade = new stdClass ();

if (isset ($_POST ['nazvanie_knopki']))

{

include '. /check. php';

// добавляем данные в таблицу статистики

$record->postid = $courseid [$id] - >instance;

$record->userid = $USER->id;

$record->username = $username;

$record->timeposted = $date_today;

$record->result = $theanswer;

$lastinsertid = $DB->insert_record ('autocheckerstats', $record, false);

if (mark1) // если ответ Верно или Частично верно и удалось получить баллы, то выставляем эти баллы

{

$grade->rawgrade = $mark1; // оценка - балл полученный с сайта кафедры

$grade->timemodified = time ();

$grade->userid = $USER->id;

$grade->usermodified = $USER->id;

grade_update ('mod/autocheker', $COURSE->id, 'mod', 'autochecker', $courseid [$id] - >instance, 0, $grade, NULL); // запрос выставляющий оценку

}

}

// $DB->set_debug (true);

$rectest = $DB->get_record_sql ('SELECT * FROM {autocheckerstats} ORDER BY id DESC LIMIT 1');

$rec = $DB->get_records_sql ('SELECT * FROM {autocheckerstats} ORDER BY id DESC LIMIT 10');

ПРИЛОЖЕНИЕ 2

(обязательное)

Исходный код файла check. php

$randomnum = rand (1, 1000);

$url = "http://atpp. vstu.edu.ru/cgi-bin/submit. pl? re_login=$randomnum&id_prb=$progid";

$curl = curl_init ("$url");

curl_setopt ($curl, CURLOPT_FOLLOWLOCATION, 1);

curl_setopt ($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);

curl_setopt ($curl, CURLOPT_USERPWD, "epo2012_vis: 11111"); // авторизируемся в системе

curl_setopt ($curl, CURLOPT_URL, "http://atpp. vstu.edu.ru/cgi-bin/submit. pl? id_prb=$progid"); // идём на страницу отправки решения задачи

curl_setopt ($curl, CURLOPT_RETURNTRANSFER,true);

curl_setopt ($curl, CURLOPT_POST, true);

curl_setopt ($curl, CURLOPT_POSTFIELDS, "id_prb=$progid&source=$progtext&id_compiler=$compid&mode=send"); // отправляем запрос в систему

$out = curl_exec ($curl); // получаем ответ

$reg00 = 'Ждёт';

$regconv00 = mb_convert_encoding ($reg00, "windows-1251", "UTF-8");

$reg0 = 'Выполняется';

$regconv0 = mb_convert_encoding ($reg0, "windows-1251", "UTF-8");

$theanswer = $regconv0;

$reg = 'Ошибка компиляции';

$regconv = mb_convert_encoding ($reg, "windows-1251", "UTF-8");

$reg1 = 'Верно';

$regconv1 = mb_convert_encoding ($reg1, "windows-1251", "UTF-8");

$reg2 = 'Неправильный ответ';

$regconv2 = mb_convert_encoding ($reg2, "windows-1251", "UTF-8");

$reg3 = 'Ошибка представления';

$regconv3 = mb_convert_encoding ($reg3, "windows-1251", "UTF-8");

$reg4 = 'Ошибка выполнения';

$regconv4 = mb_convert_encoding ($reg4, "windows-1251", "UTF-8");

$reg5 = 'Предел времени';

$regconv5 = mb_convert_encoding ($reg5, "windows-1251", "UTF-8");

$reg6 = 'Предел памяти';

$regconv6 = mb_convert_encoding ($reg6, "windows-1251", "UTF-8");

$reg7 = 'Нарушение безопасности';

$regconv7 = mb_convert_encoding ($reg7, "windows-1251", "UTF-8");

$reg8 = 'Обнаружено бездействие';

$regconv8 = mb_convert_encoding ($reg8, "windows-1251", "UTF-8");

$reg9 = 'Неуникально';

$regconv9 = mb_convert_encoding ($reg9, "windows-1251", "UTF-8");

$reg10 = 'Частично верно';

$regconv10 = mb_convert_encoding ($reg10, "windows-1251", "UTF-8");

curl_setopt ($curl, CURLOPT_URL, 'http://atpp. vstu.edu.ru/cgi-bin/status. pl'); // идём на страницу где выводятся результаты проверки всех задач

$out = curl_exec ($curl);

preg_match ('|<tr><td align="left" nowrap>&nbsp; (. *) &nbsp|isU', $out, $content1); // получаем html код столбца, где содержится id решения из первой строки статистики

$htmlcontent = htmlspecialchars ($content1 [0]); // превращаем html код в строку

$idresult = preg_replace ("/ [^0-9] /", '', $htmlcontent); // оставляем только цифры (таким образом получили из html кода только id решения)

while ($theanswer == $regconv0 or $theanswer == $regconv00) {

sleep (3); // ставим задержку 3 секунды, чтобы код успел выполниться

curl_setopt ($curl, CURLOPT_URL, "http://atpp. vstu.edu.ru/cgi-bin/status. pl? mode=report&id_stat=$idresult"); // идём на страницу где содержится статистика по конкретному отправленному решению

$out = curl_exec ($curl);

preg_match ('|<table class="tbbd2" WIDTH=100% border=1 align=center cellspacing=1> (. *) </table>|isU', $out, $content2); // получаем из всего html кода только таблицу со статистикой решения, чтобы последующая обработка шла быстрее

preg_match ("/$regconv0|$regconv|$regconv1|$regconv2|$regconv3|$regconv4|$regconv5|$regconv6|$regconv7|$regconv8|$regconv9|$regconv10/", $content2 [0], $resarr); // смотрим какой результат решения задачи

$theanswer = $resarr [0];

}

curl_close ($curl);

$theanswer = mb_convert_encoding ($resarr [0], "UTF-8", "windows-1251"); // записываем результат решения в переменную и меняем кодировку

echo "Результат проверки: ";

echo "<b>";

echo $theanswer; // выводим результат проверки задачи

echo "</b>";

if ($theanswer! = $reg1) {

echo "<br><br>";

preg_match ('|<table align="center" border="0" width="100%" cellpadding="0" cellspacing="0"> (. *) <table class="other">|isU', $out, $content3); // получаем сообщение с информацией об ошибке

$err = mb_convert_encoding ($content3 [0], "UTF-8", "windows-1251"); // записываем результат решения в переменную и меняем кодировку

echo $err;

echo "<br>";

}

if ($theanswer == $reg10 or $theanswer == $reg1) {

$test = mb_convert_encoding ($content2 [0], "UTF-8", "windows-1251");

$htmlcontent123 = htmlspecialchars ($test);

$mark = explode ("td", $htmlcontent123); // разбиваем строку, чтобы найти там подстроку в которой содержится балл за задачу

$mark1 = preg_replace ("/ [^0-9] /", '', $mark [13]); // оставляем только цифры (таким образом получаем баллы). }

Размещено на Allbest.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.