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

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

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 22.03.2018
Размер файла 411,7 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

dialog.find('#status_group').addClass('no-display');

dialog.find('#serial-group').addClass('no-display');

dialog.find('#subject-div').addClass('no-display');

dialog.find('#subject-select-div').removeClass('no-display');

dialog.find('#subject').text("");

dialog.find('#student-div').addClass('no-display');

dialog.find('#student-select-div').removeClass('no-display');

dialog.find('#student').text("");

dialog.find('#price').val("");

dialog.find('#add-to-journal-div').addClass('no-display');

dialog.find('#checkbox-to-journal-div').removeClass('no-display');

dialog.modal('show');

//Добавляем/убираем описание серии событий

//при клике по checkbox "Повторяющееся событие"

$('#with-serial').on('change', function() {

if ($(this).prop('checked')) {

$('#repeat').fadeIn().show();

} else {

$('#repeat').fadeOut(300);

}

});

//Добавляем описание занятия при клике по checkbox "Занятие"

$('#with-lesson').on('change', function() {

if ($(this).prop('checked')) {

$('#lesson').fadeIn().show();

} else {

$('#lesson').fadeOut(300);

}

});

//Добавляем функцию создания события по кнопке "Сохранить"

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

var date_start = dialog.find('#dateStart').val();

var new_event = {

name: dialog.find('#name').val(),

repeatCode: dialog.find('#with-serial').prop('checked')

? dialog.find('#repeat_code').val() : 'NEVER',

dateStart: date_start,

dateEnd: dialog.find('#with-serial').prop('checked')

? dialog.find('#dateEnd').val() : date_start,

timeStart: dialog.find('#timeStart').val(),

timeEnd: dialog.find('#timeEnd').val(),

comment: dialog.find('#description').val()

};

saveEvent(JSON.stringify(new_event));

//Закрываем модальное окно

dialog.modal('hide');

});

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

//по кнопке "Закрыть" или "Удалить"

$('#delete_btn, .close_btn').on('click', function() {

dialog.modal('hide');

$('#event_new').remove();

})

});

}

//Функция, закрашивающая все td, начиная с td1 вниз

//до td с координатами x и y

function paint_by_coord(td1, x, y) {

var row = td1.closest('tr').index();

var col = td1.index() + ((row + 1) % 2);

$('tr').each(function() {

var tr = $(this);

tr.find('td').each(function() {

var td = $(this);

if (td.index() + ((tr.index() + 1) % 2) === col

&& tr.index() >= row

&& tr.index() <= $(document

.elementFromPoint(x, y)).closest('tr').index()) {

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

}

})

})

}

//Функция, преобразующая номер ряда в время формата 18:59

/(по верхней границе div)

unction rowToTimeTop(row) {

var hour = Math.floor((row - 1) / 2);

var minute = ((row + 1) / 2 % 1) * 60;

return (hour === 0 ? "00" : hour < 10 ? "0" + hour : hour) +

":" + (minute === 0 ? "00" : minute) + ":00";

}

//Функция, преобразующая номер ряда в время формата 18:59

//(по нижней границе div)

function rowToTimeBot(row) {

var hour = Math.floor(row / 2);

var minute = (row / 2 % 1) * 60;

return (hour === 0 ? "00" : hour < 10 ? "0" + hour : hour) +

":" + (minute === 0 ? "00" : minute) + ":00";

}

//Функция создания события на сервере

function saveEvent(event) {

$.ajax({

type: "POST",

datatype: "json",

contentType: "application/json; charset=utf-8",

processData: false,

url: "http://localhost:8080/rest/event",

headers: {

'idTutor': getCookie("idTutor")

},

data: event

}).then(function (data) {

//Перерисовываем все события календаря

$('div').remove('.event');

draw_events();

})

}

Листинг students.js

function show_students() {

$.ajax({

type: "GET",

datatype: "json",

url: "http://localhost:8080/rest/student",

headers: {

'idTutor': getCookie("idTutor")

}

}).then(function (data) {

$.each(data, function () {

var id_student = this.id;

var panel = $(

"<div class=\"row student\">" +

"<div class=\"col-lg-8\">" +

"<div class=\"panel panel-primary\">" +

" <div class=\"panel-heading " +

"clickable panel-to-collapse\">" +

this.firstName + " " + this.lastName +

"<span class=\"pull-right\">" +

"<i class=\"glyphicon glyphicon-chevron-up\">" +

"</i></span>" +

" </div>" +

" <div class=\"panel-body\">" +

" Домашний адрес: " +

this.address + "<br/>" +

" Контакты: " +

" <ul id='contacts" + id_student + "'>" +

"</ul>" +

" </div>" +

" <div class='panel-footer'>" +

" <button type='button' " +

"class='btn btn-info update-student'>Редактировать" +

"</button>" +

" <button " +

"class='btn btn-danger remove-student'>Удалить</button>" +

" </div>" +

" </div>" +

"</div>" +

"</div>"

);

panel.find('.panel')

data('id', id_student)

data('firstName', this.firstName)

data('lastName', this.lastName)

data('address', this.address)

data('contacts', this.contacts);

$('#student-list').append(panel);

$.each(this.contacts, function () {

var contact_info = $(

"<li>" +

this.contactName.name + " - " + this.value +

"</li>");

$('#contacts' + id_student).append(contact_info);

})

});

});

buttons();

}

//обработчики событий для кнопок

function buttons() {

//развернуть все панели с информацией про студентов

$('#open_students').off('click').on('click', function () {

$('.panel div.clickable').each(function (i, elem) {

var $elem = $(elem);

$elem.parents('.panel').find('.panel-body').slideDown();

$elem.parents('.panel').find('.panel-footer').slideDown();

$elem.addClass('panel-to-collapse');

$elem.find('i').removeClass('glyphicon-chevron-down')

.addClass('glyphicon-chevron-up');

})

});

//свернуть все панели с информацией про студентов

$('#close_students').off('click').on('click', function () {

$('.panel div.clickable').each(function (i, elem) {

var $elem = $(elem);

$elem.parents('.panel').find('.panel-body').slideUp();

$elem.parents('.panel').find('.panel-footer').slideUp();

$elem.removeClass('panel-to-collapse');

$elem.find('i').removeClass('glyphicon-chevron-up')

.addClass('glyphicon-chevron-down');

})

});

//добавить контакт к списку

$('#add_contact').off('click').on('click', function (e) {

e.preventDefault();

add_contact();

});

//создать нового студента

$('#create_student').off('click').on('click', function () {

var dialog = $('#modal_create_student');

add_autocomplete();

dialog.modal('show');

//Сохраняем нового студента

$('#save_student_btn').off('click')

.on('click', function () {

save_student('create');

});

});

//Закрываем модальное окно по кнопке "Закрыть"

$('.close_btn').off('click').on('click', function () {

$('#modal_create_student').modal('hide');

clear_modal();

});

//при нажатии кнопки "редактировать"

$(document).off('click', '.update-student')

.on('click', '.update-student', function () {

var studentCard = $(this.closest('.panel'));

//Переназначаем обработчик для кнопки "сохранить"

$('#save_student_btn').off('click')

.on('click', function () {

save_student('update');

});

//заполняем данными форму модального окна

var dialog = $('#modal_create_student');

dialog.data('id', studentCard.data('id'));

dialog.find('#firstName').val(studentCard.data('firstName'));

dialog.find('#lastName').val(studentCard.data('lastName'));

dialog.find('#address').val(studentCard.data('address'));

dialog.find('.modal-title').text('Студент');

$(studentCard.data('contacts'))

.each(function (i, elem) {

if (i > 0) {

add_contact();

}

dialog.find('.contact').filtr(':last')

.data('id', elem.id);

dialog.find('.contact-name-inputs').filter(':last')

.data('id', elem.contactName.id);

dialog.find('.contact-name-inputs').filter(':last')

.val(elem.contactName.name);

dialog.find('.contact-value-inputs').filter(':last')

.val(elem.value);

});

dialog.modal('show');

});

}

//функция добавления еще одного поля контакта к списку

function add_contact() {

var newContactRow = $("<div class='contact'>" +

"<div class=\"form-group\">\n" +

" <label for=\"contact_name\" class=\"col-lg-3\"></label>\n" +

" <div class=\"col-lg-3\">\n" +

" <input id=\"contact_name\" type=\"text\" " +

"class=\"form-control contact-name-inputs autocomplete\"\n" +

" placeholder=\"Например, &quot;телефон&quot;\">\n" +

" </div>\n" +

" <label for=\"contact_value\" class=\"sr-only\"></label>\n" +

" <div class=\"col-lg-3\">\n" +

" <input id=\"contact_value\" type=\"text\" " +

"class=\"form-control contact-value-inputs\">\n" +

" </div>\n" +

" <div class=\"col-lg-1\">\n" +

" <button class=\"remove_contact btn btn-danger\">" +

"<i class=\"glyphicon glyphicon-remove\"></i></button>\n" +

" </div>" +

"</div></div>");

if (!($('.contact').length)) {

newContactRow.find('label').text('Контакты');

}

$('#contact_group').append(newContactRow);

//добавление обработчика для кнопки - удаление контакта из списка

remove_contact_on_click();

//добавление автодополнения

add_autocomplete();

}

//добавление автодополнения к полям типа "contact_name"

function add_autocomplete() {

var tips = [];

$.ajax({

type: "GET",

datatype: "json",

url: "http://localhost:8080/rest/contactname",

headers: {

'idTutor': getCookie("idTutor")

}

}).then(function (data) {

$.each(data, function () {

tips.push(this.name);

});

});

$('.contact-name-inputs')

.autocomplete({

source: tips

})

.prop('autocomplete', 'on');

}

//удаление контакта из списка

function remove_contact_on_click() {

$('.remove_contact').on('click', function (e) {

e.preventDefault();

this.closest('.contact').remove();

})

}

//Функция сохранения карточки студента;

//Для key='create' - создание нового студента

//Для key='update' - обновление информации про студента

function save_student(key) {

var query = 'http://localhost:8080/rest/student';

var method;

var dialog = $('#modal_create_student');

if (key === 'create') {

method = 'POST';

} else if (key === 'update') {

method = 'PUT';

query += '/' + dialog.data('id');

}

var contact;

var contacts = [];

$('.contact').each(function(i, elem) {

var $elem = $(elem);

contact = {

id: $elem.data('id'),

idStudent: dialog.data('id'),

contactName: {

id: $elem.find('.contact-name-inputs').data('id'),

name: $elem.find('.contact-name-inputs').val()

},

value: $elem.find('.contact-value-inputs').val()

};

contacts.push(contact);

});

var student = {

firstName: dialog.find('#firstName').val(),

lastName: dialog.find('#lastName').val(),

address: dialog.find('#address').val(),

contacts: contacts

};

$.ajax({

type: method,

datatype: "json",

contentType: "application/json; charset=utf-8",

processData: false,

url: query,

headers: {

'idTutor': getCookie("idTutor")

},

data: JSON.stringify(student)

}).then(function() {

$('div').remove('.student');

show_students();

});

dialog.modal('hide');

clear_modal();

}

//обработка щелчка по верху панели с информацией о студенте

$(document).on('click', '.panel div.clickable', function () {

var $this = $(this);

if ($this.hasClass('panel-to-collapse')) {

$this.parents('.panel').find('.panel-body').slideUp();

$this.parents('.panel').find('.panel-footer').slideUp();

$this.removeClass('panel-to-collapse');

$this.find('i').removeClass('glyphicon-chevron-up')

.addClass('glyphicon-chevron-down');

} else {

$this.parents('.panel').find('.panel-body').slideDown();

$this.parents('.panel').find('.panel-footer').slideDown();

$this.addClass('panel-to-collapse');

$this.find('i').removeClass('glyphicon-chevron-down')

.addClass('glyphicon-chevron-up');

}

});

//очистка формы модального окна

function clear_modal() {

var dialog = $('#modal_create_student');

dialog.find('#firstName').val('');

dialog.find('#lastName').val('');

dialog.find('#address').val('');

dialog.find('.contact').not(':first').remove();

dialog.find('#contact_name').val('');

dialog.find('#contact_value').val('');

dialog.find('.modal-title').text('Новый студент');

}

Листинг subjects.js

function show_subjects() {

$.ajax({

type: "GET",

datatype: "json",

url: "http://localhost:8080/rest/theme/tree/parent?idParent=",

headers: {

'idTutor':getCookie("idTutor")

}

}).then(function(themes) {

draw_tree(themes);

$('#ul_0').addClass('first-theme-ul');

set_handlers();

})

}

function draw_tree(tree) {

//Формируем список для вывода

if (tree !== null) {

var idParent = tree[0].idParent;

var id = idParent === null ? 0 : idParent;

var ul_node = $(

"<ul id='ul_" + id + "'>" +

"</ul>");

$.each(tree, function () {

var glyph = this.children === null

? "glyphicon-tag" : "glyphicon-tags";

var node = $(

"<li id = 'li_" + this.id + "'>" +

"<div class=\"panel panel-default theme-item\">\n" +

" <div class=\"panel-body\">" +

" <i class=\"glyphicon " + glyph + "\" " +

"aria-hidden=\"true\"></i>" +

" <span>" + this.name + "</span>" +

" <button id='del_btn_li_" + this.id +

"' class='btn btn-danger pull-right del_theme_btn'>" +

"<i class=\"glyphicon glyphicon-trash\" " +

"aria-hidden=\"true\">" +

"</i>Удалить</button>" +

" <button id='create_btn_li_" + this.id +

"' class='btn btn-success pull-right create_theme_btn'>" +

"<i class=\"glyphicon glyphicon-pencil\" " +

"aria-hidden=\"true\">" +

"</i>Создать</button>" +

"</div>" +

"</div>" +

"</li>");

ul_node.append(node);

});

//Ищем место, куда записать список

var place;

if (idParent === null) {

place = $('#subject-list');

} else {

place = $('#li_' + idParent);

}

place.append(ul_node);

//Рисуем всех "детей"

$.each(tree, function() {

draw_tree(this.children)

});

//Обработчик события для кнопки "Удалить"

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

$('.del_theme_btn').off('click').on('click', function() {

var idTheme = this.id.substr(11);

$.ajax({

type: "DELETE",

datatype: "json",

contentType: "application/json; charset=utf-8",

processData: false,

url: "http://localhost:8080/rest/theme/" + idTheme,

headers: {

'idTutor': getCookie("idTutor")

}

}).then(function(data) {

$('#li_' + idTheme).remove();

});

});

//Обработчик события для кнопки "Добавить"

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

$('.create_theme_btn').off('click').on('click', function() {

var $this = $(this);

var idParent = this.id.substr(14);

var create_theme_form = $(

"<li id = 'li_parent_" + idParent + "'>" +

"<div class=\"panel panel-default theme-item\">\n" +

" <div class=\"panel-body\">" +

" <form>\n" +

" <div class=\"form-group\">\n" +

" <div class=\"col-lg-3\">\n" +

" <label for=\"theme_name\" " +

"class=\"col-lg-2 control-label\">Название</label>\n" +

" <input id=\"theme_name\" type=\"text\" " +

"class=\"form-control\">\n" +

" </div>\n" +

" <div class=\"col-lg-3\">\n" +

" <label for=\"theme_comment\" " +

"class=\"col-lg-2 control-label\">Комментарий</label>\n" +

" <input id=\"theme_comment\" type=\"text\" " +

"class=\"form-control\">\n" +

" </div>\n" +

" </div>\n" +

" </form>" +

" <button class='btn btn-danger pull-right " +

"delete_theme_form'>" +

"<i class=\"glyphicon glyphicon-trash\" " +

"aria-hidden=\"true\"></i>Удалить</button>" +

" <button class='btn btn-primary pull-right " +

"save_theme_form'>" +

"<i class=\"glyphicon glyphicon-ok\" " +

"aria-hidden=\"true\"></i>Сохранить</button>" +

"</div>" +

"</div>" +

"</li>");

//Ищем место для формы

var place = $('#ul_' + idParent);

if (place.length === 0) {

//Если место не найдено

place = $("<ul id='ul_" + idParent + "'></ul>");

create_theme_form.appendTo(place);

$this.closest('li').append(place);

} else {

//Если место найдено

create_theme_form.appendTo(place);

}

//Обработчик для кнопки "Удалить" в форме

$('.delete_theme_form').off('click').on('click', function() {

this.closest('li').remove();

});

//Обработчик для кнопки "Сохранить" в форме

$('.save_theme_form').off('click').on('click', function() {

var parent = this.closest('li');

var idParent = parent.id.substr(10);

var newTheme = {

idParentTheme: idParent,

name: $(parent).find('#theme_name').val(),

comment: $(parent).find('#theme_comment').val()

};

$.ajax({

type: "POST",

datatype: "json",

contentType: "application/json; charset=utf-8",

processData: false,

url: "http://localhost:8080/rest/theme",

headers: {

'idTutor': getCookie("idTutor")

},

data: JSON.stringify(newTheme)

}).then(function(theme) {

var addTheme = $(

"<li id = 'li_" + theme.id + "'>" +

"<div class=\"panel panel-default " +

"theme-item\">\n" +

" <div class=\"panel-body\">" +

" <i class=\"glyphicon glyphicon-tag\" " +

"aria-hidden=\"true\"></i>" +

" <span>" + theme.name + "</span>" +

" <button id='del_btn_li_" + theme.id + "' " +

"class='btn btn-danger pull-right del_theme_btn'>" +

"<i class=\"glyphicon glyphicon-trash\" " +

"aria-hidden=\"true\"></i>Удалить</button>" +

" <button id='create_btn_li_" + theme.id +

"' class='btn btn-success pull-right " +

"create_theme_btn'>" +

"<i class=\"glyphicon glyphicon-pencil\" " +

"aria-hidden=\"true\"></i>Создать</button>" +

"</div>" +

"</div>" +

"</li>");

$(parent).closest('ul').append(addTheme);

$(parent).remove();

});

});

});

}

}

//Обработчики событий для кнопок

function set_handlers() {

//Появление модального окна при клике на "Добавить дисциплину"

$('#create_subject').off('click').on('click', function() {

$('#new_subject').modal('show');

});

//Закрываем модальное окно по кнопке "Закрыть"

$('.close_btn').off('click').on('click', function() {

$('#new_subject').modal('hide');

clear_modal();

});

//Сохранение новой дисциплины

$('#save_subject_btn').off('click').on('click', function() {

var subject = {

name: $('#new_subject').find('#name').val()

};

$.ajax({

type: "POST",

datatype: "json",

contentType: "application/json; charset=utf-8",

processData: false,

url: "http://localhost:8080/rest/subject",

headers: {

'idTutor': getCookie("idTutor")

},

data: JSON.stringify(subject)

}).then(function (data) {

refresh_subject();

$('#new_subject').modal('hide');

clear_modal();

});

});

}

function clear_modal() {

$('#create_subject').find('#name').val('');

}

//Перезагрузка страницы

function refresh_subject() {

$('ul').remove();

show_subjects();

}

Размещено на Allbest.ur


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.