Uploaded by Кусаюсь Больно

Курсовой проект ОБРАЗЕЦ

advertisement
Министерство науки и высшего образования Российской Федерации
федеральное государственное бюджетное образовательное учреждение
высшего образования
«Российский экономический университет имени Г.В. Плеханова»
Воронежский филиал
Кафедра
Информационных технологии в экономике
Направление
Прикладная информатика
Профиль
Прикладная информатика в экономике
КУРСОВОЙ ПРОЕКТ
по дисциплине: Разработка информационных систем
тема: Разработка автоматизированной информационной системы туристической
фирмы
Выполнил(а)
______________
(подпись)
(ФИО)
Студент(ка) гр. ПРз221
Руководитель
_______________
(подпись)
Оценка
Дата
_______________
_______________
Воронеж 2024
Епрынцева Н.А.
(ФИО)
СОДЕРЖАНИЕ
ВВЕДЕНИЕ .......................................................................................................... 3
1 Техническое задание ........................................................................................ 5
2 Описание средств разработки ......................................................................... 9
3 Проектирование приложения ........................................................................ 11
3.1 Этапы разработки приложения .....................................................................................11
3.2 Моделирование предметной области ........................................................................13
3.3 Разработка интерфейса программы ............................................................................23
3.4 Программная реализация модулей приложения..................................................24
4 Инструкция программиста ............................................................................ 32
5 Инструкция пользователя.............................................................................. 34
ЗАКЛЮЧЕНИЕ ................................................................................................. 37
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ ....................................... 39
Приложение А ................................................................................................... 41
2
ВВЕДЕНИЕ
В настоящее время туристическая отрасль является одной из
наиболее успешно развивающихся и актуальных сфер экономики. Высокие
темпы развития туризма, большие объемы валютных поступлений активно
влияют
на
различные
сектора
экономики,
которые
способствуют
формированию собственной туристской индустрии. Но для успешного
ведения
туристического
бизнеса
необходимо
не
только
уметь
предоставлять качественные услуги, но и знать, кому они необходимы,
почему и для каких целей.
Туризм сегодня – это прибыльная сфера бизнеса, которая тесно
взаимодействует со многими отраслями и способствует их развитию. Для
повышения качества обслуживания клиентов невозможно обойтись без
разработки,
внедрения
и
функционирования
современных
систем
автоматизации.
Туризм и информация неразделимы: решение о поездке принимается
на основе информации; сам тур в момент бронирования - тоже только
информация; информацией обмениваются сотни раз в день все участники
туристического рынка. Это означает, что нужно уметь работать с
информацией, собирать, обрабатывать и принимать на её основе
единственно верное решение.
Развитие информационных технологий в сфере туризма должно быть
определяющим,
поэтому
автоматизация
данного
направления
деятельности является актуальной задачей.
Актуальность работы – разработка автоматизированной системы
работы с клиентами туристической фирмы, что предопределит успешную
реализацию качественного туристического продукта для потребителя.
Объектом курсового проекта является туристическая фирма «Вокруг
мира».
Предметом курсового проекта является автоматизация работы
туристической фирмы.
3
Целью данного курсового проекта – разработка информационной
системы для туристической фирмы.
Для решения поставленной цели поставлены следующие задачи:

Собрать и проанализировать информацию о туристической
фирме;

Составить техническое задание на разработку программного
обеспечения;

Выбрать и обосновать язык программирования;

Провести моделирование предметной области;

Разработать информационную систему;

Разработать руководство программиста;

Разработать руководство пользователя.
4
1 Техническое задание
Техническое задание (ТЗ, техзадание) — документ или несколько
документов, определяющих цель, структуру, свойства и методы какоголибо проекта, и исключающие двусмысленное толкование различными
исполнителями [3].
Создадим техническое задания для информационной системы
туристической фирмы.
1. Общие сведения.
Информационная
система
для
туристической
фирмы
–
ИС
туристическая фирма. Информационная система разрабатывается для
туристической фирмы «Вокруг мира» в ходе написания курсового проекта.
На основание задания для курсового проекта будет разрабатываться
информационная
система.
Начало
разработки
октябрь
2023
года,
окончание разработки декабрь 2023 года. Информационная система будет
приниматься преподавателем.
2. Назначение и цели создания (развития) системы.
Цель - необходимо автоматизировать деятельность турфирмы
«Вокруг мира».
Назначение разработки. Для туристической фирмы необходимо
разработать базу данных, которая бы хранила записи:
1)
о туристах (клиентах): ФИО, адрес, контактный телефон;
2)
о
туре:
продолжительность
в
тура,
какой
город,
условия
страну,
отдыха
(класс
какая
стоимость,
отеля),
наличие
экскурсий;
3)
о заключенных договорах: дата отправления клиента, дата
прибытия, тур и его стоимость, количество человек в путевке, сумма
договора.
База данных должна осуществлять хранение и редактирование
информации и предоставлять возможность выборки данных по запросам
5
пользователя.
ИС для туристической фирмы должна хранить все вводимые
пользователем сведения в базе данных с возможностью дальнейшего
редактирования, удаления записей, а также их сортировки и поиска.
Ввод и редактирование данных БД должно осуществляться с
помощью форм клиентского приложения.
Интерфейс программы должен быть дружеским, понятным для
пользователя, удобным, иметь подсказки для работы.
3. Характеристика объектов автоматизации.
В данном курсовом проекте в качестве исследуемой организации
рассматривается
туристическая
фирма
«Вокруг
мира»,
которое
предоставляет путевки клиентам.
Туристическая фирма оказывает следующие услуги:

предоставление путевок,

оказание услуг.
4. Требования к системе.
Минимальные аппаратные требования: Pentium III или Athlon 1 ГГц;
512 Мб ОЗУ (RAM); Видеокарта от 128 Мб памяти; от 20 Мб свободного
места на жестком диске
Предполагаемый срок службы техники - 5 лет, так как 5 лет средний срок полного морального устаревания парка машин и его замены.
ОС Windows 7/8/10 в среднем занимают по 1000-1500 Мбайт
свободного места на жестком диске.
Учитывая все вышеизложенное, приходим к выводу, что для
нормального функционирования базы данных необходимо 100 + 1500 2
Гбайт свободного дискового пространства, однако желательно иметь
некоторый резерв свободного места, поэтому рекомендуемый объем
свободного места на жестком диске - 2,5 Гбайта. Для осуществления
резервного копирования необходимо иметь еще один диск размером 850
Мбайт.
6
В нашем случае для организации информационной базы для
хранения заявок клиентов и информации об их движении будем
использовать MS SQL.
Для разработки клиентской части информационной системы,
обеспечивающей доступ к записям БД, будет использована среда
объектно-ориентированного программирования C#, ориентированная на
визуальное проектирование пользовательского интерфейса.
5. Состав и содержание работ по созданию системы.
Состав и содержание работ по созданию информационной системы
туристической фирмы включают следующие этапы:
1)
Предпроектное обследование, сбор необходимой информации.
Результат: определение целей, задач системы, которые в дальнейшем
должны быть решены;
2)
Анализ предметной области. Результат: подробный анализ
системы и введение организационных требований к решению задач и
целей;
3)
Разработка ТЗ. Результат: документация на разрабатываемую
систему, в которой указаны сроки реализации, кем будет реализована, для
кого,
описаны
все
необходимые
организационные
требования
к
разработке;
4)
Разработка
спецификаций
модели
данных,
программы.
определение
связей
Результат:
между
описание
сущностями,
построение концептуальной модели БД, построение логической модели
БД;
5)
Разработка ТП.
6)
Разработка рабочего проекта, состоящего из:

написания программы;

отладка программы;

корректировка программы;
7)
Проведение тестирования и доработка информационного
7
программного обеспечения по замечаниям и предложениям;
8)
Сдача системы
в эксплуатацию с выпуском описания
алгоритмов и технологической документации.
6. Порядок контроля и приемки системы.
Программный продукт может приниматься по всем задачам сразу
или по комплексам задач или задачам по мере их создания. Система или
комплексы задач должны пройти следующие основные виды испытаний:

предварительные испытания;

опытная эксплуатация;

приемочные испытания.
7. Требования к составу и содержанию работ по подготовке объекта
автоматизации к вводу АИС в действие.
Установка программы производится путем инсталляции программы
с флешки изготовителя на жесткий диск компьютера.
8. Требования к документированию.
Изготовитель
программного
продукта
обязан
предоставить
следующие документы:

Инструкцию пользователя программы;

Руководство по установке.
Эти документы должны быть включены в состав справочной
системы программы.
9. Источники разработки.

ТЗ соответствует требованиям к содержанию ТЗ на АС (ГОСТ
34.602-89 «Комплекс стандартов на АС. ТЗ на создание АС»).

Материалы, используемые для создания системы:

Информация, предоставленная преподавателем РЭУ.

Документы предоставленные РЭУ для разработки.
8
2 Описание средств разработки
Разработка
базы
данных
для
информационной
системы
туристической фирмы будет на языке SQL в интегрированной среде SQL
Server Management Studio.
Язык
структурированных
запросов
(SQL)
–
это
язык
программирования для хранения и обработки информации в реляционной
базе данных [6]. Реляционная база данных хранит информацию в
табличной форме со строками и столбцами, представляющими различные
атрибуты данных и различные связи между значениями данных.
Инструкции SQL можно использовать для хранения, обновления,
удаления, поиска и извлечения информации из базы данных. Можно также
использовать SQL для поддержания и оптимизации производительности
базы данных.
Основными компонентами системы SQL являются:

Таблица SQL – это базовый элемент реляционной базы данных.
Таблица базы данных SQL состоит из строк и столбцов.

Инструкции
действительными
SQL,
инструкциями,
или
SQL-запросы,
понятными
системам
являются
управления
реляционными базами данных. Элементы языка SQL – это такие
компоненты, как идентификаторы, переменные и условия поиска, которые
формируют правильную инструкцию SQL.

Хранимые процедуры – это набор из одной или нескольких
инструкций SQL, хранящихся в реляционной базе данных. Разработчики
программного
обеспечения
используют
хранимые
процедуры
для
повышения эффективности и производительности.
Реализация языка структурированных запросов (SQL) включает
серверную машину, которая обрабатывает запросы к базе данных и
возвращает результаты.
SQL Server Management Studio (SSMS) – это бесплатная графическая
9
среда, включающая набор инструментов для разработки сценариев на TSQL и управления инфраструктурой Microsoft SQL Server [12].
С помощью SSMS можно разрабатывать базы данных, выполнять
инструкции T-SQL, а также администрировать Microsoft SQL Server.
Разработка
клиентской
части
информационной
системы
туристической фирмы будет осуществляется в Microsoft Visual Studio.
Microsoft Visual Studio — это интегрированная среда разработки
(IDE) от компании Microsoft, предназначенная для создания программного
обеспечения. Visual Studio предоставляет разработчикам широкий набор
инструментов и возможностей для работы над проектами различного типа,
включая
приложения
для
Windows,
веб-приложения,
мобильные
приложения, игры и другое [5].
Visual Studio обладает мощными функциями, которые помогают
разработчикам увеличить производительность и эффективность их работы.
В состав среды входят инструменты для написания, отладки и
тестирования кода, а также множество функций автоматического
завершения кода, проверки синтаксиса и подсветки синтаксиса для
различных языков программирования.
10
3 Проектирование приложения
3.1 Этапы разработки приложения
Разработка информационной системы для туристической фирмы
«Вокруг мира» будет содержать следующие стадии [8]:

Системный анализ;

Анализ требований;

Проектирование;

Реализация;

Тестирования;

Ввод в эксплуатацию.
На стадии «системный анализ» будет проводится исследование и
анализ существующих информационных систем, будет сформировано
технико-экономическое обоснование и техническое задание на разработку
информационной системы.
На стадии «анализ требований» будет проводится сбор требований к
программному обеспечению их систематизацию, выявление взаимосвязей,
а также документирование.
На стадии «проектирование» будет проводится поиск способа,
который
удовлетворяет
требованиям
функциональности
системы
средствами имеющихся технологий с учетом заданных ограничений.
На стадии «реализации» будет происходить разработка и настройка
программ формирование и наполнение баз данных, формулировка рабочих
инструкций для персонала, оформление рабочего проекта.
На стадии «тестирование» будет происходить комплексная откладка
информационной системы и исправление ошибок.
Установление информационной системы на рабочем месте будет
происходить на стадии «ввод в эксплуатацию».
Начало
создание
информационной
11
системы
планируется
на
20.10.2023 года. Длительность проекта 30 дней. Для выполнения плана
требуются такие ресурсы как: руководитель проекта, системный аналитик,
программист (рисунок 1).
Рисунок 1 - Лист ресурсов
Составим таблицу сроков реализации каждого этапа проектирования
информационной системы (рисунок 2).
Рисунок 2 – Сроки проекта
Составим диаграмму Ганта для графического представления сроков
проекта (рисунок 3). Диаграмма Ганта — это популярный тип столбчатых
диаграмм (гистограмм), который используется для иллюстрации плана,
графика работ по какому-либо проекту.
Рисунок 3 – Диаграмма Ганта
12
3.2 Моделирование предметной области
На первом этапе моделирования создадим контекстную диаграмму
для
нашего
проекта.
Контекстная
диаграмма
является
вершиной
древовидной структуры диаграмм и представляет собой самое общее
описание системы и ее взаимодействия с внешней средой (рисунок 4).
Рисунок 4 – Контекстная диаграмма
Описание контекстной диаграммы представлено в таблицы 1.
Таблица1 - Контекстная диаграмма
Наименование стрелки
Описание
Заказы
Поступающие заказы от клиентов
Нормативы
Законодательные акты, ведомственные
должностные нормативы и правила
Персонал
Менеджеры, юристы, бухгалтеры
Выдача путевок
Выдача путевок клиентам
инструкции,
После описания контекстной диаграммы проводим функциональную
декомпозицию - разобьем на подсистемы и каждую подсистему опишем
отдельно (диаграммы декомпозиции) (таблица 2).
После дальнейшего разбиения диаграммы получим диаграмму
13
декомпозиции
(рисунок
5),
описывающие
каждые
из
работ,
представленных на диаграмме верхнего уровня.
Рисунок 5 – Диаграмма декомпозиции
Весь процесс функционирования туристической фирмы разбивается
на три диаграммы:
1)
«Оформление путевок» - занимается консультацией, приемом
заявок, формированием отчетов;
2)
«Юридическая экспертиза» - представляет собой процесс
проверки договора и сопутствующих документов;
3)
«Получение оплаты» - хранение заявок.
Оформление путевок - Менеджер принимает заявки от клиентов,
подбирает варианты туров, при согласии клиента бронирует отель и
билеты, готовит проект договора, после получения разрешения от юристов
подписывает договор, после оплаты выдает документы по туру и
электронные билеты.
Юридическая экспертиза - На данном этапе проводится юридическая
проверка документов, наличие разрешений на выезд, наличие виз. При
отсутствии противопоказаний дается разрешение на заключение договора.
Получение оплаты - Бухгалтерия принимает оплату и выписывает
14
чек. Составление статистической и финансовой отчетности.
Таблица 2 - Описание работ декомпозиции.
Функциональный
блок
Описание
Оформление путевок
Менеджер принимает заявки клиентов, База данных
подбирает варианты, бронирует отель и
билеты, готовит проект договора, выдает
путевки и билеты
Юридическая
экспертиза
Законодательные
Проверяется проект договора, наличие акты,
разрешений на выезд, наличие визы.
международные
договоры.
Получение оплаты
Получение оплаты от клиента
Источник
Ведомственные
инструкции
После построения декомпозиционной диаграммы перейдем к
проектированию самой базы данных. Сначала сделаем инфологическое
проектирование базы данных.
Под инфологической моделью понимают описание предметной
области в виде множества информационных объектов и их структурных
связей, выполненное с использованием специальных языковых средств, не
зависящих от используемых в дальнейшем программных и технических
средств [9].
Туристическая фирма занимается предоставлением услуг в области
международного и внутреннего туризма. Целью является информирование
потенциальных клиентов по различным турам.
Определим информацию, которая должна обладать туристическая
фирма для своей работы. Таким образом, база данных должна содержать
следующие сведения:
 Клиент (информация о клиентах)
 Путевки (на какое количество дней, стоимость, отель)
 Страны (название страны, необходимость визы, даты сезона)
 Отели (название отеля, категория отеля)
15
Инфологическое проектирование базы данных турфирмы содержит
следующие объекты и соответствующие свойства:
1.
Объект «Клиенты» обладает десятью полями: код клиента,
фамилия, имя, отчество, телефон, серия паспорта, номер паспорта, кем
выдан паспорт, когда выдан паспорт, адрес прописки.
Клиенты
Код клиента
Фамилия
Имя
Отчество
Телефон
Серия паспорта
Номер паспорта
Кем выдан паспорт
Когда выдан паспорт
Адрес прописки
Рисунок 6 – Диаграмма сущности «Клиенты»
2.
Объект «Путевки» обладает девятью полями: код путевки, код
клиента, дата, количество дней, страна, отель, цена, оплата, наличие визы.
Путевки
Код путевки
Код клиента
Дата
Количество дней
Страна
Отель
Цена
Оплата
Наличие визы
Рисунок 7 – Диаграмма сущности «Путевки»
3.
Объект «Страна» обладает пятью полями: код страны, страна,
климат, дата начала сезона, дата окончания сезона, наличие визы.
Страна
Код страны
Страна
Климат
Дата начала сезона
Дата окончания сезона
Наличие визы
Рисунок 8 – Диаграмма сущности «Страна»
16
Объект «Отели» обладает восьми полями: код отеля, название,
4.
категория(звездность), страна, город, телефон, стоимость номера в сутки,
питание.
Отели
Код отеля
Название
Категория (звездность)
Страна
Город
Телефон
Стоимость номера в сутки
Питания
Рисунок 9 – Диаграмма сущности «Отели»
Клиенты
Код клиента
Фамилия
Имя
Отчество
Телефон
Серия паспорта
Номер паспорта
Кем выдан паспорт
Когда выдан паспорт
Адрес прописки
Путевки
Код путевки
Код клиента
Дата
Количество дней
Страна
Отель
Цена
Оплата
Наличие визы
Отели
Код отеля
Название
Категория (звездность)
Страна
Город
Телефон
Стоимость номера в сутки
Питания
Страна
Код страны
Страна
Климат
Дата начала сезона
Дата окончания сезона
Наличие визы
Рисунок 10 – Инфологическая модель базы данных турфирмы
В ходе инфологического проектирования предметной области
«Туристическая
фирма»
было
выделено
четыре
сущностей,
для
представления данных сущностей и их взаимосвязь была разработана
инфологическая
инфологического
модель,
представленная
проектирования
на
рисунке
преступим
к
10.
После
логическому
проектированию базы данных.
Даталогическое (логическое) проектирование – это проектирование
логической структуры базы данных. Логическая структура базы данных
является отображением реальной предметной области. Поэтому на выбор
17
проектных решений непосредственное влияние оказывает специфика
предметной области, отраженная в мифологической модели.
Для создания логической модели базы данных турфирмы опишем
каждую сущность:
1.
Сущность «Клиенты» имеет десять полей, которые не могут
быть пустыми.
Клиенты
Код клиента
NOT NULL
Фамилия
NOT NULL
Имя
NOT NULL
Отчество
NOT NULL
Телефон
NOT NULL
Серия паспорта
NOT NULL
Номер паспорта
NOT NULL
Кем выдан паспорт
NOT NULL
Когда выдан паспорт
NOT NULL
Адрес по прописке
NOT NULL
Фактический адрес
NOT NULL
Код туроператора
NOT NULL
Первичный ключ (Код клиента)
Рисунок 11 – Диаграмма сущности «Клиенты»
2.
Объект «Путевки» имеет девять полей, которые не могут быть
пустыми.
Путевки
Код путевки
NOT NULL
Код клиента
NOT NULL
Дата
NOT NULL
Количество дней
NOT NULL
Страна
NOT NULL
Отель
NOT NULL
Цена
NOT NULL
Оплата
NOT NULL
Наличие визы
NOT NULL
Первичный ключ (Код путевки)
Внешний ключ (Код клиента Страна
Отель)
Рисунок 12 – Диаграмма сущности «Путевки»
3.
Объект «Страна» имеет семь полей, которые не могут быть
пустыми
Страна
Код страны
NOT NULL
Страна
NOT NULL
Климат
NOT NULL
Дата начала сезона
NOT NULL
Дата окончания сезона
NOT NULL
Наличие визы
NOT NULL
Первичный ключ (Код страны)
Рисунок 13 – Диаграмма сущности «Страна»
18
Объект «Отели» имеет восемь полей, которые не могут быть
4.
пустыми
Отели
Код отеля
NOT NULL
Название
NOT NULL
Категория (звездность)
NOT NULL
Страна
NOT NULL
Город
NOT NULL
Телефон
NOT NULL
Стоимость номера в сутки
NOT NULL
Питания
NOT NULL
Первичный ключ (Код отеля)
Внешний ключ (Страна )
Рисунок 14 – Диаграмма сущности «Отели»
Сущность клиенты связано со сущностью путевки связью один ко
многим (код клиента, код клиента).
Сущность отели связано со сущностью путевки связью один ко
многим (код отеля, отель).
Сущность страны связано со сущностью путевки связь. Один ко
многим (код страны, страна).
Клиенты
Код клиента
NOT NULL
Фамилия
NOT NULL
Имя
NOT NULL
Отчество
NOT NULL
Телефон
NOT NULL
Серия паспорта
NOT NULL
Номер паспорта
NOT NULL
Кем выдан паспорт
NOT NULL
Когда выдан паспорт
NOT NULL
Адрес прописки
NOT NULL
Первичный ключ (Код клиента)
1,N
1,N
Отели
Код отеля
NOT NULL
Название
NOT NULL
Категория (звездность)
NOT NULL
Страна
NOT NULL
Город
NOT NULL
Телефон
NOT NULL
Стоимость номера в сутки
NOT NULL
Питания
NOT NULL
Первичный ключ (Код отеля)
Внешний ключ (Страна )
Путевки
Код путевки
NOT NULL
Код клиента
NOT NULL
Дата
NOT NULL
Количество дней
NOT NULL
Страна
NOT NULL
Отель
NOT NULL
Цена
NOT NULL
Оплата
NOT NULL
Наличие визы
NOT NULL
Первичный ключ (Код путевки)
Внешний ключ (Код клиента Страна
Отель)
1,N
Страна
Код страны
NOT NULL
Страна
NOT NULL
Климат
NOT NULL
Дата начала сезона
NOT NULL
Дата окончания сезона
NOT NULL
Наличие визы
NOT NULL
Первичный ключ (Код страны)
Рисунок 15 – Даталогическая модель базы данных турфирмы
В ходе даталогического проектирования предметной области
«Туристическая фирма» было описано четыре сущности и связи между
ними, для представления данных сущностей и их связей была созданная
даталогическая модель, представленная на рисунке 15. Последним этапом
19
моделирования базы данных туристической фирмы будет физическое
проектирование.
Физическое проектирование БД — это процесс подготовки описания
реализации БД на вторичных запоминающих устройствах; на этом этапе
рассматриваются основные отношения, организация файлов и индексов,
предназначенных для обеспечения эффективного доступа к данным, а
также все связанные с этим ограничения целостности и средства защиты
[1].
Для создания физической модели базы данных турфирмы обозначим
типы данных каждого поля каждой сущности, которые представленные на
таблицах 3 – 6.
Таблица 3 - Типы данных сущности «Клиенты»
Имя поля
Тип данных
Ограничения
Код клиента
Integer (Числовой)
NOT NULL
Фамилия
Varchar (30) (Текстовый)
NOT NULL
Имя
Varchar (30) (Текстовый)
NOT NULL
Отчество
Varchar (30) (Текстовый)
NOT NULL
Телефон
Integer (Числовой)
NOT NULL
Серия паспорта
Integer (Числовой)
NOT NULL
Номер паспорта
Integer(Числовой)
NOT NULL
Кем выдан паспорт
Varchar (50) (Текстовый)
NOT NULL
Когда выдан паспорт
Date (Дата)
NOT NULL
Адрес прописки
Varchar (50) (Текстовый)
NOT NULL
Таблица 4 - Типы данных сущности «Путевки»
Имя поля
Тип данных
Ограничения
Код путевки
Integer (Числовой)
NOT NULL
Код клиента
Integer (Числовой)
NOT NULL
Дата
Date (Дата)
NOT NULL
Количество дней
Integer (Числовой)
NOT NULL
Страна
Integer (Числовой)
NOT NULL
Отель
Integer (Числовой)
NOT NULL
Цена
Integer(Числовой)
NOT NULL
20
Отплата
Varchar (50) (Текстовый)
NOT NULL
Наличие визы
Bool (Логический)
NOT NULL
Таблица 5 - Типы данных сущности «Страны»
Имя поля
Тип данных
Ограничения
Код страны
Integer (Числовой)
NOT NULL
Страна
Varchar (50) (Текстовый)
NOT NULL
Климат
Varchar (50) (Текстовый)
NOT NULL
Дата начала сезона
Date (Дата)
NOT NULL
Дата окончания сезона
Date (Дата)
NOT NULL
Наличие визы
Bool (Логический)
NOT NULL
Таблица 6 - Типы данных сущности «Отели»
Имя поля
Тип данных
Ограничения
Код отеля
Integer (Числовой)
NOT NULL
Название
Varchar (50) (Текстовый)
NOT NULL
Категория (звездность)
Varchar (50) (Текстовый)
NOT NULL
Страна
Varchar (50) (Текстовый)
NOT NULL
Город
Varchar (50) (Текстовый)
NOT NULL
Телефон
Integer (Числовой)
NOT NULL
Стоимость номера сутки
Integer(Числовой)
NOT NULL
Питание
Varchar (50) (Текстовый)
NOT NULL
В
ходе
физического
проектирования
предметной
области
туристической фирмы «Вокруг мира» были описаны типы полей,
созданных сущностей, для представления данных сущностей и их связей
была созданная физическая модель, представленная на рисунке 16.
21
Рисунок 16 – Физическая модель базы данных
турфирмы
22
3.3 Разработка интерфейса программы
Для создания качественного интерфейса требует значительно
большего,
чем
просто
соблюдение
некоторых
инструкций.
Оно
предполагает реализацию принципа «интересы пользователя превыше
всего» и соответствующую методологию разработки всего программного
продукта [2]. Качественный интерфейс должен обладать целым рядом
свойств:
1) Естественность интерфейса.
2) Согласованность интерфейса.
3) Дружественность интерфейса.
4) Принцип «обратной связи».
5) Простота интерфейса.
6) Гибкость интерфейса.
7) Эстетическая привлекательность.
Для создание качественного интерфейса информационной системы
для туристической фирмы использовали следующие элементы среды
разработки:

Label используется для добавления надписи на какую-либо
форму;

DataGridView используется для отображения данных в виде
таблицы;

GroupBox используется для ограничения от остальной фирмы
границей;

TextBox используется для того, что пользователь мог вводить
информацию;

Button используется для добавления кнопки на форму;

PictureBox используется для добавления изображения на
форму.
Для наилучшего понимания, как взаимодействуют формы в
23
информационной системе составим функциональную схемы (рисунок 17).
Функциональная схема - схема функциональных элементов объекта и
функциональных связей между ними. Их использование и построение
позволяет наглядно отразить устройство функциональных (рабочих)
изменений, описание которых оперирует любыми (в том числе и
несущественными) микросхемами.
Авторизация
Выбор режима работы
Данные клиентов
Данные отелей
Данные стран
Данные о путевках
Добавление информации
о новом клиенте
Добавление информации
о новом отеле
Добавление информации
о новой стране
Добавление информации
о новой путевки
Рисунок 17 – Функциональная схема
3.4Программная реализация модулей приложения
Реализация приложение можно условно разделить на две части:
Разработка базы данных; Разработка клиентской части.
Разработка базы данных происходит на языке SQL [11]. Ранее уже
была разработана физическая модель базы данных, на основании ее
создадим таблицы и связи между ними. Приведем листинги создания
таблиц в приложении А.
На основании приведенных листингов получилась схема данных,
представленная на рисунке 18.
24
Рисунок 18 – Схема данных
После создания базы данных приступим к реализации клиентской
формы для информационной системы. Клиентскую часть мы разработали
на языке C# [4]. Полный листинг всех созданных форм для системы
туристической фирмы «Вокруг мира» представлены в приложении А.
Клиентская часть состоит из десяти форм: форма авторизации,
форма управления, форма с данными клиентов, форма добавление нового
клиента, форма с данными об отелях, форма добавление нового отеля,
форма с данными о странах, форма добавление ногой страны, форма с
данными о путевках, форма добавление новой путевки.
Форма «Авторизация» создана для того, чтобы никто чужой не мог
получить доступ к информации турфирмы (рисунок 19).
Рисунок 19 – Форма авторизации
Форма «Управление» разработан, для разграничения доступа к
данным (рисунок 20).
25
Рисунок 22 – Форма управления
На форме «Клиенты» представлена вся внесенная информация о
клиентах, которую можно редактировать, удалять и добавлять новую. Для
добавление была разработана форма добавление нового клиента (рисунок
23, 24).
Рисунок 23 – Форма клиенты
Рисунок 24 – Форма добавление нового клиента
На форме «Отели» представлена информация об отелях, которую
можно редактировать, удалять и добавлять новую (рисунок 25, 26).
26
Рисунок 25 – Форма отели
Рисунок 26 – Форма добавления нового отеля
На форме «Страны» представлена информация о странах, которую
можно редактировать, удалять и добавлять новую (рисунок 27, 28).
Рисунок 27 – Форма страны
27
Рисунок 28 – Форма добавление новой страны
На форме «Путевки» представлена вся внесенная информация о
путевках клиентов ее можно редактировать, удалять и добавлять новую
(рисунок 29, 30).
Рисунок 29 – Форма путевки
Рисунок 30 – Форма добавления новой путевки
Как пользоваться формами, какие кнопка за что отвечает описано в
главе пять.
28
3.5 Отладка и тестирование приложения
Отладка ПС  это деятельность, направленная на обнаружение и
исправление ошибок с использованием процессов выполнения программ.
Тестирование ПС  это процесс выполнения программ на некотором
наборе данных, для которого заранее известен результат или известны
правила поведения этих программ. Указанный набор данных называется
тестовым или просто тестом. Таким образом, отладку можно представить в
виде
многократного
повторения
трех
процессов:
тестирования,
в
результате которого может быть констатировано наличие в ПС ошибки,
поиска места ошибки в программах и документации, редактирования
программ и документации с целью устранения обнаруженной ошибки.
Другими словами: Отладка = Тестирование + Поиск ошибок +
Редактирование [7]. Проведем тестирование авторизации в созданной
системе:
1.
Краткое
описание
Авторизация
-
существующего
пользователя;
2.
Автор – Иванов И.И.
3.
Приоритет - Высокий, так как функциональность важная.
4.
Название
-
Кейс
относится
напрямую
к
авторизации,
во-первых,
нужно
следовательно этот модуль и укажем.
5.
Предварительные условия
-
открыть
программу, во-вторых, пользователь должен существовать.
6.
Шаги - 1) Вводим в поле логин – user 2) Вводим в поле пароль
«12345», 3) Нажимаем кнопку «Вход».
7.
Ожидаемый
результат
-
авторизация
пользователь прошел на другую форму.
Для наглядности соберем все это в таблицу 7.
29
прошла
успешна,
Таблица 7 – Тест кейс «Авторизация пользователя»
№1
Авторизация пользователя
Ссылка на ТЗ
Попова В.П.
Высокий
Авторизация
1.
Форма авторизации
2.
Текстовый пользователь user1
3.
Пользователя не существует
1.
Вводим в поле логин «user»
2.
Вводим в поле пароль «12345»
3.
Нажмите на кнопку «Войти»
Авторизация прошла успешна, пользователь прошел на другую форму.
Проведем тестирование ввода новых данных в базу данных:
1.
Краткое описание – Добавление новых данных;
2.
Автор – Иванов И.И.
3.
Приоритет - Высокий, так как функциональность важная.
4.
Название - Кейс относится напрямую к добавлению новой
информации, следовательно этот модуль и укажем.
5.
Предварительные условия - открыть режим работы с данными
клиентов.
6.
Шаги - 1) Выбираем режим работы с данными клиентами 2)
Нажимаем кнопку «Добавить».
7.
Ожидаемый результат – данные добавлены в базу данных.
Для наглядности соберем все это в таблицу 8.
Таблица 8 – Тест кейс «Добавление нового клиента»
№2
Добавление нового клиента
Ссылка на ТЗ
Попова В.П.
Высокий
1.
Форма работа с данными клиента
2.
Добавление нового клиента
1.
Нажимаем кнопку «добавить»
2.
Заполняем все поля
3.
Нажмите на кнопку «Сохранить»
Добавление нового клиента прошла успешно.
Добавление
По аналогии с добавление нового клиента, проведем тестирование
добавления нового отеля, страны и путевки. В ходе данного тестирования
ошибок выявленного не было. Так же были проведены тестирования всей
системы, ошибки выявлены не были. В ходе проведенных вышеописанных
30
действий была проведена отладка созданной информационной системы.
31
4 Инструкция программиста
Для установки программы надо разархивировать папку в папку, где
находятся установленные программы на компьютере. В основной папке
находятся достаточно много файлов (рисунок 31).
Рисунок 31 - Основная папка программы
В папке ТурФирма находятся файлы созданных форм (рисунок 32).
Рисунок 32 - Папка ТурФирма
В папке bin содержатся копии всех приватных компоновочных
блоков, на которое ссылается приложение (рисунок 33).
Рисунок 33 - Папка bin
В папке obj хранятся объектные, или промежуточные, файлы,
которые являются скомпилированными бинарными файлами, которые еще
не были слинкованы. Они по сути являются фрагментами, которые будут
объединены для производства конечного исполняемого файла. Компилятор
генерирует по одному объектному файлу для каждого исходного файла, а
те файлы помещаются в папку obj (рисунок 34).
32
Рисунок 34 - Папка obj
В папке Properties хранятся файле со сведениями о сборке (рисунок
35).
Рисунок 35 - Папка Properties
Для
того,
чтобы
запустить
приложение
надо
найти
файл
ТурФирма.exe и открыть его. После этого откроется окно авторизации
программы.
Что бы продолжить работу надо ввести логин и пароль. Логин – user,
пароль – 12345.
33
5 Инструкция пользователя
Создадим руководство пользователя информационной системы
туристической фирмы.
Инструкция пользователя – это документ предназначенный для
предоставление пользователям помощи в использовании данной системы.
При открытии системы появляется окно (рисунок 36) авторизации, в
котором надо ввести логин и пароль для доступа к данным.
Рисунок 36 – Форма авторизации
Если логин или пароль будет введен неправильно, то выскочит окно
ошибки (рисунок 37).
Рисунок 37 – Окно ошибки
После правильного введения логина и пароля откроется окно выбора
режима работы (рисунок 38).
Рисунок 38 – Форма управления
34
На данном этапе есть четыре выбора режима:

Работа с данными клиента;

Работа с отелями;

Работа со странами;

Работа с данными путевок.
При выборе режима работы с данными откроется окно с
информацией о клиентах, которое представлено на рисунке 39.
Рисунок 39 – Форма клиенты
На данной форме мы видим таблицу с данными клиентов, так же
данными выделенной строки дублируется в левом нижнем углу. Там
можно редактировать уже записанные данные. После редактирования надо
будет нажать на кнопку «изменить» или «сохранить». При нажатии на
кнопку «удалить» будет удаленна выделенная запись. При нажатии на
картинку
будет очищены нижние поля на форме. При нажатии на
картинку
происходит обновление информации на форме. Для поиска
информации надо ввести данные в поле рядом с картинкой
.
Для добавления новой записи надо нажать на кнопку «новая запись».
После нажатия откроется другая форма, представленная на рисунке 40.
35
Рисунок 40 – Форма добавление нового клиента
После заполнения всех полей надо нажать на кнопку «Сохранить»,
после этого форма закроется, и в таблице появится новая запись. При
нажатии кнопки «закрыть» форма закроется, но введенные данные не
сохранятся.
При выборе других режимов работ будут открывается похожие
формы с таким же функционалом, но с другими данными.
36
ЗАКЛЮЧЕНИЕ
Целью данного курсового проекта было создание информационной
системы для туристической фирмы "Вокруг мира". Разработанная система
была направлена на эффективное введение учета данных клиентов и
оформленных ими путевок.
В процессе выполнения проекта были изучены основные принципы
создания информационных систем. На основе полученных навыков была
создана и впоследствии внедрена информационная система, содержащая
необходимую информацию для деятельности туристической фирмы
"Вокруг мира". Для создания базы данных был выбран язык SQL, а для
реализации клиентской части – язык C#.
Были сформулированы цель и актуальность проектирования, а также
определены требования к разрабатываемой информационной системе.
Произведен анализ и выбор проектных решений, соответствующих
информационному и программному обеспечению.
Для достижения поставленных задач была проведена значительная
работа. Таким образом, была разработана гибкая модель базы данных, с
которой легко взаимодействовать, и данные представлены в удобной и
наглядной форме для пользователя.
В процессе выполнения курсового проекта были достигнуты
следующие поставленные задачи:

Собрана и проанализирована информация о туристической
фирме;

Составлено техническое задание на разработку программного
обеспечения;

Выбран и обоснован язык программирования;

Разработанная концептуальная и декомпозиционная модель
туристической фирмы;

Проведено инфологическое, даталогическое и физическое
37
моделирование;

Разработана база данных и клиентская части информационной
системы;

Разработано руководство программиста;

Разработано руководство пользователя.
Разработанная
информационная
система
отвечает
следующим
критериям:

Обеспечивает получения информации о клиентах, отелях,
странах и путевках;

Обеспечивает
удобное
добавление
новой
информации,
изменении уже внесенной, а также удаление уже не нужных данных.
В результате достигнута цель курсового проекта и выполнены
поставленные
задачи.
Успешное
внедрение
разработанной
информационной системы на фирму обеспечит принципиально новые
возможности во взаимодействии сотрудников турфирмы «Вокруг мира»
посредством работы с информационной системой.
38
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1.
Бондаренко, И. С. Базы данных: создание баз данных в среде
SQL Server: лабораторный практикум / И. С. Бондаренко. - Москва: Изд.
Дом НИТУ «МИСиС», 2019. - 39 с. - Текст: электронный. - URL:
https://znanium.com/catalog/product/1232752.
2.
Гниденко,
обеспечения:
учебное
И.
Г.
Технология
пособие
для
разработки
среднего
программного
профессионального
образования / И. Г. Гниденко, Ф. Ф. Павлов, Д. Ю. Федоров. – Москва:
Издательство Юрайт, 2020. – 235 с. – (Профессиональное образование). –
ISBN 978-5-534-05047-9. – Текст: электронный // ЭБС Юрайт [сайт]. –
URL: https://urait.ru/bcode/453640.
3.
ГОСТ 19.201-78. Единая система программной документации.
Техническое задание. Требования к содержанию и оформлению – Введ.
1980– 01–01. – М.: Издательство стандартов, 2019.
4.
Зыков, С. В. Программирование. Объектно-ориентированный
подход: учебник и практикум для вузов / С. В. Зыков. – Москва:
Издательство Юрайт, 2020. – 155 с. – (Высшее образование). – ISBN 978-5534-00850-0. – Текст: электронный // ЭБС Юрайт [сайт]. – URL:
https://urait.ru/bcode/451488.
5.
Казанский, А. А. Программирование на Visual C#: учебное
пособие для среднего профессионального образования / А. А. Казанский. –
2-е изд., перераб. и доп. – Москва: Издательство Юрайт, 2020. – 192 с. –
(Профессиональное образование). – ISBN 978-5-534-14130-6. – Текст:
электронный // ЭБС Юрайт [сайт]. – URL: https://urait.ru/bcode/467844.
6.
Кара-Ушанов, В. Ю. SQL — язык реляционных баз данных :
учебное пособие / В. Ю. Кара-Ушанов. - Екатеринбург: Изд-во Уральского
ун-та, 2019. - 156 с. - ISBN 978-5-7996-1622-9. - Текст: электронный. URL: https://znanium.com/catalog/product/1936331.
7.
Морозова, Ю. В. Тестирование программного обеспечения :
39
учебное пособие / Ю. В. Морозова. - Томск: Эль-Контент, 2019. - 120 с. ISBN
978-5-4332-0279-5.
-
Текст:
электронный.
-
URL:
https://znanium.com/catalog/product/1845910.
8.
Лисяк, В. В. Разработка информационных систем : учебное
пособие / В. В. Лисяк ; Южный федеральный университет. - Ростов-наДону; Таганрог : Издательство Южного федерального университета, 2019.
- 96 с. - ISBN 978-5-9275-3168-4. - Текст: электронный. - URL:
https://znanium.com/catalog/product/1088133.
9.
Проектирование
информационных
систем:
учебник
и
практикум для среднего профессионального образования / Д. В. Чистов, П.
П. Мельников, А. В. Золотарюк, Н. Б. Ничепорук ; под общей редакцией Д.
В. Чистова. – Москва: Издательство Юрайт, 2020. – 258 с. –
(Профессиональное образование). – ISBN 978-5-534-03173-7. – Текст:
электронный // ЭБС Юрайт [сайт]. – URL: https://urait.ru/bcode/452680
10.
Рудаков, А.В. Технология разработки программных продуктов:
Учеб. пособие для студ. сред. проф. образования / А.В.Рудаков. – М.:
Издательский центр «Академия», 2020. – 208с.
11.
Федорова, Г.Н. Участие в интеграции программных модулей /
Г.Н. Федорова. – М: ОИЦ «Академия», 2021.– 304 с.
12.
Фиайли, К. SQL. Руководство для использования с любыми
SQL СУБД: учебное пособие / К. Фиайли ; пер. с англ. А. В. Хаванова. - 2-е
изд. - Москва: ДМК Пресс, 2023. - 454 с. - ISBN 978-5-89818-323-3. - Текст:
электронный. - URL: https://znanium.com/catalog/product/2102610.
40
Приложение А
Листинг создания таблицы клиенты:
CREATE TABLE Clientage(
IDClient int IDENTITY(1,1) NOT NULL,
NameClient varchar(Max) NOT NULL,
SurnameClient varchar(Max) NOT NULL,
OtchClient varchar(Max) NOT NULL,
Tel int NOT NULL,
SerPas int NULL,
IDPas int NOT NULL,
WhoIssPas varchar(Max) NOT NULL,
WhenPas date NOT NULL,
ResAdd varchar(Max) NOT NULL,
ActAdd varchar(Max) NOT NULL,
CONSTRAINT PK_Clientage PRIMARY KEY (IDClient))
Листинг создания таблицы отели:
CREATE TABLE Hotel(
IDHotel int IDENTITY(1,1) NOT NULL,
NameHotel varchar(Max) NOT NULL,
CatHotel varchar(Max) NOT NULL,
Country varchar(Max) NOT NULL,
City varchar(Max) NOT NULL,
Tel int NOT NULL,
RoomRatePerNight varchar(Max) NOT NULL,
Pitan varchar(Max) NOT NULL,
CONSTRAINT PK_Hotel PRIMARY KEY (IDHotel))
Листинг создания таблицы страны:
CREATE TABLE Country(
IDCountry int IDENTITY(1,1) NOT NULL,
Country varchar(Max) NOT NULL,
Climate varchar(Max) NOT NULL,
SeasonStartDate date NOT NULL,
SeasonEndDate date NOT NULL,
HavingAVisa varchar(Max) NOT NULL,
CONSTRAINT PK_Country PRIMARY KEY (IDCountry))
Листинг создания таблицы путевки:
CREATE TABLE Putevki(
IDPutevki int IDENTITY(1,1) NOT NULL,
IDClient int NOT NULL,
DataPut date NOT NULL,
KolDay int NOT NULL,
Country int NOT NULL,
NameHotel int NOT NULL,
Price int NOT NULL,
Pay varchar(Max) NOT NULL,
HavingAVisa varchar(Max) NOT NULL,
CONSTRAINT PK_Putevki PRIMARY KEY (IDPutevki))
Листинг создания связи между таблицами путевки и страны:
ALTER TABLE Putevki ADD CONSTRAINT FK_Putevki_Country
FOREIGN KEY(IDCountry) REFERENCES Country (IDCountry)
ON DELETE CASCADE
ON UPDATE CASCADE
Листинг создания связи между таблицами путевки и отели:
ALTER TABLE Putevki ADD CONSTRAINT FK_Putevki_Hotel
FOREIGN KEY(IDHotel) REFERENCES Hotel (IDHotel)
ON DELETE CASCADE
ON UPDATE CASCADE
Листинг создания связи между таблицами путевки и клиенты:
ALTER TABLE Putevki ADD CONSTRAINT FK_Putevki_Clientage
FOREIGN KEY(IDClient) REFERENCES Clientage (IDClient)
ON DELETE CASCADE
ON UPDATE CASCADE
41
Листинг формы авторизации:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace ТурФирма
{ public partial class Form1 : Form
{ DataBase dateDase = new DataBase();
public Form1()
{ InitializeComponent();
StartPosition = FormStartPosition.CenterScreen;}
private void button1_Click(object sender, EventArgs e)
{ string login = textBox1.Text;
string pass = textBox2.Text;
if (login == "user" && pass == "12345")
{ this.Close();
Form6 form6 = new Form6();
form6.Show();}
else MessageBox.Show("Вы не правильно ввели логин или пароль"); }}}
Листинг формы управления:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace ТурФирма
{ public partial class Form6 : Form
{ public Form6()
{ InitializeComponent();
StartPosition = FormStartPosition.CenterScreen; }
private void button1_Click(object sender, EventArgs e)
{ Form2 form2 = new Form2();
form2.Show(); }
private void button2_Click(object sender, EventArgs e)
{ Form4 form4 = new Form4();
form4.Show(); }
private void button3_Click(object sender, EventArgs e)
{ Form7 form7 = new Form7();
form7.Show(); }
private void button4_Click(object sender, EventArgs e)
{ Form9 form9 = new Form9();
form9.Show(); } }
Листинг формы работа с данными клиента:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Xml.Linq;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
using System.Reflection;
namespace ТурФирма
{ enum RowState
{ Existed,
New,
Modified,
ModifiedNew,
Deleted }
public partial class Form2 : Form
{ DataBase dateDase = new DataBase();
42
int selectedRow;
public Form2()
{ InitializeComponent();
StartPosition = FormStartPosition.CenterScreen; }
private void CreateColumns()
{ dataGridView1.Columns.Add("IDClient", "id");
dataGridView1.Columns.Add("NameClient", "Имя Клиента");
dataGridView1.Columns.Add("SurnameClient", "Фамилия Клиента");
dataGridView1.Columns.Add("OtchClient", "Отчество Клиента");
dataGridView1.Columns.Add("Tel", "Телефон");
dataGridView1.Columns.Add("SerPas", "Серия Паспорта");
dataGridView1.Columns.Add("IDPas", "Номер Паспорта");
dataGridView1.Columns.Add("WhoIssPas", "Кем выдан Паспорт");
dataGridView1.Columns.Add("WhenPas", "Когда выдан Паспорт");
dataGridView1.Columns.Add("ResAdd", "Адрес прописки");
dataGridView1.Columns.Add("IsNew",String.Empty); }
private void ClearFields()
{ textBox1.Text = "";
textBox2.Text = "";
textBox3.Text = "";
textBox4.Text = "";
textBox5.Text = "";
textBox6.Text = "";
textBox7.Text = "";
textBox8.Text = "";
textBox9.Text = "";
textBox10.Text = "";
textBox11.Text = ""; }
private void ReadSingleRow(DataGridView dgw, IDataRecord record)
{ int v = dgw.Rows.Add(record.GetInt32(0), record.GetString(1), record.GetString(2), record.GetString(3), record.GetInt32(4),
record.GetInt32(5), record.GetInt32(6), record.GetString(7), record.GetString(8), record.GetString(9), RowState.ModifiedNew); }
private void RefreshDataGrid(DataGridView dgw)
{ dgw.Rows.Clear();
string queryString = $"select * from Clientage";
SqlCommand command = new SqlCommand(queryString, dateDase.getConnection());
dateDase.openConnection();
SqlDataReader reader = command.ExecuteReader();
while(reader.Read())
{ ReadSingleRow(dgw, reader); }
reader.Close(); }
private void Form2_Load(object sender, EventArgs e)
{ CreateColumns();
RefreshDataGrid(dataGridView1); }
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{ selectedRow = e.RowIndex;
if (e.RowIndex >= 0)
{ DataGridViewRow row = dataGridView1.Rows[selectedRow];
textBox1.Text = row.Cells[0].Value.ToString();
textBox2.Text = row.Cells[1].Value.ToString();
textBox3.Text = row.Cells[2].Value.ToString();
textBox4.Text = row.Cells[3].Value.ToString();
textBox5.Text = row.Cells[4].Value.ToString();
textBox6.Text = row.Cells[5].Value.ToString();
textBox7.Text = row.Cells[6].Value.ToString();
textBox8.Text = row.Cells[7].Value.ToString();
textBox9.Text = row.Cells[8].Value.ToString();
textBox10.Text = row.Cells[9].Value.ToString(); } }
private void pictureBox2_Click(object sender, EventArgs e)
{ RefreshDataGrid(dataGridView1);
ClearFields(); }
private void button1_Click(object sender, EventArgs e)
{ Form3 frm = new Form3();
frm.Show(); }
private void Search(DataGridView dgw)
{ dgw.Rows.Clear();
string searchStrind = $"select * from clientage where concat (IDClient, NameClient, SurnameClient, OtchClient, Tel, SerPas, IDPas,
WhoIssPas, WhenPas) like '%" + textBox11.Text + "%'";
SqlCommand com = new SqlCommand(searchStrind, dateDase.getConnection());
dateDase.openConnection();
SqlDataReader read = com.ExecuteReader();
while(read.Read())
{ ReadSingleRow(dgw, read); }
read.Close(); }
private void deleteRow()
{ int index = dataGridView1.CurrentCell.RowIndex;
dataGridView1.Rows[index].Visible=false;
if (dataGridView1.Rows[index].Cells[0].Value.ToString()==string.Empty)
{ dataGridView1.Rows[index].Cells[10].Value = RowState.Deleted;
return; }
43
dataGridView1.Rows[index].Cells[10].Value = RowState.Deleted; }
private void Update()
{ dateDase.openConnection();
for(int index = 0; index < dataGridView1.Rows.Count; index++)
{ var rowState = (RowState)dataGridView1.Rows[index].Cells[10].Value;
if (rowState == RowState.Existed)
continue;
if(rowState == RowState.Deleted)
{ var id = Convert.ToInt32(dataGridView1.Rows[index].Cells[0].Value);
var deleteQuery = $"delete from clientage where IDClient = {id}";
var command = new SqlCommand(deleteQuery, dateDase.getConnection());
command.ExecuteNonQuery() }
if (rowState== RowState.Modified)
{ var id = dataGridView1.Rows[index].Cells[0].Value.ToString();
var name = dataGridView1.Rows[index].Cells[1].Value.ToString();
var surmane = dataGridView1.Rows[index].Cells[2].Value.ToString();
var othc = dataGridView1.Rows[index].Cells[3].Value.ToString();
var tel = dataGridView1.Rows[index].Cells[4].Value.ToString();
var serpas = dataGridView1.Rows[index].Cells[5].Value.ToString();
var idpas = dataGridView1.Rows[index].Cells[6].Value.ToString();
var wholshass = dataGridView1.Rows[index].Cells[7].Value.ToString();
var whempas = dataGridView1.Rows[index].Cells[8].Value.ToString();
var resadd = dataGridView1.Rows[index].Cells[9].Value.ToString();
var changeQuery = $"update clientage set NameClient = '{name}', SurnameClient = '{surmane}', OtchClient = '{othc}', Tel =
'{tel}' , SerPas = '{serpas}', IDPas = '{idpas}', WhoIssPas = '{wholshass}', WhenPas = '{whempas}', ResAdd= '{resadd}', ActAdd='{resadd}'
Where IDClient = '{id}'";
var command = new SqlCommand(changeQuery, dateDase.getConnection());
command.ExecuteNonQuery(); } }
dateDase.closeConnection(); }
private void textBox11_TextChanged(object sender, EventArgs e)
{ Search(dataGridView1); }
private void button2_Click(object sender, EventArgs e)
{ deleteRow();
ClearFields(); }
private void button4_Click(object sender, EventArgs e)
{ Update(); }
private void Chage()
{ var selectedRowIndex = dataGridView1.CurrentCell.RowIndex;
var id = textBox1.Text;
var name = textBox2.Text;
var suname = textBox3.Text;
var otch = textBox4.Text;
int tel;
int serpas;
int idpas;
var wholshass = textBox8.Text;
var whempas = textBox9.Text;
var resadd = textBox10.Text;
if (dataGridView1.Rows[selectedRowIndex].Cells[0].Value.ToString() != string.Empty)
{ if (int.TryParse(textBox5.Text, out tel) && int.TryParse(textBox6.Text, out serpas) && int.TryParse(textBox7.Text, out idpas))
{ dataGridView1.Rows[selectedRowIndex].SetValues(id, name, suname, otch, tel, serpas, idpas, whempas, whempas, resadd);
dataGridView1.Rows[selectedRowIndex].Cells[10].Value = RowState.Modified; }
else
{MessageBox.Show("Ошибка");}}}
private void button3_Click(object sender, EventArgs e)
{ Chage();
ClearFields();}
private void pictureBox3_Click(object sender, EventArgs e)
{ ClearFields();}}}
Листинг формы добавление нового клиента:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace ТурФирма
{ public partial class Form3 : Form
{ DataBase dataBase = new DataBase();
public Form3()
{ InitializeComponent();
StartPosition = FormStartPosition.CenterScreen; }
private void button1_Click(object sender, EventArgs e)
44
{ dataBase.openConnection();
var name = textBox2.Text;
var suname = textBox3.Text;
var otch = textBox4.Text;
int tel;
int serpas;
int idpas;
var wholshass = textBox8.Text;
var whempas = textBox9.Text;
var resadd = textBox10.Text;
if(int.TryParse(textBox5.Text, out tel) && int.TryParse(textBox6.Text, out serpas) && int.TryParse(textBox7.Text, out idpas))
{ var addQuery = $"insert into clientage (NameClient, SurnameClient, OtchClient, Tel, SerPas, IDPas, WhoIssPas, WhenPas,
ResAdd, ActAdd) values ('{name}', '{suname}','{otch}', '{tel}', '{serpas}', '{idpas}', '{wholshass}', '{whempas}', '{resadd}', '{resadd}' )";
var comand = new SqlCommand(addQuery, dataBase.getConnection());
comand.ExecuteNonQuery();
MessageBox.Show("Запись успешно создана!,", "Успех", MessageBoxButtons.OK, MessageBoxIcon.Information);
this.Close(); }
else
{ MessageBox.Show("Ошибка");}
dataBase.closeConnection();}}}
Листинг формы отели:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
using System.Reflection;
namespace ТурФирма
{ public partial class Form4 : Form
{ DataBase dateDase = new DataBase();
int selectedRow;
public Form4()
{ InitializeComponent();
StartPosition = FormStartPosition.CenterScreen; }
private void CreateColumns()
{ dataGridView1.Columns.Add("IDHotel", "id");
dataGridView1.Columns.Add("NameHotel", "Название");
dataGridView1.Columns.Add("CatHotel", "Категория");
dataGridView1.Columns.Add("Country", "Страна");
dataGridView1.Columns.Add("City", "Город");
dataGridView1.Columns.Add("Tel", "Телефон");
dataGridView1.Columns.Add("RoomRatePerNight", "Стоимость номера в сутки");
dataGridView1.Columns.Add("Pitan", "Питание");
dataGridView1.Columns.Add("IsNew", String.Empty); }
private void ClearFields()
{ textBox1.Text = "";
textBox2.Text = "";
textBox3.Text = "";
textBox4.Text = "";
textBox5.Text = "";
textBox6.Text = "";
textBox7.Text = "";
textBox8.Text = "";
textBox11.Text = ""; }
private void ReadSingleRow(DataGridView dgw, IDataRecord record)
{ int v = dgw.Rows.Add(record.GetInt32(0), record.GetString(1), record.GetString(2), record.GetString(3), record.GetString(4),
record.GetInt32(5), record.GetString(6), record.GetString(7), RowState.ModifiedNew); }
private void RefreshDataGrid(DataGridView dgw)
{ dgw.Rows.Clear();
string queryString = $"select * from hotel";
SqlCommand command = new SqlCommand(queryString, dateDase.getConnection());
dateDase.openConnection();
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{ ReadSingleRow(dgw, reader); }
reader.Close();}
private void Form4_Load(object sender, EventArgs e)
{ CreateColumns();
RefreshDataGrid(dataGridView1); }
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
selectedRow = e.RowIndex;
45
if (e.RowIndex >= 0)
{ DataGridViewRow row = dataGridView1.Rows[selectedRow];
textBox1.Text = row.Cells[0].Value.ToString();
textBox2.Text = row.Cells[1].Value.ToString();
textBox3.Text = row.Cells[2].Value.ToString();
textBox4.Text = row.Cells[3].Value.ToString();
textBox5.Text = row.Cells[4].Value.ToString();
textBox6.Text = row.Cells[5].Value.ToString();
textBox7.Text = row.Cells[6].Value.ToString();
textBox8.Text = row.Cells[7].Value.ToString();} }
private void pictureBox2_Click(object sender, EventArgs e)
{ RefreshDataGrid(dataGridView1);
ClearFields();}
private void button1_Click(object sender, EventArgs e)
{ Form5 frm = new Form5();
frm.Show();}
private void Search(DataGridView dgw)
{ dgw.Rows.Clear();
string searchStrind = $"select * from hotel where concat (IDHotel, NameHotel, CatHotel, Country, City, Tel, RoomRatePerNight,
Pitan) like '%" + textBox11.Text + "%'";
SqlCommand com = new SqlCommand(searchStrind, dateDase.getConnection());
dateDase.openConnection();
SqlDataReader read = com.ExecuteReader();
while (read.Read())
{ ReadSingleRow(dgw, read);}
read.Close(); }
private void deleteRow()
{ int index = dataGridView1.CurrentCell.RowIndex;
dataGridView1.Rows[index].Visible = false;
if (dataGridView1.Rows[index].Cells[0].Value.ToString() == string.Empty)
{ dataGridView1.Rows[index].Cells[8].Value = RowState.Deleted;
return; }
dataGridView1.Rows[index].Cells[8].Value = RowState.Deleted; }
private void Update()
{ dateDase.openConnection();
for (int index = 0; index < dataGridView1.Rows.Count; index++)
{ var rowState = (RowState)dataGridView1.Rows[index].Cells[8].Value;
if (rowState == RowState.Existed)
continue;
if (rowState == RowState.Deleted)
{ var id = Convert.ToInt32(dataGridView1.Rows[index].Cells[0].Value);
var deleteQuery = $"delete from hotel where IDHotel = {id}";
var command = new SqlCommand(deleteQuery, dateDase.getConnection());
command.ExecuteNonQuery();}
if (rowState == RowState.Modified)
{ var id = dataGridView1.Rows[index].Cells[0].Value.ToString();
var name = dataGridView1.Rows[index].Cells[1].Value.ToString();
var cathot = dataGridView1.Rows[index].Cells[2].Value.ToString();
var country = dataGridView1.Rows[index].Cells[3].Value.ToString();
var city = dataGridView1.Rows[index].Cells[4].Value.ToString();
var tel = dataGridView1.Rows[index].Cells[5].Value.ToString();
var room= dataGridView1.Rows[index].Cells[6].Value.ToString();
var pitan = dataGridView1.Rows[index].Cells[7].Value.ToString();
var changeQuery = $"update hotel set NameHotel = '{name}', CatHotel = '{cathot}', Country = '{country}', City = '{city}' , Tel =
'{tel}', RoomRatePerNight = '{room}', Pitan = '{pitan}' Where IDHotel = '{id}'";
var command = new SqlCommand(changeQuery, dateDase.getConnection());
command.ExecuteNonQuery();} }
dateDase.closeConnection(); }
private void textBox11_TextChanged(object sender, EventArgs e)
{ Search(dataGridView1); }
private void button2_Click(object sender, EventArgs e)
{ deleteRow();
ClearFields();}
private void button4_Click(object sender, EventArgs e)
{ Update(); }
private void Chage()
{ var selectedRowIndex = dataGridView1.CurrentCell.RowIndex;
var id = textBox1.Text;
var name = textBox2.Text;
var cathor = textBox3.Text;
var country = textBox4.Text;
var city = textBox5.Text;
int tel;
var room = textBox7.Text;
var pitan = textBox8.Text;
if (dataGridView1.Rows[selectedRowIndex].Cells[0].Value.ToString() != string.Empty)
{ if (int.TryParse(textBox6.Text, out tel))
{ dataGridView1.Rows[selectedRowIndex].SetValues(id, name, cathor, country, city, tel, room, pitan);
dataGridView1.Rows[selectedRowIndex].Cells[8].Value = RowState.Modified;}
46
else
{ MessageBox.Show("Ошибка");}}}
private void button3_Click(object sender, EventArgs e)
{ Chage();
ClearFields();}
private void pictureBox3_Click(object sender, EventArgs e)
{ ClearFields();}}}
Листинг формы добавление нового отеля:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
namespace ТурФирма
{ public partial class Form5 : Form
{ DataBase dataBase = new DataBase();
public Form5()
{ InitializeComponent();
StartPosition = FormStartPosition.CenterScreen; }
private void button1_Click(object sender, EventArgs e)
{ dataBase.openConnection();
var name = textBox2.Text;
var cathot = textBox3.Text;
var country = textBox4.Text;
var city = textBox5.Text;
int tel;
var room = textBox7.Text;
var pitan = textBox8.Text;
if (int.TryParse(textBox6.Text, out tel))
{ var addQuery = $"insert into hotel (NameHotel, CatHotel, Country, City, Tel, RoomRatePerNight, Pitan) values ('{name}',
'{cathot}','{country}', '{city}', '{tel}', '{room}', '{pitan}')";
var comand = new SqlCommand(addQuery, dataBase.getConnection());
comand.ExecuteNonQuery();
MessageBox.Show("Запись успешно создана!,", "Успех", MessageBoxButtons.OK, MessageBoxIcon.Information);
this.Close(); }
else
{ MessageBox.Show("Ошибка");}
dataBase.closeConnection();}}}
Листинг формы страны:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
namespace ТурФирма
{ public partial class Form7 : Form
{ DataBase dateDase = new DataBase();
int selectedRow;
public Form7()
{ InitializeComponent();
StartPosition = FormStartPosition.CenterScreen;}
private void CreateColumns()
{ dataGridView1.Columns.Add("IDCountry", "id");
dataGridView1.Columns.Add("Country", "Название");
dataGridView1.Columns.Add("Climate", "Климат");
dataGridView1.Columns.Add("SeasonStartDate", "Дата начала сезона");
dataGridView1.Columns.Add("SeasonEndDate", "Дата окончания сезона");
dataGridView1.Columns.Add("HavingAVisa", "Наличие визы");
dataGridView1.Columns.Add("IsNew", String.Empty);}
private void ClearFields()
47
{ textBox1.Text = "";
textBox2.Text = "";
textBox3.Text = "";
textBox4.Text = "";
textBox5.Text = "";
textBox6.Text = "";
textBox11.Text = "";}
private void ReadSingleRow(DataGridView dgw, IDataRecord record)
{ int v = dgw.Rows.Add(record.GetInt32(0), record.GetString(1), record.GetString(2), record.GetString(3), record.GetString(4),
record.GetString(5), RowState.ModifiedNew);}
private void RefreshDataGrid(DataGridView dgw)
{ dgw.Rows.Clear();
string queryString = $"select * from Country ";
SqlCommand command = new SqlCommand(queryString, dateDase.getConnection());
dateDase.openConnection();
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{ ReadSingleRow(dgw, reader);}
reader.Close();}
private void Form7_Load(object sender, EventArgs e)
{ CreateColumns();
RefreshDataGrid(dataGridView1);}
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{ selectedRow = e.RowIndex;
if (e.RowIndex >= 0)
{ DataGridViewRow row = dataGridView1.Rows[selectedRow];
textBox1.Text = row.Cells[0].Value.ToString();
textBox2.Text = row.Cells[1].Value.ToString();
textBox3.Text = row.Cells[2].Value.ToString();
textBox4.Text = row.Cells[3].Value.ToString();
textBox5.Text = row.Cells[4].Value.ToString();
textBox6.Text = row.Cells[5].Value.ToString();}}
private void pictureBox2_Click(object sender, EventArgs e)
{ RefreshDataGrid(dataGridView1);
ClearFields();}
private void button1_Click(object sender, EventArgs e)
{ Form8 frm = new Form8();
frm.Show();}
private void Search(DataGridView dgw)
{ dgw.Rows.Clear();
string searchStrind = $"select * from Country where concat (IDCountry, Country, Climate, SeasonStartDate, SeasonEndDate,
HavingAVisa) like '%" + textBox11.Text + "%'";
SqlCommand com = new SqlCommand(searchStrind, dateDase.getConnection());
dateDase.openConnection();
SqlDataReader read = com.ExecuteReader();
while (read.Read())
{ ReadSingleRow(dgw, read);}
read.Close();}
private void deleteRow()
{ int index = dataGridView1.CurrentCell.RowIndex;
dataGridView1.Rows[index].Visible = false;
if (dataGridView1.Rows[index].Cells[0].Value.ToString() == string.Empty)
{ dataGridView1.Rows[index].Cells[6].Value = RowState.Deleted;
return; }
dataGridView1.Rows[index].Cells[6].Value = RowState.Deleted; }
private void Update()
{ dateDase.openConnection();
for (int index = 0; index < dataGridView1.Rows.Count; index++)
{ var rowState = (RowState)dataGridView1.Rows[index].Cells[6].Value;
if (rowState == RowState.Existed)
continue;
if (rowState == RowState.Deleted)
{ var id = Convert.ToInt32(dataGridView1.Rows[index].Cells[0].Value);
var deleteQuery = $"delete from Country where IDCountry = {id}";
var command = new SqlCommand(deleteQuery, dateDase.getConnection());
command.ExecuteNonQuery();}
if (rowState == RowState.Modified)
{ var id = dataGridView1.Rows[index].Cells[0].Value.ToString();
var name = dataGridView1.Rows[index].Cells[1].Value.ToString();
var Climate = dataGridView1.Rows[index].Cells[2].Value.ToString();
var SeasonStartDate = dataGridView1.Rows[index].Cells[3].Value.ToString();
var SeasonEndDate = dataGridView1.Rows[index].Cells[4].Value.ToString();
var HavingAVisa = dataGridView1.Rows[index].Cells[5].Value.ToString();
var changeQuery = $"update country set Country = '{name}', Climate = '{Climate}', SeasonStartDate = '{SeasonStartDate}',
SeasonEndDate = '{SeasonEndDate}' , HavingAVisa = '{HavingAVisa}' Where IDCountry = '{id}'";
var command = new SqlCommand(changeQuery, dateDase.getConnection());
command.ExecuteNonQuery();}}
dateDase.closeConnection();}
private void textBox11_TextChanged(object sender, EventArgs e)
48
{ Search(dataGridView1);}
private void button2_Click(object sender, EventArgs e)
{ deleteRow();
ClearFields();}
private void button4_Click(object sender, EventArgs e)
{ Update();}
private void Chage()
{ var selectedRowIndex = dataGridView1.CurrentCell.RowIndex;
var id = textBox1.Text;
var name = textBox2.Text;
var Climate = textBox3.Text;
var SeasonStartDate = textBox4.Text;
var SeasonEndDate = textBox5.Text;
var HavingAVisa = textBox6.Text;
if (dataGridView1.Rows[selectedRowIndex].Cells[0].Value.ToString() != string.Empty)
{ dataGridView1.Rows[selectedRowIndex].SetValues(id, name, Climate, SeasonStartDate, SeasonEndDate, HavingAVisa);
dataGridView1.Rows[selectedRowIndex].Cells[6].Value = RowState.Modified;}}
private void button3_Click(object sender, EventArgs e)
{ Chage();
ClearFields();}
private void pictureBox3_Click(object sender, EventArgs e)
{ ClearFields();}}}
Листинг формы добавление новой страны:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
namespace ТурФирма
{ public partial class Form8 : Form
{ DataBase dataBase = new DataBase();
public Form8()
{ InitializeComponent();
StartPosition = FormStartPosition.CenterScreen;}
private void button1_Click(object sender, EventArgs e)
{ dataBase.openConnection();
var name = textBox2.Text;
var clim = textBox3.Text;
var na = textBox4.Text;
var kon = textBox5.Text;
var vis=textBox6.Text;
var addQuery = $"insert into country (Country, Climate, SeasonStartDate, SeasonEndDate, HavingAVisa) values ('{name}',
'{clim}','{na}', '{kon}', '{vis}')";
var comand = new SqlCommand(addQuery, dataBase.getConnection());
comand.ExecuteNonQuery();
MessageBox.Show("Запись успешно создана!,", "Успех", MessageBoxButtons.OK, MessageBoxIcon.Information);
this.Close();
dataBase.closeConnection();}}}
Листинг формы путевки:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Reflection;
using System.Xml.Linq;
namespace ТурФирма
{ public partial class Form9 : Form
{ DataBase dateDase = new DataBase();
int selectedRow;
public Form9()
{ InitializeComponent();
StartPosition = FormStartPosition.CenterScreen;}
49
private void CreateColumns()
{ dataGridView1.Columns.Add("IDPutevki", "id");
dataGridView1.Columns.Add("IDClient", "Код клиента");
dataGridView1.Columns.Add("DataPut", "Дата");
dataGridView1.Columns.Add("KolDay", "Количество дней");
dataGridView1.Columns.Add("IDCountry", "Код страны");
dataGridView1.Columns.Add("IDHotel", "Код отеля");
dataGridView1.Columns.Add("Price", "Цена");
dataGridView1.Columns.Add("Pay", "Оплата");
dataGridView1.Columns.Add("HavingAVisa", "Виза");
dataGridView1.Columns.Add("IsNew", String.Empty);}
private void ClearFields()
{ textBox1.Text = "";
textBox2.Text = "";
textBox3.Text = "";
textBox4.Text = "";
textBox5.Text = "";
textBox6.Text = "";
textBox7.Text = "";
textBox8.Text = "";
textBox9.Text = "";
textBox11.Text = ""; }
private void ReadSingleRow(DataGridView dgw, IDataRecord record)
{ int v = dgw.Rows.Add(record.GetInt32(0), record.GetInt32(1), record.GetString(2), record.GetInt32(3), record.GetInt32(4),
record.GetInt32(5), record.GetInt32(6), record.GetString(7), record.GetString(8), RowState.ModifiedNew);}
private void RefreshDataGrid(DataGridView dgw)
{ dgw.Rows.Clear();
string queryString = $"select * from putevki ";
SqlCommand command = new SqlCommand(queryString, dateDase.getConnection());
dateDase.openConnection();
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{ ReadSingleRow(dgw, reader);}
reader.Close();}
private void Form9_Load(object sender, EventArgs e)
{ CreateColumns();
RefreshDataGrid(dataGridView1);}
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{ selectedRow = e.RowIndex;
if (e.RowIndex >= 0)
{ DataGridViewRow row = dataGridView1.Rows[selectedRow];
textBox1.Text = row.Cells[0].Value.ToString();
textBox2.Text = row.Cells[1].Value.ToString();
textBox3.Text = row.Cells[2].Value.ToString();
textBox4.Text = row.Cells[3].Value.ToString();
textBox5.Text = row.Cells[4].Value.ToString();
textBox6.Text = row.Cells[5].Value.ToString();
textBox7.Text = row.Cells[6].Value.ToString();
textBox8.Text = row.Cells[7].Value.ToString();
textBox9.Text = row.Cells[8].Value.ToString();}}
private void pictureBox2_Click(object sender, EventArgs e)
{
RefreshDataGrid(dataGridView1);
ClearFields();}
private void button1_Click(object sender, EventArgs e)
{ Form10 frm = new Form10();
frm.Show();}
private void Search(DataGridView dgw)
{ dgw.Rows.Clear();
string searchStrind = $"select * from utevki where concat (IDPutevki, IDClient, DataPut, KolDay, IDCountry, IDHotel, Price, Pay,
HavingAVisa) like '%" + textBox11.Text + "%'";
SqlCommand com = new SqlCommand(searchStrind, dateDase.getConnection());
dateDase.openConnection();
SqlDataReader read = com.ExecuteReader();
while (read.Read())
{ ReadSingleRow(dgw, read);}
read.Close();}
private void deleteRow()
{ int index = dataGridView1.CurrentCell.RowIndex;
dataGridView1.Rows[index].Visible = false;
if (dataGridView1.Rows[index].Cells[0].Value.ToString() == string.Empty)
{ dataGridView1.Rows[index].Cells[9].Value = RowState.Deleted;
return;}
dataGridView1.Rows[index].Cells[9].Value = RowState.Deleted;}
private void Update()
{ dateDase.openConnection();
for (int index = 0; index < dataGridView1.Rows.Count; index++)
{ var rowState = (RowState)dataGridView1.Rows[index].Cells[9].Value;
if (rowState == RowState.Existed)
continue;
50
if (rowState == RowState.Deleted)
{ var id = Convert.ToInt32(dataGridView1.Rows[index].Cells[0].Value);
var deleteQuery = $"delete from putevki where IDPutevki = {id}";
var command = new SqlCommand(deleteQuery, dateDase.getConnection());
command.ExecuteNonQuery();}
if (rowState == RowState.Modified)
{ var id = dataGridView1.Rows[index].Cells[0].Value.ToString();
var IDClient = dataGridView1.Rows[index].Cells[1].Value.ToString();
var DataPut = dataGridView1.Rows[index].Cells[2].Value.ToString();
var KolDay = dataGridView1.Rows[index].Cells[3].Value.ToString();
var IDCountry = dataGridView1.Rows[index].Cells[4].Value.ToString();
var IDHotel = dataGridView1.Rows[index].Cells[5].Value.ToString();
var Price = dataGridView1.Rows[index].Cells[6].Value.ToString();
var Pay = dataGridView1.Rows[index].Cells[7].Value.ToString();
var HavingAVisa = dataGridView1.Rows[index].Cells[8].Value.ToString();
var changeQuery = $"update putevki set IDClient = '{IDClient}', DataPut = '{DataPut}', KolDay = '{KolDay}', IDCountry =
'{IDCountry}' , IDHotel = '{IDHotel}', Price='{Price}',Pay = '{Pay}', HavingAVisa = '{HavingAVisa}' Where IDPutevki = '{id}'";
var command = new SqlCommand(changeQuery, dateDase.getConnection());
command.ExecuteNonQuery();}}
dateDase.closeConnection();}
private void textBox11_TextChanged(object sender, EventArgs e)
{ Search(dataGridView1);}
private void button2_Click(object sender, EventArgs e)
{ deleteRow();
ClearFields();}
private void button4_Click(object sender, EventArgs e)
{ Update();}
private void Chage()
{ var selectedRowIndex = dataGridView1.CurrentCell.RowIndex;
var id = textBox1.Text;
var IDClient = textBox2.Text;
var DataPut = textBox3.Text;
int KolDay;
int IDCountry;
int IDHotel;
int Price;
var Pay = textBox8.Text;
var HavingAVisa = textBox9.Text;
if (dataGridView1.Rows[selectedRowIndex].Cells[0].Value.ToString() != string.Empty)
{ if (int.TryParse(textBox4.Text, out KolDay) && int.TryParse(textBox5.Text, out IDCountry) && int.TryParse(textBox6.Text, out
IDHotel) && int.TryParse(textBox7.Text, out Price))
{dataGridView1.Rows[selectedRowIndex].SetValues(id,IDClient, DataPut, KolDay, IDCountry, IDHotel, Price, Pay,
HavingAVisa);
dataGridView1.Rows[selectedRowIndex].Cells[9].Value = RowState.Modified;}
else
{ MessageBox.Show("Ошибка");}}}
private void button3_Click(object sender, EventArgs e)
{ Chage();
ClearFields();}
private void pictureBox3_Click(object sender, EventArgs e)
{ ClearFields();}}}
Листинг формы добавление новой путевки:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
namespace ТурФирма
{ public partial class Form10 : Form
{ DataBase dataBase = new DataBase();
public Form10()
{ InitializeComponent();
StartPosition = FormStartPosition.CenterScreen;}
private void button1_Click(object sender, EventArgs e)
{ dataBase.openConnection();
var IDClient = textBox3.Text;
var DataPut = textBox4.Text;
int KolDay;
int IDCountry;
int IDHotel;
int Price;
51
var Pay = textBox9.Text;
var HavingAVisa = textBox10.Text;
if (int.TryParse(textBox5.Text, out KolDay) && int.TryParse(textBox6.Text, out IDCountry) && int.TryParse(textBox7.Text, out
IDHotel) && int.TryParse(textBox8.Text, out Price))
{var addQuery = $"insert into putevki (IDClient, DataPut, KolDay, IDCountry, IDHotel, Price, Pay, HavingAVisa) values
('{IDClient}', '{DataPut}', '{KolDay}', '{IDCountry}', '{IDHotel}', '{Price}', '{Pay}', '{HavingAVisa}' )";
var comand = new SqlCommand(addQuery, dataBase.getConnection());
comand.ExecuteNonQuery();
MessageBox.Show("Запись успешно создана!,", "Успех", MessageBoxButtons.OK, MessageBoxIcon.Information);
this.Close();}
else
{MessageBox.Show("Ошибка");}
dataBase.closeConnection();}}}
52
Download