Файл: Анализ тз 2 Рассмотрение тз. 2 Глава проектирование веб приложения 6 Диаграммы вариантов использования. 6.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 04.05.2024
Просмотров: 43
Скачиваний: 0
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
$conn = mysqli_connect("localhost", "admin", "admin", "site_kafedra");
Весь код с обработкой клавиш в прохождении теста записан в листинге 1.
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,
!@#%^-_
\$\?\(\)\{\}\[\]\.]";
$name = mb_eregi_replace($pattern, '-', $file['name']);
$name = mb_ereg_replace('[-]+', '-', $name);
$parts = pathinfo($name);
if (empty($name) || empty($parts['extension'])) {
$error = 'Недопустимый тип файла';
}
elseif (!empty($allow) && !in_array(strtolower($parts['extension']), $allow)) {
$error = 'Недопустимый тип файла';
}
elseif (!empty($deny) && in_array(strtolower($parts['extension']), $deny)) {
$error = 'Недопустимый тип файла';
}
else {
// Перемещаем файл в директорию.
if (move_uploaded_file($file['tmp_name'], $path . $name)) {
// Далее можно сохранить название файла в БД и т.п.
mysqli_query($conn, "UPDATE `content` SET `img_content`= '$name' WHERE `id`='1'");
$success = '
Файл «' . $name . '» успешно загружен.
';
}
else {
$error = '3Не удалось загрузить файл.';
}
}
}
}
// Вывод сообщения о результате загрузки.
if (!empty($error)) {
$error = '
' . $error . '
';
}
$data = array(
'error' => $error,
'success' => $success,
'img_name' =>$name,
);
header('Content-Type: application/json');
echo json_encode($data, JSON_UNESCAPED_UNICODE);
exit();
?>
Основной функционал администратора расписан в листингах 4-5.
Вывод
В рамках данного обучающего проекта было выполнены задачи такие как:
Для пользователя возможность смотреть информацию на главной странице, проходить тест.
Для администратора есть возможность добавлять преподавателей и предметы, а также редактирование основной информации.
Для преподавателя есть возможность создавать новые тестовые задания. Ключевым фактором есть то, что в тесте есть возможность выбирать тип вопроса (тестовый или строковый), что дает возможность развить систему далее. Также плюсом есть что преподаватель может вернутся к своему старому тесту и сделать правки, либо же полностью удалить его.
Продумана система работы самого теста и его взаимодействия со студентом, а именно: добавлено ограничение во времени, есть возможность проходить тест не по порядку, есть возможность видеть сколько правильно уже отвечено вопросов. В случае если студент не укладывается вовремя, система завершает сама работу теста и подсчитывает те вопросы, которые студент успел ответить, не отвеченные вопросы системы считает – неправильными.
По окончанию прохождения теста, собирается информация о прохождении каждого теста для статистики учебного заведения.
Задача помогла развить навыки работы с языка в паре как js, так и php, за действуя каждый в нужном месте, реализовано с работой на ООП, для более удобного написания кода и возможностей развития проекта в дальнейшем.
Доступы к кабинетам для администратора: admin , admin
Доступы к кабинетам для преподавателя: prepod, prepod
База данных сохранена в кодировке utf-8 general ci
Приложение
Листинг 1(test.js)
//функция записи Теста в массив
function getTest(){
//скрытый инпут ссылка на тест
var link = $('#link_test').val();
let result = [];
$.ajax({
url: '../role/prepod/script-php/function.php',
method: 'post',
dataType : "json",
async:false,
data: {action:'arrayTest', link:link},
success: function(data){
result = data;
}
});
return result;
};
//запись в переменную массива с тестом
var data = getTest();
//кнопка начать тест
$('body').on('click',"#startTest", function() {
var input1 = $('#input1').val();
var input2 = $('#input2').val();
var input3 = $('#input3').val();
var input4 = $('#input4').val();
var input5 = $('#input5').val();
var input6 = $('#input6').val();
//проверка всех полей
//if((input1.length >= 4) && (input2.length>= 4) && (input3.length>= 4) && (input4.length>= 4) && (input5.length>= 4) && (input6.length>= 1)) {
//if((input1 != 0) && (input2 != 0) && (input3 != 0) && (input4 != 0) && (input5 != 0) && (input6 != 0)) {
alert("Начинаем Тест");
var count = $('#num_voprosov').val();
//цикл записи вопросов
for (let value=1; value<=count; value++){
var result = parseFloat(value)-1;
//если строка
if(data[1][result]['type'] == "stroka") {
$('.testAction').append(
'
+value+'" >'+
'
'
'
''
'+
'Вопрос №'+value+''+
''+data[1][result]['name_question']+''+
''+
'
'+'Вопрос №'+value+''+
''+data[1][result]['name_question']+''+
''+
'
'
'+
''+
'
'+''+
'
'
);
}
//если тест
if(data[1][result]['type'] == "test") {
$('.testAction').append(
'
+value+'" >'+
'
'
'
''
'+
'Вопрос №'+value+''+
''+data[1][result]['name_question']+''+
''+
'
'+'Вопрос №'+value+''+
''+data[1][result]['name_question']+''+
''+
'
'
'+
'
'
'
'
'
'+'
'+
''+
''+
'
'+''+
''+
'
'
'+
''+
''+
'
'+''+
''+
'
'
'+
''+
''+
'
'+''+
''+
'
'
'+
''+
''+
'
'+''+
''+
'
'
'
);
}
}
//запускаем таймер
$('#countdown-1').timeTo(1200, function () {
resultTest();
});
//открываем кнопки
var startTest = document.getElementById("startTest");
startTest.style.display = 'none';
var finishTest = document.getElementById("finishTest");
finishTest.style.display = 'block';
//открываем первый блок с вопросами
var id_van_block = document.getElementById("1");
id_van_block.style.display = 'block';
//}
//else alert("Проверьте введенные Данные!");
//}
//else alert("Проверьте введенные Данные!");
});
//кнопка подвердить вопрос
$('body').on('click',".but_good_vopros", function() {
function proverka(){
//открываем сдедующий вопрос
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"){
var id_van_block = document.getElementById(i);
id_van_block.style.display = 'block';
chet = 1;
}
}
if(!chet){
$('#countdown-1').timeTo(1, function () {});
resultTest();
}
return;
}
var data_type = $(this).attr('data-type');
var data_id_vopros = $(this).attr('data-id-vopros');
//переменная для массива по счету вопроса
var amout = data_id_vopros-1;
//проверка внесен ли ответ
if(data_type == "stroka") {
var value_input_otvet = $("#input_otvet_"+data_id_vopros).val();
if((value_input_otvet.length == 0)) {
alert("Запишите ответ!");