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

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

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

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

Добавлен: 04.05.2024

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

Скачиваний: 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

}
if($active_otvet == "4") {
$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, 0];
array_push($array_answers, $otvet);

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

if($type_vopros == "stroka") {
$otvet = [$_POST["otvet_".$i], $id_question, 1];
array_push($array_answers, $otvet);
}
}

//количество в массиве ответов
$num_otvetov = count($array_answers);

for
($i = 0; $i <= $num_otvetov-1; $i++) {
//формирование запроса на таблицу ответов
$name_answer = $array_answers[$i][0];
$id_question = $array_answers[$i][1];
$active = $array_answers[$i][2];

$sql_answers_dop = "('$name_answer','$id_question','$active'),";
$sql_answers = $sql_answers.$sql_answers_dop;

}

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

//запись в базу данных ответов
mysqli_query($conn, $sql_answers);
}

//создание массива теста с бд
function arrayTest($conn){
$link = $_POST['link'];
//ссылка на тест

$sqlTest = "SELECT test.id_test, test.name_test, test.num_rows, question.name_question, question.type_question, answers.name_answer, answers.active FROM test INNER JOIN question ON test.id_test = question.id_test INNER JOIN answers ON question.id_question = answers.id_question WHERE test.link = '$link' ";
$queryTest = mysqli_query($conn, $sqlTest);
$num_rows = mysqli_num_rows($queryTest);

$arrayData = [];
$arrayTest = [];

//создаем начальный нормальный массив
for($i=1; $i<=$num_rows; $i++) {
$arraySql = mysqli_fetch_assoc($queryTest);
array_push($arrayTest, $arraySql);
}

//половина массива теста
$arrayData[] = [nameTest=>$arrayTest[0][name_test],count=>$arrayTest[0][num_rows]];

//обьявление второй половины
$array_vopros =[];
$i=0;
while
($i <= $num_rows-1) {

if($arrayTest[$i][type_question] == "stroka") {
$array_vopros[] = [name_question=>$arrayTest[$i][name_question], type=>"stroka", answers=>$arrayTest[$i][name_answer]];
}
else{
if($arrayTest[$i][active]=="1"){
$active = "0";
}
if($arrayTest[$i+1][active]=="1"){
$active = "1";
}
if($arrayTest[$i+2][active]=="1"){
$active = "2";
}
if($arrayTest[$i+3][active]=="1"){
$active = "3";
}
$array_vopros[] = [name_question=>$arrayTest[$i][name_question], type=>"test", answers

=>[$arrayTest[$i][name_answer],$arrayTest[$i+1][name_answer],$arrayTest[$i+2][name_answer],$arrayTest[$i+3][name_answer]], active=>$active];
$i = $i+3;
}

$i++;
}

//соединение массива
array_push($arrayData, $array_vopros);


echo
json_encode($arrayData);


}

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


//выход на главную
$('#link_glaw').on('click', function() {
var path_index = "/index.php";
window.location.href = path_index;
});

//выход из системы преподователя
$('#but_logout_prepod').on('click', function() {

$.ajax({
url: 'script-php/function.php',
method: 'post',
dataType: 'html',
data: {action:'logout_prepod'},
success: function(data){
if(data) {
location.reload();
alert("Вы успешно вышли!");
}
else {
alert("Что-то пошло не так :)");
}
}
});
});

//функция меню при загрузке страницы
$(document).ready(function() {
menu_admin();
});


function menu_admin() {
$('#but_menu1').on('click', function() {
var delete_test = confirm("Вы уверены?");
if(delete_test) {
window.location.href = "prepod_menu_1.php";
}
else {

}
});

$('#but_menu2').on('click', function() {
var delete_test = confirm("Вы уверены?");
if(delete_test) {
window.location.href = "prepod_menu_2.php";
}
else {

}
});

$('#but_menu3').on('click', function() {
var delete_test = confirm("Вы уверены?");
if(delete_test) {
window.location.href = "prepod_menu_3.php";
}
else {

}
});
}

//по нажатию на создать Тест
$('body').on('click',"#but_create_test", function() {

//скрытый инпут, счетчик вопросов
var num_vopros = parseFloat($('#num_vopros').val())+1;
alert(num_vopros);

$('.menu_prepod_2_content').append(
'
+num_vopros+'" #a9b7c6">+num_vopros+'">'+
'
'+
'+num_vopros+'">Вопрос №'+num_vopros+''+
'+num_vopros+'">'+
''+
''+
'
'+

'
+num_vopros+'" #a9b7c6">+num_vopros+'">'+

'
'+
'
');

$('#num_vopros').val(num_vopros);

});


//Отрисовка типа теста
$('body').on('change',".change_sel_create_vopros", function() {
var id_div_vopros = $(this).attr('data-sel-nomer-vopros');
var this_num_vopros = $(this).attr('data-vopros');
var value_type_vopros = $(this).val();

if(value_type_vopros == "test") {
$('#'+id_div_vopros).empty();
$('#'+id_div_vopros).append(
'
'+
'+this_num_vopros+'">'+

'+this_num_vopros+'">'+
'+this_num_vopros+'" type="text">'+

'+this_num_vopros+'">'+
'+this_num_vopros+'" type="text">'+

'+this_num_vopros+'">'+
'+this_num_vopros+'" type="text">'+

'+this_num_vopros+'">'+
'+this_num_vopros+'" type="text">'+
'

');
}
if(value_type_vopros == "stroka") {
$('#'+id_div_vopros).empty();
$('#'+id_div_vopros).append(
'+this_num_vopros+'">'+
'+this_num_vopros+'">'
);
}
});


//кнопка удаления блока теста
$('body').on('click',".but_del_vopros", function() {

//id блока
var id_del_vopros = $(this).attr('data-nomer');

//колличество изначально
var num_vopros = parseFloat($('#num_vopros').val())
for (let i = 1; i <= num_vopros; i++) {

if(id_del_vopros==i){
$('#'+id_del_vopros).remove();
}
else {
if(i
}
else {

//начинаеться отрисовка!!!
/////////////////////////

var value = parseFloat(i)-1;

//изменение главного блока
$('.div_create_vopros_'+i).attr("id", value);
$('#'+value).removeClass('div_create_vopros_'+i).addClass('div_create_vopros_'+value);

//изменение span нумерации
$('.id_span_'+i).attr("id", 'id_span_'+value);
$('#id_span_'+value).text("Вопрос №"+value);
$('#id_span_'+value).removeClass('id_span_'+i).addClass('id_span_'+value);

//изменение инпута ввода название вопроса нумерации
$('.class_input_'+i).attr("id", 'id_input_'+value);
$('#id_input_'+value).attr("name", "name_vopros_"+value);
$('#id_input_'+value).removeClass('class_input_'+i).addClass('class_input_'+value);

//Изменения select типа вопроса
$('.select_type_'+i).attr("id", 'select_type_'+value);
$('#select_type_'+value).attr("data-vopros", value);
$('#select_type_'+value).attr("data-sel-nomer-vopros", "create_vopros_"+value);
$('#select_type_'+value).removeClass('select_type_'+i).addClass('select_type_'+value);

//изменение кнопки удалить вопрос
$('.button_del_'+i).attr("id", 'button_del_'+value);
$('#button_del_'+value).attr("data-nomer", value);
$('#button_del_'+value).removeClass('button_del_'+i).addClass('button_del_'+value);

//отрисовка блока с ответом
$('.create_vopros_'+i).attr("id", "create_vopros_"+value);
$('#create_vopros_'+value).removeClass('create_vopros_'+i).addClass('create_vopros_'+value);

//изменения скрытого инпута с типом вопроса
$('.id_input_hidden_type_'+i).attr("id", 'id_input_hidden_type_'+value);
$('#id_input_hidden_type_'+value).attr("name", 'type_vopros_'+value);
$('#id_input_hidden_type_'+value).removeClass('id_input_hidden_type_'+i).addClass('id_input_hidden_type_'+value);

var type_vopros = $('#id_input_hidden_type_'+value).val();

if(type_vopros == "stroka") {
//изменение инпутов в типе строке
$('.stroka_otvet_'+i).attr("id", 'stroka_otvet_'+value);
$('#stroka_otvet_'+value).attr("name", 'otvet_'+value);
$('#stroka_otvet_'+value).removeClass('stroka_otvet_'+i).addClass('stroka_otvet_'+value);
}
if(type_vopros == "test") {
//изменение 4 радиобатоннов в тесте
$('.radio_but_1_'+i).attr("id", 'radio_but_1_'+value);
$('#radio_but_1_'+value).attr("name", 'radio_but_'+value);
$('#radio_but_1_'+value).removeClass('radio_but_1_'+i).addClass('radio_but_1_'+value);

$('.radio_but_2_'+i).attr("id", 'radio_but_2_'+value);
$('#radio_but_2_'+value).attr("name", 'radio_but_'+value);
$('#radio_but_2_'+value).removeClass('radio_but_2_'+i).addClass('radio_but_2_'+value);

$('.radio_but_3_'+i).attr("id", 'radio_but_3_'+value);
$('#radio_but_3_'+value).attr("name", 'radio_but_'+value);
$('#radio_but_3_'+value).removeClass('radio_but_3_'+i).addClass('radio_but_3_'+value);

$('.radio_but_4_'+i).attr("id", 'radio_but_4_'+value);
$('#radio_but_4_'+value).attr("name", 'radio_but_'+value);
$('#radio_but_4_'+value).removeClass('radio_but_4_'+i).addClass('radio_but_4_'+value);


//изменение 4 инпутов ответа в тесте
$('.input_test_1_'+i).attr("id", 'input_test_1_'+value);
$('#input_test_1_'+value).attr("name", 'input_test_1_'+value);
$('#input_test_1_'+value).removeClass('input_test_1_'+i).addClass('input_test_1_'+value);

$('.input_test_2_'+i).attr("id", 'input_test_2_'+value);
$('#input_test_2_'+value).attr("name", 'input_test_2_'+value);
$('#input_test_2_'+value).removeClass('input_test_2_'+i).addClass('input_test_2_'+value);

$('.input_test_3_'+i).attr("id", 'input_test_3_'+value);
$('#input_test_3_'+value).attr("name", 'input_test_3_'+value);
$('#input_test_3_'+value).removeClass('input_test_3_'+i).addClass('input_test_3_'+value);

$('.input_test_4_'+i).attr("id", 'input_test_4_'+value);
$('#input_test_4_'+value).attr("name", 'input_test_4_'+value);
$('#input_test_4_'+value).removeClass('input_test_4_'+i).addClass('input_test_4_'+value);
}
}

}
}

//количество после удаления
var num_next_vopros = parseFloat($('#num_vopros').val())-1;
$('#num_vopros').val(num_next_vopros);
});

///////////////////////////////////////////////////
//редактирование тестов
//////////////////////////////////////////////////


//кнопка удаления теста
$('body').on('click',"#but_del_test", function() {
var delete_test = confirm("Вы уверены что хотите удалить?");

if(delete_test) {
alert("Удаляем");
}
else {
alert("мда");
}
});


//Отрисовка теста для редактирования
$('body').on('change',"#select_update_test", function() {
//ссылка на сайт
var link = $(this).val();

$.ajax({
url: 'script-php/function.php',
method: 'post',
dataType : "json",
data: {action:'arrayTest', link:link},
success: function(data){
if(data) {
//запись в скрытый инпут переменная колличества вопросов
var count = data[0]['count'];
$('#num_vopros').val(count);
//записываем название Теста в инпут
$(".input_red_name_test").val(data[0]['nameTest']);

//цикл записи вопросов
for (let value=1; value<=count; value++){
var result = parseFloat(value)-1;
//отрисовали вопросы
$('.menu_prepod_2_content').append(
'
+value+'" #a9b7c6">+value+'">'+
'
'+
'+value+'">Вопрос №'+value+''+
'+value+'">'+
''+
''+
'
'+

'
+value+'" #a9b7c6">+value+'">'+

'
'+
'
'
);

//отрисовка ответов
//если строка
if(data[1][result]['type'] == "stroka") {
$('#create_vopros_'+value).append(
'+value+'">'+
'+value+'">'
);
}
//если тест
if(data[1][result]['type'] == "test") {
$('#create_vopros_'+value).append(
'
'+
'+value+'">'+

'+value+'">'+
'+value+'" type="text">'+

'+value+'">'+
'+value+'" type="text">'+

'+value+'">'+
'+value+'" type="text">'+

'+value+'">'+
'+value+'" type="text">'+
'
'
);

//отметить радибаттон
if(data[1][result]['active'] == "0") {
$('#radio_but_1_'+value).attr('checked',true);
}
if(data[1][result]['active'] == "1") {
$('#radio_but_2_'+value).attr('checked',true);
}
if(data[1][result]['active'] == "2") {
$('#radio_but_3_'+value).attr('checked',true);
}
if(data[1][result]['active'] == "3") {
$('#radio_but_4_'+value).attr('checked',true);
}
}
}
}
}
});

/*открытие кнопок инструментов*/
var but1 = document.getElementById("but_create_test");
var but2 = document.getElementById("but_create_tes");
var but3 = document.getElementById("but_del_test");

but1.style.display = 'block';
but2.style.display = 'block';
but3.style.display = 'block';

//запись с скрытый инпут
$('#input_hidden_testId').val(link);
});