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

Описание базы данных, построенной для решения контрольных примеров:

  <?xml version="1.0" encoding="UTF-8" ?>

- <Export generator="Cache" version="9" zv="Cache for Windows NT (Intel/P4) 5.0.15 (Build 5802_su)" ts="2006-04-09 09:46:50">

- <Class name="Lab1.EventPoezd">

  <Description>Событие c поездом</Description>

  <ClassType>persistent</ClassType>

  <ProcedureBlock>1</ProcedureBlock>

  <Super>%Persistent</Super>

  <TimeChanged>60362,26205.768968</TimeChanged>

  <TimeCreated>60361,41315.625875</TimeCreated>

  <ClassDefinitionError>0</ClassDefinitionError>

- <Property name="StanDisl">

  <Description>Код Еср станции совершения данной операции с поездом</Description>

  <Type>%String</Type>

  <Parameter name="MAXLEN" value="4" />

  </Property>

- <Property name="KodOper">

  <Description>Код данной операции с поездом</Description>

  <Type>%String</Type>

  <Parameter name="MAXLEN" value="2" />

  </Property>

- <Property name="DataOper">

  <Description>Время совершения данной операции с поездом</Description>

  <Type>%TimeStamp</Type>

  </Property>

- <Property name="pPoezd">

  <Description>Поезд, над которым проводилась данная операция</Description>

  <Type>Poezd</Type>

  </Property>

- <Storage name="Default">

  <Type>%Library.CacheStorage</Type>

  <DataLocation>^Lab1.EventPoezdD</DataLocation>

  <DefaultData>EventPoezdDefaultData</DefaultData>

  <IdLocation>^Lab1.EventPoezdD</IdLocation>

  <IndexLocation>^Lab1.EventPoezdI</IndexLocation>

  <StreamLocation>^Lab1.EventPoezdS</StreamLocation>

- <Data name="EventPoezdDefaultData">

  <Structure>listnode</Structure>

  <Subscript />

- <Value name="1">

  <Value>%%CLASSNAME</Value>

  </Value>

- <Value name="2">

  <Value>dataOper</Value>

  </Value>

- <Value name="3">

  <Value>kodOper</Value>

  </Value>

- <Value name="4">

  <Value>stanDisl</Value>

  </Value>

- <Value name="5">

  <Value>uPoezd</Value>

  </Value>

- <Value name="6">

  <Value>pPoezd</Value>

  </Value>

- <Value name="7">

  <Value>DataOper</Value>

  </Value>

- <Value name="8">

  <Value>KodOper</Value>

  </Value>

- <Value name="9">

  <Value>StanDisl</Value>

  </Value>

  </Data>

  </Storage>

  </Class>

  <Checksum value="3525365277" />

  </Export>

  <?xml version="1.0" encoding="UTF-8" ?>

- <Export generator="Cache" version="9" zv="Cache for Windows NT (Intel/P4) 5.0.15 (Build 5802_su)" ts="2006-04-09 09:52:05">

- <Class name="Lab1.KartEPS.CargoEPS">

  <Description>Картотечные данные характеризующие особенности грузовых вагонов</Description>

  <ClassType>persistent</ClassType>

  <ProcedureBlock>1</ProcedureBlock>

  <Super>Lab1.KartEPS.EPSCommon</Super>

  <TimeChanged>60361,30852.049181</TimeChanged>

  <TimeCreated>60361,41315.641489</TimeCreated>

  <ClassDefinitionError>0</ClassDefinitionError>

- <Property name="cRodCargo">

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

<Type>%String</Type>

  <Collection>list</Collection>

  </Property>

- <Property name="VesTariDopGruz">

  <Description>Вес тары дополнительного груза в центнерах. Используется для некоторых вагонов. Например, вагоны для перевозки живой рыбы. В груженом состоянии (то есть с рыбой) в вагон заливается вода, вот предполагаемый вес этой воды и записывается в данном свойстве.</Description>

  <Type>%Integer</Type>

  </Property>

- <Method name="ThatCarry">

  <Description>Что может перевозиться в грузовом вагоне, полиморфизм.</Description>

  <ReturnType>%ListOfDataTypes</ReturnType>

- <Implementation>

- <![CDATA[

QUIT cRodCargo

  ]]>

  </Implementation>

  </Method>

- <Storage name="Default">

  <Type>%Library.CacheStorage</Type>

  <DefaultData>CargoEPSDefaultData</DefaultData>

- <Data name="CargoEPSDefaultData">

  <Structure>listnode</Structure>

  <Subscript>"CargoEPS"</Subscript>

- <Value name="1">

  <Value>cRodCargo</Value>

  </Value>

- <Value name="2">

  <Value>VesTariDopGruz</Value>

  </Value>

  </Data>

  </Storage>

  </Class>

  <Checksum value="4026900878" />

  </Export>

<?xml version="1.0" encoding="UTF-8" ?>

- <Export generator="Cache" version="9" zv="Cache for Windows NT (Intel/P4) 5.0.15 (Build 5802_su)" ts="2006-04-09 09:53:12">

- <Class name="Lab1.KartEPS.EPSCommon">

  <Description>Картотечные данные, характеризующие особенности единиц подвижного состава (ЕПС). Это суперкласс для описания конкретных видов ЕПС. Разработчикам надо понимать, что реально существуют только объекты конкретных видов ЕПС, но никак не объекты данного класса.</Description>

  <ClassType>persistent</ClassType>

  <ProcedureBlock>1</ProcedureBlock>

  <Super>%Persistent</Super>

  <TimeChanged>60361,30905.596194</TimeChanged>

  <TimeCreated>60361,41315.653074</TimeCreated>

  <ClassDefinitionError>0</ClassDefinitionError>

- <Property name="NumWagMin">

  <Description>Нижняя граница интервала номеров ЕПС, имеющих данную характеристику</Description>

  <Type>%String</Type>

  </Property>

- <Property name="NumWagMax">

  <Description>Верхняя граница интервала номеров ЕПС, имеющих данную характеристику</Description>

  <Type>%String</Type>

  </Property>

- <Property name="VesTarCen">

  <Description>Вес тары ЕПС в центнерах</Description>

  <Type>%Integer</Type>

  </Property>

- <Property name="CountOsey">

  <Description>Количество осей у ЕПС</Description>

  <Type>%Integer</Type>

  </Property>

- <Property name="Length">

  <Description>Длина ЕПС в миллиметрах</Description>

  <Type>%Integer</Type>

  </Property>

- <Method name="GetUslovnDlinaWag">

<Description>Получить длину ЕПС в условных вагонах, условный вагон = 14 метрам. Этот метод призван демонстрировать механизм наследования, то что метод, единожды написанный для суперкласса, может использоваться для объектов любых подклассов данного суперкласса</Description>

  <ReturnType>%Numeric</ReturnType>

- <Implementation>

- <![CDATA[

QUIT ..Length/(14*1000)

  ]]>

  </Implementation>

  </Method>

- <Method name="ThatCarry">

  <Description>Что (кто) может перевозится в вагоне. Этот метод призван демонстрировать полиморфизм. Он переопределяется для каждого подкласса данного суперкласса</Description>

  <Abstract>1</Abstract>

  <ReturnType>%ListOfDataTypes</ReturnType>

- <Implementation>

- <![CDATA[

QUIT ""

  ]]>

  </Implementation>

  </Method>

- <Storage name="Default">

  <Type>%Library.CacheStorage</Type>

  <DataLocation>^Lab1.KartEPS.EPSCommonD</DataLocation>

  <DefaultData>EPSCommonDefaultData</DefaultData>

  <IdLocation>^Lab1.KartEPS.EPSCommonD</IdLocation>

  <IndexLocation>^Lab1.KartEPS.EPSCommonI</IndexLocation>

  <StreamLocation>^Lab1.KartEPS.EPSCommonS</StreamLocation>

- <Data name="EPSCommonDefaultData">

  <Structure>listnode</Structure>

  <Subscript />

- <Value name="1">

  <Value>%%CLASSNAME</Value>

  </Value>

- <Value name="2">

  <Value>CountOsey</Value>

  </Value>

- <Value name="3">

  <Value>NumWagMax</Value>

  </Value>

- <Value name="4">

  <Value>NumWagMin</Value>

  </Value>

- <Value name="5">

  <Value>VesTarCen</Value>

  </Value>

- <Value name="6">

  <Value>Length</Value>

  </Value>

  </Data>

  </Storage>

  </Class>

  <Checksum value="1698405557" />

  </Export>

<?xml version="1.0" encoding="UTF-8" ?>

- <Export generator="Cache" version="9" zv="Cache for Windows NT (Intel/P4) 5.0.15 (Build 5802_su)" ts="2006-04-09 09:53:51">

- <Class name="Lab1.KartEPS.LokoEPS">

  <Description>Картотечные данные, характеризующие особенности локомотива</Description>

  <ClassType>persistent</ClassType>

  <ProcedureBlock>1</ProcedureBlock>

  <Super>Lab1.KartEPS.EPSCommon</Super>

  <TimeChanged>60361,31018.096566</TimeChanged>

  <TimeCreated>60361,41315.656494</TimeCreated>

  <ClassDefinitionError>0</ClassDefinitionError>

- <Property name="SpeedKonst">

  <Description>Конструкционная скорость локомотивов данного типа</Description>

  <Type>%Integer</Type>

  </Property>

- <Property name="VidTiagi">

  <Description>Вид тяги. Может принимать значения: 1 - дизель; 2 - электро; 3 - пар</Description>

  <Type>%Integer</Type>

  </Property>

- <Method name="ThatCarry">

  <Description>Кто едет в локомотиве, полиморфизм.</Description>

  <ReturnType>%ListOfDataTypes</ReturnType>

- <Implementation>

- <![CDATA[

QUIT "Машинисты"

  ]]>

  </Implementation>

  </Method>

- <Storage name="Default">

  <Type>%Library.CacheStorage</Type>

  <DefaultData>LokoEPSDefaultData</DefaultData>

- <Data name="LokoEPSDefaultData">

  <Structure>listnode</Structure>

  <Subscript>"LokoEPS"</Subscript>

- <Value name="1">

  <Value>SpeedKonst</Value>

  </Value>

- <Value name="2">

  <Value>VidTiagi</Value>

  </Value>

  </Data>

  </Storage>

  </Class>

  <Checksum value="1715269892" />

  </Export>

<?xml version="1.0" encoding="UTF-8" ?>

- <Export generator="Cache" version="9" zv="Cache for Windows NT (Intel/P4) 5.0.15 (Build 5802_su)" ts="2006-04-09 09:54:22">

- <Class name="Lab1.KartEPS.PassagirEPS">

  <Description>Картотечные данные, характеризующие особенности пассажирских вагонов</Description>

  <ClassType>persistent</ClassType>

  <ProcedureBlock>1</ProcedureBlock>

  <Super>Lab1.KartEPS.EPSCommon</Super>

  <TimeChanged>60361,31249.700286</TimeChanged>

  <TimeCreated>60361,41315.659581</TimeCreated>

  <ClassDefinitionError>0</ClassDefinitionError>

- <Property name="CounMest">

  <Description>Количество пассажирских мест в вагоне данного типа</Description>

  <Type>%Integer</Type>

</Property>

- <Method name="ThatCarry">

  <Description>Кого перевозят в пассажирском вагоне, полиморфизм.</Description>

  <ReturnType>%ListOfDataTypes</ReturnType>

- <Implementation>

- <![CDATA[

Set coll= ##class(%ListOfDataTypes).%New()

Do coll.Insert("Пассажиры")

Do coll.Insert("Проводники")

QUIT coll

  ]]>

  </Implementation>

  </Method>

- <Storage name="Default">

  <Type>%Library.CacheStorage</Type>

  <DefaultData>PassagirEPSDefaultData</DefaultData>

- <Data name="PassagirEPSDefaultData">

  <Structure>listnode</Structure>

  <Subscript>"PassagirEPS"</Subscript>

- <Value name="1">

  <Value>CounMest</Value>

  </Value>

  </Data>

  </Storage>

  </Class>

  <Checksum value="2736843158" />

  </Export>

<?xml version="1.0" encoding="UTF-8" ?>

- <Export generator="Cache" version="9" zv="Cache for Windows NT (Intel/P4) 5.0.15 (Build 5802_su)" ts="2006-04-09 09:48:25">

- <Class name="Lab1.NaturList">

  <Description>Натурный лист поезда</Description>

  <ClassType>persistent</ClassType>

  <ProcedureBlock>1</ProcedureBlock>

  <Super>%Persistent</Super>

  <TimeChanged>60361,53686.046233</TimeChanged>

  <TimeCreated>60361,41315.663539</TimeCreated>

  <ClassDefinitionError>0</ClassDefinitionError>

- <Property name="cInfoWagon">

  <Description>Корректнее назвать это свойство не NumWag, а именно как коллекцию некоторой информации о вагонах. Вообще говоря, при задании имен свойств надо условиться о некоторых соглашениях в среде разработчиков. В данном примере у нас такое соглашение: Указатель на объекты другого класса имеет следующий вид - pИмяКлассаНаОбъектКоторогоУказывает. p - это от английского слова Pointer; Коллекция Указателей на объекты другого класса имеет следующий вид - cИмяКлассаНаОбъектыКоторогоУказывает. c - это от английского слова Collection; простое свойство должно начинаться с заглавной буквы. Характеристики вагонов в составе поезда pPoezd</Description>

  <Type>Lab1.Serial.InfoWagon</Type>

  <Collection>list</Collection>

  </Property>

- <Property name="cOtpravka">

  <Description>Информация об отправках, связанных с данным натурным листом</Description>

  <Type>Otpravka</Type>

  <Collection>array</Collection>

  </Property>

- <Property name="pPoezd">

  <Description>Поезд, на который составлен данный натурный лист</Description>

  <Type>Poezd</Type>

  </Property>

- <Method name="isWagonInNaturka">

  <Description>Есть ли вагон NumWag в натурном листе. Возврат: 1 - есть такой вагон в натурке; 0 нет такого вагона</Description>

  <FormalSpec>NumWag:%String</FormalSpec>

  <ReturnType>%Boolean</ReturnType>

- <Implementation>

- <![CDATA[

set ret=0

for i=1:1:..cInfoWagon.Count()

{

if (..cInfoWagon.GetAt(i).InwNumWag= NumWag)

{

set ret=1

QUIT

}

}

QUIT ret

  ]]>

  </Implementation>

  </Method>

- <Storage name="Default">

  <Type>%Library.CacheStorage</Type>

  <DataLocation>^Lab1.NaturListD</DataLocation>

  <DefaultData>NaturListDefaultData</DefaultData>

  <IdLocation>^Lab1.NaturListD</IdLocation>

  <IndexLocation>^Lab1.NaturListI</IndexLocation>

  <StreamLocation>^Lab1.NaturListS</StreamLocation>

- <Data name="NaturListDefaultData">

  <Structure>listnode</Structure>

  <Subscript />

- <Value name="1">

  <Value>%%CLASSNAME</Value>

  </Value>

- <Value name="2">

  <Value>pPoezd</Value>

  </Value>

- <Value name="3">

  <Value>NumWag</Value>

  </Value>

- <Value name="4">

  <Value>cInfoWagon</Value>

  </Value>

  </Data>

- <Data name="cOtpravka">

  <Attribute>cOtpravka</Attribute>

  <Structure>subnode</Structure>

  <Subscript>"cOtpravka"</Subscript>

  </Data>

  </Storage>

  </Class>

  <Checksum value="1981855642" />

  </Export>

  <?xml version="1.0" encoding="UTF-8" ?>

- <Export generator="Cache" version="9" zv="Cache for Windows NT (Intel/P4) 5.0.15 (Build 5802_su)" ts="2006-04-09 09:49:05">

- <Class name="Lab1.Otpravka">

  <Description>Отправка</Description>

  <ClassType>persistent</ClassType>

  <ProcedureBlock>1</ProcedureBlock>

  <Super>%Persistent</Super>

  <TimeChanged>60361,26153.766481</TimeChanged>

  <TimeCreated>60361,41315.667266</TimeCreated>

  <ClassDefinitionError>0</ClassDefinitionError>

- <Property name="NumNacl">

  <Description>Номер накладной данной отправки</Description>

  <Type>%Integer</Type>

  </Property>

- <Property name="cWagonInOtpravka">

  <Description> Для того, чтобы уточнить является ли это свойство именно маршрутом, используйте метод isOtpravkaByMarchrut Коллекция вагонов в данной отправке</Description>

  <Type>%String</Type>

  <Collection>list</Collection>

  </Property>

- <Method name="isOtpravkaByMarchrut">

  <Description>Метод отвечает на вопрос является ли данная отправка маршрутом Возвращает 1 (TRUE) - если отправка является маршрутом.</Description>

  <ReturnType>%Boolean</ReturnType>

- <Implementation>

- <![CDATA[

if (..cWagonInOtpravka.Count()>1)

{

QUIT 1

}

QUIT 0

  ]]>

  </Implementation>

  </Method>

- <Storage name="Default">

  <Type>%Library.CacheStorage</Type>

  <DataLocation>^Lab1.OtpravkaD</DataLocation>

  <DefaultData>OtpravkaDefaultData</DefaultData>

  <IdLocation>^Lab1.OtpravkaD</IdLocation>

  <IndexLocation>^Lab1.OtpravkaI</IndexLocation>

  <StreamLocation>^Lab1.OtpravkaS</StreamLocation>

- <Data name="OtpravkaDefaultData">

  <Structure>listnode</Structure>

  <Subscript />

- <Value name="1">

  <Value>%%CLASSNAME</Value>

  </Value>

- <Value name="2">

  <Value>NumNacl</Value>

  </Value>

- <Value name="3">

  <Value>cWagonInOtpravka</Value>

  </Value>

  </Data>

  </Storage>

  </Class>

  <Checksum value="1492011988" />

  </Export>

  <?xml version="1.0" encoding="UTF-8" ?>

- <Export generator="Cache" version="9" zv="Cache for Windows NT (Intel/P4) 5.0.15 (Build 5802_su)" ts="2006-04-09 09:43:06">

- <Class name="Lab1.Poezd">

  <Description>поезд</Description>

  <ClassType>persistent</ClassType>

  <ProcedureBlock>1</ProcedureBlock>

  <Super>%Persistent</Super>

  <TimeChanged>60362,52573.734148</TimeChanged>

  <TimeCreated>60361,41315.671735</TimeCreated>

  <ClassDefinitionError>0</ClassDefinitionError>

- <Property name="IndexPoezd">

  <Description>Индекс поезда</Description>

  <Type>Lab1.Serial.IndexPoezda</Type>

  </Property>

- <Property name="cEventPoezd">

  <Description>История поезда - это коллекция событий</Description>

  <Type>EventPoezd</Type>

  <Collection>array</Collection>

  </Property>

- <Property name="pNaturList">

  <Description>Натурный лист поезда</Description>

  <Type>NaturList</Type>

  </Property>

- <Method name="GenerateBD">

  <Description>С помощью этого метода создаются объекты в БД. Для этого запустите терминал и выполните: Do ##class(Lab1.Poezd).GenerateBD()</Description>

  <ClassMethod>1</ClassMethod>

  <ReturnType>%Status</ReturnType>

- <Implementation>

- <![CDATA[

/// Информация по первому поезду

/// История его состоит из двух событий

/// 1. Вводим и сохраняем в nP индекс поезда

Set indP=##class(Lab1.Serial.IndexPoezda).%New()

set indP.EsrStanFormir="1111"

Set indP.NumSostava="21"

Set indP.EsrStanRasFormir="2222"

Set nP=##class(Lab1.Poezd).%New()

Set nP.IndexPoezd=indP

Do nP.%Save(0)

/// Записываем в коллекцию истории первого поезда данные о последней операции

Set EventP=##class(Lab1.EventPoezd).%New()

Set EventP.StanDisl="1112"

Set EventP.KodOper="11"

Set EventP.DataOper=$zdt($ZDATEH("2006-3-24",3)_","_$ZTIMEH("12:10:55",1),3)

Set EventP.pPoezd=nP

Do EventP.%Save(0)

Do nP.cEventPoezd.SetAt(EventP,"1")

/// Записываем в коллекцию истории второго поезда данные о последней операции

Set EventP=##class(Lab1.EventPoezd).%New()

Set EventP.StanDisl="1113"

Set EventP.KodOper="44"

Set EventP.DataOper=$zdt($ZDATEH("2006-3-24",3)_","_$ZTIMEH("14:32:15",1),3)

Set EventP.pPoezd=nP

Do EventP.%Save(0)

Do nP.cEventPoezd.SetAt(EventP,2)

/// Создаем натурный лист по первому поезду

/// Он будет состоять из 6 вагонов

Set Naturka=##class(Lab1.NaturList).%New()

Set Naturka.pPoezd=nP

Set InfoW=##class(Lab1.Serial.InfoWagon).%New()

Set InfoW.InwNumWag="11112222"

Set InfoW.EsrStanNaznWag="2222"

Set InfoW.WesGruz=1456

///Добавляем введенные данные о первом вагоне в коллекцию вагонов по первому поезду

Do Naturka.cInfoWagon.Insert(InfoW)

/// То же по 2-му вагону

Set InfoW=##class(Lab1.Serial.InfoWagon).%New()

Set InfoW.InwNumWag="11112233"

Set InfoW.EsrStanNaznWag="2222"

Set InfoW.WesGruz=2456

Do Naturka.cInfoWagon.Insert(InfoW)

/// По 3-му вагону

Set InfoW=##class(Lab1.Serial.InfoWagon).%New()

Set InfoW.InwNumWag="44445555"

Set InfoW.EsrStanNaznWag="2228"

Set InfoW.WesGruz=1432

Do Naturka.cInfoWagon.Insert(InfoW)

/// По 4-му вагону

Set InfoW=##class(Lab1.Serial.InfoWagon).%New()

Set InfoW.InwNumWag="33339999"

Set InfoW.EsrStanNaznWag="2224"

Set InfoW.WesGruz=8888

Do Naturka.cInfoWagon.Insert(InfoW)

///По 5-му вагону

Set InfoW=##class(Lab1.Serial.InfoWagon).%New()

Set InfoW.InwNumWag="12345678"

Set InfoW.EsrStanNaznWag="2224"

Set InfoW.WesGruz=3333

Do Naturka.cInfoWagon.Insert(InfoW)

///По 6-му вагону

Set InfoW=##class(Lab1.Serial.InfoWagon).%New()

Set InfoW.InwNumWag="77776666"

Set InfoW.EsrStanNaznWag="2224"

Set InfoW.WesGruz=5555

Do Naturka.cInfoWagon.Insert(InfoW)

/// Создаем три отправки для первого поезда

Set Otpr=##class(Lab1.Otpravka).%New()

Set Otpr.NumNacl=7557

Do Otpr.cWagonInOtpravka.Insert("11112233")

Do Otpr.cWagonInOtpravka.Insert("44444444")

Do Otpr.%Save(0)

Do Naturka.cOtpravka.SetAt(Otpr,1)

Set Otpr=##class(Lab1.Otpravka).%New()

Set Otpr.NumNacl=2345

Do Otpr.cWagonInOtpravka.Insert("44445555")

Do Otpr.%Save(0)

Do Naturka.cOtpravka.SetAt(Otpr,2)

Set Otpr=##class(Lab1.Otpravka).%New()

Set Otpr.NumNacl=5555

Do Otpr.cWagonInOtpravka.Insert("12345678")

Do Otpr.cWagonInOtpravka.Insert("33339999")

Do Otpr.cWagonInOtpravka.Insert("77776666")

Do Otpr.%Save(0)

Do Naturka.cOtpravka.SetAt(Otpr,3)

Set Naturka.pPoezd=nP

Do Naturka.%Save(0)

Set nP.pNaturList=Naturka

Do nP.%Save(0)

/// Создаем картотеку грузовых вагонов

Set CargoW=##class(Lab1.KartEPS.CargoEPS).%New()

Set CargoW.NumWagMin="11111111"

Set CargoW.NumWagMax="22222222"

Set CargoW.VesTarCen=1000

Set CargoW.CountOsey=6

Set CargoW.Length=20000

Set CargoW.VesTariDopGruz=5

Do CargoW.cRodCargo.Insert("Живая рыба")

Do CargoW.%Save(0)

Set CargoW=##class(Lab1.KartEPS.CargoEPS).%New()

Set CargoW.NumWagMin="33333333"

Set CargoW.NumWagMax="44444444"

Set CargoW.VesTarCen=1500

Set CargoW.CountOsey=8

Set CargoW.Length=21000

Do CargoW.cRodCargo.Insert("Насыпные грузы")

Do CargoW.cRodCargo.Insert("Древесина")

Do CargoW.cRodCargo.Insert("Металлический профиль")

Do CargoW.%Save(0)

Set CargoW=##class(Lab1.KartEPS.CargoEPS).%New()

Set CargoW.NumWagMin="55555555"

Set CargoW.NumWagMax="77777777"

Set CargoW.VesTarCen=1200

Set CargoW.CountOsey=6

Set CargoW.Length=26000

Do CargoW.cRodCargo.Insert("Товары народного потребления")

Do CargoW.%Save(0)

/// Создаем картотеку пассажирских вагонов

Set PassagirW=##class(Lab1.KartEPS.PassagirEPS).%New()

Set PassagirW.NumWagMin="88888888"

Set PassagirW.NumWagMax="88889999"

Set PassagirW.VesTarCen=10

Set PassagirW.CountOsey=6

Set PassagirW.Length=18000

Set PassagirW.CounMest=64

Do PassagirW.%Save(0)

Set PassagirW=##class(Lab1.KartEPS.PassagirEPS).%New()

Set PassagirW.NumWagMin="88890000"

Set PassagirW.NumWagMax="99999999"

Set PassagirW.VesTarCen=5

Set PassagirW.CountOsey=6

Set PassagirW.Length=17000

Set PassagirW.CounMest=36

Do PassagirW.%Save(0)

Quit $$$OK

  ]]>

  </Implementation>

  </Method>

- <Method name="ExeLab">

  <Description>Метод, вызываемый пользователем для выполнения лабораторной работы по ПРИМЕРУ NumPrimer На входе строка типа XXXX-XX-XXXX,1 Для этого запустите терминал и выполните: Do ##class(Lab1.Poezd).ExeLab("1111-21-2222",1)</Description>

  <ClassMethod>1</ClassMethod>

  <FormalSpec>IndPoezda:%String,NumPrimer:%Integer</FormalSpec>

- <Implementation>

- <![CDATA[

Set StF=$Piece(IndPoezda,"-",1)

Set NS=$Piece(IndPoezda,"-",2)

Set StR=$Piece(IndPoezda,"-",3)

/// Ищем поезд по индексу

&sql(SELECT %ID INTO :id FROM Lab1.Poezd WHERE

IndexPoezd_EsrStanFormir =:StF And

IndexPoezd_NumSostava= :NS AND

IndexPoezd_EsrStanRasFormir= :StR)

If (SQLCODE = 0)

{ // Нашли поезд. Вызовем программу, решающую пример

Set poezd = ##class(Lab1.Poezd).%OpenId(id)

if (NumPrimer=1)

{

Do poezd.GetSohranMarsrut()

}

else

{

if (NumPrimer=2)

{

Do poezd.GetVesBrutto()

}

else

{

Write "В Лабараторной работе не реализован пример N"_NumPrimer,!

}

}

}

else

{ // Нет. Нашли поезд

Write "В БД нет поезда "_IndPoezda,!

}

  ]]>

  </Implementation>

  </Method>

- <Method name="GetSohranMarsrut">

  <Description>Метод, который содержит алгоритм решения ПРИМЕРА 1</Description>

  <ReturnType>%Boolean</ReturnType>

- <Implementation>

- <![CDATA[

/// Признак целостности для всех отправок

Set prCel=1

/// Сюда соберем вагоны из целых маршрутов

Set WagonsCelMars=##class(%ListOfDataTypes).%New()

/// Сюда соберем информацию о вагонах из разъединенных маршрутов

Set WagonsRazMars=##class(%ListOfDataTypes).%New()

/// Цикл по отправкам

For i=1:1:..pNaturList.cOtpravka.Count()

{

/// Выбираем из коллекции очередную отправку

Set Otpravka=..pNaturList.cOtpravka.GetAt(i)

/// Номер очередного вагона в текущей отправке

Set nWagInOtpravke=0

/// Признак того, что вагона отправки нет в натурном листе

Set prPusto=0

/// Признак целостности очередной отправки

Set prCelO=1

// Цикл по сверке вагонов очередной отправки с вагонами из натурного листа

for j=1:1:Otpravka.cWagonInOtpravka.Count()

{

/// Выбираем из коллекции очередной вагон отправки

Set WagonOtpravki=Otpravka.cWagonInOtpravka.GetAt(j)

/// Проверка: находится ли этот вагон WagonOtpravki в натурном листе.

if (..pNaturList.isWagonInNaturka(WagonOtpravki)=0)

{ // В натурном листе нет вагона WagInOtpravke

if ((nWagInOtpravke=j-1) && (j'=1) && (prPusto=0))

{ // Предыдущий вагон отправки есть в ТГНЛ,

// поэтому целостность данной отправки нарушена

/// Write "Вагон "_WagonOtpravki_" не следует в нашем поезде",!

Set prCel=0

Set prCelO=0

}

else

{

/// Взводим признак того, что текущего вагона отправки нет в натурном листе

Set prPusto=1

}

}

else

{ // В натурном листе есть вагон из отправки

if (Otpravka.cWagonInOtpravka.Count()=1)

{

/// Тривиальный случай - повагонная отправка

///Write "Вагон "_WagonOtpravki_" в повагонной отправке",!

}

else

{

if (prPusto=1)

{ // Предыдущего вагона текущей отправки не было в натурном листе

// поэтому целостность данной отправки нарушена

Set prCel=0

Set prPusto=0

Set prCelO=0

}

set nWagInOtpravke=j

}

}

}

if (prCelO=1)

{ /// Занесем информацию о вагонах из целых отправок

for k=1:1:Otpravka.cWagonInOtpravka.Count()

{

Do WagonsCelMars.Insert(Otpravka.cWagonInOtpravka.GetAt(k))

}

}

else

{ /// Занесем информацию о вагонах из разбитых отправок

Set cntOt=Otpravka.cWagonInOtpravka.Count()

for k=1:1:cntOt

{

/// Выбираем из коллекции очередной вагон отправки

Set www=Otpravka.cWagonInOtpravka.GetAt(k)

if (..pNaturList.isWagonInNaturka(www)=1)

{ // В натурном листе есть вагон www

Do WagonsRazMars.Insert(www_": Длина маршрута="_cntOt_" Номер накладной="_Otpravka.NumNacl)

}

}

}

}

if (prCel=1)

{

Write "Маршрут Целостен!"

}

else

{

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

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

for i=1:1:WagonsCelMars.Count()

{

Write WagonsCelMars.GetAt(i),!

}

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

for i=1:1:WagonsRazMars.Count()

{

Write WagonsRazMars.GetAt(i),!

}

}

QUIT prCel

  ]]>

  </Implementation>

  </Method>

- <Method name="GetVesBrutto">

  <Description>Метод, который содержит алгоритм решения ПРИМЕРА 2</Description>

  <ReturnType>%Integer</ReturnType>

- <Implementation>

- <![CDATA[

Set WesBrutto=0

/// Цикл просмотра вагонов в натурном листе

For i=1:1:..pNaturList.cInfoWagon.Count()

{

/// Выбрали сведения об очередном вагоне

Set infoW=..pNaturList.cInfoWagon.GetAt(i)

/// Присуммировали вес груза

Set WesBrutto=WesBrutto+infoW.WesGruz

Set NumW=infoW.InwNumWag

/// Ищем картотечные данные по вагону

&sql(SELECT VesTarCen INTO :VesT FROM Lab1_KartEPS.CargoEPS WHERE

NumWagMin <=:NumW AND NumWagMax >=:NumW)

If (SQLCODE = 0)

{ // Нашли картотечные данные по вагону

// и присуммировали вес тары

Set WesBrutto=WesBrutto+VesT

}

else

{

Write "Для вагона "_ NumW_" нет информации в картотеке",!

}

}

Write "Вес поезда брутто="_WesBrutto_" центнеров, или "_(WesBrutto/10)_"тонн",!

  ]]>

  </Implementation>

  </Method>

- <Storage name="Default">

  <Type>%Library.CacheStorage</Type>

  <DataLocation>^Lab1.PoezdD</DataLocation>

  <DefaultData>PoezdDefaultData</DefaultData>

  <IdLocation>^Lab1.PoezdD</IdLocation>

  <IndexLocation>^Lab1.PoezdI</IndexLocation>

  <StreamLocation>^Lab1.PoezdS</StreamLocation>

- <Data name="PoezdDefaultData">

  <Structure>listnode</Structure>

  <Subscript />

- <Value name="1">

  <Value>%%CLASSNAME</Value>

  </Value>

- <Value name="2">

  <Value>dataOper</Value>

  </Value>

- <Value name="3">

  <Value>indexPoezd</Value>

  </Value>

- <Value name="4">

  <Value>kodOper</Value>

  </Value>

- <Value name="5">

  <Value>stanDisl</Value>

  </Value>

- <Value name="6">

  <Value>pNaturList</Value>

  </Value>

- <Value name="7">

  <Value>IndexPoezd</Value>

  </Value>

  </Data>

- <Data name="cEventPoezd">

  <Attribute>cEventPoezd</Attribute>

  <Structure>subnode</Structure>

  <Subscript>"cEventPoezd"</Subscript>

  </Data>

- <Data name="historyPoezd">

  <Attribute>historyPoezd</Attribute>

  <Structure>subnode</Structure>

  <Subscript>"historyPoezd"</Subscript>

  </Data>

  </Storage>

  </Class>

  <Checksum value="762515405" />

  </Export>

  <?xml version="1.0" encoding="UTF-8" ?>

- <Export generator="Cache" version="9" zv="Cache for Windows NT (Intel/P4) 5.0.15 (Build 5802_su)" ts="2006-04-09 09:50:19">

- <Class name="Lab1.Serial.IndexPoezda">

  <Description>Индекс поезда</Description>

  <ClassType>serial</ClassType>

  <ProcedureBlock>1</ProcedureBlock>

  <Super>%SerialObject</Super>

  <TimeChanged>60361,25269.188627</TimeChanged>

  <TimeCreated>60361,41315.680721</TimeCreated>

  <ClassDefinitionError>0</ClassDefinitionError>

- <Property name="EsrStanFormir">

  <Description>Код Еср станции формирования поезда</Description>

  <Type>%String</Type>

  <Parameter name="MAXLEN" value="4" />

  </Property>

- <Property name="NumSostava">

  <Description>Номер состава</Description>

  <Type>%String</Type>

  <Parameter name="MAXLEN" value="2" />

  </Property>

- <Property name="EsrStanRasFormir">

  <Description>Код Еср станции расформирования поезда</Description>

  <Type>%String</Type>

  <Parameter name="MAXLEN" value="4" />

  </Property>

- <Storage name="Default">

  <Type>%Library.CacheSerialState</Type>

  <State>IndexPoezdaState</State>

  <StreamLocation>^Lab1.Serial.IndexPoezdaS</StreamLocation>

- <Data name="IndexPoezdaState">

  <Structure>listnode</Structure>

  <Subscript>"Lab1.Serial.IndexPoezda"</Subscript>

- <Value name="1">

  <Value>EsrStanFormir</Value>

  </Value>

- <Value name="2">

  <Value>EsrStanRasFormir</Value>

  </Value>

- <Value name="3">

  <Value>NumSostava</Value>

  </Value>

  </Data>

  </Storage>

  </Class>

  <Checksum value="1425442527" />

  </Export>

  <?xml version="1.0" encoding="UTF-8" ?>

- <Export generator="Cache" version="9" zv="Cache for Windows NT (Intel/P4) 5.0.15 (Build 5802_su)" ts="2006-04-09 09:51:17">

- <Class name="Lab1.Serial.InfoWagon">

  <Description>Информация о вагоне входит в натурный лист</Description>

  <ClassType>serial</ClassType>

  <ProcedureBlock>1</ProcedureBlock>

  <Super>%SerialObject</Super>

  <TimeChanged>60362,33651.431695</TimeChanged>

  <TimeCreated>60361,41315.684318</TimeCreated>

  <ClassDefinitionError>0</ClassDefinitionError>

- <Property name="InwNumWag">

  <Description>Инвентарный номер вагона</Description>

  <Type>%String</Type>

  </Property>

- <Property name="EsrStanNaznWag">

  <Description>Код станции назначения вагона</Description>

  <Type>%String</Type>

  </Property>

- <Property name="WesGruz">

  <Description>Вес груза в вагоне в центнерах</Description>

  <Type>%Integer</Type>

  </Property>

- <Storage name="Default">

  <Type>%Library.CacheSerialState</Type>

  <State>InfoWagonState</State>

  <StreamLocation>^Lab1.Serial.InfoWagonS</StreamLocation>

- <Data name="InfoWagonState">

  <Structure>listnode</Structure>

  <Subscript>"Lab1.Serial.InfoWagon"</Subscript>

- <Value name="1">

  <Value>EsrStanNaznWag</Value>

  </Value>

- <Value name="2">

  <Value>InwNumWag</Value>

  </Value>

- <Value name="3">

  <Value>WesGruz</Value>

  </Value>

  </Data>

  </Storage>

  </Class>

  <Checksum value="1594998051" />

  </Export>