Научная статья на тему 'Описание программирования и установки автоматизированной системы контроля знаний при дистанционном обучении'

Описание программирования и установки автоматизированной системы контроля знаний при дистанционном обучении Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
230
65
i Надоели баннеры? Вы всегда можете отключить рекламу.
i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Описание программирования и установки автоматизированной системы контроля знаний при дистанционном обучении»

Е.Н. Горбачевская, к.п.н., доцент, профессор кафедры ИиСУ

Е.А. Козлов, студент группы ИСЗ-601

Волжский университет имени В.Н. Татищева, г. Тольятти

ОПИСАНИЕ ПРОГРАММИРОВАНИЯ И УСТАНОВКИ

АВТОМАТИЗИРОВАННОЙ СИСТЕМЫ КОНТРОЛЯ ЗНАНИЙ ПРИ

ДИСТАНЦИОННОМ ОБУЧЕНИИ

Определив язык разработки, интерфейс и основные функции модулей комплекса, приступаем к реализации его в программном коде. В данном разделе мы рассмотрим модули и основные и их основные рабочие файлы.

Для начала создадим базу данных. В phpMyAdmin создадим основные таблицы: u_acc, testing, test_results, thims, semester, student .

В таблице u_acc создадим следующие поля:

- u_id поле уникального числового идентификатора пользователя;

- u_login поле уникального имени пользователя;

- u_pswd поле пароля пользователя;

- u_rights поле прав пользователя;

- u_active поле активности пользователя;

- u_name фамилия и имя пользователя;

- u_mail адрес электронной почты;

- u_icq номер интернет-пейджера пользователя.

Поля u_id и u_login являются ключевыми, u_id является первичным ключем с инкрементным значением, u_login является уникальным. Все данные мероприятия позволят избежать повторения уникального номера пользователя и логина.

Поле Тип Сравнение Атрибуты Ноль По умолчанию Дополнительно Действие

□ u id int(10) Да NULL autojncrement jf У H ш Щ Т

□ u loain char(20) cp1251_general_cs Да У x H ш S Т

□ u_pswd char(20) cp1251_general_cs Да NULL S X щ в S3 ш

□ u_rights varchar(1) cp1251_general_ci Да NULL J? x H Щ S э

□ u_active varchar(1) cp1251_general_ci Да NULL J X H в s э

□ u_name text cp1251 _general_ci Да s X m Щ

□ u_mail text cp1251 _general_ci Да J? X и ш ® ия

□ ujcq int(9) UNSIGNED ZEROFILL Да NULL X и т Ш I

Рис.1 Поля таблицы u acc

В таблице testing создадим следующие поля:

- test_nam уникальный числовой номер теста;

test_spec числовой идентификатор специальности теста;

test_ques вопрос;

test_ans правильный ответ;

test_var1-5 поля с вариантами ответов.

Поле Тип Сравнение Атрибуты Ноль По умолчанию Дополнительно Действие

□ testjiam int(5) Да NULL autojncrement J? X EH Щ IS т

□ test_spec int(5) Да NULL f x m Щ ей т

□ test_ques longtext cp1251 _general_ci Да NULL J? X Ш Щ IS ЕЯ

□ test_ans int(1) Да NULL S X II ш Ей ®

□ test_var1 mediumtext cp1251 _general_ci Да NULL J У ESI Щ Ей э

□ test_var2 mediumtext cp1251_general_ci Да NULL j- У m ш Ей ЕЭ

□ test_var3 mediumtext cp1251_general_ci Да NULL j? у m т Ей ЕЯ

□ test_var4 mediumtext cp1251 _general_ci Да NULL J У и ш Ей ЕЭ

□ test_vai5 mediumtext cp1251_general_ci Да NULL S У щ ш Ей ЕЭ

Рис.2 Поля таблицы testing

В таблице test_result создаем следующие поля:

- u_id уникальный номер пользователя прошедшего тест;

- date дата прохождения;

- test_nam номер теста;

- test_ans ответ данный пользователем;

- test_nominal правильный ответ;

- spec_nam номер предмета по которому проводится тестирование;

Поле Тип Сравнение Атрибуты Ноль По умолчанию Дополнительно Действие

□ u_id і nt (5) UNSIGNED Да NULL /хні m

□ date date Да NULL X. Ш Ш Ш T]

□ testjiam int(5) UNSIGNED Да NULL * x 11 n m

□ test_ans і nt (5) UNSIGNED Да NULL j? X. ш шш 4

□ test_nominal і nt (5) UNSIGNED Да NULL /Х111І

□ spec_nam int(11) UNSIGNED Да NULL j? X IB Ш Ей :t

Рис. 3 Поля таблицы test result

В таблице thims создаем следующие поля:

- thim_id числовой номер темы самостоятельной работы;

- thim_name название темы самостоятельной работы ;

- thim_notes описание темы самостоятельной работы;

- thim_spec номер предмета для самостоятельной работы ;

free_thim поле для определения свободной, не занятой темы;

Поле Тип Сравнение Атрибуты Ноль По умолчанию Дополнительно Действие

□ thimjd int(11) Да NULL autojncrement / X HI Щ IS t

□ thim_name mediumtext cp1251_general_ci Да NULL 1 1 S 0

□ thimjiotes longtext cp1251_general_ci Да S X И Ш Ш! S

□ thim_spec int(11) Да NULL / X 1 1 S T

□ freejhim char(1) cp1251 _general_ci Да S X Ш Ш ШІ т

Рис.4 Поля таблицы thims

Так же нам потребуется создать таблицу где можно было бы распределить различные дисциплины по семестрам. В таблице semester создадим поля:

semester_id уникальный числовой номер семестра; spec_nam поле где указываем дисциплины; ргер^ номер преподавателя данной дисциплины;

Поле Тип Сравнение Атрибуты Ноль По умолчанию Дополнительно Действие

□ semestr id int(11) Да /Х111 Т

□ spec_nam int(11) Да / X 1 ! і Т

□ prepjd int(11) Да / X і і IS if

Рис. 5 Поля таблицы semester

Создадим таблицу prepodavatel. Создадим следующие поля:

- ргер^ уникальный номер преподавателя;

- ргер_йо ФИО преподавателя;

- ргер_таі1 адрес электронной почты преподавателя;

- ргер_ісд номер интернет-пейджера преподавтеля;

Поле Тип Сравнение Атрибуты Ноль По умолчанию Дополнительно Действие

□ prep id int(11) Да j? У. Ш Ш Ш т

□ prep_fio mediumtext cp1251_general_ci Да /XI Ш Ш S

□ prep_mail mediumtext cp1251 _general_ci Да j? X ш щ ® s

□ prepjcq int(11) Да /XI Ш IS т

Рис. 6 Поля таблицы prepodavatel

Для учета деятельности студента создадим еще одну таблицу. Таблицу будет отображать успеваемость студента в течении его учебной деятельности.

Поле Тип Сравнение Атрибуты Ноль По умолчанию Дополнительно

□ u id int(10) Да

О kurs_nam int(11) Да

□ semestrjd int(10) Да

□ spec_nam int(10) Да

□ test_result int(10) Да

□ thimjd int(11) Да

□ thim_result int(11) Да

□ total_result int(11) Да

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

Рис.7 Поля таблицы student

Действие

/XI! щ г т

/ X Щ Ш !у| т

/ X ш Ш Ш т

/ X ш Ш Ш т

/XI Ш Ш -у

/XI Ш IS т

/ X ш И ЕВ Ш

/XI Ш Ш1 т

После создания и проверки работоспособности таблиц, приступим с созданию страниц. Начнем с главной. Создадим главную страницу приложения - index.php. Для создания используем главным образом табличную верстку, верстки абзацами будем по возможности избегать. Верстка абзацами достаточна непредсказуемо ведет себя в различных браузерах. На странице справа - сверху размещаем блок ссылок - главное меню сайта. Справа в середине расположим часть блока авторизации пользователя отвечающую за вход и выход пользователя.

В коде указываем необходимые файлы для соединения с базой данных. reqшre_once('Connectюns/ido.php')

Запускаем сессию для хранения переменной о входе пользователя в систему (если она еще не создана): if (!isset($_SESSЮN)) { session_start(); }

Аутентификация производится с проверкой переменной $_SESSЮN['MM_Usermme'], если она существует, значит пользователь вошел в систему. При выходе переменная очищается и выводится форма для ввода логина и пароля с завершением скрипта, вызов функции ехй(), что позволяет не отображать административный интерфейс, пока пользователь не введет правильные данные, т.е. логин и пароль.

Факультет дистанционного образования

Главная

Специальности Как учиться? Диплом Абитуриенту Вопросы и ответы Контакты Регистрация

Представьте, что для получения высшего образования Вам больше не нужно каждый день просиживать часами в стенах института, слушая навевающее скуку лекции. Благодаря новейшим технологиям дистанционное образование (Интернет-образование, обучение online) стало реальностью. Онлайн-обучение потребует от Вас только компьютер с доступом в Интернет. Выбирая дистанционное высшее образование, Вы получаете возможность в удобное для Вас время изучить все необходимые материалы в электронной форме. Дистанционное образование-это обучение online в индивидуальном режиме и возможность совмещения работы и учебы.

Интернет-образование тесно связано с развитием Интернет-технологий; Интернет-обучение предоставляет различные дополнительные возможности: участие в опНпе-конференциях, получение консультаций в режиме реального времени и многое другое. Сегодня Интернет-образование-это удобный, эффективный и доступный способ повышения квалификации, возможность получить высшее образование дистанционно, не выходя из дома. Кроме того, обучение online делает доступным дистанционное образование в любом ВУЗе и институте России и мира независимо от Вашего места жительства.

По качеству дистанционное обучение в ВУЗе ни в чем не уступает очной форме обучения: Интернет-обучение также предполагает выполнение практических учебных и творческих заданий согласно календарному учебному плану, контроль и консультирование со стороны преподавателя. Наряду с очным, дистанционное обучение в институте оканчивается экзаменационной работой, написать которую можно в любом из региональных учебных центров МИМ ЛИНК. В настоящее время дистанционное высшее образование -это выбор все большего количества людей.________________________________________________________________________________

Рис.8 Главная страница проекта Создаем запрос вызова поля u_rights из таблицы u_acc и заносим ее значение в переменную:

if (!isset($_SESSION)) { session_start();

}

$MM_authorizedUsers = "a,p,s"; //группы пользователей имеющих доступ на страницу

$MM_donotCheckaccess = "false";

Затем смотрим значение переменной и в зависимости от ее значения выводим создаем абзац в котором выводим набот ссылок в зависимости от группы:

<?php if (((isset($_SESSION['MM_Username']))&&(isAuthorized("", "a", $_SESSION['MM_Username'],$_SESSION['MM_UserGroup'])))) { ?>

<form name="form2" method="post" action-’">

<div align-’left">

<p><a href="users.php">Пользователи</a> | <a href="#">Тестирование</a> | <a href-Т^МатериальК^ | <a href="#">Статьи</a> | <a href="#">ССЫлка</a></p>

<p>&nbsp;</p>

</div>

</form>

<?php }?>

В данном куске кода приводится процедура отображения панели администратора. На ней приводится ряд ссылок которые должны быть доступны только администратору. При данном способе панель администратора доступна только зарегистрированному пользователю имеющим права доступа администратора. Аналогичным образом на странице размещаем панель для преподавательского состав и студентов.

Если пользователь не принадлежит к конкретной группе, и не имеет в поле u_rights какого либо символа, в доступе ему будет отказано, о чем будет выведено соответствующие сообщение:

<?php if (((isset($_SESSION['MM_Username']))&&(isAuthorized("", "", $_SESSION['MM_Username'],$_SESSION['MM_UserGroup'])))) { ?>

<form name="form2" method="post" action="">

<p align-’left"> <?php echo ($_SESSION['MM_Username']) ?>, ваша учетная запись заблокирована, обратитесь к администратору портала! </form><?php } ?>

Создадим форму и добавим на нее ссылки для перехода на страницу авторизации, и завершения сеанса пользователя.

<?php if (((isset($_SESSION['MM_Username']))&&(isAuthorized("", "a,p,s", $_SESSION['MM_Username'],$_SESSION['MM_UserGroup'])))) {

?></p>

<form name="form1" method="post" action="">

<span class="link"><a href="<?php echo $logoutAction ?>">Выйти</a>

</p>

</span>

<?php } else {?>

<а ЬгеГ="1о§іп.рЬр" с1ав8="1тк">Вход</а>

<?рИр } ?>

</іотт>

В обычном состоянии видна ссылка входа. Но после процедуры входа становиться видимой доступной ссылка для процедуры выхода для закрытия сессии пользователя. Получившуюся страницу примем как шаблон.

По имющемуся Создадим страницу авторизации - 1о§іп.рИр. На данной странице размещаем два текстовых поля и кнопку подтверждения.

В код страницы вставляем строку соединения для соединения с базой данных.

гедшге^псеССоппесйошМо.рЬр')

Запускаем сессию для хранения переменной о входе пользователя в систему (если она еще не создана):

іГ(^е^ЗБЗЗЮК)) {

8е88іоп_8іагі(); }

Рис.9 Страница авторизации

Создаем несколько переменных:

if (isset(S_POST[logmfield'])) { // если переменная не создана то создаем.

$loginUsemame=$_POST['loginfield'];//B переменную передаем стороку полученную из поля «логин»

$password=$_POST['passfield']; //в переменную передаем строку из поля «пароль»

$MM_fldUserAuthorization = "u_rights";//B эту переменную передаем символ права доступа

$MM_redirectLoginSuccess = "index.php";// адрес страницы куда попадем в случае успешного входа

$MM_redirectLoginFailed = "login.php";//адрес страницы куда мы попадем в случае неудачного входа

При вводе пароля и логина и нажатии на кнопку подтверждения в выше указанные переменные поступают значения.

$LoginRS___query=sprintf("SELECT u_login, u_pswd, u_rights FROM

u_acc WHERE u_login='%s' AND u_pswd='%s'", get_magic_quotes_gpc() ? $loginUsername : addslashes($loginUsername), get_magic_quotes_gpc() ?

$password : addslashes($password));

Производим запрос $LoginRS__query в значение которого отправляем результат поиска по введенному логину и паролю. В случае успешного поиска имя пользователя и значение группы пользователя сохраняется в переменной сессии:

$_SESSION['MM_Username'] = $loginUsername; $_SESSION['MM_UserGroup'] = $loginStrGroup;

После чего выполняется команда: header("Location: " . $MM_redirectLoginSuccess );

//и выполняется переход на следующую страницу указанную в $MM_redirectLoginSuccess. //В противном случае: else {

header("Location: ". $MM_redirectLoginFailed );

}//Выполняем переход на страницу имя которой указано в вышеуказанной переменной.

Займемся административными страницами модуля «Пользователи». Рассмотрим главную страницу модуля - users. php.

Что бы пресечь возможность попадания на административные страницы незарегистрированного пользователя путем прямого ввода адреса в адресную строку браузера, свяжем страницу с системой контроля доступа. И

проверим пользователя на наличие прав администратора. Для отображения списка пользователей делаем запрос:

<?php $quary = mysql_query($query_Recordset1);

$my_row = mysql_fetch_array($quary);

Запускаем цикл отображения результатов запроса в форме таблицы <table width-,664" border="1"

<tr><td width="22" height="40"><label>

<?php printf("<input type='checkbox' name='checkbox' value=%s>", $my_row['u_id']); ?></label></td>

<td width="205"><div align="center"><?php printf("%s", $my_row['u_name']); ?> </div><div align="center"></div></td>

<td width="121"><div align="center"><?php printf("%s", $my_row['u_login']) ;?> <М^><М>

<td width="50"><?php printf("%s", $my_row['u_rights']);?></td> width="170"><?php printf("%s", $my_row['u_mail']);?></td>

<td width="56"><div align="center"><?php printf("%s", my_row['u_id']);?></div></td>

<Аг>

</table>

Результат вывода можно видеть на рисунке:

<иГ ” I ІЕМ Googie”

ная страница Лента новостей Windows Media J Windows ^ Бесплатная почта Н... Настройка ссылок

Факультет дистанционного образования

Здравствуйте, вы вошли как: admin

Пользователи | Тестирование | Материалы | Темы | Преподаватели | Студенты|

• • Параметр

| Удалить 11 Изменить | [ Новый |

Гпавная

Специальности Как учиться? Диплом Абитуриенту Вопросы и ответы Контакты Регистрация

Имя Имя пользователя Г руппа E-mail ID

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

□ Админ Великий и Ужасный admin а spooke@mail.ru 1

□ Иванова антонина Пафнутьевна ivanova S ivanova@mail.ru 34

□ Горбачев Михаил Сергеевич gorbachev S gorbachev@list.ru 3

Рис.10 Фрагмент страницы просмотра информации о пользователях В данном коде встречается повторяющаяся переменная «checkbox». Данной переменной в каждой ячейке присваивается числовое значение поля «u_id», то есть выбирая ту или иную строку в таблице мы передаем в переменную «checkbox» значение поля «u_id», и производим операции в таблице по этому значению. Так же введем локальную переменную куда будем передавать значение поля $flag1 = ($_POST['checkbox']).

Кнопки на форме передают в переменную $_POST["action"] свое значение. Чуть ниже организовываем цикл-ловушку которая отслеживает какая кнопка была нажата:

while($my_row=mysql_fetch_array($quary)); switch ($_POST["action"])

{ case "Удалить":{/*сюда будем вставлять процедуры обработки*/}

break;

case "Изменить": {/*сюда будем вставлять процедуры

обработки*/}

break;

}

else echo "Учетная запись для редактирования не выбрана"; default: {/*здесь действие по умолчанию, оставляем пустой*/} break;

И в данный код вставляем процедуры которые будем проводить при нажатии. Процедура удаления записи:

if ((isset($flag 1)) && ($flag1 != "")) {// проверяем переменную, вдруг она пустая

$deleteSQL = sprintf("DELETE FROM u_acc WHERE u_id=$flag1", GetSQLValueString($flag1, "тГ));//превращаем переменную в целочисленную,

mysql_select_db($database_ido, $ido);

$Result1 = mysql_query($deleteSQL, $ido) or die(mysql_error());//действие при ошибке

$deleteGoTo = "users.php";//пересылка на указанный адрес в случае

успеха

if (isset($_SERVER['QUERY_STRING'])) {

$deleteGoTo .= (strpos($deleteGoTo, '?')) ? "&" : "?";

$deleteGoTo .= $_SERVER['QUERY_STRING']; }//в таблицу вносим изменения

echo ("<meta http-equiv='refresh' content='0; url=users.php,>")//после чего обновляем страницу

Редактирование записи предполагает передачу параметра на отдельную страницу - edituser.php, в данном случае передачу можно сделать без особых предосторожностей в адресной строке методом $_GET['u_id']:

if ($flag1 != 0) {echo ("<meta http-equiv-refresh' content-0;

url=edituser.php?u_id=$flag1’>");}

Для того что бы создать новую запись выполняем прямой переход по ссылке на страницу добавления без параметров - adduser.php:

echo ("<meta http-equiv='refresh' content='0; url=adduser.php'>"); Страница добавления записи представляет собой достаточно простую страницу набором полей ввода и кнопкой запроса вставки данных из полей:

Рис.11 Фрагмент страницы добавления нового пользователя

Организовываем цикл ловушку по предыдущему образцу и для действия «Вперед» пишем процедуру

SinsertSQL = sprintf("INSERT INTO u_acc (u_login, u_pswd, u_rights, u_name, u_mail, u_icq) VALUES (%s, %s, %s, %s, %s, %s)",//в таблицу пользователей вставляем по порядку данные

GetSQLValueString(S_POST['loginfield'], "text"),//каждое поле

превращаем

GetSQLValueString(S_POST['passfield'], "text"),// в текст

GetSQLValueString($_POST['select'], "text"), GetSQLValueString($_POST['namefield'], "text"), GetSQLValueString($_POST['mailfield'], "text"), GetSQLValueString($_POST['icqfield'], "int"));//или

целочисленное выражение mysql_select_db($database_ido, $ido);//в указанную базу $Result1 = mysql_query($insertSQL, $ido) or die(mysql_error());// обработчик ошибки

Ввиду того что бы имеем дело с PHP и MySQL все вводимую информацию обязательно нужно проверять на соответствие установленному шаблону:

- пароли в своих полях должны быть одинаковы;

- длина пароля не менее 5 символов;

- в пароле должны применяться символы латинского алфавита и цифры;

- в поле «электронная почта» строка должна выглядеть как: (набор строчных букв латинского алфавита и цифр),символ «@»,(набор строчных букв латинского алфавита и цифр) символ «.» доменное поле;

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "add_user_form"))

{ if (($_POST['pass2field']) != ($_POST['passfield'])&& ((strlen('passfield') <5 )))

{ $error =2;}//в случае несоответствия паролей и их длины задаем значение 2

if (!eregi('^[A-Za-z0-9A])", ($_POST['passfield'])) and ($_POST['passfield'])!="")

{$error = 3;}// проверка паролей на предмет не стандартных символов if(!eregi('^([0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([0-9a-z])*\.[a-wyz][a-z](fo|g|l|m|mes|o|op|pa|ro|seum|t|u|v|z) ?) $",'mailfield')) {$error=6;}

В случае нарушения вышеуказанных условий вставка не происходит и выводится сообщение об ошибке.

На странице редактирования расположено несколько динамических полей выводящих результат запроса о записи с номером переданным странице в URL. При нажатии на кнопку, срабатывает цикл - ловушка, и в случае успешного прохождения группы фильтров, где происходит анализ введенных значений, следует запрос обновления записи:

if ((isset($_POST["MM_update"])) && ($_POST[MMM_updateM] == "add_user_form")) {$updateSQL = sprintf("UPDATE u_acc SET u_pswd=%s, u_rights=%s, u_name=%s, u_mail=%s, u_icq=%s WHERE u_id=%s AND u_login=%s",

GetSQLValueString($_POST['passfield'], "text"),// превращаем поле в

текст

GetSQLValueString($_POST['select'], "text"), GetSQLValueString($_POST['namefield'], "text"), GetSQLValueString($_POST['mailfield'], "text"),

GetSQLValueString($_POST['icqfield'], "int"), GetSQLValueString($_POST['idfield'], "int"), GetSQLValueString($_POST['loginfield'], "text")); mysql_select_db($database_ido, $ido);

$Result1 = mysql_query($updateSQL, $ido) or die(mysql_error());//обработчик ошибок

$updateGoTo = "users.php"; //в случае успешной вставки переход на страницу if (isset($_SERVER['QUERY_STRING'])) {

$updateGoTo .= (strpos($updateGoTo, '?')) ? "&" : "?";

$updateGoTo .= $_SERVER['QUERY_STRING']; }

Рис.12 Фрагмент страницы редактирования пользователей

Страницы модулей «Тесты», «Темы», «Преподаватели», «Студенты» выполняются аналогичным образом и подробно рассматривать их не будем. Создадим страницу отображающую информацию о ходе сессии у студентов. Страница должна различать пользователей по группам и в зависимости от группы выводить результат. У студента будет выводится только информация касающаяся его учетной записи, у преподавателя и администратора возможности будут шире.

<?php if (((isset($_SESSION['MM_Username']))&&(isAuthorized("", "s", $_SESSION['MM_Username'],$_SESSION[,MM_UserGroup'])))) { //Здесь мы будем создавать отображение информации о сессии студента.?> <form name="admin_form" method="post" action="">

<p><!-- а на этой форме расположим панель вывода информации--><ф> </form><?php } ?>

В дальнейшем создадим аналогичный код для групп «преподаватель» и «администратор» и оставим место для кода. Создадим запрос для вывода информации по номеру пользователя и сохранению его в переменной: if (isset($_SESSION['MM_Username'])) {

$colname_user_number = (get_magic_quotes_gpc()) ?

$_SESSION['MM_Username'] : addslashes($_SESSION['MM_Username']); } mysql_select_db($database_ido, $ido);

$query_user_number = sprintf("SELECT u_id, u_login FROM u_acc WHERE u_login = '%s'", $colname_user_number);

Создадим таблицу в которой будут выводится данные наших запросов. Для выбора отображаемой информации создадим 2 меню с кнопкой выбора. Эти меню будут служить для выбора отображаемой информации. Создадим в первом меню пункты: «за последний курс», «за все обучение». Во втором: «не сданные», «сданные», «все». Создадим запрос для отображения информации по текущему пользователю, с динамическим значением курса, и показателями оценок и тем по дисциплинам. Результат этого запроса разместим в таблицу, причем если значения оценок и тем по дисциплине пустые, разместим ссылку на страницы с передачей в URL номера дисциплины. В последней колонке таблицы размещаем ссылку на адрес почты преподавателя, его мы узнаем по номеру дисциплины. Страницу тестирования рассмотрим несколько ниже. Панель преподавателя будем делать подобным образом. На панели преподавателя размещаем меню для отображения информации и дополнительно организуем функцию поиска по

Институт дистанционного обучения

Здравствуйте, вы вошли как: admin

Пользователи (Тестирование | Материалы |Темы | Преподаватели | Студенты|

Это отдадим студенту

Главная

Специальности Как учиться? Диплом Абитуриенту Вопросы и ответы Контакты Регистрация

За текущий курс ~ Не сданные vj| Поиск

Дисциплина Пройти тестирование Итоги тестирования Тема самостоятельной работы Оценка за самостоятельную работу Общая оценка Связаться с преподавателем

Верстка Пройти Выбрать связаться

JavaScript Пройти Выбрать связаться

РНР Пройти Выбрать связаться

Рис.13 Страница отображения данных студента логину пользователей из группы студентов.

Пользователи (Тестирование | Материалы | Темы | Преподаватели | Студенты|

Регистрация

контакты

Это панель преподавателя

[За все обучение Не сдавшие у | Поиск

Студент Номер пользователя Курс Дисциплина Оценка за тестирование Тема самостоятельной Итоговая оценка Связаться

Котянин Максим Владимирович 567 3 HTML link

Половцев Леонид Сергеевич 1145 1 HTML link

Морозов Евгений Владимирович 1169 1 HTML link

Сергеенко Виталий Витальевич 1206 1 Верстка link

рис.14 Фрагмент панели преподавателя

Займемся модулем тестирования студентов. В начале модуля, на странице ІеБІЇ^рИр после объявления параметров соединения с базой

данных и получения номера дисциплины по которому проходится тестирование, создадим запрос выбора вопроса текущего вопроса по заданной дисциплине.

$query_Recordset_testing = sprintf("SELECT * FROM testing WHERE test_nam = (SELECT MIN(test_nam) FROM testing WHERE test_nam NOT IN (SELECT test_nam FROM test_result(SELECT test_nam FROM test_result WHERE u_id = ‘%s’ AND test_spec=’%s’))), ‘u_id’, ‘spec_nam’ "); $Recordset_testing = mysql_query($query_Recordset_testing, $ido) or die(mysql_error());

$row_Recordset_testing = mysql_fetch_assoc($Recordset_testing); $totalRows_Recordset_testing = mysql_num_rows($Recordset_testing);

Рис.15 Фрагмент страницы тестирования

Данный запрос позволяет вывести вопрос с минимальным номером и не встречающийся в таблице с результатами ответов для того пользователя под чьей учетной записью происходит тестирование. После нажатия на кнопку «вперед», происходит добавление данных в таблицу test_result из полей страницы «testing.php».

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "testing_form")) {

$insertSQL = sprintf("INSERT INTO test_result (u_id, 'date', test_nam, test_ans, test_nominal, spec_nam) VALUES (%s, %s, %s, %s, %s, %s)", GetSQLValueString($_POST['HF_u_id'], "int"), GetSQLValueString($_POST['HF_date'], "date"), GetSQLValueString($_POST['HF_test_nam'], "int"), GetSQLValueString($_POST['RadioGroup1'], "int"), GetSQLValueString($_POST['HF_test_nominal'], "int"), GetSQLValueString($_POST['HF_spec_nam'], "int"));

mysql_select_db($database_ido, $ido);

$Result1 = mysql_query($insertSQL, $ido) or die(mysql_error());

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

После совершения запроса опять происходит выбор минимального номера вопроса данного пользователя, не встречающегося в таблице результатов.

Таким образом если студент по каким либо образом прервет тестирование, например оборвется связь, он сможет продолжить тестирование с последнего вопроса.

После ответа на последний вопрос следует перейти по ссылке «перейти на страницу подсчета результатов», на страницу подсчета результатов -make_result.php.

На странице произведем запрос по таблице u_acc о индивидуальном номере пользователя от имени которого открыта текущая сессия: if (isset($_SESSION['MM_Username'])) {

$colname_user_number = (get_magic_quotes_gpc()) ?

$_SESSION['MM_Username'] : addslashes($_SESSION['MM_Username']); } mysql_select_db($database_ido, $ido);

$query_user_number = sprintf("SELECT u_id FROM u_acc WHERE u_login = '%s'", $colname_user_number);

$user_number = mysql_query($query_user_number, $ido) or die(mysql_error());

$row_user_number = mysql_fetch_assoc($user_number); $totalRows_user_number = mysql_num_rows($user_number);

После чего производим подсчет результатов по тому пользователю который проходил тестирование:

if (isset($user_number)) && ($user_number!="")){

mysql_select_db($database_ido, $ido);

$query_marl_of_test = sprintf("SELECT COUNT(*) FROM test_result WHERE test_ans = test_nominal AND u_id =%s",$user_number);

$marl_of_test = mysql_query($query_marl_of_test, $ido) or die(mysql_error());

$row_marl_of_test = mysql_fetch_assoc($marl_of_test); $totalRows_marl_of_test = mysql_num_rows($marl_of_test);

}

Итак получено количество верных ответов и общее количество вопросов. На странице организуем вывод значений и разместим две кнопки, как это показано на рисунке (рис.***). Если студента устраивают результаты тестирования следует нажать на кнопку «Согласен с оценкой», и результат тестирования уйдет в журнал успеваемости. Кнопка «Пройти заново» соответственно позволяет пройти тестирование еще раз.

Институт дистанционного обучения

Здравствуйте, вы вошли как: admin

Пользователи Тестирование Материалы Статьи ССЫлка

Бы прошли тестирование и набрали правильных ответов в из 10 Это сооветствует оценке 5 | Пройти зеиово | | Согласен с оценкой ]

Рис.16 Фрагмент страницы ознакомления с результатами тестирования

При нажатии на кнопку «Пройти заново» происходит удаление из таблицы test_result данных по пользователю прошедшему тестирование по данной дисциплине, с последующим редиректом на страницу тестирования. Кнопка «Согласен с оценкой», записывает оценку по заданному номеру дисциплины «spec_nam» в таблицу «student» в строчку с номером пользователя «u_id» указанным в переменной файла «user_number».

На странице для выбора темы организуем таблицу для отображения списка незанятых тем самостоятельных работ и поле выбора. Все темы относящиеся к заданной дисциплине и имеющие пустое поле free_thim, будут выведены. При выборе какой либо темы и нажатии на кнопку «выбрать», номер темы добавляется в таблицу student в строку с указанной дисциплиной и номером пользователя. А в поле free_thim, таблицы thims добавляется любой символ что означает что тема занята.

Пользователи | Тестирование | Материалы | Темы | Преподаватели | Студенты|

Контакты

Регистрация

Дисциплина Тема самостоятельной работы

HTML Табличная верстка страницы В

HTML Вестка страницы при помощи абзацев |п

HTML Использование (ЗасКобгоир для выбора |п

HTML Функции и возможности форм |п

HTML Безопасность в использовании текстовых полей □

HTML Использование множества кнопок на форме |п

HTML Использование слоев в верстке |п

Отмена Выбрать

Рис. 17 Фрагмент страницы выбора темы

Автоматизированная система предназначена для работы практически на любых видах Web-серверов, это обеспечивает универсальность языка PHP. Дополнительным требованием к серверам является наличие PHP 5 и MySQL 4.

Для установки необходимо переписать на хостинг в корневую папку

сайта:

- connections - каталог настройки подключения системы к базе данных;

- images - каталог картинок в книгах (установить CHMOD 777

права на запись);

- index.php - главный файл для работы со страницами приложения;

- text.css - стили сайта;

- страницы сайта.

После копирования структуры папок на сайт необходимо импортировать файл IDO.sql в базу данных и натсроить параметры для подключения к БД в файле «config/config.php».

$mysql_database = "ido"; имя БД $mysql_username = "root"; пользователь БД $mysql_password = ""; пароль БД $mysql_host = "localhost"; хост БД $dbpf= "dp"; префикс БД

Для работы с тестами необходимо установить права на запись CHMOD 777 для папки test/images - для картинок к вопросам теста.

По умолчанию логин для входа в административные модули - «admin», пароль - «admin».

Процесс установки и настройки представляет собой обычную процедуру для установки Web-приложения на сервер, дополнительные настройки и изменения в стандартную процедуру установки могут вноситься в зависимости от конкретно используемого сервера и уточняются администрацией этого сервера. Процесс установки и настройки несложен и занимает немного времени, что положительно влияет на ресурсы затрачиваемые, на ввод в эксплуатацию информационно-обучающего комплекса.

i Надоели баннеры? Вы всегда можете отключить рекламу.