Система автоматизации учета учащихся
Содержание
Введение
.
Общие сведения об ГУО «Гомельская Ирининская гимназия»
.
Постановка задачи
.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 годы. Планы работы учреждения принимаются на
педагогических советах в августе, утверждаются директором. Они основаны на
анализе результатов работы гимназии за прошедший учебный год с учетом
требований государственного уровня, самых последних изменений в системе общего
среднего образования.
Гимназия является некоммерческой организацией,
финансируемой из бюджета города Гомеля.
Предметом деятельности гимназии является
осуществляемая в соответствии с законодательством Республики Беларусь
образовательная деятельность, которая включает в себя организацию и проведение
учебной, воспитательной и методической работы.
Основной целью деятельности учреждения является
реализация государственных образовательных стандартов, формирование знаний,
умений, навыков, интеллектуальное, нравственное, творческое и физическое
развитие личности обучающегося.
Основными задачами гимназии являются:
·
реализация
образовательных стандартов, программ общего среднего образования;
·
обеспечение
получения учащимися общего среднего образования, создание условий для
духовно-нравственного и физического развития личности учащегося;
·
овладение
учащимися основами наук, государственными языками Республики Беларусь, навыками
умственного и физического труда;
·
формирование
нравственных убеждений, культуры поведения, эстетического вкуса и здорового
образа жизни у учащихся;
·
подготовка
учащихся к полноценной жизни в обществе, самостоятельному жизненному выбору,
началу трудовой деятельности и продолжению образования;
·
организация
методической работы по совершенствованию качества обучения, педагогического
мастерства учителей, организации образовательного процесса с использованием
современных средств обучения;
·
осуществление
экспериментальной и инновационной деятельности в сфере образования, прочей
деятельности, связанной с оказанием образовательных услуг, в том числе на
платной договорной основе;
·
создание
безопасных условий при организации образовательного процесса;
·
создание
необходимых условий для организации питания и оказание им медицинской помощи;
·
социально-педагогическая
поддержка учащихся и оказание им психологической помощи;
·
развитие
материально-технической базы учреждения образования.
Принципы работы учреждения образования:
оптимальность, конкретность, перспективность, актуальность, активность,
научность, творчество и компетентность.
Образовательная деятельность гимназии строится
на основе принципов государственной политики в области образования,
образовательных стандартов, современных образовательных и информационных
технологий, на педагогически обоснованном выборе форм, методов, средств
обучения и воспитания, учитывающих культурные традиции и ценности белорусского
народа, других национальных общностей страны, достижения мировой культуры, а
также в соответствии с целями и задачами учреждения, с учетом интересов и
способностей учащихся, их опыта. Обучение, воспитание и развитие учащихся
обеспечиваются педагогическим коллективом во взаимодействии с законными
представителями учащихся, организациями-заказчиками кадров, иными
организациями.
Гимназия создает условия для организации
воспитательного процесса, работы кружков, клубов, секций, общественных
организаций (объединений) учащихся и работников.
Гордость гимназии - учащиеся, которые являются
обладателями премии специального фонда Президента Республики Беларусь по
социальной поддержке одаренных учащихся и студентов. Это Гуленко Алексей,
Громова Диана, Михайлов Алексей, Ковалева Анна, Баленок Инна, Приходько Кирилл,
Ященко Оксана, Баскина Анна. Нельзя не отметить Диану Громову - восходящую
звездочку белорусской эстрады, которая добилась значительного успеха на
международном конкурсе вокалистов в городе Лос-Анжелесе (США) в 2010 году,
завоевав четыре медали, три из которых «золото».
Гимназия уже не первый год является
Республиканской инновационной площадкой Министерства образования Республики
Беларусь: 2003 год - «Внедрение мультипрофильного обучения», 2008 год -
«Инновационный центр повышения квалификации педагогов», 2010-2013 годы - проект
«Внедрение модели расширения рынка образовательных услуг с целью повышения
качества образования и удовлетворения запросов социума».
Значительная роль в деятельности гимназии
отводится исследовательской работе с учащимися. Учреждение в 2011 году
инициировало и обеспечило успешное проведение областной
научно-исследовательской конференции по социально-гуманитарному направлению
«Поиск». В течение ряда лет учащиеся гимназии результативно участвуют в
республиканских конкурсах исследовательских проектов. Команды нашей гимназии стали
дипломантами городских конкурсов «Мир, в котором я живу», «Родному городу на
процветание».
Традиционными в гимназии стали Ирининские
чтения, ежегодный Осенний интеллектуальный марафон, Праздник посвящения в
гимназисты, творческие вечера, концерты, выставки и др.
Учащиеся гимназии - постоянные участники
предметных олимпиад, выставок, фестивалей, акций, научно-практических
конференций и конкурсов в городе, области, республике, в странах СНГ. Учащиеся
гимназии - активные участники районных и областных слетов отрядов юных
инспекторов движения, районных, городских и областных фестивалей искусств.
Важным условием обучения учащихся в гимназии
является участие в деятельности ОО «БРПО» и ОО «БРСМ». Первичная организация ОО
«БРСМ» признана лучшей в городе среди учреждений образования по итогам работы в
2010 году.
Спортивную гордость гимназии олицетворяют Швецов
С.Е., учитель физической культуры и здоровья (двукратный чемпион мира в 2010
г., двукратный чемпион и серебряный призер чемпионата Европы в 2011 г. по
таэквандо); учащиеся, победители первенства Республики Беларусь в 2011 году по
таэквандо и бадминтону.
Выпускников нашей гимназии сегодня можно
встретить в областном и городском лицеях, во всех вузах и техникумах города
Гомеля, а также в вузах Мозыря, Орши, Бобруйска, Витебска, Минска, Сочи,
Москвы, Санкт-Петербурга и других городах.
По итогам работы в 2007, 2009, 2010, 2011 годах
гимназия была признана лучшим учреждением образования Новобелицкого района, а в
2012 году гимназия стала лучшим учреждением города Гомеля.
За время существования ГУО «Гомельская
Ирининская гимназия» сложился профессиональный и мобильный педагогический
коллектив. Учителя гимназии постоянно повышают свой методический уровень. Как
показывает анализ, многие имеют индивидуальный методический почерк, основанный
на инновационных технологиях и принципах личностно-ориентированного обучения.
Гимназия часто становится творческой площадкой
для проведения методических семинаров районного, городского, областного и
республиканского уровней, где ярко проявляется подготовка и профессиональный
уровень учителей нашего учебного учреждения.
Следует отметить широкий спектр сотрудничества
гимназии: учебные учреждения нового типа, учреждения высшего образования города
и области, городской учебно-методический кабинет, Гомельский областной институт
развития образования, учреждения образования и культуры города Гомеля,
областным краеведческим музеем, библиотеками города, учреждениями образования
города, района, области, школами стран ближнего зарубежья, городом Абердином.
В 2013/2014 учебном году в гимназии работает 79
педагогов, обучается 698 учащихся в 29 классах.
За период с 2009 по 2013 годы учащиеся гимназии
получили на республиканской олимпиаде по учебным предметам 83 диплома на уровне
города, 36 диплом - на уровне области, 7 дипломов - на уровне республики. Более
75 наших выпускников награждены золотой и серебряной медалями, они
результативно принимают участие в городских, областных и республиканских
предметных олимпиадах, в республиканских турнирах юных физиков и математиков.
Возглавляет учреждение образования директор.
Вопросами управления учебным процессом занимаются пять заместителей директора
(по учебной работе - 3, один из них курирует начальную школу; по воспитательной
работе - 1; по методической работе - 1). Заместитель директора по АХЧ
занимается вопросами по хозяйственной части. Учебные занятия проводят 85
педагогов. В учреждении также работают педагог-организатор, библиотекарь,
воспитатели, технический персонал, социально-педагогическая служба, в которую
входят социальный педагог и педагог-психолог. Иерархия управления учреждением
представлена на рисунке 1.
Рисунок 1 - Иерархия управления
гимназией
В гимназии 29 учебных кабинета, комплексная
мастерская, кабинет ритмики и танца, библиотека, конференц-зал, актовый зал,
столовая с двумя обеденными залами, спортивный зал с двумя спортивными игровыми
площадками, бассейн с двумя чашами, медпункт.
В учреждении образования имеется два компьютерных
класса. Рабочие места в кабинетах информатики оснащены современными
техническими средствами, IBM совместимыми персональными компьютерами с
соответствующими периферийными устройствами и оборудованием. В одном кабинете
информатики имеется интерактивная доска Smart Board и мультимедийный проектор.
2. Постановка задачи
2.1 Назначение системы
В современных условиях для повышения
эффективности управления необходимо совершенствование работы с документами.
Организация работы с документами влияет на качество работы, организацию труда
работников. Совершенствование и повышение уровня организации и эффективности
труда во многом зависит от того, насколько рационально поставлен в учреждении
поток документооборота.
Проблемы управления потоками документов
актуальны для любого учреждения образования. Но особенную остроту эти проблемы
приобретают при переходе на новые компьютерные технологии, когда привычные
бумажные документы заменяются электронными.
Основу информационной среды любого учреждения составляют
документы, созданные как «традиционным» рукописным, машинописным,
типографическим способом, так и полученные с использованием компьютерных
технологий. В правильной организации документооборота заложена основа
сохранности и эффективного использования документной информации в будущем.
В настоящее время наличие успешно действующей
системы автоматизации документооборота говорит о благополучии учреждения.
Автоматизированная система предоставляет возможность производить оперативный и
эффективный обмен информацией между всеми участками учебно-воспитательного
процесса, позволяет сократить время, требуемое на подготовку конкретных задач,
исключить возможных появлений ошибок подготовки отчётной документации.
Внедрение автоматизированной системы обеспечит
удобство в работе, рациональную организацию производства и снижение
психологических нагрузок. Также снизятся физиологические нагрузки, так как с
внедрением соответствующего программного обеспечения время, затраченное на эту
же работу, существенно уменьшится. Это положительно повлияет на
работоспособность работника, так как приведёт к уменьшению количества
обрабатываемой информации, а также появится дополнительное время для анализа
этой информации.
Внедрение автоматизированной системы учреждения
образования, является сложным процессом. Тем не менее, некоторые проблемы,
возникающие при внедрении системы, достаточно хорошо изучены, формализованы и
имеют эффективные методологии решения. Заблаговременное изучение этих проблем и
подготовка к ним значительно облегчают процесс внедрения и повышают
эффективность дальнейшего использования системы.
В настоящий момент в ряде школ и гимназий города
применяется система ШГИС (Школьная Городская Информационная Система) разработки
ОАО «Гомельский ОТТЦ Гарант».
Основное назначение системы - это создание
электронного дубликата дневника ученика для контроля его успеваемости со
стороны родителей. Основной проблемой для внедрения данной системы является
«человеческий фактор». Перенос оценок из журнала выполняется учителем. Журнал
успеваемости класса ведется в «бумажной» форма, то своевременный и корректный
перенос данных в систему не гарантирован.
Автоматизирование системы для учреждений
среднего образования представлены и разработками кампании ИНИС-СОФН. Все
продукту кампании - коммерческие разработки, основаны на закрытых технологиях,
требуют внедрения и сопровождения.
Основой разрабатываемой системы учета являются
открытые, некоммерческие технологии и программные средства. Система предоставит
возможность работы по локальной (глобальной сети), и отвечает требованиям
безопасности при доступе к данным. В системе используется простой, интуитивно
понятный интерфейс.
Система автоматизации учета учащихся гимназии
предназначена для хранения и анализа первичных данных учащихся и учителей.
Первичными сведениями являются: информация об
ученике и его родителях, успеваемости (годовые оценки по предметам), занятости
во внеклассном обучении (секции, кружки), и достижения ученика (участие в
олимпиадах, соревнованиях, выставках).
Для учителей собираются персональные данные,
сведения по учебной нагрузке (предметы, классы), категория и достижения
учеников (олимпиады, соревнования).
Система предоставляет возможность доступа
нескольких пользователей по локальной (глобальной) сети с использованием
обычного браузера.
2.2 Требования к разрабатываемой
системе
Основными требованиями системы является
открытость платформы, расширяемость и удобство использования.
Открытость платформы подразумевает использование
свободного программного обеспечения (с открытым исходным кодом) и открытых
технологий.
Система предназначена для ввода, хранения и
вывода информации об учащихся. Необходимо предусмотреть возможность дополнения
базы данных и простой реализации этого расширения в программной части
комплекса.
Автоматизированная система учета учащихся должна
иметь удобный, интуитивно понятный интерфейс пользователя.
Требование к системе:
·
авторизация
пользователя по паролю и логину;
·
функция
добавления данных в таблицы;
·
функция
редактирования данных в таблице;
·
поиск
по категориям;
·
сортировка
данных по полям в режиме поиска;
·
подготовка
отчета по результатам поиска;
·
функция
печати отчета.
Разрабатываемая система должна отвечать
требованиям безопасности при доступе к данным:
·
пароли
доступа хранятся в базе данных в зашифрованном виде;
·
после
выхода из системы удаляются все данные пользователя из браузера.
3. Проектирование системы
.1 Сравнительный анализ и выбор
инструментальных средств
.1.1 Обоснование выбора программных
средств реализации
В процессе проектирования были изучены
теоретические и практические сведения, которые необходимы для построения
автоматизированной системы управления реляционной базой данных и создания
интерфейса пользователя.
Проектирование системы велось по трем
направлениям:
1
Проектирование
базы данных;
2
Проектирование
интерфейса программы для работы с базой данных;
3
Проектирование
программного обеспечения, которое управляет базой данных через интерфейс
программы.
Учитывая основные требования разрабатываемой
системы, а именно, открытость платформы, расширяемость и удобство использования
был проведен сравнительный анализ инструментальных средств разработки.
В качестве платформы клиент-сервер была выбрана
система 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 имеет ряд
функций:
·
is_string()
- позволяет проверить, является ли переменная строкой.
·
is_int()
- позволяет определить, является ли переменная целым числом.
·
is_numeric()
- позволяет определить, является ли переменная числом.
·
is_numeric()
- позволяет определить, является ли переменная числом с плавающей точкой.
·
strlen(string)
- позволяет определить длину строки.
·
strtolower()
-преобразует все символы строки в нижний регистр.
·
strtoupper(string)
-преобразует все символы строки в верхний регистр.
В php существует огромное количество других
функций, которые позволяют выполнить, практически любые действия над обработкой
данных, ниже представлены функции используемые в моём дипломном проекте:
·
include()
- позволяет подключать другие файлы, их содержимое становится полностью
доступно в файле, к которому их подключают.
·
isset()
- позволяет определить существует ли переменная, это особенно помогает при
работе с GET и POST переменными.
·
printf()
- позволяет выводить на экран информацию, её работа похожа на работу оператора
echo, и отличается лишь тем, что вместо переменных ставятся маркеры, а
переменные записываются после двойных кавычек и запятой в том порядке в котором
они должны отображаться в выводимой конструкции на месте маркеров.
·
ceil()
- позволяет округлить число в большую сторону.
·
exit()
- при использовании этой функции программный код прекращает выполнение на месте
её вывода. В круглых скобках можно написать сообщение, которое будет выводится
на экран.
·
is_numeric()
- функция проверяет состоит ли переменная из одних цифр.
·
empty()
- функция проверяет переменную на пустоту.
·
stripslashes()
- функция удаляет из текста все бек слеши.
·
htmlspecialchars()
- функция экранирует все HTML теги делая их не действительными при выводе в
браузере.
·
date()
- функция возвращает текущий год, месяц, число.
·
header()
- функция позволяющая перенаправлять пользователя на другую страницу.
·
mysql_query()
- функция в теле которой пишется запрос к MySQL базе данных.
·
mysql_fetch_array()
- эта функция заносит результат выполнения SQL запроса функции mysql_query(), в
ассоциативный массив.
·
mysql_fetch_row()
- функция позволяющая определить количество элементов в БД соответствующих
условию в SQL запросе функции mysql_query().
·
mysql_connect()
- функция осуществляющая соединение с БД.
·
mysql_select_db()
- позволяет выбрать базу данных если одновременно их открыто больше одной.
·
mysql_close()
- функция закрывающая соединение с БД.
·
rand()
- функция генерирует случайное число из диапазона указанного в скобках.
·
strlen()
- функция выводит количество символов в переменной.
3.1.3 Система
управления базами данных MySQL
MySQL - реляционная система управления базами
данных (СУБД).
MySQL является решением для малых и средних
приложений. Входит в состав серверов WAMP (Windows-Apache-MySQL-PHP) и в
портативные сборки серверов Denwer. Традиционно MySQL используется в качестве
сервера, к которому обращаются локальные или удалённые клиенты, однако в
дистрибутив входит библиотека внутреннего сервера, позволяющая включать MySQL в
автономные программы.
База данных представляет собой структурированную
совокупность данных. Эти данные могут быть любыми - от простого списка
предстоящих покупок до перечня экспонатов картинной галереи или огромного
количества информации в корпоративной сети. Для записи, выборки и обработки
данных, хранящихся в компьютерной базе данных, необходима система управления
базой данных, каковой и является ПО MySQL. Поскольку компьютеры замечательно
справляются с обработкой больших объемов данных, управление базами данных
играет центральную роль в вычислениях. Реализовано такое управление может быть
по-разному - как в виде отдельных утилит, так и в виде кода, входящего в состав
других приложений.
MySQL - это система управления реляционными
базами данных. В реляционной базе данных данные хранятся не все скопом, а в
отдельных таблицах, благодаря чему достигается выигрыш в скорости и гибкости.
Таблицы связываются между собой при помощи отношений, благодаря чему
обеспечивается возможность объединять при выполнении запроса данные из
нескольких таблиц. SQL как часть системы MySQL можно охарактеризовать как язык
структурированных запросов плюс наиболее распространенный стандартный язык,
используемый для доступа к базам данных.
MySQL - это ПО с открытым кодом. Применять его и
модифицировать может любой желающий. Такое ПО можно получать по Internet и
использовать бесплатно. При этом каждый пользователь может изучить исходный код
и изменить его в соответствии со своими потребностями.
MySQL является очень быстрым, надежным и легким
в использовании. Если вам требуются именно эти качества, попробуйте поработать
с данным сервером. MySQL обладает также рядом удобных возможностей,
разработанных в тесном контакте с пользователями. Первоначально сервер MySQL
разрабатывался для управления большими базами данных с целью обеспечить более
высокую скорость работы по сравнению с существующими на тот момент аналогами. И
вот уже в течение нескольких лет данный сервер успешно используется в условиях
промышленной эксплуатации с высокими требованиями. Несмотря на то, что MySQL
постоянно совершенствуется, он уже сегодня обеспечивает широкий спектр полезных
функций. Благодаря своей доступности, скорости и безопасности MySQL очень
хорошо подходит для доступа к базам данных по Internet.
MySQL является системой клиент-сервер, которая
содержит многопоточный SQL-сервер, обеспечивающий поддержку различных
вычислительных машин баз данных, а также несколько различных клиентских
программ и библиотек, средства администрирования и широкий спектр программных
интерфейсов (API).
Сервер MySQL постоянно работает на компьютере.
Клиентские программы (например, скрипты PHP) посылают серверу MySQL SQL-запросы
через механизм сокетов (то есть при помощи сетевых средств), сервер их
обрабатывает и запоминает результат. То есть скрипт (клиент) указывает, какую
информацию он хочет получить от сервера баз данных. Затем сервер баз данных
посылает ответ (результат) клиенту (скрипту).
Почему всегда передается не весь результат?
Очень просто: дело в том, что размер результирующего набора данных может быть
слишком большим, и на его передачу по сети уйдет чересчур много времени. Да и
редко когда бывает нужно получать сразу весь вывод запроса (то есть все записи,
удовлетворяющие выражению запроса). Например, нам может потребоваться лишь
подсчитать, сколько записей удовлетворяет тому или иному условию, или же
выбрать из данных только первые 10 записей. Механизм использования сокетов
подразумевает технологию клиент-сервер, а это означает, что в системе должна
быть запущена специальная программа - MySQL-сервер, которая принимает и
обрабатывает запросы от программ. Так как вся работа происходит в
действительности на одной машине, накладные расходы по работе с сетевыми
средствами незначительны (установка и поддержание соединения с MySQL-сервером
обходится довольно дешево).
Структура MySQL трехуровневая: базы данных -
таблицы - записи. Базы данных и таблицы MySQL физически представляются файлами
с расширениями frm, MYD, MYI. Логически - таблица представляет собой
совокупность записей. А записи - это совокупность полей разного типа. Имя базы
данных MySQL уникально в пределах системы, а таблицы - в пределах базы данных,
поля - в пределах таблицы. Один сервер MySQL может поддерживать сразу несколько
баз данных, доступ к которым может разграничиваться логином и паролем. Зная эти
логин и пароль, можно работать с конкретной базой данных. Например, можно
создать или удалить в ней таблицу, добавить записи и т.д. Обычно
имя-идентификатор и пароль назначаются хостинг провайдерами, которые и
обеспечивают поддержку MySQL для своих пользователей.
В реляционной базе данные хранятся в отдельных
таблицах, благодаря чему достигается выигрыш в скорости и гибкости. Таблицы
связываются между собой при помощи отношений, благодаря чему обеспечивается
возможность объединять при выполнении запроса данные из нескольких таблиц. SQL
как часть системы MySQL можно охарактеризовать как язык структурированных
запросов плюс наиболее распространенный стандартный язык, используемый для
доступа к базам данных.
Система безопасности MySQL основана на
привилегиях и паролях с возможностью верификации с удаленного компьютера, за
счет чего обеспечивается гибкость и безопасность. Пароли при передаче по сети
при соединении с сервером шифруются. Клиенты могут соединяться с MySQL,
используя сокеты TCP/IP, сокеты Unix или именованные каналы (named pipes, под
NT).
автоматизация программирование язык учет
3.1.4 Язык гипертекстовой разметки
документов HTML
HTML - язык гипертекстовой разметки, стандартный
язык разметки документов в сети интернет. Язык HTML интерпретируется браузерами
и отображается в виде документа в удобной для человека форме.
Hyper Text Markup Language (HTML) - язык
разметки гипертекста - предназначен для написания гипертекстовых документов,
публикуемых в World Wide Web.
Гипертекстовый документ - это текстовый файл,
имеющий специальные метки, называемые тегами, которые впоследствии опознаются
браузером и используются им для отображения содержимого файла па экране
компьютера.
С помощью этих меток можно выделять заголовки
документа, изменять цвет, размер и начертание букв, вставлять графические
изображения и таблицы. Но основным преимуществом гипертекста перед обычным
текстом является возможность добавления к содержимому документа гиперссылок -
специальных конструкций языка HTML, которые позволяют щелчком мыши перейти к
просмотру другого документа.
HTML-документ состоит из двух частей: собственно
текста, т.е. данных, составляющих содержимое документа, и тегов - специальных
конструкций языка HTML, используемых для разметки документа и управляющих его
отображением. Теги языка HTML определяют, в каком виде будет представлен текст,
какие его компоненты будут исполнять роль гипертекстовых ссылок, какие
графические или мультимедийные объекты должны быть включены в документ.
Графическая и звуковая информация, включаемая в
HTML-документ, хранится в отдельных файлах. Программы просмотра HTML-документов
(браузеры) интерпретируют флаги разметки и располагают текст и графику на
экране соответствующим образом. Для файлов, содержащих HTML-документы приняты
расширения.htm или.html.
В большинстве случаев теги используются парами.
Пара состоит из открывающего <имя_тега> и закрывающего </имя_тега>
тегов. Действие любого парного тега начинается с того места, где встретился
открывающий тег, и заканчивается при встрече соответствующего закрывающего
тега. Часто пару, состоящую из открывающего и закрывающего тегов, называют
контейнером, а часть текста, окаймленную открывающим и закрывающим тегом, -
элементом.
Последовательность символов, составляющая текст
может состоять из пробелов, табуляций, символов перехода на новую строку,
символов возврата каретки, букв, знаков препинания, цифр, и специальных
символов (например #, +, $, @), за исключением следующих четырех символов,
имеющих в HTML специальный смысл: < (меньше), > (больше), &
(амперсанд) и " (двойная кавычка). Если необходимо включить в текст
какой-либо из этих символов, то следует закодировать его особой
последовательностью символов.
Структура HTML-документа
Самым главным из тегов HTML является одноименный
тег <html>. Он всегда открывает документ, так же, как тег </html>
должен непременно стоять в последней его строке. Эти теги обозначают, что
находящиеся между ними строки представляют единый гипертекстовый документ. Без
этих тегов браузер или другая программа просмотра не в состоянии
идентифицировать формат документа и правильно его интерпретировать.
HTML-документ состоит из двух частей: заголовок
(head) и тела (body), расположенных в следующем порядке:
<html>
<head> Заголовок документа </head>
<body> Тело документа </body>
</html>
Чаще всего в заголовок документа включают парный
тег <title>... </title>, определяющий название документа. Многие
программы просмотра используют его как заголовок окна, в котором выводят
документ. Программы, индексирующие документы в сети Интернет, используют
название для идентификации страницы. Хорошее название должно быть достаточно
длинным для того, чтобы можно было корректно указать соответствующую страницу,
и в то же время оно должно помещаться в заголовке окна. Название документа
вписывается между открывающим и закрывающим тегами.
Тело документа является обязательным элементом,
так как в нем располагается весь материал документа. Тело документа размещается
между тегами <body> и </body>. Все, что размещено между этими
тегами, интерпретируется браузером в соответствии с правилами языка HTML
позволяющими корректно отображать страницу на экране монитора.
Текст в HTML разделяется на абзацы при помощи
тега <р>. Он размещается в начале каждого абзаца, и программа просмотра,
встречая его, отделяет абзацы друг от друга пустой строкой. Использование
закрывающего тега </р> необязательно.
Если требуется «разорвать» текст, перенеся его
остаток на новую строку, при этом, не выделяя нового абзаца, используется тег
разрыва строки <BR>. Он заставляет программу просмотра выводить стоящие
после него символы с новой строки. В отличие от тега абзаца, тег <BR> не
добавляет пустую строку. У этого тега нет парного закрывающего тега.
Язык HTML поддерживает логическое и физическое
форматирование содержимого документа. Логическое форматирование указывает на
назначение данного фрагмента текста, а физическое форматирование задает его
внешний вид.
При использовании логического форматирования
текста браузером выделяются различные части текста в соответствии со структурой
документа. Чтобы отобразить название, используется один из тегов заголовка.
Заголовки в типичном документе разделяются по уровням. Язык HTML позволяет
задать шесть уровней заголовков: h1 (заголовок первого уровня), h2, h3, h4, h5
и h6. Заголовок первого уровня имеет обычно больший размер и насыщенность по
сравнению с заголовком второго уровня. Пример использования тегов заголовков:
<hl>l. Название главы</hl>
<h2>l.l. Название раздела</h2>
Теги физического форматирования непосредственно
задают вид текста на экране браузера, например пара <b></b>
выделяет текст полужирным начертанием, <u></u> задает подчеркивание
текста, <font></font> управляет шрифтом текста.
Тег <img> вставляет изображение в
документ, как если бы оно было просто одним большим символом. Пример применения
тега:
<img src = "picture.gif">
Для создания гипертекстовой ссылки используется
пара тегов <а>... </а>. Фрагмент текста, изображение или любой
другой объект, расположенный между этими тегами, отображается в окне браузера
как гипертекстовая ссылка. Активация такого объекта приводит к загрузке в окно
браузера нового документа или к отображению другой части текущей Web-страницы.
Гипертекстовая ссылка формируется с помощью выражения:
<а href = "document.html">ссылка
на документ</а>
Href здесь является обязательным атрибутом,
значение которого и есть URL-адрес запрашиваемого ресурса. Кавычки в задании
значения атрибута href не обязательны. Если задается ссылка на документ на
другом сервере, то вид гиперссылки такой:
<а href =
"#"785380.files/image004.jpg">
Рисунок 4 - Концепция
Model-View-Controller
Общий принцип работы с базой данных через
веб-интерфейс можно описать следующим алгоритмом:
1
Пользователь
заполняет веб-форму и отправляет ее PHP-обработчику, заданному в атрибуте
action.
2
Веб-сервер
(Apache) принимает запрос и вызывает интерпретатор PHP с именем скрипта и
данными веб-формы в качестве параметров.
3
Интерпретатор
PHP загружает на исполнение указанный скрипт и передает ему данные из формы.
4
В
процессе выполнения PHP-скрипта данные из формы подставляются в SQL-запрос.
5
Из
скрипта SQL-запрос передается серверу СУБД MySQL.
6
Набор
данных, полученный в результате выполнения SQL-запроса, возвращается скрипту.
7
PHP-скрипт
использует полученные из БД данные для динамического формирования веб-страницы
и возвращает ее веб-серверу (Apache), который передает ее клиенту (браузеру).
Схема взаимодействия клиента и сервера
представлена на рисунке 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 Создание базы данных
При реализации системы использовались
современные средства разработки, которые позволили упростить процесс создания
базы данных, интерфейса пользователя и программной части системы.
Реализация системы состоит из четырех этапов:
1
Создание
и наполнение базы данных для тестирования.
2
Реализация
пользовательского интерфейса средствами фрейморка CodeIngres (используя
концепцию MVC).
3
Программирование
контроллеров для взаимодействия через интерфейс системы с базой данных.
4
Тестирование
системы.
База данных представлена 16 таблицами. Полное
описание каждой таблицы базы данных гимназии отображено в таблицах 1-16.
Следует отметить, что учебный год не совпадает с
календарным годом. Учебный год начинается 1 сентября одного календарного года,
а завершается 31 мая следующего календарного года. Для удобства представления в
базу данных вносится год, который совпадает с началом учебного. Так как учебный
год является основным фильтром для поиска, то по нему не проводилось нормализации
базы данных. Это позволило упростить программную реализацию системы.
Таблица 1 -
Структура таблицы pupil (ученик)
Атрибут
|
Тип
данных
|
Комментарий
|
id_pupil
|
Int
|
Идентификатор
ученика Первичный ключ
|
surname
|
varchar(30)
|
Фамилия
ученика
|
name
|
varchar(12)
|
Имя
ученика
|
last_name
|
varchar(15)
|
Отчество
ученика
|
birthday
|
Data
|
День
рождения
|
address
|
varchar(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_parent
|
int
|
Идентификатор
родителя Первичный ключ
|
surname
|
varchar(30)
|
Фамилия
ученика
|
name
|
varchar(12)
|
Имя
учителя
|
last_name
|
varchar(15)
|
Отчество
учителя
|
job
|
varchar(80)
|
Место
работы
|
Структура таблицы parent предназначена для
хранения сведений о родителях.
Столбец id_parent генерируется автоматически при
добавлении записи в таблицу и является уникальным идентификатором
родителя.запрос для создания таблицы parent:
CREATE TABLE 'parent' (
'id_parent' INT NOT NULL
AUTO_INCREMENT,KEY ('id_parent')
'name' VARCHAR(12),
'last_name' VARCHAR(15),
'job' VARCHAR(80)
);
Таблица 3 -
Структура таблицы family (семья)
Атрибут
|
Тип
данных
|
Комментарий
|
id_pupil
|
int
|
Внешний
ключ
|
id_parent
|
int
|
Внешний
ключ
|
status
|
varchar(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_teacher
|
int
|
Идентификатор
учителя Первичный ключ
|
surname
|
varchar(30)
|
Фамилия
учителя
|
name
|
varchar(12)
|
Имя
учителя
|
last_name
|
varchar(15)
|
Отчество
учителя
|
id_category
|
int
|
Внешний
ключ
|
Структура таблицы 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_category
|
int
|
Первичный
ключ
|
rank
|
varchar(30)
|
Категория
учителя
|
Структура таблицы category предназначена для
хранения сведений о категории учителя (эта таблица-справочник).
Столбец id_category генерируется автоматически
при добавлении записи в таблицу и является уникальным идентификатором категории
учителя.запрос для создания таблицы category:
CREATE TABLE 'category' (
'id_category' INT NOT NULL
AUTO_INCREMENT,KEY ('id_category')
'rank' VARCHAR(30)
);
Таблица 6 -
Структура таблицы teaching (преподавание)
Атрибут
|
Тип
данных
|
Комментарий
|
id_teacher
|
int
|
Внешний
ключ
|
year
|
year
|
Учебный
год
|
id_subject
|
int
|
Внешний
ключ
|
id_class
|
int
|
Внешний
ключ
|
Структура таблицы 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_pupil
|
int
|
Внешний
ключ
|
year
|
year
|
Учебный
год
|
id_class
|
int
|
Внешний
ключ
|
Структура таблицы 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_class
|
int
|
Идентификатор
класса Первичный ключ
|
class_level
|
int
|
Класс
(год обучения)
|
class_letter
|
char
|
Класс
(буква)
|
Структура таблицы 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_subject
|
int
|
Первичный
ключ
|
subject_title
|
varchar(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_pupil
|
int
|
Внешний
ключ
|
year
|
year
|
Учебный
год
|
id_subject
|
int
|
Предмет
|
point
|
int
|
Годовая
оценка по предмету
|
Структура таблицы 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
|
|
Внешний
ключ
|
year
|
year
|
Учебный
год
|
id_club
|
int
|
Внешний
ключ
|
Структура таблицы 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_club
|
int
|
Идентификатор
класс Первичный ключ
|
club_title
|
varchar(20)
|
Название
секции, кружка
|
Структура таблицы club предназначена для
хранения данных о секциях и кружках (таблица-справочник).запрос для создания
таблицы club:
CREATE TABLE 'club' (
'id_club' INT NOT NULL AUTO_INCREMENT,KEY ('id_club')
'club_title' VARCHAR(20)
);
Таблица 13 -
Структура таблицы olympiad (участие в олимпиадах)
Атрибут
|
Тип
данных
|
Комментарий
|
id_pupil
|
Int
|
Внешний
ключ
|
year
|
Year
|
Учебный
год
|
id_subject
|
Int
|
Внешний
ключ
|
id_region
|
Int
|
Внешний
ключ
|
id_result
|
Int
|
Внешний
ключ
|
Структура таблицы 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_pupil
|
Int
|
Внешний
ключ
|
year
|
year
|
Учебный
год
|
id_club
|
int
|
Внешний
ключ
|
id_region
|
int
|
Внешний
ключ
|
id_result
|
int
|
Внешний
ключ
|
Структура таблицы 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_region
|
int
|
Идентификатор
уровня Первичный ключ
|
status
|
varchar(15)
|
Уровень
соревнования
|
Структура таблицы region предназначена для
хранения сведений об уровне олимпиады, соревнования, конкурса
(таблица-справочник).
Столбец id_region генерируется автоматически при
добавлении записи в таблицу и является уникальным идентификатором уровня
олимпиады, соревнования, конкурса.запрос для создания таблицы region:
CREATE TABLE 'region' (
'id_region' INT,
'status' VARCHAR(15)
);
Таблица 16 -
Структура таблицы result (результаты)
Атрибут
|
Тип
данных
|
Комментарий
|
id_result
|
int
|
Идентификатор
результата Первичный ключ
|
position
|
varchar(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):
·
Ученики;
·
Учителя;
·
Справочники
(Классы, Предметы, Клубы, Уровни, Результаты).
·
Категории
«Ученики и «Учителя» имеют свои подкатегории, «Справочники» заполняются по мере
необходимости.
Рисунок 14 - Общий вид меню
редактирования
Для примера работы меню «Редактирование» выберем
справочник «Предметы». В интерфейсе отображается список предметов и действий,
которые можно выполнить (добавить, удалить предмет, редактировать), как
показано на рисунке 15.
Рисунок 15 - Меню редактирование
словарь предмета
Процесс добавления записи происходит в несколько
этапов. Для начала мы выбираем категорию (например, «Ученики»). Среди учеников
мы выбираем запись, которую планируем редактировать. Все записи в колонках
отсортированы по алфавиту слева сверху вниз и слева направо. Отмечаем
конкретного ученика при помощи метки в левой колонке (checkbox), как показано
на рисунке 16. Выбираем подкатегорию для ученика (в нашем случае - «Секции»).
Рисунок 16 - Редактирование
конкретного ученика
На вкладке редактирования «Секции» для
конкретного ученика мы видим записи связанные с учеником и его участием в
секциях и кружках (по годам). Мы можем добавить, удалить или редактировать
записи, отметив данные о секции в таблице (рисунок 17).
Рисунок 17 - Редактирование данных
по секциям, в которых занят ученик
Для примера добавим новую секцию для ученика
(рисунок 18). Нам предлагается выбрать учебный год, когда ученик занимался в
секции и название секции из списка. Доступно сохранение и отмена операции
добавления записи.
Рисунок 18 - Добавление новой
информации по занятиям в секции
В меню поиск представлены следующие категории:
·
Ученики
·
Учителя
·
Секции
·
Олимпиады
·
Соревнования
При переходе в категорию нам доступна форма
поиска. Результаты поиска выдаются в виде таблицы, отсортированной по колонкам
сверху вниз и слева направо.
Результаты поиска можно распечатать или перейти
к новому поиску.
Общий вид формы поиска по категории «Учитель»
представлен на рисунке 19.
Рисунок 19 - Форма поиска по
категории «Учитель»
Выход из системы осуществляется по нажатию
кнопки меню «Выход». Система запрашивает подтверждение: Выйти из системы?. Если
получен положительный ответ (Да), то осуществляется выход из системы и переход
на страницу входа. Если получен отрицательный ответ (Нет), то система
возвращается в главное окно приложение (с активной кнопкой «Выход»), как
изображено на рисунке 20.
Рисунок 20 - Диалог подтверждения
выхода из системы
4.3
Разработка приложения
4.3.1 Принцип работы приложения
Так как система автоматизации учета является
типовой задачей, то проектирование системы велось в фрейворке CodeIngres с
применением концепции MVC, что позволило минимизировать время разработки и
упростило её реализацию.
Авторизация.
На сервере проверяется наличие переменных сессии
если они есть или есть cookie для данного пользователя, то авторизация
считается успешной. Иначе пользователя перенаправляют на страницу логина, где
он вводит пароль, имя пользователя и после подтверждения на сервер отправляется
запрос подтверждения данных, если данные имеются в базе пользователю отсылаются
cookie об успешной авторизации и перенаправляют на главную страницу системы
управления.
Обработка запроса сервером.
Локальный компьютер (или сервер), на котором
установлено приложение получает пакет HTTP на порт 80 и передает веб-серверу
Apache. Веб-сервер определяет наличие домена в его таблице идет в каталог сайта
и читает файл.htaccess, в котором описано как формировать страницу (картинки js
скрипты напрямую) и запускаться файл index.php.
Файл index.php подключает в себя файл
конфигурации, в котором описаны основные переменные, используемые в системе
(подключение к базе данных, названия таблиц, каталоги), а также файл содержащий
класс bootstrap. Класс bootstrap занимается разбором URL по которому произошел
запрос, сначала определяется контроллер отвечающий за запрос, затем вызываемый
метод и выполняется запрос пользователя.
Формирование страницы на сервере
Процесс формирование страницы начинается с
контроллера, который определяет, какие данные необходимо представить
пользователю, если необходимо обращается к модели и получает данные из базы
данных формирует массивы данных для вывода и передает их в вид который
используя переданные данные и шаблон формирует вывод страницы.
Управление контентом
В панели управления есть возможность управления
контентом :
Добавление, удаление и модификация записей.
Все управление осуществляется с помощью ajax
запросов (для уменьшения трафика между сервером и браузером пользователя).
Выход
Для выхода из системы управления сервер удаляет
текущую сессию и чистит пользовательские cookie.
4.3.2 Физическая структура
приложения
Главный каталог системы состоит из 5 папок и 2
файлов.
Папки:
auth
libs
controllers
models
views
Файлы:
.htaccess
index.php
4.4 Тестирование системы
Тестирование системы необходимо для проверки ошибок
в коде и взаимодействии модулей системы между собой. На этапе проектирования
была выбрана концепция MVC (Model-View-Controller), при которой модификация
одного из компонентов оказывает минимальное влияние на другие. Это позволило
упростить и сократить этап тестирования кода.
Функциональное тестирование проводилось путем
проверки корректности заполнения базы данных и отклика приложения на действия
пользователя.
Система была протестирована по следующим
пунктам:
1. Вход в систему:
·
корректный
ввод логина и пароля;
·
ситуация
ввода логина и/или пароля c ошибкой.
2. Раздел администрирования:
·
переход
в раздел администрирования из разных частей приложения (через главное меню);
·
корректность
отображения данных о пользователях системы (в режиме admin);
·
добавление
нового пользователя, назначение логина и пароля, проверка входа в систему с
этими данными;
·
удаление
нового пользователя, отказа в доступе при входе систему удаленного
пользователя;
·
смена
пароля у пользователя (в режиме администратора), если пользователь забыл свой
пароль. Проверка корректности смены пароля при входе в систему.
3. Раздел редактирования базы данных:
·
доступность
функций раздела редактирования для разных пользователей (admin, guest);
·
связь
полей форм интерфейса с данными в базе;
·
добавление
данных в базу, в том числе и связанных данных;
·
удаление
данных из базы, в том числе удаление всех связанных данных (например, удаление
сведений об ученике).
·
проверена
корректность данных после редактирования.
4. Раздел поиска:
·
доступность
функций раздела поиска для разных пользователей (admin, guest);
·
корректность
результатов поиска по полям с использованием фильтров;
·
тестирование
функций печати по результатам поиска.
5. Выход из системы:
·
проверена
корректность работы формы (диалога) на подтверждение выхода из системы: Выйти
из системы? (Да/Нет);
·
протестирована
корректность выхода из системы, удаление сессии пользователя после согласия
покинуть систему (удаление cookie).
Взаимодействие пользователя с системой
осуществляется посредством браузера. Так как выбор браузера остается за
пользователем, а у каждого браузера своя специфика в отображении некоторых
элементов HTML-кода, потребовалось визуальное тестирование отображения
элементов интерфейса.
Тестирование проводилось в браузерах:
·
Internet
Explorer (версии 6 и 7);
·
Mozilla
Firefox (версии 11 и 13);
·
Google
Chrome (версии 35);
·
Opera
(версии 12).
Во всех браузерах интерфейс отображается
корректно.
Программный комплекс позволяет запустить систему
учета, как на персональном компьютере (эмуляция веб-сервера), так и в локальной
(глобальной) сети в режиме клиент-сервер.
Для тестирования работы системы на персональном
компьютере применялся набор веб-разработчика Denwer 3 для ОС Windows.
В состав пакета входят следующие дистрибутивы:
·
Веб-сервер
Apache 2.2.22 (SSL, SSI, mod_rewrite, mod_php);
·
PHP
5.3.13 с поддержкой GD, MySQL, SQLite;
·
СУБД
MySQL 5.5 с поддержкой транзакций;
·
phpMyAdmin
3.5 - система управления MySQL через Web-интерфейс.
С указанной конфигурацией Denwer система
корректно работала и в локальной сети гимназии.
Все выявленные на этапе тестирования ошибки были
устранены.
Заключение
Разработанная система автоматизации учета
учащихся гимназии предназначена для хранения и анализа первичных данных
учащихся.
Система содержит основную информацию об учащихся
(фамилия, имя, отчество, дата рождения, домашний адрес, информацию о родителях
и т.д.), а также достижения в различных областях учебно-воспитательного
процесса (участие в конкурсах, спортивных соревнованиях, их результативность и
т.д.).
Она обеспечивает возможность удаления,
добавления и редактирования записей как основных, так и подчиненных таблиц
данных. Так же предоставляет возможность просмотра полных данных по каждой
таблице и по всей базе данных в целом, поддерживать полноту информации.
Работа системы заключается в обслуживании двух
встречных потоков новой информации: ввода новой информации и выдачи текущей
информации по конкретному запросу. Эти требования обеспечиваются наличием
стандартных процедур поиска информации и тем, что данные системы расположены в
определенном порядке.
Удобный, интуитивно понятный интерфейс
автоматизированной системы, с одной стороны, позволяет легко ориентироваться в
программе, требуя от пользователя лишь небольшого количества специальных
навыков работы с электронно-вычислительными машинами, с другой стороны,
предоставляет пользователю оперативную информацию обо всех интересующих его
данных, учитывая права доступа данного пользователя к той или иной информации,
хранящийся в базе данных учащихся гимназии.
Достоинство созданной системы - открытость
платформы, переносимость и расширяемость. Это позволяет добавлять к системе
новые функции или совершенствовать уже имеющиеся.
При подготовке дипломной работы особое внимание
уделялось изучению современных технологий проектирования и реализации. В
качестве основы для системы была выбрана архитектура клиент-сервер, где сервер
реализован на базе технологии WAMP (Windows-Apache-MySQL-PHP), а клиентом
выступает обычный браузер. Для упрощения создания программной части системы
использовалась концепция MVC (Model-View-Controller). Проектирование системы
выполнялось средствами фреймворка CodeIngres.
В ходе работы над проектом были получены знания
по следующим технологиям:
·
язык
гипертекстовой разметки документов HTML;
·
проектирование
реляционных баз данных и язык запросов SQL;
·
СУБД
MySQL;
·
концепция
MVC (Model-View-Controller);
·
язык
программирования PHP и фреймворк CodeIngress.
Список используемых источников
1
Базы
данных: Учебник для высших учебных заведений / Под ред. Проф. А.Д. Хомоненко. -
4-е изд. - СПб.: Корона Принт, 2004. - 736.
2
Бейли,
Л. Изучаем PHP и MySQL / Л. Бейли, М. Моррисон. - Эсмо, 2010. - 800 с.
3
Гольцман,
В. MySQL 5.0. Библиотека программиста / В. Гольцман. - Питер, 2010. - 370 с.
4
Дейт
К.Дж. Введение в системы баз данных / Introduction to Database Systems. - 8-е
изд. - М.: Вильямс, 2005. - 1328 с.
5
Колисниченко,
Д.Н. PHP 5/6 и MySQL 6. Разработка Web-приложений / Д.Н. Колисниченко. -
БХВ-Петербург, 2011. - 528 с.
6
Комолова,
Н. HTML: самоучитель / Н. Комолова, Е. Яковлева. - СПб.: Питер, 2011. - 288 с.
7
Кузнецов,
М.В. MySQL на примерах / М.В. Кузнецов, И.В. Симдянов. - СПб.: БХВ-Петербург,
2007. - 592 с.
8
Кузнецов,
М.В. PHP 5 на примерах / М.В. Кузнецов, И.В. Симдянов, С.В. Голышев. - СПб.:
БХВ-Петербург, 2006. - 576 с.
9
Прохоренок,
Н.А. HTML, JavaScript, PHP и MySQL. Джентльменский набор Web-мастера / Н.А.
Прохоренок. - СПб.: БХВ-Петербург, 2010. - 912 с.
10
Ташков,
П. А. Веб-мастеринг. HTML, CSS, JavaScript, PHP, CMS, AJAX, раскрутка / П.А.
Ташков. - СПб.: Питер, 2010. - 512 с.
11
Харрис,
Э. PHP/MySQL для начинающих / Э. Харрис. - М.: Кудиц-Образ, 2005. - 384 с.
12
CodeIgniter
User Guide Version 2.1.3 [Электронный ресурс] - Режим доступа:
http://cidocs.ru/213e/overview/at_a_glance.html. - Дата доступа: 30.04.2014.
13
История
и традиции ГУО «Гомельская Ирининская гимназия» [Электронный ресурс] / Сайт ГУО
«Гомельская Ирининская гимназия». - Гомель, 2014. - Режим доступа:
http://www.iringimnaz.gomel.by. - Дата доступа: 27.04.2014.
14
Описание
ШГИС [Электронный ресурс] / Сайт «Школьная Городская Информационная Система». -
Гомель, 2013. - Режим доступа: dnevnik.iptv.by. - Дата доступа: 02.05.2014.
15
Компания
«ИНИС-СОФТ». Продукты [Электронный ресурс] / Сайт Компании «ИНИС-СОФТ». -
Минск, 2014. - Режим доступа: www.inissoft.by/products.shtml. - Дата доступа:
02.05.2014.
Приложения
Приложение А
Авторизация и конфигурационные файлы
Файл: 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',
'http://localhost/');('HOST_ROOT', $_SERVER['DOCUMENT_ROOT']. '/');('SITE',
'localhost');('DOMAIN', 'localhost');('MAIN_DIR', dirname(__FILE__));('LIBS',
'libs/');('TABLE_PREF', 'sc_');
/* 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>
<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();
{(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);();
}
}