Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

на тему- 2013Содержание [1] Введение [2] Глава I

Работа добавлена на сайт samzan.net:

Поможем написать учебную работу

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

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 2.6.2024

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ

ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

Дипломная работа на тему:

2013
Содержание

[1] Введение

[2] Глава I. Базы данных

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

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

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

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

[2.5] 1.5 Microsoft Access

[3] Глава II. Среда Delphi как инструмент для разработки системы управления базой данных

[3.1] 2.1 Язык программирования Delphi, как средство создания СУБД

[3.2] 2.2 Основные компоненты Delphi

[3.3] 2.3 Компоненты Delphi для работы с базой данных

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

[3.3.0.2]  

[3.3.1] 2.3.1 Компонент TADOConnection 

[3.3.2] 2.3.2 Компоненты ADOTable и ADOQuery

[3.3.3] 2.3.3 Визуальные компоненты для работы с набором данных

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

[4.1] 3.1 Разработка базы данных «Турфирма»

[4.1.1] 3.1.1 Инфологическая модель

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

[4.1.3] 3.1.3 Создание базы данных в Access

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

[4.2.1] 3.2.1 Подключение базы данных к проекту

[4.2.2] 3.2.2. Создание главной формы приложения

[4.2.3] 3.2.3. Создание форм для просмотра и редактирования списков данных

[4.2.4] 3.2.4. Организация поиска туров и путевок

[4.2.5] 3.2.5. Создание формы отчета по продажам сотрудников.

[5]
Заключение

[6]
Литература

[7] Приложения

 


Введение

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

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

Среди наиболее ярких представителей систем управления базами данных можно отметить: Lotus Approach, Microsoft Access, Borland dBase, Borland Paradox, Microsoft Visual FoxPro, Microsoft Visual Basic, а также баз данных Microsoft SQL Server и Oracle, используемые в приложениях, построенных по технологии «клиент-сервер». Общепринятыми, также, являются технологи, позволяющие использовать возможности других приложений, например, текстовых процессоров, пакетов построения графиков и т.п., и встроенные версии языков высокого уровня (чаще – диалекты SQL и/или VBA) и средства визуального программирования интерфейсов разрабатываемых приложений. Поэтому уже не имеет существенного значения на каком языке и на основе какого пакета написано конкретное приложение, и какой формат данных в нем используется. Более того, стандартом «де-факто» стала «быстрая разработка приложений» или RAD (от английского Rapid Application Development), основанная на широко декларируемом в литературе «открытом подходе», то есть необходимость и возможность использования различных прикладных программ и технологий для разработки более гибких и мощных систем обработки данных.

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

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

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


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

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 Microsoft Access

Microsoft Office Access или просто Microsoft Access — реляционная СУБД корпорации Microsoft. Имеет широкий спектр функций, включая связанные запросы, связь с внешними таблицами и базами данных. Благодаря встроенному языку VBA, в самом Access можно писать приложения, работающие с базами данных.

Основные компоненты MS Access:

  •  построитель таблиц;
  •  построитель экранных форм;
  •  построитель SQL-запросов (язык SQL в MS Access не соответствует стандарту ANSI);
  •  построитель отчётов, выводимых на печать.

Они могут вызывать скрипты на языке VBA, поэтому MS Access позволяет разрабатывать приложения и БД практически «с нуля» или написать оболочку для внешней БД.

Microsoft Jet Database Engine (англ.), которая используется в качестве движка базы данных MS Access, является файл-серверной СУБД и потому применима лишь к приложениям, работающим с небольшими объёмами данных и при небольшом числе пользователей, одновременно работающих с этим данными. Непосредственно в Access отсутствует ряд механизмов, необходимых в многопользовательских БД, таких, например, как триггеры.

Встроенные средства взаимодействия MS Access со внешними СУБД с использованием интерфейса ODBC снимают ограничения, присущие Microsoft Jet Database Engine. Инструменты MS Access, которые позволяют реализовать такое взаимодействие называются «связанные таблицы» (связь с таблицей СУБД) и «запросы к серверу» (запрос на диалекте SQL, который «понимает» СУБД).

Корпорация Microsoft для построения полноценных клиент-серверных приложений на базе MS Access рекомендует использовать в качестве движка базы данных СУБД MS SQL Server. При этом имеется возможность совместить с присущей MS Access простотой инструменты для управления БД и средства разработки.

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

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

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

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

Кнопка «Сохранить» в Access тоже есть, но в Access в режиме просмотра данных она нужна, в первую очередь, для сохранения изменённого режима показа таблицы или другого объекта — то есть, для сохранения таких изменений, как:

  •  изменение ширины столбцов и высоты строк,
  •  перестановка столбцов в режиме просмотра данных, «закрепление» столбцов и освобождение закреплённых столбцов,
  •  изменение сортировки,
  •  применение нового фильтра,
  •  изменение шрифта; цвета текста, сетки и фона
  •  и т. п.

Кроме того, в Access эта кнопка нужна в режиме «Конструктор» для сохранения изменений структуры объекта базы данных, сделанных в этом режиме.

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

Корпорация Microsoft распространяет полнофункциональную версию Access как отдельно, так и совместно с другими приложениями в составе пакетов Microsoft Office Professional, Microsoft Office Professional Plus и Microsoft Office Enterprise.


Глава II. Среда Delphi как инструмент для разработки системы управления базой данных

2.1 Язык программирования 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.

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

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

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

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

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

Язык программирования Delphi базируется на Borland Object Pascal.

Кроме того, Delphi поддерживает такие низкоуровневые особенности, как подклассы элементов управления Windows, перекрытие цикла обработки сообщений Windows, использование встроенного ассемблера.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

TPopupMenu позволяет создавать всплывающие меню. Этот тип меню появляется по щелчку правой кнопки мыши на объекте, к которому привязано данное меню. У всех видимых объектов имеется свойство PopupMenu, где и указывается нужное меню. Создается PopupMenu аналогично главному меню.

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

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

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

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

TGroupBox используется для визуальных целей и для указания Windows, каков порядок перемещения по компонентам на форме (при нажатии клавиши TAB).

TRadioGroup используется аналогично TGroupBox, для группировки объектов TRadioButton.

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

TBitBtn - кнопка вроде TButton, однако на ней можно разместить картинку (glyph). TBitBtn имеет несколько предопределенных типов (bkClose, bkOK и др), при выборе которых кнопка принимает соответствующий вид. Кроме того, нажатие кнопки на модальном окне приводит к закрытию окна с соответствующим модальным результатом.

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

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

  •  Компоненты – наборы данных (Data set), непосредственно связывающиеся с базой данных. Для ADO это такие  компоненты,  как  ADOTable, ADOQuery, ADOStoredProc. Для других технологий имеются аналогичные компоненты наборов данных.
  •  Компонент –  источник  данных  (Data  source),   осуществляющий   обмен информацией между компонентами первого типа и компонентами визуализации и управления данными. Таким компонентом является DataSource.
  •  Компоненты визуализации данных и управления данными, такие,  как  DBGrid, DBTExt, DBEdit и множество других.

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

 

 

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

2.3.1 Компонент TADOConnection 

Компонент TADOConnection используется для соединения с различными источниками ADO и представляет собой версию объекта ADOConnection для Delphi.

Применение компонента TADOConnection дает разработчику ряд преимуществ:

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

В таблице 1 перечислены некоторые свойства компонента TADOConnection.

   

Таблица 1. Некоторые свойства компонента TADOConnection

Свойство

Описание

propertyConnected: Boolean;

Указывает активность соединения: True означает соединение открыто, False - закрыто.

propertyConnectionString: WideString;

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

propertyConnectionTimeout: Integer;

Указывает количество времени в секундах, отведенное на установку соединения, по умолчанию 15 с. Значение 0 приводит к неограниченному ожиданию.

propertyCursorLocation: TCursorLocation;

Указывает местоположение механизма управления курсором.

  •  clUseClient - клиентский курсор. Позволяет выполнять любые операции с данными, в том числе не поддерживаемые сервером;
  •  clUseServer - серверный курсор. Реализует только возможности сервера, но обеспечивает быструю обработку больших массивов данных.

propertyDefaultDatabase: String;

Служит для указания базы данных, используемой по умолчанию.

propertyLoginPromt: Boolean;

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

property Mode: TСonnectMode;

Указывает допустимые для данного соединения разрешения на модификацию данных:

  •  cmUnknown - разрешения еще не установлены или не определены;
  •  cmRead - для соединения установлено разрешение "только чтение";
  •  cmWrite - установлено разрешение "только запись";
  •  cmReadWrite - для соединения установлено разрешение "запись/чтение";
  •  cmShareDenyRead - разрешение на чтение для других соединений запрещено;
  •  cmShareDenyWrite - разрешение на запись для других соединений запрещено;
  •  cmShareExclusive - разрешение на открытие для других соединений запрещено;
  •  cmShareDenyNone - открытие других соединений с разрешениями запрещено.

 

2.3.2 Компоненты ADOTable и ADOQuery

Компонент TАDOTаblе обеспечивает использование в приложениях Delphi таблиц баз данных, подключенных через провайдеры OLE DB. Компонент TADOTable используется в тех случаях, когда необходимо работать с одной таблицей в базе данных.

Имя таблицы БД задается свойством TableName.

Свойство Active указывает, открыт ли набор данных.

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

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

Связь друг с другом компонентов TADOTable, работающих с разными таблицами, одна из которых главная, а другая - вспомогательная, осуществляется с помощью свойств MasterSource и MasterFields.

Так как не все провайдеры ADO обеспечивают прямое использование таблиц БД, то для доступа к ним может понадобиться запрос SQL. Если свойство TableDirect имеет значение True, осуществляется прямой доступ к таблице. В противном случае компонент генерирует соответствующий запрос.

Свойство ReadОnly позволяет включить или отключить для таблицы режим "только для чтения".

Компонент TADOQuery служит для определения SQL-операторов, позволяющих осуществить доступ к одной или нескольким таблицам в базе данных. Содержание набора определяется SQL-операторами и состоянием БД.

Компонент TADOQuery подобен компоненту TADOTable

Свойство SQL (TStrings) используется для указания одного или нескольких SQL-операторов, которые следует выполнить. В операторах могут использоваться параметры, идентификаторы которых помечаются знаком ":". Изменение параметра осуществляется изменением свойства Value по индексу в коллекции объектов Parameters. Изменение параметров возможно только при закрытом запросе. Основной метод TADOQuery - это медод ExecSQL, используемый для выполнения SQL-запроса, хранящегося в свойстве SQL.

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

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

Свойство DataSource компонента TDBGrid содержит имя компонента TDataSource, который ссылается на соответствующий НД (компоненты TTable или TQuery).

Для определения состава столбцов в TDBGrid можно использовать редактор столбцов (Columns Editor). В этом случае используются только те столбцы, которые созданы в редакторе столбцов компонента TDBGrid, и принимаются во внимание только их характеристики. Порядок следования столбцов в сетке TDBGrid определяется порядком следования столбцов в редакторе столбцов.

Если редактор столбцов не использовался, берутся поля (компоненты TField), объявленные при помощи редактора полей НД. При этом вид столбцов определяется соответствующими характеристиками компонентов TField, а порядок следования столбцов - порядком их определения.

Компонент TDBText применяется для показа значения текстового поля текущей записи НД.

Изменять значение, показываемое при помощи TDBText, нельзя. Компонент является аналогом компонента TLabel, за исключением того, что значение для отображения берется из текущей записи НД.

Для использования компонента TDBText нужно:

  •  указать в свойстве DataSource имя соответствующего компонента TDataSource, связанного с НД;
  •  указать в свойстве DataField имя поля.

Компонент TDBEdit позволяет редактировать значение строкового поля текущей записи НД.

Он повторяет функциональность компонента TEdit, но источником данных и их приемником в этом случае служит поле НД. Поэтому для TDBEdit необходимо указывать свойства:

  •  DataSource - имя компонента TDataSource, определяющего НД;
  •  DataField - имя редактируемого поля.

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

Компонент TDBMemo предназначен для показа мемо-полей (полей комментариев).

Поля комментариев могут хранить многострочные тексты. Компонент TDBMemo является аналогом компонента TMemo с той лишь разницей, что источником данных в этом случае служит поле комментария НД.

Чтобы связать мемо-поле с компонентом TDBMemo необходимо указать свойства:

  •  DataSource - имя компонента TDataSource, определяющего НД;
  •  DataField - имя редактируемого поля.

При корректировке текста в компоненте TDBMemo набор данных, к которому принадлежит поле комментария, автоматически переводится в состояние dsEdit. Но изменение значения свойства Text или значения одного или нескольких строк Lines не переводит НД в режим редактирования. Поэтому перед внесением изменений в значения свойств Lines или Text следует переводить набор данных в режим dsEdit, а затем запоминать изменения методом Post.


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

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

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

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

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

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

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

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

  •  Туры и путевки (название, продолжительность и др.)
  •  Страны и города
  •  Туроператоры
  •  Клиенты
  •  Сотрудники
  •  Транспорт (самолеты, автобусы, поезда)
  •  Заказы (или продажи)

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

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

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

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

ТУР (код тура, название тура, продолжительность тура, цена, описание тура, наличие страховки, визы, трансфера (сопровождающий), питания);

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

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

ГОРОД (код города, название города)

ОТЕЛЬ (код отеля, название, класс (уровень))

СОТРУДНИК (код сотрудника, ФИО, телефон, должность);

КЛИЕНТ (код клиента, ФИО, наличие загранпаспорта, адрес, телефон);

ТРАНСПОРТ (код транспорта, название)

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

ЗАКАЗЫ (код заказа, оформитель заказа, клиент, произведена ли оплата)

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

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

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

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

Туры:

  •  Код_тура (ключевое поле, тип – счетчик)
  •  Название тура (текстовое поле)
  •  Код_туроператора (числовое поле, для связи с таблицей Туроператоры)
  •  Код_транспорта (числовое поле, для связи с таблицей Транспорт)
  •  Код_отеля (числовое поле, для связи с таблицей Отели)
  •  Отправка (поле Дата/время)
  •  Прибытие (поле Дата/время)
  •  Стоимость (денежное поле)
  •  Виза (логическое поле)
  •  Страховка (логическое поле)
  •  Питание (логическое поле)
  •  Трансфер (логическое поле)
  •  Описание (поле Мемо)

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

  •  Код_туроператора (ключевое поле, тип – счетчик)
  •  Название туроператора (текстовое поле)
  •  Информация о туроператоре (поле Мемо)

Страны:

  •  Код_страны (ключевое поле, тип – счетчик)
  •  Название страны (текстовое поле)
  •  Необходимость визы (логическое поле)

Города:

  •  Код_города (ключевое поле, тип - счетчик)
  •  Код_страны (числовое поле, для связи с таблицей Страны)
  •  Название города (текстовое поле)

Отели:

  •  Код_отеля (ключевое поле, тип – счетчик)
  •  Код_города (числовое поле, для связи с таблицей Города)
  •  Название отеля (текстовое поле)
  •  Класс (текстовое поле, размер поля – 5)
  •  Контактная информация (поле Мемо)

Сотрудники:

  •  Код_сотрудника (ключевое поле, тип – счетчик)
  •  Фамилия (текстовое поле)
  •  Имя (текстовое поле)
  •  Отчество (текстовое поле)
  •  Должность (текстовое поле)
  •  Телефон (текстовое поле)

Клиенты:

  •  Код_клиента (ключевое поле, тип – счетчик)
  •  Фамилия (текстовое поле)
  •  Имя (текстовое поле)
  •  Отчество (текстовое поле)
  •  Адрес (текстовое поле)
  •  Телефон (текстовое поле)

Путевки:

  •  Код_путевки (ключевое поле, тип – счетчик)
  •  Код_тура (числовое поле, для связи с таблицей Туры)
  •  Количество человек (числовое поле)
  •  Полная стоимость (денежное поле)
  •  Скидка (числовое поле)
  •  Стоимость со скидкой (денежное поле)
  •  Вид (логическое поле)

Заказы:

  •  Код_заказа (ключевое поле, тип – счетчик)
  •  Код_путевки (числовое поле, для связи с таблицей Путевки)
  •  Код_клиента (числовое поле, для связи с таблицей Клиенты)
  •  Код_сотрудника (числовое поле, для связи с таблицей Сотрудники)
  •  Дата оформления (поле Дата/время)
  •  Оплата (логическое поле)

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

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

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

3.2.1 Подключение базы данных к проекту

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

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

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

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

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

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

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

Выберем строку 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,

Транспорт –Transport,

Клиенты – Klient,

Сотрудники – Sotrudnik,

Заказы – Zakaz,

Страны –Contry,

Города – Town,

Отели – Hotel.

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

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

DataSet: Tur,

Name: DSTur.

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

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

3.2.2. Создание главной формы приложения

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

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

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

  •  Меню
    •  Выход
  •  Списки данных
    •  Туры и путевки
    •  Туроператоры
    •  Страны, города и отели
    •  Клиенты
    •  Сотрудники
    •  Транспорт
  •  Поиск туров и путевок
  •  Отчеты
    •  Продажи сотрудников
    •  Продажи турагентства
  •  Заказы
    •  Оформить заказ
    •  Просмотр заказов
  •  Редактировать списки
    •  Туры
    •  Путевки
    •  Страны, города и отели

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

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

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

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

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

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

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

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

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

По аналогии создаются формы для просмотра и редактирования остальных списков: Туры и путевки, Клиенты, Сотрудники, Транспорт, Страны, Города и Отели, Просмотр и оформление заказов.

3.2.4. Организация поиска туров и путевок

Важным моментом является то, что приложение должно «уметь» не только просматривать и редактировать списки, но и осуществлять поиск по заданным критериям.

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

На форму добавим компоненты ADOQuery и DataSource.

При помощи компонента ADOQuery будем осуществлять SQL запрос к таблицам Туры, Страны, Города, Отели и Путевки для поиска интересующего тура по заданным критериям. Подключим DataSource к ADOQuery. У ADOQuery изменим свойства Connection на DM.ADOConnection1 и Name  на FindTur. В String List Editor напишем следующие строки:

select * from [Туры], [Страны], [Города], [Отели], [Путевки]

where (([Туры.Код_отеля]=[Отели.Код_отеля])

and ([Города.Код_города]=[Отели.Код_города])

and ([Города.Код_страны]=[Страны.Код_страны])

and ([Путевки.Код_тура]=[Туры.Код_тура]))

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

На форму добавим компонент DBGrid. Подключим его к FindTur. Вызовем редактор колонок сетки DBGrid (рисунок 3.2.4.1)

Рисунок 3.2.4.1. Редактор колонок DBGrid1.

Оставим для отображения только несколько столбцов: Название страны, Название города, Название отеля, Название тура, Отправка, Прибытие, Стоимость, Количество человек. Остальные скроем, изменив свойство Visible каждого из них на False.

Добавим на форму кнопку Button (Caption = «Найти»). При нажатии на эту кнопку будем осуществлять поиск туров по заданным критериям. Для того чтобы задавать необходимые критерии для поиска, добавим три компонента DBLookupComboBox для отображения списков стран, городов и отелей. Чтобы задать поиск по этим критериям, на событие OnClick кнопки напишем код:

FindTur.Active:= false;    //отключаем компонент FindTur

FindTur.SQL.Clear;          //очищаем SQL запросы

//добавляем новые строки для формирования запроса

FindTur.SQL.Add('select * from [Туры], [Страны], [Города], [Отели], [Путевки]');

FindTur.SQL.Add('where (([Туры.Код_отеля]=[Отели.Код_отеля])');

FIndTur.SQL.Add('and ([Города.Код_города]=[Отели.Код_города])');

FindTur.SQL.Add('and ([Города.Код_страны]=[Страны.Код_страны])');

FindTur.SQL.Add('and ([Туры.Код_тура]=[Путевки.Код_тура]))');

if DBLookupComboBox1.ListFieldIndex>0

then FindTur.SQL.Add('and ([Страны.Название страны] = '+QuotedStr(DM.Contry.Fields[1].AsString)+')');

if DBLookupComboBox2.ListFieldIndex>0

then FindTur.SQL.Add('and ([Города.Название города] = '+QuotedStr(DM.Town.Fields[2].AsString)+')');

if DBLookupComboBox3.ListFieldIndex>0

then FindTur.SQL.Add('and ([Отели.Название отеля]= '+QuotedStr(DM.Hotel.Fields[2].AsString)+')');

FindTur.Active:= true;  // активизируем компонент FindTur

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

Рисунок 3.2.4.2. Форма для организации поиска туров и путевок.

3.2.5. Создание формы отчета по продажам сотрудников.

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

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

Рисунок 3.2.5.1. Форма по формированию отчета по продажам сотрудника.

Для подсчета суммарных продаж сотрудника добавим два компонента Label со вкладки Standard. На событие OnClick кнопки «Сформировать» нужно добавить код:

… {организация поиска проданных туров конкретного сотрудника}

sum:=0; //переменная для подсчета суммы продаж

n:=0;    // переменная для подсчета количества продаж

// цикл по найденным продажам

while not zakaz1.Eof do

 begin

   n:=n+1;

   sum:= sum + zakaz1.Fields[11].AsFloat;

   zakaz1.Next;

 end;

//вывод полученных результатов на форму

Label2.Caption:= 'Количество проданных путевок: '+IntToStr(n);

Label1.Caption:= 'На сумму: '+FloatToStr(sum)+' рублей';

Вид формы при формировании отчета в работающем приложении представлен на рисунке 3.2.5.2

Рисунок 3.2.5.2.  Сформированный отчет по продажам сотрудника в указанный период


Заключение

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

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

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


Литература

  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


Приложения

Листинги приложения

unit UnitMain;

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;

   N12: TMenuItem;

   N13: TMenuItem;

   N14: TMenuItem;

   N16: TMenuItem;

   N17: TMenuItem;

   N18: TMenuItem;

   N19: TMenuItem;

   N20: TMenuItem;

   N21: TMenuItem;

   N22: TMenuItem;

   N23: TMenuItem;

   N25: TMenuItem;

   N26: TMenuItem;

   N27: TMenuItem;

   N24: TMenuItem;

   N28: TMenuItem;

   procedure FormCreate(Sender: TObject);

   procedure N7Click(Sender: TObject);

   procedure N5Click(Sender: TObject);

   procedure N6Click(Sender: TObject);

   procedure N19Click(Sender: TObject);

   procedure N20Click(Sender: TObject);

   procedure N17Click(Sender: TObject);

   procedure N21Click(Sender: TObject);

   procedure N13Click(Sender: TObject);

   procedure N14Click(Sender: TObject);

   procedure N23Click(Sender: TObject);

   procedure N27Click(Sender: TObject);

   procedure N28Click(Sender: TObject);

   procedure N3Click(Sender: TObject);

   procedure N25Click(Sender: TObject);

   procedure N8Click(Sender: TObject);

 private

   { Private declarations }

 public

   { Public declarations }

 end;

var

 Form1: TForm1;

implementation

uses UnitSpiski, UnitSpiski2, UnitSpiski3, UnitSpiski4, UnitSpiski5, UnitFind1, UnitFind2, UnitZakaz, UnitZakaz2, UnitOtchet1, UnitEditTur,  UnitEditCTH, UnitTransp, UnitEditPutevka;

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);

begin

//Размещение главной формы на экране монитора

Form1.Top:=0;

Form1.Left:=0;

Form1.Width:= screen.Width;

Form1.Height:= screen.Height - 70;

Form1.Caption:= 'Туристическое агентство';

end;

procedure TForm1.N7Click(Sender: TObject);

begin

Form2:= TForm2.Create(Application);

end;

procedure TForm1.N5Click(Sender: TObject);

begin

Form3:= TForm3.Create(Application);

end;

procedure TForm1.N6Click(Sender: TObject);

begin

Form4:= TForm4.Create(Application);

end;

procedure TForm1.N19Click(Sender: TObject);

begin

Form5:= TForm5.Create(Application);

end;

procedure TForm1.N20Click(Sender: TObject);

begin

Form6:= TForm6.Create(Application);

end;

procedure TForm1.N17Click(Sender: TObject);

begin

Form9:= TForm9.Create(Application);

end;

procedure TForm1.N21Click(Sender: TObject);

begin

Form10:= TForm10.Create(Application);

end;

procedure TForm1.N13Click(Sender: TObject);

begin

Form11:= TForm11.Create(Application);

Form11.DBLookupComboBox1.Visible:= true;

Form11.Label3.Visible:= true;

Form11.Caption:= 'Отчет по продажам сотрудника';

end;

procedure TForm1.N14Click(Sender: TObject);

begin

Form11:= TForm11.Create(Application);

Form11.DBLookupComboBox1.Visible:= false;

Form11.Label3.Visible:= false;

Form11.Caption:= 'Отчет по продажам турагентства';

end;

procedure TForm1.N23Click(Sender: TObject);

begin

Form12:= TForm12.Create(Application);

end;

procedure TForm1.N27Click(Sender: TObject);

begin

Form13:= TForm13.Create(Application);

end;

procedure TForm1.N28Click(Sender: TObject);

begin

Form14:= TForm14.Create(Application);

end;

procedure TForm1.N3Click(Sender: TObject);

begin

Application.Terminate;

end;

procedure TForm1.N25Click(Sender: TObject);

begin

Form15:= TForm15.Create(Application);

end;

procedure TForm1.N8Click(Sender: TObject);

begin

Form7:= TForm7.Create(Application);

end;

end.

unit UnitOtchet1;

interface

uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, DBCtrls, Grids, DBGrids, DB, ADODB, StdCtrls, ComCtrls, Buttons;

type

 TForm11 = class(TForm)

   DBLookupComboBox1: TDBLookupComboBox;

   DBGrid1: TDBGrid;

   DSzakaz1: TDataSource;

   DateTimePicker1: TDateTimePicker;

   DateTimePicker2: TDateTimePicker;

   Button1: TButton;

   Label1: TLabel;

   Label2: TLabel;

   zakaz1: TADOQuery;

   zakaz1_: TAutoIncField;

   zakaz1_2: TIntegerField;

   zakaz1_3: TIntegerField;

   zakaz1_4: TIntegerField;

   zakaz1DSDesigner: TDateTimeField;

   zakaz1DSDesigner2: TBooleanField;

   zakaz1_5: TAutoIncField;

   zakaz1_6: TIntegerField;

   zakaz1DSDesigner3: TIntegerField;

   zakaz1DSDesigner4: TBCDField;

   zakaz1DSDesigner5: TIntegerField;

   zakaz1DSDesigner6: TBCDField;

   zakaz1DSDesigner7: TBooleanField;

   Label3: TLabel;

   Label4: TLabel;

   Label5: TLabel;

   BitBtn1: TBitBtn;

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

   procedure Button1Click(Sender: TObject);

   procedure FormCreate(Sender: TObject);

 private

   { Private declarations }

 public

   { Public declarations }

 end;

var

 Form11: TForm11;

implementation

uses DataModuleUnit;

{$R *.dfm}

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

begin

Action:= caFree;

end;

procedure TForm11.Button1Click(Sender: TObject);

var sum: real;

 n: integer;

begin

sum:=0;

n:=0;

DateSeparator:='/';

zakaz1.Active:= false;

zakaz1.SQL.Clear;

zakaz1.SQL.Add('Select * from [Заказы],[Путевки]');

zakaz1.SQL.Add('where ([Заказы.Оплата]=true)');

zakaz1.SQL.Add('and ([Путевки.Код_путевки]=[Заказы.Код_путевки])');

zakaz1.SQL.Add(' and ([Заказы.Дата оформления]>=#'+FormatDateTime('dd/mm/yyyy',DateTimePicker1.Date)+'#)');

zakaz1.SQL.Add(' and ([Заказы.Дата оформления]<=#'+FormatDateTime('dd/mm/yyyy',DateTimePicker2.Date)+'#)');

if DBLookupComboBox1.Visible then

if DBLookupcombobox1.ListFieldIndex>0 then

 zakaz1.SQL.Add(' and ([Заказы.Код_сотрудника]='+DM.Sotrudnik.Fields[0].AsString+')');

zakaz1.Active:= true;

while not zakaz1.Eof do

 begin

   n:=n+1;

   sum:= sum + zakaz1.Fields[11].AsFloat;

   zakaz1.Next;

 end;

Label2.Caption:= 'Количество проданных путевок: '+IntToStr(n);

Label1.Caption:= 'На сумму: '+FloatToStr(sum)+' рублей';

end;

procedure TForm11.FormCreate(Sender: TObject);

begin

DateTimePicker2.Date:= Now;

end;

end.

unit UnitSpiski2;

interface

uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls, Buttons, ExtCtrls, Grids, DBGrids, DBCtrls;

type

 TForm3 = class(TForm)

   DBGrid1: TDBGrid;

   DBGrid2: TDBGrid;

   Splitter1: TSplitter;

   Panel1: TPanel;

   GroupBox1: TGroupBox;

   BitBtn1: TBitBtn;

   DBMemo1: TDBMemo;

   Panel2: TPanel;

   DBCheckBox4: TDBCheckBox;

   DBCheckBox3: TDBCheckBox;

   DBCheckBox2: TDBCheckBox;

   DBCheckBox1: TDBCheckBox;

   GroupBox2: TGroupBox;

   Button1: TButton;

   Button2: TButton;

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

   procedure Button1Click(Sender: TObject);

   procedure Button2Click(Sender: TObject);

 private

   { Private declarations }

 public

   { Public declarations }

 end;

var

 Form3: TForm3;

implementation

uses DataModuleUnit, UnitEditTur, UnitEditPutevka;

{$R *.dfm}

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

begin

Action:= caFree;

end;

procedure TForm3.Button1Click(Sender: TObject);

begin

Form12:= TForm12.Create(Application);

end;

procedure TForm3.Button2Click(Sender: TObject);

begin

Form15:= TForm15.Create(Application);

end;

end.

unit UnitZakaz;

interface

uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls, DBCtrls, Grids, DBGrids, DB, ADODB, Buttons;

type

 TForm9 = class(TForm)

   GroupBox1: TGroupBox;

   DBText1: TDBText;

   DBText2: TDBText;

   DBText3: TDBText;

   DBText4: TDBText;

   GroupBox2: TGroupBox;

   DBText5: TDBText;

   DBText6: TDBText;

   DBText7: TDBText;

   DBText8: TDBText;

   DBText9: TDBText;

   DBCheckBox1: TDBCheckBox;

   Button1: TButton;

   GroupBox3: TGroupBox;

   DBText10: TDBText;

   DBText11: TDBText;

   DBText12: TDBText;

   DBText13: TDBText;

   Button2: TButton;

   DBText14: TDBText;

   DBText15: TDBText;

   Button3: TButton;

   BitBtn1: TBitBtn;

   BitBtn2: TBitBtn;

   DBCheckBox2: TDBCheckBox;

   Label1: TLabel;

   Label2: TLabel;

   Label3: TLabel;

   Label4: TLabel;

   Label5: TLabel;

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

   procedure Button2Click(Sender: TObject);

   procedure Button3Click(Sender: TObject);

   procedure Button1Click(Sender: TObject);

   procedure BitBtn1Click(Sender: TObject);

   procedure BitBtn2Click(Sender: TObject);

 private

   { Private declarations }

 public

   { Public declarations }

 end;

var

 Form9: TForm9;

implementation

uses DataModuleUnit, UnitSpiski2, UnitSpiski5, UnitSpiski4;

{$R *.dfm}

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

begin

Action:= cafree;

end;

procedure TForm9.Button2Click(Sender: TObject);

begin

Form3:= TForm3.Create(Application);

end;

procedure TForm9.Button3Click(Sender: TObject);

begin

DM.Zakaz.Insert;

Form6:= TForm6.Create(Application);

end;

procedure TForm9.Button1Click(Sender: TObject);

begin

Form5:= TForm5.Create(Application);

end;

procedure TForm9.BitBtn1Click(Sender: TObject);

begin

DM.Zakaz.Insert;

DM.Zakaz.Fields[1].Value:= DM.Putevka.Fields[0].Value;

DM.Zakaz.Fields[2].Value:= DM.Klient.Fields[0].Value;

DM.Zakaz.Fields[3].Value:= DM.Sotrudnik.Fields[0].Value;

DM.Zakaz.Fields[4].Value:= Now;

DM.Zakaz.Post;

Form9.Close;

end;

procedure TForm9.BitBtn2Click(Sender: TObject);

begin

if DM.Zakaz.Modified then DM.Zakaz.Cancel;

Form9.Close;

end;

end.

unit UnitFind1;

interface

uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, DBCtrls, StdCtrls, ExtCtrls, Grids, DBGrids, Buttons, DB, ADODB,   ComCtrls;

type

 

TForm7 = class(TForm)

   RadioGroup1: TRadioGroup;

   RadioGroup2: TRadioGroup;

   Panel1: TPanel;

   GroupBox1: TGroupBox;

   DBLookupComboBox1: TDBLookupComboBox;

   DBLookupComboBox3: TDBLookupComboBox;

   DBLookupComboBox2: TDBLookupComboBox;

   BitBtn1: TBitBtn;

   BitBtn2: TBitBtn;

   GroupBox2: TGroupBox;

   DBGrid1: TDBGrid;

   DBMemo1: TDBMemo;

   DBCheckBox1: TDBCheckBox;

   DBCheckBox2: TDBCheckBox;

   DBCheckBox3: TDBCheckBox;

   DBCheckBox4: TDBCheckBox;

   FindTur: TADOQuery;

   DSFindTur: TDataSource;

   FindPut: TADOQuery;

   DSFindPut: TDataSource;

   RadioGroup3: TRadioGroup;

   Panel2: TPanel;

   DateTimePicker2: TDateTimePicker;

   Label2: TLabel;

   DateTimePicker1: TDateTimePicker;

   Label1: TLabel;

   CheckBox1: TCheckBox;

   Splitter1: TSplitter;

   CheckBox2: TCheckBox;

   GroupBox3: TGroupBox;

   RadioGroup4: TRadioGroup;

   RadioGroup5: TRadioGroup;

   GroupBox4: TGroupBox;

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

   procedure RadioGroup1Click(Sender: TObject);

   procedure FormCreate(Sender: TObject);

   procedure RadioGroup2Click(Sender: TObject);

   procedure BitBtn2Click(Sender: TObject);

   procedure RadioGroup3Click(Sender: TObject);

   procedure CheckBox2Click(Sender: TObject);

 private

   { Private declarations }

 public

   { Public declarations }

 end;

var

 Form7: TForm7;

implementation

uses DataModuleUnit;

{$R *.dfm}

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

begin

Action:= caFree;

end;

procedure TForm7.RadioGroup1Click(Sender: TObject);

begin

if RadioGroup1.ItemIndex=1

 then DBLookupComboBox2.Visible:= true

       else DBLookupComboBox2.Visible:= false;

if RadioGroup1.ItemIndex > 0

   then RadioGroup2.Enabled:= true

   else RadioGroup2.Enabled:= false;

end;

procedure TForm7.FormCreate(Sender: TObject);

begin

DBLookupComboBox1.Width:= RadioGroup3.Width;

DBLookupCombobox1.Left:= RadioGroup3.Left;

DBLookupCombobox1.Top:= RadioGroup3.Top+RadioGroup3.Height-DBLookupComboBox1.Height;

DBLookupComboBox2.Width:= RadioGroup1.Width;

DBLookupCombobox2.Left:= RadioGroup1.Left;

DBLookupCombobox2.Top:= RadioGroup1.Top+RadioGroup1.Height-DBLookupCombobox2.Height;

DBLookupComboBox3.Width:= RadioGroup2.Width;

DBLookupCombobox3.Left:= RadioGroup2.Left;

DBLookupCombobox3.Top:= RadioGroup2.Top+RadioGroup2.Height-DBLookupCombobox3.Height;

BitBtn2.Top:= GroupBox1.Height+2;

BitBtn1.Top:= BitBtn2.Top+BitBtn2.Height;

CheckBox1.Top:= GroupBox3.Height - CheckBox1.Height - 2;

GroupBox1.Height:= RadioGroup2.Top + RadioGroup2.Height;

end;

procedure TForm7.RadioGroup2Click(Sender: TObject);

begin

if RadioGroup2.ItemIndex=1

 then DBLookupComboBox3.Visible:= true

    else DBLookupComboBox3.Visible:= false;

end;

procedure TForm7.BitBtn2Click(Sender: TObject);

begin

DateSeparator:='/';

FindTur.Active:= false;

FindTur.SQL.Clear;

FindTur.SQL.Add('select * from [Туры], [Страны], [Города], [Отели], [Путевки]');

FindTur.SQL.Add('where (([Туры.Код_отеля]=[Отели.Код_отеля])');

FIndTur.SQL.Add('and ([Города.Код_города]=[Отели.Код_города])');

FindTur.SQL.Add('and ([Города.Код_страны]=[Страны.Код_страны])');

FindTur.SQL.Add('and ([Туры.Код_тура]=[Путевки.Код_тура]))');

if RadioGroup3.ItemIndex>0

 then FindTur.SQL.Add('and ([Страны.Название страны]='+QuotedStr(DM.Contry.Fields[1].AsString)+')');

if RadioGroup1.ItemIndex>0

 then FindTur.SQL.Add('and ([Города.Название города]='+QuotedStr(DM.Town.Fields[2].AsString)+')');

if RadioGroup2.ItemIndex>0

 then FindTur.SQL.Add('and ([Отели.Название отеля]='+QuotedStr(DM.Hotel.Fields[2].AsString)+')');

if CheckBox1.Checked then FIndTur.SQL.Add('and ([Путевки.Срочность]=true)');

if CheckBox2.Checked

 then begin

   FindTur.SQL.Add('and (([Туры.Отправление]>=#'+FormatDateTime('dd/mm/yyyy',DateTimePicker1.Date)+'#)');

   FindTur.SQL.Add('and ([Туры.Прибытие]<=#'+FormatDateTime('dd/mm/yyyy',DateTimePicker2.Date)+'#))');

      end;

if RadioGroup4.ItemIndex=1 then FindTur.SQL.Add('and ([Туры.Виза]=true)');

if RadioGroup4.ItemIndex=2 then FindTur.SQL.Add('and ([Туры.Виза]=false)');

if RadioGroup5.ItemIndex=1 then FindTur.SQL.Add('and ([Туры.Питание]=true)');

if RadioGroup5.ItemIndex=2 then FindTur.SQL.Add('and ([Туры.Питание]=false)');

FindTur.Active:= true;

end;

procedure TForm7.RadioGroup3Click(Sender: TObject);

begin

if RadioGroup3.ItemIndex=1

 then

   begin

     DBLookupComboBox1.Visible:= true;

     RadioGroup1.Enabled:= true;

   end

 else

   begin

     DBLookupComboBox1.Visible:= false;

     DBLookupComboBox2.Visible:= false;

     DBLookupComboBox3.Visible:= false;

     RadioGroup1.ItemIndex:= -1;

     RadioGroup2.ItemIndex:= -1;

     RadioGroup1.Enabled:= false;

     RadioGroup2.Enabled:= false;

   end;

end;

procedure TForm7.CheckBox2Click(Sender: TObject);

begin

if CheckBox2.Checked

 then

   begin

     label1.Enabled:= true;

     label2.Enabled:= true;

     DateTimePicker1.Enabled:= true;

     DateTimePicker2.Enabled:= true;

   end

 else

   begin

     label1.Enabled:= false;

     label2.Enabled:= false;

     DateTimePicker1.Enabled:= false;

     DateTimePicker2.Enabled:= false;

   end;

end;

end.

PAGE   \* MERGEFORMAT 1




1. Едесса а люди її знали як місто багате на воду
2. организационнопедагогические технологии определяющие структуру воспитательнообразовательного процесс
3. реферат дисертації на здобуття наукового ступеня кандидата юридичних наук Одеса 2001 Дисерт
4. Курсовая работа- Технология производства картофеля на семена в условиях Колышлейского района
5. Планирование бюджетных доходов
6. Тезисы к экзамену по статистике
7. Тематика контрольных работ
8. Лабораторная работа 2
9. Вариант вузовских экзаменационных билетов и вопросов по физике
10. Развитие слухового восприятия и памяти детей раннего возраста (1,5-3 года) Игры, направленные на развитие слухового восприятия и памяти
11. ИА Бунин
12. Доклад- Арахис подземный
13. ТЕМА СЕВЕРОЗАПАДНОГО АДМИНИСТРАТИВНОГО ОКРУГА БИБЛИОТЕКА 45 ИНТЕЛЛЕКТЦЕНТР ЗДОРОВОГО ОБРАЗА ЖИЗНИ
14. Особенности налогообложения производителей сельскохозяйственной продукции
15. Об образовании Федеральным законом от 22 августа 1996 г
16. Criv Mobil
17. Гражданско-правовая ответственность при осуществлении некоторых банковских операций
18. Пинскдрев 1 Организационноэкономическая характеристика предприятия
19. Life fter Deth А. Дж. Тойнби
20. это проявление экологической функции государства