Техническое описание_ТО_2014 (1079877), страница 2
Текст из файла (страница 2)
Методы класса HomeВ таблице представлены методы класса Home.Типвозвратаvoid№ п/пПрототип1.void setName(const char *HomName, const char *Number=NULL)2.const char *getName()const char *3.const char *getNumb()const char *4.int getNo()intНазначениеУстановить имядома иномердомаПолучитьимя домаПолучитьномердомаПолучитьномердома дляпоискаПараметрыHomName - имядома иNumber - номер домаНетНетНет7Типвозвратаvoid№ п/пПрототип5.void getParam(int & iH, int & Etag,int & Men ,HomeType & Type, int &Apart )6.void setParam(int iH, int Etag ,intMen ,HomeType Type, int Apart )void7.void setAllParam(const char*HomName , const char *Number, intiH, int Etag , int Men ,HomeTypeType, int Apart , BOOL rem = false)void8.virtual void printOn(ostream & out)voidНазначенПараметрыиеПолучить iH -номер дома,параметры Etag - этажность,домаMen - число жителей,Type – тип (значениетипа дома выбираетсяиз набораперечисленияHomeType см.
выше),Apart - число квартирЗадатьiH -номер дома,новыеEtag - этажность,параметры Men - число жителей,домаType – тип (значениетипа дома выбираетсяиз набораперечисленияHomeType см. выше),Apart - число квартирЗадать все HomName - имяновыедома,параметры Number - имя домадомадля поискаiH -номер дома,Etag - этажность,Men - число жителей,Type – тип (значениетипа дома выбираетсяиз набораперечисленияHomeType см.
выше),Apart - число квартирrem -признак ремонтаПечать вOut – тип ostreamстандартный потокПри сложении двух домов суммируются: число квартир, число жителей, имена домов,устанавливается признак ремонта по логике “ИЛИ”. Этажность определяется по числу этажейпервого дома. Тип дома задается как сложный (complex).6. КЛАСС Улиц - StreetКласс Street. Улица – объекты данного типа в упорядоченном виде содержатинформацию о домах улице, названии улицы, типе улицы, соседних улицах (как резерв),необходимости ремонта улицы, числе домов, номера улицы (как резерв).
Предусматриваетсявозможность добавления домов на улицу и их удаления, изменения других параметров улицы.6.1. Данные и переменные класса StreetВ таблице приведены свойства класса улиц (Street).8Названиеchar *Name_Street;int NumberStreet;int Homes_num;BOOL Remont;Тип свойстваchar *intintBOOLЗащитаpublicpublicpublicpublicBOOL RemontStreet;StreetType StrType;BOOLStreetTypepublicpublicStreet * ListOfNear;Street *publicНазначениеНазвание улицыНомер улицыЧисло домов на улицеПризнак необходимостиремонта домов улицыПризнак ремонта самой улицыТип улицы: one(односторонняя), two (дванаправления) , more (многополос)Список соседних улиц( зарезервировано)6.2.
Конструкторы класса StreetНиже в таблице приведен список конструкторов класса Street.№ п/п ПрототипТипвозврата1.Street();Street &2.Street(const char *sName);Street &3.Street(const char *sNumbSearch, const char*sName);Street &4.Street(int Num);Street &5.Street(const char *sName , int Num);Street &6.Street(Street & S);Street &Назначение/ПараметрыНетСоздание улицы сназваниемСоздание улицы сназванием и именем дляпоискаСоздание улицы сномеромСоздание улицы сименем и номеромСоздание улицы наоснове другой (наоснове ссылки)6.3.
Методы класса Street№ п/п1.Типвозвратаvoid add(Home *pH, TypeAddDel T= voidtail , int Numb = 1 , TypeAddDel TC= createObj);ПрототипНазначениеПараметрыДобавлениеpH - указатель надома на улицу домT - куда добавить(head, tail,Number),TC - создавать линовый (createObj,nocreateObj )9Типвозвратаvoid№ п/пПрототип2.void del(Home *pH , TypeAddDel T=tail , int Numb = 1 , TypeAddDel TD=nodeleteObj);3.virtual void printOn(ostream & out);void4.int GetNumberHome();int5.int GetNumberMens();int6.int GetNumberApart();int7.char * GetNameStreet();char *8.char * GetKeyNameStreet();char *9.int GetNumbStreet(){ returnNumberStreet;};int10.int GetKeyNumbStreet();int11.void SetNameStreet(const char *NameStr);void12.void SetKeyNameStreet(const char *sName);void13.void SetNumbStreet( int n );void14.void SetKeyNumbStreet( int n);voidНазначениеПараметрыУдалениядома с улицыpH - указатель надом кудавыбираетсяT - куда добавить(head, tail,Number),TD - удалять лиобъект (deleteObj,nodeleteObj)Печатьобъектаулицы встандартныйпотокПолучитьчисло домовна улицеПолучитьчисложителей наулицеПолучитьчисло квартирна улицеПолучитьназваниеулицыПолучитьномер домасимвольныйПолучитьномер домачисловойПолучитьномер домачисловой дляпоискаУстановитьназваниеулицыУстановитьимя улицыдля поискаУстановитьномер улицыУстановитьномер улицыдля поискаout - ostreamстандартныйпотокнетнетнетнетнетнетнетNameStr - имяулицыsName - имяулицы для поискаn - номер улицыn - номер улицыдля поиска1015.BOOL GetRemont();ТипвозвратаBOOL16.BOOL GetRemontStr();BOOL17.void SetRemontStr(BOOL rS) ;void18.StreetType GetStreetType();StreetType19.void SetStreetType(StreetType t);void№ п/пПрототипНазначениеПолучитьпризнакремонтадомов наулицеПолучитьпризнакремонтаулицыУстановитьпризнакремонтаулицы (false,true)Получить типулицы: one(односторонняя), two (дванаправления), more (многополос)Установитьтип улицыПараметрынетнетrS - признакремонта улицынетt – новый типулицы: one, two ,moreОтдельного пояснения методов классов в данном техническом описании не приводиться.В колонке таблицы “Примечания” указана расшифровка необходимых параметров и ихзначения.7.
Данные и файлы данных программного обеспеченияВ системе классов домов и улиц не формируется отдельных файлов. Структуры данныхи перечисления для задания параметров приведены в таблице предыдущего раздела (“Общиеописания ”).8. Основные алгоритмы методов классов ПОНекоторые важные алгоритмы системы классов представлены ниже на рисунках.8.1. Алгоритм вычисления признака ремонта.11Алгоритм вычисления признака ремонта домов улицы (этот параметр задается в объектеулица отдельно) приведен ниже (функция GetRemont() – метод класса Street):Н ачалоFlag = falseУстанов ка наголо ву спи скаП о в сем у спи скудом овС л ед . элем ентН етH om eR em ont?ДаFlag = trueR em ont = trueКонецРис.
1 Вычисление признака ремонта домов улицыДля вычисления признака ремонта домов улицы выполняется просмотр всех домов изсписка и , при наличии, хотя бы одного признака ремонта у одного из домов признак ремонта(Remont) устанавливается в истину. Функция в этом случае возвращает тоже значение истина.8.2. Алгоритм сложения домов.Алгоритм сложения двух домов (Н1 и Н2) приведен ниже (перегруженная с помощьювнешней функции операция сложения – дружественная классу Home):НачалоHome *pTemp = new Home;pTemp->no = H1.no;pTemp->name= NULL;ДаpTemp->name = H1.name;H1.name != NULLНетДаpTemp->name = H1.name+H2.name;H2.name != NULLНетpTemp->Home_Number= NULL;pTemp->Home_Number=H1.Home_Number;ДаH1.Home_Number!= NULLНетpTemp->Home_Number=H1.Home_Number+H2.Home_Number;ДаH1.Home_Number!= NULLНетСложение и вычислениехарактеристик pTemp наоснове Н1 и Н2КонецРис.
2 Сложение двух домовСначала проверяются значения полей с именами, после чего выполняется конкатенацияимен для номера дома и поиска. Другие характеристики домов, кроме этажности, суммируются.8.3. Алгоритм сложения двух улиц.12Алгоритм сложения двух улиц (X и Y) приведен ниже (перегрузка выполнена внешнейдружественной классу Street операцией):НачалоlistElement * pElemTemp = X.Head;pTemp->tail= NULL;pTemp->head = NULL;Home *pTemp = new Street;pTemp->name= NULL;ДаpTemp->name = HX.name;X.name != NULLpElempTemp!=NULLНетДаpTemp->name = X.name+Y.name;pTemp->add(pElempTemp->Elem);Y.name != NULLНетpTemp->Name_Street= NULL;pTemp->Name_Street=X.Name_Street;ДаpElemTemp = Y.Head;pTemp->tail= NULL;pTemp->head = NULL;X.Name_Street!= NULLНетpTemp->Name_Street=X.Name_Street+Y.Name_Street;ДаpElempTemp!=NULLY.Name_Street!= NULLpTemp->add(pElempTemp->Elem);НетСложение и вычислениехарактеристик pTemp наоснове Н1 и Н2КонецРис.
3 Сложение двух улицПервоначально выполняется проверка и формирование названия улицы, как сложениедвух имен. Кроме того, аналогичным образом вычисляется имя для поиска в списке. Далеевыполняются два цикла добавления на новую улицу всех домов из первой улицы (X) и второйулицы (Н).8.4. Алгоритм перегрузки операции присваивания улиц.Алгоритм перегрузки операции присваивания двух улиц (текущей – this и из параметраS) приведен ниже (перегрузка выполнена внутренней для класса Street операцией “=”):НачалоДаS.name != NULLname = S.name;Нетname =NULL;ДаName_street =S.Name_street ;S.Name_street != NULLНетName_street = NULLno = S.no;Homes_num = .Homes_num;StrType = S.StrType;Remont = S.Remont;RemontStreet = .RemontStreet;NumberStreet = .NumberStreet;(List &) *this = S ;КонецРис. 4 Перегрузка оператора присваивания улицВ данном алгоритме первоначально выполняется определение параметров name (имя дляпоиска улиц в списках) и Name_Street (название улиц).
Затем присваиваются все параметрыулицы. Для копирования списков домов используется перегруженный оператор присваиваниясписков, который вызывается с помощью следующего присваивания:(List &) *this = S ;Явное приведение к типу ссылки на список является в данном случае необходимым.8.5. Алгоритм очистки списка.13Алгоритм очистки списка (метод класса List - ClearList) приведен ниже:НачалоlistElement *pTemp = Head;pTemp !=(listElement*)NULLHead = (listElement *)NULL;Tail = (listElement *)NULL;CurrentNumb = NULL;NumberElem = NULL;Нетt == deleteObjСлед.
элементДаDelete pTemp->ElemКонецРис. 5 Очистка списка8.6. Алгоритм добавление дома по номеру.Алгоритм добавления дома по номеру (метод класса List - AddNumber) приведен нарисунке расположенном ниже:НачалоПолучение предыдущегоэлемента по отношению кзаданному номеру (Numb -1)и связывание списковНетNumb=1 & Numb <1AddHeadВызов методаRenumberВызов методаt == CreateObjДаНетElemList->Elem = new HomeNumb> NumberElemДаAddTailВызов методаRenumberВызов методаRenumberВызов методаКонецРис. 6 Добавление дома по номеруВ этом алгоритме после любого вызова метода нижнего уровня добавления (AddHead,AddTail и связывания списков) выполняется новая нумерация списка( Renember). Еслипараметр t (тип - TypeAddDel) имеет значение CreateObj, то создается новый объект.149.