Файл: Анализ тз 2 Рассмотрение тз. 2 Глава проектирование веб приложения 6 Диаграммы вариантов использования. 6.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 04.05.2024

Просмотров: 40

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

СОДЕРЖАНИЕ

Оглавление

ГЛАВА 1. Анализ ТЗ

1.1. Рассмотрение ТЗ.

ГЛАВА 2. Проектирование веб приложения

2.1. Диаграммы вариантов использования.

2.2. Физическая модель базы данных

2.3. Выбор средств разработки

ГЛАВА 3. Реализация веб приложения

3.1. Реализация GUI пользователя

3.2. Реализация GUI преподавателя На главной странице есть кнопка входа, если внести данные для определенного преподавателя, то откроется личный кабинет.Система авторизации описана ниже.include($_SERVER['DOCUMENT_ROOT']."/script-php/link-connect.php");//Функиция Авторизации$inp_log_auth = $_POST['inp_log_auth'];//Проверка Данных пользователя{$sql_auth_proverka = "SELECT * FROM `users` WHERE `login` = '$inp_log_auth'";$result_auth = mysqli_query($conn, $sql_auth_proverka);$result_auth_array = mysqli_fetch_array($result_auth);//проверка Логинаif(isset($result_auth)) {//Проверка Пароля$inp_pass_auth = $_POST['inp_pass_auth'];$pass_hash = $result_auth_array['pass'];if (password_verify($inp_log_auth, $pass_hash)) {//Запись в сессию уникального id session_start();$_SESSION['action'] = $result_auth_array['id_users'];echo "good";}else echo "Неверный Пароль!".$pass_hash;}else {echo "Неверный Логин!";}}На главной странице преподавателя есть три кнопки меню: редактировать тест, создать новый, а также посмотреть статистику. Рисунок 3.3. Главная страница преподавателя.Страница редактирования теста показана на рис (3.4). Рисунок 3.4. Редактирование теста.Запись теста в базу данных. Формирование его в массив для отправки показан в листинге 2.Работа на стороне браузера(js), описана в листинге 3. 3.3. Реализация GUI Администратора Администратор может управлять предметами и преподавателями, а такИзменять главную информацию на сайте с помощью редактора текста на js. Рисунок 3.4. Панель редактирования.Так же есть возможность менять главную картинку на сайте с помощью данного кода:include($_SERVER['DOCUMENT_ROOT']."/script-php/link-connect.php");// Название $input_name = 'file';// Разрешенные расширения файлов.$allow = array();// Запрещенные расширения файлов.$deny = array('phtml', 'php', 'php3', 'php4', 'php5', 'php6', 'php7', 'phps', 'cgi', 'pl', 'asp','aspx', 'shtml', 'shtm', 'htaccess', 'htpasswd', 'ini', 'log', 'sh', 'js', 'html','htm', 'css', 'sql', 'spl', 'scgi', 'fcgi', 'exe');// Директория куда будут загружаться файлы.//$path = $_SERVER['DOCUMENT_ROOT']."/";$path = $_SERVER['DOCUMENT_ROOT']."/src/";$error = $success = '';if (!isset($_FILES[$input_name])) {$error = 'Файл не загружен.';} else {$file = $_FILES[$input_name];// Проверим на ошибки загрузки.if (!empty($file['error']) || empty($file['tmp_name'])) {$error = 'Не удалось загрузить файл.';} elseif ($file['tmp_name'] == 'none' || !is_uploaded_file($file['tmp_name'])) {$error = 'Не удалось загрузить файл.';} else {// Оставляем в имени файла только буквы, цифры и некоторые символы.$pattern = "[^a-zа-яё0-9,

Вывод

Приложение

Листинг 1(test.js)

Листинг 2(prepodFunction.php)

Листинг 3(prepod.js)

Листинг 4(function.php), для администратора

Листинг 5(admin.js) //Генератор пароля{$("#input-generate").click(function(){var $input = $("#input-password");$input.val('');var pass = generatePassword();var txt = pass.split("");var interval = setInterval(function(){if(!txt[0]){clearInterval(interval);} else {$input.val($input.val() + txt.shift());}}, 50);return false;});function generatePassword(){var length = 8,charset = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz


return;
}
if(value_input_otvet == data[1][amout]['answers']){
var clickBut = document.getElementById('click_but_'+data_id_vopros);
clickBut.style.backgroundColor = 'green';
}
else {
var clickBut = document.getElementById('click_but_'+data_id_vopros);
clickBut.style.backgroundColor = 'red';
}
//делаем неактивный блок с отвеченным вопросом
$('#click_but_'+data_id_vopros).attr("data-active", "false");
//скрываем блок
var id_del_block = document.getElementById(data_id_vopros);
id_del_block.style.display = 'none';

proverka();
return;
}
if(data_type == "test") {
//проверка задан ли хоть один радиобаттон
if($("#radio_"+data_id_vopros+"_0").is(":checked")||$("#radio_"+data_id_vopros+"_1").is(":checked")||$("#radio_"+data_id_vopros+"_2").is(":checked")||$("#radio_"+data_id_vopros+"_3").is(":checked")) {
for(let i=0;i<=3;i++){
if($("#radio_"+data_id_vopros+"_"+i).is(":checked")){
if(i == data[1][amout]['active']) {
var clickBut = document.getElementById('click_but_'+data_id_vopros);
clickBut.style.backgroundColor = 'green';
//делаем неактивный блок с отвеченным вопросом
$('#click_but_'+data_id_vopros).attr("data-active", "false");
//скрываем блок
var id_del_block = document.getElementById(data_id_vopros);
id_del_block.style.display = 'none';

proverka();
return;
}
else {
var clickBut = document.getElementById('click_but_'+data_id_vopros);
clickBut.style.backgroundColor = 'red';
//делаем неактивный блок с отвеченным вопросом
$('#click_but_'+data_id_vopros).attr("data-active", "false");
//скрываем блок
var id_del_block = document.getElementById(data_id_vopros);
id_del_block.style.display = 'none';

proverka();
return;
}
}
}
}
alert("Ответ не выбран!");
}
});

//кнопка закончить тест
$('body').on('click',"#finishTest", function() {
var count = $('#num_voprosov').val();
var chet;
for(let i=1;i<=count;i++){
var clickBut = document.getElementById('click_but_'+i);
if(clickBut.dataset.active == "true"){
alert("Закончите тест");
chet = 1;
return;
}
}
if(!chet){
$('#countdown-1').timeTo(1, function () {
resultTest();
});

}
return;
});


//мини кнопки для каждого вопроса
$('body').on('click',".sel_mini", function() {
if($(this).attr('data-active') == "true") {
//колличество вопросов
var num_voprosov = $('#num_voprosov').val();

for (let i = 1; i <= num_voprosov; i++) {
var data_id = document.getElementById(i);
data_id.style.display = 'none';
}
//ключ вопроса
var data_id = $(this).attr('data-but-vopros');
var data_id = document.getElementById(data_id);
data_id.style.display = 'block';
}
});

//функция подсчета результата
function resultTest() {
//баллы за тест и за вопрос
const strokaGrade = 2;
const testGrade = 1;

//колличество вопросов в теста
var count = $('#num_voprosov').val();

//смотрим сколько всего возможно набрать баллов
var maxPoints = 0;
for(let i=1;i<=count;i++){
//смотрим тип вопроса
var typeQuestion = document.getElementById('confirmation_'+i);
//если строка
if(typeQuestion.dataset.type == "stroka"){
maxPoints = maxPoints+strokaGrade;
}
//если тест
if(typeQuestion.dataset.type == "test") {
maxPoints = maxPoints+testGrade;
}
}
//alert(maxPoints);


//подсчитываем сколько набрал баллов студент
//баллы студента

var points = 0;

for(let i=1;i<=count;i++){
//проверяем подтвежден ли вопрос
var question = document.getElementById('click_but_'+i);
if(question.dataset.active == "false"){
//смотрим тим вопроса
var typeQuestion = document.getElementById('confirmation_'+i);
//если строка
if(typeQuestion.dataset.type == "stroka"){
//ответ записанный студентом
var value_input_otvet = $("#input_otvet_"+i).val();
//проверяем правильный ли ответ
if(value_input_otvet == data[1][i-1]['answers']){
//засчитываем очки
points = points+strokaGrade;
}
}
//если тест
if(typeQuestion.dataset.type == "test") {
//ответ записанный студентом
var value_input_otvet = $('input[name="radio_'+i+'"]:checked').val();
//проверяем правильный ли ответ

if(value_input_otvet == data[1][i-1]['active']) {
//засчитываем очки
points = points+testGrade;
}
}
}
}
//alert(points);

/////////////////
//считаем оценку
////////////////

//макимум по стобальной системе
const max = 100;

//оценка студента по стобальной системе
var points100 = (max/maxPoints)*points;

//приводим к целому числу
points100 = parseInt(points100,10);

//делаем проверку по 5-бальной системе
var grade = 0;


//отправка в статистику
function getResult() {
var surname = $('#input1').val();
var name = $('#input2').val();
var patronymic = $('#input3').val();
var institute = $('#input4').val();
var speciality = $('#input5').val();
var well = $('#input6').val();

var namePrepdmet = $('#input5').val();
var nameTest = $('#input6').val();

$.ajax({
url: 'function.php',
method: 'post',
dataType : "json",
data: {surname:surname, name:name, patronymic:patronymic, institute:institute, speciality:speciality, well:well, namePrepdmet:namePrepdmet, nameTest:nameTest, grade:grade},
success: function(data){
result = data;
}
});
}

switch(true) {
case(points == 0):
case(points100<25):
grade = 1;
getResult();
alert("Ваша оценка "+grade+"!");
location.reload();
break;
case(points100<49):
grade = 2;
getResult();
alert("Ваша оценка "+grade+"!");
location.reload();
break;
case(points100<74):
grade = 3;
getResult();
alert("Ваша оценка "+grade+"!");
location.reload();
break;
case(points100<89):
grade = 4;
getResult();
alert("Ваша оценка "+grade+"!");
location.reload();
break;
case(points100>89):
grade = 5;
getResult();
alert("Ваша оценка "+grade+"!");
location.reload();
break;
}
}


Листинг 2(prepodFunction.php)



//проверка на существование теста перед его записью
function proverka_na_delete_test($conn) {
if($_POST['id_test']){
$link = $_POST['id_test'];
//echo $link;
$sqlDelTest = "DELETE test,question,answers FROM test INNER JOIN question INNER JOIN answers WHERE test.id_test = question.id_test AND question.id_question = answers.id_question AND test.link='$link'";
mysqli_query($conn, $sqlDelTest);
}
}

//создание теста
function crate_test($conn){
//id предмета
$id_predmet = $_POST['id_predmet'];
//echo "id предмета: ".$id_predmet."
";

//колличество вопросов в тесте
$num_vopros = $_POST['num_vopros'];

//Запись в таблицу test

//Название теста
$name_new_test = $_POST['name_new_test'];
//echo "Название теста: ".$name_new_test."
";
$link = "http://localhost/test/test.php?name_test=".$name_new_test;
mysqli_query($conn, "INSERT INTO `test` (`name_test`, `id_predmet`, `link`, `num_rows`) VALUES ('$name_new_test', '$id_predmet', '$link', '$num_vopros')");
$id_test = mysqli_fetch_array(mysqli_query($conn, "SELECT max(id_test) FROM `test`"));

//текущий id теста в таблице
$id_test = $id_test[0][0];
//echo $id_test;
//echo "Колличество вопросов: ".$num_vopros."


";

//массив с вопросами
$array_question = array();

//массив с ответами
$array_answers = array();

//массив с id вопросами
$array_id_question = array();

//sql запись вопросов в базу данных
$sql_question = "INSERT INTO `question` (`name_question`, `type_question`, `id_test`) VALUES ";

//sql запись ответов в базу данных
$sql_answers
= "INSERT INTO `answers` (`name_answer`, `id_question`, `active`) VALUES ";

for
($i = 1; $i <= $num_vopros; $i++) {
//название вопроса
$name_vopros = $_POST["name_vopros_".$i];
//тип вопроса
$type_vopros = $_POST["type_vopros_".$i];

//формирование запроса на таблицу вопросов
$sql_question_dop = "('$name_vopros','$type_vopros',$id_test),";
$sql_question = $sql_question.$sql_question_dop;
}

//обрезаем последний символ
$sql_question = mb_substr($sql_question, 0, -1);

//запись в базу данных вопросов
mysqli_query($conn, $sql_question);
$id_vopros = mysqli_fetch_array(mysqli_query($conn, "SELECT max(id_question) FROM `question`"));
$id_vopros = $id_vopros[0];

//цыкл формирования массива с id вопросов
array_push($array_id_question, $id_vopros);
for
($e=1; $e <= $num_vopros-1; $e++) {
array_push(
$array_id_question, $id_vopros-$e);
}

$array_id_question1 = array_reverse($array_id_question);

//print_r($array_id_question);

//
цыкл формирования массива с ответами
for ($i = 1; $i <= $num_vopros; $i++) {

$id_question = $array_id_question1[$i-1];

//тип вопроса
$type_vopros = $_POST["type_vopros_".$i];

if
($type_vopros == "test") {

//варианты ответов
$otvet_test_1 = $_POST["input_test_1_".$i];

$otvet_test_2 = $_POST["input_test_2_".$i];
$otvet_test_3 = $_POST["input_test_3_".$i];
$otvet_test_4 = $_POST["input_test_4_".$i];

//правильный ответ
$active_otvet = $_POST["radio_but_".$i];

if
($active_otvet == "1") {
$otvet = [$otvet_test_1, $id_question, 1];
array_push($array_answers, $otvet);

$otvet = [$otvet_test_2, $id_question, 0];
array_push($array_answers, $otvet);

$otvet = [$otvet_test_3, $id_question, 0];
array_push($array_answers, $otvet);

$otvet = [$otvet_test_4, $id_question, 0];
array_push($array_answers, $otvet);
}
if($active_otvet == "2") {
$otvet = [$otvet_test_1, $id_question, 0];
array_push($array_answers, $otvet);

$otvet = [$otvet_test_2, $id_question, 1];
array_push($array_answers, $otvet);

$otvet = [$otvet_test_3, $id_question, 0];
array_push($array_answers, $otvet);

$otvet = [$otvet_test_4, $id_question, 0];
array_push($array_answers, $otvet);
}
if($active_otvet == "3") {
$otvet = [$otvet_test_1, $id_question, 0];
array_push($array_answers, $otvet);

$otvet = [$otvet_test_2, $id_question, 0];
array_push($array_answers, $otvet);

$otvet = [$otvet_test_3, $id_question, 1];
array_push($array_answers, $otvet);

$otvet = [$otvet_test_4, $id_question, 0];
array_push($array_answers, $otvet);