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

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

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

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

Добавлен: 04.05.2024

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

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

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



//подключение базы данных
include($_SERVER['DOCUMENT_ROOT']."/script-php/link-connect.php");

$action = $_POST['action'];

if
($action == 'del_user') {
del_user()
;
}
if($action == 'update_predmet') {
update_predmet(
$conn);
}
if($action == 'proverka_del_predmet') {
proverka_del_predmet(
$conn);
}
if($action == 'new_predmet') {
new_predmet(
$conn);
}
if($action == 'del_tochno_predmet') {
del_tochno_predmet(
$conn);
}
if($action == 'new_prepod') {
new_prepod(
$conn);
}
if($action == 'red_content') {
red_content(
$conn);
}

//Функция выхода с сессии
function del_user() {
session_start()
;
$_SESSION = array();

session_destroy();

echo
"1";
}


//функция Update преподователя
function update_predmet($conn) {
$id_predmet = $_POST['id_predmet'];
$input_upt_predmet = $_POST['input_upt_predmet'];
$sql_upt_predmet = "UPDATE `predmet` SET `name_predmet` = '$input_upt_predmet' WHERE `id_predmet` = '$id_predmet'";
$queru_upt_predmet = mysqli_query($conn, $sql_upt_predmet);
echo
$input_upt_predmet;
}


//функция проверки привязки предмета к преподователю перед удалением
function proverka_del_predmet($conn) {
$id_predmet = $_POST['id_predmet'];
$sql_predmet = "SELECT * FROM `predmet` WHERE `id_predmet` = '$id_predmet'";
$array_predmet = mysqli_fetch_array(mysqli_query($conn, $sql_predmet));

if
($array_predmet['active'] == "1") {
echo "
У предмета есть преподователь, вы уверены что хотите удалить обоих?";
}
else {
mysqli_query(
$conn, "DELETE FROM `predmet` WHERE `id_predmet` = '$id_predmet'");
}
}


//функция окочнательного удаления предмета
function del_tochno_predmet($conn) {
$id_predmet = $_POST['id_predmet'];
$id_predmet = $_POST['id_predmet'];
$sql_predmet = "DELETE FROM `predmet` WHERE `id_predmet` = '$id_predmet'";
$query_predmet = mysqli_query($conn, $sql_predmet);

if
($query_predmet) {
echo "Все удалено!";
}
else {
echo "Что-то пошло не так(";
}
}

//функиця добавления нового предмета
function new_predmet($conn) {
$input_new_predmet = $_POST['input_new_predmet'];
$query_new_predmet = mysqli_query($conn,"INSERT `predmet` (name_predmet, id_prepod, active) VALUES ('$input_new_predmet', NULL, '0')");

$array_predmet = mysqli_fetch_array(mysqli_query($conn, "SELECT * FROM `predmet` WHERE `name_predmet` = '$input_new_predmet'"));
echo
$array_predmet['id_predmet'];
}


//Добавление нового преподователя
function new_prepod($conn) {
$login = $_POST['login'];
$pass = $_POST['pass'];
$surname = $_POST['surname'];
$name = $_POST['name'];
$patronymic = $_POST['patronymic'];
$id_predmet = $_POST['id_predmet'];

$array_prepod = mysqli_fetch_array(mysqli_query($conn, "SELECT * FROM `users` WHERE `login` = '$login'"));
if
(!$array_prepod) {
$id_users = time()*20;

$pass_hash = password_hash($pass, PASSWORD_DEFAULT);
mysqli_query($conn, "INSERT `users` (`login`, `pass`, `role`, `id_users`) VALUES ('$login', '$pass_hash', 'prepod', '$id_users')");
mysqli_query($conn, "INSERT `prepod` (`id_users`, `surname`, `name`, `patronymic`, `id_predmet`) VALUES ('$id_users', '$surname', '$name', '$patronymic', '$id_predmet')");

$array_predmet = mysqli_fetch_array(mysqli_query($conn, "SELECT * FROM `prepod` WHERE `id_users` = '$id_users'"));
$id_prepod = $array_predmet['id_prepod'];
mysqli_query($conn, "UPDATE `predmet` SET `id_prepod`= '$id_prepod', `active` = '1' WHERE `id_predmet`='$id_predmet'");
$array_predmet2 = mysqli_fetch_array(mysqli_query($conn, "SELECT * FROM `predmet` WHERE `id_predmet` = '$id_predmet'"));
echo
$array_predmet2['name_predmet'];
}
else {
echo "0";
}
}


//Редактирование контента на js-редакторе
function red_content($conn) {
$text_content = $_POST['val_redactor'];

mysqli_query($conn, "UPDATE `content` SET `text_content`= '$text_content' WHERE `id`='1'");
echo
$text_content;
}


Листинг 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(window.crypto && window.crypto.getRandomValues) {
return Array(length)
.fill(charset)
.map(x => x[Math.floor(crypto.getRandomValues(new Uint32Array(1))[0] / (0xffffffff + 1) * (x.length + 1))])
.join('');
} else {
res = '';
for (var i = 0, n = charset.length; i < length; ++i) {
res += charset.charAt(Math.floor(Math.random() * n));
}
return res;
}
}
}

$(document).ready(function() {
menu_admin();

});


function menu_admin() {
var x1 = document.getElementById("div_action_admin_1");
var x1_but = document.getElementById("admin_menu_1");

var x2 = document.getElementById("div_action_admin_2");
var x2_but = document.getElementById("admin_menu_2");

var x3 = document.getElementById("div_action_admin_3");
var x3_but = document.getElementById("admin_menu_3");

$('#admin_menu_1').on('click', function() {
if (x1.style.display == 'block') {
x1.style.display = 'none';
x2.style.display = 'none';
x3.style.display = 'none';

x1_but.style.backgroundColor = 'inherit';
x2_but.style.backgroundColor = 'inherit';
x3_but.style.backgroundColor = 'inherit';
}
else {
x1.style.display = 'block';
x2.style.display = 'none';
x3.style.display = 'none';

x1_but.style.backgroundColor = 'red';
x2_but.style.backgroundColor = 'inherit';
x3_but.style.backgroundColor = 'inherit';
}
});

$('#admin_menu_2').on('click', function() {
if (x2.style.display == 'block') {
x1.style.display = 'none';
x2.style.display = 'none';
x3.style.display = 'none';

x1_but.style.backgroundColor = 'inherit';
x2_but.style.backgroundColor = 'inherit';
x3_but.style.backgroundColor = 'inherit';
}
else {
x1.style.display = 'none';
x2.style.display = 'block';
x3.style.display = 'none';

x1_but.style.backgroundColor = 'inherit';
x2_but.style.backgroundColor = 'red';
x3_but.style.backgroundColor = 'inherit';
}
});

$('#admin_menu_3').on('click', function() {
if (x3.style.display == 'block') {
x1.style.display = 'none';
x2.style.display = 'none';
x3.style.display = 'none';

x1_but.style.backgroundColor = 'inherit';
x2_but.style.backgroundColor = 'inherit';
x3_but.style.backgroundColor = 'inherit';
}
else {
x1.style.display = 'none';
x2.style.display = 'none';
x3.style.display = 'block';

x1_but.style.backgroundColor = 'inherit';
x2_but.style.backgroundColor = 'inherit';
x3_but.style.backgroundColor = 'red';
}
});
}


$('#spavn_index').on('click', function() {
var path_index = "/index.php";
window.location.href = path_index;
});

$('#but_admin_logaut').on('click', function() {

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

/////////////////////////////////////
//Система работы с предметом
////////////////////////////////////
//нажатие кнокпи update и появление поля редактирования
$('body').on('click',".upt_predmet", function() {
var id_predmet = $(this).attr('data-predmet');

var name_predmet = $(this).attr('data-name_predmet');

$('#id_predmet_'+id_predmet).empty();
$('#id_predmet_'+id_predmet).append("");
});

//нажатие на кнопку сохранить
$('body').on('click',".but_upt_save", function() {

var id_predmet = $(this).attr('data-predmet');
var input_upt_predmet = $('#id_upd_predmet_'+id_predmet).val();

//Update предмета
$.ajax({
url: 'script-php/function.php',
method: 'post',
dataType: 'html',
data: {action:'update_predmet', id_predmet:id_predmet, input_upt_predmet:input_upt_predmet},
success: function(data){
if(data) {
$('#id_predmet_'+id_predmet).empty();
$('#id_predmet_'+id_predmet).append("Наименование: "+input_upt_predmet+""+
""+
"");
}
else {
alert("что-то пошло не так(");
}
}
});
});


//удалить предмет
$('body').on('click',".del_predmet", function() {

//проверка предмета на привязку
var id_predmet = $(this).attr('data-predmet');

$.ajax({
url: 'script-php/function.php',
method: 'post',
data: {action:'proverka_del_predmet', id_predmet:id_predmet},
success: function(data){
if(data) {
var result = confirm(data);

if(result) {
$.ajax({
url: 'script-php/function.php',
method: 'post',
dataType: 'html',
data: {action:'del_tochno_predmet', id_predmet:id_predmet},
success: function(data){
$('#id_predmet_'+id_predmet).remove();
alert(data);
}
});
}
else {
alert("Тогда не будем)!");
}
}
else {
alert("Good Delete");
$('#id_predmet_'+id_predmet).remove();
}
}
});
});

/*$('#but_click').on('click', function() {
var result = confirm("Do you want to continue?");

if(result) {
alert("OK Next lesson!");
} else {
alert("Bye!");
}
});*/


//Функция добавления преподователя
$('body').on('click',".button_new_predmet", function() {

var input_new_predmet = $('.input_new_predmet').val();
if(input_new_predmet.length >= 4) {
$.ajax({
url: 'script-php/function.php',
method: 'post',
data: {action:'new_predmet', input_new_predmet:input_new_predmet},
success: function(data){
$('.div_select_predmet').append("
+data+" class=colom_predmet>Наименование: "+input_new_predmet+""+
""+
"
");
$('.div_new_prepod_input').append("");
}
});
}
else {
alert("Проверьте!");
}
});

$('body').on('click',"#button_new_prepod", function() {
var login = $('#new_login').val();
var pass = $('#new_pass').val();
var surname = $('#new_surname').val();
var name = $('#new_name').val();
var patronymic = $('#new_patronymic').val();
var id_predmet = $('#select_option_prepod').val();

if((login.length >= 4)&&(pass.length >= 4)&&(surname.length >= 4)&&(name.length >= 4)&&(patronymic.length >= 4)) {