Дипломная работа на тему Разработка информационной системы для раскрытия отчетности жилищно-коммунальных организаций

ВВЕДЕНИЕ

Интернет – это всемирная компьютерная сеть, основным назначением которой является совместное использование информации. Интернет представляет собой совокупность множества региональных и ведомственных сетей, функционирующих на основе протокола обмена данными IP (Internet Protocol), объединенных в одну адресную систему.

Более корректно под словом Интернет следует понимать не только множество соединенных между собой компьютеров, но протокол обмена, то есть, принятые правила обмена данными и формат этих данных, а также совокупность информационных услуг, предоставляемых в сети.

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

При помощи одного html этого всего не достичь, так как это всего лишь язык разметки, который является инструментом для создания гиперссылок, вставки изображений и т.д. Для наглядности приведём простой пример. При помощи данного языка очень просто и очень быстро можно сделать форму для отправки какого-нибудь запроса. Такая форма будет иметь все нужные атрибуты: поле для ввода данных и кнопку отправки. Но при её нажатии ровным счётом ничего не произойдёт, так как не был задан сценарий действий, который необходимо выполнить, чтобы был какой-то конкретный результат. Вот именно поэтому создание интерактивных компонентов является задачей Web-программирования.

Web-программирование осуществляется с помощью специальных программных средств – скриптов. Они, в свою очередь, делятся на два основных вида: серверные и клиентские. Серверные скрипты выполняются на сервере, то есть того компьютера, на котором размещён сайт, ещё до загрузки страниц сайта на компьютер пользователя. А клиентские скрипты выполняются уже после загрузки этих страниц на компьютер пользователя.

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

На данном сайте можно узнать всю информацию о своей деятельности, которую организации, осуществляющие деятельность в сфере управления многоквартирными домами, обязаны раскрывать путём публикации её в сети Интернет на сайте www.reformagkh.ru, определённый приказом Минрегиона РФ от 02.04.2013 года № 124. Также на нём можно узнать всё о капитальном ремонте: найти ответы на самые актуальные вопросы и контактную информацию специалистов в своём регионе и многое другое.

1. АНАЛИТИЧЕСКИЙ ОБЗОР

Для того, чтобы начать разрабатывать данный дипломный проект, необходимо провести анализ похожих проектов и на чём они разрабатывались, то есть какие программные и аппаратные средства использовались при создании.

1.1 Анализ схожих проектов

Приложение «Инфокрафт: формула ЖКХ»

Программа «Инфокрафт: формула ЖКХ» предназначена для автоматизации учёта в ТСЖ, ЖСК, управляющих компаниях ЖКХ. Её решения позволяют помогать рассчитывать квартплату, вести бухгалтерский и паспортный учёт, учитывать жилой фонд, обслуживать собственников помещений и вести претензионную работу. Решения разработаны на платформе «1С: Предприятие8» и сертифицированы фирмой «1С». Работают на отдельном компьютере, в локальной сети или в облаке «Инфокрафт ЖКХ 365».

Программный комплекс «Супер МКД – Инфообмен»

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

Сократить расходы на предоставление внешней отчётности на www.reformagkh.ru.

Без дополнительных средств и затрат времени сотрудников обеспечить раскрытие информации на втором ресурсе – предоставленном сайте с доменным именем формата *****.731pp.ru

Анализ программных средств разработки Web-приложений

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

Язык РНР

РНР – скриптовый язык общего назначения для разработки серверных частей веб-приложений. На заре своего развития PHP был чистым интерпретатором (исполнял рукописный текст программы, а не байт-код), что не способствовало большой производительности. Далее оказалось, что перевести текст программы в промежуточный оптимизированный байт-код, а затем уже исполнить результат оказывается намного быстрее. Благодаря этому современный движок РНР состоит из двух частей: транслятора в байт-код и интерпретатора байт-кода.

Плюсы:

Является свободным программным обеспечением, распространяемым под особой лицензией (PHP license)

Легок в освоении на всех этапах

Поддерживается большим сообществом пользователей и разработчиков

Имеет развитую поддержку баз данных

Имеется огромное количество библиотек и расширений языка

Может использоваться в изолированной среде

Предлагает натуральные средства организации веб-сессий, программный интерфейс расширений

Является довольно полной заменой проприетарной среды ASP (Active Server Pages) от Microsoft

Может быть развёрнут на любом сервере

Портирован под большое количество аппаратных платформ и операционных систем

Минусы:

Не подходит для создания десктопных приложений или системных компонентов

Имеет слабые средства работы с исключениями

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

Объекты передаются по значению, что смущает программистов, привыкших к передаче объектов по ссылке

Веб-приложения, написанные на РНР, зачастую имеют проблемы с безопасностью

Язык Ruby (Ruby on Rails)

Ruby – динамический императивный объектно-ориентированный язык программирования, разработанный Юкихиро Матсумото. Ruby был создан под влиянием таких языков, как Perl, Eiffel и Smalltalk. Характеризуется динамической типизацией и автоматическим управлением памятью. Язык Ruby используется в веб-разработке в составе открытого веб-фреймворка Rails, чаще называемого Ruby on Rails (RoR).

Плюсы:

Открытая разработка

Работает на многих платформах

Может внедряться в HTML-разметку

Относится к языкам программирования сверхвысокого уровня (VHLL), то есть обладает высоким уровнем абстракции и предметным подходом в реализации алгоритмов, благодаря чему программы хорошо масштабируются и легко сопровождаются

Реализует концептуально чистую объектно-ориентированную парадигму

Предоставляет продвинутые методы манипуляции строками и текстом

Легко интегрирует в свои программы высокопроизводительные серверы баз данных (DB2, MySQL, Oracle и Synbase)

Простой и чистый синтаксис, что делает его легким в обучении и многие другие

Недостатки:

Обучение языку выше начального уровня может оказаться непростым

Информационных ресурсов, посвященных Ruby, на данный момент недостаточно

Низкая производительность по сравнению со многими другими языками, применяемых в веб-разработке

Ruby относительно медленно развивается и разрабатывается

Python – язык программирования общего назначения

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

Как и Ruby, Python имеет целью приблизить синтаксис реальной программы, написанной на нём, к описывающему задачу псевдокоду, что позволяет программисту уменьшить объём программы. Идея создания данного языка возникла в конце 1980-х годов и была реализована Гвидо ван Россумом.

Элегантный дизайн и эффектный, дисциплинирующий синтаксис этого языка облегчают программистам совместную работу с кодом. Python – мультипарадигмальный язык программирования: он позволяет сомещать процедурный подход к написанию кода с объектно-ориентированным и функциональным.

Плюсы:

Открытая разработка

Прост в обучении, особенно на начальном этапе

Особенности синтаксиса стимулируют программиста писать хорошо читаемый код

Предоставляет средства быстрого прототипирования и динамической семантики

Имеет большое сообщество, позитивно настроенное по отношению к новичкам

Множество полезных библиотек и расширений легко использовать в своих проектах

Механизмы модульности хорошо продуманы и могут легко использоваться и др.

Недостатки:

Не слишком удачная поддержка многопоточности

Отсутствие коммерческой поддержки средств разработки

Изначальная ограниченность средств для работы с базами данных

Низкая производительность

1.2 Анализ требований к приложению

Требования, предъявляемые к Web-приложению:

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

Быстродействие определяется как среднее время обработки запроса пользователя к системе.

Безопасность включает в себя: разграничение прав доступа, авторизации и верификация пользователей.

Масштабируемость – способность системы увеличивать свою производительность при повышенной нагрузке и добавлении ресурсов. Для пользователей должен оставаться незаметным момент (т.е. время отклика системы на запросы пользователя не должно заметно изменяться), когда возрастёт нагрузка (например, к приложению получают доступ одновременно ещё несколько пользователей ).

Кроссплатформенность – информация должна отображаться в том виде, в каком она есть, в самых популярных браузерах, а именно Google Chrome, Opera, Mozilla Firefox и Safari.

2. ПРОЕКТИРОВАНИЕ ПП

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

Определение функциональности ПП

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

В данном случае требуются:

интуитивно-понятный интерфейс, то есть простой пользователь не будет теряться в работе с информацией в программном продукте в первый раз

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

вся информация, которая будет заноситься в базу данных программного продукта, будет сохраняться

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

Выбор и обоснование средств разработки

Так как приложение представлено в виде сайта, то безусловно понадобятся: HTML – язык вёрстки и таблица стилей CSS.

Для работы с базой данных будет использоваться язык MySQL в программе «phpMyAdmin, потому что для написания серверной части кода будет использоваться язык web-программирования PHP.

Язык PHP был выбран потому, что он был уже немного знаком, он лёгок в освоении и он поддерживается на многих платформах, что очень хорошо подходит к данному проекту. C данным языком буду работать в двух программах: Notepad++ для настройки кодировки файлов и написания кода и phpDisigner 7 для отладки кода.

Разработка структур и алгоритмов

Разработка структур данных базы данных

Итак, в базе данных будут находиться 7 таблиц:

cold_water_system

heating_system

hot_water_system

houses

house_type

house_wall_material

user

Таблицы «cold_water_system», «heating_system», «hot_water_system», «house_type», «house_wall_material» будет иметь 3 поля: id, identificator и text, где поле «id» с типом данных int (численный) – это номер строки в таблице и первичный ключ, поле «identificator» с типом данных int (численный) – это число, которое несёт в себе некоторую информацию, а поле «text» с типом данных text будет содержать ту самую информацию.

Таблица «houses» будет содержать в себе 12 полей:

id

house_id

street

build_year

house_type

house_wall_material

heating_system

hot_water_system

cold_water_system

living_quarter

not_living_quarter

area_common_property

Поле «id» с типом данных int (численный) – это номер строки в таблице и первичный ключ. Поле «house_id» с типом данных int (численный) – это номер здания. Поле «street» с типом данных varchar (любой символ) будет содержать наименование улицы, где расположено здание. Поле «build_year» с типом данных int (численный) будет содержать информацию о годе введения в эксплуатацию данного здания. Поле «house_type» с типом данных int (численный) будет содержать информацию о типе здания, которая будет отображаться из поля «idientificator» таблицы «house_type». Поле «house_wall_material» с типом данных int (численный) будет содержать информацию о материале, из которого здание выстроено, которая будет отображаться из поля «idientificator» таблицы «house_wall_material». Поле «heating_system» с типом данных int (численный) будет содержать информацию о типе системы отопления здания, которая будет отображаться из поля «idientificator» таблицы «heating_system». Поле «hot_water_system» с типом данных int (численный) будет содержать информацию о типе системы подачи горячей воды, которая будет отображаться из поля «idientificator» таблицы «hot_water_system». Поле «cold_water_system» с типом данных int (численный) будет содержать информацию о типе системы подачи холодной воды, которая будет отображаться из поля «idientificator» таблицы «cold_water_system». Поле «living_quarter» с типом данных int (численный) будет содержать информацию о количестве жилой площади. Поле «not_living_quarter» с типом данных int (численный) будет содержать информацию о количестве нежилой площади. И последнее поле «area_common_property» с типом данных decimal (десятичное число) будет содержать информацию об общей площади собственности.

Разработка структуры сайта

Так как у меня нет навыка работы для создания макета сайта, поэтому воспользуюсь встроенной в ОС Windows программой Paint, чтобы создать примерную структуру программного продукта. Примерная структура сайта изображена на Рисунке 1.

Рисунок 1 – Примерная структура сайта

Как видно в структуре сайта имеется 4 блока. В блоке «Название сайта» соответственно будет наименование сайта. В блоке «Авторизация пользователя» будут поля для ввода логина и пароля, а также две кнопки: «войти» и «регистрация». В блоке «Основное меню» будут содержаться 3 ссылки на страницы на соответствующие страницы: «Главная», «База данных» и Контакты». И последний блок «Контент». В нём будет отображаться информация основной таблицы «houses», а так же будет создана кнопка «Добавить запись» для ввода и сохранения новой информации в базе данных приложения.

3. РЕАЛИЗАЦИЯ ПП

3.1 Реализация базы данных

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

Для её создания была выполнена команда:

CREATE TABLE houses (id INT(11), house_id INT(10), street VARCHAR(10), build_year INT(10), house_type INT(1), house_wall_material INT(1), heating_system INT(1), hot_water_system INT(1), cold_water_system INT(1), house_state INT(1), house_floor_type INT(1), electricity_system INT(1), gas_system INT(1), living_quarter INT(1), not_living_quarter INT(1), area_common_property DECIMAL(10,2));

После её создания я заполнил одну строчку в ней командой:

INSERT TABLE houses VALUES(0, 1, “Зосимовская”, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 500,00);

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

После того, как таблица была заполнена, я приступил к реализации других таблиц и их заполнению.

Создание и заполнение таблицы house_type.

CREATE TABLE house_type (id INT(11), identificator INT(1), text TEXT);

INSERT TABLE house_type (1, 1, “Общежитие”);

INSERT TABLE house_type (2, 2, “Объект индивидуального жилищного строительства”);

INSERT TABLE house_type (3, 3, “Жилой дом блокированной застройки”);

INSERT TABLE house_type (4, 4, “Многоквартирный дом”);

Создание и заполнение таблицы house_wall_material.

CREATE TABLE house_wall_material (id INT(11), identificator INT(1), text TEXT);

INSERT TABLE house_wall_material (1, 1, “Нет данных”);

INSERT TABLE house_wall_material (2, 2, “Каменные, кирпичные”);

INSERT TABLE house_wall_material (3, 3, “Панельные”);

INSERT TABLE house_wall_material (4, 4, “Блочные”);

INSERT TABLE house_wall_material (5, 5, “Смешанные”);

INSERT TABLE house_wall_material (6, 6, “Монолитные”);

INSERT TABLE house_wall_material (7, 7, “Деревянные”);

INSERT TABLE house_wall_material (8, 8, “Прочие”);

Создание и заполнение таблицы heating_system.

CREATE TABLE heating_system (id INT(11), identificator INT(1), text TEXT);

INSERT TABLE heating_system (1, 1, “Нет данных”);

INSERT TABLE heating_system (2, 2, “Отсутствует”);

INSERT TABLE heating_system (3, 3, “Центральное”);

INSERT TABLE heating_system (4, 4, “Автономное”);

INSERT TABLE heating_system (5, 5, “Поквартирное”);

INSERT TABLE heating_system (6, 6, “Печное”);

Создание и заполнение таблицы hot_water_system.

CREATE TABLE hot_water_system (id INT(11), identificator INT(1), text TEXT);

INSERT TABLE hot_water_system (1, 1, “Нет данных”);

INSERT TABLE hot_water_system (2, 2, “Отсутствует”);

INSERT TABLE hot_water_system (3, 3, “Централизованная открытая”);

INSERT TABLE hot_water_system (4, 4, “Централизованная закрытая”);

INSERT TABLE hot_water_system (5, 5, “Поквартирная”);

INSERT TABLE hot_water_system (6, 6, “Автономная”);

Создание и заполнение таблицы cold_water_system.

CREATE TABLE cold_water_system (id INT(11), identificator INT(1), text TEXT);

INSERT TABLE cold_water_system (1, 1, “Нет данных”);

INSERT TABLE cold_water_system (2, 2, “Отсутствует”);

INSERT TABLE cold_water_system (3, 3, “Централизованное”);

INSERT TABLE cold_water_system (4, 4, “Открытое”);

Создание и заполнение таблицы house_state.

CREATE TABLE house_state (id INT(11), identificator INT(1), text TEXT);

INSERT TABLE house_state (1, 1, “normal”);

INSERT TABLE house_state (2, 2, “warning”);

INSERT TABLE house_state (3, 3, “alarm”);

INSERT TABLE house_state (4, 4, “noinfo”);

Создание и заполнение таблицы house_floor_type.

CREATE TABLE house_floor_type (id INT(11), identificator INT(1), text TEXT);

INSERT TABLE house_floor_type (1, 1, “нет данных”);

INSERT TABLE house_floor_type (2, 2, “железобетонные”);

INSERT TABLE house_floor_type (3, 3, “деревянные”);

INSERT TABLE house_floor_type (4, 4, “смешанные”);

Создание и заполнение таблицы electricity_system.

CREATE TABLE electricity_system (id INT(11), identificator INT(1), text TEXT);

INSERT TABLE electricity_system (1, 1, “нет данных”);

INSERT TABLE electricity_system (2, 2, “отсутствует”);

INSERT TABLE electricity_system (3, 3, “централизованное”);

INSERT TABLE electricity_system (4, 4, “комбинированное”);

Создание и заполнение таблицы gas_system.

CREATE TABLE gas_system (id INT(11), identificator INT(1), text TEXT);

INSERT TABLE gas_system (1, 1, “нет данных”);

INSERT TABLE gas_system (2, 2, “отсутствует”);

INSERT TABLE gas_system (3, 3, “централизованное”);

Кстати говоря, хочу отметить, что все таблицы в базе данных связаны , то есть имеется главная таблица «houses», а с ней имеют связи оставшиеся таблицы, кроме таблицы «users» – она отдельно хранит информацию о пользователях. Визуально связи и таблицы выглядят так, как показано на рисунке 2.

Рисунок 2 – Таблицы и их связи мой БД

3.2 Реализация HTML- и PHP-кода

После проведения всех описанных в пункте 3.1 манипуляций я смело приступил к реализации сайта.

Сперва я создал 4 файла: index.php, header.php, menu.php и style.css. В первом файле я реализовывал главную страницу сайта, во втором файле – шапка сайта, в третьем – меню, которое располагалось прямо под шапкой, а в последнем – таблица стилей моего сайта.

В первых трёх файлах я создал по одному блоку div в формате:

<div class = header> это шапка </div>

<div class = menu> это меню </div>

<div class = content> это контент </div>

А в таблице стилей я прописал следующее для каждого класса:

div.header

{

display: block;

vertical-align: middle;

width: 100%;

height: 200px;

border: 1px solid black;

background: url(2.png);

}

div.menu{

display: inline-block;

width: 100%;

height: 50px;

}

div.content{

display: block;

height: 700 px;

width: 100%

}

Немного поясню. Команда «display» позволяет определить, как элемент должен быть показан в документе. Команда «vertical-align» позволяет выровнять элемент. В данном случае – по центру. Команда «width» позволяет задать ширину. Команда «height» позволяет задать высоту элемента. С помощью команды «border» я залил границы каждого элемента, то есть шапки, контента и меню чёрным цветом толщиной в 1 пиксель для наглядности, чтобы было проще ориентироваться себе. А командой «background» я задал фон шапке с помощью файла, найденного на просторах сети Интернет специально подогнанного под необходимые размеры. В итоге всего этого мой предварительный результат выглядел почти так же, как на рисунке 3.

Рисунок 3 – Предварительный вид сайта

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

Создание головы таблицы.

<div class=”content”>

<font face=”Times New Roman” size=”2″ color=”black”>

<table border = “1” cellpadding=”6″>

<tr>

<th>Номер дома</th>

<th>Улица</th>

<th>Год основания</th>

<th><a href=”house_typeDB.php”>Тип здания<a></th>

<th><a href=”house_wall_material.php”>Внешний материал здания</th>

<th><a href=”heating_system.php”>Система отопления</th>

<th><a href=”hot_water_system.php”>Система подачи горячей воды</th>

<th><a href=”cold_water_system.php”>Система подачи холодной воды</th>

<th>Жилая площадь</th>

<th>Нежилая площадь</th>

<th>Общая площадь</th>

</tr>

Немного пояснений по порядку. Тег <font> позволяет задать некоторые свойства таблицы. В моём примере я задал свойства шрифта, то есть стиль “Times New Roman”, размер – 2 и цвет шрифта – черный.

Далее я создаю таблицу с помощью тегов <table></table>, также задаю ей свойства: «border» – создаю заливку границ шириной в 1 пиксель, «align» – выравнивание текста внутри таблицы по центру, «cellpadding=”6”» – задаю расстояние в ячейках таблицы между текстом и границей ячейки.

Следующими тегами <th></th> создаю заголовки столбцов, которые выделены полужирным начертанием. Попутно некоторые заголовки я создаю в виде ссылок при помощи тегов <a></a>, указывая при этом, на какой сайт или в какой файл она приведёт. Те файлы, что указаны в ссылках, будут созданы позднее.

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

Создаётся новый файл сonnection.php, который содержит следующие строки:

<?php

$host=”localhost”;

$user=”root”;

$password=”qwerty”;

$db=”diplom”;

$connection = mysql_connect($host, $user, $password) or die(“Error”);

mysql_query(“set_client=’utf8”);

mysql_query(“set character_set_results=’utf8”);

mysql_query(“set collation_connection=’utf8_general_ci'”);

mysql_query (“SET NAMES utf8”);

$select_bd = mysql_select_db($db, $connection) or die(“Error”);

?>

Кратко поясню, что делает этот файл. Перед тем, как вообще зайти в интерфейс программы phpMyAdmin, чтобы создать базу данных, мне требовалось создать пользователя. Таким образом, созданная БД имеет свой хост, своего пользователя, пароль и имя базы данных. Эту информацию и хранят те четыре переменные, что описаны в коде (имя переменной соответствует самой информации). Следующая переменная $connection создаёт подключение к phpMyAdmin. Если подключение успешное, то продолжаем дальше, в противном случае – выводит сообщение о том, что подключение не удалось. А переменная $connect_bd позволяет нам подключиться к той базе данных, которая указана в скобках.

А теперь вернёмся к завершению создания таблицы. Последняя часть кода таблицы:

<?php

$result = mysql_query(“SELECT * FROM houses”);

while ($myrow = mysql_fetch_array($result))

{

$pole1=$myrow[‘house_id’];

$pole2=$myrow[‘street’];

$pole3=$myrow[‘build_year’];

$pole4=$myrow[‘house_type’];

$pole5=$myrow[‘house_wall_material’];

$pole6=$myrow[‘heating_system’];

$pole7=$myrow[‘hot_water_system’];

$pole8=$myrow[‘cold_water_system’];

$pole9=$myrow[‘living_quarter’];

$pole10=$myrow[‘not_living_quarter’];

$pole11=$myrow[‘area_common_property’];

echo “<div style=’text-align:center;’>

<tr>

<td align=’center’>$pole1</td>

<td align=’center’>$pole2</td>

<td align=’center’>$pole3</td>

<td align=’center’>$pole4</td>

<td align=’center’>$pole5</td>

<td align=’center’>$pole6</td>

<td align=’center’>$pole7</td>

<td align=’center’>$pole8</td>

<td align=’center’>$pole9</td>

<td align=’center’>$pole10</td>

<td align=’center’>$pole11</td>

</tr>”;

echo “</div>”;

}?>

</table>

Итак, в переменную $result заносится выборка информация каждого поля одной строчки из таблицы «houses». Затем эта информация записывается в массив $myrow. Далее каждое поле из таблицы отдельно записывается в свою переменную. А цикл «while» помогает пробежаться по каждой записи в таблице и. И наконец, с помощью команды вывода «echo» мы «рисуем ещё строчку таблицы в документе, тем самым она заполняется с помощью «while». Результат этого кода представлен на рисунке 4.

Рисунок 4 – Основная таблица сайта

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

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

Сперва нужно создать кнопку, которая могла бы отправить пользователя на страницу, где пользователь мог был занести данные в БД.

<form>

<button formaction=”invite.php”>Добавить запись</button>

</form>

С помощью этого куска кода я создаю форму, в которой создаётся кнопка с говорящим названием «Добавить запись». Нажав на неё, пользователь попадает на заранее созданную страницу в файле invite.php. Часть кода, хранимого в этом файле такова:

<div class=”invite”>

<form action=”query-invite.php” method=”post”>

<label>Номер дома:</label><br />

<input type=”text” name=”house_id”><br />

<label>Улица:</label><br />

<input type=”text” name=”street”><br />

<label>Год ввода в эксплуатацию:</label><br />

<input type=”text” name=”build_year”><br />

<label>Тип здания:</label><br />

<?php

$result = mysql_query(“SELECT identificator FROM house_type”);

echo ‘<select style=”width: 175px” name=”house_type”>’;

while ($row = mysql_fetch_array($result))

{

$pole1=$row[‘identificator’];

echo “<option value=’$row[identificator]’>$row[identificator]</option>”;

}

echo “</select>”;

?></br>

<label>Внешний материал здания:</label><br />

<?php

$result = mysql_query(“SELECT type FROM house_wall_material”);

echo ‘<select style=”width: 175px” name=”house_wall_material”>’;

while ($row = mysql_fetch_array($result))

{

$pole1=$row[‘identificator’];

echo “<option value=’$row[type]’>$row[type]</option>”;

}

echo “</select>”;

?></br>

<label>Система отопления:</label><br />

<?php

$result = mysql_query(“SELECT identificator FROM heating_system”);

echo ‘<select style=”width: 175px” name=”heating_system” >’;

while ($row = mysql_fetch_array($result))

{

$pole1=$row[‘identificator’];

echo “<option value=’$row[identificator]’>$row[identificator]</option>”;

}

echo “</select>”;

?></br>

<label>Система подачи горячей воды:</label><br />

<?php

$result = mysql_query(“SELECT identificator FROM hot_water_system”);

echo ‘<select style=”width: 175px” name=”hot_water_system”>’;

while ($row = mysql_fetch_array($result))

{

$pole1=$row[‘identificator’];

echo “<option value=’$row[identificator]’>$row[identificator]</option>”;

}

echo “</select>”;

?></br>

<label>Система подачи холодной воды:</label><br />

<?php

$result = mysql_query(“SELECT identificator FROM cold_water_system”);

echo ‘<select style=”width: 175px” name=”cold_water_system”>’;

while ($row = mysql_fetch_array($result))

{

$pole1=$row[‘identificator’];

echo “<option value=’$row[identificator]’>$row[identificator]</option>”;

}

echo “</select>”;

?></br>

<label>Жилая площадь:</label><br />

<input type=”text” name=”living_quarter”><br />

<label>Нежилая площадь:</label><br />

<input type=”text” name=”not_living_quarter”><br />

<label>Общая площадь:</label><br />

<input type=”text” name=”area_common_property”><br />

<input type=”submit” name=”submit”><br />

</form>

</div>

Часть информации заносится в поле вручную. Для остальная части был сделан специально выпадающий список с помощью тега <select></select>. В тег <option></option> заносится содержимое столбца «identificator» соответствующей таблицы, которая указана в переменной $result. Это одна из двух причин, для чего были созданы другие таблицы, на которые имеются ссылки. Принцип создания выпадающего списка очень похож с созданием таблицы, поэтому я его описывать не стану. Результат можно увидеть на рисунке 5.

Рисунок 5 – Добавление новой записи

Чтобы отправить в БД занесённые данные в этих полях, необходим файл query-invite.php, на который ссылается форма, описанная выше для занесения данных. Содержимое этого файла таково:

<?php

include_once “connection.php”;

$query = “INSERT INTO houses VALUES(0, ‘”.$_POST[‘house_id’].”‘, ‘”.$_POST[‘street’].”‘, ‘”.$_POST[‘build_year’].”‘, ‘”.$_POST[‘house_type’].”‘, ‘”.$_POST[‘house_wall_material’].”‘, ‘”.$_POST[‘heating_system’].”‘, ‘”.$_POST[‘hot_water_system’].”‘, ‘”.$_POST[‘cold_water_system’].”‘, ‘”.$_POST[‘living_quarter’].”‘, ‘”.$_POST[‘not_living_quarter’].”‘, ‘”.$_POST[‘area_common_property’].”‘)”;

$result = mysql_query($query, $connection ) or die(“Не удалось подключиться к серверу”);

header(“Location: DB.php”);

?>

Сначала, включаем в этот файл connection.php файл, чтобы подключиться к БД, в которую нужно занести данные. После в переменную $query записываем с помощью метода POST команду SQL запроса (он передаёт данные, используя тело http запроса, то есть в адресной строке эти данные не увидеть).

Затем отправляем сам запрос с помощью переменной $result. Если всё прошло успешно, то результат можно увидеть сразу, так как команда «header» отправляет на ту страницу, где отображается основная таблица. В противном же случае появится сообщение на отдельной странице с сообщением: “Не удалось подключиться к серверу”.

Теперь создадим блок авторизации пользователя. Он будет находиться в правой части шапки сайта, там, где людям привычнее всего его видеть. Сперва создадим форму блока авторизации в файле header.php.

<form action=”login.php” method=”post”>

<?php if($_SESSION[‘status’] != “login”) {?>

<label>Логин:</label><br/>

<input type=”text” name=”name”><br/>

<label>Пароль:</label><br/>

<input type=”password” name=”password”><br/>

<input type=”submit” name=”submit” value=”Войти”>

<button formaction=”registration.php”>Регистрация</button>

<?php } else if($_SESSION[‘status’]==”login”) {?>

<label>Добро пожаловать,<?php echo $_SESSION[‘login’]?></label>

<button formaction=”logout.php”>Выход</button>

<?php } ?>

</form>

Здесь в принципе выполняется то же самое, что и при создании формы для занесения данных в таблицу. После этого был создан файл с именем login.php, код которого расположен ниже:

<?php

session_start();

include “connection.php”;

$login = $_POST[‘name’];

$password = $_POST[‘password’];

$query = “SELECT * FROM user WHERE (login = ‘”.$login.”‘) && (password = ‘”.$password.”‘)”;

$result = mysql_query($query, $connection);

$user = mysql_fetch_array($result);

$_SESSION[‘id’] = $user[‘id’];

$_SESSION[‘login’] = $user[‘login’];

$_SESSION[‘status’] = “login”;

header(“Location: index.php”)

Сессия необходима, для «слежки» за зарегистрированным пользователем.

Для того, чтобы завершить работу с базой данных, необходимо создать отдельный файл logout.php и в нем прописать код для завершения сессии:

<?php

session_start();

session_destroy();

header(“Location: index.php”);

?>

Последним штрихом в создании данного сайта является создание ссылок в блоке меню. Для этого в ранее созданном фале menu.php я напишу такой код:

<div class=”menu”>

<font face=”Times New Roman” size=”3″ color=”black”>

<table background=”4.png”width=”1000″ class=’table_menu’ >

<tr>

<td height=”30″ width=”70″ class=”Главная”><a href=”index.php”>Главная</a></td>

<td height=”30″ width=”70″ class=”База данных”><a href=”DB.php”>База данных</a></td>

<td height=”30″ width=”70″ class=”Контакты”><a href=”cont.php”>Контакты</a></td>

</tr>

</table>

Описывать не стану, так как все указанные команды были подробно описаны выше.

4. ТЕСТИРОВАНИЕ ПП

4.1 Тестирование базы данных

Отладка абсолютно всего кода проходила в процессе разработки программного продукта.

Изначально, было сразу ясно, что если имеется база данных, то необходимо проверить стабильность её работы. Во время тестирования база данных оказалась надёжной.

Информация стабильно сохранялась в том формате, которую заносили. Не было ни потерь, ни посторонних символов. Сравнение кодировки символов работало стабильно.

база данные приложение авторизация

4.2 Тестирование сайта

Вся суть тестирования сайта заключается в нормальном отображении информации во всех популярных браузерах, а именно Google Chrome, Opera, Mozilla Firefox и Safari. Некоторые заказчики требуют, чтобы так же хорошо контент отображался и в браузере Internet Explorer.

За всё время тестирования контент не искажался, не было замечено никаких дефектов во всех 5 перечисленных браузерах. Тестирование проводилось на двух мониторах с разрешением 1280х768 и 1024х768.

4.3 Функциональное тестирование

В данном тестировании была проведена проверка исправности работы всех кнопок и ссылок.

Работа кнопки «войти» – исправна.

Работа кнопки «регистрация» – исправна.

Работа кнопки «выход» – исправна.

Работа кнопки «Добавить запись» – исправна.

Ссылки работают исправно и отправляют на тот файл или страницу, которая указана в самой ссылке.

ЗАКЛЮЧЕНИЕ

В процессе работы над ВКР был проведен аналитический обзор, в котором рассматривались подобные программные продукты, их функционал и интерфейс в целом. Были проведён анализ существующих и наиболее популярных и востребованных языков web-программирования. Для создания всего сайта ничего и ни у кого за основу не бралось. Весь интерфейс абсолютно свой. Для сайта была создана база данных, в которой хранятся как основные данные, необходимые для работы, так и данные пользователей. Во время разработки, а также по её окончании проводилось тестирование, в ходе которых все возможные дефекты были устранены. В будущем после существенной доработки проект можно опубликовать, а также использовать уже в качестве аналога рассмотренным программным продуктам.

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

1. Никсон, Р. Создаём динамические веб-сайты с помощью PHP, MySQL, JavaScript, CSS и HTML5. 3-е изд. – СПб.: Питер, 2015. – 688 с.

2. Мейер, Э. CSS – каскадные таблицы стилей. Подробное руководство, 3-издание. – Пер. с англ. – СПб: Символ-Плюс, – 2008. – 576 с., ил.

3. Htmlbook.ru | Для тех, кто делает сайты [Электронный ресурс]: офиц. сайт. – Режим доступа: https://www.htmlbook.ru.

4. Крис, Джамеа. Эффективный самоучитель по креативному Web-дизайну. HTML, XHTML, CSS, JavaScript, PHP, ASP, ActiveX. Текст, графика, звук и анимация. Пер с англ./Крис Джамеа, Конрад Кинг, Энди Андерсон – М.: ООО «ДиаСофтЮП», 2005. – 672с.

5. Зандстра, Мэтт. PHP: объекты, шаблоны и методики программирования, 4-е издание.: Пер. с англ. – М.: ООО «И. Д. Вильямс», 2015. – 576.: ил. – Парал. тит. англ.

ПРИЛОЖЕНИЕ 1

(код страницы, на которую отправляет кнопка «Добавить запись»)

<?php include “header.php” ?>

<?php include “menu.php” ?>

<?php include “connection.php”?>

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd”>

<html xml_lang=”en”>

<head>

<title>Добавление новой записи</title>

<meta charset=”utf-8″/>

<link rel=”stylesheet” type=”text/css” href=”style.css” />

</head>

<style>

body{

background: #00b0d8 url(3.png) repeat-x;

-moz-background-size: 90%;

-webkit-background-size:100%;

-o-background-size: 100%;

}

<style>

select {

width: 300;

}

</style>

</style>

<body style=”background-attachment: fixed” topmargin=”0″>

<div class=”invite”>

<!–Document starts.–>

<form action=”query-invite.php” method=”post”>

<label>Номер дома:</label><br />

<input type=”text” name=”house_id”><br />

<label>Улица:</label><br />

<input type=”text” name=”street”><br />

<label>Год ввода в эксплуатацию:</label><br />

<input type=”text” name=”build_year”><br />

<label>Тип здания:</label><br />

<?php

$result = mysql_query(“SELECT identificator FROM house_type”);

echo ‘<select style=”width: 175px” name=”house_type”>’;

while ($row = mysql_fetch_array($result))

{

$pole1=$row[‘identificator’];

echo “<option value=’$row[identificator]’>$row[identificator]</option>”;

}

echo “</select>”;

?></br>

<label>Внешний материал здания:</label><br />

<?php

$result = mysql_query(“SELECT type FROM house_wall_material”);

echo ‘<select style=”width: 175px” name=”house_wall_material”>’;

while ($row = mysql_fetch_array($result))

{

$pole1=$row[‘identificator’];

echo “<option value=’$row[type]’>$row[type]</option>”;

}

echo “</select>”;

?></br>

<label>Система отопления:</label><br />

<?php

$result = mysql_query(“SELECT identificator FROM heating_system”);

echo ‘<select style=”width: 175px” name=”heating_system” >’;

while ($row = mysql_fetch_array($result))

{

$pole1=$row[‘identificator’];

echo “<option value=’$row[identificator]’>$row[identificator]</option>”;

}

echo “</select>”;

?></br>

<label>Система подачи горячей воды:</label><br />

<?php

$result = mysql_query(“SELECT identificator FROM hot_water_system”);

echo ‘<select style=”width: 175px” name=”hot_water_system”>’;

while ($row = mysql_fetch_array($result))

{

$pole1=$row[‘identificator’];

echo “<option value=’$row[identificator]’>$row[identificator]</option>”;

}

echo “</select>”;

?></br>

<label>Система подачи холодной воды:</label><br />

<?php

$result = mysql_query(“SELECT identificator FROM cold_water_system”);

echo ‘<select style=”width: 175px” name=”cold_water_system”>’;

while ($row = mysql_fetch_array($result))

{

$pole1=$row[‘identificator’];

echo “<option value=’$row[identificator]’>$row[identificator]</option>”;

}

echo “</select>”;

?></br>

<label>Состояние здания:</label><br />

<?php

$result = mysql_query(“SELECT identificator FROM house_state”);

echo ‘<select style=”width: 175px” name=”house_state”>’;

while ($row = mysql_fetch_array($result))

{

$pole1=$row[‘identificator’];

echo “<option value=’$row[identificator]’>$row[identificator]</option>”;

}

echo “</select>”;

?></br>

<label>Тип этажей здания:</label><br />

<?php

$result = mysql_query(“SELECT identificator FROM house_floor_type”);

echo ‘<select style=”width: 175px” name=”house_floor_type”>’;

while ($row = mysql_fetch_array($result))

{

$pole1=$row[‘identificator’];

echo “<option value=’$row[identificator]’>$row[identificator]</option>”;

}

echo “</select>”;

?></br>

<label>Система подачи электричества:</label><br />

<?php

$result = mysql_query(“SELECT identificator FROM electricity_system”);

echo ‘<select style=”width: 175px” name=”electricity_system”>’;

while ($row = mysql_fetch_array($result))

{

$pole1=$row[‘identificator’];

echo “<option value=’$row[identificator]’>$row[identificator]</option>”;

}

echo “</select>”;

?></br>

<label>Система газоснабжения:</label><br />

<?php

$result = mysql_query(“SELECT identificator FROM gas_system”);

echo ‘<select style=”width: 175px” name=”gas_system”>’;

while ($row = mysql_fetch_array($result))

{

$pole1=$row[‘identificator’];

echo “<option value=’$row[identificator]’>$row[identificator]</option>”;

}

echo “</select>”;

?></br>

<label>Жилая площадь:</label><br />

<input type=”text” name=”living_quarter”><br />

<label>Нежилая площадь:</label><br />

<input type=”text” name=”not_living_quarter”><br />

<label>Общая площадь:</label><br />

<input type=”text” name=”area_common_property”><br />

<input type=”submit” name=”submit”><br/>

</form>

</div>

</body>

</html>

ПРИЛОЖЕНИЕ 2

(блок авторизации пользователя)

<?php include “header.php” ?>

<?php include “menu.php” ?>

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd”>

<html xml_lang=”en”>

<head>

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

<meta charset=”utf-8″/>

<link rel=”stylesheet” type=”text/css” href=”style.css” />

</head>

<style>

body{

background: #00b0d8 url(3.png) repeat-x;

-moz-background-size: 90%;

-webkit-background-size:100%;

-o-background-size: 100%;

}

</style>

<body style=”background-attachment: fixed” topmargin=”0″>

<div class=”registration”>

<!–Document starts.–>

<form action=”query-registration.php” method=”post”>

<label>Логин:</label><br />

<input type=”text” name=”login”><br />

<label>Пароль:</label><br />

<input type=”password” name=”password”><br />

<label>email:</label><br />

<input type=”email” name=”email”><br />

<input type=”submit” name=”submit”><br />

</form>

</div>

</body>

</html>

Поделиться статьёй
Поделиться в telegram
Поделиться в whatsapp
Поделиться в vk
Поделиться в facebook
Поделиться в twitter
Леонид Федотов
Леонид Федотов
Окончил НИУ ВШЭ факультет компьютерных наук. Сам являюсь кандидатом наук. По специальности работаю 13 лет, за это время создал 8 научных статей и 2 диссертации. В компании подрабатываю в свободное от работы время уже более 5 лет. Нравится помогать школьникам и студентам в решении контрольных работ и написании курсовых проектов. Люблю свою профессию за то, что это направление с каждым годом становится все более востребованным и актуальным.

Ещё статьи

Нет времени делать работу? Закажите!
Вид работы
Тема
Email

Отправляя форму, вы соглашаетесь с политикой конфиденциальности и обработкой ваших персональных данных.