Разработка программного продукта для составления расписания репетитора
Анализ существующих решений для составления расписания репетитора. Разработка архитектуры программного продукта. Выбор инструментальных средств. Проектирование реляционной базы данных. Определение методики тестирования. Реализация интерфейса пользователя.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 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=\"Например, "телефон"\">\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
Подобные документы
Составление математической модели расписания в школе. Назначение и область применения программного продукта. Обоснование выбора инструментальных средств. Описание разработки, алгоритмов и методов решения, форматов данных и пользовательского интерфейса.
курсовая работа [1,6 M], добавлен 18.01.2012Реализация программного средства "Действия над матрицами". Разработка кода программного продукта на основе готовой спецификации на уровне модуля. Использование инструментальных средств на этапе отладки программного модуля. Выбор стратегии тестирования.
отчет по практике [296,1 K], добавлен 19.04.2015Разработка программного продукта, который позволяет формировать отчет о мобильных телефонах во всем мире. Реализация функций добавления, редактирования, поиска и вывода на печать отчета. Проектирование интерфейса пользователя. Описание рабочих модулей.
курсовая работа [6,6 M], добавлен 11.01.2017Общее описание разрабатываемого программного обеспечения, требования к его функциональности и сферы практического применения. Выбор инструментальных средств разработки. Проектирование структур баз данных и алгоритмов, пользовательского интерфейса.
дипломная работа [3,1 M], добавлен 19.01.2017Разработка алгоритма поставленной задачи и реализация средствами автоматизированного проектирования. Составление программного продукта на основе готовой спецификации на уровне модуля, проведение его тестирования, использование инструментальных средств.
контрольная работа [257,5 K], добавлен 01.05.2015Основы проектирования информационно-прикладных систем. Подготовка макета приложения, интегрированного с БД. Сбор и загрузка исходных данных. Разработка и реализация математического алгоритма оптимизации составления расписания образовательного учреждения.
дипломная работа [3,4 M], добавлен 18.02.2017Обзор существующих решений и обоснование выбора языка программирования. Разработка структурной схемы, интерфейса программного продукта. Технические требования к оборудованию, тест программного продукта, руководство системного программиста и оператора.
дипломная работа [2,0 M], добавлен 10.07.2012Выбор технологии, языка и среды программирования. Анализ процесса обработки информации и оценка структур данных для ее хранения. Разработка основных алгоритмов решения и структурной схемы программного продукта. Проектирование интерфейса пользователя.
курсовая работа [449,8 K], добавлен 14.01.2011Обзор и анализ существующих методик управления проектами и оценки трудоемкости. Разработка алгоритма задания параметров и вычисления трудоемкости и стоимости программного продукта. Отладка и тестирование продукта. Разработка руководства пользователя.
дипломная работа [2,5 M], добавлен 18.11.2017Разработка программного продукта для спирографического обследования. Структура базы данных программы "СпирографОтдел". Выбор программного продукта и руководство пользователя. Минимальные рекомендуемые требования к техническому и программному обеспечению.
дипломная работа [1,0 M], добавлен 13.04.2014