МУ_ДЗ_2014 (1079920), страница 31
Текст из файла (страница 31)
getchar();
break;
2.18.3. Результаты работы фрагмента программы
16
5.1.16 Установка и снятие признака ремонта улицы
{{{*******
Улица - Улица 1 Ключ для поиска - Улица 1
Номер улицы - 15 Номер для поиска - 15
Число домов на улице - 2 Улица отремонтирована.
Все эти дома отремонтированы.
Список {
Номер - 1 Название Жилой
Номер - 2 Название Магазин
}
*******}}}
Улице не нужен ремонт!
После установки!!!!
Улице нужен ремонт!
После снятия признака ремонта!!!!
Улице не нужен ремонт!
Enter
2.19.Фрагмент текста программы для проверки п.п.5.1.17 ТЗ
2.19.1. Пояснения текста фрагмента
В данном фрагменте проверяется автоматическая установка признака ремонта домов улицы (не надо путать с признаком ремонта самой улицы). Признак устанавливается автоматически, если хотя бы один ее дом требует ремонта. Первоначально на улицу S1 добавлено два дома, не требующих ремонта (Н2 и Н3). Затем с помощью метода GetRemont получается признак ремонта домов и распечатывается. Затем у одного из домов Н3 устанавливается признак ремонта дома с помощью метода setAllParam класса Home. Для установки признака дом удаляется с улицы (del) и затем снова добавляется (add). Затем распечатываются характеристики измененного дома. После этого снова с помощью метода GetRemont получается признак ремонта домов улицы и распечатывается.
2.19.2. Текст фрагмента программы
case 17:
cout << "5.1.17 Автоматическое получение признака ремонта домов улицы " << endl;
{
Home H2("Жилой","д.2", 7,2,3, fast , 5);
Home H3("Магазин", "д.3", 3);
Street S1("Улица 1" , 15);
S1.add(&H2);
S1.add(&H3);
cout << "До установки признака ремонта дома и вычисления признака ремонта домов улицы!!!!" << endl;
S1.printOn(cout);
if ( S1.GetRemont() )
cout << "На улице нужен ремонт домов!" << endl;
else
cout << "На улице не нужен ремонт домов!" << endl;
S1.del(&H3 , tail);
H3.setAllParam("Магазин", "д.3", 1,2,3,fast, 3 , true);
H3.printOn(cout);
S1.add(&H3);
S1.GetRemont();
cout << "После вычисления признака ремонта домов улицы!!!!" << endl;
S1.printOn(cout);
if ( S1.GetRemont() )
cout << "На улице нужен ремонт домов!" << endl;
else
cout << "На улице не нужен ремонт домов!" << endl;
}
getchar();
getchar();
break;
2.19.3. Результаты работы фрагмента программы
17
5.1.17 Автоматическое получение признака ремонта домов улицы
До установки признака ремонта дома и вычисления признака ремонта домов улицы!!!!
{{{*******
Улица - Улица 1 Ключ для поиска - Улица 1
Номер улицы - 15 Номер для поиска - 15
Число домов на улице - 2 Улица отремонтирована.
Все эти дома отремонтированы.
Список {
Номер - 1 Название Жилой
Номер - 2 Название Магазин
}
*******}}}
На улице не нужен ремонт домов!
Номер сп. -0 Имя - Магазин
Номер сим. -д.3
Номер -1
Этажей -2 Жителей -3
Тип дома - простой Требуется ремонт! Число квартир - 3
После вычисления признака ремонта домов улицы!!!!
{{{*******
Улица - Улица 1 Ключ для поиска - Улица 1
Номер улицы - 15 Номер для поиска - 15
Число домов на улице - 2 Улица отремонтирована.
Нужен ремонт домов улицы.
Список {
Номер - 1 Название Жилой
Номер - 2 Название Магазин
}
*******}}}
На улице нужен ремонт домов!
Enter
2.20.Фрагмент текста программы для проверки п.п.5.1.18 ТЗ
2.20.1. Пояснения текста фрагмента
Создаются две улицы S1(со всеми параметрами и двумя домами Н2 и Н3) и SNew(с минимумом параметров). Далее выполняется операция присваивания домов –“=”. Исходные улицы и улица SNew после присваивания распечатывается. Далее улица S1 изменяется – из нее удаляется один дом Н3. После этого обе улицы снова распечатываются (printOn). После этого S1 изменяется, а SNew остается неизменной.
2.20.2. Текст фрагмента программы
case 18:
cout << "5.1.18 Перегрузка оператора присваивания для улиц " << endl;
{
Home H2("Жилой","д.2", 7,2,3, fast , 5);
Home H3("Магазин", "д.3", 3);
H3.setAllParam("Магазин", "д.3", 1,2,3,fast, 3 , true);
Street S1("Улица 1" , 15);
Street SNew("Улица" , 15);
S1.add(&H2);
S1.add(&H3);
S1.printOn(cout);
SNew.printOn(cout);
SNew = S1;
SNew.printOn(cout);
S1.del(&H3 , head);
getchar();
getchar();
S1.SetNameStreet("Новое название S1 ");
cout << "После изменения S1 (название и удален первый)!!!!" << endl;
cout << "S1!!!!" << endl;
S1.printOn(cout);
cout << "SNew!!!!" << endl;
SNew.printOn(cout);
}
getchar();
break;
2.20.3. Результаты работы фрагмента программы
18
5.1.18 Перегрузка оператора присваивания для улиц
{{{*******
Улица - Улица 1 Ключ для поиска - Улица 1
Номер улицы - 15 Номер для поиска - 15
Число домов на улице - 2 Улица отремонтирована.
Нужен ремонт домов улицы.
Список {
Номер - 1 Название Жилой
Номер - 2 Название Магазин
}
*******}}}
{{{*******
Улица - Улица Ключ для поиска - Улица
Номер улицы - 15 Номер для поиска - 15
Число домов на улице - 0 Улица отремонтирована.
Все эти дома отремонтированы.
Список {
Список List пуст
}
*******}}}
{{{*******
Улица - Улица 1 Ключ для поиска - Улица 1
Номер улицы - 15 Номер для поиска - 15
Число домов на улице - 2 Улица отремонтирована.
Нужен ремонт домов улицы.
Список {
Номер - 1 Название Жилой
Номер - 2 Название Магазин
}
*******}}}
Enter
После изменения S1 (название и удален первый)!!!!
S1!!!!
{{{*******
Улица - Новое название S1 Ключ для поиска - Улица 1
Номер улицы - 15 Номер для поиска - 15
Число домов на улице - 1 Улица отремонтирована.
Нужен ремонт домов улицы.
Список {
Номер - 1 Название Магазин
}
*******}}}
SNew!!!!
{{{*******
Улица - Улица 1 Ключ для поиска - Улица 1
Номер улицы - 15 Номер для поиска - 15
Число домов на улице - 2 Улица отремонтирована.
Нужен ремонт домов улицы.
Список {
Номер - 1 Название Жилой
Номер - 2 Название Магазин
}
*******}}}
Enter
Приложение 2 Титульный лист
Московский государственный технический университет им. Н.Э.Баумана
_________________________________________________________________
УТВЕРЖДАЮ: | |
Большаков С.А. | "__"_____________201X Г. |
Комплексная лабораторная работа/ДЗ по дисциплине ПКШ
“Система классов улиц и домов”
Листинги программ
(вид документа)
писчая бумага
(вид носителя)
37
(количество листов)
ИСПОЛНИТЕЛЬ: | |
студент группы ИУ5-ХХ | _____________________ |
Большаков С.А. | "__"_____________201X г. |
Москва - 201X
________________________________________________________________
Приложение 3 Образцы программ
Пример программ для ДЗ/КЛР (массив и список)
// Вариант для Массивов
Модуль - DZ.H (для массивов и списков)
// DZ.H
// Общие константы и описания
#define StreetClass 1
#define HomeClass 2
static BOOL DestructorDeleteObj = false;
enum HomeType{fast, multiple , complex};
enum StreetType{one, two , more };
enum TypeAddDel {tail, head, Number ,NumbAfter, NumbCurrent, NumbBefore,
AssbAfter, AssCurrent, AssBefore , createObj , nocreateObj , deleteObj, nodeleteObj };
Модуль - DZ_Class.H (для массивов и списков)
При включении в проект нужно раскомментировать нужную строку в описании класса Street, соответсвующую своему варианту.
// DZ_Class.h
// Описания классов для варианта массив
#include "stdafx.h"
#include <iostream>
#include "DZ.h" // Общие константы
using namespace std;
// Абстрактный класс для дома
class AbstrHome : public CObject {
public:
virtual int classType() = 0;
virtual char *className() = 0;
virtual void printOn(ostream &) = 0;
AbstrHome(){ name = (char *)NULL;
no = NULL;};
~AbstrHome(){
if( name != (char *)NULL)
delete [] name;
};
char *name; // ? Резерв Поисковое имя
int no; // ? РезервНомер в списке
};
// Абстрактный класс для улицы
class AbstrStreet {
public:
virtual int classType() = 0;
virtual char *className() = 0;
virtual void printOn(ostream &) = 0;
AbstrStreet(){ name = (char *)NULL;
no = NULL;};
~AbstrStreet(){
if( name != (char *)NULL)
delete [] name;
};
char *name; // ? Резерв Поисковое имя
int no; // ? РезервНомер в списке
};
//////////////////////
//// Класс домов
//////////////////////
class Home: public AbstrHome {
// Конструкторы
public:
Home();
Home( Home & H) ;
Home( Home * pH);
Home(const char *HomName, const char *Number);
Home(const char *HomName, const char *Number, int Numb) ;
Home(const char *HomName, const char *Number, int Numb,
int Etag, int Men=0,HomeType Type = fast,int Apart=0);
// Деструктор
~Home();
//Оператор присваивания для поддержки перегрузки "+"
Home operator =(Home & H );
// Виртуальные методы
public:
virtual int classType() { return HomeClass; }
virtual char *className() { return "Home"; }
virtual void printOn(ostream & out);
// Методы класса Home
void setName(const char *HomName , const char *Number=NULL);
const char *getName() { return (const char *)name; };
const char *getNumb() { return (const char *)Home_Number; };
int getNo() { return no; };
void getParam(int & iH, int & Etag ,int & Men ,HomeType & Type, int & Apart )
{iH = iHome; Etag = EtagCount; Men = MenCount;
Type = TypeHome; Apart = NumbApartament ; };
void setParam(int iH, int Etag ,int Men ,HomeType Type, int Apart )
{ iHome= iH; EtagCount= Etag; MenCount= Men;
TypeHome = Type; NumbApartament = Apart; };
void setAllParam(const char *HomName , const char *Number, int iH, int Etag ,
int Men ,HomeType Type, int Apart , BOOL rem = false);
// Дружественная функция для перегрузки
friend Home & operator +(Home & H1 , Home & H2);
// Свойства класса Home
public:
char *Home_Number; // Символьный номер дома
int iHome; // Номер дома числовой
int EtagCount; // Число этажей
int MenCount ; // Число жителей в доме
HomeType TypeHome ; // Тип дома