Учебно-методический комплекс по дисциплине “Базы данных“ для специальности 230105 программное обеспечение вычислительной техники и автоматизированных систем




НазваниеУчебно-методический комплекс по дисциплине “Базы данных“ для специальности 230105 программное обеспечение вычислительной техники и автоматизированных систем
страница7/9
Дата25.02.2013
Размер0.57 Mb.
ТипУчебно-методический комплекс
1   2   3   4   5   6   7   8   9

Лабораторная работа №5

«Создание приложения кассира»


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

Пояснения

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




Продажа происходит так.

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

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

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

Серверная часть приложения

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

Назовем представление points_trips (пункты-рейсы).

Create view points_trips

as

select points_routes.cod_point as cod_point,

trips.cod_trip as cod_trip,

routes.name_route as name_route,

trips.week_day as week_day,

trips.hour||’:’|| trips.minute as time,

models.class as class,

models.places- trips.tickets as free_places

from points_routes, routes, trips, buses, models

where points_routes.cod_route=routes.cod_route and

routes.cod_route= trips.cod_route and

trips.cod_bus=buses.cod_bus and

buses.cod_model=models.cod_model


Обратите внимание на то, как в Oracle обозначается операция конкатенации  — ||. Преобразование из числового типа в строковый для столбцов hour и minute при этом будет выполнено автоматически.

Если представление создано без ошибок, проверьте выдаваемую им виртуальную таблицу при помощи команды

Select * from points_ trips

Представление на основе нескольких таблиц в Oracle всегда является необновляемым, поэтому кассиры при работе с ним не будут иметь возможности вносить изменения в базу данных. Для изменения одного единственного поля, доступного кассирам, напишем хранимую процедуру с параметрами, которая будет запускаться из приложения при помощи кнопки «Продажа». Хранимые процедуры записываются по правилам языка PL/SQL и хранятся как отдельные объекты базы данных.

Назовем процедуру Sale, ее входными параметрами будут Код рейса (cod_r), Код пункта (cod_p) и необходимое количество билетов (n_ticket), выходными — признак, успешно ли выполнена продажа (err), а также стоимость всех купленных билетов (s). Примерный текст этой процедуры может иметь вид:

Create or replace procedure sale (cod_r trips.cod_trip%type,

cod_p points.cod_point%type,

n_ticket number,

err out number, s out number

)

as

free_pl number;

begin

select free_places into free_pl from points_trips

where cod_point=cod_p and cod_trip=cod_r;

if n_ticket>free_pl then

err:=1;

else

err:=0;

update trips set tickets=tickets+n_ticket

where cod_trip=cod_r;

select km_prices.price*points.distance*n_ticket into s

from km_prices, points_trips, points

where km_prices.class=points_trips.class and

points_trips.cod_point=points.cod_point and

points_trips.cod_point=cod_p and points_trips.cod_trip=cod_r;

end if;

exception

when TOO_MANY_ROWS then

err:=2;

when NO_DATA_FOUND then

err:=3;

when OTHERS then

err:=4;

end;

/


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

Исключение TOO_MANY_ROWS могло бы возникнуть при исполнении запроса на выборку, если бы он возвратил более одной строки, исключение NO_DATA_FOUND  — если бы select вообще не возвратил строк, OTHERS — любые другие сбойные ситуации.

Если процедура создана без ошибок компиляции, то ее можно проверить непосредственно в SQL Plus, запустив на выполнение. Для выходных параметров определим две переменные:


var err number

var s number


Запустить процедуру из SQL Plus можно, например, так:


begin

sale(1,1,3,:err,:s);

end;

/


Входные параметры обозначают, что мы продаем 3 билета на рейс с кодом 1 до пункта тоже с кодом 1. Если на этот рейс имеется не менее трех свободных мест, то параметр err должен получиться равным 0, а параметр s должен иметь значение стоимости 3 билетов на тот автобус, который назначен на рейс с кодом 1.


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


Проверить значения переменных в SQL Plus можно просто:

print err

print s


Проверьте процедуру на различных сочетаниях входных параметров.


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


В принципе для этих целей можно использовать и другие средства (SQL Navigator, DataBase Explorer Delhi). При желании можно попробовать запустить хранимую процедуру sale из SQL Navigator, чтобы сравнить возможности SQL Plus и SQL Navigator.


Клиентская часть приложения

Это отдельный проект Delphi, для которого нужно создать свою папку.

Модуль данных. Компонент DataBase настраиваем как обычно. Для поддержки списка пунктов необходим компонент Table, связанный с таблицей Points (Tpoints), и DataSource (Dpoints), настроенный на этот Table. Остальные невизуальные компоненты будем создавать по мере их надобности.

Основная форма приложения. Для выбора пункта назначения можно использовать компонент DBLookupComboBox. Это раскрывающийся список на основе какой-либо таблицы или представления. Установите его свойство ListSource равным DPoints , свойство ListField равным имени поля Name_point, свойство KeyField - имени cod_point.. Список будет показывать названия всех пунктов, при этом выбираться будут коды пунктов.

Для того, чтобы показать на форме расстояние до выбранного пункта, можно воспользоваться стандартными компонентами Label (допустим, мы дали метке имя Label_dictance). Тогда можно написать простой обработчик события OnClick для списка DBLookupComboBox.:

procedure TForm1.DBLookupComboBox1Click(Sender: TObject);

begin

Label_distance.caption:=DataModule2.Tpoints.FieldByName('distance').asstring;

end;


Функция FieldByName позволяет получить значение заданного поля для текущей записи (строки) Table. При движении по списку текущая запись изменяется автоматически, поэтому в момент наступления события OnClick текущей является выбранная запись. Свойство AsString обозначает преобразование значения поля к типу string.

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

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

Можно было бы назначить для него компонент Table и воспользоваться уже известным приемом с установкой свойств MasterSource и MasterField на таблицу пунктов, но нам нужны не все рейсы, а только те, на которые есть билеты. Из этого положения тоже можно найти выход, воспользовавшись свойством Filter (фильтр).

Все же лучшим способом кажется явный запрос на выборку по представлению points_trips, параметром которого является код пункта. Стандартное средство обозначения параметра запроса — двоеточие перед его именем. Текст запроса будет выглядеть так:

select * from points_trips

where cod_point=:cod_point

and free_places>0

Проверьте запрос в SQL Plus, подставив вместо параметра конкретные значения cod_point.

Для выполнения запросов и отображения результатов запросов на выборку в Delphi существует специальный компонент Query. Он очень похож на Table (у них общий предок DataSet), но у Query отсутствует свойство TableName, зато есть основное свойство SQL, которое должно содержать текст запроса на языке SQL (без ; на конце!).

Поместите в модуль данных компоненты Query (назовем его Qpoints_trips), DataSource, а на форму — DbGrid, свяжите их друг с другом. В свойство SQL для Qpoints_trips поместите текст отлаженного запроса на выборку рейсов. Не забудьте устанавливать для компонента Query свойство DataBaseName, как вы это делали для компонентов Table. Для Query, как и для Table, имеется редактор полей. Установите для служебных полей видимость false, для остальных полей displaylabel.

Задать значение для параметра запроса в Delphi можно разными способами, например, у Query есть свойство ParamByName (имя параметра), которому можно присвоить выбранный из списка код пункта. Но есть совсем простой способ.

Установите свойство DataSource объекта Qpoints_trips равным dpoints (DataSource, соответствующий таблице points). При этом параметр cod_point запроса будет получать значение поля cod_point таблицы points, и запрос будет автоматически обновляться при смене текущего пункта назначения. Таким способом можно воспользоваться, только если у запроса всего один параметр. Для того, чтобы запрос активизировался первый раз при первом выборе пункта из списка, не устанавливайте его свойство Active=True на этапе разработки. Лучше добавьте в обработчик OnClick списка такую строку:

Qpoints_trips.Active:=true;// или Qpoints_trips.open;

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

Для вызова хранимых процедур и функций есть еще один компонент - StoredProc. Его основное свойство - StoredProcName – имя хранимой процедуры, а основной метод – ExecProc — запуск хранимой процедуры.

Чтобы воспользоваться этой функцией в нашем приложении, потребуется объект TStoredProc. Установите его свойство DatabaseName равным псевдониму базы данных, свойство StoredProcName – равным имени хранимой процедуры (Sale).

Найдите свойство Params и в диалоговом окне установите типы всех параметров, кроме s, в Integer.

Поместите на форму компонент TEdit, куда будет вводиться требуемое число билетов. На событие OnClick кнопки “Продажа” поместите обработчик, который задаст значения входных параметров хранимой процедуры, запустит эту процедуру и обработает ее выходные параметры err и s.

Текст процедуры-обработчика, например, такой:

procedure TForm1.Button1Click(Sender: TObject);

var err:integer; sum:double;

begin

StoredProc1.ParamByName('cod_r').AsInteger:=

Qpunct_rais.FieldByName('cod_trip').AsInteger;

StoredProc1.ParamByName('cod_p').AsInteger:=

Qpunct_rais.FieldByName('cod_point').AsInteger;

StoredProc1.ParamByName('n_ticket').AsInteger:=

strtoint(edit1.Text);

StoredProc1.ExecProc;

err:=StoredProc1.ParamByName('err').AsInteger;

if err>0 then

ShowMessage('Нет такого количества билетов')

else

begin

sum:=StoredProc1.ParamByName('s').AsFloat;

ShowMessage('Сумма: '+floattostr(sum));

end;

end;


Запустите приложение и протестируйте.
1   2   3   4   5   6   7   8   9

Похожие:

Учебно-методический комплекс по дисциплине “Базы данных“ для специальности 230105 программное обеспечение вычислительной техники и автоматизированных систем iconРабочая программа По дисциплине “Преддипломная практика" Для специальности 230105 (220400) "Программное обеспечение вычислительной техники и автоматизированных систем"
Гос во по специальности 230105 (220400) – Программное обеспечение вычислительной техники и автоматизированных систем, утвержденного...
Учебно-методический комплекс по дисциплине “Базы данных“ для специальности 230105 программное обеспечение вычислительной техники и автоматизированных систем iconРабочая программа по дисциплине Архитектура вычислительных систем Для специальности 230105(220400) Программное обеспечение вычислительной техники и автоматизированных систем
Рабочая программа составлена в соответствии с гос во по специальности 230105 Программное обеспечение вычислительной техники и автоматизированных...
Учебно-методический комплекс по дисциплине “Базы данных“ для специальности 230105 программное обеспечение вычислительной техники и автоматизированных систем iconРабочая программа по дисциплине «проектирование систем управления и менеджмента» для специальности 230105 “Программное обеспечение вычислительной техники и автоматизированных систем”
Рабочая программа составлена на основании гос впо для специальности 230105 «Программное обеспечение вычислительной техники и автоматизированных...
Учебно-методический комплекс по дисциплине “Базы данных“ для специальности 230105 программное обеспечение вычислительной техники и автоматизированных систем iconУчебно-методический комплекс по курсу безопасность жизнедеятельности
Специальность 230106 Техническое обслуживание средств вычислительной техники и компьютерных сетей, 230105 Программное обеспечение...
Учебно-методический комплекс по дисциплине “Базы данных“ для специальности 230105 программное обеспечение вычислительной техники и автоматизированных систем iconРабочая программа По дисциплине “Методы оптимизации" для специальности 230105 "Программное обеспечение вычислительной техники и автоматизированных систем"
По дисциплине “Методы оптимизации" для специальности 230105 "Программное обеспечение вычислительной техники и автоматизированных...
Учебно-методический комплекс по дисциплине “Базы данных“ для специальности 230105 программное обеспечение вычислительной техники и автоматизированных систем iconРабочая программа учебной дисциплины од. 04 Информатика ооп 230105 «Программное обеспечение вычислительной техники и автоматизированных систем»
Рабочая программа составлена на основании Государственного образовательного стандарта среднего профессионального образования по специальности...
Учебно-методический комплекс по дисциплине “Базы данных“ для специальности 230105 программное обеспечение вычислительной техники и автоматизированных систем icon«Метрология, стандартизация и сертификация» для специальности 230105 «Программное обеспечение вычислительной техники и автоматизированных систем»
«Программное обеспечение вычислительной техники и автоматизированных систем» составлена на основе Государственного образовательного...
Учебно-методический комплекс по дисциплине “Базы данных“ для специальности 230105 программное обеспечение вычислительной техники и автоматизированных систем iconРабочая программа по дисциплине "Структуры и алгоритмы обработки данных" специальности 230105 (220400) "Программное обеспечение вычислительной техники и автоматизированных систем"

Учебно-методический комплекс по дисциплине “Базы данных“ для специальности 230105 программное обеспечение вычислительной техники и автоматизированных систем iconРуководство по преддипломной практике и дипломированию для студентов специальности 230105 Программное обеспечение вычислительной
Учебное пособие предназначено для студентов, обучающихся по специальности 230105 «Программное обеспечение вычислительной техники...
Учебно-методический комплекс по дисциплине “Базы данных“ для специальности 230105 программное обеспечение вычислительной техники и автоматизированных систем iconПояснительная записка дп07. 230105. 06. 09Пз специальность 230105 «Программное обеспечение вычислительной техники и автоматизированных систем»
Специальность 230105 «Программное обеспечение вычислительной техники и автоматизированных систем»
Разместите кнопку на своём сайте:
Библиотека


База данных защищена авторским правом ©lib.znate.ru 2014
обратиться к администрации
Библиотека
Главная страница