Вы находитесь на странице: 1из 55

Частное учреждение образование

«Колледж бизнеса и права»

ОТЧЕТ ПО ПРАКТИКЕ

ПО РАЗРАБОТКЕ И СОПРОВОЖДЕНИЮ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ

ОП Т.795011

Выполнил А.А. Гром

Руководитель практики Д.И.Малафей

2020

1
2
Содержание

1 Программа практики 3
2 Объектно-ориентированный анализ и проектирование системы 4
2.1 Сущность задачи 4
2.2 Проектирование модели 5
3 Вычислительная система 11
3.1 Требования к аппаратным и операционным ресурсам 11
3.2 Инструменты разработки 11
4 Проектирование задачи 13
4.1 Требования к приложению 13
4.2 Концептуальный прототип 14
4.3 Организация данных 16
4.4 Функции и элементы управления 19
4.5 Проектирование справочной системы приложения 21
5 Описание программного средства 23
5.1 Общие сведения 23
5.2 Функциональное назначение 23
5.3 Входные и выходные данные 24
6 Программирование на языке С# в среде VisualStudio 25
6.1 Технические требования 25
6.2 Функциональное тестирование 25
7 Применение 31
7.1 Назначение программы 31
7.2 Условия применения 31
7.3 Справочная система 31
Заключение 36
Список информационных источников 37
Приложение А Текст программных модулей 38

ОП Т.795011
Изм. Лист № докум. Подпись Дата
Разраб. Гром А.А. Лит. Лист Листов
Провер. Малафей Д.И Отчет по практике 2 54
Т. Контр. В.Ю.гмротомв по разработке и
Н. Контр. сопровождению КБП
Утверд.
3
1 Программа практики

Целями практики по разработке и сопровождению программного обеспечения


являются:
– закрепление знаний, связанных с технологией обработки информации;
– приобретение навыков разработки программ с использованием современных средств
обработки экономической и деловой информации;
– выработка умений применять средства стандартных библиотек в практических
задачах.
Задачами практики по разработке и сопровождению ПО являются:
– углубленное изучение принципов организации программного обеспечения и
технологии его проектирования;
– владение методами надежного программирования;
– умение разрабатывать программы в соответствии с промышленными требованиями,
обеспечивая высокий уровень качества программного обеспечения и экономической
эффективности;
– изучение способов определения экономической себестоимости и эффективности
разработки программного обеспечения;
– оформление комплекта документации на созданное программное обеспечение.
Таблица 1 – Календарный график работы
Период Наименование и содержание работ
Изучение требований к рабочей дисциплине и технике безопасности.
09.02.20
Изучение нормативных документов.
11.02.20- Ознакомление с различным программным обеспечением, используемым для
17.02.20 разработки программ
18.02.20- Получение индивидуальных заданий по созданию программ для обработки
24.02.20 экономической и деловой информации. Обсуждение тем индивидуальных заданий.
Изучение общих требований к программному обеспечению обработки
25.02.20- экономической и деловой информации. Требования к интерфейсу пользователя,
03.03.20 выходным документам (печатные, экранные формы, форматы результирующих
файлов с результатами расчетов).
04.03.20- Анализ предметной области индивидуального задания. Выбор и обоснование
24.03.20 языка и среды программирования. Описание функциональных возможностей задачи.
25.03.20- Технология создания программного обеспечения. Правила построения диаграмм
07.04.20 UML. Проектирование ПО при помощи CASE-средства Rational Rose
Конструирование алгоритма и его реализация в выбранной визуальной среде
08.04.20-
программирования. Разработка интерфейса .Проектирование классов, определение
21.04.20
свойств и методов, определение связей между классами.
Создание информационной базы задачи. Тестирование и отладка программы с
22.04.20-
использованием подготовленных тестовых примеров. Проектирование модулей, позволяющих
05.05.20
осуществить защиту программного продукта от несанкционированного доступа..
Критерии оценки качества программного продукта. Изучение нормативных
06.05.20- документов, регламентирующих оформление технического проекта. Создание
26.05.20 документации по эксплуатации и сопровождению разработанного ПС. Проведение
испытания ПС в нормальных и критических условиях..
27.05.20- Анализ возможности модернизации проекта с учетом альтернативных решений.
02.06.20 Оформление аннотации на программное средство.
03.06.20- Оформление отчета по практике. Подготовка листингов программ с дополнением
16.06.20 комментариев. Распечатка экранных форм.
17.06.20- Демонстрация программ по индивидуальным заданиям.
26.06.20 Защита отчета по практике.

4
2 Объектно-ориентированный анализ и проектирование системы

2.1 Сущность задачи

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


недвижимости.
Недвижимость – это земельные участки, участки недр, обособленные водные объекты
и все, что прочно связано с землей, то есть объекты, перемещение которых без
несоразмерного ущерба их назначению невозможно, в том числе леса, многолетние
насаждения, здания, сооружения
К недвижимому имуществу можно отнести многие объекты, но основные категории
принадлежат жилью и природным угодьям.
Типы недвижимых объектов:
– обособленные водные объекты;
– земельные участки;
– недра;
– леса;
– сооружения;
– здания;
– многолетние насаждения;
– объекты незавершенного строительства.
Арендатор – физическое или юридическое лицо, заключившее с собственником
какого-либо имущества договор аренды и получившее во временное владение и пользование
такое имущество.
Аренда недвижимости – это форма имущественного договора, при которой
собственность передается во временное владение и пользование арендатору за арендную
плату.
Особенности аренды недвижимости:
– свобода перемещения – всегда можно снять жилье поближе к работе, парку,
торговому центру и так же быстро сможете его сменить, когда этого требуют обстоятельства;
– нет ответственности – снимая квартиру, нет необходимости сдавать деньги на
ремонт подъезда, капитальный ремонт дома, облагораживание придомовой территории;
– нет финансовых проблем – снимая квартиру можно даже не заключать договор
аренды, если доверяете арендодателю;
– нет штрафных санкций, если вдруг наступил форс-мажор и надо заплатить чуточку
позже обычного;
– не нужен капитал – чтобы снять квартиру не нужен первоначальный взнос – всегда
можно найти аренду по средствам;
– не нужна мебель, большинство квартир сдаются уже с мебелью.
Объявление об аренде недвижимости – написанное на бумаге, напечатанное на сайте
или в приложении содержащая информацию, которую нужно довести до сведения большого
количества людей [2].
В объявление об аренде недвижимости должны быть включены следующие данные:
– название объявления;
– год постройки недвижимости;
– адрес недвижимости;
– количество этажей;
– количество комнат;
– тип недвижимости;
– продавец;
– телефон;
– общая площадь;
– площадь кухни;
5
– высота потолков;
– тип ремонта.
Структура объявления может выглядеть так, как представлено на рисунке 1.1.

6
2.2 Проектирование модели

ER-модель – модель данных, позволяющая описывать концептуальные схемы


предметной области.
ER-модель используется при высокоуровневом (концептуальном) проектировании баз
данных. С её помощью можно выделить ключевые сущности и обозначить связи, которые
могут устанавливаться между этими сущностями.
Во время проектирования баз данных происходит преобразование ER-модели в
конкретную схему базы данных на основе выбранной модели данных
(реляционной, объектной, сетевой или др.) [2].
ER-модель представляет собой формальную конструкцию, которая сама по себе не
предписывает никаких графических средств её визуализации. В качестве стандартной
графической нотации, с помощью которой можно визуализировать ER-модель, была
предложена диаграмма «сущность-связь».
ERD-диаграмма по Баркеру располагается на рисунке 1.2. ERD-диаграмма по Чену
располагается на рисунке 1.3.

Рисунок 1.1 – ERD-диаграмма по Баркеру

7
Рисунок 1.2 – ERD-диаграмма по Чену

Сущность «Администратор» состоит из атрибутов: статистика;


Сущность «Пользователь» состоит из атрибутов:
– name;
– surname;
– username;
– password.
Сущность «Объявление» состоит из атрибутов:
– номер объявления;
– пользователь;
– дата.
Сущность «Приложение» состоит из атрибутов:
– название;
– версия.
Сущность «База данных» состоит из атрибутов:
– данные пользователя;
– данные объявления.
Сущность «Недвижимость» состоит из атрибутов:
– адрес;
– этаж;
– количество комнат;
– Цена за сутки / 30 дней.
Сущность «Квартира/Офис/Дом» состоит из атрибутов:
– адрес;
– этаж;
– количество комнат;
– цена за сутки или 30 дней.
Сущность «Удобства» состоит из атрибутов:
– мебель;
– кухонная мебель;
– холодильник;

8
– плита;
– стиральная машина;
– телевизор.
Диаграмма вариантов использования – диаграмма, отражающая отношения
между актерами и прецедентами и являющаяся составной частью модели прецедентов,
позволяющей описать систему на концептуальном уровне.
Прецедент – возможность моделируемой системы (часть её функциональности),
благодаря которой пользователь может получить конкретный, измеримый и нужный ему
результат. Прецедент соответствует отдельному сервису системы, определяет один из
вариантов её использования и описывает типичный способ взаимодействия пользователя с
системой. Варианты использования обычно применяются для спецификации
внешних требований к системе.
Основное назначение диаграммы – описание функциональности и поведения,
позволяющее заказчику, конечному пользователю и разработчику совместно обсуждать
проектируемую или существующую систему.
Отношение расширения – определяет взаимосвязь экземпляров отдельного варианта
использования с более общим вариантом, свойства которого определяются на основе
способа совместного объединения данных экземпляров; отношение является направленным
и указывает, что применительно к отдельным вариантам использования выполнены
конкретные условия и что один из вариантов может присоединять к своему поведению
некоторое дополнительное поведение, определенное для другого варианта; отношение
расширения между вариантами использования обозначается пунктирной линией со стрелкой,
направленной от варианта использования, который является расширением .
Отношение включения – указывает, что некоторое заданное поведение для одного
варианта использования включается в качестве составного компонента в последовательность
поведения другого варианта использования. Данное отношение является направленным
бинарным отношением, при котором, когда экземпляр первого варианта использования в
процессе своего выполнения достигает точки включения в последовательность поведения
экземпляра второго варианта использования, он выполняет последовательность действий,
определяющий поведение второго варианта, после чего продолжает выполнение действий
своего поведения. Один вариант может быть включен в несколько других вариантов, а также
включать в себя другие варианты.
На данной диаграмме имеется два «актёра» – пользователь и администратор.
Пользователь имеет такие варианты использования как:
– регистрация;
– авторизация;
– просмотр объявления;
– добавление объявления;
– просмотр характеристик объявления;
– просмотр телефона продавца;
– поиск объявления.
Администратор имеет такие варианты использования как
– просмотр списка объявления;
– просмотр списка пользователей;
– изменение характеристик объявления;
– удаление объявления;
– удаление пользователя.
В основном при создании диаграммы рассматривались такие связи как «расширения»,
т.е. при выборе и выполнении одного определенного варианта, у пользователя или
администратора расширяется диапазон выбора различных функций (добавляются
дополнительные поведения).
Диаграмма вариантов использования располагается на листе 1 в графической части.
Диаграмма классов – структурная диаграмма языка моделирования UML,
демонстрирующая общую структуру иерархии классов системы, их коопераций, атрибутов

9
(полей), методов, интерфейсов и взаимосвязей между ними. Широко применяется не только
для документирования и визуализации, но также для конструирования посредством прямого
или обратного проектирования.
Целью создания диаграммы классов является графическое представление статической
структуры декларативных элементов системы (классов, типов и т. п.) Она содержит в себе
также некоторые элементы поведения (операции), однако их динамика должна быть
отражена на диаграммах других видов (диаграммах коммуникации, диаграммах состояний).
Для удобства восприятия диаграмму классов можно также дополнить
представлением пакетов, включая вложенные.
Отношение агрегации имеет место между несколькими классами в том случае, если
один из классов представляет собой некоторую сущность, включающую в себя в качестве
составных частей другие сущности. Отношение композиции служит для выделения
специальной формы отношения, при которой составляющие части в некотором смысле
находятся внутри целого.
Классы «Приложение» и «Недвижимость» соединены между собой отношением
композиции. «Приложение» и «Пользователь», «Сортировка» и «Недвижимость» –
отношением агрегации. «Недвижимость» и «Вывод информации» – отношением ассоциации.
Обусловлено это тем, что отношение композиции связывает классы, которые обязательны и
являются основными компонентами программы. В то время как те классы, которые связаны
отношением агрегации, наоборот, являются вторыми по приоритету (необязательны).
Классы, связанные отношением ассоциации, показывают, что объекты одной сущности
(класса) связаны с объектами другой сущности таким образом, что можно перемещаться от
объектов одного класса к другому.
Диаграмма классов программы представлены в виде таблице 1.1.
Таблица 1.1 – Диаграмма классов
Название класса Поля класса Функции класса
Пользователь Name, Surname, Register (Name, Surname,
Username, Password Username, Password), Login
(Username, Password);
Приложение Login (Username,
-
Password);
Недвижимость Название, Год, Этаж,
Площадь, Количество
Add(), Del();
комнат, Телефон, Описание,
Цена, Улица
Сортировка SortPrice(), SortName(),
- SortKolvo(), SortEtash(),
SortYear(), SortPloshad();
Вывод информации - ShowInfo ();
Диаграмма классов располагается на листе 2 в графической части.
Диаграмма последовательности – диаграмма, на которой для некоторого набора
объектов на единой временной оси показан жизненный цикл какого-либо определённого
объекта (создание-деятельность-уничтожение некой сущности) и взаимодействие актеров
(действующих лиц) в рамках какого-либо определённого прецедента (отправка запросов и
получение ответов). Используется в языке UML.
Основными элементами диаграммы последовательности являются обозначения
объектов (прямоугольники с названиями объектов), вертикальные «линии жизни»,
отображающие течение времени, прямоугольники, отражающие деятельность объекта или
исполнение им определенной функции (прямоугольники на пунктирной «линии жизни»), и
стрелки, показывающие обмен сигналами или сообщениями между объектами.
На данной диаграмме показана последовательность действий при регистрации или
авторизации в программу. Также показан специальный блок действий, который показывает
альтернативные варианты поведения в программе. В альтернативном блоке показано, как
взаимодействует между собой приложение, база данных и функции приложения. Таким
10
образом можно просмотреть, как поведет себя программа, если пользователь введёт
неверные данные при регистрации.
Диаграмма последовательности располагается на листе 3 в графической части.
Диаграмма деятельности – UML диаграмма, на которой показаны действия, состояния
которых описано на диаграмме состояний. Под деятельностью понимается спецификация
исполняемого поведения в виде координированного последовательного и параллельного
выполнения подчинённых элементов – вложенных видов деятельности и отдельных
действий, соединённых между собой потоками, которые идут от выходов одного узла ко
входам другого. Диаграммы деятельности используются при моделировании бизнес-
процессов, технологических процессов, последовательных и параллельных вычислений. В
диаграмме присутствует начало и конец какого-либо действия. Отмечается начало действия
– закрашенным черным кружком и на границе кружка – черная линия. Конец действия – чуть
более уменьшенный черный кружок и с небольшим отступом на границах – красная линия.
Диаграмма деятельности располагается на листе 4 в графической части.
Диаграмма компонентов – элемент языка моделирования UML, статическая
структурная диаграмма, которая показывает разбиение программной системы на
структурные компоненты и связи (зависимости) между компонентами. В качестве
физических компонентов могут выступать файлы, библиотеки, модули, исполняемые файлы,
пакеты.
С помощью диаграммы компонентов представляются инкапсулированные классы
вместе с их интерфейсными оболочками, портами и внутренними структурами (которые
тоже могут состоять из компонентов и коннекторов).
Компоненты связываются через зависимости, когда соединяется требуемый
интерфейс одного компонента с имеющимся интерфейсом другого компонента. Таким
образом иллюстрируются отношения клиент-источник между двумя компонентами.
Зависимость показывает, что один компонент предоставляет сервис, необходимый
другому компоненту. Зависимость изображается стрелкой от интерфейса или порта клиента
к импортируемому интерфейсу.
Когда диаграмма компонентов используется, чтобы показать внутреннюю структуру
компонентов, предоставляемый и требуемый интерфейсы составного компонента могут
делегироваться в соответствующие интерфейсы внутренних компонентов.
Делегация показывает связь внешнего контракта компонента с внутренней
реализацией этого поведения внутренними компонентами.
На данной диаграмме показан состав программных компонентов, в роли которых
может выступать исходный, бинарный и исполняемый код, а также установить зависимости
между ними. На диаграмме представлен стереотип source – файл с исходным текстом
программы. К данному стереотипу относятся такие файлы
– «AdminPanel.cs» – файл админ панели;
– «InfoPanel.cs» – файл информации объявления;
– «ElProperty.cs» – файл списка объявления.
К стереотипу executable – программа (исполняемый файл), относятся такие файлы:
– «SIGN_IN.cs» – файл окна авторизации;
– «SIGN_UP.cs» – файл окна регистрации;
– «Add.cs» – файл окна добавления объявления;
– «Form1.cs» – файл главного окна программы.
К стереотипу document – остальные файлы (файл справки), относится файл:
«ReferanceSystem.cs» – файл справочной системы.

11
3 Вычислительная система

3.1 Требования к аппаратным и операционным ресурсам

Данное программное средство было разработано на персональном компьютере. На


приведенных ниже системных требованиях:
– операционная система Windows 10;
– процессор Intel Core i3 CPU M 380 @ 2.53GHz;
– ОЗУ 4 ГБ;
– видеокарта Intel HD Graphics;
– места на HDD 500 ГБ;
– мышь;
– клавиатура;
– touchpad.

3.2 Инструменты разработки

Инструментами разработки будут являться:


– операционная система Windows 10 Professional;
– среда разработки Visual Studio 2019;
– язык программирования C#;
– система управления базами данных Access Professional 2019;
– интерфейс программирования приложения Windows Forms;
– инструмент для создания диаграмм Draw.io;
– язык запросов SQL;
– библиотека Guna.UI.
Windows 10 – является наиболее популярной и удобной операционной системой.
Система призвана стать единой для разных устройств, таких как персональные компьютеры,
планшеты, смартфоны, консоли и т.д [8].
Данная программа разрабатывается в среде программирования Visual Studio 2019.
Данная среда содержит богатый набор различных типов данных и компонентов,
облегчающих создание программного продукта под ОС Windows.
Visual Studio – это набор инструментов и средств, предназначенных для
разработчиков программ, с широким набором поддерживаемых языков программирования.
Visual Studio включает в себя редактор исходного кода с поддержкой
технологии IntelliSense и возможностью простейшего рефакторинга кода.
Встроенный отладчик может работать как отладчик уровня исходного кода, так и отладчик
машинного уровня. Остальные встраиваемые инструменты включают в себя редактор форм
для упрощения создания графического интерфейса приложения, веб-редактор,
дизайнер классов и дизайнер схемы базы данных. Visual Studio позволяет создавать и
подключать сторонние дополнения (плагины) для расширения функциональности
практически на каждом уровне, включая добавление поддержки систем контроля версий
исходного кода (как, например, Subversion и Visual SourceSafe), добавление новых наборов
инструментов (например, для редактирования и визуального проектирования кода
на предметно-ориентированных языках программирования) или инструментов для прочих
аспектов процесса разработки программного обеспечения (например, клиент Team Explorer
для работы с Team Foundation Server) [9].
Язык программирования C# – Поддерживает такие парадигмы программирования, как
процедурное программирование, объектно-ориентированное программирование,
обобщённое программирование. Язык имеет богатую стандартную библиотеку, которая
включает в себя распространённые контейнеры и алгоритмы, ввод-вывод, регулярные
выражения, поддержку много поточности и другие возможности [3]. C# сочетает свойства
12
как высокоуровневых, так и низкоуровневых языков. В сравнении с его предшественником –
языком C, – наибольшее внимание уделено поддержке объектно-ориентированного и
обобщённого программирования.
Access – это система управления базами данных. База данных представляет собой
структурированную совокупность данных. Эти данные могут быть любыми – от простого
списка предстоящих покупок до перечня экспонатов картинной галереи или огромного
количества информации в корпоративной сети. Для записи, выборки и обработки данных,
хранящихся в компьютерной базе данных, необходима система управления базой данных,
каковой и является ПО Access. Поскольку компьютеры замечательно справляются с
обработкой больших объемов данных, управление базами данных играет центральную роль в
вычислениях. Реализовано такое управление может быть по-разному – как в виде отдельных
утилит, так и в виде кода, входящего в состав других приложений.
Draw.io – это приложение на диске Google для создания диаграмм, которое позволяет
рисовать:
– блок-схемы;
– UML;
– диаграммы сущность-связь;
– сетевые диаграммы;
– модели бизнес-процессов;
– организационные схемы;
– электрические схемы;
– каркасные схемы и модели.
Windows Forms – интерфейс программирования приложений (API), отвечающий
за графический интерфейс пользователя и являющийся частью Microsoft .NET Framework.
Данный интерфейс упрощает доступ к элементам интерфейса Microsoft Windows за счет
создания обёртки для существующего Win32 API в управляемом коде. Причём управляемый
код – классы, реализующие API для Windows Forms, не зависят от языка разработки. То есть
программист одинаково может использовать Windows Forms как при написании ПО на C#,
С++, так и на VB.Net, J# и др [4].
Язык SQL запросы – это запросы, которые составляются (программистами) из
последовательности SQL – инструкций [6]. Эти инструкции задают, что надо сделать с
входным набором данных для генерации выходного набора. Все запросы Access строит на
основе SQL.
Библиотека Guna.UI – это интерфейс, которое фокусируется на всех элементах
продукта, делающих его притягательным: цвета, стиль кнопок, графика, анимация,
типография, инфографика, виджеты, поведение, отклики кнопок и так далее.

13
4 Проектирование задачи

4.1 Требования к приложению

Интерфейс должен быть спроектирован с учетом разных экранных разрешений. Ни


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

4.2 Концептуальный прототип

Концептуальный прототип – это общее видение продукта, его функций, логики


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

Рисунок 4.2 – Макет окна загрузки


14
При нажатии на кнопку SIGN UP откроется окно с полями для ввода данных. На
рисунке 3.2 предоставляется макет окна регистрации в программе.

Рисунок 4.3 – Макет окна регистрации

При нажатии на кнопку SIGN IN откроется окно с полями для ввода данных. На
рисунке 3.3 предоставляется макет окна входа в программу.

Рисунок 4.4 – Макет окна входа

15
После авторизации на главную страницу появится кнопка Добавить объявление, при
нажатии которой откроется окно с полями ввода данных объявления. На рисунке 4.5, 4.6
предоставляется макет окна программы.

Рисунок 4.5 – Макет главного окна программы

При нажатии на кнопку Регистрация откроется окно с полями для ввода данных. На
рисунке 4.6 предоставляется макет окна регистрации.

Рисунок 4.6 – Макет окна добавить оъявление

При нажатии на кнопку Exit программное средство закроется.


16
4.3 Организация данных

Организация данных подразумевает создание модели данных, главными элементами


которой являются сущности и их связи.
Реляционная модель основана на понятии отношения, представлением которого
является таблица. В реляционной модели отношения используются для хранения
информации об объектах, представленных в базе данных. Отношение имеет вид двухмерной
таблицы, в которой строки соответствуют записям, а столбцы – атрибутам. Каждая запись
должна однозначно характеризоваться в таблице. Для этого используют первичные и
вторичные ключи. Достоинством реляционной модели является простота и удобство
физической реализации.
Реляционная модель базы данных подразумевает нормализацию всех таблиц данных.
Нормализация – это формальный метод анализа отношений на основе их первичного ключа
и функциональных зависимостей, существующих между их атрибутами [5].
Структура базы данных разрабатываемого программного средства включает две
таблицы.
Таблица «Announcement» хранит информацию о корзине, структура которой
приведена в таблице 4.1.

Таблица 4.1 – Структура таблицы «Announcement»


Имя поля Тип поля Размер поля, байт Описание поля
Name varchar 255 Название объявления

Year Int 4 Год постройки недвижимости

Address Varchar 255 Адрес нахождения недвижимости

Floor Int 4 Этаж

CountRooms Int 4 Кол-во комнат

TipProperty Varchar 255 Тип недвижимости

Seller Varchar 255 Продавец недвижимости

Phoner Varchar 255 Телефон продавца

NameOwner Int 4 Имя владельца

AreaCommon Int 4 Общая площадь

AreaKithen Int 4 Площадь кухни

Heignt Varchar 255 Высота потолков

Repairs Varchar 255 Ремонт

Description Varchar 255 Описание объявление

PriceDay Int 4 Цена за день

Price30Day int 4 Цена за 30 дней

Таблица «Users» хранит информацию о пользователях, структура которой приведена в


таблице 3.2.

Таблица 4.2 – Структура таблицы «Users»


Имя поля Тип поля Размер поля, байт Описание поля
Lastname varchar 255 Имя пользователя

17
Имя поля Тип поля Размер поля, байт Описание поля
Firstname varchar 255 Фамилия пользователя

Username varchar 255 Ник пользователя

Password varchar 255 Пароль пользователя

На рисунке 4.7 представлена схема базы данных.

Рисунок 4.7 – Схема базы данных

4.4 Функции и элементы управления

Для авторизации в приложении необходимо перейти в «Форму авторизации», на


которой нужно нажать кнопку «SIGN IN». После нажатия кнопки «SIGN IN» вызывается
обработчик событий btnSignIN_Click, который обрабатывает введенный логин и пароль.
Данная реализация функции была реализована в средства Visual Studio Professional 2019, код
которого представлен ниже [7].

private void btnSignIN_Click(object sender, EventArgs e)


{
try
{
if (TextBoxUser.Text != "Username" && TextBoxPassword.Text !=
"Password") //проверка на пустые поля
{
OleDbDataAdapter oleDbDataAdapter = new OleDbDataAdapter("SELECT * FROM
[User] WHERE uUsername='" + TextBoxUser.Text + "' AND uUsername='" + TextBoxPassword.Text +
"'", connection);//запрос SQL
DataTable dataTable = new DataTable();
Form1 mainWindow = new Form1();
oleDbDataAdapter.Fill(dataTable);

if (dataTable.Rows.Count != 1)//проверка на существования пользователя


{
ErrorPanel.Visible = true;
Messenge.ForeColor = Color.Red;
Messenge.Text = "Пользователь не найден";
}
18
else
{
mainWindow.UserName.Text = TextBoxUser.Text;
mainWindow.btnAdd.Visible = true;
mainWindow.btnIN.Visible = false;
mainWindow.btnUP.Visible = false;
mainWindow.btnUser.Visible = true;
if (TextBoxUser.Text == "admin") { mainWindow.btnAdmPanel.Visible =
true; }
mainWindow.Show();
this.Hide();
}
}
else
{
if (TextBoxPassword.Text == "Password")
TextBoxPassword.BorderColor = Color.Red;
if (TextBoxUser.Text == "Username")
TextBoxUser.BorderColor = Color.Red;
ErrorPanel.Visible = true;
Messenge.ForeColor = Color.Red;
Messenge.Text = "Есть пустые поля";
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Messenge", MessageBoxButtons.OK,
MessageBoxIcon.Error);//вывод ошибки
}
}
Для выполнения функции «Регистрации» необходимо щелчок мыши по кнопке «SIGN
UP». Данная реализация функции была реализована в средства Visual Studio Professional
2019. Функция позволяет создать новый аккаунт в программе. Код представлен ниже [8].
private void btnSignUP_Click(object sender, EventArgs e)
{
try
{
if (TextBoxName.Text != "Name" && TextBoxSurname.Text != "Surname" &&
TextBoxUsername.Text != "Username" && TextBoxPassword.Text != "Password") //проверка на
пустые поля
{
OleDbCommand command = new OleDbCommand("INSERT INTO [User] (uName,
uSurname, uUsername, uPassword) VALUES ('" + TextBoxName.Text + "', '" + TextBoxSurname.Text
+ "', '" + TextBoxUsername.Text + "', '" + TextBoxPassword.Text + "')", connection);//запрос
добавления нового пользователя в базу данных

connection.Open();
command.ExecuteNonQuery();
connection.Close();

this.Hide();
SIGN_IN sIGN_IN = new SIGN_IN();
sIGN_IN.Show();
}
else
{
if (TextBoxName.Text == "Name")
TextBoxName.BorderColor = Color.Red;
if (TextBoxSurname.Text == "Surname")
TextBoxSurname.BorderColor = Color.Red;
if (TextBoxPassword.Text == "Password")
TextBoxPassword.BorderColor = Color.Red;
if (TextBoxUsername.Text == "Username")
TextBoxUsername.BorderColor = Color.Red;
panelInfo.Visible = true;
labelMessenge.ForeColor = Color.Red;
19
labelMessenge.Text = "Есть пустые поля";
}
}
catch
{
panelInfo.Visible = true;
labelMessenge.ForeColor = Color.Red;
labelMessenge.Text = "Пользователь с таким UserName уже
зарегестрирован";//вывод ошибки
connection.Close();
}
}
Для выполнения функции «Добавить объявление» необходимо щелчок мыши по
кнопке «Опубликовать». Данная реализация функции была реализована в средства Visual
Studio Professional 2019. Функция позволяет пользователю разместить свое объявление в
программе. Код представлен ниже [9].
private void btnAdd_Click(object sender, EventArgs e)
{
try
{
Photo1 = PhotoBD(PictureBox);
Photo2 = PhotoBD(PictureBox2);
Photo3 = PhotoBD(PictureBox3);
Photo4 = PhotoBD(PictureBox4);
OleDbCommand command = new OleDbCommand($"INSERT INTO Announcement
(uUsername, aAdress, aFloorEnd, aFloor, aCountRoom, aTipProperty, aSeller, aPhone,
aNameOwner, aTotalArea, aKitchenArea, aTipRepairs, aDiscription, aPrice, aPrice30, aPhoto,
aPhoto2, aPhoto3, aPhoto4) VALUES ({gunaLabel5.Text}, '{TextBoxAdress.Text}',
{gunaNumeric3.Value}, {gunaNumeric1.Value}, {gunaNumeric2.Value}, '{ComboBoxTio.Text}',
'{ComboBoxSeller.Text}', '{TextBoxPhone.Text}', '{TextBoxNameSell.Text}', '{TextBox1.Text}',
'{TextBox2.Text}', '{ComboBox1.Text}', '{TextBoxDiscription.Text}',
{int.Parse(TextBoxPrice.Text)}, {int.Parse(TextBoxPrice30.Text)}, @photo, @photo2, @photo3,
@photo4)", connection);//запрос SQL на добавления нового объявления

command.Parameters.AddWithValue("@photo", Photo1);
command.Parameters.AddWithValue("@photo2", Photo2);
command.Parameters.AddWithValue("@photo3", Photo3);
command.Parameters.AddWithValue("@photo4", Photo4);

connection.Open();
command.ExecuteNonQuery();
connection.Close();
ElVisible();
this.Close();
}
catch(NullReferenceException nex)
{
MessageBox.Show(nex.Message, "Messenge", MessageBoxButtons.OK,
MessageBoxIcon.Error);//вывод ошибки
connection.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Messenge", MessageBoxButtons.OK,
MessageBoxIcon.Error);//вывод ошибки
connection.Close();
}

Полный код программы располагается в приложении А.

4.5 Проектирование справочной системы приложения

20
Для корректной работы с приложением требуется обеспечить пользователя
справочной системой, в которой будут приведены приемы работы с приложением,
включающие данные о том, что произойдёт после нажатия на определенную кнопку или при
выборе пункта меню.
Справочная система необходима для ознакомления с программой. В ней должна
присутствовать информация, которая может напомнить принцип работы программы.
Структура справочной системы:
– введение – предварительные сообщения общего характера, предпосылаемые
произведению, с целью ввести пользователя в курс программы;
– типы недвижимости – описаны все типы недвижимости какие пользователь может
найти в программе;
– основной интерфейс программы – описаны главные функции программы;
– контекстное меню – описано как пользоваться меню программы;
– параметры объявления – описано что где располагается в характеристиках
объявления;
– добавление объявления – описано что надо для добавления объявления и как
опубликовать объявление;
– о программе – описано что собой представляет программа.
Справочная система программного средства представляет собой отдельное окно с
полным описанием основных функций программы. Чтобы загрузить справочную систему,
нужно нажать кнопку со знаком вопроса в правой части ленты. В справочной системе даны
ответы на типичные вопросы, возникающие при работе с приложением, что, несомненно,
должно помочь при освоении программного средства.
Справочная система будет разработана в Visual Studio Professional 2019.

21
5 Описание программного средства
5.1 Общие сведения

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


использования аппаратных и программных средств персонально компьютера и для
нормального функционирования программного продукта.
Загрузочным файлом программного средства является «BookShop.exe».
Данное программное средство было разработано на персональном компьютере со
следующей конфигурацией:
– операционная система Windows 10;
– процессор Intel Core i3 CPU M 380 @ 2.53GHz;
– ОЗУ 4 ГБ;
– видеокарта Intel HD Graphics;
– места на HDD 500 ГБ;
– мышь;
– клавиатура;
– touchpad.
Программное средство создана в средстве разработки Visual Studio на языке
программирования C# в операционной системе Windows 10. Она может работать в средах
операционных систем семейства Microsoft Windows, начиная с Windows 7.
Для создания данного программного средства была использована библиотека
«Guna.UI».

5.2 Функциональное назначение

Программное средство предназначено для продажи книг, добавления данных в базу


данных и взаимодействия с данными. Данное программное средство предназначено
облегчить поиск книг путём автоматизации учёта информации с использованием
облегчённого интерфейса для удобного и быстрого пользования программой.
Программное средство использует стандартные элементы управления, такие как
кнопки, списки, поля ввода, что обеспечивает удобство в использовании, понятный и
удобный интерфейс программного средства. Данное программное средство не имеет
широкого назначения, поэтому сетевой поддержки не имеет.
Чтобы исключить неправомерный доступ к информации данная программа применяет
такие способы, как идентификация и аутентификация.
Идентификация – это механизм присвоения собственного уникального имени или
образа пользователю, который взаимодействует с информацией.
Аутентификация – это система способов проверки совпадения пользователя с тем
образом, которому разрешен допуск.
Эти средства направлены на то, чтобы предоставить или, наоборот, запретить допуск
к данным. Подлинность, как правила, определяется тремя способами: программой,
аппаратом, человеком. При этом объектом аутентификации может быть не только человек,
но и техническое средство (компьютер, монитор, носители) или данные. Простейший способ
защиты – пароль.

22
5.3 Входные и выходные данные

Входными данными являются опубликованное объявление. Входные данные


программы представлены в таблице 4.1.

Таблица 5.1 – Входные данные

Входные Тип поля Размер Описание поля


данные поля, байт
Name varchar 255 Название объявления
Year Int 4 Год постройки недвижимости
Address Varchar 255 Адрес нахождения
недвижимости
Входные Тип поля Размер Описание поля
данные поля, байт
Floor Int 4 Этаж
CountRooms Int 4 Кол-во комнат
TipProperty Varchar 255 Тип недвижимости
Seller Varchar 255 Продавец недвижимости
Phoner Varchar 255 Телефон продавца
NameOwner Int 4 Имя владельца
AreaCommon Int 4 Общая площадь
AreaKithen Int 4 Площадь кухни
Heignt Varchar 255 Высота потолков
Repairs Varchar 255 Ремонт
Description Varchar 255 Описание объявление
PriceDay Int 4 Цена за день
Price30Day int 4 Цена за 30 дней
Lastname varchar 255 Имя пользователя
Firstname varchar 255 Фамилия пользователя
Username varchar 255 Ник пользователя
Password varchar 255 Пароль пользователя

Выходными данными будут являться опубликованные объявления.

23
6 Методика испытаний

6.1 Технические требования

Данное программное средство было протестировано на персональном компьютере со


следующей конфигурацией:
– операционная система Windows 10;
– процессор Intel Core i3 CPU M 380 @ 2.53GHz;
– ОЗУ 4 ГБ;
– видеокарта Intel HD Graphics;
– места на HDD 500 ГБ;
– мышь;
– клавиатура;
– touchpad.

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

В процессе написания программного средства необходимо производить тестирование


на правильность работы приложения. Одной из основных задач тестирования является
устранение ошибок, происходящих при вводе данных.
Функциональное тестирование – это тестирование функций приложения на
соответствие требованиям. Оценка производится в соответствии с ожидаемыми и
полученными результатами (на основании функциональной спецификации), при условии,
что функции отрабатывали на различных значениях.
Тестирование всего программного средства происходит по средствам проверки всех
функций, представленных в программном средстве.
Тестирование программного средства начинается с главного окна программы. На
рисунке 5.1 представлено главное окно программы.

Рисунок 6.1 – Главное окно программы

24
Тест-кейс для авторизации приведена в таблице 6.1.

Таблица 6.1 – Тест-кейс для авторизации


№ Модель / Функция Шаги воспроизведения Результат

Ожидаемый: вход в программу


под ником пользователя и
отображение главного окна
1. Нажать на кнопку «SIGN IN». программы
2. В поле «Username» ввести
«Alex» Окно авторизации с
1 Авторизация 3. В поле «Password» ввести заполненными полями представлено
«12345» на рисунке 5.2
Фактический: фактический
результат представлен на рисунке 5.3,
соответствует ожидаемому
результату, все условия соблюдены.

Рисунок 6.2 – Окно авторизации

25
Рисунок 6.3 – Главное окно программы

Тест-кейс для просмотра информации объявления приведена в таблице 6.2.

Таблица 6.2 – Тест-кейс для просмотра информации объявления


№ Модель / Функция Шаги воспроизведения Результат

Ожидаемый: открытие
информации объявления.
Просмотр 1. Нажать на объявление
«1к 23/123м 3/8» Фактический: фактический
2 информации
объявления «улица Леси Украинки 4 к1» результат представлен на
рисунке 5.4, соответствует
ожидаемому результату, все
условия соблюдены.

26
Рисунок 6.4 – Фактический результат

5.2.2 Полное тестирование

Выполнение полного тестирование программного средства начинается с главного


окна программы. На рисунке 6.5 представлено главное окно программы.

Рисунок 6.5 – Главное окно программы

Тест-кейс для проведения регистрации приведена в таблице 6.3.


27
Таблица 6.3 – Тест-кейс для проведения регистрации.
№ Модель / Функция Шаги воспроизведения Результат

Ожидаемый: вывод сообщения о


1. Нажать на кнопку «SIGN UP» успешной регистрации, откроется
2. В поле «Name» ввести «Alexey» окно авторизации.
3. В поле «Surname» ввести
«Mozol» Окно регистрации с
1 Регистрация 4. В поле «Username» ввести заполненными полями приведено на
«Alex» рисунке 5.6
5. В поле «Password» ввести
Фактический: фактический
«12345»
результат представлен на рисунке 5.7,
соответствует ожидаемому
результату, все условия соблюдены.

Рисунок 6.6 – Окно регистрации

Рисунок 6.7 – Окно авторизации

28
Тест-кейс для проведения авторизации приведена в таблице 6.4.

Таблица 6.4 – Тест-кейс для проведения авторизации.


№ Модель / Функция Шаги воспроизведения Результат

Ожидаемый: вход в программу


под ником пользователя и
отображение главного окна
программы.
1. Нажать на кнопку «SIGN IN».
2. В поле «Username» ввести Окно авторизации с
2 Авторизация «Alex» заполненными полями представлено
3. В поле «Password» ввести на рисунке 5.8
«12345»
Фактический: фактический
результат представлен на рисунке 5.9,
соответствует ожидаемому
результату, все условия соблюдены.

Рисунок 6.8 – Окно авторизации

29
Рисунок 6.9 – Фактический результат

Тест-кейс для добавления объявления приведен в таблице 6.5.

Таблица 6.5 – Тест-кейс для добавления объявления.

№ Модель / Функция Шаги воспроизведения Результат


1. Нажать на кнопку «SIGN IN».
2. В поле «Username» ввести
«Alex»
3. В поле «Password» ввести
«12345»
4. Нажать на кнопку «Добавить
объявление»
5. В поле «Адрес» ввести
«ул. Пономарева 1А»
6. В поле «Этаж» ввести «6/15»
Добавление Ожидаемый: открытие
3
объявления 7. В поле «Кол-во комнат» опубликованного объявления.
ввести «2»
8. В поле «Тип недвижимости»
ввести «Квартира»
9. В поле «Продавец» ввести
«Собственник»
10. В поле «Телефон» ввести
«+375 44 508-97-19»
11. В поле «Имя владельца»
ввести «Оксана»

30
Продолжение таблицы 6.5 – Тест-кейс для добавления объявления.
№ Модель / Функция Шаги воспроизведения Результат
12. В поле «Общая площадь»
ввести «59»
13. В поле «Площадь кухни»
ввести «9»
14. В поле «Ремонт» ввести
«Евроремонт»
15. В поле «Описание»
ввести «Продается 2к квартира с
отличным ремонтом для
покупателей со вкусом к
жизни!!! В квартире сделан
качественный ремонт в одном
стилистическом направлении.
Очень удобная планировка:
комнаты светлые и просторные, Окно с заполненными
комфортная кухня с рабочей данными представлен на
поверхностью у окна и рисунке 5.10
просторная прихожая. Ремонт
3
Добавление Фактический: фактический
объявления выполнен с использованием
результат представлен на
самых качественных материалов,
рисунке 5.11, соответствует
сантехника премиум класса,
ожидаемому результату, все
плитка – производитель Италия.
условия соблюдены.
Пол – пакетная доска,
производитель Швеция.
Установлена техника лучших
мировых производителей.
Межкомнатные двери –
невидимки.»
16. В поле «Цена за сутки»
ввести «50»
17. В поле «Цена за 30 дней»
ввести «800»
18. В поле «Цена за 30 дней»
ввести «800»
19. Нажать на кнопку
«Опубликовать»

31
Рисунок 6.10 – Окно добавление объявления

Рисунок 6.11 – Фактический результат

Тест-кейс для проведения сортировки приведен в таблице 5.6.

32
Таблица 5.6 – Тест-кейс для проведения сортировки
№ Модель / Функция Шаги воспроизведения Результат

Ожидаемый: вывод объявлений


с параметрами сортировки.
1. Выбрать количество комнат от
«3» до «4». Панель сортировки с
2. Выбрать «Не 1-й и не последний заполненными полями представлено
4 Сортировка на рисунке 5.12
этаж»
3. Нажать кнопку «Найти» Фактический: фактический
результат представлен на рисунке
5.13, соответствует ожидаемому
результату, все условия соблюдены.

Рисунок 6.12 – Панель сортировки

33
Рисунок 6.13 – Фактический результат

34
7 Применение

7.1 Назначение программы

Данная программа предназначена для упрощения поиска недвижимости. Программа


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

7.2 Условия применения

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


требуется:
– операционная система начиная с Windows 7;
– процессор от Intel Pentium 4 – 2365M CPU @ 1.30GHz;
– ОЗУ от 500 МБ;
– видеокарта от Palit GeForce 610;
– места на HDD 100 МБ;
– мышь / touchpad;
– клавиатура;
– программная платформа Microsoft .NET Framework 4.7;
– офисный пакет приложений Microsoft Office Access Professional 2019.

7.3 Справочная система

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


система, в которой приведены приемы работы с приложением, включающие данные о том,
что произойдёт после нажатия на определенную кнопку или при выборе пункта меню.
Справочная система была создана для ознакомления с программой. В ней
присутствует информация, которая может напомнить принцип работы программы.
Структура справочной системы:
– введение – предварительные сообщения общего характера, предпосылаемые
произведению, с целью ввести пользователя в курс программы;
– типы недвижимости – описаны все типы недвижимости какие пользователь может
найти в программе;
– основной интерфейс программы – описаны главные функции программы;
– контекстное меню – описано как пользоваться меню программы;
– параметры объявления – описано что где располагается в характеристиках
объявления;
– добавление объявления – описано что надо для добавления объявления и как
опубликовать объявление;
– о программе – описано что собой представляет программа.
Справочная система программного средства представляет собой отдельное окно с
полным описанием основных функций программы. Чтобы загрузить справочную систему,
нужно нажать кнопку со знаком вопроса в левом нижнем углу программы. В справочной
системе даны ответы на типичные вопросы, возникающие при работе с приложением, что,
несомненно, должно помочь при освоении программного средства.
На рисунке 7.1 представлено введение.

35
Рисунок 7.1 – Введение

На рисунке 7.2 представлены типы недвижимости.

Рисунок 7.23 – Типы недвижимости

На рисунке 7.3 представлен основной интерфейс программы.

Рисунок 7.3 – Основной интерфейс программы

36
На рисунке 7.4 представлено контекстное меню.

Рисунок 7.44 – Контекстное меню

На рисунке 7.5 представлены параметры объявления.

Рисунок 7.5 – Параметры объявления

37
На рисунке 7.6 представлено добавление объявления.

Рисунок 7.6 – Добавление объявление

38
Заключение

В рамках курсового проектирования на тему «Программное средство для


автоматизация аренды недвижимости» было разработано программное средство
«TheProperty.exe», позволяющее просматривать объявления, добавлять объявление,
сортировать объявления, производить регистрацию и авторизацию аккаунтов.
Для достижения цели курсового проектирования были решены следующие задачи:
– определена вычислительная система, необходимая для создания программного
средства;
– разработана физическая и логическая модель данных;
– по модели выполнено проектирование задачи;
– разработано программное средство;
– описано созданное программное средство;
– выбрана методика испытаний;
– описан процесс тестирования;
– приведены примеры области применения.
Проект был разработан в среде Visual Studio Professional 2019 на языке C#. База
данных была реализована в Microsoft Access Professional 2019.
Программное средство имеет свои недостатки, такие как:
– нет возможности у пользователя удалить свое объявление;
– нет возможности отредактировать объявление пользователя;
– нет проверки на заполнение всех полей при добавлении объявления.
А также свои преимущества:
– простой интерфейс;
– удобство использования;
– информативность.
Программа реализована в полном объеме и в соответствии с заданными
требованиями, полностью отлажена и протестирована. Поставленные задачи выполнены.
Программное средство готово к практическому использованию и может быть
дополнено и модернизировано.

39
Список информационных источников

1 Михалевич В.Ю. Методические указания к курсовому проектированию для


учащихся специальности 2-40 01 01 «Программное обеспечение информационных
технологий» / В.Ю. Михалевич. – Минск: КБП, 2020

2 Багласова Т.Г. Методические указания по оформлению курсовых и дипломных


проектов / Т.Г.Багласова, К.О.Якимович. – Минск: КБП, 2013

3 Руководство по программированию на C# [Электронный ресурс]. – Microsoft, 2019.


– Режим доступа : http://docs.microsoft.com/ru-ru/dotnet/csharp/programming-guide/. – Дата
доступа : 15.03.2020.

4 Руководство по программированию в Windows Forms [Электронный ресурс]. –


Metanit, 2020. – Режим доступа : https://metanit.com/sharp/windowsforms/. – Дата доступа :
12.03.2020.

5 Программа и методы испытаний. Требования к содержанию, оформлению и


контролю качества : ГОСТ 19.301-2000. – Введ. 01.09.2001. – Минск : Межгос. Совет по
стандартизации, метрологии и сертификации, 2000. – 16 с.

6 SQL Задачи и решения [Электронный ресурс]. – SQL-Tutorial, 2020. – Режим


доступа : http://www.sql-tutorial.ru. – Дата доступа : 22.03.2020.

7 C# – How to Display another UserControl by Clicking on button in One UserControl


[Электронный ресурс]. – YouTybe, 2015. – Режим доступа : https://www.youtube.com/cha
nnel/UCigNaporFrKIPHiF1FcWfwA/videos. – Дата доступа : 21.04.2020.

8 Обзор обновлений и новых функций Windows 10 [Электронный ресурс]. –


Microsoft, 2020. – Режим доступа : https://www.microsoft.com/ru-ru/windows/features/. – Дата
доступа : 22.05.2020.

9 Visual Studio 2019 [Электронный ресурс]. – Microsoft, 2020. – Режим доступа :


https://visualstudio.microsoft.com/ru/vs/. – Дата доступа : 27.05.2020.

40
Приложение А
(обязательное)
Текст программных модулей

//Form1.cs

using System;
using System.Data.OleDb;
using System.Drawing;
using System.IO;
using System.Windows.Forms;

namespace TheProperty
{
public partial class Form1 : Form
{
OleDbConnection connection = new
OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Database.mdb;"); //строка
подключения к базе данных

public Form1()
{
InitializeComponent();
SearchPanel.Location = new Point(21, 11);
this.ActiveControl = UserName;
PrintAnnouncement("SELECT * FROM Announcement"); //запрос в базу данных
_obj = this;
}

static Form1 _obj;


public static Form1 Instance
{
get
{
if (_obj == null)
{
_obj = new Form1();
}
return _obj;
}
}

public Guna.UI.WinForms.GunaPanel Search


{
get { return SearchPanel; }
set { SearchPanel = value; }
}
public TableLayoutPanel tableLayout
{
get { return tableLayoutPanel1; }
set { tableLayoutPanel1 = value; }
}
public Guna.UI.WinForms.GunaPanel Info
{
41
get { return InfoPanel; }
set { InfoPanel = value; }
}

Point lastPoint;
private void TopPanel_MouseDown(object sender, MouseEventArgs e)
{
this.ActiveControl = UserName;
lastPoint = new Point(e.X, e.Y);
}

private void TopPanel_MouseMove(object sender, MouseEventArgs e)


{
if (e.Button == MouseButtons.Left)
{
this.Left += e.X - lastPoint.X;
this.Top += e.Y - lastPoint.Y;
}
}

private void gunaButton5_Click(object sender, EventArgs e)


{
ReferenceSystem system = new ReferenceSystem();
system.Show();
}

private void btnEXIT_Click(object sender, EventArgs e)


{
Application.Exit();
}

private void btnSignIN_Click(object sender, EventArgs e)


{
this.Hide();
SIGN_IN sIGN_IN = new SIGN_IN();
sIGN_IN.Show();
}

private void btnSignUP_Click(object sender, EventArgs e)


{
this.Hide();
SIGN_UP sIGN_UP = new SIGN_UP();
sIGN_UP.Show();
}

private void gunaButton6_Click(object sender, EventArgs e)


{
this.Hide();
Add add = new Add();
add.gunaLabel5.Text = UserName.Text;
add.Show();
}

private void gunaButton7_Click(object sender, EventArgs e)

42
{
tableLayoutPanel1.Visible = false;
SearchPanel.Location = new Point(60, 11);
AdminPanel Item = new AdminPanel();
Item.Dock = DockStyle.Fill;
Info.Controls.Add(Item);
PrintCount(Item);
}

public void PrintCount(AdminPanel Item)//вывод информации в админ панель


{
OleDbCommand command = new OleDbCommand("SELECT COUNT(*) FROM
Announcement", connection);//запрос в базу данных получения количество объявлений
connection.Open();
Item.CountAds.Text = "0" + command.ExecuteScalar().ToString();
connection.Close();

OleDbCommand command1 = new OleDbCommand("SELECT COUNT(*) FROM


[User]", connection);//запрос в базу данных получения количество пользователей
connection.Open();
Item.CountUsers.Text = "0" + command1.ExecuteScalar().ToString();
connection.Close();

Random random = new Random();


Item.CountBuyAds.Text = "0" + random.Next(0, 30);

Item.DataTime.Text = DateTime.Now.Day.ToString() + "." +


DateTime.Now.Month.ToString() + "." + DateTime.Now.Year.ToString();

private void btnALL_Click(object sender, EventArgs e)


{
PrintAnnouncement("SELECT * FROM Announcement");//запрос в базу данных и
передаче в метод с выводом информации из базы данных
if(InfoPanel.Controls.Count >= 2)
InfoPanel.Controls.RemoveAt(1);
SearchPanel.Location = new Point(21, 11);
tableLayoutPanel1.Visible = true;
btnUser.Visible = true;
btnALL.Visible = false;
}

private void btnUser_Click(object sender, EventArgs e)


{
PrintAnnouncement($"SELECT * FROM Announcement Where
uUsername='{UserName.Text}'");");//запрос в базу данных и передаче в метод с выводом
информации из базы данных
if (InfoPanel.Controls.Count >= 2)
InfoPanel.Controls.RemoveAt(1);
SearchPanel.Location = new Point(21, 11);
tableLayoutPanel1.Visible = true;
btnUser.Visible = false;
btnALL.Visible = true;

43
}

public void PrintAnnouncement(string inquiry)//метод вывода объявления который


получает запрос SQL
{
OleDbCommand command = new OleDbCommand(inquiry, connection);
connection.Open();
OleDbDataReader reader = command.ExecuteReader();

tableLayoutPanel1.Controls.Clear();
while (reader.Read())
{
ElProperty Item = new ElProperty();

byte[] Photo = (byte[])(reader[16]);


MemoryStream memoryStream = new MemoryStream(Photo);
Item.gunaPictureBox2.Image = Image.FromStream(memoryStream);

Item.gunaLabel1.Text = $"{reader[5]}к {reader[10]} / {reader[11]} м";


Item.gunaLabel2.Text = $"{reader[4]} / {reader[3]}";
Item.gunaLabel3.Text = reader[2].ToString();
Item.IDLabel.Text = reader[0].ToString();

tableLayoutPanel1.Controls.Add(Item);//добавления объекта в таблицу


}
reader.Close();
connection.Close();
}

private void TextBoxSearch_Enter(object sender, EventArgs e)


{
if (TextBoxSearch.Text == "Search")//проверка на нахождения в поле слова
Search
TextBoxSearch.Text = "";
}

private void TextBoxSearch_Leave(object sender, EventArgs e)


{
if (TextBoxSearch.Text == "")//проверка является ли поле пустым
TextBoxSearch.Text = "Search";
}

private void btnBack_Click(object sender, EventArgs e)


{
InfoPanel.Controls.RemoveAt(1);
SearchPanel.Location = new Point(21, 11);
tableLayoutPanel1.Visible = true;
}

private void gunaButton4_Click(object sender, EventArgs e)


{
PrintAnnouncement($"SELECT *
FROM Announcement
Where aPrice>={gunaNumeric1.Value} and aPrice <= {gunaNumeric2.Value} or " +

44
$"aCountRoom>={gunaNumeric4.Value} and aCountRoom <= {gunaNumeric3.Value} or
"+
$"aSeller='{ComboBoxSeller.Text}' or " +
$"aFloorEnd={gunaNumeric5.Value}");//запрос в базу данных
}

private void gunaButton1_Click(object sender, EventArgs e)


{
gunaNumeric1.Value = 0;
gunaNumeric2.Value = 0;
gunaNumeric4.Value = 0;
gunaNumeric3.Value = 0;
ComboBoxSeller.Text = ComboBoxSeller.Items[0].ToString();
gunaNumeric5.Value = 0;
gunaCheckBox1.Checked = false;
PrintAnnouncement("SELECT * FROM Announcement");//передача в метод
запрос в базу данных
}
}
}

//SIGN_UP.cs

using System;
using System.Data.OleDb;
using System.Drawing;
using System.Windows.Forms;

namespace TheProperty
{
public partial class SIGN_UP : Form
{
OleDbConnection connection = new
OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Database.mdb;");//строка
подключения к базе данных

public SIGN_UP()
{
InitializeComponent();
this.ActiveControl = Label;
}

private void btnClose_Click(object sender, EventArgs e)


{
this.Hide();
Form1 mainWindow = new Form1();
mainWindow.UserName.Text = TextBoxUsername.Text;
mainWindow.Show();
}

private void btnSignUP_Click(object sender, EventArgs e)


{
try

45
{
if (TextBoxName.Text != "Name" && TextBoxSurname.Text != "Surname" &&
TextBoxUsername.Text != "Username" && TextBoxPassword.Text != "Password")//проверка на
заполненые данные
{
OleDbCommand command = new OleDbCommand("INSERT INTO [User]
(uName, uSurname, uUsername, uPassword) VALUES ('" + TextBoxName.Text + "', '" +
TextBoxSurname.Text + "', '" + TextBoxUsername.Text + "', '" + TextBoxPassword.Text + "')",
connection);//запрос добавления в базу данных пользователя

connection.Open();
command.ExecuteNonQuery();
connection.Close();

this.Hide();
SIGN_IN sIGN_IN = new SIGN_IN();
sIGN_IN.Show();
}
else
{
if (TextBoxName.Text == "Name")
TextBoxName.BorderColor = Color.Red;
if (TextBoxSurname.Text == "Surname")
TextBoxSurname.BorderColor = Color.Red;
if (TextBoxPassword.Text == "Password")
TextBoxPassword.BorderColor = Color.Red;
if (TextBoxUsername.Text == "Username")
TextBoxUsername.BorderColor = Color.Red;
panelInfo.Visible = true;
labelMessenge.ForeColor = Color.Red;
labelMessenge.Text = "Есть пустые поля";
}
}
catch
{
panelInfo.Visible = true;
labelMessenge.ForeColor = Color.Red;
labelMessenge.Text = "Пользователь с таким UserName уже зарегестрирован";
//вывод ошибки
connection.Close();
}
}

private void gunaLabel8_Click(object sender, EventArgs e)


{
this.Hide();
SIGN_IN sIGN_IN = new SIGN_IN();
sIGN_IN.Show();
}

Point lastPoint;
private void SIGN_UP_MouseDown(object sender, MouseEventArgs e)
{
lastPoint = new Point(e.X, e.Y);

46
}

private void SIGN_UP_MouseMove(object sender, MouseEventArgs e)


{
if (e.Button == MouseButtons.Left)
{
this.Left += e.X - lastPoint.X;
this.Top += e.Y - lastPoint.Y;
}
}

private void TextBoxName_Enter(object sender, EventArgs e)


{
if (TextBoxName.Text == "Name")//проверка на нахождения в поле Name
{
TextBoxName.Text = "";
TextBoxName.ForeColor = Color.Black;
}
}

private void TextBoxName_Leave(object sender, EventArgs e)


{
if (TextBoxName.Text == "")//проверка является ли поле пустым
{
TextBoxName.Text = "Name";
TextBoxName.ForeColor = Color.Gray;
}
}

private void TextBoxSurname_Enter(object sender, EventArgs e)


{
if (TextBoxSurname.Text == "Surname")// проверка на нахождения в поле
Surname
{
TextBoxSurname.Text = "";
TextBoxSurname.ForeColor = Color.Black;
}
}

private void TextBoxSurname_Leave(object sender, EventArgs e)


{
if (TextBoxSurname.Text == "")// проверка является ли поле пустым
{
TextBoxSurname.Text = "Surname";
TextBoxSurname.ForeColor = Color.Gray;
}
}

private void TextBoxUsername_Enter(object sender, EventArgs e)


{
if (TextBoxUsername.Text == "Username")//проверка на нахождения в поле
Username
{
TextBoxUsername.Text = "";

47
TextBoxUsername.ForeColor = Color.Black;
}
}

private void TextBoxUsername_Leave(object sender, EventArgs e)


{
if (TextBoxUsername.Text == "")// проверка является ли поле пустым
{
TextBoxUsername.Text = "Username";
TextBoxUsername.ForeColor = Color.Gray;
}
}

private void TextBoxPassword_Enter(object sender, EventArgs e)


{
if (TextBoxPassword.Text == "Password")// проверка на нахождения в поле
Password
{
TextBoxPassword.Text = "";
TextBoxPassword.ForeColor = Color.Black;
}
}

private void TextBoxPassword_Leave(object sender, EventArgs e)


{
if (TextBoxPassword.Text == "")// проверка является ли поле пустым
{
TextBoxPassword.Text = "Password";
TextBoxPassword.ForeColor = Color.Gray;
}
}
}
}

//SIGN_IN.cs

using System;
using System.Data;
using System.Data.OleDb;
using System.Drawing;
using System.Windows.Forms;

namespace TheProperty
{
public partial class SIGN_IN : Form
{
OleDbConnection connection = new
OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Database.mdb;");//строка
подключения в базу данных

public SIGN_IN()
{
InitializeComponent();
this.ActiveControl = Label;

48
}

private void gunaLabel8_Click(object sender, EventArgs e)


{
this.Hide();
SIGN_UP sIGN_UP = new SIGN_UP();
sIGN_UP.Show();
}

private void btnClose_Click(object sender, EventArgs e)


{
this.Hide();
Form1 mainWindow = new Form1();
mainWindow.UserName.Text = TextBoxUser.Text;
mainWindow.Show();
}

private void btnSignIN_Click(object sender, EventArgs e)


{
try
{
Form1 mainWindow = new Form1();

if (TextBoxUser.Text != "Username" && TextBoxPassword.Text !=


"Password")//проверка на заполненые поля
{
OleDbDataAdapter oleDbDataAdapter = new OleDbDataAdapter("SELECT *
FROM [User] WHERE uUsername='" + TextBoxUser.Text + "' AND uUsername='" +
TextBoxPassword.Text + "'", connection); //запрос в базу данных поиска пользователя
DataTable dataTable = new DataTable();

oleDbDataAdapter.Fill(dataTable);

if (dataTable.Rows.Count != 1)//если пользователя нет


{
ErrorPanel.Visible = true;
Messenge.ForeColor = Color.Red;
Messenge.Text = "Пользователь не найден";//вывод ошибки
}
else
{
mainWindow.UserName.Text = TextBoxUser.Text;
mainWindow.btnAdd.Visible = true;
mainWindow.btnIN.Visible = false;
mainWindow.btnUP.Visible = false;
mainWindow.btnUser.Visible = true;
if (TextBoxUser.Text == "admin") { mainWindow.btnAdmPanel.Visible =
true; }
mainWindow.Show();
this.Hide();
}
}
else
{

49
if (TextBoxPassword.Text == "Password")
TextBoxPassword.BorderColor = Color.Red;
if (TextBoxUser.Text == "Username")
TextBoxUser.BorderColor = Color.Red;
ErrorPanel.Visible = true;
Messenge.ForeColor = Color.Red;
Messenge.Text = "Есть пустые поля";
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Messenge", MessageBoxButtons.OK,
MessageBoxIcon.Error);//вывод ошибки
}
}

Point lastPoint;
private void SIGN_IN_MouseDown(object sender, MouseEventArgs e)
{
lastPoint = new Point(e.X, e.Y);
}

private void SIGN_IN_MouseMove(object sender, MouseEventArgs e)


{
if (e.Button == MouseButtons.Left)
{
this.Left += e.X - lastPoint.X;
this.Top += e.Y - lastPoint.Y;
}
}

private void TextBoxUser_Enter(object sender, EventArgs e)


{
if (TextBoxUser.Text == "Username")//проверка на нахождения в поле Username
{
TextBoxUser.Text = "";
TextBoxUser.ForeColor = Color.Black;
}
}

private void TextBoxUser_Leave(object sender, EventArgs e)


{
if (TextBoxUser.Text == "")//проверка является ли поле пустым
{
TextBoxUser.Text = "Username";
TextBoxUser.ForeColor = Color.Gray;
}
}

private void TextBoxPassword_Enter(object sender, EventArgs e)


{
if (TextBoxPassword.Text == "Password")// проверка на нахождения в поле
Password
{

50
TextBoxPassword.Text = "";
TextBoxPassword.ForeColor = Color.Black;
}
}

private void TextBoxPassword_Leave(object sender, EventArgs e)


{
if (TextBoxPassword.Text == "")// проверка является ли поле пустым
{
TextBoxPassword.Text = "Password";
TextBoxPassword.ForeColor = Color.Gray;
}
}
}
}

//ElProperty.cs

using System;
using System.Drawing;
using System.Windows.Forms;
using System.Data.OleDb;
using System.IO;

namespace TheProperty
{
public partial class ElProperty : UserControl
{
public OleDbConnection myConnection = new
OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Database.mdb;");//строка
подключения к базе данных

public ElProperty()
{
InitializeComponent();
}

public Image image(OleDbDataReader reader, int num)//метод преобразования


картинки из байт в image
{
byte[] Photo = (byte[])(reader[num]);
MemoryStream memoryStream = new MemoryStream(Photo);
return Image.FromStream(memoryStream);
}

private void gunaPictureBox2_Click(object sender, EventArgs e)


{
Form1.Instance.Search.Location = new Point(60, 11);
Form1.Instance.tableLayout.Visible = false;
try
{
OleDbCommand command = new OleDbCommand($"SELECT * FROM
Announcement WHERE idAnnouncement={IDLabel.Text}", myConnection);//запрос поиска
объявления по id

51
myConnection.Open();
OleDbDataReader reader = command.ExecuteReader();

InfoProperty info = new InfoProperty();


Form1.Instance.Info.Controls.Add(info);
info.Dock = DockStyle.Fill;

while (reader.Read())//считывание информации найденого объявления


{
info.gunaPictureBox1.Image = image(reader, 16);
info.gunaPictureBox2.Image = image(reader, 16);
info.gunaPictureBox3.Image = image(reader, 17);
info.gunaPictureBox4.Image = image(reader, 18);
info.gunaPictureBox5.Image = image(reader, 19);
info.gunaLabel10.Text = $"Сутки {reader[14]} р. / 30 дней {reader[15]} р.";
info.gunaLabel8.Text = $"{reader[5]}-комнатная квартира";
info.gunaLabel9.Text = reader[7].ToString();
info.gunaLabel13.Text = reader[9].ToString();
info.gunaLabel12.Text = reader[8].ToString();
info.gunaLabel11.Text = reader[13].ToString();
info.gunaLabel7.Text = $"{reader[4]} / {reader[3]}";
info.gunaLabel6.Text = $"{reader[11]} м2";
info.gunaLabel5.Text = $"{reader[10]} м2";
}

reader.Close();
myConnection.Close();
}
catch
{
myConnection.Close();
}

}
}
}
}

bool changet1 = false;


private void gunaPictureBox2_Click(object sender, EventArgs e)
{
if (changet1)
{
gunaPictureBox2.Image = Properties.Resources.heart_32px;
}
else
{
gunaPictureBox2.Image = Properties.Resources.heart_outline_26px;
}
changet1 = !changet1;
}

bool changet2 = false;

52
private void gunaPictureBox4_Click(object sender, EventArgs e)
{
if (changet2)
{
gunaPictureBox4.Image = Properties.Resources.eye_32px;
}
else
{
gunaPictureBox4.Image = Properties.Resources.eye_64px;
}
changet2 = !changet2;
}

bool changet3 = false;


private void gunaAdvenceButton1_Click(object sender, EventArgs e)
{
if (changet3)
{
gunaAdvenceButton1.ForeColor = Color.Black;
gunaAdvenceButton1.BackColor = SystemColors.Control;
gunaAdvenceButton1.Image = Properties.Resources.book_26px;
gunaAdvenceButton1.Text = "Добавить в корзину";
gunaAdvenceButton1.ImageOffsetX = 0;
DeleteBasketBook();
}
else
{
gunaAdvenceButton1.ForeColor = Color.White;
gunaAdvenceButton1.BackColor = Color.Black;
gunaAdvenceButton1.Image = Properties.Resources.checkmark_26px;
gunaAdvenceButton1.Text = "Книга в корзине";
gunaAdvenceButton1.ImageOffsetX = 10;
AddBasketBook();
}
changet3 = !changet3;
}

private void AddBasketBook()


{
private void btnAdd_Click(object sender, EventArgs e)//метод добавления в базу
данных объявления
{
try
{
Photo1 = PhotoBD(PictureBox);
Photo2 = PhotoBD(PictureBox2);
Photo3 = PhotoBD(PictureBox3);
Photo4 = PhotoBD(PictureBox4);
OleDbCommand command = new OleDbCommand($"INSERT INTO
Announcement (uUsername, aAdress, aFloorEnd, aFloor, aCountRoom, aTipProperty, aSeller,
aPhone, aNameOwner, aTotalArea, aKitchenArea, aTipRepairs, aDiscription, aPrice, aPrice30,
aPhoto, aPhoto2, aPhoto3, aPhoto4) " +
$"VALUES ({gunaLabel5.Text},
'{TextBoxAdress.Text}', {gunaNumeric3.Value}, {gunaNumeric1.Value}, {gunaNumeric2.Value},

53
'{ComboBoxTio.Text}', '{ComboBoxSeller.Text}', '{TextBoxPhone.Text}',
'{TextBoxNameSell.Text}', '{TextBox1.Text}', '{TextBox2.Text}', '{ComboBox1.Text}',
'{TextBoxDiscription.Text}', {int.Parse(TextBoxPrice.Text)}, {int.Parse(TextBoxPrice30.Text)},
@photo, @photo2, @photo3, @photo4)", connection);//запрос добавления объявления в базу
данных

command.Parameters.AddWithValue("@photo", Photo1);
command.Parameters.AddWithValue("@photo2", Photo2);
command.Parameters.AddWithValue("@photo3", Photo3);
command.Parameters.AddWithValue("@photo4", Photo4);

connection.Open();
command.ExecuteNonQuery();
connection.Close();
ElVisible();
this.Close();
}
catch(NullReferenceException nex)
{
MessageBox.Show(nex.Message, "Messenge", MessageBoxButtons.OK,
MessageBoxIcon.Error);//вывод ошибки
connection.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Messenge", MessageBoxButtons.OK,
MessageBoxIcon.Error);//вывод ошибки
connection.Close();
}

private void btnBrowse_Click(object sender, EventArgs e)//метод поиска картинки


{
try
{
OpenFileDialog efd = new OpenFileDialog();
if (efd.ShowDialog() == DialogResult.OK)
PictureBox.Image = Image.FromFile(efd.FileName);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK,
MessageBoxIcon.Error);//вывод ошибки
}
}

private void gunaAdvenceButton1_Click(object sender, EventArgs e)//поиск картинки


{
try
{
OpenFileDialog efd = new OpenFileDialog();
if (efd.ShowDialog() == DialogResult.OK)
PictureBox2.Image = Image.FromFile(efd.FileName);

54
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK,
MessageBoxIcon.Error);//вывод ошибки
}
}

private void gunaAdvenceButton2_Click(object sender, EventArgs e)//метод поиск


картинки
{
try
{
OpenFileDialog efd = new OpenFileDialog();
if (efd.ShowDialog() == DialogResult.OK)
PictureBox3.Image = Image.FromFile(efd.FileName);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK,
MessageBoxIcon.Error);//вывод ошики
}
}

private void gunaAdvenceButton3_Click(object sender, EventArgs e)//метод поиска


картинки
{
try
{
OpenFileDialog efd = new OpenFileDialog();
if (efd.ShowDialog() == DialogResult.OK)
PictureBox4.Image = Image.FromFile(efd.FileName);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK,
MessageBoxIcon.Error);//вывод ошибки
}
}
}
}

55

Оценить