Помощь в написании студенческих работ
Антистрессовый сервис

База данных туристической фирмы

КурсоваяПомощь в написанииУзнать стоимостьмоей работы

Delphi содержит полноценный текстовый редактор типа Brief, назначения клавиш в котором соответствуют принятым в Windows стандартам, а глубина иерархии операций Undo неограниченна. Как это стало уже обязательным, реализовано цветовое выделение различных лексических элементов программы. Процесс построения приложения достаточно прост. Нужно выбрать форму (в понятие формы входят обычные, диалоговые… Читать ещё >

База данных туристической фирмы (реферат, курсовая, диплом, контрольная)

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ Курсовая работа на тему: База данных туристической фирмы Мишкино, 2014

Введение

Глава I. Базы данных и Delphi

1.1 Понятие «базы данных»

1.2 Структурные элементы базы данных

1.3 Нормализация отношений и типы связей

1.4 Этапы создания базы данных

1.5 Язык программирования Delphi

1.6 Основные компоненты Delphi

1.7 Компоненты Delphi для работы с базой данных

Глава II. Разработка приложения «Турфирма»

2.1 Разработка базы данных «Турфирма»

2.1.1 Инфологическая модель

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

2.1.3 Создание базы данных в Access

2.2 Разработка приложения СУБД «Турфирма»

2.2.1 Структура программы

2.2.2 Модуль данных

2.2.3 Главная форма программы

2.2.4 Создание форм для просмотра и редактирования списков данных

2.2.5 Создание форм для редактирования туров и путевок

2.2.6 Создание формы для оформления заказов

2.3 Тестирование программы Заключение Литература Приложение

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

Современные системы управления базами данных (СУБД) в основном являются приложениями Windows, так как данная среда позволяет более полно использовать возможности персональной ЭВМ. Снижение стоимости высокопроизводительных ПК обусловил не только широкий переход к среде Windows, где разработчик программного обеспечения может в меньшей степени заботиться о распределении ресурсов, но также сделал программное обеспечение для персонального компьютера в целом и СУБД в частности менее критичными к аппаратным ресурсам компьютера.

На сегодняшний день разработчик не связан рамками какого-либо конкретного пакета разработки СУБД, а в зависимости от поставленной задачи может использовать самые разные приложения. Поэтому, более важным представляется общее направление развития СУБД и других средств разработки приложений в настоящее время.

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

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

Глава I. Базы данных и Delphi

1.1 Понятие «базы данных»

База данных — совокупность взаимосвязанных данных, совместно хранимых в одном или нескольких компьютерных файлах.

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

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

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

Принято выделять три типа баз данных: иерархические, сетевые и реляционные.

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

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

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

Microsoft Access, Oracle, MS SQL Server, MySQL, InterBase, FoxPro, PostgreSQL и Paradox — все эти программы построены на базе реляционной модели данных.

1.2 Структурные элементы базы данных

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

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

· имя (название);

· тип (символьный, числовой);

· длина (например, 15 байт, причем будет определяться максимально возможным количеством символов);

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

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

Файл (таблица) — совокупность экземпляров записей одной структуры.

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

1.3 Нормализация отношений и типы связей

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

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

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

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

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

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

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

Такое определение функциональной зависимости позволяет при анализе всех взаимосвязей реквизитов предметной области выделить самостоятельные информационные объекты.

В случае составного ключа вводится понятие функционально полной зависимости.

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

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

Третья нормальная форма.

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

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

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

один к одному (1:1);

один ко многим (1: М);

многие ко многим (М: М).

Связь один к одному (1:1) предполагает, что в каждый момент времени одному экземпляру информационного объекта, А соответствует не более одного экземпляра информационного объекта В и наоборот.

При связи один ко многим (1:М) одному экземпляру информационного объекта, А соответствует 0, 1 или более экземпляров объекта В, но каждый экземпляр объекта В связан не более чем с 1 экземпляром объекта А.

Связь многие ко многим (М:М) предполагает, что в каждый момент времени одному экземпляру информационного объекта, А соответствует 0, 1 или более экземпляров объекта В и наоборот.

1.4 Этапы создания базы данных

С точки зрения конечного пользователя процесс создания базы данных можно представить в виде трех этапов:

— инфологическое (концептуальное) описание баз данных;

— логическое проектирование баз данных;

— физическое проектирование баз данных.

Инфологическое, или концептуальное, описание. Исходными данными для осуществления инфологического проектирования базы данных является словесная и документальная характеристика предметной области, которая может быть получена в результате предварительного (предпроектного) исследования. Разработка концептуальной модели предметной области основана на анализе информационных потребностей конечных пользователей и тех требований, которые они предъявляют к создаваемой базе данных. На этом этапе, прежде всего, решается вопрос о том, какие данные должны храниться в базе и какого типа информационные выборки и отчеты могут потребоваться пользователю БД. Мифологическая (концептуальная) модель предметной области обычно представляется в виде графической схемы, на которой показан состав и взаимосвязи хранимых данных. В процессе работы инфологическая модель может дополняться новыми данными в связи с, изменяющимися потребностями пользователя.

Логическое проектирование. На этом этапе осуществляется выбор подходящей системы управления базами данных и представление инфологической модели предметной области в форме структуры базы данных конкретной СУБД. Для реляционных баз данных на этом этапе производится описание структуры каждой таблицы и их взаимосвязей.

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

При проектировании баз данных решаются две основных проблемы:

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

При проектирования баз данных осуществляются следующие этапы :

— сбор сведений о предметной области (анализ потребностей и описание предметной области с использованием процессного и непроцессного подхода);

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

— анализ собранных сведений о предметной области: классификация, формализация и интеграция структурных элементов описания, формализация как структурных, так и процедурных ограничений целостности элементов в будущей модели, определение динамики экземпляров объектов предметной области;

— синтез концептуальной модели базы данных: проектирование целостной концептуальной схемы БД на выбранном языке семантического моделирования;

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

1.5 Язык программирования Delphi

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

Пакет Delphi — продолжение линии компиляторов языка Pascal корпорации Borland. Pascal как язык очень прост, а строгий контроль типов данных способствует раннему обнаружению ошибок и позволяет быстро создавать надежные и эффективные программы. Корпорация Borland постоянно обогащала язык. Когда-то в версию 4.0 были включены средства раздельной трансляции, позже, начиная с версии 5.5, появились объекты, а в состав шестой версии пакета вошла полноценная библиотека классов Turbo Vision, реализующая оконную систему в текстовом режиме работы видеоадаптера. Это был один из первых продуктов, содержавших интегрированную среду разработки программ.

Среда программирования имеет несколько отдельных окон: меню и инструментальные панели, Object Inspector (в котором можно видеть свойства объекта и связанные с ним события), окна визуального построителя интерфейсов (Visual User Interface Builder), Object Browser (позволяющее изучать иерархию классов и просматривать списки их полей, методов и свойств), окна управления проектом (Project Manager) и редактор.

Delphi содержит полноценный текстовый редактор типа Brief, назначения клавиш в котором соответствуют принятым в Windows стандартам, а глубина иерархии операций Undo неограниченна. Как это стало уже обязательным, реализовано цветовое выделение различных лексических элементов программы. Процесс построения приложения достаточно прост. Нужно выбрать форму (в понятие формы входят обычные, диалоговые, родительские и дочерние окна MDI), задать ее свойства и включить в нее необходимые компоненты (видимые и, если понадобится, неотображаемые): меню, инструментальные панели, строку состояния и т. п., задать их свойства и далее написать (с помощью редактора исходного кода) обработчики событий. Object Browser Окна типа Object Browser стали неотъемлемой частью систем программирования на объектно-ориентированных языках. Работа с ними становится возможной сразу после того, как вы скомпилировали приложение.

Projeсt Manager — это отдельное окно, где перечисляются модули и формы, составляющие проект. При каждом модуле указывается маршрут к каталогу, в котором находится исходный текст. Жирным шрифтом выделяются измененные, но еще не сохраненные части проекта. В верхней части окна имеется набор кнопок: добавить, удалить, показать исходный текст, показать форму, задать опции и синхронизировать содержимое окна с текстом файла проекта, т. е. с головной программой на языке Pascal.

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

Этот костяк называется Visual Component Library (VCL). В VCL есть такие стандартные элементы управления, как строки редактирования, статические элементы управления, строки редактирования со списками, списки объектов. Еще имеются такие компоненты, которые ранее были доступны только в библиотеках третьих фирм: табличные элементы управления, закладки, многостраничные записные книжки. Все объекты разбиты на страницы по своей функциональности и представлены в палитре компонент.

1.6 Основные компоненты Delphi

Рассмотрим основные компоненты Delphi.

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

Информация о формах хранится в двух типах файлов — .dfm и .pas, причем первый тип файла — двоичный — хранит образ формы и ее свойства, второй тип описывает функционирование обработчиков событий и поведение компонент. Оба файла автоматически синхронизируются Delphi, так что если добавить новую форму проект, связанный с ним файл .pas автоматически будет создан, и его имя будет добавлено в проект.

Такая синхронизация и делает Delphi two-way-инструментом, обеспечивая полное соответствие между кодом и визуальным представлением. Как только добавляется новый объект или код, Delphi устанавливает «кодовую синхронизацию» между визуальными элементами и соответствующими им кодовыми представлениями.

Two-way tools — однозначное соответствие между визуальным проектированием и классическим написанием текста программы. Это означает, что разработчик всегда может видеть код, соответствующий тому, что он построил при помощи визуальных инструментов и наоборот.

TMainMenu позволяет поместить главное меню в программу. При помещении TMainMenu на форму это выглядит, как просто иконка. Иконки данного типа называют невизуальным компонентом, поскольку они невидимы во время выполнения программы.

TLabel служит для отображения текста на экране. Можно изменить шрифт и цвет метки, если дважды щелкнуть на свойство Font в Инспекторе Объектов. Это легко сделать и во время выполнения программы, написав всего одну строчку кода.

TEdit — стандартный управляющий элемент Windows для ввода. Он может быть использован для отображения короткого фрагмента текста и позволяет пользователю вводить текст во время выполнения программы.

TCheckBox отображает строку текста с маленьким окошком рядом. В окошке можно поставить отметку, которая означает, что что-то выбрано.

TGroupBox используется для визуальных целей и для указания Windows, каков порядок перемещения по компонентам на форме (при нажатии клавиши TAB). TPanel — управляющий элемент, похожий на TGroupBox, используется в декоративных целях. Чтобы использовать TPanel, можно просто поместить его на форму и затем положите другие компоненты на него. Теперь при перемещении TPanel будут передвигаться и эти компоненты. TPanel используется также для создания линейки инструментов и окна статуса. TBitBtn — кнопка, на ней можно разместить картинку. TBitBtn имеет несколько предопределенных типов (bkClose, bkOK и др), при выборе которых кнопка принимает соответствующий вид.

база туристический программирование нормализация

1.7 Компоненты Delphi для работы с базой данных

Каждое приложение, использующее базы данных, обычно имеет по крайней мере по одному компоненту следующих типов:

· Компоненты — наборы данных (Data set), непосредственно связывающиеся с базой данных. Для ADO это такие компоненты, как ADOTable, ADOQuery, ADOStoredProc. Для других технологий имеются аналогичные компоненты наборов данных.

· Компонент — источник данных (Data source), осуществляющий обмен информацией между компонентами первого типа и компонентами визуализации и управления данными. Таким компонентом является DataSource.

· Компоненты визуализации данных и управления данными, такие, как DBGrid, DBTExt, DBEdit и множество других.

Связь этих компонентов друг с другом и с базой данных можно представить схемой приведенной ниже:

Рисунок 1. Схема взаимодействия компонентов Delphi с базой данных

Глава II. Разработка приложения «Турфирма»

2.1 Разработка базы данных «Турфирма»

2.1.1 Инфологическая модель

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

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

Таким образом, база данных должна содержать следующие сведения:

· Туры (название, описание)

· Путевки (на какое количество человек, стоимость, скидка, проживание, питание)

· Страны (название страны, необходимость визы)

· Туроператоры (операторы, информация об операторах)

· Заказы (фамилия заказчика, статус оплаты)

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

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

Для каждого информационного объекта выделяются ключи, т. е. те реквизиты, которые однозначно идентифицируют записи. Например, для информационного объекта ТУР уникальными (неповторяющимися) являются реквизиты: код тура и название тура. Тот, и другой реквизит однозначно идентифицирует конкретный тур, который может быть выбран в качестве ключевого. Однако в целях оптимизации размера базы данных и удобства работы с ней в качестве ключа обычно выбираются кодовые реквизиты. Таким образом, ключами для выделенных информационных объектов будут соответственно код тура, код страны, код путевки, код заказа, код туроператора. При описании модели принято ключевые поля подчеркивать.

Таким образом, структурирование данных предметной области позволило выделить информационные объекты и описывающие их реквизиты:

ТУР (код тура, название тура, описание тура);

ПУТЕВКА (код путевки, количество человек, на которых она рассчитана, статус (обычная или «горящая»), стоимость, питание и проживание);

СТРАНА (код страны, название страны, необходимость визы);

ТУРОПЕРАТОР (код туроператора, название, информация о туроператоре)

ЗАКАЗЫ (код заказа, клиент, статус оплаты)

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

Взаимосвязи будут следующими:

2.1.3 Создание базы данных в Access

В Access создадим пять таблиц со следующими свойствами полей:

Туры:

§ Код_тура (ключевое поле, тип — счетчик)

§ Код_страны (тип — числовой, для связи с таблицей «Страны»)

§ Код_туроператора (числовое поле, для связи с таблицей «Туроператоры»)

§ Название тура (текстовое поле)

§ Описание (поле Мемо)

Туроператоры:

§ Код_туроператора (ключевое поле, тип — счетчик)

§ Название туроператора (текстовое поле)

§ Контактная информация (поле Мемо)

Страны:

§ Код_страны (ключевое поле, тип — счетчик)

§ Название страны (текстовое поле)

§ Необходимость визы (логическое поле)

Путевки:

§ Код_путевки (ключевое поле, тип — счетчик)

§ Код_тура (числовое поле, для связи с таблицей Туры)

§ Количество человек (числовое поле)

§ Питание (логическое поле)

§ Проживание (логическое поле)

§ Полная стоимость (денежное поле)

§ Скидка (числовое поле)

§ Стоимость со скидкой (денежное поле)

§ Статус (логическое поле)

Заказы:

§ Код_заказа (ключевое поле, тип — счетчик)

§ Код_путевки (числовое поле, для связи с таблицей Путевки)

§ Клиент (текстовое поле)

§ Оплата (логическое поле)

Схема данных представлена на рисунке 2.

Рисунок 2. Схема базы данных «Турфирма»

2.2 Разработка приложения СУБД «Турфирма»

2.2.1 Структура программы

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

Для редактирования таблиц «Туры» и «Путевки», также создадим для каждой таблицы отдельные формы. Для просмотра и редактирования таблиц «Города» и «Туроператоры» создадим также еще две формы. Еще по одной форме будут для просмотра списка заказов и для создания (оформления) нового заказа.

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

Рисунок 3. Структура программы

2.2.2 Модуль данных

Создадим новый проект, сохраним его как TurFirma.

Для подключения базы данных к проекту, добавим компонент Data Module (File -> New -> DataModule). На этом компоненте будем располагать невизуальные компоненты для работы с базой данных. Для дальнейшего удобства программирования, свойство Name у этого компонента изменим на DM (сокращенное от DataModule). На него добавим со вкладки ADO один компонент ADOConnection и пять компонентов ADOTable.

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

Рисунок 4. Окно ConnectionString компонента ADOConnection1.

Нажав кнопку Build, вызовем окно свойств.

Рисунок 5. Свойства связи с данными

Выберем строку Microsoft Office Jet 4.0 OLE DB Provider (драйвер для подключения к Access 2003), нажмем кнопку далее. В поле «Источник данных» укажем путь к нашей базе данных с именем и расширением. Если создаваемое приложение и сама база данных находятся в одном каталоге на жестком диске компьютера, то достаточно указать только имя файла базы данных и расширение. Далее нажмем кнопку «Проверить подключение» и если подключение удалось, то нажимаем кнопку Ok.

У компонента ADOConnection1 изменим свойство LoginPromt на значение false (исключим запрос пароля при обращении к базе данных).

Наша база данных состоит из пяти таблиц. Каждую таблицу нужно подключить к компоненту ADOTable. Покажем подключение на примере таблицы Туры.

Выделим компонент ADOTable1. Изменим его свойства:

§ Name на Tur,

§ Connection: ADOConnection,

§ TableName: Туры,

§ Active: true.

Аналогично подключаем оставшиеся четыре таблицы, меняя свойство Name компонентов ADOTable на:

Туроператоры — Operator,

Путевки — Putevka,

Заказы — Zakaz,

СтраныContry.

Для дальнейшего подключения этих таблиц к компонентам для визуализации данных, добавим на DataModule еще пять компонентов DataSource со вкладки DataAccess.

Свойства DataSet и Name каждого из них изменим. На примере таблицы Туры, которую подключили к компоненту Tur:

DataSet: Tur,

Name: DSTur.

На рисунке 6 представлен компонент DataModule.

Рисунок 6. Компонент DataModule.

В таблицах «Страны», «Путевки», «Заказы» существуют поля, имеющие логический тип. Например, в таблице «Страны» логический тип имеет поле «Виза». Это поле хранит одно из двух значений: true или False. Для пользователя эти слова могут быть не совсем понятны. Понятнее было бы, если выводились значения для поля «Виза», к примеру, «нужна» или «не нужна». Чтобы исправить это неудобство, необходимо вызвать редактор полей, дважды щелкнув на компонент Contry. В контекстном меню выбрать пункт «Add all fields». Отобразится список полей. Выделив поле «Виза», в окне инспектора объектов (Object Inspector), на вкладке Events найти строку OnGetText. Дважды щелкнув по ней сформируется процедура. В ней необходимо написать следующий код:

if Contry. Fields[2]. AsBoolean //если значение поля True

then Text:= 'необходима' //то выводим запись «необходима»

else Text:= 'не нужна'; //в противном случае — «не нужна»

В результате вместо слов true или false будут отображаться «необходима» или «не нужна».

Аналогично можно задать значения полей «Питание» и «Проживание» для таблицы «Путевки» и для поля «Оплата» таблицы «Заказы».

2.2.3 Главная форма программы

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

Та форма, которая создалась по умолчания в момент создания проекта, и будет являться главной. Изменим свойство FormStyle этой формы на fsMDIForm.

Добавим на эту форму компонент MainMenu со вкладки Standard. Этот компонент будет являться главным меню формы. Напишем пункты и подпункты главного меню:

§ Меню

· Выход

§ Списки данных

· Туроператоры

· Страны

§ Туры и путевки

· Туры и путевки

· Редактировать туры

· Редактировать путевки

§ Заказы

· Просмотр

· Оформить

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

Рисунок 7. Вид главой формы программы

Для перехода на другую форму из главного меню, на событие OnClick (на нажатие) необходимого пункта меню, выполняется код:

FormN:= TFormN. Create (Application);

где FormN — необходимая форма для отображения. Этот код создает экземпляр формы. Т. е. сколько раз мы нажмем на пункт меню для этой формы, столько же раз она и отобразиться.

2.2.4 Создание форм для просмотра и редактирования списков данных

Создадим форму для просмотра и редактирования списка Туроператоры.

Добавим новую форму в проект (File -> New -> Form). Свойство FormStyle этой формы изменим на fsMDIChild. На событие OnClose этой формы напишем код: Action:= caFree. Этот код нужен для того, чтобы при закрытии формы форма не «сворачивалась», а закрывалась.

Добавим на форму компоненты DBGrid, DBMemo и DBNavigator со вкладки DataContols. Свойство DataSource этих компонентов изменим на DM.DSOperator. Тем самым мы подключили компоненты к набору данных Operator, которая подключена в свою очередь к таблице Туроператоры. Компонент DBMemo нужен для отображения поля «Информация о туроператоре» таблицы «Туроператоры». Чтобы определить это поле для компонента DBMemo, изменим свойство DataField этого компонента на «Информация о туроператоре».

На главной форме приложения в главном меню выберем пункт Списки данных -> Туроператоры. На событие OnClick напишем код для открытия формы: Form3:= TForm3. Create (Application). Чтобы форма не открывалась вместе с главной формой при запуске программы, выберем в Delphi в основном меню следующие пункты: Project -> Options. Появится окно для изменения свойств приложения. На вкладке Forms в поле Auto-create forms выберем строчку Form3 и при помощи кнопки «>» переместим ее в поле Available forms. После этого форма для просмотра списка туроператоров будет создаваться только после выбора пункта меню Списки данных -> Туроператоры на основной форме приложения.

Внешний вид формы для просмотра списка туроператоров показан на рисунке 8.

Рисунок 8. Форма для просмотра списка туроператоров

По аналогии создаются формы для просмотра и редактирования списков «Страны», «Туры и путевки», «Заказы».

2.2.5 Создание форм для редактирования туров и путевок

Создадим новую форму для редактирования туров. На форму добавим компонент DBGrid, на которой будем отображать список туров, причем будем выводить только поля «Код тура» и «Название тура». Для этого, дважды щелкнув по компоненту DBGrid, появится окно для редактирования полей сетки DBGrid. Выбрав все поля, кроме указанных выше, изменим у них свойство Visible с True на False. По аналогии с формами из п. 2.2.4 настоящей работы, добавим компоненты DBMemo для вывода значения поля «Информация о туре» и DBNavigator для навигации по таблице «Туры».

Так как в таблице «Туры» отображены только сведения о коде страны и коде туроператора, что неудобно для пользователя, то добавим два компонента DBLookupComboBox (вкладка DataControls). Этот компонент выводит данные в виде выпадающего списка. Рассмотрим список из таблицы «Страны». Изменим свойства одного компонента DBLookupComboBox:

DataSource: DM. DSTur

DataField: Код_страны

Этим мы показываем, что компонент ссылается на таблицу «Туры» поле «Код страны».

Далее, в этом же компоненте настраиваем список для отображения:

ListSource: DM. DSContry

ListField: Название страны

KeyField: Код страны

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

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

Для ввода и редактирования поля «Название тура» добавим на форму компонент DBEdit. Свойство DataSource изменим на DM. DSTur, а DataField на «Название тура». Таким образом, этот компонент будет отображать поле «Название тура» текущей записи таблицы «Туры»

Внешний вид формы «Редактирование туров» представлен на рисунке 9.

Рисунок 9. Форма «Редактирование туров»

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

2.2.6 Создание формы для оформления заказов

Создадим форму для оформления заказов (продажи) путевок. На форме разместим два компонента DBGrid, отображающие таблицы «Туры» и «Путевки». Для ввода фамилии заказчика (покупателя) добавим со вкладки Standard компонент Edit, а для определения статуса оплаты — CheckBox.

Внешний вид формы показан на рисунке 10.

Рисунок 10. Форма оформления заказов.

Для ввода данных в таблицу «Заказы», добавим кнопку BitBtn. Свойство Caption определим как «Оформить». На событие OnClick (нажатие) напишем код:

{если компонент Edit1 пустой, т. е. не введена фамилия заказчика, то выводим наводящее сообщение}

if Edit1. Text=''

then ShowMessage ('введите фамилию заказчика')

else

{если фамилия заказчика введена, то}

begin

DM.Zakaz.Insert; {в таблице «Заказы» добавляем строку для ввода новых значений}

DM.Zakaz.Fields[1]. Value:= DM.Putevka.Fields[0]. Value; {в поле код_путевки заносим текущее значение кода путевки таблицы «Путевки"}

DM.Zakaz.Fields[2]. AsString:= Edit1. Text; {Заносим фамилию заказчика}

DM.Zakaz.Fields[3]. AsBoolean:= CheckBox1. Checked; {заносим статус оплаты}

DM.Zakaz.Post; {сохраняем введенные изменения}

Form8.Close; {закрываем форму}

end;

Если пользователь передумал оформлять заказ, то на этот случай добавим кнопку «Отменить», на событие OnClick которой будет следующий код:

Form8.Close; {закрываем форму без изменений}

2.3 Тестирование программы

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

Аналогично и для форм «Туры и путевки», «Редактирование путевок» и «Редактирование туров».

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

Заключение

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

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

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

1. Базы данных. Разработка приложений: Л. В. Рудикова — Москва, БХВ-Петербург, 2006 г.- 496 с.

2. Программирование баз данных в Delphi 7: Фаронов В. В. — Издательство: Питер, 2006

3. Программирование баз данных в Delphi: Ачкасов В. Ю. — СамГТУ. Год: 2010. — 255с.

4. Технология ADO. Электронный ресурс] -: http://it.kgsu.ru/DelADO

5. Delphi. Изучаем запросы к базам данных и язык SQL. Электронный ресурс] -: http://www.snkey.net/books/delphi/ch4−5.html

6. Microsoft Access. Материал из свободной энциклопедии. [Электронный ресурс]-: http://ru.wikipedia.org/wiki/Microsoft_Access

Приложение

Листинг модуля данных (Data Module)

unit UnitDM;

interface

uses SysUtils, Classes, DB, ADODB;

type

TDM = class (TDataModule)

ADOConnection1: TADOConnection;

Contry: TADOTable;

Tur: TADOTable;

Putevka: TADOTable;

Zakaz: TADOTable;

Operator: TADOTable;

DSContry: TDataSource;

DSTur: TDataSource;

DSPutevka: TDataSource;

DSZakaz: TDataSource;

DSOperator: TDataSource;

ContryDSDesigner: TAutoIncField;

ContryDSDesigner2: TWideStringField;

ContryDSDesigner3: TBooleanField;

Tur_: TAutoIncField;

Tur2: TIntegerField;

Tur3: TIntegerField;

TurDSDesigner: TWideStringField;

TurDSDesigner2: TMemoField;

TurField: TStringField;

TurField2: TStringField;

TurField3: TStringField;

Putevka_: TAutoIncField;

Putevka2: TIntegerField;

PutevkaDSDesigner: TIntegerField;

PutevkaDSDesigner2: TBooleanField;

PutevkaDSDesigner3: TBooleanField;

PutevkaDSDesigner4: TBCDField;

PutevkaDSDesigner5: TBooleanField;

PutevkaDSDesigner6: TIntegerField;

PutevkaDSDesigner7: TBCDField;

Zakaz_: TAutoIncField;

Zakaz2: TIntegerField;

ZakazDSDesigner: TWideStringField;

ZakazDSDesigner2: TBooleanField;

ZakazField: TIntegerField;

ZakazField2: TStringField;

ZakazField3: TIntegerField;

ZakazField4: TIntegerField;

ZakazField5: TIntegerField;

procedure ContryDSDesigner3GetText (Sender: TField; var Text: String;

DisplayText: Boolean);

procedure TurField2GetText (Sender: TField; var Text: String;

DisplayText: Boolean);

procedure PutevkaDSDesigner2GetText (Sender: TField; var Text: String;

DisplayText: Boolean);

procedure PutevkaDSDesigner3GetText (Sender: TField; var Text: String;

DisplayText: Boolean);

procedure PutevkaDSDesigner5GetText (Sender: TField; var Text: String;

DisplayText: Boolean);

procedure PutevkaDSDesigner7GetText (Sender: TField; var Text: String;

DisplayText: Boolean);

procedure ZakazDSDesigner2GetText (Sender: TField; var Text: String;

DisplayText: Boolean);

procedure ZakazField3GetText (Sender: TField; var Text: String;

DisplayText: Boolean);

private

{ Private declarations }

public

{ Public declarations }

end;

var

DM: TDM;

implementation

{$R *.dfm}

procedure TDM. ContryDSDesigner3GetText (Sender: TField; var Text: String;

DisplayText: Boolean);

begin

if Contry. Fields[2]. AsBoolean then Text:= 'необходима'

else Text:= 'не нужна';

end;

procedure TDM. TurField2GetText (Sender: TField; var Text: String;

DisplayText: Boolean);

begin

if Tur. Fields[6]. AsBoolean then Text:= 'да'

else Text:= 'нет';

end;

procedure TDM. PutevkaDSDesigner2GetText (Sender: TField; var Text: String;

DisplayText: Boolean);

begin

if Putevka. Fields[3]. AsBoolean then Text:='Включено';

end;

procedure TDM. PutevkaDSDesigner3GetText (Sender: TField; var Text: String;

DisplayText: Boolean);

begin

if Putevka. Fields[4]. AsBoolean then Text:='Включено';

end;

procedure TDM. PutevkaDSDesigner5GetText (Sender: TField; var Text: String;

DisplayText: Boolean);

begin

if Putevka. fields[6]. AsBoolean then Text:= 'ДА';

end;

procedure TDM. PutevkaDSDesigner7GetText (Sender: TField; var Text: String;

DisplayText: Boolean);

begin

if Putevka. Fields[7]. AsString='' then Text:= FloatToStr (Putevka.Fields[5]. AsInteger)

else

Text:= FloatToStr (Putevka.Fields[5]. AsInteger*(1-Putevka.Fields[7].AsInteger/100));

end;

procedure TDM. ZakazDSDesigner2GetText (Sender: TField; var Text: String;

DisplayText: Boolean);

begin

if Zakaz. Fields[3]. AsBoolean then Text:= 'Оплачено'

else Text:= 'не оплачено';

end;

procedure TDM. ZakazField3GetText (Sender: TField; var Text: String;

DisplayText: Boolean);

begin

if Zakaz. Fields[8]. AsString='' then Text:= floattostr (Zakaz.Fields[7]. AsFloat)

else Text:= Floattostr (Zakaz.Fields[7]. AsInteger*(1-Zakaz.Fields[8].AsInteger/100));

end;

end.

Листинг Главной формы программы

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, Menus;

type

TForm1 = class (TForm)

MainMenu1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

N4: TMenuItem;

N5: TMenuItem;

N6: TMenuItem;

N7: TMenuItem;

N8: TMenuItem;

N9: TMenuItem;

N10: TMenuItem;

N11: TMenuItem;

N12: TMenuItem;

procedure FormCreate (Sender: TObject);

procedure N11Click (Sender: TObject);

procedure N5Click (Sender: TObject);

procedure N4Click (Sender: TObject);

procedure N9Click (Sender: TObject);

procedure N10Click (Sender: TObject);

procedure N12Click (Sender: TObject);

procedure N7Click (Sender: TObject);

procedure N8Click (Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

uses UnitDM, UnitContry, UnitOperator, UnitTurPut, UnitTur, UnitPut,

UnitZakaz, UnitOform;

{$R *.dfm}

procedure TForm1. FormCreate (Sender: TObject);

begin

Form1.Top:= 0;

Form1.Left:= 0;

Form1.Width:= Screen. Width;

Form1.Height:= Screen. Height — 100;

end;

procedure TForm1. N11Click (Sender: TObject);

begin

Application.Terminate;

end;

procedure TForm1. N5Click (Sender: TObject);

begin Form2:= TForm2. Create (Application); end;

procedure TForm1. N4Click (Sender: TObject);

begin Form3:= TForm3. Create (Application); end;

procedure TForm1. N9Click (Sender: TObject);

begin

Form4:= TForm4. Create (Application);

end;

procedure TForm1. N12Click (Sender: TObject);

begin Form6:= TForm6. Create (Application); end;

procedure TForm1. N7Click (Sender: TObject);

begin Form7:= TForm7. Create (Application); end;

procedure TForm1. N8Click (Sender: TObject);

begin Form8:= TForm8. Create (Application); end;

end.

Листинг формы «Заказы»

unit UnitZakaz;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, Grids, DBGrids, StdCtrls, Buttons;

type

TForm7 = class (TForm)

DBGrid1: TDBGrid;

Panel1: TPanel;

BitBtn1: TBitBtn;

BitBtn2: TBitBtn;

BitBtn3: TBitBtn;

procedure BitBtn1Click (Sender: TObject);

procedure FormClose (Sender: TObject; var Action: TCloseAction);

procedure BitBtn3Click (Sender: TObject);

procedure BitBtn2Click (Sender: TObject);

private { Private declarations } public

end;

var

Form7: TForm7;

implementation

uses UnitDM, UnitOform;

{$R *.dfm}

procedure TForm7. BitBtn1Click (Sender: TObject);

begin Close; end;

procedure TForm7. FormClose (Sender: TObject; var Action: TCloseAction);

begin Action:= caFree; end;

procedure TForm7. BitBtn3Click (Sender: TObject);

begin

if MessageBox (Handle, PChar ('Удаление заказа'), PChar ('Удалить заказ?'), mb_YesNo)=idYes

then DM.Zakaz.Delete;

end;

procedure TForm7. BitBtn2Click (Sender: TObject);

begin

Form8:= TForm8. Create (Application);

end;

end.

Показать весь текст
Заполнить форму текущей работой