Объектная реализация контейнера на основе комбинированной структуры «Динамический упорядоченный список массивов-стеков»

Автор работы: Пользователь скрыл имя, 13 Декабря 2014 в 10:49, курсовая работа

Описание работы

Цель работы: получение навыков разработки объектных программ, включая создание набора собственных взаимосвязанных классов для объектной реализации специализированного контейнера. Контейнер предназначен для хранения и обработки данных некоторой информационной задачи. Контейнер представляет собой двухуровневую структуру данных, в которой уровни реализуются разными способами – один статически на базе массива (непрерывная реализация), другой – динамически с использованием адресных связей (связная реализация).

Содержание работы

Постановка задачи (цель работы, исходные данные, ожидаемый результат, требования к реализации)……………………………………………………………………………………….2
Теоретическое описание используемых структур данных с алгоритмами реализации основных операций…………………………………………………………….…………….......3
Описание основных понятий и механизмов ООП……………………………………………………………………………………………….9
Описание всех разработанных классов (объектная модель)……………………………...…11
Описание демонстрационного модуля с характеристикой использованных стандартных компонентов……………………………………………………………………………………25
Описание структуры проекта…………………………………………………………………27
Список использованной литературы…………………………………………………………47

Файлы: 1 файл

KURSOVAYaYa.docx

— 243.02 Кб (Скачать файл)

           void setNext(ApartmentHouse *next);

ApartmentHouse * getNext();

};

//--------------------------------------------------------------------------------

ApartmentHouse::~ApartmentHouse()

{

delete Number;

Number=0;

Next=0;

}

//--------------------------------------------------------------------------------

int ApartmentHouse::getNumber()

{

return *Number;

}

//--------------------------------------------------------------------------------

void ApartmentHouse::setNumber(int N)

{

*Number=N;

}

//--------------------------------------------------------------------------------

void ApartmentHouse::setNext(ApartmentHouse *next)

{

Next=next;

}

//--------------------------------------------------------------------------------

ApartmentHouse * ApartmentHouse::getNext()

{

return Next;

}

 

4)Четвёртый класс ManagementCompany(управляющая компания) - динамический упорядоченный список. Поля класса: счётчик числа элементов Count, указатели  на объекты типа ApartmentHouse на заголовок списка(head), служебное поле - указатель Current на объекты типа ApartmentHouse для прохода по списку, указатель на объект библиотечного класса string(свойство Name-название управляющей компании), указатель на bool-flag,  показывающий, производились какие-либо действия над объектом или нет. Методы класса: конструктор, деструктор; добавление, удаление элементов; поиск заданного элемента, проход по списку, проверки, методы доступа к полю Name, добавление и удаление элементов из заданных стеков.

 Конструктор ManagementCompany без параметров для динамического выделения памяти под объект. Конструктор класса ManagementCompany с входными параметрами принимает ссылку на объект библиотечного класса string, для инициализации поля Name. Метод search служит для поиска заданного элемента, в качестве входного параметра принимает целое (поиск происходит по номерам домов), возвращает указатель на объект класса(копия искомого элемента структуры) ApartmentHouse. Метод Add служит для добавления нового элемента в список, в качестве входного параметра принимает целое, для инициализации у добавляемого элемента поля Number. Упорядочивание списка по номерам домов происходит при добавлении нового элемента.

 Метод Del удаляет заданный элемент из списка, в качестве входного параметра принимает целое (номер удаляемого элемента). Метод pass необходим для прохода по списку, возвращает указатель на объекты(копии очередного элемента структуры) класса ApartmentHouse. Функция checkDel служит для проверки возможности удаления элемента из списка, тип возвращаемого значения bool (true-можно удалить). Метод checkpass служит для проверки возможности дальнейшего прохода по списку, тип возвращаемого значения bool (true-можно осуществить переход к следующему). Метод setName задаёт имя управляющей компании, в качестве входного параметра принимает ссылку на объект библиотечного класса string, с помощью метода getName получаем имя компании, функция возвращает объект класса string. Метод getflag возвращает значение поля flag,метод setflag задаёт значение поля flag. Метод getCount возвращает значение поля Count. Метод AddAp позволяет добавить в заданный элемент списка(дом) объект Apartment, входные параметры: целый тип-nAH – номер дома, целый тип-nA – номер квартиры, вещественный тип-S – площадь квартиры.

Возвращает 0 , если дом с номером nAH отсутствует, иначе возвращает 1. Метод DelAp позволяет удалить из заданного элемента списка(дома) объект Apartment, если тот находится на вершине стека, входные параметры: целый тип-nAH – номер дома, целый тип-nA – номер квартиры. Возвращает 0 , если дом с номером nAH отсутствует или поле Number вершинного элемента стека не равно nA, иначе возвращает 1. 

 

//---------------------------------------------------------------------------

class ManagementCompany              //динамический упорядоченный список(управляющая  компания)

{

  private:

   int *Count;                //счётчик числа элементов

   ApartmentHouse *head;

   ApartmentHouse *Current;  //вспомогательный  указатель для прохода по списку

   string *Name;           //название управляющей компании

   bool *flag;

  public:

   void setName(string &name);    //ввод имени

   string& getName();            // посмотреть имя

   bool getflag();

   void setflag(bool p);

   ManagementCompany();

   ManagementCompany(string &name);     //конструктор

   ~ManagementCompany();    //деструктор

   int getCount();

   ApartmentHouse * search(int N);//поиск  заданного элемента(поиск дома  по его номеру)

   int Add(int n);             //добавление нового элемента  в список,возвращает 0,если дом  с номером n существует

   //упорядочивание  списка по номерам домов происходит  при добавлении нового элемента

   void Del(int n);              //удаляем элемент из списка

   bool checkDel();

   ApartmentHouse * pass();//проход по списку

   bool checkpass();//проверка перед каждым вызовом pass()

   int AddAp(int nAH,int nA,float s);//добавление  квартиры в заданный дом,возвращает 0,если дом с номером n существует

   int DelAp(int nAH,int nA);    //удаление квартиры из заданного  дома(c вершины стека,возвращает 0,если  дом с номером n существует

};

//---------------------------------------------------------------------------

ManagementCompany::ManagementCompany()

{

Count=new int(0);

head=new ApartmentHouse(0);

head->setNext(0);

Current=head;

Name=new string("");

flag=new bool(false);

}

//---------------------------------------------------------------------------

ManagementCompany::ManagementCompany(string &name)

{

Count=new int(0);

head=new ApartmentHouse(0);

head->setNext(0);

Current=head;

Name=new string(name);

flag=new bool(false);

}

//---------------------------------------------------------------------------

ManagementCompany::~ManagementCompany()

{

  delete Count;

  Current=head->getNext();

  while(Current!=0)

  {

   ApartmentHouse *tmp=Current->getNext();

   Current->~ApartmentHouse();

   Current=tmp;

  }

  Current=0;

  delete Name;

  Name=0;

  delete flag;

  flag=0;

}

//---------------------------------------------------------------------------

void ManagementCompany::setName(string &name)

{

Name=new string(name);

*flag=true;

}

//---------------------------------------------------------------------------

string& ManagementCompany::getName()

{

string *tmp=new string(*Name);

return *tmp;

}

//---------------------------------------------------------------------------

 

int ManagementCompany::Add(int n)

{

  *flag=true;

  int x=0;

  if(head->getNext()==0)

  {

   ApartmentHouse *tmp=new ApartmentHouse(n);

   head->setNext(tmp);

   (*Count)++;

   x=1;

  }

  else

  {

   ApartmentHouse *w1=head->getNext();

   ApartmentHouse *w2=head;

   while(w1!=0&&w1->getNumber()<n)

   {

w2=w1;

w1=w1->getNext();

   }

   if(w1==0)

   {

ApartmentHouse *tmp=new ApartmentHouse(n);

w2->setNext(tmp);

(*Count)++;

x=1;

   }

   else if(w1->getNumber()>n)

   {

  ApartmentHouse *tmp=new ApartmentHouse(n);

  w2->setNext(tmp);

  tmp->setNext(w1);

  (*Count)++;

  x=1;

   }

  }

  return x;

}

//---------------------------------------------------------------------------

void ManagementCompany::Del(int n)

{

*flag=true;

ApartmentHouse *w1=head->getNext();

ApartmentHouse *w2=head;

while(w1!=0)

{

if(w1->getNumber()==n)

{

   w2->setNext(w1->getNext());

   w1->~ApartmentHouse();

   (*Count)--;

   break;

}

else

{

w2=w1;

w1=w1->getNext();

}

}

}

//---------------------------------------------------------------------------

bool ManagementCompany::checkDel()

{

bool p;

if(head==0)

{

p=false;

}

else if(head!=0)

{

p=true;

}

return p;

}

//---------------------------------------------------------------------------

ApartmentHouse * ManagementCompany::search(int N)

{

ApartmentHouse *w1=head->getNext();

  ApartmentHouse *TMP=0;

  ApartmentHouse *qqq=0;

  while(w1!=0)

  {

  if(w1->getNumber()==N)

  {

  TMP=new ApartmentHouse(w1->getNumber());

  qqq=new ApartmentHouse(w1->getNumber());

  while(w1->checkShowAll())

  {

  Apartment *tt=w1->ShowAll();

  qqq->Push(tt->getNumber(),tt->getArea());

  }

  while(qqq->checkShowAll())

  {

Apartment *tt=qqq->ShowAll();

TMP->Push(tt->getNumber(),tt->getArea());

  }

  break;

  }

  else

  {

  w1=w1->getNext();

  }

  }

 

  return TMP;

}

//---------------------------------------------------------------------------

ApartmentHouse * ManagementCompany::pass()

{

Информация о работе Объектная реализация контейнера на основе комбинированной структуры «Динамический упорядоченный список массивов-стеков»