Система автоматизации учета учащихся
Содержание
Введение
. Общие сведения об ГУО «Гомельская Ирининская гимназия»
. Постановка задачи
.1 Назначение системы
.2 Требования к разрабатываемой системе
. Проектирование системы
.1 Сравнительный анализ и выбор инструментальных средств
3.1.1 Обоснование выбора программных средств реализации
.1.2 Язык веб-программирования PHP
.1.3 Система управления базами данных MySQL
.1.4 Язык гипертекстовой разметки документов HTML
.1.5 Эмулятор веб-сервера Denwer
.1.6 CodeIgniter как фреймворк приложения
3.2 Проектирование структуры системы
.3 Проектирование структуры базы данных
. Реализация системы
.1 Создание базы данных
.2 Разработка пользовательского интерфейса
.3 Разработка приложения
4.3.1 Принцип работы приложения
.3.2 Физическая структура приложения
4.4 Тестирование системы
Заключение
Список используемых источников
Приложения
Введение
Целью данного дипломного проекта является разработка системы автоматизации учета учащихся. Тестовые испытание и внедрение системы будет проводиться на базе ГУО «Гомельская Ирининская гимназия».
Гимназия, как и школа, является учебным заведением, но образовательные программы гимназии отличаются повышенной сложностью. Помимо стандартного общеобразовательного набора дисциплин, характерного для школы, в гимназии вводится ряд факультативов, направленных на всестороннее развитие ребенка. Особое внимание уделяется культурному развитию личности и занятию спортом. Учащиеся гимназии принимают активное участие в конференциях, выставках, конкурсах, школьных олимпиадах и спортивных соревнованиях.
Современное информационное общество характеризуется ведущим положением информации и быстрым темпом развития средств её обработки - информационно-коммуникационных технологий (ИКТ). Заметные достижения в области информатики привели к внедрению средств вычислительной техники в различные сферы жизнедеятельности человека. Уже созданы предпосылки для эффективного использования ИКТ в системе образования. Средства ИКТ являются мощным инструментом адаптации к постоянно изменяющимся требованиям глобального информационного общества.
В современном информационном обществе деятельность человека в самых разнообразных сферах тесно связана с реализацией процессов получения, преобразования, передачи, хранения, использования информации и информационного взаимодействия, создания и применения современных информационных систем прикладного характера.
Применение таких средств позволяет существенно повысить эффективность работы. В каждом учебном заведении существует потребность хранения, обработки и анализа большого объема информации. Для того чтобы снизить время обработки информации и облегчить работу сотрудникам создаются информационные системы.
Автоматизированная система предоставляет возможность производить оперативный и эффективный обмен информацией между всеми участками учебно-воспитательного процесса, позволяет сократить время, требуемое на подготовку конкретных задач, исключить возможных появлений ошибок в подготовке отчётной документации.
Работа любой информационной системы заключается в обслуживании двух встречных потоков новой информации: ввода новой информации и выдачи текущей информации по конкретному запросу. Эти требования обеспечиваются наличием стандартных процедур поиска информации и тем, что данные системы расположены в определенном порядке.
С компьютеризацией резко возросли скорости всех видов обработки информации: поиска и размещения, выдачи, передачи и ввода. Во-вторых, во много раз увеличились возможности хранения больших объемов информации. В-третьих, благодаря использованию сетей, информация может моментально передаваться между информационной системой, источниками информации и ее клиентами, в том числе с использованием коммуникативной сети Интернет.
Для успешного создания работоспособной, отказоустойчивой и удобной информационной системы необходимо тщательное изучение предметной области, сбор исходных данных и их анализ. Необходимо выделить круг автоматизируемых задач и заложить требования к функциональности системы.
Актуальность выбранной темы обусловлена необходимостью повышения эффективности работы гимназии, посредством уменьшения времени, необходимого для заполнения всей учетной и учебной документации, используемой гимназией в процессе ее работы.
Система автоматизации предназначена для ведения учета контингента учащихся гимназии и получения отчетных документов, необходимых для работы администрации гимназии.
1. Общие сведения об ГУО «Гомельская Ирининская гимназия»
ГУО «Гомельская Ирининская гимназия» (далее гимназия) было открыто 1 сентября 1997 года на базе средней общеобразовательной школы №18 Новобелицкого района г. Гомеля решением Гомельского городского исполнительного комитета от 25 августа 1997 года за № 995.
Гимназии было присвоено название «Гомельская Ирининская гимназия» в честь последней гомельской княгини Ирины Ивановны Паскевич (урожденной Воронцовой - Дашковой), достойно продолжившей традиции Н.П. Румянцева и так много сделавшей для развития образования и культуры нашего родного города Гомеля.
Гимназия является юридическим лицом, имеет печать с изображением Государственного герба Республики Беларусь, штамп со своим названием.
Гимназия является государственным учреждением образования, функционирующим в составе V-XI классов, в котором осуществляются обучение и воспитание на II и III ступенях общего среднего образования с изучением отдельных учебных предметов на повышенном уровне. Для реализации образовательной программы начального образования в учреждении дополнительно организовано в I-IV классах обучение и воспитание на I ступени общего среднего образования
Учреждение образования осуществляет свою деятельность в соответствии с Кодексом Республики Беларусь об образовании, Положением об учреждении общего среднего образования, иными актами законодательства Республики Беларусь, Уставом гимназии и другими нормативными актами. Устав гимназии, должностные инструкции работников, иные локальные нормативные документы приведены в соответствие с Кодексом Республики Беларусь об образовании.
Деятельность гимназии осуществляется на основе Программы развития Государственного учреждения образования «Гомельская Ирининская гимназия» на 2011-2015 годы. Планы работы учреждения принимаются на педагогических советах в августе, утверждаются директором. Они основаны на анализе результатов работы гимназии за прошедший учебный год с учетом требований государственного уровня, самых последних изменений в системе общего среднего образования.
Гимназия является некоммерческой организацией, финансируемой из бюджета города Гомеля.
Предметом деятельности гимназии является осуществляемая в соответствии с законодательством Республики Беларусь образовательная деятельность, которая включает в себя организацию и проведение учебной, воспитательной и методической работы.
Основной целью деятельности учреждения является реализация государственных образовательных стандартов, формирование знаний, умений, навыков, интеллектуальное, нравственное, творческое и физическое развитие личности обучающегося.
Основными задачами гимназии являются:
3. Проектирование системы
.1 Сравнительный анализ и выбор инструментальных средств
.1.1 Обоснование выбора программных средств реализации
В процессе проектирования были изучены теоретические и практические сведения, которые необходимы для построения автоматизированной системы управления реляционной базой данных и создания интерфейса пользователя.
Проектирование системы велось по трем направлениям:
Учитывая основные требования разрабатываемой системы, а именно, открытость платформы, расширяемость и удобство использования был проведен сравнительный анализ инструментальных средств разработки.
В качестве платформы клиент-сервер была выбрана система WAMP (Windows-Apache-MySQL-PHP). Операционная система (ОС) Windows не является открытой, но техническое обеспечение гимназии на данный момент использует ОС Windows. При необходимости возможет простой переход из WAMP на LAMP (Linux-Apache-MySQL-PHP) на базе открытой ОС Linux.
3.1.2 Язык веб-программирования PHP
PHP - скриптовый язык программирования общего назначения, применяющийся для разработки веб-приложений.
Основное отличие PHP от CGI-скриптов (написанных, например, на Perl) в том, что в CGI-программы выводят HTML-код, а, PHP-скрипт можно добавить непосредственно в HTML-код, используя открывающий и закрывающий теги (например, <?php и ?>).
Отличие PHP от JavaScript, состоит в том, что PHP-скрипт выполняется на сервере, а клиенту передается результат работы, тогда как в JavaScript-код полностью передается на клиентскую машину и выполняется только там.
Главным фактором языка РНР является практичность. Практический характер РНР обусловлен важными характеристиками: традиционностью, простотой, эффективностью, безопасностью, гибкостью.
Препроцессор Гипертекста или PHP, является широко используемым языком сценариев общего назначения с открытым исходным кодом. PHP создавался специально для ведения Web-разработок и может использоваться непосредственно в HTML-коде. Синтаксис языка берет начало из C, Java и Perl и является легким для изучения. Преимущественным назначением PHP является предоставление web-разработчикам возможности быстрого создания динамически генерируемых web-страниц, однако, область применения PHP не ограничивается только этим. PHP является встраиваемым языком, а это значит, что вставлять скрипты, написанные на этом языке, можно в любом месте HTML страницы.является серверным языком и потому вся обработка скриптов на этом языке производится на стороне сервера. В момент запроса браузера пользователя на скачивание страницы, сервер (если он имеет поддержку PHP) получает команду на обработку PHP сценариев (команду он получает основываясь на расширении самой страницы (.php). После обработки сервер отдает на выходе заново построенную HTML страницу без каких-либо намеков на код PHP.
Говоря проще, пользователь никогда не узнает, какой именно PHP код был использован на странице и был ли он использован вообще.
Программа на любом языке программирования представляет упорядоченный набор инструкций, выполняющийся по определенным алгоритмам (линейно, циклически и т.д.). И PHP с этой точки зрения не является исключением.
Для отделения одной команды от другой необходимо использовать специальные символы - разделители. В PHP эту роль выполняет символ «;». Символ разделения должен находиться в конце каждой инструкции за рядом некоторых исключений, например в конце программы перед символом ?> не обязательно ставить «;».
В любом языке программирования поддерживается возможность оставлять комментарии (HTML, CSS, JavaScript, C++ и т.д.). Как и в других языках, в PHP имеется поддержка как однострочных, так и многострочных комментариев. Для создания однострочного комментария используются символы «//»,а для создания многострочного комментария используется контейнер «/*...*/».
Для своей работы PHP может оперировать достаточно большим количеством типов данных, как показано на рисунке 2.
Рисунок 2 - Типы данных, используемые в PHP
Тип Array в PHP представляет собой упорядоченную карту данных - тип, который преобразует значения в ключи. Этот тип оптимизирован одновременно в нескольких направлениях, поэтому вы можете использовать его как обычный массив, как список (вектор), как хеш-таблицу (являющуюся реализацией карты), как стэк данных, как очередь и т.д. Для задания array в php можно использовать функцию array() или непосредственно задать значения элементам массива.
Любая программа, написанная на языке PHP, в общем виде представляет из себя набор конструкций, как представлено на рисунке 3. В роли конструкции могут выступать любые элементы, используемые в PHP, такие как операторы, функции, циклы и т.д. Очень часто конструкции группируются в группы конструкций, которые объединяются между собой и заключаются в фигурные скобки {...}.
Рисунок 3 - Основные конструкции, используемые в PHP
Оператор if является одним из важнейших операторов любого языка программирования. If позволяет создать так называемое ветвление программы, где исполнение программы может пойти по одной из ветвей, в зависимости от выполнения или невыполнения определенного условия, заданного программистом.
Оператор else можно считать логическим продолжением и дополнением к уже изученному нами оператору if. Else позволяет инициировать более сложное ветвление программы, установив определенный набор операторов на тот случай, если условие, проверяемое оператором if окажется ложью. Также внутри оператора else можно поместить if с еще одним условием и так далее, практически до бесконечности.
Структуру оператора if, расширенного при помощи else можно представить примерно следующим образом: if (условие) набор_комманд_1 else набор_комманд_2.является простым циклом PHP. В общем виде структура while выглядит следующим образом: while (выражение) { блок_инструкций }.
В самом начале работы цикла выражение приводится к логическому типу и проверяется его истинность, если возвращается ответ TRUE, то выполняется блок_инструкций. После выполнения всех инструкций условие проверяется вновь и если ИСТИНА возвращается снова, то еще раз выполняется блок_инструкций и так до тех пор, пока условие будет выполняться.позволяет обрабатывать данные, которые пользователь ввел в поля формы. После активации кнопки submit данные отправляются на страницу - обработчик, указанную в поле action элемента <form>. На странице - обработчике располагается PHP скрипт, который выполняет определенные операции над полученными данными, например, формирует и отсылает письмо по указанным пользователем реквизитам.
Данные из формы передаются на сервер как последовательность пар имя/значение. Это значит, что имя каждого элемента формы (появляющееся в атрибуте NAME тега) связывается со значением этого элемента (введенным или выбранным пользователем). Формат имя/значение, используемый для передачи, имеет вид имя=значение.
Все данные, передаваемые из формы в программу-обработчик располагаются в следующих суперглобальных массивах: $_GET, $_POST, и $_REQUEST.
$_GET[] - содержит все значения, передаваемые методом GET.
$_POST[] - содержит все значения, передаваемые методом POST.
$_REQUEST[] - содержит все значения, передаваемые методами POST и GET.
Использование суперглобального массива $_Request очень удобно, особенно когда не известно, каким методом были переданы данные. Благодаря циклу foreach можно перебрать значения массива $_Request.
Мы выводим на экран все значения массива $_Request. Сделано это может быть для проверки правильности ввода данных пользователем. То есть пользователь вводит данные в форму, нажимает отправить, но вместо обработки данных у него на экране высвечивается сообщение с введенными им данными и надписью подтвердить или отказаться. Данная идея применена на многих сайтах, да и вообще во многих программах.является мощным инструментом обработки форм, позволяя производить самые разнообразные манипуляции над пользовательскими данными, такие, как сохранение данных о пользователе в базе данных для последующей авторизации, отправке сообщения на почту пользователя и многое другое.
При работе с формами часто бывает необходимо выполнять проверку введенных пользователем данных. Для этих целей PHP имеет ряд функций:
3.1.6 CodeIgniter как фреймворк приложения
CodeIgniter - это инструмент для людей, которые разрабатывают веб-приложения на PHP. Его цель заключается в том, чтобы позволить разрабатывать проекты намного быстрее, чем если бы весь код писали руками, предоставляя богатый набор библиотек для часто востребованных задач, а также простой интерфейс и логичную структуру для доступа к этим библиотекам. CodeIgniter позволяет креативно сосредотачиваться на вашем проекте, минимизируя количество кода, которое нужно писать руками для каждой конкретной задачи.распространяется под открытой лицензией Apache/BSD-style.легковесный. Основная система требует только несколько очень маленьких библиотек. Это разительно контрастирует со множеством фреймворков, которые требуют значительно больших ресурсов. Дополнительные библиотеки загружаются динамически при запросе, основываясь на потребностях для конкретного процесса, поэтому основная система очень стройная и быстрая.использует подход Model-View-Controller (модель-отображение-контроллер), который позволяет значительное разделение между логикой и представлением. Это особенно хорошо для проектов, в которых дизайнеры работают над файлами шаблонов, так как содержание кода в этих файлах минимизировано.
Модель - Класс модели, набор функций для работы с данными, который поможет вам обновить, получить, добавить информацию.
Отображение - Шаблон для отображения данных, обычно простой html со вставками php.
Контроллер - выступает в роли посредника между Моделью, Отображением, и любыми другими ресурсами.
В CodeIgniter модели не являются обязательными, можно использовать только контроллер и отображение.ы, генерируемые CodeIgniter, красивые и дружественные к поисковым системам. В отличие от традиционного подхода «строк запроса», что стало синонимичным для динамических систем, CodeIgniter использует сегменто-ориентированный подход.имеет широкий ассортимент библиотек, которые позволяют выполнять часто востребованные задачи в веб-разработке, такие как доступ к базе данных, отправка почты, валидация данных форм, обслуживание сессий, манипуляция изображениями, работа с XML-RPC и многое другое.
Обладает возможностью кеширования на стороне сервера SQL-запросов и генерируемых html-страниц.расширяемый. Система может быть легко расширена, используя ваши собственные библиотеки, помощники, через расширение классов, или системными хуками.не требует использования движка шаблонов.
Хотя CodeIgniter имеет простой парсер шаблонов, который может использоваться опционально, но его использование не обязательно. Движки шаблонов не могут превзойти производительность чистого PHP, и синтаксис, который применяется с ним, не значительно проще основ PHP.
3.2 Проектирование структуры системы
При разработке приложения использовалась концепция MVC (Model-Veiw-Controller, Модель-Вид-Контроллер), как показано на рисунке 4. Этот шаблон разделяет работу веб-приложения на три отдельные функциональные роли: модель данных (Model), пользовательский интерфейс (View) и управляющую логику (Controller). Таким образом, модификация каждого компонента может осуществляться независимо.
Модель предоставляет данные предметной области представлению и реагирует на команды контроллера, изменяя свое состояние. Представление отвечает за отображение данных предметной области (модели) пользователю, реагируя на изменения модели. Контроллер интерпретирует действия пользователя, оповещая модель о необходимости изменений.
Рисунок 4 - Концепция Model-View-Controller
Общий принцип работы с базой данных через веб-интерфейс можно описать следующим алгоритмом:
Схема взаимодействия клиента и сервера представлена на рисунке 5.
Рисунок 5 - Схема взаимодействия клиента и сервера
Приложение доступно в двух версиях: для администратора системы (логин: admin) и пользователя, как показано на рисунках 6, 7. В версии для администратора системы присутствует дополнительный пункт меню «Администрирование», где есть возможность добавления, удаления пользователей и смены пароля.
Рисунок 6 - Схема программы для администратора
Рисунок 7 - Схема программы для пользователя
3.3 Проектирование структуры базы данных
В системе автоматизации учета потребуется хранить следующую информацию:
Данные ученика:
Обучение в школе происходит поэтапно (с 1-го по 11-й класс). В каждом классе (году обучение) есть свой набор предметов. Чтобы перейти из класса в класс необходимо проучиться учебный год и получить годовые оценки по предметам, изучаемым в этом классе. Оценки по предметам учитываются в журнале. На каждом этапе классов может быть несколько (например, 1А, 1Б, 1В). Если ученик не справился с учебной программой, то он может остаться на второй учебный год в том же классе. Оценки по предметам учитываются в журнале.
Кроме учебного процесса ученики дополнительно занимаются в студиях и кружках, участвуют в школьных олимпиадах.
Каждый учитель в школе преподает предметы (один или более) в разных классах. Уровень профессиональных навыков учителя характеризуется категорией.
Схема связей объектной области созданной базы данных изображена на рисунке 8.
Рисунок 8 - Схема связей объектной области базы данных
Проектирование базы данных осуществлялась при помощи сервиса dbdsngr (сайт: dbdsngr.appspot.com), который позволяет при помощи визуальных средств создать структуру и сгенерировать SQL-код для формирования базы данных в СУБД MySQL.
Схема базы данных гимназии в виде таблиц со связями изображена на рисунке 9.
Рисунок 9 - Схема базы данных в виде таблиц со связями
4. Реализация системы
.1 Создание базы данных
При реализации системы использовались современные средства разработки, которые позволили упростить процесс создания базы данных, интерфейса пользователя и программной части системы.
Реализация системы состоит из четырех этапов:
База данных представлена 16 таблицами. Полное описание каждой таблицы базы данных гимназии отображено в таблицах 1-16.
Следует отметить, что учебный год не совпадает с календарным годом. Учебный год начинается 1 сентября одного календарного года, а завершается 31 мая следующего календарного года. Для удобства представления в базу данных вносится год, который совпадает с началом учебного. Так как учебный год является основным фильтром для поиска, то по нему не проводилось нормализации базы данных. Это позволило упростить программную реализацию системы.
Таблица 1 - Структура таблицы pupil (ученик)
АтрибутТип данныхКомментарийid_pupilIntИдентификатор ученика Первичный ключsurnamevarchar(30)Фамилия ученикаnamevarchar(12)Имя ученикаlast_namevarchar(15)Отчество ученикаbirthdayDataДень рожденияaddressvarchar(80)Место жительства
Структура таблицы pupil предназначена для хранения сведений об учениках.
Столбец id_pupil генерируется автоматически при добавлении записи в таблицу и является уникальным идентификатором ученика и является первичным ключом.запрос для создания таблицы pupil:
CREATE TABLE 'pupil' (
'id_pupil' INT NOT NULL AUTO_INCREMENT,KEY ('id_pupil')
'surname' VARCHAR(30),
'name' VARCHAR(12),
'last_name' VARCHAR(15),
'birthday' DATE,
'address' VARCHAR(80)
);
Таблица 2 - Структура таблицы parent (родитель)
АтрибутТип данныхКомментарийid_parentintИдентификатор родителя Первичный ключsurnamevarchar(30)Фамилия ученикаnamevarchar(12)Имя учителяlast_namevarchar(15)Отчество учителяjobvarchar(80)Место работы
Структура таблицы parent предназначена для хранения сведений о родителях.
Столбец id_parent генерируется автоматически при добавлении записи в таблицу и является уникальным идентификатором родителя.запрос для создания таблицы parent:
CREATE TABLE 'parent' (
'id_parent' INT NOT NULL AUTO_INCREMENT,KEY ('id_parent')
'surname' VARCHAR(30),
'name' VARCHAR(12),
'last_name' VARCHAR(15),
'job' VARCHAR(80)
);
Таблица 3 - Структура таблицы family (семья)
АтрибутТип данныхКомментарийid_pupilintВнешний ключid_parentintВнешний ключstatusvarchar(10)Отец, мать, опекун
Структура таблицы family предназначена для хранения сведений о составе семьи.запросы для создания таблицы family:
CREATE TABLE 'family' (
'id_pupil' INT,
'id_parent' INT,
'status' VARCHAR(15)
);TABLE 'family' ADD CONSTRAINT 'family_fk1' FOREIGN KEY ('id_pupil') REFERENCES pupil('id_pupil');TABLE 'family' ADD CONSTRAINT 'family_fk2' FOREIGN KEY ('id_parent') REFERENCES parent('id_parent');
Таблица 4 - Структура таблицы teacher (учитель)
АтрибутТип данныхКомментарийid_teacherintИдентификатор учителя Первичный ключsurnamevarchar(30)Фамилия учителяnamevarchar(12)Имя учителяlast_namevarchar(15)Отчество учителяid_categoryintВнешний ключ
Структура таблицы teacher предназначена для хранения данных об учителях.
Столбец id_teacher генерируется автоматически при добавлении записи в таблицу и является уникальным идентификатором учителя.запросы для создания таблицы teacher:
CREATE TABLE 'teacher' (
'id_teacher' INT NOT NULL AUTO_INCREMENT,KEY ('id_teacher')
'surname' VARCHAR(30),
'name' VARCHAR(12),
'last_name' VARCHAR(15),
'id_category' INT
);TABLE 'teacher' ADD CONSTRAINT 'teacher_fk1' FOREIGN KEY ('id_category') REFERENCES category('id_category');
Таблица 5 - Структура таблицы category (категория учителя)
id_categoryintПервичный ключrankvarchar(30)Категория учителя
Структура таблицы category предназначена для хранения сведений о категории учителя (эта таблица-справочник).
Столбец id_category генерируется автоматически при добавлении записи в таблицу и является уникальным идентификатором категории учителя.запрос для создания таблицы category:
CREATE TABLE 'category' (
'id_category' INT NOT NULL AUTO_INCREMENT,KEY ('id_category')
'rank' VARCHAR(30)
);
Таблица 6 - Структура таблицы teaching (преподавание)
АтрибутТип данныхКомментарийid_teacherintВнешний ключyearyearУчебный годid_subjectintВнешний ключid_classintВнешний ключ
Структура таблицы teaching предназначена для хранения данных о работе учителей.запросы для создания таблицы teaching:
CREATE TABLE 'teaching' (
'id_teacher' INT,
'year' YEAR,
'id_subject' INT,
'id_class' INT
);TABLE 'teaching' ADD CONSTRAINT 'teaching_fk1' FOREIGN KEY ('id_teacher') REFERENCES teacher('id_teacher');TABLE 'teaching' ADD CONSTRAINT 'teaching_fk2' FOREIGN KEY ('id_subject') REFERENCES subject('id_subject');TABLE 'teaching' ADD CONSTRAINT 'teaching_fk3' FOREIGN KEY ('id_class') REFERENCES class('id_class');
Таблица 7 - Структура таблицы studies (обучение)
АтрибутТип данныхКомментарийid_pupilintВнешний ключyearyearУчебный годid_classintВнешний ключ
Структура таблицы studies предназначена для хранения данных о родителях.запросы для создания базы данных:
CREATE TABLE 'studies' (
'id_pupil' INT,
'year' YEAR,
'id_class' INT
);TABLE 'studies' ADD CONSTRAINT 'studies_fk1' FOREIGN KEY ('id_pupil') REFERENCES pupil('id_pupil');TABLE 'studies' ADD CONSTRAINT 'studies_fk2' FOREIGN KEY ('id_class') REFERENCES class('id_class');
Таблица 8 - Структура таблицы class (класс)
АтрибутТип данныхКомментарийid_classintИдентификатор класса Первичный ключclass_levelintКласс (год обучения)class_lettercharКласс (буква)
Структура таблицы class предназначена для хранения данных о классах (таблица-справочник).
Столбец id_class генерируется автоматически при добавлении записи в таблицу и является уникальным идентификатором класс.запрос для создания таблицы class:
CREATE TABLE 'class' (
'id_class' INT NOT NULL AUTO_INCREMENT,KEY ('id_class')
'class_level' INT,
'class_letter' CHAR,
);
Таблица 9 - Структура таблицы subject (секции)
АтрибутТип данныхКомментарийid_subjectintПервичный ключsubject_titlevarchar(20)Название предмета
Структура таблицы subject предназначена для хранения данных о школьных предметах (таблица-справочник).
Столбец id_subject генерируется автоматически при добавлении записи в таблицу и является уникальным идентификатором школьного предмета.запрос для создания таблицы subject:
CREATE TABLE 'subject' (
'id_subject' INT NOT NULL AUTO_INCREMENT,KEY ('id_subject')
'subject_title' VARCHAR(20)
);
Таблица 10 - Структура таблицы journal (журнал)
АтрибутТип данныхКомментарийid_pupilintВнешний ключyearyearУчебный годid_subjectintПредметpointintГодовая оценка по предметуСтруктура таблицы journal предназначена для хранения данных об годовых оценках по предметам.запросы для создания таблицы journal:
CREATE TABLE 'journal' (
'id_pupil' INT,
'year' YEAR,
'id_subject' INT,
'subject_title' VARCHAR(20)
'point' INT
);TABLE 'journal' ADD CONSTRAINT 'journal_fk1' FOREIGN KEY ('id_pupil') REFERENCES pupil('id_pupil');TABLE 'journal' ADD CONSTRAINT 'journal_fk2' FOREIGN KEY ('id_subject') REFERENCES subject('id_subject');
Таблица 11 - Структура таблицы section (участие в секциях)
АтрибутТип данныхКомментарийid_pupilВнешний ключyearyearУчебный годid_clubintВнешний ключ
Структура таблицы section предназначена для хранения данных о секциях и кружках, в которых заняты ученики.запросы для создания таблицы section:
CREATE TABLE 'section' (
'id_pupil' INT
'year' YEAR,
'id_club' INT
);TABLE 'section' ADD CONSTRAINT 'section_fk1' FOREIGN KEY ('id_pupil') REFERENCES pupil('id_pupil');TABLE 'section' ADD CONSTRAINT 'section_fk2' FOREIGN KEY ('id_club') REFERENCES club('id_club');
Таблица 12 - Структура таблицы club (секции)
АтрибутТип данныхКомментарийid_clubintИдентификатор класс Первичный ключclub_titlevarchar(20)Название секции, кружка
Структура таблицы club предназначена для хранения данных о секциях и кружках (таблица-справочник).запрос для создания таблицы club:
CREATE TABLE 'club' (
'id_club' INT NOT NULL AUTO_INCREMENT,KEY ('id_club')
'club_title' VARCHAR(20)
);
Таблица 13 - Структура таблицы olympiad (участие в олимпиадах)
АтрибутТип данныхКомментарийid_pupilIntВнешний ключyearYearУчебный годid_subjectIntВнешний ключid_regionIntВнешний ключid_resultIntВнешний ключ
Структура таблицы olympiad предназначена для хранения данных об участниках олимпиад.запросы для создания таблицы olympiad:
CREATE TABLE 'olympiad' (
'id_pupil' INT
'year' YEAR,
'id_club' INT,
'id_region' INT,
'id_result' INT
);TABLE 'olympiad' ADD CONSTRAINT 'olympiad_fk1' FOREIGN KEY ('id_pupil') REFERENCES pupil('id_pupil');TABLE 'olympiad' ADD CONSTRAINT 'olympiad_fk2' FOREIGN KEY ('id_subject') REFERENCES subject('id_subject');TABLE 'olympiad' ADD CONSTRAINT 'olympiad_fk3' FOREIGN KEY ('id_region') REFERENCES region('id_region');TABLE 'olympiad' ADD CONSTRAINT 'olympiad_fk4' FOREIGN KEY ('id_result') REFERENCES result('id_result');
Таблица 14 - Структура таблицы contest (участие в соревнованиях)
АтрибутТип данныхКомментарийid_pupilIntВнешний ключyearyearУчебный годid_clubintВнешний ключid_regionintВнешний ключid_resultintВнешний ключ
Структура таблицы contest предназначена для хранения данных об участниках конкурсов и соревнований.запросы для создания таблицы contest:
CREATE TABLE 'contest' (
'id_pupil' INT
'year' YEAR,
'id_club' INT,
'id_region' INT,
'id_result' INT
);TABLE 'contest' ADD CONSTRAINT 'contest_fk1' FOREIGN KEY ('id_pupil') REFERENCES pupil('id_pupil');TABLE 'contest' ADD CONSTRAINT 'contest_fk2' FOREIGN KEY ('id_club') REFERENCES club('id_club');TABLE 'contest' ADD CONSTRAINT 'contest_fk3' FOREIGN KEY ('id_region') REFERENCES region('id_region');TABLE 'contest' ADD CONSTRAINT 'contest_fk4' FOREIGN KEY ('id_result') REFERENCES result('id_result');
Таблица 15 - Структура таблицы region (уровень соревнования)
АтрибутТип данныхКомментарийid_regionintИдентификатор уровня Первичный ключstatusvarchar(15)Уровень соревнования
Структура таблицы region предназначена для хранения сведений об уровне олимпиады, соревнования, конкурса (таблица-справочник).
Столбец id_region генерируется автоматически при добавлении записи в таблицу и является уникальным идентификатором уровня олимпиады, соревнования, конкурса.запрос для создания таблицы region:
CREATE TABLE 'region' (
'id_region' INT,
'status' VARCHAR(15)
);
Таблица 16 - Структура таблицы result (результаты)
АтрибутТип данныхКомментарийid_resultintИдентификатор результата Первичный ключpositionvarchar(20)Результат выступленияСтруктура таблицы result предназначена для хранения данных о результатах выступления на олимпиадах, соревнованиях, конкурсах (таблица-справочник).
Столбец id_result генерируется автоматически при добавлении записи в таблицу и является уникальным идентификатором результата выступления на олимпиаде, соревновании, конкурсе.запрос для создания таблицы result:
CREATE TABLE 'result' (
'id_result' INT
'position' VARCHAR(20)
);
4.2 Разработка пользовательского интерфейса
Для начала пользователю предлагается ввести логин и пароль для входа в систему, как показано на рисунке 10.
Рисунок 10 - Меню входа в систему
Если логин и/или пароль введены неверно, то выдается сообщение об ошибке и предложение повторить ввод ещё раз (рисунок 11).
Рисунок 11 - Ошибка ввода логина и/или пароля
В зависимости от логина выбирается версия системы. Существует 2 варианта: для администратора (логин: admin) и пользователей. Отличие заключается в наличии меню «Администрирование» для администратора (рисунок 12, 13).
Рисунок 12 - Интерфейс модуля администрирования
Рисунок 13 - Вариант системы для обычного пользователя
В меню «Редактирование» данные представлены по категориям (рисунок 14):
Список используемых источников
Приложения
Приложение А
Авторизация и конфигурационные файлы
Файл: index.php (корневой каталог)
<?php'config/config.php';'auth/auth.php';__autoload($class)
{(LIBS. $class. ".php");
}
$app = new bootstrap();
$app->init();
Пака: auth
Файл: auth.php
<?phpAuth
{static function handleLogin()
{(session_id() == '')
{_start();
}(!isset($_SESSION["loggedInadmin"]) && $_COOKIE["auth"] !== "admin")
{
$_SESSION["loggedInadmin"] = TRUE;
}((!isset($_SESSION["loggedInadmin"]) && $_SESSION["loggedInadmin"] != TRUE ) || $_COOKIE["auth"] !== "admin")
{_destroy();('location: '. URL. 'login');;
}
}static function handlen()
{("auth", "admin", time() - 3600);(session_id() == '')_start();(!isset($_SESSION["loggedInadmin"]) && $_SESSION["loggedInadmin"] != true)
{_destroy();('location: '. URL. 'login');;
}
}
}
Папка: config
Файл: config.php
<?php('DB_TYPE', 'mysql');('DB_HOST', '127.0.0.1');('DB_NAME', 'melsto_teacher');('DB_USER', 'melsto_teacher');('DB_PASS', '834Hdkjshf24kjsf');('URL', '#"justify">/* ADMIN */('USERS', TABLE_PREF. 'users');('USER_ID', TABLE_PREF. 'id_user');('USER_LOGIN', TABLE_PREF. 'login');('USER_PASS_H', TABLE_PREF. 'passw');('USER_PASS_H', TABLE_PREF. 'user_name');
/* ПРЕДМЕТЫ */('SUBJECTS', TABLE_PREF. 'subjects');('SUBJECT_ID', TABLE_PREF. 'id_subject');('SUBJECT_NAME', TABLE_PREF. 'name_subject');
/* УЧИТЕЛЯ */('TEACHERS', TABLE_PREF. 'teachers');('TEACHER_ID', TABLE_PREF. 'teacher_id');('TEACHER_NAME', TABLE_PREF. 'teacher_name');('TEACHER_SURNAME', TABLE_PREF. 'teacher_surname');('TEACHER_LASTNAME', TABLE_PREF. 'teacher_lastname');('TEACHER_EXPERIENCE', TABLE_PREF. 'teacher_experiense');('TEACHER_CATEGORY', TABLE_PREF. 'teacher_category');('TEACHER_SUBJECT', TABLE_PREF. 'teacher_subject');
/* УЧЕНИКИ */('PUPILS', TABLE_PREF. 'pupils');('PUPIL_ID', TABLE_PREF. 'pupil_id'('PUPIL_NAME', TABLE_PREF. 'pupil_name');('PUPIL_SURNAME', TABLE_PREF. 'pupil_surname');('PUPIL_LASTNAME', TABLE_PREF. 'pupil_lastname');('PUPIL_BIRTHDAY', TABLE_PREF. 'pupil_birthday'); define('PUPIL_ADRESS', TABLE_PREF. 'pupil_adress');
/* УСПЕВАЕМОСТЬ */('STUDY', TABLE_PREF. 'study');('STUDY_ID', TABLE_PREF. 'study');('STUDY_YEAR', TABLE_PREF. 'study');('STUDY_ID_SUBJECT', TABLE_PREF. 'study'); define('STUDY_ID_TEACHER', TABLE_PREF. 'study'); define('STUDY_POINT', TABLE_PREF. 'study');
/* СЕКЦИИ */('CLUB', TABLE_PREF. '');('CLUB_ID', TABLE_PREF. '');('CLUB_YEAR', TABLE_PREF. '');('CLUB_ID_PUPIL', TABLE_PREF. '');('CLUB_ID_SECTION', TABLE_PREF. '');('SECTION', TABLE_PREF. '');('SECTION_ID', TABLE_PREF. '');('SECTION_NAME', TABLE_PREF. '');
Приложение Б
(Модель)
Папка: models
Файлы:_model.php_model.php_model.php_model.php
Файл: admin_model.php
<?phpadmin_model extends model
{__construct()
{::__construct();
}_select_subjects()
{
$subjects = $this->db->select("SELECT * FROM ". SUBJECTS);(count($subjects) === 0) ? array() : $subjects;
}_select_teachers()
{
$subjects = $this->db->select("SELECT * FROM ". TEACHERS);(count($subjects) === 0) ? array() : $subjects;
}_select_pupils()
{
$subjects = $this->db->select("SELECT * FROM ". PUPILS);(count($subjects) === 0) ? array() : $subjects;
}
}
Файл: form_model.php
<?phpform_model extends model
{__construct()
{::__construct();
}_update_subject($id, $name)
{
$this->db->update(SUBJECTS, array(_NAME => $name), SUBJECT_ID. '='. $id);
}_add_subject($name)
{$this->db->insert(SUBJECTS, array(_NAME => $name));
}_update_teacher($id, $name, $surname, $lastname, $experience, $category, $subject)
{
$this->db->update(TEACHERS, array(_NAME => $name,_SURNAME => $surname,_LASTNAME => $lastname,_EXPERIENCE => $experience,_CATEGORY => $category,_SUBJECT => $subject
), TEACHER_ID. '='. $id);
}_add_teacher($name, $surname, $lastname, $experience, $category, $subject)
{$this->db->insert(TEACHERS, array(_NAME => $name,_SURNAME => $surname,_LASTNAME => $lastname,_EXPERIENCE => $experience,_CATEGORY => $category,_SUBJECT => $subject
));
}_delete_teacher($id)
{$this->db->delete(TEACHERS, TEACHER_ID. '='. $id);
}_update_pupil($id, $name, $surname, $lastname, $birthday, $adress, $mather, $father)
{
$this->db->update(PUPILS, array(_NAME => $name,_SURNAME => $surname,_LASTNAME => $lastname,_BIRTHDAY => $birthday,_ADRESS => $adress,_PARENT_MATHER => $mather,_PARENT_FATHER => $father
), PUPIL_ID. '='. $id);
}_add_pupil($name, $surname, $lastname, $birthday, $adress, $mather, $father)
{$this->db->insert(PUPILS, array(_NAME => $name,_SURNAME => $surname,_LASTNAME => $lastname,_BIRTHDAY => $birthday,_ADRESS => $adress,_PARENT_MATHER => $mather,_PARENT_FATHER => $father
));
}_delete_pupil($id)
{$this->db->delete(PUPILS, PUPIL_ID. '='. $id);
}
}
Файл: index_model.php
<?phpindex_model extends model
{__construct()
{::__construct();
}
}
Файл: login_model.php
<?phplogin_model extends model
{function __construct()
parent::__construct();function run()
$sth = $this->db->select("SELECT * FROM ". USERS. " WHERE ". USER_LOGIN. " = :". USER_LOGIN. " AND ". USER_PASS_H. " = :". USER_PASS_H. " ", array(_LOGIN => $_POST['login'],_PASS_H => $_POST['password']));(count($sth) > 0)
{('auth', "admin", (time() + 7770000), '/', DOMAIN, FALSE, TRUE);_start();
$_SESSION['role'] = $data['admin'];
$_SESSION['loggedInadmin'] = TRUE;
$_SESSION['userid'] = $data['id'];('location: '. URL. 'admin/subjects');();
} else('location: '. URL);();
}
}
}
Приложение В
(Вид)
Папка: vies
Файлы:.php.php.php.php.php
Файл: pupils.php
<div>
<h3>Ученики</h3>
<table id="table">
<thead>
<tr>
<th>Имя ученикав</th>
<th>Фамилия </th>
<th>Отчество</th>
<th>Дата рождения</th>
<th>Адресс</th>
<th>Родители</th>
<th width="196">Действия</th>
</tr>
</thead>
<tbody>
<?php foreach ($this->pupils as $pupil => $pupil_info) : ?>
<tr id="pupil_<?= $pupil_info[PUPIL_ID] ?>">
<td>
<td>
<td>
<td>
<td>
<td>
<span>
<span>
</td>
<td width="200">
<input type="hidden">
<button type="button">
<button type="button">
<button type="button">
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<input>
<!-- MODALL ADD PUPIL -->
<div>
<div>
<div>
<div>
<button type="button">
<h4>
</div>
<div>
<form role="form">
<div>
<label>Имя ученика</label>
<input id="id_" type="text">
</div>
<div>
<label for="exampleInput">Имя ученика</label>
<input id="name_" type="text" name="name">
</div>
<div>
<label for="exampleInput">Фамилия ученика</label>
<input id="surname_" type="text" name="name">
</div>
<div>
<label for="exampleInput">Отчество ученика</label>
<input id="lastname_" type="text" name="name">
</div>
<div>
<label for="exampleInput">дата рождения</label>
<input id="birthday_" type="text" name="experiense">
</div>
<div>
<label for="exampleInput">родители</label>
<label for="exampleInput">мать(ФИО и место работы)</label>
<input id="mather_"type="text" name="category">
<label for="exampleInput">отец(ФИО и место работы)</label>
<input id="father_" type="text" name="category">
</div>
</form>
</div>
<div>
<button type="button">
<button type="button">
</div>
</div>
<!-- /.modal-content -->
</div>
<!-- /.modal-dialog -->
</div>
<!-- /.modal -->
</div>
<script>edit_pupil($this)
{
$('#id_').val($($this).parent().children('.id').val());
$('#name_').val($($this).parent().parent().children('.name').text());
$('#surname_').val($($this).parent().parent().children('.surname').text());
$('#lastname_').val($($this).parent().parent().children('.lastname').text());
$('#birthday_').val($($this).parent().parent().children('.birthday').text());
$('#adress_').val($($this).parent().parent().children('.adress').text());
$('#mather_').val($($this).parent().parent().find('.mather').text());
$('#father_').val($($this).parent().parent().find('.father').text());
}
//send_change()
{
$id = $('#id_').val();
$name = $('#name_').val();
$surname = $('#surname_').val();
$lastname = $('#lastname_').val();
$birthday = $('#birthday_').val();
$adress = $('#adress_').val();
$mather = $('#mather_').val();
$father = $('#father_').val();
$.post('<?= URL. 'ajax_admin/save_pupil'; ?>', {'id': $id, 'name': $name, 'surname': $surname, 'lastname': $lastname, 'birthday': $birthday, 'adress': $adress, 'mather': $mather, 'father': $father}, function(data) {($('#id_').val() != -1)
{
$tr = $('#pupil_' + $id);
$tr.children('.name').text($name);
$tr.children('.surname').text($surname);
$tr.children('.lastname').text($lastname);
$tr.children('.birthday').text();
$tr.children('.adress').text();
$tr.find('.mather').text();
$tr.find('.father').text();
} else if ($.isNumeric(data)) {
$('#subjects_cont').append(
$('<tr id="pupil_' + $id + '">' +
'<td>
'<td>
'<td>
'<td>
'<td>
'<td>' +
'<span>
'<span>
'</td>' +
'<td width="200">' +
'<input type="hidden">
'<button type="button">
'<button type="button">
'<button type="button">
'</td></tr>'));
}
}
);
$('#addPupil').click();
}clean_form() {
$('#id_').val(-1);
$('#name_').val('');
$('#surname_').val('');
$('#lastname_').val('');
$('#birthday_').val('');
$('#adress_').val('');
$('#mather_').val('');
$('#father_').val('');
}remove_puple($this) {
$id = $($this).parent().children('.id').val();
$.post('<?= URL. 'ajax_admin/delete_pupil'; ?>', {'id': $id}, function(data) {
$('#teacher_' + $id).remove();
});
}
$(document).ready(function() {
$("#table").tablesorter({: {
: {: false
}
}
});
});
</script>
Файл: search.php
<div>
<h3>Поиск</h3>
<div>
<select>
<option value="1">по имени учителя</option>
<option value="2">по имени ученика</option>
<option value="3">успеваемтось потока за год</option>
</select>
<input>
<input type="text">
</div>
</div>
Файл: subject.php
<div>
<h3>Предметы </h3>
<table id="table">
<thead>
<tr>
<th>Предметы</th>
<th width="196">Действия</th>
</tr>
</thead>
<tbody id="subjects_cont" >
<?php foreach ($this->subjects as $subject => $subject_name) : ?>
<tr>
<td>
<td width="200">
<button id="edit" type="button">
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<input>
<!-- MODAL ADD / EDIT TEACHER -->
<div>
<div>
<div>
<div>
<button type="button">
<h4>
</div>
<div>
<form role="form">
<div>
<label for="exampleInput">Название предмета</label>
<input id="subject" type="text" name="name">
<input id="subjectid" type="hidden" name="id" >
</div>
</form>
</div>
<div>
<button type="button">
<button id="send_subject" type="button">
</div>
</div>
<!-- /.modal-content -->
</div>
<!-- /.modal-dialog -->
</div>
<!-- /.modal -->
</div>
<script>edit_subject($this)
{
$('#subjectid').val($($this).parent().parent().children('.subj').attr('id'));
$('#subject').val($($this).parent().parent().children('.subj').text());
}send_change() {
$id = $('#subjectid').val();
$name = $('#subject').val();
$.post('<?= URL. 'ajax_admin/save_subject'; ?>', {'id': $id, 'name': $name}, function(data) {($('#subjectid').val() != -1)
{
$('#' + $('#subjectid').val()).text($('#subject').val());
} else if ($.isNumeric(data)) {
$('#subjects_cont').append($(
'<tr><td>
}
});
$('#editSubject').click();
}clean_form() {
$('#subjectid').val(-1);
$('#subject').val('');
}
$(document).ready(function() {
$("#table").tablesorter({: {
: {: false
}
}
});
}
);
</script>
Файл: study.php
<div>
<input>
</div>
Файл: teachers.php
<div>
<h3>Учителя</h3>
<table id="table">
<thead>
<tr>
<th>Имя учителя</th>
<th>Фамилия учителя</th>
<th>Отчество учителя</th>
<th>Категория</th>
<th>Предмет</th>
<th width="196">Действия</th>
</tr>
</thead>
<tbody id="subjects_cont">
<?php foreach ($this->teachers as $teacher => $teacher_info) : ?>
<tr id="teacher_<?= $teacher_info[TEACHER_ID] ?>">
<td>
<td>
<td>
<td>
<td>
<?php foreach ($this->subjects as $subject => $subject_name) : ?>
<?php if ($teacher_info[TEACHER_SUBJECT] == $subject_name[SUBJECT_ID]): ?>
<td id="<?= $subject_name[SUBJECT_ID] ?>">
<?php endif; ?>
<?php endforeach; ?>
<td width="200">
<input type="hidden">
<button type="button">
<button type ="button">
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<input>
<!-- MODAL ADD / EDIT TEACHER -->
<div>
<div>
<div>
<div>
<button type="button">
<h4>
</div>
<div>
<form role="form">
<input type="hidden" id="id_" value=""/>
<div>
<label for="exampleInput">Имя учителя</label>
<input id="name_" type="text" name="name">
</div>
<div>
<label for="exampleInput">Фамилия учителя</label>
<input id="surname_" type="text" name="name">
</div>
<div>
<label for="exampleInput">Отчество учителя</label>
<input id="lastname_" type="text" name="name">
</div>
<div>
<label for="exampleInput">Стаж</label>
<input id="experience_" type="text" name="experiense">
</div>
<div>
<label for="exampleInput">Категория</label>
<input id="category_" type="text" name="category">
</div>
<div>
<label for="exampleInput">Предмет</label>
<select id="subject_" name="subject" id="">
<?php foreach ($this->subjects as $subject => $subject_name) : ?>
<option value="<?= $subject_name[SUBJECT_ID] ?>"><?= $subject_name[SUBJECT_NAME] ?></option>
<?php endforeach; ?>
</select>
</div>
</form>
</div>
<div>
<button type="button">
<button type="button">
</div>
</div>
<!-- /.modal-content -->
</div>
<!-- /.modal-dialog -->
</div>
<!-- /.modal -->
</div>
<script>edit_teacher($this)
{
$('#id_').val($($this).parent().children('.id').val());
$('#name_').val($($this).parent().parent().children('.name').text());
$('#surname_').val($($this).parent().parent().children('.surname').text());
$('#lastname_').val($($this).parent().parent().children('.lastname').text());
$('#experience_').val($($this).parent().parent().children('.experience').text());
$('#category_').val($($this).parent().parent().children('.category').text());
$('#subject_').val($($this).parent().parent().children('.subject').attr('id'));
}send_change()
{
$id = $('#id_').val();
$name = $('#name_').val();
$surname = $('#surname_').val();
$lastname = $('#lastname_').val();
$experience = $('#experience_').val();
$category = $('#category_').val();
$subject = $('#subject_').val();
$.post('<?= URL. 'ajax_admin/save_teacher'; ?>', {'id': $id, 'name': $name, 'surname': $surname, 'lastname': $lastname, 'experience': $experience, 'category': $category, 'subject': $subject}, function(data) {($('#id_').val() != -1)
{
$tr = $('#teacher_' + $id);
$tr.children('.name').text($name);
$tr.children('.surname').text($surname);
$tr.children('.lastname').text($lastname);
$tr.children('.experience').text($experience);
$tr.children('.category').text($category);
$tr.children('.subject').attr('id', $subject);
$tr.children('.subject').text($("#subject_ option:selected").text());
} else if ($.isNumeric(data)) {
$('#subjects_cont').append($('<tr id="teacher_' + $id + '">' +
'<td>
'<td>
'<td>
'<td>
'<td>
'<td id="' + $subject + '">
'<td width="200"><input type="hidden">
'<button type="button">
'<button type ="button">
'</td>' +
'</tr>'));
}
});
$('#addTeacher').click();
}clean_form() {
$('#id_').val(-1);
$('#name_').val('');
$('#surname_').val('');
$('#experience_').val('');
$('#category_').val('');
$('#lastname_').val('');
$('#category_').val('');
$('#subject_').val('');
}remove_teacher($this) {
$id = $($this).parent().children('.id').val();
$.post('<?= URL. 'ajax_admin/delete_teacher'; ?>', {'id': $id}, function(data) {
$('#teacher_' + $id).remove();
});
}
$(document).ready(function() {
$("#table").tablesorter({: {3: {sorter: false}}});
});
</script>
Приложение Г
(Контроллер)
Папка: controllers
Файлы:.php.php.php.php
Файл: admin.php
<?phpadmin extends controller
{function __construct()
{::__construct();
}index()
{::handleLogin();('location: '. URL. 'admin/teachers');
}subjects()
{::handleLogin();
$this->view->subjects = $this->model->_select_subjects();
$this->view->render('admin/admin_header');
$this->view->render('admin/admin_subjects');
$this->view->render('admin/admin_footer');
}teachers()
{::handleLogin();
$this->view->subjects = $this->model->_select_subjects();
$this->view->teachers = $this->model->_select_teachers();
$this->view->render('admin/admin_header');
$this->view->render('admin/admin_teachers');
$this->view->render('admin/admin_footer');
}pupils()
{::handleLogin();
$this->view->pupils = $this->model->_select_pupils();
$this->view->render('admin/admin_header');
$this->view->render('admin/admin_pupils');
$this->view->render('admin/admin_footer');
}study()
{::handleLogin();
$this->view->render('admin/admin_header');
$this->view->render('admin/admin_study');
$this->view->render('admin/admin_footer');
}search()
{::handleLogin();
$this->view->render('admin/admin_header');
$this->view->render('admin/admin_search');
$this->view->render('admin/admin_footer');
}
}
Файл: form.php
<?phpform extends controller
{function __construct()
{::__construct();
}save_subject()
{::handleLogin();(intval($_POST['id']) > 0 && (isset($_POST['name']) && count_chars($_POST['name'])))
{
$this->model->_update_subject(intval($_POST['id']), $_POST['name']);
} else if (isset($_POST['name']) && count_chars($_POST['name']))
{$this->model->_add_subject($_POST['name']);
} else
{'error';
}
}save_teacher()
{::handleLogin();(intval($_POST['id']) > 0 && (isset($_POST['name']) && count_chars($_POST['name'])))
{
$this->model->_update_teacher(intval($_POST['id']), $_POST['name'], $_POST['surname'], $_POST['lastname'], $_POST['experience'], $_POST['category'], $_POST['subject']);
} else if (isset($_POST['name']) && count_chars($_POST['name']))
{$this->model->_add_teacher($_POST['name'], $_POST['surname'], $_POST['lastname'], $_POST['experience'], $_POST['category'], $_POST['subject']);
} else
{'error';
}
}delete_teacher()
{::handleLogin();(intval($_POST['id']) > 0)
{
$this->model->_delete_teacher(intval($_POST['id']));
} else
{'error';
}
}save_pupil()
{::handleLogin();(intval($_POST['id']) > 0 && (isset($_POST['name']) && count_chars($_POST['name'])))
{
$this->model->_update_pupil(intval($_POST['id']), $_POST['name'], $_POST['surname'], $_POST['lastname'], $_POST['birthday'], $_POST['adress'], $_POST['mather'], $_POST['father']);
} else if (isset($_POST['name']) && count_chars($_POST['name']))
{$this->model->_add_pupil($_POST['name'], $_POST['surname'], $_POST['lastname'], $_POST['birthday'], $_POST['adress'], $_POST['mather'], $_POST['father']);
} else
{'error';
}
}delete_pupil()
{::handleLogin();(intval($_POST['id']) > 0)
{
$this->model->_delete_pupil(intval($_POST['id']));
} else
{'error';
}
}
}
Файл: index.php
<?phpIndex extends controller
{__construct()
{::__construct();
}index()
{
$this->view->render('main/site_header');
$this->view->render('main/site_body');
$this->view->render('main/site_footer');
}
}
Файл: login.php
<?phplogin extends controller
{__construct()
{::__construct();
}index()
{(session_id() == '')
{_start();
}
$this->view->render('login/index', TRUE);
}run()
{
$this->model->run();
}logout()
{('auth', "admin", time(), '/', DOMAIN, FALSE, TRUE);(session_id() == '')
{_start();
}
$_SESSION['loggedInadmin'] = FALSE;_destroy();('location: '. URL);();
}
}
Больше работ по теме:
Предмет: Информационное обеспечение, программирование
Тип работы: Диплом
Новости образования
КОНТАКТНЫЙ EMAIL: [email protected]
Скачать реферат © 2018 | Пользовательское соглашение
ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ