Листинг_DZ_VS__2014 (Методические указания к лабораторным работам), страница 3
Описание файла
Файл "Листинг_DZ_VS__2014" внутри архива находится в следующих папках: Методические указания к лабораторным работам, ЛР_15_КЛР_ПКШ. PDF-файл из архива "Методические указания к лабораторным работам", который расположен в категории "". Всё это находится в предмете "программирование на основе классов и шаблонов" из 2 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "книги и методические указания", в предмете "программирование на основе классов и шаблонов" в общих файлах.
Просмотр PDF-файла онлайн
Текст 3 страницы из PDF
-" <<no ;if ( name !=(char *)NULL){out << " Имя - " << name << endl; }else{out << " Имя не задано " << endl; };//if ( Home_Number !=(char *)NULL)out <<"Номер сим. -" << Home_Number << endl;else{out << " Символьное имя не задано " << endl; };//out << " Номер -" << iHome << endl <<"Этажей -" << EtagCount << " Жителей -" << MenCount <<endl;if (TypeHome == fast)cout << "Тип дома - простой ";if (TypeHome == multiple)cout << "Тип дома - много строений ";if (TypeHome == complex)cout << "Тип дома - сложный ";if ( HomeRemont ) cout << " Требуется ремонт! ";else cout << " Ремонт не нужен! ";cout << " Число квартир - " << NumbApartament << endl<< endl;}34//////////////////////////// Класс Home// Метод - Установить имя//////////////////void Home::setName(const char *HomName , const char *Number){// Имя из базового класса - резерв для прискаif ( name != NULL)delete []name;if ( HomName != (char *)NULL ){name= new char[strlen(HomName) + 1];strcpy_s(name , strlen(HomName) + 1 , HomName); }elsename = (char *)NULL;// Имя домаif ( Home_Number != NULL)delete []Home_Number;if ( Number != NULL){Home_Number= new char[strlen(Number) + 1];strcpy_s(Home_Number , strlen(Number) + 1 , Number);}elseHome_Number = (char *)NULL;};//////////////////////////// Класс Home// Метод - Установить все параметры//////////////////void Home::setAllParam(const char *HomName , const char *Number, int iH, int Etag ,int Men ,HomeType Type, int Apart , BOOL rem){// Имя из базового класса - резерв для прискаif ( name != NULL)delete []name;if ( HomName != (char *)NULL ){name= new char[strlen(HomName) + 1];strcpy_s(name, strlen(HomName) + 1, HomName); }elsename = (char *)NULL;// Имя из базового класса - резерв для прискаif ( Home_Number != NULL)delete []Home_Number;//if ( Number != NULL){Home_Number= new char[strlen(Number) + 1];strcpy_s(Home_Number , strlen(Number) + 1, Number) ;}elseHome_Number = (char *)NULL;iHome= iH;EtagCount= Etag;MenCount= Men;TypeHome = Type;NumbApartament = Apart;HomeRemont = rem;};// Методы дружественные - friend//////////////////////////// Класс Home// Перегрузка сложения домов35//////////////////Home & operator +(Home & H1 , Home & H2){Home *pTemp = new Home; // новый объект для сложения//pTemp->no = H1.no;// Имя базового - сумма именpTemp->name = new char[strlen(H1.name) + strlen(H2.name)+ 5 ]; // учтем пробелы!pTemp->name[0]='\0';if (H1.name != NULL)strcpy_s(pTemp->name, strlen(H1.name) + 1 , H1.name);if (H2.name != NULL){strcat_s(pTemp->name, strlen(H1.name) + strlen(H2.name)+ 5 ," + ");strcat_s(pTemp->name, strlen(H1.name) + strlen(H2.name)+ 5 ,H2.name);};// Имя = сумма имен Home_NumberpTemp->Home_Number = new char[strlen(H1.Home_Number) + strlen(H2.Home_Number)+ 5 ];pTemp->Home_Number[0]='\0';if (H1.Home_Number != NULL)strcpy_s(pTemp->Home_Number, strlen( H1.Home_Number ) + 1 , H1.Home_Number);if (H2.Home_Number != NULL){strcat_s(pTemp->Home_Number,strlen(H1.Home_Number) + strlen(H2.Home_Number)+ 5 ," + ");strcat_s(pTemp->Home_Number,strlen(H1.Home_Number) + strlen(H2.Home_Number)+ 5,H2.Home_Number);};// ПараметрыpTemp-> iHome= H1.iHome;pTemp-> EtagCount = H1.EtagCount;pTemp-> MenCount = H1.MenCount + H2.MenCount;pTemp-> TypeHome = complex;pTemp-> NumbApartament = H1.NumbApartament + H2.NumbApartament;pTemp->HomeRemont = (H1.HomeRemont || H2.HomeRemont ) ? true : false ;return *pTemp;};//////////////////////////// Класс улиц Street///////////////////////// Конструкторы Street///////////////////////// Конструкторы Street////////////////// Класс Street// Конструктор: - Пустые параметры//////////////////Street::Street():AbstrStreet() {// для базового классаno = NULL;name = (char *)NULL;Name_Street = (char *)NULL;Homes_num = NULL;StrType = two;Remont = false;RemontStreet = false;NumberStreet = NULL;ListOfNear = (Street *)NULL;};////////////////// Класс Street// Конструктор: Имя улицы (Name_Street) и имя для поиска (name) общие//////////////////36Street::Street(const char *sName) :AbstrStreet() {if ( sName != (char *) NULL ){ name= new char[strlen(sName) + 1];strcpy_s(name , strlen(sName) + 1 , sName);Name_Street= new char[strlen(sName) + 1];strcpy_s(Name_Street , strlen(sName) + 1 , sName); }else{name = (char *)NULL;Name_Street = (char *)NULL;};no = NULL;Homes_num = NULL;StrType = two;Remont = false;RemontStreet = false;NumberStreet = NULL;ListOfNear = (Street *)NULL;};////////////////// Класс Street// Конструктор: Имя улицы и имя для поиска разные//////////////////Street::Street(const char *sName , const char *sNumb):AbstrStreet(){// Имя базового для поискаif ( sNumb != (char *) NULL ){ name= new char[strlen(sNumb) + 1];strcpy_s(name , strlen(sNumb) + 1 , sNumb);}elsename = (char *)NULL;// Имя улицыif ( sName != (char *) NULL ){Name_Street= new char[strlen(sName) + 1];strcpy_s(Name_Street, strlen(sName) + 1 , sName); }elseName_Street = (char *)NULL;//no = NULL;Homes_num = NULL;StrType = two;Remont = false;RemontStreet = false;NumberStreet = NULL;ListOfNear = (Street *)NULL;};////////////////// Класс Street// Конструктор: Номер для поиска//////////////////Street::Street(int Num) {name = (char *)NULL;Name_Street = (char *)NULL;no = Num; // Номер из базового для поискаHomes_num = NULL;StrType = two;Remont = false;RemontStreet = false;NumberStreet = Num;ListOfNear = (Street *)NULL;37};////////////////// Класс Street// Конструктор: Имя улицы и номер для поиска//////////////////Street::Street(const char *sName , int Num) :AbstrStreet() {// Имя улицы и для поискаif ( sName != (char *) NULL ){ name= new char[strlen(sName) + 1];strcpy_s(name , strlen(sName) + 1, sName);Name_Street= new char[strlen(sName) + 1];strcpy_s(Name_Street, strlen(sName) + 1 , sName); }else{name = (char *)NULL;Name_Street = (char *)NULL;};no = Num; // Номер для поискаHomes_num = NULL;StrType = two;Remont = false;RemontStreet = false;NumberStreet = Num;ListOfNear = (Street *)NULL;};////////////////// Класс Street*!!!!!!!!!!!!!!!**// Конструктор копирования//////////////////Street::Street(Street & S) :AbstrStreet() {if ( S.name != (char *) NULL ){ name= new char[strlen(S.name) + 1];strcpy_s(name , strlen(S.name) + 1, S.name);}elsename = (char *)NULL;if ( S.Name_Street != (char *) NULL ){Name_Street= new char[strlen(S.Name_Street) + 1];strcpy_s(Name_Street , strlen(S.Name_Street) + 1 , S.Name_Street); }elseName_Street = (char *)NULL;no = S.no;Homes_num = S.Homes_num;StrType = S.StrType;Remont = S.Remont;RemontStreet = S.RemontStreet;NumberStreet = S.NumberStreet;ListOfNear = S.ListOfNear;// Цикл формирования новой улицыint nRazm = 0;nRazm = (int ) S.GetCount() ;// !!! Для LIST!!!POSITION pos = S.GetHeadPosition();for ( int i = 0 ; i < nRazm ; i++){// !!! Для LIST!!!AddTail( ((Home * ) S.GetAt(pos)));S.GetNext( pos );38///};};////////////////////////// Методы класса Street////////////////////////////////////////// Класс Street*!!!!!!!!!!!!!!!**// Метод печати улицы/////////////////////void Street::printOn(ostream & out) {if ( Name_Street != (char *)NULL ){ out << "{{{******* "<<endl<<"Улица - "<< Name_Street ; }else{out << "Название не задано! "<<endl;};if ( name != (char *)NULL ){ out << " Ключ для поиска - "<< name << endl ; }else{out << "Ключ не задан! "<<endl;};out << "Номер улицы - "<< NumberStreet ;out << " Номер для поиска - "<< no << endl;out << "Число домов на улице - "<< Homes_num ;if ( RemontStreet )out << " Нужен ремонт улицы."<< endl;elseout << " Улица отремонтирована."<< endl;if ( GetRemont() )out << "Нужен ремонт домов улицы."<< endl;elseout << "Все эти дома отремонтированы."<< endl;int nRazm = 1;nRazm = (int ) GetCount() ;out << "Число в списке = "<< GetCount()<<"}" << endl;// Цикл просмотра спискаPOSITION pos = GetHeadPosition();//for ( int i = 0 ; i < nRazm ; i++){((Home *)(GetAt( pos )))->printOn(out);GetNext( pos );}out << "*******}}}" << endl;};////////////////// Класс Street*!!!!!!!!!!!!!!!!!!**/// Перегрузка присваивания для улицы//////////////////////Street Street::operator =(Street & S) {if ( S.name != (char *) NULL ){ name= new char[strlen(S.name) + 1];strcpy_s(name , strlen(S.name) + 1, S.name);}elsename = (char *)NULL;if ( S.Name_Street != (char *) NULL )39{Name_Street= new char[strlen(S.Name_Street) + 1];strcpy_s(Name_Street , strlen(S.Name_Street) + 1 , S.Name_Street); }elseName_Street = (char *)NULL;no = S.no;Homes_num = S.Homes_num;StrType = S.StrType;Remont = S.Remont;RemontStreet = S.RemontStreet;NumberStreet = S.NumberStreet;ListOfNear = S.ListOfNear;// Цикл формирования новой улицыint nRazm = 0;nRazm = (int ) S.GetCount() ;// Цикл добавления в списке!POSITION pos = S.GetHeadPosition();for ( int i = 0 ; i < nRazm ; i++){AddTail( ((Home * ) S.GetAt(pos)));S.GetNext( pos );};return *this;};////////////////// Класс Street*// Метод вычисления необходимости ремонта домов улицы///////////////////////HomeRemontBOOL Street::GetRemont(){BOOL Flag = false;int nRazm = 0;nRazm = (int ) GetCount() ;POSITION pos = GetHeadPosition();for ( int i = 0 ; i < nRazm ; i++){if (((Home * ) GetAt(pos))->HomeRemont ) Flag = true ; // Хотя бы одна требует ремонтаGetNext( pos );};return Flag;};////////////////// Класс Street*// Метод добавления дома на улицу (выбор варианта добавления)//////////////////////void Street::add(Home *pH , TypeAddDel t , int Numb , TypeAddDel tcr ) {//if ( t == tail) AddTail((CObject *) pH);if ( t == head) AddHead((CObject *) pH);// Добавление по номеруif ( t == Number){if( GetCount() < Numb ){ cout << endl << "Добавление невозможно, проверьте номер!" << endl;return; };int nRazm = (int ) GetCount() ;POSITION pos = GetHeadPosition();for ( int i = 0 ; i < Numb ; i++){// Навигация по списку40GetNext( pos );};InsertAfter (pos , (CObject *) pH);};// Запомним число домов на улицеHomes_num = (int) GetCount() ;};////////////////// Класс Street*!!!!!!!!!!!!!!!!!// Метод удаления дома с улицы (выбор варианта удаления)/////////////////////void Street::del( TypeAddDel t , int Numb , TypeAddDel tdl) {if ( t == head) RemoveHead();if ( t == tail) RemoveTail();// Удаление по номеруif ( t == Number){if( GetCount() < Numb ){ cout << endl << "Удаление невозможно, проверьте номер!" << endl;return; };int nRazm = (int ) GetCount() ;POSITION pos = GetHeadPosition();for ( int i = 0 ; i < Numb ; i++){// Навигация по спискуGetNext( pos );};RemoveAt (pos );};Homes_num = (int) GetCount() ;};////////////////// Класс Street*!!!!!!!!!!!!!!!!!// дружественная функция для операции сложения улиц/////////////////////Street & operator +( Street & X , Street & Y ){Street *pTemp = new Street;pTemp->name = new char[strlen(X.name) + strlen(Y.name) + 5 ];if (X.name != (char *)NULL ){ strcpy_s(pTemp->name, strlen(X.name) + 1, X.name);}elsepTemp->name[0]='\0';if (Y.name != (char *)NULL ){ strcat_s(pTemp->name, strlen(X.name) + strlen(Y.name) + 5 , " + ");strcat_s(pTemp->name, strlen(X.name) + strlen(Y.name) + 5 , Y.name); }// Name_StreetpTemp->Name_Street = new char[strlen(X.Name_Street) + strlen(Y.Name_Street) + 5];if (X.Name_Street != (char *)NULL ){ strcpy_s(pTemp->Name_Street, strlen(X.Name_Street) + 1 , X.Name_Street);}elsepTemp->Name_Street[0]='\0';if (Y.Name_Street != (char *)NULL ){strcat_s(pTemp->Name_Street,strlen(X.Name_Street) + strlen(Y.Name_Street) + 5 ," + ");strcat_s(pTemp->Name_Street,strlen(X.Name_Street) + strlen(Y.Name_Street) + 5 ,Y.Name_Street);};// Параметры StreetpTemp->Homes_num = NULL;pTemp->NumberStreet = X.NumberStreet;pTemp->Remont = (X.GetRemont() || Y.GetRemont()) ? true : false;// для домов41pTemp->RemontStreet = (X.RemontStreet || Y.RemontStreet) ? true : false; ;pTemp->StrType = ( X.StrType == two || Y.StrType == two) ? two : one ;pTemp->ListOfNear = (Street * )NULL;// резерв, нужно сложить списки соседних улиц// Первый списокint nRazm = 0;nRazm = (int ) X.GetCount() ;POSITION pos = X.GetHeadPosition();for ( int i = 0 ; i < nRazm ; i++){// Добавить на улицуpTemp->AddTail( ((Home * ) X.GetAt(pos)));X.GetNext( pos );};// Второй списокnRazm = (int ) Y.GetCount() ;pos = Y.GetHeadPosition();for ( int i = 0 ; i < nRazm ; i++){// Добавить на улицуpTemp->AddTail( ((Home * )Y.GetAt(pos)));Y.GetNext( pos );};pTemp->Homes_num = (int )(pTemp->GetCount()) ;return *pTemp;};////////////////// Класс Street*!!!!!!!!!!!!!!!!!// Метод подсчета числа жителей/////////////////////int Street::GetNumberMens(){int Summ = 0;// Циклint nRazm = 0;nRazm = (int ) GetCount() ;POSITION pos = GetHeadPosition();for ( int i = 0 ; i < nRazm ; i++){Summ = Summ + ((Home *)GetAt( pos))->MenCount ;GetNext( pos );};return Summ;};////////////////// Класс Street*!!!!!!!!!!!!!!// Метод подсчета числа квартир/////////////////////int Street::GetNumberApart(){int Summ = 0;int nRazm = 0;nRazm = (int ) GetCount() ;POSITION pos = GetHeadPosition();for ( int i = 0 ; i < nRazm ; i++){Summ = Summ + ((Home *)GetAt( pos))->NumbApartament ;GetNext( pos );};return Summ;};////////////////// Класс Street// Метод установки названия улицы/////////////////////void Street::SetNameStreet(const char * NameStr){42if (Name_Street != (char *) NULL)delete []Name_Street;if ( NameStr != (char *) NULL ){Name_Street= new char[strlen(NameStr) + 1];strcpy_s(Name_Street , strlen(NameStr) + 1, NameStr);}elseName_Street = (char *) NULL;return;};////////////////// Класс Street// Метод установки имени для поиска улицы/////////////////////void Street::SetKeyNameStreet(const char * sName){if (name != (char *) NULL)delete []name;if ( sName != (char *) NULL ){name= new char[strlen(sName) + 1];strcpy_s(name , strlen(sName) + 1 , sName);}elseName_Street = (char *) NULL;return;};////////////////////////Модуль - DZ_List.cpp (для списков)// DZ_List.cpp// Главный модуль проекта для отладки и сдачи системы классов (вариант списки)#include "stdafx.h"#include "DZ_Class.h"#include <iostream>using namespace std;int main(void)//int mainMETOD(){int iPunkt;system (" chcp 1251>nul ");while ( true ) {system (" CLS ");cout << endl << "Меню тестового примера системы классов улиц." << endl << endl;// Новое менюcout << endl << "1.