Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛАБОРАТОРНЫЙ ПРАКТИКУМ.doc
Скачиваний:
15
Добавлен:
11.11.2018
Размер:
996.86 Кб
Скачать

Insert into SlovarOb_SlovOper.OperWagon (KodOper,Mnemokod,NaimenOper)

Values (01,'пост,'Пром остан на станц').

В результате его выполнения в таблице добавится строка с номером ID= 119.

Теперь составим еще один запрос на удаление добавленной строки:

delete from SlovarOb_SlovOper.OperWagon where ID=119

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

3.2 Варианты заданий на выполнение лабораторной работы

Вариант 1. Преобразовать текстовый файл «Операции с поездами» (таблица 12 приложения). С помощью SQL-менеджера вызвать на экран и напечатать полученную Cache-таблицу. Дополнить таблицу строками с KodOper = 99 и KodOper =100. Удалить введенные строки.

Вариант 2. Преобразовать текстовый файл «Виды отправок» (таблица 14 приложения). С помощью SQL-менеджера вызвать на экран и напечатать полученную Cache-таблицу. Дополнить таблицу строками с Кодом = 19 и Кодом =20. Удалить введенные строки.

Вариант 3. Преобразовать текстовый файл «Классификатор грузов» (фрагмент классификатора - таблица 15 приложения). С помощью SQL-менеджера вызвать на экран и напечатать полученную Cache-таблицу. Дополнить таблицу строками с Кодом груза = 041070 и Кодом груза = 041071. Удалить введенные строки.

Вариант 4. Преобразовать текстовый файл «Классификатор изделий верхнего строения пути» (фрагмент классификатора - таблица 16 приложения). С помощью SQL-менеджера вызвать на экран и напечатать полученную Cache-таблицу. Дополнить таблицу строками с Кодом изделия = 527210 и Кодом изделия = 527210. Удалить введенные строки.

3.3 Порядок оформления лабораторной работы

Студент составляет краткий отчет о выполнении лабораторной работы, к которому прилагает листинги:

- описание класса, описывающего таблицу по выбранному варианту лабораторной работы;

- тексты SQL – запросов;

- распечатка Cache-таблицы (после преобразования, с добавлением строк).

Лабораторная работа № 4 Тема: «Программирование в среде субд Сache-5»

Целью лабораторной работы является создание методов для выбранного студентом класса железнодорожных объектов (описание класса ранее было сделано при выполнении лабораторной работы № 2). Студенту предоставляется возможность самостоятельно выбрать способ создания кода метода класса или на языке Visual Basic, или на языке Cache ObjektScript (с документацией по Cache ObjektScript можно познакомиться на сайте: www@InterSystems.ru).

Текст кода программы можно писать с использованием «мастера методов» или «терминала» Cache. Для написания кода надо в окне «Studio» нажать кнопку «Новый метод», выполнить соответствующие настройки и выбрать язык программирования, например, Visual Basic.

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

Вариант1. Класс «Вагон»:

Выборка вагонов из списка по заданному роду вагонов (крытые, платформы, полувагоны, цистерны).

Выборка вагонов по заданной станции дислокации.

Вариант 2. Класс «Поезд»:

Выборка сведений о вагонах по заданному индексу поезда.

Выборка индексов поездов, проследовавших станцию с заданным кодом станции;

Вариант 2. Класс «Отправка»:

Выборка номеров накладных (дорожных ведомостей) по заданным номерам вагонов.

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

Вариант 3. Класс «Локомотив»:

Выборка локомотивов заданного типа локомотивов.

Выборка локомотивов с межремонтным пробегом более 70 тыс. км.

Вариант 4. Класс «НСИ»:

Определение рода груза по коду груза.

Поиск грузов, входящих в номенклатуру «строительные грузы».

Вариант 5. Класс «ТГНЛ»:

Вычислить длину поезда.

Вычислить вес поезда.

Вариант 6. Класс «Дорожная ведомость»

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

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

Вариант 7. Класс «Грузовая станция»

Выбрать крытые вагоны, поданные на подъездные пути со станции с заданным кодом станции.

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

Вариант 8. Класс «Техническая станция»

Выбрать индексы поездов, прибывших на станцию.

Выбрать индексы поездов, к которым прицеплялись вагоны на станции с заданным кодом станции.

В качестве примера написания программ в среде Cache выполним задание по варианту 5 «Расчет веса поезда брутто» и более сложное задание - «Контроль целостности маршрутов в составе поезда».

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

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

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

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

Для решения сформулированных задач построим логическую структуру базу данных, сделаем описание классов объектов и отобразим их взаимодействие на UML- диаграмме, как это показано на следующем рисунке 2.

Рисунок 2. UML-диаграмма

Как следует из UML-диаграммы, в классе Poezd заданы методы класса, описывающие поведение объектов (поездов) в рамках поставленной задачи, то есть в этом классе вычисляется вес брутто поезда (метод GetVesBrutto()) и выполняется контроль целостности маршрутов (метод GetSohranMarsrut()). Кроме того, этот класс содержит метод ExeLab(), через который задается вариант лабораторного задания и индекс поезда, а также метод GenerateBD для ввода исходной информации в базу данных для отладки примеров.

Свойствами класса Poezd являются указатели на объекты других классов, такие, как cEventPoezd (класс истории с поездами), pNaturList (класс натурных листов), и IndexPoezd (встраиваемые объекты в класс Poezd).

Почему принята такая организация класса Poezd? Прежде всего для того, чтобы обеспечить объектный доступ к обрабатываемым данным. По заданному из внешней программы индексу поезда можно связаться с классом EventPoezd и получить, например, данные о последней операции с поездом (KodOper) Такая связь описана как коллекция объектов класса EventPoezd (отношение «один ко многим»). Можно также связаться с классом NaturList (отношение «один к одному») для получения информации о вагонах. Принятая организация класса Poezd является очень наглядной и не загромождает этот класс многочисленными свойствами, которые в данном случае переносятся в другие классы.

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

Соответственно, класс NaturList в качестве собственных свойств имеет указатели сInfoWagon и cOtpravka для создания коллекций, содержащих различные сведения о вагонах, которые хранятся в смежных классах (см. UML-диаграмму).

Для решения примера «Расчет веса поезда брутто», как указывалось выше, необходимы данные о весе тары вагонов. Для этих целей предусмотрен суперкласс «технические характеристики подвижного состава» EPSCommon. Этот класс является родительским и из него классы «технические характеристики локомотивов» (LokoEPS), «технические характеристики грузовых вагонов» (CargoEPS) и «технические характеристики пассажирских вагонов» (PassagirEPS) наследуют свойства. Эти классы (кроме EPSCommon) в рассматриваемых примерах не участвуют и приведены для иллюстрации возможностей объектно-ориентированных баз данных. В класс EPSCommon включены два метода – для перевода веса тары из центнеров в тонны (ThatCarry()) и метод GetUslovnDlinaWag() - для перевода базы (длины) вагона в количество условных вагонов (длина одного условного вагона -14 м.). Последний метод приведен в качестве иллюстрации и в примерах не используется. Эти методы, также как и свойства, наследуются классами – потомками и, следовательно, могут выполняться из этих классов.

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

Do ##class(Lab1.Poezd).GenerateBD()

Используя SQL- менеджер, убедитесь в правильности выполнения этого метода. Для этого откройте несколько таблиц и проверьте идентичность введенных методом данных с данными, хранимыми в таблицах. Следует дополнить этот метод командами ввода других условных данных и повторно выполнить этот метод.

Следующим шагом является выполнение примеров. Признаком примера «Контроль целостности маршрута в составе поезда» является « 1», а примера «Расчет веса поезда брутто» - « 2 ». Запуск методов производится также из окна «Терминал». Команда запуска имеет вид:

Do ##class(Lab1.Poezd).ExeLab("1111-21-2222",1) или

Do ##class(Lab1.Poezd).ExeLab("1111-21-2222",2)

Результаты расчетов отобразятся в окне «Терминал»:

USER>Do ##class(Lab1.Poezd).ExeLab("1111-21-2222",1)

Выявлена нецелостность маршрута!

Вагоны целых маршрутов (отправок):

44445555

12345678

33339999

77776666

Вагоны разбитых маршрутов (отправок):

11112233: Длина маршрута=2 Номер накладной=7557

USER>Do ##class(Lab1.Poezd).ExeLab("1111-21-2222",2)

Для вагона 44445555 нет информации в картотеке

Вес поезда брутто=28820 центнеров, или 2882тонн

USER>