Листинг_DZ(VS)_2014 (Методические указания к лабораторным работам), страница 3
Описание файла
Файл "Листинг_DZ(VS)_2014" внутри архива находится в следующих папках: Методические указания к лабораторным работам, ЛР_15_КЛР_ПКШ. Документ из архива "Методические указания к лабораторным работам", который расположен в категории "". Всё это находится в предмете "программирование на основе классов и шаблонов" из 2 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "книги и методические указания", в предмете "программирование на основе классов и шаблонов" в общих файлах.
Онлайн просмотр документа "Листинг_DZ(VS)_2014"
Текст 3 страницы из документа "Листинг_DZ(VS)_2014"
// дружественная функция для операции сложения улиц
/////////////////////
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);}
else
pTemp->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_Street
pTemp->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);}
else
pTemp->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);
};
// Параметры Street
pTemp->Homes_num = NULL;
pTemp->NumberStreet = X.NumberStreet;
pTemp->Remont = (X.GetRemont() || Y.GetRemont()) ? true : false; // для домов
pTemp->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() ;
for ( int i = 0 ; i < nRazm ; i++)
{
pTemp->Add( ((Home * ) X.GetAt(i)));
};
nRazm = (int ) Y.GetCount() ;
for ( int i = 0 ; i < nRazm ; i++)
{
pTemp->Add( ((Home * ) Y.GetAt(i)));
};
pTemp->Homes_num = (int )(pTemp->GetCount()) ;
return *pTemp;
} ;
////////////////// Класс Street*
// Метод подсчета числа жителей
/////////////////////
int Street::GetNumberMens(){
int Summ = 0;
// Цикл подсчета
int nRazm = 0;
nRazm = (int ) GetCount() ;
for ( int i = 0 ; i < nRazm ; i++)
{
Summ = Summ + ((Home *)GetAt( i))->MenCount ;
};
return Summ;
};
////////////////// Класс Street*
// Метод подсчета числа квартир
/////////////////////
int Street::GetNumberApart(){
int Summ = 0;
int nRazm = 0;
// Цикл подсчета
nRazm = (int ) GetCount() ;
for ( int i = 0 ; i < nRazm ; i++)
{
Summ = Summ + ((Home *)GetAt( i))->NumbApartament ;
};
return Summ;
};
////////////////// Класс Street
// Метод установки названия улицы
/////////////////////
void Street::SetNameStreet(const char * NameStr)
{
if (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);
}
else
Name_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);
}
else
Name_Street = (char *) NULL;
return;};
////////////////////////
Модуль - DZ_Array.cpp (для массивов)
// DZ_Array.cpp
// Главный модуль проекта для отладки и сдачи системы классов (база списки)
#include "stdafx.h"
#include "DZ_Class.h"
#include <iostream>
using namespace std;
///////////////////////////////// Для ПМИ
//int mainMETOD() // Эту строку нужно раскомментировать, а следующую закоментировать
// при подключении отладочного варианта текста программы (и наоборот для методики испытаний)
int main(void)
{
int iPunkt;
system (" chcp 1251>nul ");
while ( true ) {
system (" CLS ");
cout << endl << "Меню тестового примера системы классов улиц." << endl << endl;
// Новое меню
cout << endl << "1. ТЗ - 5.1.1 Создание улиц с домами " << endl;
cout << "2. ТЗ - 5.1.2 Создание объектов для домов улицы " << endl;
cout << "3. ТЗ - 5.1.3 Создание объектов для домов улицы на основе других " << endl;
cout << "4. ТЗ - 5.1.4 Учет свойств дома(см. ТЗ) " << endl;
cout << "5. ТЗ - 5.1.5 Задание и получение характеристик дома " << endl;
cout << "6. ТЗ - 5.1.6 Сложение двух домов " << endl;
cout << "7. ТЗ - 5.1.7 Перегрузить оператор присваивания для домов " << endl;
cout << "8. ТЗ - 5.1.8 Распечатка характеристик дома " << endl;
cout << "9. ТЗ - 5.1.9 Учет свойств улицы(см. ТЗ) " << endl;
cout << "10. ТЗ - 5.1.10 Распечатка содержания улицы и ее свойств " << endl;
cout << "11. ТЗ - 5.1.11 Задание характеристик улицы " << endl;
cout << "12. ТЗ - 5.1.12 Получение характеристик улицы " << endl;
cout << "13. ТЗ - 5.1.13 Сложение двух улиц " << endl;
cout << "14. ТЗ - 5.1.14 Добавление дома на улицу " << endl;
cout << "15. ТЗ - 5.1.15 Удаление дома с улицы " << endl;
cout << "16. ТЗ - 5.1.16 Установка и снятие признака ремонта улицы " << endl;
cout << "17. ТЗ - 5.1.17 Автоматическое получение признака ремонта домов улицы " << endl;
cout << "18. ТЗ - 5.1.18 Перегрузка оператора присваивания для улиц " << endl;
cout << endl << "0.Выход " << endl;
// system (" pause ");
cin >> iPunkt;
// cout << "Ввели - " << iPunkt<< endl;
switch(iPunkt )
{
////////////////////
case 1:
cout << endl << "ТЗ - 5.1.1 Создание улиц с домами " << endl;
{
Street S1("Ленинский проспект");
S1.printOn(cout);
Home H1("Жилой","д.2", 7,2,3, fast , 5);
Home H2("Магазин", "д.3", 3);
Home H3("ДЭЗ", "д.4а", 4,2);
S1.add(&H1);
S1.add(&H2);
S1.add(&H3);
S1.printOn(cout);
}
system (" pause ");
system (" pause ");
break;
///
case 2:
cout << "5.1.2 Создание объектов для домов улицы " << endl;
{
Home H1;
Home H2("Жилой","д.2");
Home H3("Жилой", "д.3", 3);
Home H4("Жилой", "д.4а", 4,2);
Home H5("ДЭЗ", "д.5", 5,2,3);
Home H6("Жилой", "д.6", 6,2,3, fast);
Home H7("Магазин", "д.7", 7,2,3, multiple , 5);
H1.printOn(cout);
H2.printOn(cout);
system (" pause ");
H3.printOn(cout);
H4.printOn(cout);
system (" pause ");
H5.printOn(cout);
H6.printOn(cout);
system (" pause ");
H7.printOn(cout);
}
system (" pause ");
break;
///
case 3:
cout << "5.1.3 Создание объектов для домов улицы на основе других " << endl;
{
Home H6("Жилой", "д.6", 6,2,3, fast, 100);
Home H7("Магазин", "д.7", 7,2,3, multiple , 5);
Home Test(H6);
H6.printOn(cout);
Test.printOn(cout);
system (" pause ");
system (" pause ");
cout << "Указатель!!! " << endl;
Home *pHome = new Home (H7);
H7.printOn(cout);
pHome->printOn(cout);
delete pHome;
}
system (" pause ");
break;
//
case 4:
cout << "5.1.4 Учет свойств дома(см. ТЗ) " << endl;
{
Home H6("Жилой", "д.6", 6,2,3, fast, 100);
H6.printOn(cout);
Home H7("Магазин", "д.7", 7,2,3, multiple , 5);
H7.printOn(cout);
}
system (" pause ");
system (" pause ");
break;
//
case 5:
cout << "5.1.5 Задание и получение характеристик дома " << endl;
{
Home H6("Жилой", "д.6", 6,2,3, fast, 100);
H6.printOn(cout);
int iH, Etag , Men , Apart ;
HomeType Type;
// Получение
H6.getParam(iH , Etag, Men, Type , Apart);
cout << "Номер -" << iH <<
" Этажей -" << Etag << " Жителей -" << Men << endl;
if (Type == fast)
cout << "Тип дома - простой ";
if (Type == multiple)
cout << "Тип дома - много строений ";
if (Type == complex)
cout << "Тип дома - сложный ";
cout << " Число квартир - " << Apart << endl;
H6.setParam( 11,12,13,fast, 15 );
H6.printOn(cout);
system (" pause ");
system (" pause ");
// Задание
cout << "Признак ремонта!!! " << endl;
Home H7("Магазин", "д.7", 7,2,3, multiple , 5);
H7.printOn(cout);
H7.setAllParam("Аптека", "10/8", 1,2,3,fast, 5 , true);
H7.printOn(cout);
}
system (" pause ");
break;
//
case 6:
cout << "5.1.6 Сложение двух домов " << endl;
{
Home H1("Жилой", "д.6", 6,2,3, fast , 3);
Home H2("Ашан", "д.7", 9,10,11, multiple , 5);
Home Temp;
Temp = H1 + H2;
H1.printOn(cout);
H2.printOn(cout);
Temp.printOn(cout);
}
system (" pause ");
system (" pause ");
//
break;
//
case 7:
cout << "5.1.7 Перегрузить оператор присваивания для домов " << endl;
{
Home H1("Жилой", "д.6", 6,2,3, fast , 3);
Home Temp;
Temp = H1;
H1.printOn(cout);
Temp.printOn(cout);
H1.setName("Перекресток");
H1.printOn(cout);
Temp.printOn(cout);
}
system (" pause ");
system (" pause ");
//
break;
//
case 8:
cout << "5.1.8 Распечатка характеристик дома " << endl;
{
Home H1("Жилой", "д.6", 6,2,3, fast , 3);
H1.printOn(cout);
}
system (" pause ");
system (" pause ");
//
break;
//
case 9:
cout << "5.1.9 Учет свойств улицы(см. ТЗ) " << endl;
{
Home H2("Жилой","д.2", 7,2,3, fast , 5);
Home H3("Магазин", "д.3", 3);
Home H4("ДЭЗ", "д.4а", 4,2);
Street SNew("Улица" , 15);
SNew.printOn(cout);
SNew.add(&H2);
SNew.add(&H3);
SNew.add(&H4);
SNew.printOn(cout);
}
system (" pause ");
system (" pause ");
//
break;
//
case 10:
cout << "5.1.10 Распечатка содержания улицы и ее свойств" << endl;
{
Home H2("Жилой","д.2", 7,2,3, fast , 5);
Home H3("Магазин", "д.3", 3);
Home H4("ДЭЗ", "д.4а", 4,2);
Street SNew("Улица" , 15);
SNew.printOn(cout);
SNew.add(&H2);
SNew.add(&H3);
SNew.add(&H4);
SNew.printOn(cout);