Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
отчет.docx
Скачиваний:
14
Добавлен:
07.03.2016
Размер:
743.99 Кб
Скачать

Введение

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

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

В настоящее время использование информационных систем в высших образовательных учреждениях не является редкостью. Спектр их применения широк и варьируется от автоматизации отдельно взятых рабочих мест до полной автоматизации деятельности ВУЗа.

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

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

С целью автоматизации планирования было разработано решение, упрощающее процесс создания электронного расписания интерактивными методами.

Для создания системы использовались языки программирования PHP, HTML5, CSS3 и JQuery, в качестве системы управления базами данных использовалась СУБД MySQL.

Глава 1 Теоретические основы автоматизированной системы расписания занятий

1.1 Понятие автоматизации

Следует начать с определения понятия «автоматизация». Под автоматизацией обычно понимают применение технических и программных средств, частично или полностью освобождающих человека от непосредственного участия в процессах получения, преобразования, передачи и использования материалов или информации.

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

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

Этап 1: постановка проблемы, оценка необходимости автоматизации и возможностей предприятия;

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

Этап 3: внедрение программного продукта;

Этап 4: послегарантийное обслуживание программно-аппаратного комплекса.

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

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

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

ГЛАВА 2 Разработка сайта

2.1 Постановка задачи

В рамках сайта необходимо разработать систему позволяющую облегчить возможность составления расписания. В качествене инструментов для разработки будем пользоваться такими языками программирования как: PHP, HTML5, CSS3, JQuery и MySQL.

2.2 Дизайн

В качестве основного принципа дизайна, было решено выбрать Material design от корпорации Google.

Material Design (рус. Материальный дизайн) — дизайн программного обеспечения и приложений операционной системы Android от компании Google. Впервые представлен на конференции Google I/O 25 июня 2014 года. Идея дизайна заключается в приложениях, которые открываются и сворачиваются как карточки, используя эффекты теней. По идее дизайнеров Google у приложений не должно быть острых углов, карточки должны переключаться между собой плавно и практически незаметно.

Material Design – это новый фреймворк, который, как верит Google, и создаст эту интуитивную модель. Это такой же революционный продукт, как, например, iPhone от Apple. В нем сочетаются гибкость и простота, которые помогут разобраться с новыми технологиями. И если Google выполнит свое обещание, и сможет привнести данную технологию во все свои продукты, включая web, Chrome OS и Android, она, действительно, поможет нам понять технологии, и избавит нас от необходимости подстраиваться под различные модели.

Примеры «Материального дизайна»:

Рисунок 1.1 –Отображение календаря на различных устройствах

В настоящее время существует многожество CSS фреймворков посвященных этому дизайну, одним из которых является materialize.css. Данная библиотека разработана студентами университета Карнеги-Меллона и является open-source продуктом (ссылка проекта на GitHub : https://github.com/dogfalo/materialize/) .

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

В итоге был получен адаптивый веб-дизайн динамически подстраивающийся под заданные размеры окна браузера.

Рисунок 1.2 –Вид сайта на устройствах более чем 992 пикселя в ширину

Рисунок 1.3 –Вид сайта на устройствах не более чем 992 пикселя в ширину

2.3 Структура базы данных

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

Burden

Таблица для хранения нагрузки преподавателя.

Структура таблицы burden:

b_id – ключевое поле, идентификатор

b_teacher_id – ссылка на идентификатор из таблицы teachers

b_subject_id – ссылка на идентификатор из таблицы subjects

b_quater – количество часов в неделю

b_half – количество часов в неделю

b_full – количество часов в неделю

b_course – курс

b_group – группа

b_faculty – факультет

Schedule

Таблица для хранения расписания.

Структура таблицы schedule:

sc_id – ключевое поле, идентификатор

sc_teacher_id – ссылка на идентификатор из таблицы teachers

sc_subject_id – ссылка на идентификатор из таблицы subjects

sc_position – характеристики пары

sc_row – строка в таблице расписания (номер пары)

sc_weekday – день недели

sc_course – курс

sc_group – группа

sc_faculty – факультет

Speciality

Таблица для хранения специальностей.

Структура таблицы speciality:

sp_id – ключевое поле, идентификатор

sp_titile – название специальности

sp_course – курс

sp_group – группа

sp_faculty – факультет

Teachers

Таблица для хранения преподавателей.

Структура таблицы teachers:

t_id – ключевое поле, идентификатор

t_title – инициалы преподавателя

Subjects

Таблица для хранения дисциплин.

Структура таблицы subjects:

sb_id – ключевое поле, идентификатор

sb_title – название специальности

Users

Таблица для хранения пользователей.

Структура таблицы users:

user_id – ключевое поле, идентификатор

name – имя

surname – фамилия

login – логин пользователя

password – пароль пользователя (хеш md5)

Рисунок 1.4 –Схема базы данных

2.4 Программная реализация

Физически сайт содержит корневую папку (www), внутри которой находятся файлы -index.php,adm.php,inf.php и папки –css,img,php,js.

www/

|--css/

| |--materialize.css

| |--main.css

|

|--img/

| |--penrose.png

|

|--php/

| |--changesession.php

| |--db_connect.php

| |--engagedcell.php

| |--exit.php

| |--footer.php

| |--insert.php

| |--login.php

| |--main.php

| |--nav.php

| |--reg.php

| |--remove.php

| |--select.php

| |--start.php

| |--tablecell.php

| |--updatecell.php

|

|--js/

| |--materialize.js

| |--main.js

|

|--index.php

|--adm.php

|--inf.php

Файл index.php является главным файлом сайта, а также благодаря ему страница динамически изменяется. Например, в случае если условие ниже верно – будет получена форма с авторизацией / регистрацией пользователя.

if(!$_SESSION["user"]){

// файл содержащий форму для входа/регистации

include("php/start.php");

}

В случае, если пользователь удачно вошел в систему, то условие пойдет по ветке «иначе» и будет получена страница другого вида.

else {

if(!$_GET["faculty"] || !$_GET["course"] || !$_GET["weekday"]){

echo "<script>location =

'index.php?faculty=1&course=1&weekday=1'</script>";

}

// введем обозначение

$faculty = $_GET["faculty"];

$course = $_GET["course"];

$weekday = $_GET["weekday"];

include("php/db_connect.php");

// забираем группы выбранным факультета и курсом

$sql = "

SELECT sp_title

FROM speciality

WHERE sp_course = ".$course."

AND sp_faculty = ".$faculty."

";

$query = mysql_query($sql) or die(mysql_error());

$g = 0;

while($row = mysql_fetch_array($query)){

$a[$g] = $row['sp_title'];

$g++;

}

// количество групп

$col = $g;

// забираем часы и предметы выбранного преподавателя

$sql = "

SELECT b_quater, b_half, b_full, t_name, t_id, sb_title, sb_id

FROM burden, teachers, subjects

WHERE burden.b_teacher_id = teachers.t_id

AND burden.b_subject_id = subjects.sb_id

AND b_course = ".$course."

AND b_faculty = ".$faculty."

";

$query = mysql_query($sql) or die(mysql_error());

$t_name = array();

$list = array();

$list_q = array();

$list_h = array();

$list_f = array();

$teachers_id = array();

$subjects_id = array();

while($row = mysql_fetch_array($query)){

$s = $row['t_name'];

if(!$list[$s]){

array_push($t_name, $s);

array_push($teachers_id, $row['t_id']);

$list[$s] = array();

$list_q[$s] = array();

$list_h[$s] = array();

$list_f[$s] = array();

$subjects_id[$s] = array();

}

array_push($list[$s], $row['sb_title']);

array_push($list_q[$s], $row['b_quater']);

array_push($list_h[$s], $row['b_half']);

array_push($list_f[$s], $row['b_full']);

array_push($subjects_id[$s], $row['sb_id']);

}

// Навигация/header-сайта

include("php/nav.php");

echo '

<div id="temp"></div>

<div class="row" id="sheet">

';

// Основное содержание страницы

include("php/main.php");

echo'

</div>

';

// Подвал/footer-сайта

include("php/footer.php");

}

Содержание файла start.php:

<?php

echo'

<div class="container">

<div class="row" >

<div class="col s12" id="sign-in">

<legend>Авторизация</legend>

<form action="/php/login.php" method="POST">

<input type="text" name="login"

placeholder="Введите логин пользователя">

<input type="password" name="password"

placeholder="Введите пароль пользователя">

<button type="submit" name="submit"

class="btn">Вход</button>

<button id="btn-reg" class="btn">Регистрация</button>

</form>

</div>

<div class="col s12" id="registration">

<legend>Регистрация</legend>

<form method="POST">

<input id="name" type="text" class="span4"

placeholder="Имя">

<input id="surname" type="text" class="span4"

placeholder="Фамилия" required>

<input id="login" type="text" class="span4" name="login"

placeholder="Логин" required>

<input id="pass" type="password" class="span4"

name="password" placeholder="Пароль" required>

<button id="reg" type="submit" name="submit"

class="btn" >Зарегистрироваться</button>

<button id="back-to-future" type="submit"

name="submit" class="btn" >Назад</button>

</form>

</div>

</div>

</div>

';

?>

Содержание файла nav.php:

<?php

echo '

<div class="navbar-fixed">

<nav>

<div class="nav-wrapper">

<a href="/" class="brand-logo center"

style="height:inherit">

<img src="img/penrose.png" alt="Logo" height="100%">

</a>

<a href="#" data-activates="mobile-demo"

class="button-collapse">

<i class="material-icons">menu</i></a>

<ul class="hide-on-med-and-down">

<li><a href="inf.php">Информация</a></li>

<li><a href="adm.php">Администрирование</a></li>

<li><a href="#" class="exit">Выход</a></li>

</ul>

<ul class="side-nav" id="mobile-demo">

<li><a href="inf.php">Информация</a></li>

<li><a href="adm.php">Администрирование</a></li>

<li><a href="#" class="exit">Выход</a></li>

</ul>

</div>

</nav>

</div>

';

?>

Содержание файла footer.php:

<?php

echo '

<footer class="page-footer">

<div class="footer-copyright">

<div class="container">

© 2015 Y. Pekkinen

</div>

</div>

</footer>

';

?>

Содержание файла main.php:

<?php

$w = array('Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота');

$c = array('I курс', 'II курс', 'III курс', 'IV курс' , 'V курс');

$f = array(

'Физико-математический факультет',

'Биологический факультет',

'Инжинерно-педагогический факультет',

'Факультет физической культуры',

'Факультет технологии',

'Филологический факультет'

);

echo '

<!-- Скрытые элементы -->

<div class="modal" id="modal1">

<div class="modal-content">

<h4>Предупреждение</h4>

<p>Сделать пару поточной?</p>

</div>

<div class="modal-footer">

<a href="#!" id="inside" class="modal-action modal-close

waves-effect waves-green btn-flat">Подтвердить</a>

<a href="#!" class="modal-action modal-close

waves-effect waves-green btn-flat">Отменить</a>

</div>

</div>

<div class="progress myLoader">

<div class="indeterminate"></div>

</div>

<!-- Интерфейс -->

<div class="col s12 m12 l4 ">

<div style="padding:10px" class="z-depth-1">

<select name="faculty" id="faculty" class="select">

';

// список факультетов

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

if($faculty == $i)

echo '<option value="'.$i.'" selected>

'.$f[$i-1].'</option>';

else

echo '<option value="'.$i.'">'.$f[$i-1].'</option>';

echo'

</select>

<select name="course" id="course" class="select">

';

// список курсов

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

if($course == $i)

echo '<option value="'.$i.'" selected>

'.$c[$i-1].'</option>';

else

echo '<option value="'.$i.'">'.$c[$i-1].'</option>';

echo'

</select>

<select name="day" id="weekday" class="select">

';

// список дней недели

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

if($weekday == $i)

echo '<option value="'.$i.'" selected>

'.$w[$i-1].'</option>';

else

echo '<option value="'.$i.'">'.$w[$i-1].'</option>';

echo'

</select>

</div>

<li class="divider"></li>

<!-- Список с преподователями и их нагрузкой -->

<div id="tt" style="margin:10px; padding:10px"

class="z-depth-1">

<ul class="collapsible popout" data-collapsible="accordion">

';

for($i=0; $i<count($t_name); $i++){

echo '

<li>

<div class="collapsible-header" tab="'.$i.'">

<i class="small material-icons">perm_identity</i>

'.$t_name[$i].'

<div class="right"><a class="disabled"

href="#">отчет</a></div>

</div>

<div class="collapsible-body">

';

$s = $t_name[$i];

for($j=0; $j<count($list[$s]); $j++) {

echo '

<div class="row burden-list"

t_id="'.$teachers_id[$i].'"

sb_id="'.$subjects_id[$s][$j].'">

<div class="left">

'.$list[$s][$j].'

</div>

<div class="right">

<div class="chip tooltipped waves-effect

waves-red" val="quater_c" data-position="top"

data-delay="100" data-tooltip="Четверть от

пары">

'.$list_q[$s][$j].'</div>

<div class="chip tooltipped waves-effect

waves-red"

val="half_c" data-position="top"

data-delay="100" data-tooltip="Половина от

пары">

'.$list_h[$s][$j].'</div>

<div class="chip tooltipped waves-effect

waves-red" val="full_c" data-position="top"

data-delay="100" data-tooltip="Целая

пара">'.$list_f[$s][$j].'</div>

</div>

</div>

';

}

echo '

</div>

</li>

';

}

echo'

</ul>

</div>

</div>

<!-- таблица с расписанием -->

<div class="col s12 m12 l8 z-depth-1" style="padding:10px;">

<table class="table">

<thead>

<tr>

</th>

</tr>

<tr>

<th></th>

';

// специальности

for($i=0; $i<$col; $i++)

echo "<th>".$a[$i]."</th>";

echo'

</tr>

</thead>

<tbody>

';

for($j=0; $j<6; $j++){

$s = "";

for($k=0; $k<$col; $k++)

$s = $s."<td row='".$j."' col='".$k."'></td>";

echo "<tr><td>".($j+1)."</td>".$s."</tr>";

}

echo'

</tbody>

</table>

</div>

';

?>

За интерактивность, взаимодействие сайта с пользователем отвечает файл main.js.

$(function(){

var b_w = 0; // ширина столбцов в таблице

var col_g = 0 // количество групп/столбцов на курсе

var obj; // перетаскиваемый объект

var row , col;

var position;

var b_size = 0;

var flow_couple = false;

var leet = 1337;

var step = [[0,0],[0,1],[1,0],[1,1]];

// массив "занятости" ячеек

var n = 12, m = 14;

var map = [];

for(var i=0; i<n; i++){

map[i] = [];

for(var j=0; j<m; j++)

map[i][j] = 0;

}

// дополняет строку str длины len "ведущими" нулями

function format_bin(str, len){

var l = len - str.length;

for(var i=0; i<l; i++)

str = "0" + str;

return str;

}

// нормирмализация стилей

function resize(){

var temp_row = $('.table tbody tr:eq(1)')[0];

if(!temp_row) return 0;

col_g = temp_row.childElementCount-1;

b_w =

(temp_row.clientWidth - temp_row.childNodes[0].clientWidth) /col_g;

$('.table tbody td:not(:nth-of-type(1))').css('width', b_w);

$('tbody td:not(:nth-of-type('+(col_g+1)+ 'n+1))').css({

padding:0,

margin:0

});

}

// событие возникающее при изменении размера браузера

window.onresize = resize;

resize();

// инициализация меню для телефонов

$(".button-collapse").sideNav();

// инициализация для модальных окон

$('.modal-trigger').leanModal();

// инициализация выпадающих списков

$('select').material_select();

// коллапс эффект

$('.collapsible').collapsible({

accordion : false

});

// забираем из кукес выбранного преподавателя

$('.collapsible .collapsible-header').eq(

parseInt($.cookie('asd82eash28d28na')) || 0

).addClass('active');

$('.collapsible .collapsible-header').click(function(){

$('.collapsible .collapsible-header').removeClass('active');

$(this).addClass('active');

// заносим выбранного преподователя в кукес

$.cookie('asd82eash28d28na',$(this).attr('tab'),{expires:7});

});

// создает перетаскиваемый блок около курсора,

// а также отмечает клетки, на которые нельзя

// или можно поставить условно (поточная) пару

$('.burden-list .chip').click(function(){

if(parseInt($(this).text()) < 1) return;

$('.myLoader').show();

var temp = $(this).parent().parent();

var div = document.createElement('div');

var block = $(div);

var w, h;

block.addClass($(this).attr('val'));

block.addClass('block');

if(block.hasClass('full_c'))

{w = b_w; h = 60;}

else if(block.hasClass('half_c'))

{w = b_w; h = 30;}

else

{w = b_w/2; h = 30};

var el1 = event;

var el2 = $('#temp')[0].getBoundingClientRect();

var dx = el1.clientX - el2.left - w/2;

var dy = el1.clientY - el2.top - h/2;

block.css({

width: w,

height: h,

lineHeight: h+'px',

left: dx,

top: dy

});

block.attr({

t_id : temp.attr('t_id'),

sb_id : temp.attr('sb_id')

});

block.draggable({

drag: function(event, ui){

obj = $(this);

}

});

$('#temp').empty();

$('#temp').attr('style', 'margin-top: -70px !important;')

$('#temp').append(block);

// обращение к базе данных

$.post('/php/engagedcell.php',{

teacher_id: temp.attr('t_id'),

weekday : $('#weekday option:selected').attr('value')

})

.done(function(data){

$('.engaged').remove();

$('.flow').remove();

for(var i=0; i<n; i++){

for(var j=0; j<m; j++)

if(map[i][j] == leet || map[i][j] == -1)

map[i][j] = 0;

}

$('.myLoader').fadeOut(200);

data = JSON.parse(data);

if(!data) {

$('.myLoader').hide();

return;

}

for(var i=0; i<data.length; i++){

var r = parseInt(data[i].sc_row);

var pos = parseInt(data[i].sc_position, 2);

var row = (r-1)*2;

var div = $('tbody td:not(:nth-of-type('+(col_g+1)+ 'n+1))');

var ll = 0, rr = 0;

switch(pos){

case 15: ll = 0; rr = 4; break;

case 12: ll = 0; rr = 2; break;

case 3: ll = 2; rr = 4; break;

case 8: ll = 0; rr = 1; break;

case 4: ll = 1; rr = 2; break;

case 2: ll = 2; rr = 3; break;

case 1: ll = 3; rr = 4; break;

}

for(var c=1; c<col_g+1; c++){

if(c == data[i].sc_group) continue;

col = (c-1)*2;

for(var jk=ll; jk<rr; jk++){

if(map[row + step[jk][0]][col + step[jk][1]] == 0){

var block = document.createElement('div');

$(block).addClass('h_couple');

if(parseInt(data[i].sc_subject_id) ==

parseInt(temp.attr('sb_id'))){

$(block).addClass('flow');

map[row + step[jk][0]][col + step[jk][1]] = -1;

}

else{

$(block).addClass('engaged');

map[row + step[jk][0]][col + step[jk][1]] = leet;

}

if (jk % 2 == 0) $(block).css({

top: 30*Math.floor(jk / 2),

left: 0

});

else $(block).css({

top: 30*Math.floor(jk / 2),

right: 0

});

$(div[((r-1)*col_g+(c-1))]).append(block);

}

}

}

}

$('.myLoader').hide();

})

});

// забирает из базы данных пары,

// выгружает результат запроса на таблицу

function updataTable(){

$('.myLoader').show();

$.post('/php/tablecell.php',{

faculty: $('#faculty option:selected').attr('value'),

course : $('#course option:selected').attr('value'),

weekday: $('#weekday option:selected').attr('value')

})

.done(function(data){

data = JSON.parse(data);

if(!data) {

$('.myLoader').hide();

return;

}

for(var i=0; i<data.length; i++){

var r = parseInt(data[i].sc_row);

var c = parseInt(data[i].sc_group);

var pos = parseInt(data[i].sc_position, 2);

var row = (r-1)*2, col = (c-1)*2;

var block = document.createElement('div');

$(block).addClass('couple');

$(block).attr({

pos_x : data[i].sc_row,

pos_y : data[i].sc_group,

position : data[i].sc_position

});

switch(pos){

case 15:

$(block).addClass('d_couple');

$(block).css({top: 0, left:0});

// for(var k=0; k<4; k++)

map[row][col] = map[row+1][col] = map[row][col+1] =

map[row+1][col+1] = 4;

break;

case 12:

$(block).addClass('f_couple');

$(block).css({top: 0, left:0});

map[row][col] = map[row][col+1] = 2;

break;

case 3:

$(block).addClass('f_couple');

$(block).css({top: 30, left:0});

map[row+1][col] = map[row+1][col+1] = 2;

break;

case 8:

$(block).addClass('h_couple');

$(block).css({top: 0, left:0});

map[row][col] = 1;

break;

case 4:

$(block).addClass('h_couple');

$(block).css({top: 0, right:0});

map[row][col+1] = 1;

break;

case 2:

$(block).addClass('h_couple');

$(block).css({top: 30, left:0});

map[row+1][col] = 1;

break;

case 1:

$(block).addClass('h_couple');

$(block).css({top: 30, right:0});

map[row+1][col+1] = 1;

break;

}

$(block).addClass('tooltipped');

$(block).attr({

'data-position' : 'top',

'data-tooltip': data[i].sb_title

});

$(block).append(data[i].t_name

+ '<i class="tiny top right material-icons">clear</i>');

var div = $('tbody td:not(:nth-of-type('+(col_g+1)+'n+1))');

$(div[((r-1)*col_g+(c-1))]).append(block);

}

$('.tooltipped').tooltip();

// удаление пары

$('.couple i').click(function(){

$('.myLoader').show();

var couple = $(this).parent();

var position = couple.attr('position');

var row = couple.attr('pos_x');

var group = couple.attr('pos_y');

var faculty = $('#faculty option:selected').attr('value');

var b_size = 0;

if(couple.hasClass('d_couple'))

b_size = 2;

else if(couple.hasClass('f_couple'))

b_size = 1;

$.post('/php/remove.php',{

faculty: faculty,

position: position,

group: group,

row: row,

b_size: b_size

})

.done(function(data){

location.reload();

})

});

$('.myLoader').hide();

});

}

updataTable();

// добавление пары в базу данных

function includeIntoTable(obj, col, row, position, b_size){

var faculty = $('#faculty option:selected').attr('value');

var weekday = $('#weekday option:selected').attr('value');

var course = $('#course option:selected').attr('value');

var t_id = $(obj).attr('t_id');

var sbj_id = $(obj).attr('sb_id');

$('.myLoader').show();

$.post("/php/insert.php", {

faculty: faculty,

group: col,

row : row,

position: position,

teacher_id: t_id,

weekday: weekday,

course: course,

subject_id: sbj_id,

b_size: b_size

})

.done(function(data){

location.reload();

})

}

// событие при "бросании" перетаскиваемого блока

// на таблицу расписания

function insertToSchedule(event){

var el1 = $(obj)[0].getBoundingClientRect();

var el2 = $(this)[0].getBoundingClientRect();

var dx = (el1.top - el2.top < 30) ? 0 : 1;

var dy = (el1.left - el2.left < b_w/2) ? 0 : 1;

var flag = false;

var r = parseInt($(this).attr('row')) * 2;

var c = parseInt($(this).attr('col')) * 2;

if($(obj).hasClass('quater_c')){

var x = r+dx, y = c+dy;

if (map[x][y] <= 0){

row = (x>>1)+1;

col = (y>>1)+1;

position = format_bin( (8>>(dy+2*dx)).toString(2), 4 );

b_size = 0;

if(map[x][y]) {

$('#modal1 p').text('Сделать пару поточной?');

}

else {

$('#modal1 p').text('Добавить в расписание?');

}

$('#modal1').openModal();

}

}

else if($(obj).hasClass('half_c')){

var x = r+dx, y = c;

if(map[x][y]<=0 && map[x][y+1] <= 0){

row = (x>>1)+1;

col = (y>>1)+1;

position = format_bin( ( dx ? 3 : 12 ).toString(2), 4 );

b_size = 1;

if(map[x][y] || map[x][y+1]) {

$('#modal1 p').text('Сделать пару поточной?');

}

else {

$('#modal1 p').text('Добавить в расписание?');

}

$('#modal1').openModal();

}

}

else if(map[r][c]<=0 && map[r+1][c]<=0 && map[r][c+1]<=0

&& map[r+1][c+1]<=0){

var x = r, y = c;

row = (x>>1)+1;

col = (y>>1)+1;

position = format_bin( (15).toString(2), 4 );

b_size = 2;

if(map[x][y] || map[x+1][y] || map[x][y+1] || map[x+1][y+1]) {

$('#modal1 p').text('Сделать пару поточной?');

}

else {

$('#modal1 p').text('Добавить в расписание?');

}

$('#modal1').openModal();

}

}

// добавляем ячейкам таблицы обработчик события drop

var div = $('tbody td:not(:nth-of-type(' + (col_g+1) + 'n+1))');

div.droppable({

drop: insertToSchedule

});

// переход от формы для входа, к форме для регистрации

$('#btn-reg').click(function(e){

$('#sign-in').hide('slow', function(){

$('#registration').show('slow');

});

return false;

});

// переход от формы для регистрации, к форме для входа

$('#back-to-future').click(function(){

$('#registration').hide('slow', function(){

$('#sign-in').show('slow');

});

return false;

});

// (возможно вы сейчас наблюдаете мертвый код)

function alertErr(jq, text){

$(jq).after(

'<div class="alert alert-error"><a class="close" href="#"

data-dismiss="alert">×</a>'+text+'</div>'

);

}

// регистрация

$('#reg').click(function(){

var str;

var nEx = /^.{2,20}$/g;

var sEx = /^.{2,20}$/g;

var lEx = /^[a-zA-Z0-9_-]{4,16}$/g;

var pEx = /^[a-zA-Z0-9_-]{8,20}$/g;

$('.alert').remove();

var name = $("#name").val();

str = nEx.exec(name);

if(str == null || (str[0].length < name.length)){

alertErr('#registration legend', 'Неверно введено имя');

return false;

}

var surname = $("#surname").val();

str = sEx.exec(surname);

if(str == null || (str[0].length < surname.length)){

alertErr('#registration legend', 'Неверно введено фамилия');

return false;

}

var login = $("#login").val();

str = lEx.exec(login);

if(str == null || (str[0].length < login.length)){

alertErr('#registration legend', 'Неверный логин. <br> Логин

должен содержать от 4 до 16 символов (латински буквы,

нижнее подчеркивание, дефис).'

);

return false;

}

var pass = $("#pass").val();

str = pEx.exec(pass);

if(str == null || (str[0].length < pass.length)){

alertErr('#registration legend', 'Неверный пароль.<br>Пароль

должен содержать от 8 до 20 символов (латински буквы,

нижнее подчеркивание, дефис).'

);

return false;

}

$.post("/php/reg.php",{

name: name,

surname: surname,

login: login,

pass: pass

})

.done(function(data){

if(data){

location = '/';

}

else{

alertErr('#registration legend', 'Такой логин уже занят.');

}

})

.fail(function(){

alert('ajax ошибка');

});

return false;

});

// конец сессии

$('.exit').click(function(){

$.post("/php/exit.php").done(function(){location='/';});

});

// (возможно вы сейчас наблюдаете мертвый код)

$('.select').change(function(){

var faculty = $('#faculty option:selected').attr('value');

var course = $('#course option:selected').attr('value');

var weekday = $('#weekday option:selected').attr('value');

location = "/index.php?faculty="+faculty+

"&course="+course+"&weekday="+weekday;

});

$('#inside').click(function(){

includeIntoTable(obj, col, row, position, b_size);

})

});

Содержание файла engagedcell.php

<?php

include('db_connect.php');

$sql = "

SELECT sc_row, sc_group, sc_position, sc_subject_id

FROM schedule

WHERE sc_weekday = ".$_POST['weekday']."

AND sc_teacher_id = ".$_POST['teacher_id']."

";

$query = mysql_query($sql);

$i=0;

while($row = mysql_fetch_array($query)){

$global[$i] = $row;

$i++;

}

echo json_encode($global);

?>

Содержание файла tablecell.php

<?php

include('db_connect.php');

$sql = "

SELECT sc_row, sc_group, sc_position, sc_subject_id

FROM schedule

WHERE sc_weekday = ".$_POST['weekday']."

AND sc_teacher_id = ".$_POST['teacher_id']."

";

$query = mysql_query($sql);

$i=0;

while($row = mysql_fetch_array($query)){

$global[$i] = $row;

$i++;

}

echo json_encode($global);

?>