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

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ ДНР

ДОНЕЦКИЙ НАЦИОНАЛЬНЫЙ УНИВЕРСИТЕТ

Факультет Физико-технический
Кафедра Компьютерных технологий (КТ)

Зав. кафедрой КТ
____________ Г.В.Аверин
(подпись)

«___» ____________ 2020 г.

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
к курсовой работе бакалавра 3 курса
на тему:

РАЗРАБОТКА ИНФОРМАЦИОННОЙ СИСТЕМЫ И БАЗЫ


ДАННЫХ АВТОМАГАЗИНА

Автор А.А. Афанасьев


(подпись)

Направление 09.03.0 Информатика и вычислительная техника


1

Руководитель работы ________________ Гукай А.Е.


подпись

Консультанты по разделам:

Моделирование бизнес-процессов __________________ доц. В.И. Бондаренко


подпись

Проектирование системы __________________ доц. В.И. Бондаренко


подпись

Нормоконтроль __________________ ст. лаборант В.Г. Медведева


подпись

Курсовая работа защищена __________ _____________________


дата итоговая оценка комиссии

Подписи членов комиссии: __________________


__________________
__________________
__________________

Донецк
2020
ГОУ ВПО «Донецкий национальный университет»
кафедра Компьютерных технологий

Утверждаю
Зав. кафедрой
_____________
подпись
_____________
дата

ЗАДАНИЕ

На курсовую работу студента 3 курса А.А. Афанасьева.


Тема курсовой работы: Разработка информационной системы и базы данных
автомагазина.
Краткая постановка задачи: 1. Изучить и проанализировать работу службы доставки.
2. Ознакомиться с программными продуктами автомагазина для обработки баз данных.
3. Разработать техническое задание на создание программы для работы с базой данных
автомагазина. 4. Разработать проект программного обеспечения системы:
спроектировать структуру входных и выходных данных, классы программы и их
взаимодействие, спроектировать базу данных. 5. Разработать средствами Windows
Form, C# и MySql Server приложение, которое позволяет обрабатывать информацию
таблиц базы данных, выполнять запросы. 6. Протестировать программное обеспечение.
7. Оформить отчёт.
Исходные данные: 1. Документация по Microsoft SQL Server Management Studio и
Windows Form. 2. Информация об автомагазинах. 3. Описание языка C#. Описание
языка запросов Sql.
Ожидаемые результаты: Информационная система автомагазина
Календарный план работы:
Даты
Отметки о
консультаци Этапы выполнения работы
выполнении
й
10.09.2020 Обсуждение литературы и постановка задачи Выполнен
о
16.09.2020 Предварительное утверждение содержания отчёта выполнено
20.09.2020 Создание бизнес-модели выполнено
30.09.2020 Построение концептуальной, логической, физической выполнено
моделей
15.10.2020 Разработка приложения выполнено
05.11.2020 Обсуждения организации тестирования программы выполнено
12.11.2020 Демонстрация программного продукта руководителю выполнено
19.11.2020 Оформление отчёта выполнено
11.12.2020 Предоставление отчёта руководителю выполнено

Дата выдачи задания 10.09.2020 года


Студент А.А. Афанасьев
Руководитель А.Е. Гукай
АННОТАЦИЯ

Отчёт о курсовой работе: 54 страниц, 21 рисунок, 2 приложения,


7 источников.
Объект исследования – автомагазин.
Предмет исследований – база данных для автомагазина.
Цель работы – разработка приложения, позволяющего вести базу
данных с информацией о машинах и запчастях.
Метод исследования – анализ возможностей Windows Form для
создания графического интерфейса приложения, возможностей языка
программирования C# для написания основной логики приложения,
возможностей среды Open Server для создания базы данных.
В результате решения задачи спроектирована база данных, которая
будет хранить всю необходимую информацию для работы службы доставки.
Помимо базы данных также будет спроектировано приложение, которое
будет работать с этой базой.
Приложение позволяет хранить информацию о машинах и запчастях, а
также о сотрудниках. Приложение позволяет выводить статус о наличии
машины или запчасти, информацию о машине/запчасти, количестве товара.
Приложение может использоваться сотрудниками автомагазина для
учёта имеющихся товаров.
MISCROSOFT WIDNWOS FORM, ПРОГРАММНЫЙ ПРОДУКТ, С#,
ИНФОРМАЦИОННАЯ СИСТЕМА АВТОМАГАЗИНА, АВТОМОБИЛЬ,
ЗАПЧАСТИ, SQL-ЗАПРОС, БАЗА ДАННЫХ.
4
СОДЕРЖАНИЕ
ВВЕДЕНИЕ..............................................................................................................5
1 АНАЛИЗ ПРЕДМЕТНОЙ ОБЛАСТИ................................................................7
1.1 Состояние вопроса......................................................................................7
1.2 Моделирование существующих бизнес-процессов....................................8
1.3 Актуальность и цель работы......................................................................11
2 ТЕХНИЧЕСКОЕ ЗАДАНИЕ.............................................................................12
2.1 Описание области применения и исходных данных приложения..........12
2.2 Требования к пользовательским интерфейсам.........................................12
2.3 Требования к аппаратным, программным и коммуникационным
интерфейсам.......................................................................................................14
2.4 Требования к пользователям продукта......................................................15
2.5 Требования к адаптации на месте..............................................................15
2.6 Функции продукта.......................................................................................15
2.7 Ограничения.................................................................................................16
3 ОБОСНОВАНИЕ ВЫБОРА ИНСТРУМЕНТАЛЬНЫХ СРЕДСТВ..............17
4 РАЗРАБОТКА БАЗЫ ДАННЫХ АВТОМАГАЗИНА....................................23
4.1 Разработка базы данных приложения.......................................................23
4.1.1 Концептуальное проектирование базы данных.................................23
4.1.2 Логическое проектирование базы данных.........................................24
4.1.3 Физическое проектирование базы данных.........................................25
4.1 Проектирование структуры приложения..................................................28
4.2 Описание методов приложения.................................................................30
4.3 Описание SQL-запросов к базе данных системы.....................................31
5.1 Аппаратные и программные средства создания и эксплуатации
приложения........................................................................................................33
5.2 Руководство пользователя..........................................................................33
5.3 Описание контрольных примеров..............................................................34
ЗАКЛЮЧЕНИЕ......................................................................................................37
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ............................................38
ПРИЛОЖЕНИЕ А Экранные формы...................................................................39
ПРИЛОЖЕНИЕ Б Фрагменты листинга.............................................................44
5
ВВЕДЕНИЕ

В современном мире любое предприятие стремится к автоматизации


своих процессов, что позволит уменьшить временные затраты и получать
больше прибыли с меньшими нагрузками. Информационные технологии
позволяют быстро и надёжно передавать информацию на большие
расстояния.
Человеку всегда нужно было хранить где-то большое количество
информации. Вначале это были примитивные способы, как наскальные
рисунки или устные пересказы. Затем человек изобрел бумагу, и хранить
разнообразную информацию стало намного проще. Но при создании
электронных вычислительных машин хранение и сортировка информации
вышла на концептуально новый уровень. Благодаря этому становится легче
вести учёт о всех товарах что есть в магазине.
Создание информационных систем помогло сгруппировать и настроить
автоматизацию использования данных. Именно этот прорыв позволил сейчас
так просто обращаться с информацией любого рода.
Население городов растет быстрыми темпами, увеличивая спрос на
автотранспорт. В связи этим возникают проблемы с учетом в магазинах
автомобилей и запчастей, которые очень часто приобретают.
Ставя перед собой цель – удовлетворить спрос на автомобили и
запчасти в крупных мегаполисах и вести четкий учет, компании обращаются
к компьютерным технологиям, которые позволяют наглядно анализировать
данные, в отличии от бумажных бланков.
После перехода от бумажного ведения учета автомагазина к
электронному, предприятие получает возможность получать свежие данные
синхронизировав с главным сервером для дальнейшего анализа и
прогнозирования расходов и доходов компании. Это позволит доказывать
6
свою конкурентно-способность, а также привлекать инвестиции на основе
обработанных данных за продолжительный срок.

В данной курсовой работе будет реализована система «Автомагазин»,


которая предназначена для автоматизации деятельности кассиров и
менеджеров, обслуживающих покупателей. Эксплуатация системы
предполагается на вычислительном комплексе, расположенном
непосредственно в автомагазине. Сам программный продукт состоит из
набора модулей, которые позволяют, автоматизировано выполнить процесс
продажи запчастей, контроля информации о машине, запчасти и её
характеристиках, позволяют выполнить отчет по имеющейся информации.
Далее представлена разработка приложения, реализующая выше
поставленную задачу.
7
1 АНАЛИЗ ПРЕДМЕТНОЙ ОБЛАСТИ

1.1 Состояние вопроса

Первый шагом в разработке информационной системы является анализ


предметной области. На данном этапе анализируются запросы пользователей,
в соответствии с ними определяется цель создания информационной
системы, выбираются информационные объекты и их характеристики,
которые определяют содержание проектируемой базы данных.
Целью создания информационной системы «Автомагазин» является
учет клиентов магазина, учёт продаж, закупок, ведение складской
документации и финансовых движений.
Завершенной информационной системой могут использоваться любые
фирмы, занимающиеся продажами. С точки зрения пользователя,
информационная система «Автомагазин» должна хранить всю необходимую
информацию для быстрого обеспечения сделки между автомагазином и
клиентом, а также выдавать ее по требованию в понятном и наглядном виде,
а также информационная система должна быть проста в использовании.
Задачей автомагазина является созданием торговой площадки, которая
позволяет, как находить, так и покупать понравившийся товар. Деятельность
компании организована следующим образом: в компанию обращаются
клиенты с целью покупки автомобиля либо каких-либо комплектующих. В
зависимости от потребностей клиента сотрудники должны грамотно
оформить заказ, указав при этом всю необходимую информацию.
В настоящее время для проектирования БД активно используются
CASE-средства, в основном ориентированные на использование ERD (Entity
-- Relationship Diagrams, диаграммы «сущность-связь»). С их помощью
определяются важные для предметной области объекты (сущности),
отношения друг с другом (связи) и их свойства (атрибуты). Следует
8
отметить, что средства проектирования ERD в основном ориентированы на
реляционные базы данных (РБД), и если существует необходимость
проектирования другой системы, скажем объектно-ориентированной, то
лучше избрать другие методы проектирования.
В рамках заданной предметной области можно построить следующий
список сущностей: «Автомобили», «комплектующие», «заказы»,
«характеристики автомобилей», «клиенты», «склады».
Автомагазин является промежуточным звеном между поставщиками и
клиентами. Наличие этого звена необходимо, так как любой автомагазин
является посредником в отношениях поставщик-клиент.
Итак, существует несколько документов, которые необходимы для
функционирования автомагазина; это сведения о сотрудниках, учёт товара на
складе и сведения о поставщиках. В сведениях о сотрудниках компании
указываются фамилия, имя и отчество сотрудника, его индивидуальный код,
отдел, в котором он работает, а также назначенный оклад. В учёте товара на
складе отражаются информация о имеющемся товаре автомагазина. В
сведениях о поставщиках должна отображаться вся доступная информация,
связанная с закупкой и поставкой товара на склад
Основная задача проектирования базы данных - определение
количества отношений и их реквизитного состава. Совокупность реквизитов,
объединенных в более крупную единицу данных, называется составной
единицей информации. На основе последних можно составить входные и
выходные документы базы данных «Автомагазин».

1.2 Моделирование существующих бизнес-процессов

Произведём оценку системы в терминах бизнес-процессов организации


с использованием методологий IDEF0. Первый шаг в построении модели –
это определение цели модели, то есть вопросов, на которые призвана
9
ответить модель. Вопросы следуют из формулировки задачи и анализа
требований.
Построим контекстную диаграмму (самое общее описание системы и её
взаимодействия с внешней средой) и проведём функциональную
декомпозицию (разбиение системы на крупные фрагменты) для построения
диаграмм декомпозиции. Контекстная диаграмма, описывающая
функционирование службы доставки, изображена на рисунке 1.1.

Рисунок 1.1 – Контекстная диаграмма


В контекстной диаграмме описывается общее взаимодействие системы
с окружающей средой. При этом стрелки имеют следующую интерпретацию:
1. Стрелкой входа «Клиент» – платит магазину деньги в качестве платы
за оказываемые услуги.
2. Стрелкой выхода «Заключение договора о покупке Т.С. либо
комплектующих».
10
3. Стрелками управления:
Законы – внешние правила, которыми управляется процесс
функционирования магазина в соответствии с законами;
Устав магазина – контроль за исполнением правил магазина;
4. Стрелкой механизма «Сотрудники» – это ресурсы, необходимые для
процесса исполнения услуг и функционирования автомагазина в целом.
Диаграмма декомпозиции функционального блока «Автомагазин»
изображена на рисунке 1.2.

Рисунок 1.2 – Диаграмма декомпозиции блока «Автомагазин»

В диаграмме декомпозиции 1 уровня описываются работы (в


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

Целью данного проекта является создание удобного решения для


автоматизации работы данных автомагазина и повышение продуктивности
персонала, путем сокращения затрат на ручную работу.
Исходя из указанной цели, можно выделить частные задачи,
поставленные в работе:
1) провести детальный анализ предметной области. Изучить механизм
работы автомагазина, выделить ключевые моменты;
2) изучить технологии: среда разработки Microsoft Visual Studio,
платформу Windows Form, среда разработки phpMyAdmin, язык C# и SQL;
3) разработать архитектуру приложения, концептуальную, логическую
и физическую модели базы данных и функционал программы,
соответствующий техническому заданию;
4) разработать полностью рабочее приложение со всем
запланированным функционалом.
Актуальность:
1) операторам автомагазина становится намного проще осуществлять
оформление заказов на покупку от клиентов;
2) возможность передавать информацию по почте в любой другой
город, где находится филиал магазина;
3) позволит без особых проблем хранить информацию об учёте
магазина на протяжении многих лет из-за большого объёма хранилища.
12
2 ТЕХНИЧЕСКОЕ ЗАДАНИЕ

2.1 Описание области применения и исходных данных приложения

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


автомагазина в целях уменьшения временных затрат на оформление заказов,
а также на учёт количества запчастей и машин.
Исходными данными для приложения являются:
1) Машины;
2) Запчасти;
3) Состояние;
4) Количество;
5) Поставщики;
6) Заказчики.

2.2 Требования к пользовательским интерфейсам

Пользовательский интерфейс должен разрабатываться под разрешение


экрана 800х600 и более. Окна должны обладать системным меню с кнопкой
закрытия.
Требования к окнам приложения:
Окно регистрации должно быть разделено на левую и правую часть. В
левой части окна авторизации должны находиться подсказки для заполнения
полей. В правой части окна должны находиться элементы для регистрации
пользователя:
1) надпись «Введите имя» с полем для ввода имени пользователя;
2) надпись «Введите фамилию» с полем для ввода фамилии
пользователя;
3) надпись «Введите логин» с полем для ввода логина пользователя;
13
4) надпись «Введите пароль» с полем для ввода пароля пользователя;
5) Дополнительная проверка со случайным набором цифр и полем для
их ввода;
6) Кнопка «сменить картинку»;
7) «Чекбокс» для подтверждения;
8) Кнопка «Регистрация»;
9) кнопка «Войти»;
Окна для авторизации пользователя:
1) надпись «Введите логин» с полем для ввода логина пользователя;
2) надпись «Введите пароль» с полем для ввода пароля пользователя;
3) кнопка «Войти»;
4) кнопка «Регистрация»;
Главное окно приложения должно выполнять следующие задачи:
1) содержать таблицу для просмотра данных в ней – таблица должна
быть размещена по всему окну с небольшим пустым местом вверху
и справа;
2) содержать кнопки действия формы – кнопки «Обновить»,
«Редактировать», «Сохранить», которые должны находиться в левом
верхнем углу после нажатия на кнопку «Действия»;
3) содержать поле с таблицей – номер, состояние, информация о
машине/запчасти, количество;
4) Кнопка «Выход» с выпадающим меню выхода в окно авторизации
или выхода из программы;
5) Кнопка «Об Программе».
Окно редактирования должно выполнять следующие задачи:
1) содержать таблицу для просмотра данных в ней – таблица должна
быть размещена по всему окну с небольшим пустым местом вверху
и справа;
14
2) содержать кнопки действия формы – кнопки «Загрузить»,
«Выгрузить», «Изменить», «Удалить», «Просмотр данных» которые
должны находиться в левом верхнем углу после нажатия на кнопку
«Действия»;
3) содержать поле с таблицей – номер, состояние, информация о
машине/запчасти, количество;
4) Кнопка «Выход» с выпадающим меню выхода в окно авторизации
или выхода из программы;
5) Кнопка «Об Программе».
6) В правом верхнем углу поле «настройки» с надписями «Добавить
данные» и «выбрать данные», а так же с полем введением
необходимого количества.

2.3 Требования к аппаратным, программным и


коммуникационным интерфейсам

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


вычислительную систему следующей минимальной аппаратной
конфигурации:
1) процессор: 1.6 ГГц;
2) оперативная память: 1 Гб;
3) свободное место на жёстком диске: 300 Мб;
4) наличие основных средств ввода-вывода (мышь, клавиатура,
монитор);
5) операционная система: Windows XP, 7, 8, 8.1, 10.

Необходимо обеспечить программное взаимодействие системы с:


1) системой управления базами данных phpMyAdmin;
2) программой open server;
15

2.4 Требования к пользователям продукта

1) Владение компьютером на уровне пользователя;


2) Понимание принципов работы с манипуляторами;
3) Понимание принципов учета товаров;
4) Понимание принципов работы базы данных.

2.5 Требования к адаптации на месте

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


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

2.6 Функции продукта

Приложение должно уметь работать с таблицами базы данных с


информацией о автомобилях, запчастях, наличии, статуса, номер.
В программе должна присутствовать возможность оформления учёта
количества и статуса автомобилей и запчастей, а также возможность
просмотра результата запросов.
Должна быть реализована функция множественного пользователя, то
есть с приложением могут работать несколько видов пользователей. От вида
пользователя, который авторизовался в приложение, у него должны быть
разные функциональные возможности. В частности в приложении должны
существовать 3 вида пользователей, такие как администратор, эдитор и
сотрудник автомагазина.
16
Администратор получает права на редактирования таблиц в базе
данных, а также контроль пользовательскими учётными аккаунтами и
удалением всех данных:
1) редактирование данных в таблицах (добавление, удаление,
изменение): «Состояние», «Информация о машине/запчасти»,
«Количество»;
2) редактирование данных о пользователях, изменения логина и
пароля, изменение прав на пользование приложением;
3) Удаление всей информации;
Эдитор может делать всё тоже самое, кроме удаления всей информации
и изменение пользователей.
Оператор должен иметь возможность оформлять заказы от клиентов.

2.7 Ограничения

1) продукт будет работать только в операционной системе Windows 7,


8, 8.1, 10;
2) продукт будет поддерживать только русский язык пользовательского
интерфейса;
3) продукт будет работать только с локальным сервером;
4) Продукт не будет работать, если изменить структуру таблиц в базе
данных (например, удалить, или добавить атрибут в таблицу).
17
3 ОБОСНОВАНИЕ ВЫБОРА ИНСТРУМЕНТАЛЬНЫХ СРЕДСТВ

Для разработки приложения была выбрана технологи Microsoft .NET


Framework 4.7, обладающий огромным функционалом для графического
представления данных и построения окон.
Для создания GUI (графического интерфейса пользователя) был выбран
интерфейс программирования приложений Windows Forms, являющийся
частью Microsoft .NET Framework. Данный интерфейс упрощает доступ к
элементам интерфейса Microsoft Windows за счет создания обёртки для
существующего Win32 API в управляемом коде[6].
В качестве среды разработки была выбрана Microsoft Visual Studio 2017
и язык C#, который является языком разработки приложений для
платформы Microsoft .NET Framework[4].
Для написания кода была выбрана парадигма «ООП» (объектно-
ориентированное программирование), так как C# – это объектно-
ориентированный язык и каждое окно формы является экземпляром класса.
У «шарпа» выделяют много преимуществ:
1. Поддержка подавляющего большинства продуктов Microsoft
2. Бесплатность ряда инструментов для небольших компаний и
некоторых индивидуальных разработчиков — Visual Studio, облако Azure,
Windows Server, Parallels Desktop для Mac Pro и др.
3. Типы данных имеют фиксированный размер (32-битный int и 64-
битный long), что повышает «мобильность» языка и упрощает
программирование, так как вы всегда знаете точно, с чем вы имеете дело.
4. Автоматическая «сборка мусора» Это значит, что нам в большинстве
случаев не придётся заботиться об освобождении памяти. Вышеупомянутая
общеязыковая среда CLR сама вызовет сборщик мусора и очистит память.
18
5. Большое количество «синтаксического «сахара» — специальных
конструкций, разработанных для понимания и написания кода. Они не имеют
значения при компиляции.
6. Низкий порог вхождения. Синтаксис C# имеет много схожего с
другими языками программирования, благодаря чему облегчается переход
для программистов. Язык C# часто признают наиболее понятным и
подходящим для новичков.
MS SQL Server – это платформа для решения критически важных задач
в масштабе предприятия, обладающая высокой доступностью, повышенной
производительностью и безопасностью. Решение представляет собой хорошо
масштабируемый, полностью реляционный, быстродействующий сервер,
способный обрабатывать большие объемы данных для клиент-серверных
приложений. Рекордная производительность MS SQL Server обеспечивается
новыми технологиями работы с памятью, что помогает предприятиям
ускорить свой бизнес и реализовать новые сценарии работы. Кроме того, SQL
Server позволяет использовать новые гибридные облачные решения и
пользоваться новыми преимуществами облачных вычислений. Расширенные
функции безопасности, в сочетании со встроенными, удобными для
использования инструментами и управляемым доступом к данным,
позволяют организации выполнить требования строгих политик соответствия
нормам.
Open Server Panel — это портативная серверная платформа и
программная среда, созданная специально для веб-разработчиков с учётом их
рекомендаций и пожеланий.
Программный комплекс имеет богатый набор серверного
программного обеспечения, удобный, многофункциональный продуманный
интерфейс, обладает мощными возможностями по администрированию и
настройке компонентов. Платформа широко используется с целью
19
разработки, отладки и тестирования веб-проектов, а так же для
предоставления веб-сервисов в локальных сетях.
Хотя изначально программные продукты, входящие в состав
комплекса, не разрабатывались специально для работы друг с другом, такая
связка стала весьма популярной среди пользователей Windows, в первую
очередь из-за того, что они получали бесплатный комплекс программ с
надежностью на уровне Linux серверов.
Удобство и простота управления безусловно не оставят вас
равнодушными, за время своего существования Open Server зарекомендовал
себя как первоклассный и надёжный инструмент необходимый каждому веб-
мастеру.
Основные компоненты:
1. Apache 2.2.31 / 2.4.38 / 2.4.41 / 2.4.43
2. Bind 9.16.1
3. ConEmu 19.10.12
4. FTP FileZilla 0.9.60
5. Ghostscript 9.52
6. HeidiSQL 11.0.0.5944
7. Nginx 1.17.10
8. NNCron Lite 1.17
9. Opera 67.0.3575.137
10.Sendmail 32
11.Sublime 3.2.2.3211
12.Wget 1.20.3
Системы управления базами данных:
1. MariaDB 5.5.67 / 10.1.44 / 10.2.31 / 10.3.22 / 10.3.22 / 10.4.12
2. Memcached 1.2.6 / 1.4.5 / 1.5.10
3. MongoDB 2.4.14 / 2.6.12 / 3.0.15 / 3.2.22 / 3.4.24 / 3.6.17 / 4.0.17 / 4.2.5
4. MySQL 5.1.73 / 5.5.62 / 5.6.47 / 5.7.29 / 8.0.19
20
5. PostgreSQL 9.2.24 / 9.3.25 / 9.4.26 / 9.5.21 / 9.6.17 / 10.12 / 11.7 / 12.2
6. Redis 2.8.2402 / 3.0.504 / 3.2.100 / 4.0.14.2 / 5.0.6-dev
Open Server обладает рядом возможностей:
1) не требует установки на компьютер — его можно запустить с флешки
или внешнего жёсткого диска;
2) быстро запускается и останавливается;
3) сервер автоматически начинает работу при запуске программы;
4) можно выбрать режим управления доменами;
5) возможна работа через командную строку;
6) можно переключать модули HTTP, MySQL, PHP;
7) достаточно одного клика для доступа к доменам;
8) интерфейс поддерживает несколько языков.
Преимущества:
К несомненным плюсам программы можно отнести удобный ГПИ
(графический интерфейс пользователя), возможность просмотра логов, а
также разнообразие функций для администрирования и управления
компонентами. Для новичков составлена подробная и понятная инструкция,
как установить локальный сервер и работать с ним. Кроме того, создатели
Open Server следят за актуальными изменениями в мире веб-разработки и
периодически дополняют комплектацию.
Недостатки:
Приходится самостоятельно проверять наличие новой версии Open
Server и переносить на неё проекты, поскольку автообновление не
поддерживается.
phpMyAdmin - это программа написанная на PHP и предназначенная
для управления сервером MySQL через всемирную сеть. phpMyAdmin
поддерживает широкий набор операций над MySQL. Наиболее часто
используемые операции поддерживаются с помощью пользовательского
интерфейса (управление базами данных, таблицами, полями, связями,
21
индексами, пользователями, правами, и т. д.), одновременно вы можете
напрямую выполнить любой SQL запрос.
Возможности phpMyAdmin
1. интуитивно понятный веб-интерфейс
2. поддержка большинства функций MySQL:
- просмотр и удаление баз данных, таблиц, вьюшек, полей и индексов
- создание, копирование, удаление, переименование и изменение баз
данных, таблиц, полей и индексов
- управление сервером, базами данных и таблицами, с советами по
настройке сервера
- выполнение, редакция и сохранение любого SQL-выражения, включая
пакетные запросы
- управление пользователями MySQL и их привилегиями
- работа с хранимыми процедурами и триггерами
3. поддержка импорта данных из CSV и SQL
4. поддержка экспорта в различные форматы CSV, SQL, XML, PDF,
ISO/IEC 26300 - OpenDocument текст и таблицы, Word, Excel, LATEX и
другие
5. администрирование нескольких серверов
6. генерирование наглядных схем баз данных в виде PDF
7. создание комплексных запросов с помощью функции Запрос по
шаблону
8. глобальный или частичный поиск в базе данных
9. трансформация данных в любой формат, используя набор
предназначенных функций вроде отображения BLOB-данных в виде
картинки или ссылки для скачивания
Преимущества phpMyAdmin
1. Поскольку это веб-инструмент, к нему можно получить доступ из
любой компьютерной системы.
22
2. Это интуитивно понятный веб-интерфейс, который работает на любом
сервере.
3. Это преимущество перед консолью, поскольку многие задачи, такие
как вырезание, копирование и выполнение запросов, становятся очень
легкими благодаря графическому интерфейсу пользователя.
4. Это обеспечивает автоматическое средство резервного копирования
MySQL.
5. Он не требует подключения к сети, поскольку он установлен на
компьютере, на котором уже установлен сервер MySQL.
6. Это обеспечивает максимальный уровень безопасности и
эффективности данных для своего клиента.
7. Поддерживается многоязычным сообществом.
23
4 РАЗРАБОТКА БАЗЫ ДАННЫХ АВТОМАГАЗИНА

4.1 Разработка базы данных приложения

4.1.1 Концептуальное проектирование базы данных.

Концептуальное проектирование – построение семантической модели


предметной области (информационной модели самого высокого уровня
абстракции). Концептуальная модель базы данных включает в себя:
В ходе изучения предметной области выделены следующие сущности,
представляющие информационное значение для задачи:
1) Накладные;
2) Заказчики;
3) Продажи;
4) Склад;
5) Поставщики;
6) users;
Концептуальное представление базы данных приведено на рисунке 4.1.

Рисунок 4.1 – Концептуальная модель базы данных


24

4.1.2 Логическое проектирование базы данных.

Логическое проектирование – создание схемы базы данных на основе


конкретной модели данных, например, реляционной модели данных.
В логической модели данных сущности получают атрибуты, которые
характеризуют определённый экземпляр объекта. Все из этих атрибутов
обязательны к заполнению. Некоторые атрибуты являются связывающими с
другой сущностью, они называются также как и таблица, с которой они
связывают.
Логическое представление базы данных приведено на рисунке 4.2.

Рисунок 4.2 – Логическая модель базы данных


25
4.1.3 Физическое проектирование базы данных

Физическое проектирование – создание схемы базы данных для


конкретной СУБД. Данное физическое представление базы данных для
службы доставок разрабатывалось в MySqlWorkbench.
Физическое представление содержит первичные ключи, внешние
ключи и ограничения.
Физическая модель базы данных изображена на рисунке 4.3.

Рисунок 4.3 – Физическое представление модели базы данных

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


атрибутов изображено на рисунках 4.4, 4.5, 4.6, 4.7, 4.8, 4.9.
26

Рисунок 4.4 – Физическое представление таблицы «Поставщики»

Рисунок 4.5 – Физическое представление таблицы «Накладные»

Рисунок 4.6 – Физическое представление таблицы «Заказчики»


27

Рисунок 4.7 – Физическое представление таблицы «Продажи»

Таблица «Склад» содержит основную информацию о товарах.

Рисунок 4.8 – Физическое представление таблицы «Склад»

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


регулировать доступ к формам.

Рисунок 4.9 – Физическое представление таблицы «users»


28
4.1 Проектирование структуры приложения

На рисунке 4.1 представлена общая структура проекта.

Рисунок 4.1 – общая структура проекта «Автомагазин»

Логика приложения (классы и соответствующие файлы) приведена в


таблице 4.1.
29
Таблица 4.1 – Классы

Program.cs Данный класс содержит метод Main()


User.cs Данный класс позволяет следить за тем, кто
зашёл в систему и под каким именем
RowOfData.cs Данный класс описывает строку данных и
задает нужные параметры для полей
DatabaseManager.cs Данный класс обеспечивает соединение с базой
данных с методами которые открывают и
закрывают соединение.

Интерфейс на платформе Windows Forms реализуется с помощью


форм, каждый файл описания интерфейса сопровождается файлом
связанного кода, в таблице 4.2 представлены файлы отвечающие за
интерфейс и логику форм[5].

Таблица 4.2 – Файлы, отвечающие за графический интерфейс


Authorization.Designer.cs Корневая форма приложения, является формой
авторизации пользователей.
Authorization.cs Связанный с Form1.Designer.cs файл кода,
который реализует логику на форме.
DataUploadForm.Designer.cs Главная форма приложения, на которой
происходит просмотр данных системы.
DataUploadForm.cs Связанный с MainForm.Designer.cs файл кода,
который реализует логику на форме.
DataForm.Designer.cs Форма приложения, на которой производятсяя
основные действия: удаление, редактирования,
добавления

Окончание таблицы 4.2


DataForm.cs Связанный с MainForm.Designer.cs файл кода,
который реализует логику на форме.
30
Registration.Designer.cs Форма регистрации в приложении.
Registration.cs Связанный с RegistrationForm.Designer.cs файл
кода, который реализует логику на форме.

4.2 Описание методов приложения

Таблица 4.3 – Методы, используемые в форме Registration, DataForm и


DataUploadForm
public Registration() Метод, благодаря
которому происходит
начальная иницилизация
данных
private void KeyGeneration() Метод, который реализует
псевдослучайную
генерацию
private void AddDataGrid(RowOfData row) Метод, реализующий
добавление данных в grid
private void HeaderOfTheTable() Метод, создающий
колонки в таблице на
форме
private void Add_Click(object sender, EventArgs e) Обработчик нажатия,
реализующий добавление
данных

Окончание таблицы 4.3


private void Choose_Click(object sender, Обработчик нажатия, с
EventArgs e)
помощью которого
реализуется выбор ячейки
на форме
private void Загружает данные на
31
ОбновитьДанныеToolStripMenuItem_Click(objec форму
t sender, EventArgs e)
private void Метод, который реализует
РедактироватьДанныеToolStripMenuItem_Click(
редактирование ячеек
object sender, EventArgs e)
private void Метод, который реализует
ПерейтиКПросмотруToolStripMenuItem_Click(o
переход с одной формы, на
bject sender, EventArgs e)
другую

4.3 Описание SQL-запросов к базе данных системы

Приложение помимо основных функций обработки данных также


предоставляет возможность выполнение SQL-запросов.
Запросы к базе данных, которые выполняются в приложении:
1) запрос который выбирает все записи из таблицы user где логин
равен введенному логину и пароль введенному паролю в форме
Registration.
"SELECT * FROM users WHERE login = @UserLogin AND password =
@UserPassword"
2) запрос на добавление данных пользователя в таблицу users:
"INSERT INTO users (login,password,name, surname)" +
"VALUES(@login,@password,@name,@surname)"
3) запрос который выбирает все записи из таблицы user где логин
равен введенному логину и пароль введенному паролю в форме
Authorization:
"SELECT * FROM users WHERE login = @UserLogin AND password =
@UserPassword"
4) запрос который выводит информацию из базы данных в форму
DataUploadForm:
"SELECT * FROM projects"
5) запрос который выводит информацию из базы данных в форму
DataForm:
32
"SELECT * FROM projects"
6) запрос на добавление данных в таблицу из формы DataForm с
помощью кнопки «Выгрузить»;
"INSERT INTO projects (specification, information,
time_constraints)"+
"VALUES(@specification,@information,@time_constraints)";
7) запрос на изменение данных из формы DataForm:
"UPDATE projects SET id = '" + id + "', " + "specification =
'" + specification + "', " + "information = '" + information
+ "', " + "time_constraints = '" + time_constraints + "' " +
"WHERE projects. Id = " + id;
8) Запрос на удаление выбранного элемента:
"DELETE FROM projects WHERE projects. id = "
9) Запрос на удаление всех данных таблицы:
"TRUNCATE TABLE projects";
33
5 ТЕСТИРОВАНИЕ ПРОГРАММНОГО ПРОДУКТА

5.1 Аппаратные и программные средства создания и эксплуатации


приложения

Для работы приложения требуется следующеее аппаратное


обеспечение:
1) процессор с тактовой частотой 1.6 ГГц;
2) оперативная память 1 Гб и более;
3) монитор 800х600 или с более высоким разрешением.
Программные требования к приложению.
На компьютере должны быть установлено следующее программное
обеспечение:
1) операционная система —Windows XP или Windows 7/8/8.1/10;
2) Microsoft SQL Server 2014/2017;
3) Open server;
4) Connector.

5.2 Руководство пользователя

Для работы приложения необходимо:


Установить на компьютере open server.
Установить connector для соединения приложения с базой данных
Создать на жёстком диске папку с любым именем и скопировать в неё
все файлы приложения.
Скопировать в папку базу данных, где находится базы данных, затем
подключить эту базу данных через phpMyAdmin.
34
После всего этого, необходимо перейти в папку с ране скопированными
файлами приложения и запустить приложение через исполняющий файл
shop.exe.

5.3 Описание контрольных примеров

Пользователь запускает open server чтобы включить локальный сервер.


(рисунок А.1), после чего в трее появляется красный флажок,
символизирующий то, что open server включился. Далее необходимо нажать
правой кнопкой мыши по красному флажку и нажать кнопку «Запустить»,
флажок заменится оранжевым цветом и после этого станет зеленым.
Затем необходимо нажать на флажок правой кнопкой мыши, выбрать вкладку
«дополнительно» и нажать на «phpMyAdmin». Откроется браузер, который
стоит по умолчанию, и будет окно авторизации на локальном сервере
(рисунок А.2). Необходимо ввести в логин – root и в пароль – root. После чего
откроется основное окно для манипуляции над таблицами.

Впоследствии запуска локального сервера можно запустить программу.


После запуска откроется форма регистрации (рисунок А.3), затем, когда все
данные были введены, необходимо выполнить дополнительную проверку,
если все поля были заполнены, а проверка выполнена, пользователь успешно
зарегистрируется и попадёт на форму просмотра данных, на которую
прогружаются все необходимые данные и устанавливаются права
пользователя (рисунок А.5).
Если пользователь уже существует, то система скажет, что пользователь с
такими данными уже зарегистрирован в системе.
Если пользователь зарегистрирован и хочет войти под своими данными, то он
нажимает кнопку «войти» из формы регистрация и вводит свои данные
35
(рисунок А.4). В случае проблем с базой данных, приложение и другим
проблем выведется сообщение с ошибкой базы данных.
После того как пользователь ввёл необходимые данные и попадает на
главную форму, он видит следующее (рисунок А.5). На этой форме
предоставляется возможность анализировать доступные данные о товарах:
автомобилях и запчастях, а также их количество, статус и наименование.

Если сотрудник обладает правами эдитора или администратора, то он может


перейти в форму редактирования данных, для этого необходимо слева вверху
нажать на кнопку «действия» и нажать по соответствующей кнопке для
перехода в нужную форму.
Программа спросит, действительно ли вы желаете перейти, если это так,
нужно нажать «да» и откроется форма редактирования. В случае если
пользователь не обладает достаточными правами, программа не впустит
пользователя на эту форму
После перехода в форму редактирования, пользователь видит таблицу
данных, если данные имеются, вспомогательные кнопки и настройки для
добавления данных (рисунок А.6).
Для добавления данных необходимо в поле «Настройки» ввести желаемое
количество ячеек и заполнить их (рисунок А.7).
Для добавления созданной информации в базу данных необходимо слева
вверху нажать «Действия» и выбрать «Выгрузить данные» как показано на
рисунке А.8. Необходимо заполнить все созданные поля, при незаполненных
полях система выдаст сообщение что не все поля заполнены. В случае всех
заполненных полей программа выведет что данные добавлены в базу данных,
и после чего их можно будет увидеть на локальном сервере в таблицах
36
Если необходимо удалить какую-либо информацию необходимо в таблицу
загрузить данные из сервера. Для этого нужно нажать в правом верхнем углу
кнопку «действия», затем «загрузить».
Когда данные загружены в форму есть несколько способов удаления данных:
1) Выделить с помощью мыши необходимую одну, или несколько ячеек,
после чего в «действиях» нажать «удалить выбранный элемент»
(рисунок А.9).
2) Поле «Настройки» позволяет выбрать необходимую ячейку по ее
номеру, для этого необходимо ввести номер строки и нажать «выбрать»
3) Имея права администратора можно удалить все данные из таблицы, для
выполнения этого действия необходимо нажать в правом верхнем углу
кнопку «действия», затем навестись на «удалить» и выбрать «удалить
все данные». Программа спросит: «точно ли вы хотите удалить все
данные?» нужно нажать «да».

Если необходимо изменить информацию, не удаляя, то для этого нужно


загрузить данные в форму, затем произвести изменения на необходимых
строках данных и потом нажать кнопку «действия», «изменить» и
программа занесет измененные данные на сервер.
37
ЗАКЛЮЧЕНИЕ

В результате решения задачи спроектирована база данных и


информационная система, автоматизирующая процесс оформления учёта
после продаж и покупки машин и запчастей в автомагазине.
Приложение позволяет хранить, обрабатывать данные о машинах,
запчастях и их количестве. Также приложение позволяет разграничить доступ
к функционалу приложения не несколько видов пользователей, в частности
на администратора, эдитора и оператора.
Эта система избавит от внушительных объёмов ежедневной рутины.
Установка системы для учёта машин и запчастей в автомагазине возможна
при наличии самого минимального набора оборудования.
Переход от бумажного ведения учета автостоянки к электронному,
дало возможность предприятию синхронизировать с локальным сервером и
получать свежие данные для дальнейшего анализа, а также предсказания
расходов и доходов компании. Программа позволяет улучшить качество
обслуживания, ведение документации, и получать большую прибыль.
Для управления базой данных был выбран phpMyAdmin, для связи с
сервером использовался драйвер open server.
Разработка графической части приложения производилась в Windows
Form, а для бизнес-логики был выбран язык C#.
Приложение может использоваться сотрудниками автомагазина для
ведения учёта и для простого и быстрого функционирования автомагазина.
38
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

1. Руководство по языку C#.


URL: https://metanit.com/sharp/tutorial/ (дата обращения: 10.11.2020)
2. Введение в MVP: паттерн для построения Windows Forms
приложений.
URL: https://stfalcon.com/ru/blog/post/why-your-startup-needs-mvp (дата
обращения: 15.11.2020)
4. Документация по phpMyAdmin.
URL: https://php-myadmin.ru/doc/ (дата обращения 16.11.2020)
5. Руководство по написанию Windows Forms приложений.
URL: https://metanit.com/sharp/windowsforms/1.1.php (дата обращения
17.11.2020)
6. Нагел К. C# 4.0 и платформа .NET 4 для профессионалов / К. Нагел,
Б. Ивьен, Д. Глинн, К. Уотсон, М. Скиннер. – М.: Вильямс, 2011. – 1440 с
7. Бондарь Александр. Microsoft SQL Server 2012 / А. Бондарь. – СПБ:
БХВ-Петербург, 2012. – 608 c.
39
ПРИЛОЖЕНИЕ А
Экранные формы

Рисунок А.1 – файл запуска локального сервера

Рисунок А.2 – файл запуска локального сервера


40

Рисунок А.3 – Окно регистрации пользователя

Рисунок А.4 – Окно авторизации пользователя


41

Рисунок А.5 – Пользовательское окно

Рисунок А.6 – Окно основных действий пользователя


42

Рисунок А.7 – демонстрация заполнения данных в таблицу

Рисунок А.8 – выгрузка данных на сервер


43

Рисунок А.9 – удаление выбранного элемента


44
ПРИЛОЖЕНИЕ Б
Фрагменты листинга

Листинг Б1 – форма «DataUploadForm.cs»

public partial class DataUploadForm : Form


{
private User user;
public DataUploadForm()
{
InitializeComponent();
}

//формирование шапки таблицы


private void HeaderOfTheTable()
{
var column1 = new DataGridViewColumn();
column1.HeaderText = "Номер";
column1.Width = 58;
column1.Name = "id";
column1.Frozen = true;
column1.CellTemplate = new DataGridViewTextBoxCell();

var column2 = new DataGridViewColumn();


column2.HeaderText = "Состояние";
column2.Width = 120;
column2.Name = "specification";
column2.CellTemplate = new DataGridViewTextBoxCell();

var column3 = new DataGridViewColumn();


column3.HeaderText = "Информация о Машине/Запчастях";
column3.Width = 318;
column3.Name = "inforamtion";
column3.CellTemplate = new DataGridViewTextBoxCell();

var column4 = new DataGridViewColumn();


column4.HeaderText = "Количество";
column4.Width = 120;
column4.Name = "time_constraints";
column4.CellTemplate = new DataGridViewTextBoxCell();

dataGrid.Columns.Add(column1);
dataGrid.Columns.Add(column2);
dataGrid.Columns.Add(column3);
dataGrid.Columns.Add(column4);

dataGrid.AllowUserToAddRows = false;
dataGrid.ReadOnly = true;
}

//добавление данных в таблицу


private void AddDataGrid(RowOfData row)
{
dataGrid.Rows.Add(row.id, row.specification, row.information,
row.time_constraints); //добавляе строку в таблицу
}
45
private void ОбПрограммеToolStripMenuItem_Click(object sender, EventArgs e)
{
MessageBox.Show("Данная программа показывает учет продажи авто");
}

private void ВыходИзПрограммыToolStripMenuItem1_Click(object sender, EventArgs


e)
{
Application.Exit();
}

private void ВыходИзПрограммыToolStripMenuItem_Click(object sender, EventArgs e)


{
Authorization form = new Authorization();
this.Hide();
form.Show();
}

private void ОбновитьДанныеToolStripMenuItem_Click(object sender, EventArgs e)


{
List<RowOfData> _data = new List<RowOfData>(); //создаем список данных

//открываем базу данных и считываем с нее данные


DatabaseManager _manager = new DatabaseManager();
MySqlCommand _command = new MySqlCommand("SELECT * FROM projects",
_manager.GetConnection);
MySqlDataReader _reader;

_manager.OpenConnection();
_reader = _command.ExecuteReader();

//удаляем все текущие строки, чтобы обновить данные


dataGrid.DataSource = null;
dataGrid.Rows.Clear();

try
{
while (_reader.Read())
{
//заполняем данные
RowOfData row = new RowOfData(_reader["id"],
_reader["specification"], _reader["information"], _reader["time_constraints"]);
_data.Add(row);
}

//добавляем в таблицу данные


for (int i = 0; i < _data.Count; i++)
AddDataGrid(_data[i]);

MessageBox.Show("Данные обновлены!", "Внимание!");

}
catch
{
MessageBox.Show("Ошибка работы с базой данных!", "Ошибка");
}
finally
{
_manager.CloseConnection();
}
}
46
private void РедактироватьДанныеToolStripMenuItem_Click_1(object sender,
EventArgs e)
{
if (user.userName == "admin" || user.userName == "editor")
{
if (MessageBox.Show("Перейти в окно редактирования данных?",
"Внимание!", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
DataForm form = new DataForm();
this.Hide();
form.Show();
}
}
else
MessageBox.Show("У вас нет доступа, чтобы совершить это действие!",
"Ошибка!");
}

private void ВыходИзПрограммыToolStripMenuItem_Click_1(object sender, EventArgs


e)
{
Authorization form = new Authorization();
this.Hide();
form.Show();
}

private void ВыходИзПрограммыToolStripMenuItem1_Click_1(object sender, EventArgs


e)
{
Application.Exit();
}

private void DataUploadForm_Shown(object sender, EventArgs e)


{
//создаем объект класса пользователь
user = new User();

HeaderOfTheTable(); //создаем шапку таблицы


List<RowOfData> _data = new List<RowOfData>(); //создаем список данных

//открываем базу данных и считываем с нее данные


DatabaseManager _manager = new DatabaseManager();
MySqlCommand _command = new MySqlCommand("SELECT * FROM projects",
_manager.GetConnection);
MySqlDataReader _reader;

try
{
_manager.OpenConnection();
_reader = _command.ExecuteReader();

while (_reader.Read())
{
//заполняем данные
RowOfData row = new RowOfData(_reader["id"],
_reader["specification"], _reader["information"], _reader["time_constraints"]);
_data.Add(row);
}

//добавляем в таблицу данные


47
for (int i = 0; i < _data.Count; i++)
AddDataGrid(_data[i]);
}
catch
{
MessageBox.Show("Ошибка работы с бащой данных!", "Ошибка!");
}
finally
{
_manager.CloseConnection();
}
}
}

Листинг Б2 – Файл «DataForm.cs»

public partial class DataForm : Form


{
private List<RowOfData> _data = new List<RowOfData>(); //создаем список данных
private User user;
public DataForm()
{
InitializeComponent();
}

private void HeaderOfTheTable()


{
var column1 = new DataGridViewColumn();
column1.HeaderText = "Номер";
column1.Width = 58;
column1.Name = "id";
column1.Frozen = true;
column1.CellTemplate = new DataGridViewTextBoxCell();

var column2 = new DataGridViewColumn();


column2.HeaderText = "Состояние";
column2.Width = 120;
column2.Name = "specification";
column2.CellTemplate = new DataGridViewTextBoxCell();

var column3 = new DataGridViewColumn();


column3.HeaderText = "Информация о Машине/Запчастях";
column3.Width = 318;
column3.Name = "inforamtion";
column3.CellTemplate = new DataGridViewTextBoxCell();

var column4 = new DataGridViewColumn();


column4.HeaderText = "Количество";
column4.Width = 120;
column4.Name = "time_constraints";
column4.CellTemplate = new DataGridViewTextBoxCell();

dataGrid.Columns.Add(column1);
dataGrid.Columns.Add(column2);
dataGrid.Columns.Add(column3);
dataGrid.Columns.Add(column4);

dataGrid.AllowUserToAddRows = false;
dataGrid.ReadOnly = false;
}
48
private void AddDataGrid(RowOfData row)
{
dataGrid.Rows.Add(row.id, row.specification, row.information,
row.time_constraints);
}
private void DataForm_Shown(object sender, EventArgs e)
{
HeaderOfTheTable(); //создаем шапку
dataGrid.Columns[0].ReadOnly = true; //запрещаем менять id
user = new User(); //создаем объект класса пользователь, так как в нем есть
статичная переменная, она будет одинакова для всех
}

private void ОбПрограммеToolStripMenuItem_Click(object sender, EventArgs e)


{
MessageBox.Show("Данная программа показывает учет продажи авто");
}

private void ВыходИзПрограммыToolStripMenuItem1_Click(object sender, EventArgs


e)
{
Application.Exit();
}

private void ВыходИзПрограммыToolStripMenuItem_Click(object sender, EventArgs e)


{
Authorization form = new Authorization();
this.Hide();
form.Show();
}

private void Add_Click(object sender, EventArgs e)


{
//удаляем все текущие строки
dataGrid.DataSource = null;
dataGrid.Rows.Clear();

dataGrid.RowCount =
Convert.ToInt32(numericUpDown_ForAddData.Value); //считываем количество строк
dataGrid.ReadOnly = false; //разрешаем менять данные

for(int i = 0; i < dataGrid.Rows.Count; i++)


dataGrid.Rows[i].Cells[0].ReadOnly = true; //запрещаем менять id
}

private void Choose_Click(object sender, EventArgs e)


{
//удаляем все текущие строки
dataGrid.DataSource = null;
dataGrid.Rows.Clear();

_data.Clear();

//открываем базу данных


DatabaseManager _manager = new DatabaseManager();
MySqlCommand _command = new MySqlCommand("SELECT * FROM projects",
_manager.GetConnection);
MySqlDataReader _reader;

try
{
49
_manager.OpenConnection();
_reader = _command.ExecuteReader();

while (_reader.Read())
{
//заполняем данные
RowOfData row = new RowOfData(_reader["id"],
_reader["specification"], _reader["information"], _reader["time_constraints"]);
_data.Add(row);
}

//добавляем в таблицу данные


int i = Convert.ToInt32(numericUpDown_forSelected.Value) - 1;

if (i >= 0 && i < _data.Count)


{
AddDataGrid(_data[i]);
}
else
MessageBox.Show("Выбран не правильный элемент!", "Ошибка!");

}
catch
{
MessageBox.Show("Ошибка работы с базой данных!", "Ошибка!");
}
finally
{
_manager.CloseConnection();
}
}

private void ОбновитьДанныеToolStripMenuItem_Click(object sender, EventArgs e)


{
_data.Clear();

DatabaseManager _manager = new DatabaseManager();


MySqlCommand _command = new MySqlCommand("SELECT * FROM projects",
_manager.GetConnection);
MySqlDataReader _reader;

dataGrid.DataSource = null;
dataGrid.Rows.Clear();

try
{
_manager.OpenConnection();
_reader = _command.ExecuteReader();

while(_reader.Read())
{
RowOfData row = new RowOfData(_reader["id"],
_reader["specification"], _reader["information"], _reader["time_constraints"]);
_data.Add(row);
}

for(int i = 0; i < _data.Count; i++)


{
AddDataGrid(_data[i]);
dataGrid.Rows[i].Cells[0].ReadOnly = true;
}
50
}
catch
{
MessageBox.Show("Ошибка работы с базой данных!", "Ошибка!");
}
finally
{
_manager.CloseConnection();
}
}

private void РедактироватьДанныеToolStripMenuItem_Click(object sender, EventArgs


e)
{
if(MessageBox.Show("Добавить эти данные в базу данных?", "Внимание!",
MessageBoxButtons.YesNo) == DialogResult.Yes)
{
DatabaseManager _manager = new DatabaseManager();

try
{
bool add = true;

_manager.OpenConnection(); //открываем соединения

//проходим по всем строкам


for (int i = 0; i < dataGrid.Rows.Count; i++)
{
if (Convert.ToString(this.dataGrid.Rows[i].Cells[1].Value) != ""
&&
Convert.ToString(this.dataGrid.Rows[i].Cells[2].Value) != ""
&&
Convert.ToString(this.dataGrid.Rows[i].Cells[3].Value) !=
"")
{
DatabaseManager _databaseManager = new DatabaseManager();
_databaseManager.OpenConnection();
string _commandString = "INSERT INTO projects
(specification, information, time_constraints)" +
"VALUES(@specification,@information,@time_constraints)";
MySqlCommand _command = new MySqlCommand(_commandString,
_manager.GetConnection);//формируем запрос

_command.Parameters.Add("@specification",
MySqlDbType.VarChar).Value = this.dataGrid.Rows[i].Cells[1].Value;
_command.Parameters.Add("@information",
MySqlDbType.VarChar).Value = this.dataGrid.Rows[i].Cells[2].Value;
_command.Parameters.Add("@time_constraints",
MySqlDbType.VarChar).Value = this.dataGrid.Rows[i].Cells[3].Value;

//Здесь наш запрос будет выполнен и данные сохранены в базе


данных
if (_command.ExecuteNonQuery() != 1)//если хотя бы один не
добавился, сообщим об этом
add = false;
}
else
MessageBox.Show("Не все поля заполнены!", "Внимание!");
}
if (add)
MessageBox.Show("Данные добавлены!", "Внимание!");
51
else
MessageBox.Show("Ошибка добавления данных!", "Ошибка!");
}
catch
{
MessageBox.Show("Ошибка работы с базой данных!", "Ошибка!");
}
finally
{
_manager.CloseConnection();
}
}
}

private void ИзменитьToolStripMenuItem_Click(object sender, EventArgs e)


{
if (user.userName == "admin" || user.userName == "editor")
{
if (MessageBox.Show("Точно изменить эти данные?", "Внимание!",
MessageBoxButtons.YesNo) == DialogResult.Yes)
{
if (dataGrid.SelectedRows.Count == 0)
{
if (Convert.ToString(this.dataGrid.Rows[0].Cells[1].Value) != ""
&&
Convert.ToString(this.dataGrid.Rows[0].Cells[2].Value) != ""
&&
Convert.ToString(this.dataGrid.Rows[0].Cells[3].Value) !=
"")
{
string id =
Convert.ToString(this.dataGrid.Rows[0].Cells[0].Value);
string specification =
Convert.ToString(this.dataGrid.Rows[0].Cells[1].Value);
string information =
Convert.ToString(this.dataGrid.Rows[0].Cells[2].Value);
string time_constraints =
Convert.ToString(this.dataGrid.Rows[0].Cells[3].Value);

DatabaseManager _manager = new DatabaseManager();


string _commandString = "UPDATE projects SET id = '" + id +
"', " +
"specification = '" + specification + "', " +
"information = '" + information + "', " +
"time_constraints = '" + time_constraints + "' " +
"WHERE projects. id = " + id;
MySqlCommand _command = new MySqlCommand(_commandString,
_manager.GetConnection);

try
{
_manager.OpenConnection();
_command.ExecuteNonQuery();
MessageBox.Show("Данные изменены!", "Внимание!");
}
catch
{
MessageBox.Show("Ошибка работы с базой данных!",
"Ошибка");
}
finally
52
{
_manager.CloseConnection();
}
}
else
MessageBox.Show("Не все поля заполнены!", "Внимание!");
}
else
{
DatabaseManager _manager = new DatabaseManager();
_manager.OpenConnection();
bool changed = true;

for (int i = 0; i < dataGrid.SelectedRows.Count; i++)


{
if
(Convert.ToString(this.dataGrid.SelectedRows[i].Cells[1].Value) != "" &&

Convert.ToString(this.dataGrid.SelectedRows[i].Cells[2].Value) != "" &&

Convert.ToString(this.dataGrid.SelectedRows[i].Cells[3].Value) != "")
{
string id =
Convert.ToString(this.dataGrid.SelectedRows[i].Cells[0].Value);
string specification =
Convert.ToString(this.dataGrid.SelectedRows[i].Cells[1].Value);
string information =
Convert.ToString(this.dataGrid.SelectedRows[i].Cells[2].Value);
string time_constraints =
Convert.ToString(this.dataGrid.SelectedRows[i].Cells[3].Value);

string _commandString = "UPDATE projects SET id = '" +


id + "', " +
"specification = '" + specification + "', " +
"information = '" + information + "', " +
"time_constraints = '" + time_constraints + "' " +
"WHERE projects. id = " + id;
MySqlCommand _command = new MySqlCommand(_commandString,
_manager.GetConnection);

try
{
if (_command.ExecuteNonQuery() != 1)
changed = false;
}
catch
{
MessageBox.Show("Ошибка работы с базой данных!",
"Ошибка");
}
}
else
MessageBox.Show("Не все поля заполнены!", "Внимание!");
}
if (changed)
MessageBox.Show("Данные изменены!", "Внимание!");
else
MessageBox.Show("Не все данные изменены!", "Внимание!");

_manager.CloseConnection();
53
}
}
}
else
MessageBox.Show("Ошибка, у вас нет на это доступа!", "Ошибка!");
}

private void УдалитьВыбранныйЭлементToolStripMenuItem_Click(object sender,


EventArgs e)
{
if(MessageBox.Show("Точно удалить эти данные?", "Внимание!",
MessageBoxButtons.YesNo) == DialogResult.Yes)
{
if(dataGrid.SelectedRows.Count == 0)
{
int index = Convert.ToInt32(numericUpDown_forSelected.Value);

if(index > 0 && index <= _data.Count)


{
DatabaseManager _manager = new DatabaseManager();
string id =
Convert.ToString(this.dataGrid.Rows[0].Cells[0].Value);
string _commandString = "DELETE FROM projects WHERE projects. id
= " + id;
MySqlCommand _command = new MySqlCommand(_commandString,
_manager.GetConnection);

try
{
_manager.OpenConnection();
_command.ExecuteNonQuery();
MessageBox.Show("Данные удалены!", "Внимание!");
}
catch
{
MessageBox.Show("Ошибка работы с базой данных!", "Ошибка!");
}
finally
{
_manager.CloseConnection();
}
}
else
{
MessageBox.Show("Выбран не верный элемент!", "Ошибка!");
}
}
else
{
DatabaseManager _manager = new DatabaseManager();
_manager.OpenConnection();
bool delete = true;

foreach(DataGridViewRow row in dataGrid.SelectedRows)


{
string id = Convert.ToString(row.Cells[0].Value);
string _commandString = "DELETE FROM projects WHERE projects. id
= " + id;
MySqlCommand _command = new MySqlCommand(_commandString,
_manager.GetConnection);
54
try
{
dataGrid.Rows.Remove(row);
if (_command.ExecuteNonQuery() != 1)
delete = false;
}
catch
{
MessageBox.Show("Ошибка работы с базой данных!", "Ошибка!");
}
}
if (delete)
MessageBox.Show("Данные удалены!", "Внимание!");
else
MessageBox.Show("Не все данные удалены!", "Внимание!");

_manager.CloseConnection();
}
}
}

private void УдалитьВсеДанныеToolStripMenuItem_Click(object sender, EventArgs e)


{
if (user.userName == "admin")
{
if (MessageBox.Show("Точно удалить все данные?", "Внимание!",
MessageBoxButtons.YesNo) == DialogResult.Yes)
{
DatabaseManager _manager = new DatabaseManager();
MySqlCommand _command = new MySqlCommand("TRUNCATE TABLE projects",
_manager.GetConnection);

try
{
_manager.OpenConnection();

_command.ExecuteNonQuery();
MessageBox.Show("Данные удалены!", "Внимание!");
}
catch
{
MessageBox.Show("Ошибка удаления данных!", "Ошибка!");
}
finally
{
_manager.CloseConnection();
}
}
}
else
MessageBox.Show("Ошибка, у вас нет на это доступа!", "ОШибка!");
}

private void ПерейтиКПросмотруToolStripMenuItem_Click(object sender, EventArgs


e)
{
if(MessageBox.Show("Перейти в окно загрузки данных?", "Внимание!",
MessageBoxButtons.YesNo) == DialogResult.Yes)
{
DataUploadForm form = new DataUploadForm();
this.Hide();
55
form.Show();
}
}
}