Создание сайта дистанционного тестирования клиентов

Язык разработки PHP: применение, синтаксис, типы данных, суперглобальные массивы, особенности интерпретатора. Apache-HTTP сервер: архитектура, механизм виртуальных хостов, функциональные возможности. Разработка сайта системы диагностики. Бюджет проекта.

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

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

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

else echo "<input size=\"25\" name=\"", $myrow['registr'], "\" type=\"text\" id=\"", $myrow['registr'], "\" style=\"width:240px\" maxlength=\"26\" class=\"pole1\">";

}

}

$myrow = mysql_fetch_array($result);

Вызывается функция, которая в переменную $myrow записывает следующее значение (строку) из базы данных, для обработки в новом повторе цикла

}

?>

Данные формы с этой страницы отправляются на обработку в файл hidden_php/great_user.php

2.2 Страница создания записи в БД тестируемого

На эту страницу приходят данные из формы с index.php, перед тем как создать новую запись, тесть зарегистрировать тестируемого, все данные формы проверяются на заполнение:

if ($name == ' ') {

Условие проверяется значение переменной $name, если переменная имеет знаечение, условие не выполняется, если в переменной отсутствует значение, то переменная $err прибавляется на один, и в массив $error['1'] с идентификатором проверяемого поля, в данном случае [`1'], записывается значение TRUE:

$err++;

$error['1'] = 'TRUE';}

Таким же образом проверяются все поля формы. Если хотя бы одно поле не заполнено, то выдаётся ошибка с пояснением что было пропущено и ссылка на повторную регистрацию:

for ($i = 1; $i < 17; $i++)

{

Цикл делает 17 повторений, для проверки каждого значения массива $error["$i"]

$show_error = mysql_fetch_array($result_error);

if ($error["$i"] === 'TRUE'){

Если в массиве $error["$i"] встречается значение TRUE, выписывается из базы данных поле которое не было заполнено:

echo "<br>" . $show_error["string"] . "<hr><a href=\"../index.php\">Пройдите регистрацию заного!</a>"

}

}

Если все важные поля были заполнены функцией создаётся Персональный Идентификатор (PID), при помощи функции (случайное число):

$pid = rand(1000000000,9999999999); // диапазон выбран очень большой для исключения совпадения идентификаторов.

Затем получается время регистрации при помощи функции date() :

$data = date("j/m/y");

Потом идёт подключение к БД и запись всего собранного в БД:

$db = mysql_connect("localhost","w0rt","qwerty");

mysql_select_db("imi-test",$db);

Запись в базу данных производится MySQL запросом:

$result = mysql_query ("INSERT INTO registr (name,last_name,otchestvo,sex,place_job,org,unit,position,year,experience,org_year,position_year,education,educ_year,name_educ,position_educ,tel_work,tel_home,goal,pid,date) VALUES ('$name','$last_name','$otchestvo','$sex','$place_job','$org','$unit','$position','$year','$experience','$org_year','$position_year','$education','$educ_year','$name_educ','$position_educ','$tel_work','$tel_home','$goal','$pid','$data')");

После записи всех регистрационных данных срабатывает java-script который переводит тестируемого на страницу выбора теста (choise_test.php). За счёт того, что всё это происходит очень быстро, пользователь даже не замечает, что после ввода регистрационных данных, он перешёл на эту страницу для записи всех данных в БД, он сразу видит страницу выбора теста.

2.3 Страница для входа по существующему идентификатору

Рисунок 2.3 - Страница входа по идентификатору

На эту страницу пользователь попадает через ссылку с главной страницы.

Так как мой сайт рассчитан на то, что разные тестируемые могут проходить тестирование с одного компьютера, пользователь никак не запоминается на локальном компьютере, сайт не создаёт cooki файлы на машине. Эта страница позволяет зайти тестируемому который уже когда то регистрировался по своему идентификатору, чтобы не проходить процедуру регистрации заново. Основная функция этой страницы, это через поле формы, выяснить какой именно тестируемый из БД хочет произвести вход на сайт. Данные введённые в форму передаются страничке обработки входа по PID (hidden_php/enter_id.php):

<form method="post" action="hiden_php/enter_id.php">

<input name="pid" type="text" id="pid" style="width:100%" maxlength="10">

<input type="submit" name="btnSubmit" id="btnSubmit" value="Перейти к списку тестов">

</form>

2.4 Страница обработки входа по существующему идентификатору

На эту страницу методом POST приходят введённый в форму идентификатор (ID) со страницы PID.php. Этот самый идентификатор (PID) вносится в СЕССИЮ PHP, для дальнейшего опознания, тестируемого на сайте:

$_SESSION['pid'] = $_POST['pid'];

Идентификатор ищется в БД на соответствие, если соответствие найдено, то происходит переадресация на страницу выбора теста (choise_test.php):

if ($myrow['pid'] == $_POST['pid']){

echo

"<script type=\"text/javascript\">

window.location = \"../choice_test.php\"

</script>";

}

В противном случае, если введенный PID не найден, то пользователю выдаётся ошибка и ссылка на ввод заново идентификатора или повторная регистрация:

else {

echo "

<center><a href=\"../pid.php\">ID: \"" . $_POST['pid'] . "\" не найден, введите заново!</a>

<br>Или <a href=\"../index.php\">зарегистрироваться</a> заново!";

}

2.5 Страница выбора теста

Рисунок 2.4 - Страница выбора теста

На этой странице выводятся все тесты, которые есть в базе данных.

При входе на эту страницу из СЕССИИ выясняется, какой тестируемый будет проходить тесты:

$pid = $_SESSION['pid'];

Затем подключаемся к БД

$db = mysql_connect("localhost","w0rt","qwerty");

mysql_select_db("imi-test",$db);

Делаем выборку регистрационных данных, по PID

$result = mysql_query("SELECT * FROM registr WHERE pid='$pid'",$db);

$myrow = mysql_fetch_array($result);

Вытаскиваем данные тестируемого для отображения на сайте, что-бы если произошла ошибка было наглядно, что вход произошёл под другими данными тестируемого:

$name = $myrow['name'];

$last_name = $myrow['last_name'];

$otchestvo = $myrow['otchestvo'];

echo " $name $last_name $otchestvo";

Делаем выборку из БД описания к тестам:

$result_test = mysql_query("SELECT * FROM test_string",$db);

$myrow_test = mysql_fetch_array($result_test);

Вывод тестов реализован при помощи цикла DO-WHILE, при помощи этого цикла выводится описание теста, и кнопка перехода к тесту. В каждом блоке описания теста своя форма, со скрытыми полями, что бы передать странице test.php идентификатор выбранного теста на вывод.

do {

echo

"<form method=\"post\" action=\"test.php\">

echo $myrow_test['text_test'] . "<input type=\"hidden\" name=\"test\" value=\"" . $myrow_test['num_test'] . "\">

<input type=\"submit\" value=\"Перейти к Тесту " . $myrow_test['num_test'] ."\">

</form>";

}

while ($myrow_test = mysql_fetch_array($result_test));

При нажатии кнопки с выбранным тестом, все данные формы отправляются методом POST на страницу вывода тестов (test.php)

На этой странице есть дополнительные проверки присутствия персонального идентификатора для правильной работы системы. Если пройдя тестирование, тестируемый нажал кнопку Выход, а потом вспомнив что не прошёл другой тест, как обычно нажмёт в браузере кнопку «Назад», то сервер выдавал выбор тестов, но персональный номер был удалён из Сессии PHP после прохода через страничку выхода из системы (exit.php) и получалось что тестируемый проходил тест, а его результаты никуда не записывались, потому что неясно серверу в какую ячейку базы данных нужно записать ответы. Для решения этой проблемы перед выводом выбора теста идёт проверка условием на присутствие идентификатора:

if (isset($pid)) {код страницы}

Если идентификатор отсутствует выполняется другой сценарий, сообщающий о ошибке и даюший ссылки на повторную регистрацию или повторный вход по идентификатору:

else

echo "<p>Отсутствует индетификатор тестируемгого <br> <a href=\"hiden_php/exit.php\">Пройдите регистрацию заного</a>или <a href=\"pid.php\">войдите по существующему ID</a></p>";

2.6 Страница вывода тестов

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

$test = $_POST['test'];

В основном вывод вопросов и ответов происходит по одному алгоритму, в цикле DO-WHILE, но каждый тест имеет ряд особенностей, поэтому перед выводом теста мы проверяем, какой надо выводить тест, обычной проверкой:

if ($test == "1") {};

Рисунок 2.5 - Иллюстрация первого теста

На странице также присутствует счётчик количества посещений страницы, который служит для вывода номера вопроса-ответа:

$numb = 1;

$numb = $numb + $_POST['numb'];

При первом посещении этой страницы, переменная $_POST['numb'] не существует, поэтому переменная $numb остаётся равной 1. После ответа на вопрос отправляется несколько POST-запросов, один из них это номер вопроса, на который отправляется ответ и каждый раз отправляется номер теста, для вывода выбранного теста:

echo "<form method=\"post\" action=\"test.php\" id=\"myform\">

<input type=\"hidden\" name=\"numb\" value=\"" . $numb . "\">

<input type=\"hidden\" name=\"test\" value=\"" . $test . "\">";

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

$result = mysql_query("SELECT * FROM test_$test WHERE num_question='$numb'",$db);

$myrow = mysql_fetch_array($result);

Выборка будет сделана из таблицы test_$test, где $test - это номер теста, который пришёл нам с страницы выбора теста. Так как это переменная, то этот алгоритм подходит для вывода любого теста из базы данных.

Далее мы опять делаем MySQL-запрос к базе данных, для выяснения количества вопросов в выбранном тесте. Результат этого запроса заносится в переменную $if которая в дальнейшем будет использоваться в качестве условия выполнения вывода вопросов:

$result_if = mysql_query("SELECT num_question FROM test_$test ORDER BY num_question DESC",$db);

$myrow_if = mysql_fetch_array($result_if);

$if = $myrow_if['num_question'] + 1;

Переменную $if я намеренно увеличил на 1, так как если в тесте 25 вопросов, то ответ на 25 вопрос придёт когда $numb будет равна 26, если не увеличивать эту переменную на единицу, то когда переменная $if будет равна $numb вывод вопросов тестирования закончится, и попросту 25 вопрос не отобразится.

if ($numb < $if){

echo "<form action=\"test.php\" method=\"post\">";

Вывод номера вопроса и теста вопроса:

echo "Вопрос: " . $myrow['num_question'] . "<hr>" . $myrow['question_string'] . "<br>";

Так как максимальное количество ответов во всех тестах равно 5, то цикл делает 5 повторений:

for ($otv = 1; $otv <= 5; $otv++){

Производим проверку на присутствие текста ответа в переменной $myrow["question_values$otv"], если переменная непустая то выполняется её вывод:

if ($myrow["question_values$otv"] <> ''){

В 3м тесте за счёт его индивидуальности производится отличный от других тестов заполнение скрытых полей формы и дополнительный вывод шкалы уверенности в выбранном ответе:

Рисунок 2.6 - иллюстрация 3го теста

if ($test == "3"){

$abc_otv = $otv + 223;

echo "<label><input name=\"q_" . $myrow['num_question'] . "\" type=\"radio\" value=\"" . chr($abc_otv) . "\">" . $myrow["question_values$otv"] . "</label><br>";

echo "<br>Насколько Вы уверены в своем выборе?<br>

<table width=\"100%\" cellspacing=\"2\" cellpadding=\"0\" bgcolor=\"#F0F0F0\" align=\"center\" class=\"TableQuestion\">

<tr>

<td align=\"right\">Совершенно</td>";

for ($j = 10 ; $j > 0 ; $j=$j-1){

echo "<td align=\"center\">$j</td>";}

echo "<td>Далеко</td></tr>

<tr><td align=\"right\">уверен</td>";

for ($k = 10 ; $k > 0 ; $k=$k-1){

echo "<td align=\"center\"><input type=\"radio\" name=\"qs$numb\" value=\"$k\"></td>";}

echo "<td>не уверен</td></tr></table><br>";

}

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

Рисунок 2.7 - Иллюстрация 2го теста

else {

echo "<label><input name=\"q_" . $myrow['num_question'] . "\" type=\"radio\" value=\"" . $otv . "\">" . $myrow["question_values$otv"] . "</label><br>\r\n";

}

}

echo "</td></tr></table><br>\r\n\r\n";

echo

"<center><input type=\"submit\" name=\"okbutton\" value=\"Следующий\">" .

"<input type=\"hidden\" name=\"test\" value=\"" . $test . "\">" .

"<input type=\"hidden\" name=\"numb\" value=\"" . $numb . "\">" .

"</form></center></table>";

}

В ситуации когда переменная $numb становится равной переменной $if, такое происходит когда пользователь ответил на все предложенные вопросы выдаётся сообщение о окончании тестирования:

echo "

<table border=\"0\" align=\"center\" cellpadding=\"2\" cellspacing=\"2\" width=\"640px\"><tr><td>

<center>

<p>Тест закончен... <br><a href=\"choice_test.php\">Выбрать другой тест</a><br><a href=\"hiden_php/exit.php\">Выход</a></p>

</td></table>";

}

}

Рисунок 2.8 - Сообщение об оконченном тестировании

Запись выбранных ответов ведётся с каждым обращением к этой странице, на этой странице одновременно выполняется вывод нового вопроса и запись ответа в БД на предыдущий вопрос, который приходит при помощи POST-запроса:

$otvet = $numb - 1;

$_POST["q_$otvet"] и $_POST["qs$otvet"]

Действия записи или обновления данных в базе данных. При первом посещении этой страницы if ($numb == 1) в базу данных делается MySQL запрос, на обновление результатов, а точнее если тестируемый решил повторно пройти тест, то ответы предыдущего прохождения стираются, чтобы не было наложения старых и новых ответов. А если тестируемый первый раз проходит тестирования, этот запрос попросту создаёт новую запись в базе данных:

if ($numb == 1) mysql_query("UPDATE test_values SET test_values_$test='' WHERE pid='$pid'",$db);

$result_3 = mysql_query("SELECT * FROM test_values WHERE pid='$pid'",$db);

$myrow_3 = mysql_fetch_array($result_3);

Так как все действия по записи данных в базе данных логичны только на втором обращении к странице ($numb > 1) когда приходит ответ наа ей вопрос, то оператору IF мы пишем такое условие:

if ($numb > 1) {

Так как записи новых данных по времени прохождения тестирования производится методом дописывания нового ответа к старому, то делается проверка, если в базе данных есть уже запись под этим идентификатором:

if ($pid == $myrow_3['pid']) {

MySQL запросом мы делаем выборку данных из базы данных ответов:

$result_2 = mysql_query("SELECT * FROM test_values WHERE pid='$pid'",$db);

Переменной $valSQL присваивается значение ответов на предыдущие вопросы:

$valSQL = mysql_fetch_array($result_2);

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

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

if ($test == '3') {

Переменной $val присваивается значение $valSQL["test_values_$test"] где находятся ответы на предыдущие вопросы, затем приплюсовывается значение $_POST["q_$otvet"] - ответ на вопрос, и приплюсовывается $_POST["qs$otvet"] - ответ который тестируемый выбирает в шкале уверенности:

$val = $valSQL["test_values_$test"] . $_POST["q_$otvet"] . $_POST["qs$otvet"]. "";

Далее значение переменной $val записывается в базу данных ответов, в ячейку который соответствует идентификатору тестируемого:

$update_value = mysql_query("UPDATE test_values SET test_values_$test='$val' WHERE pid='$pid'",$db);

}

Для обработки остальных тестов используется другой тип записи, так как в остальных тестах в каждом вопросе только один ответ и нет шкалы уверенности:

else

Переменной $val присваивается значение ответов на предыдущие вопросы и пристыкуется новый ответ, полученный методом POST из формы:

$val = $valSQL["test_values_$test"] . $_POST["q_$otvet"];

Затем новое значение переменной $val записывается в базу данных:

$ update_value = mysql_query("UPDATE test_values SET test_values_$test='$val' WHERE pid='$pid'",$db);

}

Если тестируемый зашёл первый раз для прохождения этого теста, то создаётся новая запись в базе данных, а не её обновление как описано выше:

else {

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

if ($test == '3') {

Переменной $val присваивается значение $_POST["q_$otvet"] - ответ на вопрос, и приплюсовывается $_POST["qs$otvet"] - ответ который тестируемый выбирает в шкале уверенности:

$val = $_POST["q_$otvet"] . $_POST["qs$otvet"] . " ";

Далее значение переменной $val записывается в базу данных ответов, в ячейку который соответствует идентификатору тестируемого:

$insert_value = mysql_query("INSERT INTO test_values (pid, test_values_$test) VALUES('$pid','$val')",$db);

}

else {

В этом исключении происходит создании записи в базе данных для тестов отличных от 3го, где на каждый вопрос по одному ответу. Переменной $val присваивается значение ответа, который мы получили из формы на предыдущей странице:

$val = $_POST["q_$otvet"];

Затем значение этой переменной и идентификатор тестируемого мы записываем в базу данных:

$insert = mysql_query("INSERT INTO test_values (pid, test_values_$test) VALUES('$pid','$val')",$db);

}}}

По окончанию теста, выдаётся табличка с ссылками на выбор другого теста или выход из системы:

echo "

<table border=\"0\" align=\"center\" cellpadding=\"2\" cellspacing=\"2\" width=\"640px\"><tr><td>

<center>

<p>Тест закончен... <br><a href=\"choice_test.php\">Выбрать другой тест</a><br><a href=\"hiden_php/exit.php\">Выход</a></p>

</td></table>";

2.7 Административная страница отчётов

Вход на данную страницу возможен только при вводе пароля, который известен только администратору сайта. При входе на данную страницу проверяется наличие в Сессии PHP ключа:

$propusk = $_SESSION['key'];

if ($propusk == "12345"){код страницы};

Если в Сессии есть ключ, то выполняется вывод всего содержимого страницы на экран администратору.

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

else {

if ($propusk <> ''){

echo "<p>Неверный ключ</p><p>Введите ключ доступа:<form method=\"POST\" action=\"otchet.php\">\r\n<input name=\"key\" type=\"password\" id=\"key\" maxlength=\"8\"><input type=\"submit\" value=\" ok \"></form></p>";}

}

Если ключ вообще не существует, переменная $propusk и $_SESSION['key'] не существуют, значит пользователь первый раз посетил эту страницу, и система предлагает ввести ключ доступа, который в дальнейшем будет записан в Сессию PHP ($_SESSION['key']) и соответственно будет присвоен переменной $propusk:

else{

echo "<p>Введите ключ доступа:<form method=\"POST\" action=\"otchet.php\">\r\n<input name=\"key\" type=\"password\" id=\"key\" maxlength=\"8\"><input type=\"submit\" value=\" ok \"></form></p>;

}

}

Основное назначение этой страницы - создавать текстовые файлы результатов прохождения тестирования пользователями, эти текстовые файлы определённого формата хранятся на сервере, в каталоге, где расположен сайт в папке (otchet_att). На этой странице можно формировать 3 разных вида отчётов:

- индивидуальный файл отчёта, в нём будет написана информация только о конкретном тестируемом

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

- полный отчёт, в нём будет выписана информация обо всех пользователях, которые проходили тестирование

2.7.1 Файл отчёта по организации

Рисунок 2.9 - Иллюстрация по созданию отчёта по организации

В самом верхнем блоке страницы, сервер формирует выпадающий список организаций, работники которых проходили тестирование. Для формирования текстового файла необходимо выбрать нужную организацию и нажать кнопку формы «ok». На языке PHP это выглядит так:

echo "<p>Отчёт по организации:</p>

<form action=\"otchet.php\" method=\"POST\">

<select name=\"org_otch\" id=\"org_otch\">\r\n<option value=\"...\">(Выбрать)</option>";

Выполняем SQL-запрос к базе данных, в результате в переменную $view_org_otchet присваивается наименование организации, в которой тестируемый работает, вся эта информация берётся из таблицы регистрационных данных тестируемых:

$org_otchet = mysql_query ("select * from registr");

$view_org_otchet = mysql_fetch_array ($org_otchet);

Затем с помошью цикла DO-WHILE перебираем все места работы тестируемых, которые есть в базе данных:

do{

В базе данных может содержаться много тестируемых из одной организации, поэтому надо написать алгоритм, чтобы не было повторений наименований организаций в выпадающем списке. Переменная $num_firm++ при первом обращении становится равной 1, и так как это первый проход цикла, то в выпадающий список выписывается самая первая организация:

$num_firm++;

if ($num_firm == '1') {

echo "<option value=\"" . $view_org_otchet['org'] . "\">" . $view_org_otchet['org'] . "</option>";

В массив переменной $firma[1] записывается наименование организации, которая была вписана в выпадающий список, это нужно для дальнейшего сравнения на совпадение:

$firma["$num_firm"] = $view_org_otchet['org'];

}

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

else {

$nesovpal = 0;

Переменная $nesovpal хранит в себе значение несовпадений наименования организации, которая сравнивается в данном проходе цикла. При проверки каждого нового наименования фирмы эта переменная обнуляется. Каждое новое значение наименования фирмы записывается в массив переменной $firma["$num_firm"], для дальнейшего сравнения на уникальность:

$firma["$num_firm"] = $view_org_otchet['org'];

При помощи цикла FOR мы сравниваем наименование организации которое пришло из базы данных, со всеми предыдущими наименованиями:

for ($a = 1; $a < $num_firm; $a++){

Если значение в переменной $view_org_otchet['org'] равно значению переменной $firma[$a] значит что найдено совпадение, и наименование организации которое пришло из базы данных уже выписано в выпадающий список. В этом случае никаких операций не происходит, и программа заканчивает этот проход цикла и начинается следующий, так сравниваются все значения нового наименования и всех значений организаций, которые находятся в массиве переменной $firma[$a]:

if ($view_org_otchet['org'] === $firma[$a]) {}

Если значения переменных не совпали, значит в данном случае найдено уникальное наименование организации, но перед выводом её в выпадающий список надо ещё сделать одну проверку, программа просто прибавляет на единицу значение переменной $nesovpal:

else {

$nesovpal++;

Если значение переменной $nesovpal равно значению переменной $num_firm - 1, это означает что наименование фирмы точно уникально и его нужно внести в выпадающий список наименований организаций:

if ($nesovpal == $num_firm - 1){

echo "<option value=\"" . $view_org_otchet['org'] . "\">" . $view_org_otchet['org'] . "</option>";

}}}}}

while ($view_org_otchet = mysql_fetch_array ($org_otchet));

echo "<input type=\"submit\" value=\" ok \"></form></table></form>";

Выше описан только алгоритм создания выпадающего списка организаций, но основной идеей этой страницы является создание текстового файла. Для начала мы проверяем, пришёл POST-запрос из формы выбора организации:

if ($_POST['org_otch'] <> ''){

$firma = $_POST['org_otch'];

Отчёты хранятся в отдельной папке для удобства, для начала их создания, нужно сменить каталог (по стандарту выставлен каталог, где расположена страница), меняем каталог на "otchet_txt":

chdir("otchet_txt");

Делаем выборку из базы данных, выбираются все поля из таблицы регистрационных данных, где поле Работа выбрана организация которая нас интересует:

$search_org = mysql_query("select * from registr where org='$firma'");

$view_org = mysql_fetch_array($search_org);

Файлы отчёта уникальны, чтобы не было засорения на сервере при создании нового отчёта старый удаляется:

if (file_exists("firma.att") == 'TRUE') {

unlink("firma.att"); }

С помошью цикла DO-WHILE перебираем все записи в базе данных:

do

{

Переменной $pid_view_values присваиваем значение персонального идентификатора тестируемого, это значение участвует в другом запросе к базе данных, в котором берутся данные о прохождении теста пользователем:

$pid_view_values = $view_org['pid'];

$otveti = mysql_query("SELECT * FROM test_values where pid='$pid_view_values'");

$view_otveti = mysql_fetch_array($otveti);

С помощью функции fopen открываем файл firma.att с атрибутом 'a' (Открывает файл только для записи; помещает указатель в конец файла. Если файл не существует - пытается его создать.):

$f = fopen("firma.att" , 'a');

Далее функцией fwrite производим запись данных из базы в текстовый файл отчёта:

fwrite($f, $shift9 . $view_org["org"] . ", " . $view_org["date"] . $shift0 . "\r\n");

fwrite($f, "1.ФАМ:" . $view_org["name"] . " 2.ИМЯ:" . $view_org["last_name"] . " 3.ОТЧ:" . $view_org["otchestvo"] . " Пол:" . $view_org["sex"] ."\r\n");

fwrite($f, "4.ГОРОД:" . $view_org["place_job"] . "5.ОРГАНИЗАЦИЯ:" . $view_org["org"] . "\r\n");

fwrite($f, "6.ПОДРАЗДЕЛЕНИЕ:" . $view_org["unit"] . " 7.ДОЛЖНОСТЬ:" . $view_org["position"] . "\r\n");

fwrite($f, "8.ГОД РОЖДЕНИЯ:" . $view_org["year"] . " 9.ОБЩ. ТРУД. СТАЖ:" . $view_org["experience"] . " 10.В ДАННОЙ ОРГ-ИИ С:" . $view_org["org_year"] . "\r\n");

fwrite($f, "11.В ЗАНИМАЕМОЙ ДОЛЖНОСТИ С:" . $view_org["position_year"] . " 12.ОБРАЗОВАНИЕ:" . $view_org["education"] . "\r\n");

fwrite($f, "13.В:" . $view_org["educ_year"] . " ГОДУ ЗАКОНЧИЛ:" . $view_org["name_educ"] . "\r\n");

fwrite($f, "14.ПО СПЕЦИАЛЬНОСТИ:" . $view_org["position_educ"] . "\r\n");

fwrite($f, "ТЕЛЕФОН: РАБОЧИЙ " . $view_org["tel_work"] . " ДОМАШНИЙ:" . $view_org["tel_home"] . "\r\n");

fwrite($f, "16.ОСНОВНЫЕ ЦЕЛИ ДЕЯТЕЛЬНОСТИ И РЕШАЕМЫЕ ЗАДАЧИ:" . $view_org["goal"] . "\r\n");

fwrite($f, "РАВЕН:" . $view_otveti["test_values_1"] . "\r\n");

fwrite($f, "ВЕРБАЛЬНЫЙ:" . $view_otveti["test_values_2"] . "\r\n");

fwrite($f, "СИТУАЦИОННЫЙ:" . $view_otveti['test_values_3'] . "\r\n");

fwrite($f, "ПСИХОЛОГИЧЕСКИЙ:\r\n");

В базе данных, в таблице где находятся ответы на 4й тест, ответы написаны непрерывным списком, а для файла отчёта нужно использовать шаблон выписки ответов, поэтому мы разбиваем длинную строку на 4 функцией substr(переменная, начало, длина), и присваиваем их переменным:

$otvet_60 = substr($view_otveti['test_values_4'], 1, 60);

$otvet_120 = substr($view_otveti['test_values_4'], 61, 60);

$otvet_180 = substr($view_otveti['test_values_4'], 121, 60);

$otvet_235 = substr($view_otveti['test_values_4'], 181, 55);

fwrite($f, "1- 60:" . $otvet_60 . "\r\n");

fwrite($f, "61-120:" . $otvet_120 . "\r\n");

fwrite($f, "121-180:" . $otvet_180 . "\r\n");

fwrite($f, "181-235:" . $otvet_235 . "\r\n\r\n");

fclose($f);

}

while ($view_org = mysql_fetch_array($search_org));

По окончанию записи в файл выдаётся сообщение, что файл отчёта был создан и ссылка на его скачивание с сервера:

echo "<table class=\"TableQuestion\" align=\"center\" width=\"95%\" cellpadding=\"0\"><tr><td>

<p>Файл отчёта по организации $firma создан (<a href=\"otchet_txt/firma.att\" target=\"_blank\">firma.att</a>)</p></center>

</td></tr></table>";

Рисунок 2.10 - Сообщение о создании отчёта по организации

2.7.2 Индивидуальный файл отчёта

В среднем блоке страницы выводится информация о всех пользователях, которые существуют в базе данных. Информация представлена в таблице, в которой выписаны ФИО тестируемых и отмечены тесты, которые они проходили. В самой последней колонке таблицы присутствует кнопка «Записать в отчёт». При нажатии на эту кнопку на сервер отправляется форма:

<input name=\"number_action\" value=\"" . $i . "\" type=\"hidden\">,

с командами на выполнение операции по формированию индивидуального отчёта по тестируемому. Значение, которое приходит из формы, с информацией какого именно тестируемого из базы данных записать в файл индивидуального отчёта присваиается пременной $man, далее вся работа будет происходить с этой переменной.

$man = $_POST['number_action'];

Если администратор нажал на кнопку «Записать в отчёт», то переменная $man будет иметь значение, и будет выполняться условия, в противном случае эта часть кода просто пропускается

if ($man <> ' ') {условия}

Для записи в внешний файл используются функции fopen() и fwrite(). Для начала опять меняем каталог с стандартного где хранится страница, на каталог созданный специально для таких текстовых файлов отчётов:

chdir("otchet_txt");

Делаем выборку из базы данных для конкретного тестируемого:

$otveti = mysql_query("SELECT * FROM test_values WHERE pid='$pid_post'");

$view_otveti = mysql_fetch_array($otveti);

Функцие открываем текстовый файл индивидуального отчёта (otchet.att) с атрибутом 'w' (Открывает файл только для записи; помещает указатель в начало файла и обрезает файл до нулевой длинны. Если файл не существует - пробует его создать.). Открываем именно с этим атрибутом, так как если есть индивидуальный файл отчёта с данными другого тестируемого, функция с таким атрибутом удаляет всю старую информацию и записывает новую. Таким образом не создаётся много файлов и старая информация удаляется:

$f = fopen('otchet.att' , 'w');

Далее записываем все интересующие данные в файл:

fwrite($f, $org["$man"] . ", " . $data["$man"] . "\r\n");

fwrite($f, "1.ФАМ:" . $name["$man"] . " 2.ИМЯ:" . $last_name["$man"] . " 3.ОТЧ:" . $otchestvo["$man"] . " Пол:" . $sex["$man"] ."\r\n");

fwrite($f, "4.ГОРОД:" . $place_job["$man"] . "5.ОРГАНИЗАЦИЯ" . $org["$man"] . "\r\n");

fwrite($f, "6.ПОДРАЗДЕЛЕНИЕ:" . $unit["$man"] . " 7.ДОЛЖНОСТЬ:" . $position["$man"] . "\r\n");

fwrite($f, "8.ГОД РОЖДЕНИЯ:" . $year["$man"] . " 9.ОБЩ. ТРУД. СТАЖ:" . $experience["$man"] . " 10.В ДАННОЙ ОРГ-ИИ С:" . $org_year["$man"] . "\r\n");

fwrite($f, "11.В ЗАНИМАЕМОЙ ДОЛЖНОСТИ С:" . $position_year["$man"] . " 12.ОБРАЗОВАНИЕ:" . $education["$man"] . "\r\n");

fwrite($f, "13.В:" . $educ_year["$man"] . " ГОДУ ЗАКОНЧИЛ:" . $name_educ["$man"] . "\r\n");

fwrite($f, "14.ПО СПЕЦИАЛЬНОСТИ:" . $position_educ["$man"] . "\r\n");

fwrite($f, "ТЕЛЕФОН: РАБОЧИЙ " . $tel_work["$man"] . " ДОМАШНИЙ:" . $tel_home["$man"] . "\r\n");

fwrite($f, "16.ОСНОВНЫЕ ЦЕЛИ ДЕЯТЕЛЬНОСТИ И РЕШАЕМЫЕ ЗАДАЧИ:" . $goal["$man"] . "\r\n");

fwrite($f, "РАВЕН:" . $view_otveti["test_values_1"] . "\r\n");

fwrite($f, "ВЕРБАЛЬНЫЙ:" . $view_otveti["test_values_2"] . "\r\n");

fwrite($f, "СИТУАЦИОННЫЙ:" . $view_otveti['test_values_3'] . "\r\n");

fwrite($f, "ПСИХОЛОГИЧЕСКИЙ:\r\n");

В базе данных, в таблице где находятся ответы на 4й тест, ответы написаны непрерывным списком, а для файла отчёта нужно использовать шаблон выписки ответов, поэтому мы разбиваем длинную строку на 4 функцией substr(переменная, начало, длина), и присваиваем их переменным:

$otvet_60 = substr($view_otveti['test_values_4'], 1, 60);

$otvet_120 = substr($view_otveti['test_values_4'], 61, 60);

$otvet_180 = substr($view_otveti['test_values_4'], 121, 60);

$otvet_235 = substr($view_otveti['test_values_4'], 181, 55);

fwrite($f, "1- 60:" . $otvet_60 . "\r\n");

fwrite($f, "61-120:" . $otvet_120 . "\r\n");

fwrite($f, "121-180:" . $otvet_180 . "\r\n");

fwrite($f, "181-235:" . $otvet_235 . "\r\n");

fclose($f);

По окончанию всех действий администратору выдаётся информационный блок, где говорится, что файл создан и даётся ссылка на его скачивание:

<center>В файл выборочного отчёта (<a href=\"otchet_txt/otchet.att\" target=\"_blank\">otchet.att</a>) <br>записана информация по тестируемому:<br> " . $name["$man"] . " " . $last_name["$man"] . "</center>

Рисунок 2.11 - Сообщение о создании индивидуального отчёта

2.7.3 Общий отчёт

При формировании таблицы, где отображаются все пользователи, которые проходили тестирование, все данные о пользователях записываются с массивы переменных. Эти переменные используются как для вывода всех пользователей прошедших тестирование на экран, так и для записи данных в отдельный файл отчёта. Если сервер получил POST-запрос с именем 'all_otchet' и значением равным '1', то формируется полный отчёт тестируемых:

if ($_POST['all_otchet'] == 1) {

Отчёты хранятся в отдельной папке для удобства, для начала их создания, нужно сменить каталог (по стандарту выставлен каталог, где расположена страница), меняем каталог на "otchet_txt":

chdir("otchet_txt");

Выполняем запрос к базе данных и берём из неё значения пройденных тестов:

$otveti = mysql_query("SELECT * FROM test_values");

Файлы отчёта уникальны, чтобы не было засорения на сервере при создании нового отчёта старый удаляется:

if (file_exists("otchet_all.att") == 'TRUE'){

unlink("otchet_all.att");}

С помощью цикла FOR будем перебирать все пользователей по очереди и дописывать их данные в отчёт:

for ($k = 1; $k <= $i; $k++){

Переменной $view_otveti присваиваем значение строки из базы данных:

$view_otveti = mysql_fetch_array($otveti);

Открываем файл 'otchet_all.att' с атрибутом 'a' (Открывает файл только для записи; помещает указатель в конец файла. Если файл не существует - пытается его создать.):

$f = fopen("otchet_all.att" , 'a');

Затем записываем все данные из базы данных в внешний файл полного отчёта:

fwrite($f, $shift9 . $org["$k"] . ", " . $data["$k"] . $shift0 . "\r\n");

fwrite($f, "1.ФАМ:" . $name["$k"] . " 2.ИМЯ:" . $last_name["$k"] . " 3.ОТЧ:" . $otchestvo["$k"] . " Пол:" . $sex["$k"] ."\r\n");

fwrite($f, "4.ГОРОД:" . $place_job["$k"] . "5.ОРГАНИЗАЦИЯ" . $org["$k"] . "\r\n");

fwrite($f, "6.ПОДРАЗДЕЛЕНИЕ:" . $unit["$k"] . " 7.ДОЛЖНОСТЬ:" . $position["$k"] . "\r\n");

fwrite($f, "8.ГОД РОЖДЕНИЯ:" . $year["$k"] . " 9.ОБЩ. ТРУД. СТАЖ:" . $experience["$k"] . " 10.В ДАННОЙ ОРГ-ИИ С:" . $org_year["$k"] . "\r\n");

fwrite($f, "11.В ЗАНИМАЕМОЙ ДОЛЖНОСТИ С:" . $position_year["$k"] . " 12.ОБРАЗОВАНИЕ:" . $education["$k"] . "\r\n");

fwrite($f, "13.В:" . $educ_year["$k"] . " ГОДУ ЗАКОНЧИЛ:" . $name_educ["$k"] . "\r\n");

fwrite($f, "14.ПО СПЕЦИАЛЬНОСТИ:" . $position_educ["$k"] . "\r\n");

fwrite($f, "ТЕЛЕФОН: РАБОЧИЙ " . $tel_work["$k"] . " ДОМАШНИЙ:" . $tel_home["$k"] . "\r\n");

fwrite($f, "16.ОСНОВНЫЕ ЦЕЛИ ДЕЯТЕЛЬНОСТИ И РЕШАЕМЫЕ ЗАДАЧИ:" . $goal["$k"] . "\r\n");

fwrite($f, "РАВЕН:" . $view_otveti["test_values_1"] . "\r\n");

fwrite($f, "ВЕРБАЛЬНЫЙ:" . $view_otveti["test_values_2"] . "\r\n");

fwrite($f, "СИТУАЦИОННЫЙ:" . $view_otveti['test_values_3'] . "\r\n");

fwrite($f, "ПСИХОЛОГИЧЕСКИЙ:\r\n");

$otvet_60 = substr($view_otveti['test_values_4'], 1, 60);

$otvet_120 = substr($view_otveti['test_values_4'], 61, 60);

$otvet_180 = substr($view_otveti['test_values_4'], 121, 60);

$otvet_235 = substr($view_otveti['test_values_4'], 181, 55);

fwrite($f, "1- 60:" . $otvet_60 . "\r\n");

fwrite($f, "61-120:" . $otvet_120 . "\r\n");

fwrite($f, "121-180:" . $otvet_180 . "\r\n");

fwrite($f, "181-235:" . $otvet_235 . "\r\n");

fclose($f);

По завершению всех операций выдаётся информационный блок, где выписано, что всё прошло успешно и даётся ссылка на скачивание отчёта:

<center>Файл полного отчёта создан (<a href=\"otchet_txt/otchet_all.att\" target=\"_blank\">otchet_all.att</a>)</center>

Рисунок 2.12 - Сообщение о созданном полном отчёте

3. Анализ экономической эффективности проекта

Эффективность разработки сайта для системы диагностики можно разделить на две части. Первая - это прямой эффект от создания сайта системы диагностики, связанный с экономией средств на материалы, рабочее время сотрудников и т.д. Вторая часть - это косвенный эффект от создания сайта в сети Интернет и проведения тестирования через этот сайт. Это так называемые качественные показатели. К ним можно отнести:

1) Повышение престижа компании:

В современном обществе Интернет технологии плотно вошли в бизнес. Далеко в прошлое ушли старые методы проведения тестов. У всех на рабочих местах и дома есть компьютеры.

2) Сокращение ресурсов на проведение тестирования:

За счёт того что тестирование происходит в виртуальной среде, экономятся ресурсы на проведение тестов, такие как бумага, ручки, не требуется специальное место для проведения тестирования, каждый может пройти его со своего персонального компьютера.

3) Сокращение времени на обработку результатов:

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

4) Простота и лёгкость изменения:

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

3.1 Бюджет проекта

Создание сайта системы диагностики заняло 42 рабочих дня, одного программиста и одного менеджера.

3.1.1 Определение затрат на разработку сайта

Издержки = Материалы + ЗПосн + ЗПдоп+ ЕСН + Аренда + Энергия + Аотч+Инт (3.1)

где ЗПосн - основная заработная плата;

ЗПдоп - дополнительная заработная плата;

Материалы - стоимость используемых материалов;

ЕСН - единый социальный налог;

Аренда - аренда помещений;

Энергия - энергозатраты;

Аотч - амортизационные отчисления;

Инт - расходы на Интернет.

Цена продукта принимается равной себестоимости, потому что сайт является внутренней разработкой, предназначенной для использования в сети Интернет (3.2):

ЦенаСайта = Издержки (3.2),

где ЦенаСайта - цена программного продукта веб-сайта.

Основная заработная плата.

К этой статье относится заработная плата программиста и менеджера, непосредственно связанных с разработкой сайта. Для удобства расчётов в дальнейшем заработные платы исполнителей проекта рассчитаны на заработные платы, которую получает исполнить за один рабочий день, все эти данные представлены в Таблице №1:

Таблица 1 «Заработная плата разработчиков сайта»

Должность

Заработная плата в месяц, руб.

Стоимость одного рабочего дня, руб.

Программист

17000

740

Менеджер

12000

521

Следует отметить, что такие работы как разработка технического задания и подбор литературы, также как обобщение результатов и составление документации ведутся менеджером и программистами параллельно в своей области. Далее приведён расчёт трудоёмкости для каждого исполнителя (Таблица 2):

Таблица 2 «Распределение трудоёмкости по исполнителям»

Наименование этапа

Исполнитель

Трудоёмкость, дней

Сумма, руб.

Разработка технического задания

Менеджер

5

2605

Подбор литературы, поиск информации

Менеджер

Программист

5

5

2605

3700

Написание кода сайта и отладка

Программист

20

14800

Оценка результатов и тестирование

Менеджер

Программист

8

8

4168

5920

Составление документации

Менеджер

Программист

4

4

2084

2960

Итого

42

38842

Следовательно, величина основной заработной платы за всю продолжительность проекта составит:

ЗПосн = 38842 руб.

Дополнительная заработная плата

Примем величину дополнительной заработной платы в размере 15% от величины основной заработной платы:

ЗПдоп = ЗПосн * 0,15 = 38842 * 0,15 = 5826 руб.

Единый Социальный Налог

Единый социальный налог объединяет в себе следующие отчисления:

- ПФР (пенсионный фонд России) - 26%;

- ФСС (фонд социального страхования) - 2,9%;

- в ФФОМС (федеральный фонд обязательного медицинского страхования) - 2,1%;

- ТФОМС (территориальный фонд обязательного медицинского страхования) - 3%;

В общей сложности отчисления составляют 34% от суммы основной и дополнительной заработной платы и составят (3.3):

(3.3)

Стоимость материалов и изделий.

Стоимость использованных материалов составляет 10% от фонда оплаты труда (3.4):

(3.4)

Аренда помещения.

Стоимость аренды помещения вычистится по формуле (3.5):

(3.5),

где Т - продолжительность аренды помещения;

- стоимость арендуемого помещения в месяц

- площадь арендуемого помещения.

Продолжительность аренды равно продолжительности выполнения проекта, т.е. 42 дня, что в свою очередь составляет Т=2 месяца. Стоимость аренды квадратного метра в офисном помещении в месяц составляет ;

Размер необходимой арендуемой площади S определяется по формуле (3.6):

(3.6),

где - норма площади на одного человека, равная 6 кв.м.;

N - количество исполнителей.

.

Энергозатраты

Затраты на электроэнергию рассчитываются по формуле (3.7):

(3.7),

где W - потребляемая мощность,

T - количество часов работы оборудования,

S - стоимость киловатт-часа электроэнергии;

В настоящее время .

Для работы были задействованы 1 компьютер, 1 МФУ. Рабочий день программиста длится 8 часов, в среднем пользование МФУ 1 час в день. Исходя из этих данных, получаем:

Компьютер:

Wк = 0,85кВт, Тк = 336ч.

МФУ: Wмфу= 0,5кВт, Тмфу= 42 ч.

Тогда затраты на электроэнергию составят:

Амортизационные отчисления

Амортизационные отчисления берутся исходя из стоимости ПЭВМ, на которой выполнялась разработка, и стоимости принтера.

Таблица 3 «Стоимость оборудования»

Наименование

Обозначение

Стоимость,руб

Компьютер

Цк

30000

МФУ

Цмфу

10500

С учетом норм амортизации на компьютер - 12,5%, а на МФУ - 11,1%, амортизационные отчисления за все рабочие дни составляют (3.8):

(3.8),

где Цк - цена компьютера;

- норма амортизации на компьютер;

- норма амортизации на МФУ;

П - период разработки проекта.

Сумма амортизационных отчислений составит:

Расходы на Интернет

Расходы за использование сети Интернет составляют 15% от фонда оплаты труда, т.е. (3.9):

(3.9)

Затраты на разработку сайта сведены в таблицу 4:

Таблица 4 «Затраты на разработку сайта»

Статья затрат

Сумма затрат, руб.

Основная ЗП

38842,00

Дополнительная ЗП

5826,00

Материалы

4466,00

ЕСН

11703,00

Аренда

23800,00

Энергозатраты

711,31

Амортизационные отчисления

782,00

Затраты на Интернет

6814,50

Общие затраты на разработку

92944,80

3.1.2 Определение затрат на эксплуатацию сайта

Определим затраты на эксплуатацию. Эти затраты будут состоять из следующих показателей (3.10):

(3.10),

где - затраты на производство и внедрение;

- затраты на оборудование, реализующие сайт;

Затраты на внедрение.

Затраты на внедрение состоят из большого числа факторов, но выделим лишь те, влияние которых наиболее существенно, это

- подготовка сайта к эксплуатации в конкретных условиях;

- обучение персонала и др.

Поэтому полные затраты на внедрение и подготовку к эксплуатации равны:

Будем исходить из предположения, что на подготовку сайта к эксплуатации и настройку для работы будет затрачено 1 день работы одного программиста. Тогда стоимость будет определяться дневной зарплатой программиста:

На обучение персонала предположительно необходимо 2 дня, поэтому стоимость будет определяться дневной зарплатой программиста:

Общие затраты на внедрение равны:

Затраты на оборудование, реализующие сайт.

Поскольку для работы привлечено существующее оборудование, затрат на эксплуатацию реализующей ЭВМ.

Затраты на эксплуатацию реализующей ЭВМ, ввиду низкой стоимости машинного времени, могут быть приравнены к затратам на потребляемую электроэнергию (3.11):

(3.11),

где - удельная стоимость машинного времени;

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

Исходя из опыта работы аналогичных систем, можно сказать, что в год продолжительность пользования системой составит:

=.

Тогда затраты на эксплуатацию, реализующей ЭВМ составят:

Суммарные затраты на эксплуатацию составят:

3.1.3 Затраты на сопровождение сайта

Затраты на сопровождение сайта складываются из:

- затраты на обнаружение и устранение ошибок;

- затраты на модернизацию и доработку.

Непосредственно дать денежную оценку сложно, поэтому примем, что для обнаружения, устранения и модернизации сайта будет требоваться в среднем 12 дней труда программиста в год. В день программист зарабатывает 800 рублей + 34% (ЕСН) = 1072 руб.

Обслуживание сайта

Обслуживание сайта минимальное. Всё обслуживание складывается из того, что менеджер один раз в неделю заходит в административную часть сайта и делает файлы отчётов о прохождении тестов. Для этого нужно будет требоваться 53 рабочих дня в год, в день менеджер зарабатывает 521 руб., затраты на обслуживание (3.12):

(3.12),

где - количество рабочих дней менеджера;

Все затраты на обслуживание сайта сведены в Таблицу 5:

Таблица 5 «Расходы на обслуживание сайта в год»

Статья затрат

Сумма затрат,руб

Хостинг

1500,0

Сопровождение сайта

12864,0

Зарплата Менеджера

27613,0

ЕСН

7234,6

Итого

49211,6

Тогда общие затраты на разработку и внедрение проекта составят (3.13):

(3.13)

3.2 Прямой экономический эффект

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

- полный отказ от аренды помещения, для проведения тестирования;

- экономия на бумажных носителях;

- экономия на канцелярских предметах;

- экономия времени на обработку информации;

- уменьшение затрат на персонал, обслуживающий тестирование.

Для анализа экономической целесообразности внедрения системы обобщим эти параметры и рассмотрим следующие:

- сокращение затрат на проведение тестирования;

- повышение производительности труда.

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

Для оценки экономии расходных материалов для проведения тестирования примем, что в неделю проходит тестирование 30 человек, каждому человеку выдаётся по 4 теста. На один лист А4 помещается 6 вопросов, так как общее количество вопросов в 4 тестах составляет 333 вопроса, то это получается что для опроса одного тестируемого уходит порядка 55 страниц А4. Листы используются не однократно, но для надлежащего вида их перепечатывают один 4 раза за год. Отсюда экономия на расходные материалы считается по формуле (3.14):

(3.14),

где N - количество тестируемых в год;

n - среднее число листов А4, приходящееся на одного тестируемого;

с - стоимость печати одного листа формата А4;

N = 30*53= 1590

n = 55

Рассмотрим какой экономический эффект даст повышение производительности труда. Для обработки тестов менеджеру требуется 30 минут, за это время обрабатывается одна анкета. За год менеджер на обработку анкет тратил времени Т (3.15):

(3.15),

где t - время обработки одной анкеты;

N - количество тестируемых в год;

За год тратится порядка 795 труда/час на обработку результатов. При 8 часовом распорядке дня, это выполняется за 100 рабочих дней. Заработная плата менеджера в этом случае равняется:

После внедрения информационной системы заработная плата менеджера равняется:

Все расчёты сведём в таблицу 6:

Таблица 6 «Прямой экономический эффект»

Наименование

Сумма,руб

Экономия расходных материалов

32793,75

Повышение производительности труда

24487,00

Итого

57280,75

Из наших расчётов получаем что прям экономический эффект от внедрения информационной системы равен:

Срок окупаемости затрат на разработку и внедрение сайта определяется по формуле (3.17).

(3.17),

где Tок - срок окупаемости изделия, год.

Срок окупаемости составит:

Расчетный коэффициент экономической эффективности капитальных затрат на разработку и внедрение сайта рассчитывается по формуле (3.18):

(3.18).

Коэффициент эффективности капитальных затрат показывает величину ежегодного экономического эффекта, которую дает каждый рубль капитальных вложений в реализацию объекта технического решения.

Таким образом, можно сделать вывод, что мероприятия по созданию и внедрению сайта являются эффективными (Ер = 0,35 Ен = 0,15 ) и окупятся в течение 2,8 года, а это 2 года 10 месяцев.

3.3 Косвенный эффект

Так же существуют и косвенный экономический эффект от внедрения информационной системы, но этот эффект тяжело измерить. Можно выделить несколько выгод:

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

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

- повышение безопасности при расчёте результатов тестирования. Так как все расчёты происходят на компьютере сервере, есть большая уверенность в достоверности данных, потому что компьютеры редко дают сбой и информация без искажений и ошибок записывается в базу данных, для дальнейшей обработки.

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

Заключение

Все цели и задачи, которые ставились в начале работы были мною достигнуты. В процессе выполнения данной работы мною была собрана и изучена информация по созданию сайтов. Изучен язык веб-програмирования PHP, изучен язык запросов к базе данных MySQL. Использованный в работе сервер Apache работал стабильно и без сбоев. Данная связка программного обеспечения (Apache+PHP+MySQL) давно зарекомендовала себя в области сетевых технологий. Язык программирования PHP позволяет создавать сайты, из блоков подгружая нужные и экономя тем самым время на создание. Вся информация, содержащаяся на сайте находится в базе данных MySQL на сервере. Удобство такого расположения информации и есть главный плюс при создание сайта на PHP. Весь смысл тандема этих двух систем в гибкости запросов к безе данных и абсолютная свобода действий над хранимой там информацией.


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

  • Компоненты вычислительной системы, предоставляющие клиенту доступ к определенным ресурсам и обмен информацией. Функциональные возможности ядра веб-сервера Apache. Механизм авторизации пользователей для доступа к директории на основе HTTP-аутентификации.

    курсовая работа [105,6 K], добавлен 07.06.2014

  • Краткие сведения о доске объявлений, структура и внутреннее содержание соответствующего сайта. Принципы и основные этапы разработки, выбор и обоснование программных средств: язык HTML, каскадные таблицы стилей, JavaScript, Web-сервер Apache, PHP.

    дипломная работа [1,6 M], добавлен 22.10.2014

  • Функциональные возможности веб-сайтов и их применение. Сравнительный анализ языков программирования для веб-разработки. Методические аспекты разработки образовательного веб-сайта. Определение трудозатрат на разработку и отладку программного продукта.

    дипломная работа [2,8 M], добавлен 03.09.2021

  • Понятие сайта и их классификация - корпоративные, презентационные, тематические, интернет-магазины. Язык гипертекстовой разметки HTML и его средства разработки. Виртуальный web-сервер Denver и MySQL базы. Этапы разработки сайта и структура навигации.

    дипломная работа [2,4 M], добавлен 13.01.2015

  • Проектирование web-сайта. Пользовательские персонажи, детальная концепция сайта. Разработка скелетной схемы страниц, информационной архитектуры. Создание прототипа web-сайта. Выбор среды разработки. CMS системы и их анализ. Стадии проектирования сайта.

    курсовая работа [346,7 K], добавлен 18.09.2016

  • Актуальность создания фирменного web-сайта. Разработка, внедрение web-сайта под названием "Удачная постройка". Анализ существующих программных решений, выбор инструментальных средств разработки. Архитектура сайта, структура данных. Тестирование и отладка.

    дипломная работа [4,7 M], добавлен 19.01.2017

  • Установка и настройка локального web–сервера и его компонентов. Конфигурационные файлы сервера Apache и их натройка. Настройка PHP, MySQL и Sendmail. Проверка работоспособности виртуальных серверов. Создание виртуальных хостов. Тест Server Side Includes.

    учебное пособие [6,2 M], добавлен 27.04.2009

  • Основы Web-программирования. Сервер баз данных MySQL. Язык сценариев PHP. Язык гипертекстовой разметки HTML. Назначение и цели разработки сайта. Форма входа и регистрации, обратная связь интернет–магазина. Требования к структуре сайта, описание контента.

    курсовая работа [754,5 K], добавлен 02.06.2014

  • Понятие web-сайта и их типы. Программы для создания web-сайта. Описание структуры проекта. Алгоритм создания сайта. Описание конструктора Jimdo. Языки программирования серверного выполнения. Создание полнофункционального веб-сайта для ОАО "КУЛЗ".

    курсовая работа [3,5 M], добавлен 05.06.2015

  • Языки написания сайта, принципы и обоснование их отбора. Программы создания web-страниц, их функциональные особенности и возможности. Технология и основные этапы разработки интернет-сайта, правила его составления, оформления, заполнения, программный код.

    курсовая работа [3,1 M], добавлен 20.05.2015

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