- •Пояснительная записка к курсовому проекту
- •Г. Иваново, 2009г. Содержание
- •Задание на курсовой проект
- •Введение
- •1.1. Анализ предметной области.
- •1.2. Структура базы данных.
- •1.3. Содержимое заполненных таблиц.
- •1.4. Иас «Туристическая фирма»
- •1.4.1. Меню соединения с базой данных.
- •1.4.2. Главное меню приложения.
- •1.4.3. Справочники.
- •1.4.4. Регистрация новой путевки.
- •1.4.5. Подбор путевки по параметрам.
- •1.4.6.Анализ работы фирмы.
- •1.4.7. Справки по проданным путевкам.
- •1.4.8. Общие сведения.
- •Заключение
- •Список используемой литературы
1.4.3. Справочники.
Данное меню позволяет пользователю просматривать и редактировать основные таблицы базы данных.
Загрузка таблиц происходит сразу после успешного соединения с базой данных с помощью процедуры AfterConnect модуля данных.
procedure TDataModule1.IBDatabase1AfterConnect (Sender: TObject);
begin
dsRoute.Active := True;
dsClient.Active := True;
dsPass.Active := True;
dsCountry.Active:=True;
dsProfit.Active:=True;
qSumDiscount.Active:=true;
dsHotel.Active:=True;
end;
Каждой таблице главного окна соответствует два компонента в DataModule’е:
TIBDataSet – служит для непосредственного хранения данных, взятых их таблиц базы данных;
TDataSource – служит для обеспечения связи наборов данных с визуальными компонентами Delphi;
Для управления записями в таблицах на форме присутствует компонент TDBNavigator. Он позволяет добавлять, удалять или изменять записи в таблицах, а также перемещаться по записям.
Для обеспечения этих функций со стороны базы данных для каждого набора данных были написаны запросы на поддержание целостности базы данных (тесты запросов см. Приложение).
На вкладке «Справочник стран» предусмотрена такая функция как расчет средней стоимости маршрута в выбранную страну. Для этого из главной формы вызывается процедура модуля данных SrCost.
//процедура главной формы
procedure TForm2.dbedSrCostChange(Sender: TObject);
begin
DataModule1.SrCost(lcbCountry.text);
end;
//процедура модуля данных
procedure TDataModule1.SrCost(countryname:string);
begin
qSrCost.Active:=False;
qSrCost.ParamByName ('CountryName').AsString:=countryname;
DataModule1.qSrCost.Active:=True;
end;
Код SQL-запроса:
select avg(PRICE)
from ROUTE inner join Country on route.countrycode=country.countrycode
whereName=:CountryName
Результат выполнения запроса:
1.4.4. Регистрация новой путевки.
Данный пункт меню позволяет удобным для пользователя образом добавлять сведения о новой проданной путевке.
Как видно на скриншоте, этот пункт позволяет добавлять все поля в таблицу Pass. При этом выбор клиента и номера маршрута производится из ниспадающих списков, которые берут данные соответственно из таблиц Client и Route. Для исключения ошибки выбора по ФИО при наличии в базе данных двух клиентов с абсолютно идентичными именами в специальное поле выводится код выбранного клиента.
Код SQL-запроса для вывода кода клиента по ФИО:
select clientcode
from CLIENT
where fio=:fio
После подтверждения введенных данных навигатором, в полях Скидка и Стоимость отображаются соответственно скидка, предоставляемая на данную путевку и стоимость путевки со скидкой. Для реализации этих функций в главном окне вызывается процедура:
procedureTForm2.DBNavigator5Click(Sender:TObject;Button:TNavigateBtn);
begin
DataModule1.PassDiscount(lcbFio.text);
DataModule1.PassCost(lcbFio.text);
end;
//процедуры модуля данных
procedure TDataModule1.PassDiscount (fio:string);
begin
qPassDiscount.Active:=False;
qPassDiscount.ParamByName ('fio').AsString:=fio;
DataModule1.qPassDiscount.Active:=True;
end;
procedure TDataModule1.PassCost (FIO:string);
begin
qPassCost.Active:=False;
qPassCost.ParamByName ('Fio').AsString:=Fio;
DataModule1.qPassCost.Active:=True;
end;
Код SQL-запроса для вывода размера скидки на путевку:
select discount
from PASS join profit on pass.codeofpass=profit.codeofpass
where clientcode in (select clientcode from client where fio=:fio)
anddateofsail=current_date
Код SQL-запроса для вывода стоимости путевки:
select cost
from PROFIT join pass on profit.CODEOFPASS=pass.CODEOFPASS
where dateofsail=current_date and
clientcode in (select clientcode from client where fio=:fio)
Результат выполнения: