Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовой Проект, Базы Данных, документация.docx
Скачиваний:
21
Добавлен:
27.10.2018
Размер:
2 Мб
Скачать

4 Описание программы

4.1 Общие сведения

Созданная программа, под названием «BDCP» (Базы Данных Курсовой Проект), призвана упростить работу и ускорить работу экскурсионного бюро.

Программа обладает широким функционалом, для каждой таблицы есть определённые доступные действия. Присутствует удобный и быстрый поиск по таблицам: Клиенты, Заказы, Экскурсии, Места и их полям.

Есть возможность формирования расширенного отчёта для заказа, сделанного клиентом, а также отчёт о клиенте и список экскурсий, которые он заказал.

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

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

Удобная функция автоматизации, которая присутствует при заполнении информации о месте, даёт возможность не заполнять вручную информацию, а получить её автоматически из сети интернет.

4.2 Вызов и загрузка

Для запуска и корректной работы программы, она должна быть запущена в одной папке с файлами: «Курсовой БД.exe», «help.chm», «db1.mdb». Где файл «Курсовой БД.exe» является главным файлом, который нужно запускать, файл «help.chm» содержит справку к программе, а файл «db1.mdb» содержит базу данных программы.

При запуске файла «Курсовой БД.exe», откроется главное окно программы, рисунок 4.1, после чего можно приступить к работе.

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

Минимальные системные требования: PIII-800 МГц, ОЗУ 512 Мб, Windows XP + .NET Framework 4.0.

4.3 Назначение и логическая структура

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

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

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

Как видно на рисунке 4.1, при работе с выбранной таблицей, указывается активная таблица, также, список доступных операций в пункте меню «Действия», автоматически меняется в зависимости от той или иной таблицы.

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

Переход к формам с отчётами осуществляется с помощью выбора пункта меню «Отчет» и «Распечатать» в меню «Действия».

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

Рисунок 4.2 – Заказ экскурсии

4.4 Описание физической модели данных

База данных программы создана в СУБД MS Access 2003. Содержит такие таблицы: Клиенты, Заказы, Порядок, Экскурсии, Места.

Таблица ‘Клиенты’, содержит информацию о клиентах экскурсионного бюро. Содержит такие поля как ‘ID клиента’, ‘ФИО’, ‘Контактные_данные’, ‘Статус’. Конструктор таблицы с клиентами представлен на рисунке 4.10,

Поле ‘ID Клиента’, является уникальным, совпадения не допускаются, оно является счётчиком, размер поля – длинное целое. Используется для однозначного определения клиента в таблице. Поле ‘Контактные_данные’, свойства поля аналогичны свойствам поля ‘ФИО’. Поле ‘Статус’, информация о поле представлена на рисунке 4.3.

Рисунок 4.3 – Информация о поле ‘Статус’

Таблица ‘Места’, поле ‘ID места’, аналогично полю ‘ID клиента’ в таблице клиентов. Остальные три поля: ‘Климат’, ‘Условия’, ‘Местоположение’, являются одинаковыми и информация о них представлена на рисунке 4.4. У поля ‘Местоположение’ размер поля равен 200 символов. Структура таблицы представлена на рисунке 4.11.

Рисунок 4.4 – Поля в таблице ‘Места’

Таблица ‘Экскурсии’ имеет поле ‘ID экскурсии’, которое является уникальным, совпадения не допускаются, оно является счётчиком, размер поля – длинное целое. Используется для однозначного определения экскурсии в таблице. Структура таблицы представлена на рисунке 4.13.

Далее поля ‘Стоимость’ и ‘Длительность’ схожи между собой, информация о них на рисунке 4.5.

Рисунок 4.5 – Свойства полей ‘Стоимость’ и ‘Длительность’

Поля ‘Услуги’ и ‘Название’ являются текстовыми, и также имеют одинаковые свойства, которые представлены на рисунке 4.6.

Рисунок 4.6 – Свойства полей ‘Услуги’ и ‘Название’

Таблица ‘Заказы’, содержит информацию о заказанных клиентами экскурсиях, и дате на которую они были заказаны. Ключевые поля: ‘ID клиента’, ‘Дата’. Конструктор таблицы с заказами, представлен на рисунке 4.9.

Таблица содержит три поля. Два из них, ‘ID клиента’ и ‘ID экскурсии’, являются одинаковыми по своим свойствам, их свойства на рисунке 4.7.

Рисунок 4.7 – Свойства полей ‘ID клиента’, ‘ID экскурсии’

Поле ‘Дата’ является обязательным полем, не индексированным.

Таблица ‘Порядок’, содержит три поля: ‘ID места’, ‘ID экскурсии’, ‘№ маршрута’. Все три поля являются одинаковыми по своим свойствам, они представлены на рисунке 4.8. Поля ‘ID экскурсии’ и ‘№ маршрута’ являются ключевыми. Структура таблицы представлена на рисунке 4.12.

Рисунок 4.8 – Свойства полей: ‘ID места’, ‘ID экскурсии’, ‘№ маршрута’

Рисунок 4.9 – Конструктор таблицы с заказами

Рисунок 4.10 – Конструктор таблицы с клиентами

Рисунок 4.11 – Структура таблицы ‘Места’

Рисунок 4.12 – Структура таблицы ‘Порядок’

Рисунок 4.13 – Структура таблицы ‘Экскурсии’

4.5 Описание программной реализации

При открытии программы, можно сразу приступать к работе. На рисунке 4.8 представлено главное окно программы. При выборе пункта меню «Просмотр таблиц», открывается подменю, где отображен список доступных к просмотру таблиц. При нажатии на одну из них, в элемент отображения таблиц, в главном окне программы, будет загружена таблица, которая была выбрана.[2] Таблица загружается из базы данных с которой работает программа. Также при выборе таблицы, вкладки в пункте меню «Действия», изменяются, для каждой таблицы есть определенные действия. Изменения доступности вкладок происходит при выборе таблицы. Также при выборе таблицы, на форме указывается таблица, которая сейчас активна и доступна к просмотру, на рисунке 4.14 это таблица «Экскурсии».

Рисунок 4.14 – Главная форма

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

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

Рисунок 4.15 – Форма с поиском

При выборе пункта меню «Собственный запрос», будет открыто новое окно, которое показано на рисунке 4.16. Предоставляется возможность опытному пользователю обратиться с собственным запросом к базе данных программы. При нажатии на кнопку «Выполнить запрос», запрос, введённый в текстовом поле, будет отправлен на выполнение.

При успешном выполнении, результаты запроса будут отображены в элементе отображения таблиц, который находится в нижней части формы. При нажатии кнопки «Очистить», текстовое поле примет вид как на рисунке 4.16. При нажатии кнопки «Закрыть», окно будет закрыто, а вы будете возвращены к главному окну программы.

Рисунок 4.16 – Окно запроса

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

Рисунок 4.17 – Помощь

При выборе действия добавить, для таблицы клиентов, будет открыт рисунок, который представлен на рисунке 4.18.

Рисунок 4.18 – Добавление клиента

Кнопка «Добавить», становиться доступной при внесении изменений в одно из трёх полей.

При нажатии на кнопку, проверяется заполнение полей, если текстовые поля содержат менее 10 символов, будет выдано сообщение об ошибке, если же содержат более 10 символов, клиент будет добавлен в базу данных и выдано соответствующее сообщение.

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

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

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

При выборе пункта меню «Заказать экскурсию», в действиях для клиента, будет открыта новая форма, рисунок 4.19.

Рисунок 4.19 – Заказ экскурсии

На форме есть возможность просмотреть все экскурсии, которые есть в базе данных программы, при этом выполняется запрос на выборку всех экскурсий с таблицы экскурсий, результаты будут отображены на элементе формы для отображения таблиц. Кнопка «Удалить», предназначена для удаления уже заказанных экскурсий, при этом выполняется удаление заказа на указанную дату для указанного клиента из таблицы заказов в базе данных. Кнопка «Показать заказы», даёт возможность просмотреть все экскурсии, которые заказаны данным клиентом, информация будет получена с помощью запроса на выборку из таблицы экскурсий и заказов. Результат будет отображён в элементе на форме для отображения таблиц.

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

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

При нажатии на кнопку «Просмотр отчёта», будет сгенерирован автоматический отчёт о выбранной клиентом экскурсии, с помощью выполнения запросов к базе данных. Результат будет представлен в форме, которая будет открыта после подготовки отчёта, рисунок 4.20.

Рисунок 4.20 – Отчёт по экскурсии

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

Рисунок 4.21 – Распечатка таблицы

При выборе пункта меню «Отчёт», для выбранного клиента в таблице, будет сформирован отчёт, посредством выборки из нескольких таблиц базы данных информации о клиенте, его экскурсиях и датах заказа. Шаблон отчёта представлен на рисунке 4.22.[3]

Рисунок 4.22 – Шаблон отчёта

При выборе пункта меню «Добавить», для таблицы экскурсий, будет открыта форма, представленная на рисунке 4.23.

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

При редактировании, есть возможность изменять порядок мест и данные внесённые ранее.

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

При выборе пункта меню «Добавить», для места будет открыто окно, как на рисунке 4.24. В нижней части формы, есть кнопка «Автозаполнение полей». При нажатии на эту кнопку, производится обращение к сайту в сети Интернет, с которого получается информация о месте, условиях и климате. Автозаполнение будет работать в том случае, если ввести в поле «Местоположение» название места, к примеру ‘Киев’, ‘Украина’, и нажать кнопку «Автозаполнение полей».

Рисунок 4.23 – Добавление экскурсии

После внесения информации в поля, по нажатию кнопки «Добавить», программа внесёт введённые данные в базу данных и сообщит об успешном выполнении добавления данных. Или же выдаст сообщение об ошибках, если таковые были допущены.

Рисунок 4.24 – Добавление места

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

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

Рисунок 4.25 – Просмотр места

Рисунок 4.26 – Изменение места

Выход из программы осуществляется выбором подпункта «Закрыть», в пункте меню «Файл» на главной форме программы.

4.6 Описание задачи автоматизации

Задача автоматизации состоит в том, чтобы упростить пользователю программы ввод данных о месте, таких как климат и условия. Действия, которые необходимо выполнить пользователю, это ввести название места, о котором ему нужно ввести данные в форме. Затем нажать кнопку «Автозаполнение полей».[1]

Программа соединяется с сайтом о туризме, по адресу: http://gorods.turmir.com/, где представлен широчайший список городов, стран и мест планеты. После этого она ищет на сайте название места, которое ввёл пользователь программы. Если такое место было найдено, программа открывает страницу с информацией о найденном месте, производит выборку информации и загружает её в поля на форме для ввода данных о месте.

Данные могут быть занесены как в поле ‘Климат’, так и в поле ‘Условия’, это зависит от того, какие данные были найдены на странице программой. Если слово ‘Климат’, встречается на странице, программа получает все данные, начиная с этого слова в пределах 255 символом. В эти 255 символов входит описание о климате. На сайте описание климата места занимает от 2, 3 и более предложений. Общее количество символов описания климата места превышает число 255 символов на несколько сотен символов. Таким образом, вся главная информация, которая идёт первой о климате будет предоставлена пользователю. Если слово ‘Климат’, не было первоначально найдено на странице с информацией о месте, программа будет брать информацию с начала описания места, в котором представлены основные данные о месте и интересные факты. Программа считает 255 символов с начала описания места, где приведена главная информация о расположении, и другие важные факты, после чего выведет их в поле ‘Условия’ на форме. После того как программа получила данные с сайта, пользователь может воспользоваться этими данными, исправить их или же отвергнуть и ввести свои данные.

В случае если место на сайте найдено не было, будет выдано сообщение о том, что место не найдено.

ВЫВОДЫ

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

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

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

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

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

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

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

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

ПЕРЕЧЕНЬ ССЫЛОК

1. Трей Нэш, C# 2010. Ускоренный курс для профессионалов: Пер. с-

англ. [Текст]/ Трей Нэш – М.: ООО «И.Д. Вильямс», 2010. – 592 с. ил.

2. Агуров П.В., C#. Сборник рецептов. [Текст]/ П.В. Агуров – СПб.: БХВ-

Петербург, 2007. – 432 с. ил.

3. Сеппа Д., Microsoft ADO .NET.: Пер. с англ. [Текст]/ Д. Сеппа – М.:

Издательско-торговый дом «Русская Редакция», 2003. – 640 с. ил.

4. Дурович А.П., Организация туризма: Учебное пособие. [Текст]/ А.П.

Дурович, Н.И. Кабушкин, Т.М. Сергеева, – Минск: Новое знание, 2003. – 632 с.

5. Буйленко В.Ф., Туризм. [Текст]/ В.Ф. Буйленко – Ростов-на-Дону:

Феникс, 2008. – 416 с.

Приложение А

Исходный код функций программы

Код, отвечающий за задачу автоматизации:

try

{

if (location_textBox.TextLength < 3)

{

MessageBox.Show("Введите в поле 'Местоположение', название страны или города!", "Заполните поле!", MessageBoxButtons.OK, MessageBoxIcon.Information);

return;

}

else

{

climat_textBox.Text = service_textBox.Text = "";

location_textBox.Text += " ";

string content = getResponse("http://gorods.turmir.com/");

string j = "";

for (int i = content.IndexOf(">"+location_textBox.Text.Substring(0, location_textBox.Text.IndexOf(" ")));i > 0; i--)

{

if (content[i] != '=')

j += content[i];

else

break;

}

j = inverse(j);

j = j.Replace("'","").Replace(">","");

content = getResponse(j);

if (content.IndexOf("Климат") != -1)

{

for (int i = content.IndexOf("Климат"); i < content.IndexOf("Климат") + 255; i++)

climat_textBox.Text += content[i];

}else

for (int i = content.IndexOf("Отдых. Туризм. Путешествия. Страны мира - Социальная сеть путешественников.'></a>") + "Отдых. Туризм. Путешествия. Страны мира - Социальная сеть путешественников.'></a>".Length; i < content.IndexOf("Отдых. Туризм. Путешествия. Страны мира - Социальная сеть путешественников.'></a>") + "Отдых. Туризм. Путешествия. Страны мира - Социальная сеть путешественников.'></a>".Length + 255; i++)

service_textBox.Text += content[i];

if (climat_textBox.Text.IndexOf("html") != -1)

{

MessageBox.Show("Информации о таком месте нет в базе!", "Нет места в базе!", MessageBoxButtons.OK, MessageBoxIcon.Information);

climat_textBox.Text = "";

return;

}

if (service_textBox.Text.IndexOf("html") != -1)

{

service_textBox.Text = "";

MessageBox.Show("Информации о таком месте нет в базе!", "Нет места в базе!", MessageBoxButtons.OK, MessageBoxIcon.Information);

return;

}

climat_textBox.Text = climat_textBox.Text.Replace("<br />", "").Replace("—", "").Replace("́", "").Replace("–", "").Replace("<b>", "").Replace("</b>", "").Replace(" ", "").Replace("—", "").Replace("<br>", "").Replace("<p align=\"justify\">", "").Replace("<strong>", "").Replace("</strong>", "");

service_textBox.Text = service_textBox.Text.Replace("<br />", "").Replace("—", "").Replace("́", "").Replace("–", "").Replace("<b>", "").Replace("</b>", "").Replace(" ", "").Replace("—", "").Replace("<br>", "").Replace("<p align=\"justify\">", "").Replace("<strong>", "").Replace("</strong>", "");

}

}

catch

{

MessageBox.Show("Информации о таком месте нет в базе!", "Нет места в базе!", MessageBoxButtons.OK, MessageBoxIcon.Information);

return;

}

Формирование отчёта об экскурсии:

StreamWriter stream = new StreamWriter("2.html");

stream.Write("<html><meta http-equiv='content-type' content='text/html; charset=unicode' />" + "<body text=black font='times new roman'>");

stream.Write("<p><h1><center>Отчет о клиенте с номером:" + main_datagrid.SelectedRows[0].Cells[0].Value.ToString() + "</h1></center>");

stream.Write("<font size=11px><table border='1' cellpadding='0' cellspacing='0' width=100%>");

stream.Write("<td>ФИО:<td>" + main_datagrid.SelectedRows[0].Cells[1].Value.ToString());

stream.Write("<td>Контактные данные:<td>" + main_datagrid.SelectedRows[0].Cells[2].Value.ToString());

stream.Write("<td>Выделенная сумма на отдых:<td>" + main_datagrid.SelectedRows[0].Cells[3].Value.ToString()+" грн");

stream.Write("</table>");

stream.Write("<h3><center>Информация о заказанных экскурсиях:</h3></center>");

stream.Write("<font size=11px><table border='1' cellpadding='0' cellspacing='0' width=100%>");

stream.Write("<td>Дата заказа<td>Название<td>Длительность<td>Стоимость<td>Услуги<tr>");

try

{

OleDbConnection sqlconn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db1.mdb");

sqlconn.Open();

OleDbDataAdapter oda = new OleDbDataAdapter("SELECT Экскурсии.*,Заказы.`Дата` FROM Экскурсии, Заказы WHERE Экскурсии.`Id экскурсии`=Заказы.`Id экскурсии` AND Заказы.`Id клиента`=" + main_datagrid.SelectedRows[0].Cells[0].Value.ToString(), sqlconn);

DataTable dt = new DataTable();

oda.Fill(dt);

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

{

stream.Write("<td>" + dt.Rows[i].ItemArray[5].ToString().Substring(0,10));

stream.Write("<td>" + dt.Rows[i].ItemArray[4].ToString());

stream.Write("<td>" + dt.Rows[i].ItemArray[1].ToString());

stream.Write("<td>" + dt.Rows[i].ItemArray[2].ToString());

stream.Write("<td>" + dt.Rows[i].ItemArray[3].ToString());

stream.Write("<tr>");

}

sqlconn.Close();

}

catch

{

MessageBox.Show("Error");

}

stream.Write("</html>");

stream.Close();

view v = new view(new Uri(System.Windows.Forms.Application.ExecutablePath.ToLower().Replace("курсовой бд.exe","2.html")),true);

v.Show();

Поиск:

status_label.Text = table;

string zaproc = "SELECT * FROM " + table +" WHERE ";

switch (table)

{

case "Клиенты":

if (fio.Checked)

{

zaproc+= table+".`"+fio.Text+"` LIKE '%" + textBox1.Text + "%'";

if (contact.Checked || status.Checked)

zaproc += " OR ";

}

if(contact.Checked)

{

zaproc += table + ".`" + contact.Text + "` LIKE '%" + textBox1.Text + "%'";

if (status.Checked)

zaproc += " OR ";

}

if (status.Checked)

{

zaproc += table + ".`" + status.Text + "` LIKE '%" + textBox1.Text + "%'";

}

break;

case "Экскурсии":

if (name.Checked)

{

zaproc += table + ".`" + name.Text + "` LIKE '%" + textBox1.Text + "%'";

if ((price.Checked || service.Checked)|| dlit.Checked)

zaproc += " OR ";

}

if(dlit.Checked)

{

zaproc += table + ".`" + dlit.Text + "` LIKE '%" + textBox1.Text + "%'";

if (price.Checked || service.Checked)

zaproc += " OR ";

}

if (price.Checked)

{

zaproc += table + ".`" + price.Text + "` LIKE '%" + textBox1.Text + "%'";

if (service.Checked)

zaproc += " OR ";

}

if (service.Checked)

{

zaproc += table + ".`" + service.Text + "` LIKE '%" + textBox1.Text + "%'";

}

break;

case "Места":

if (climat.Checked)

{

zaproc += table + ".`" + climat.Text + "` LIKE '%" + textBox1.Text + "%'";

if (uslov.Checked || place.Checked)

zaproc += " OR ";

}

if(uslov.Checked)

{

zaproc += table + ".`" + uslov.Text + "` LIKE '%" + textBox1.Text + "%'";

if (place.Checked)

zaproc += " OR ";

}

if (place.Checked)

{

zaproc += table + ".`" + place.Text + "` LIKE '%" + textBox1.Text + "%'";

}

break;

case "Заказы":

DateTime d = new DateTime(dateTimePicker1.Value.Year, dateTimePicker1.Value.Month, dateTimePicker1.Value.Day);

DataTable dt = заказыTableAdapter.GetDataBy2(d.Date);

main_datagrid.DataSource = dt;

return;

}

try

{

OleDbConnection sqlconn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db1.mdb");

sqlconn.Open();

OleDbDataAdapter oda = new OleDbDataAdapter(zaproc, sqlconn);

DataTable dt = new DataTable();

oda.Fill(dt);

main_datagrid.DataSource = dt;

sqlconn.Close();

}

catch

{

MessageBox.Show("Не выбрано поле по которому осуществлять поиск!");

}

Изменение подменю «Действия»:

private void status_label_TextChanged(object sender, EventArgs e)

{

отчетToolStripMenuItem.Visible = просмотрМестаToolStripMenuItem.Visible = заказатьЭкскурсиюToolStripMenuItem.Visible = распечататьToolStripMenuItem.Visible = просмотрЭкскурсииToolStripMenuItem.Visible = false;

редектироватьToolStripMenuItem.Visible = добавитьToolStripMenuItem.Visible = true;

switch (status_label.Text)

{

case "Клиенты":

заказатьЭкскурсиюToolStripMenuItem.Visible = true;

распечататьToolStripMenuItem.Visible = true;

отчетToolStripMenuItem.Visible = true;

return;

case "Экскурсии":

распечататьToolStripMenuItem.Visible = true;

просмотрЭкскурсииToolStripMenuItem.Visible = true;

return;

case "Места":

распечататьToolStripMenuItem.Visible = true;

просмотрМестаToolStripMenuItem.Visible = true;

return;

case "Заказы":

редектироватьToolStripMenuItem.Visible=добавитьToolStripMenuItem.Visible=false;

return;

case "Порядок":

редектироватьToolStripMenuItem.Visible = добавитьToolStripMenuItem.Visible = false;

return;

}

}

Удаление:

public void delete()

{

int firstkey = Convert.ToInt32(main_datagrid.SelectedRows[0].Cells[0].Value);

switch (status_label.Text)

{

case "Клиенты":

клиентыTableAdapter.DeleteClient(firstkey);

клиентыTableAdapter.Fill(mds.Клиенты);

break;

case "Экскурсии":

экскурсииTableAdapter.DeleteTour(firstkey);

экскурсииTableAdapter.Fill(mds.Экскурсии);

try

{

OleDbConnection sqlconn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db1.mdb");

sqlconn.Open();

OleDbDataAdapter oda = new OleDbDataAdapter("DELETE * FROM Порядок WHERE `ID экскурсии`=" + firstkey.ToString(), sqlconn);

DataTable dt = new DataTable();

oda.Fill(dt);

sqlconn.Close();

}

catch

{

MessageBox.Show("Error");

}

порядокTableAdapter.Fill(mds.Порядок);

break;

case "Порядок":

порядокTableAdapter.Delete1(firstkey, Convert.ToInt32(main_datagrid.SelectedRows[0].Cells[2].Value));

порядокTableAdapter.Fill(mds.Порядок);

break;

case "Места":

местаTableAdapter.DeletePlace(firstkey);

местаTableAdapter.Fill(mds.Места);

try

{

OleDbConnection sqlconn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db1.mdb");

sqlconn.Open();

OleDbDataAdapter oda = new OleDbDataAdapter("DELETE * FROM Порядок WHERE `ID места`=" + firstkey.ToString(), sqlconn);

DataTable dt = new DataTable();

oda.Fill(dt);

sqlconn.Close();

}

catch

{

MessageBox.Show("Error");

}

порядокTableAdapter.Fill(mds.Порядок);

break;

case "Заказы":

заказыTableAdapter.DeleteDemand(firstkey, (DateTime)main_datagrid.SelectedRows[0].Cells[2].Value);

заказыTableAdapter.Fill(mds.Заказы);

break;

}

mds.AcceptChanges();

}

Отчёт об экскурсии для клиента:

if (!print)

{

MessageBox.Show("Не указана заказанная экскурсия!");

return;

}

StreamWriter stream = new StreamWriter("1.html");

stream.Write("<html><meta http-equiv='content-type' content='text/html; charset=unicode' />" + "<body text=black font='times new roman'>");

stream.Write("<p><h1><center>Заказ на экскурсию id:" + main_datagrid.SelectedRows[0].Cells[0].Value.ToString() + "</h1></center>");

stream.Write("<font size=11px><table border='1' cellpadding='0' cellspacing='0' width=100%>");

stream.Write("<td>Вы:<td>" + fio);

stream.Write("<td>Ваш персональный номер:<td>" + idc.ToString());

stream.Write("</table>");

stream.Write("<h3><center>Информация об экскурсии:</h3></center>");

stream.Write("<font size=11px><table border='1' cellpadding='0' cellspacing='0' width=100%>");

stream.Write("<td>Название экскурсии:<td>" + main_datagrid.SelectedRows[0].Cells[4].Value.ToString() + "<td>Длительность:<td>" + main_datagrid.SelectedRows[0].Cells[1].Value.ToString() + " дней <td>Стоимость:<td>" + main_datagrid.SelectedRows[0].Cells[2].Value.ToString() + " грн<td>Услуги:<td>" + main_datagrid.SelectedRows[0].Cells[3].Value.ToString());

stream.Write("</table><p><br>");

stream.Write("<h3><center>Информация о местах прохождения экскурсии:</h3></center>");

stream.Write("<font size=11px><table border='1' cellpadding='0' cellspacing='0' width=100%>");

stream.Write("<td>Порядковый номер в экскурсии<td>Местоположение<td>Климат<td>Условия<tr>");

try

{

OleDbConnection sqlconn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db1.mdb");

sqlconn.Open();

OleDbDataAdapter oda = new OleDbDataAdapter("SELECT Места.*,Порядок.`№ маршрута` FROM Места, Порядок WHERE Места.`Id места`=Порядок.`Id места` AND Порядок.`Id экскурсии`=" + main_datagrid.SelectedRows[0].Cells[0].Value.ToString(), sqlconn);

DataTable dt = new DataTable();

oda.Fill(dt);

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

{

stream.Write("<td>" + dt.Rows[i].ItemArray[4].ToString());

stream.Write("<td>" + dt.Rows[i].ItemArray[3].ToString());

stream.Write("<td>" + dt.Rows[i].ItemArray[1].ToString());

stream.Write("<td>" + dt.Rows[i].ItemArray[2].ToString());

stream.Write("<tr>");

}

sqlconn.Close();

}

catch

{

MessageBox.Show("Error");

}

stream.Write("</table></h1><font size=4><p><br>Дата начала экскурсии:" + main_datagrid.SelectedRows[0].Cells[5].Value.ToString().Substring(0,10) + "<p><br><p><br>Розпись клиента: ___________<p><br><p><br>Розпись ответственного за экскурсию: ___________<p><br><p><br>");

stream.Write("</html>");

stream.Close();

view v = new view(new Uri(System.Windows.Forms.Application.ExecutablePath.ToLower().Replace("курсовой бд.exe","1.html")),false);

v.Show();