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

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

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

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

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

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

Файлы: 1 файл

KURSOVAYaYa.docx

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

 

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

1)Первый класс, класс Apartment (класс квартир). Необходимые данные для объекта: номер квартиры, площадь квартиры. Значит класс Apartment будет иметь два поля: номер квартиры- Number, площадь квартиры- Area. Методы класса: конструктор без параметров Apartment ()  служит для динамического выделения памяти под объект, конструктор с входными параметрами Apartment (int N, float S) выделяет память под объект и инициализирует поля данных, деструктор, методы доступа к полям. Метод getNumber возвращает значение поля Number; метод getArea  возвращает значение поля Area; метод setNumber задаёт значение поля Number, в качестве входного параметра принимает целочисленный тип; метод setArea задаёт значение поля Area, в качестве входного параметра принимает вещественный тип.

 

class Apartment                    //класс квартир

{

  private:

          int *Number;                 //номер квартиры

          float *Area;                 //площадь квартиры

  public:

          Apartment();

          Apartment(int N,float S);

          ~Apartment();

          int getNumber();            //получаем номер квартиры

          float getArea();            //получаем площадь квартиры

          void setNumber(int N);      //задаём номер квартиры

          void setArea(float S);      //задаём площадь квартиры

};

Apartment::Apartment()

{

Number=new int(0);

Area=new float(0);

}

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

Apartment::Apartment(int N,float S)

{

Number=new int(N);

Area=new float(S);

}

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

Apartment::~Apartment()

{

delete Area;

Area=0;

delete Number;

Number=0;

}

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

int Apartment::getNumber()

{

return *Number;

}

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

float Apartment::getArea()

{

return *Area;

}

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

void Apartment::setNumber(int N)

{

*Number=N;

}

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

void Apartment::setArea(float S)

{

*Area=S;

}

 

2)Второй класс StackOfApartments - это стек на основе массива, элементами которого являются объекты класса Apartment. В качестве полей содержит массив указателей на объекты класса Apartment, указатель на тип int – Spoint , указывающий на вершину стека, служебное поле - указатель на тип int – ShowSpoint, для отображения состояния стека, указатель на тип int - Count, количество элементов. Методы класса: конструктор, деструктор, методы для добавления, удаления и просмотра элементов, методы для проверки возможности добавления, удаления и просмотра элементов.

  Конструктор без параметров StackOfApartments() служит для динамического выделения памяти под объект. Метод getCount возвращает значение поля Count-количество элементов. Метод Push служит для добавления нового элемента в стек, в качестве входных параметров получает целое число для инициализации поля Number, вещественное число для инициализации поля Area объекта класса Apartment. Метод Pop служит для удаления элемента с вершины стека. Методы Show и ShowAll служат для показа вершины стека и всех элементов стека соответственно, возвращают указатели на объекты типа Apartment. Метод DelAll служит для удаления всех элементов структуры. Метод checkShowAll служит для проверки перед вызовом функции ShowAll, используется как условие в цикле while, тип возвращаемого значения bool (true-можно показать). Метод checkAdd проверяет возможность добавления нового элемента в стек, возвращает true, если можно добавить. Метод CheckDel проверяет возможность удаления элемента из стека, возвращает true, если можно удалить.

 

const int max=400;

class StackOfApartments              //стек квартир на основе массива

{

  protected:

  Apartment * flats[max];

  int *SPoint;                     //индекс вершинного+1 элемента стека  в                               //массиве=количество элементов

  int *ShowSPoint;             //индекс элемента для показа

  int *Count;

  public:

  StackOfApartments();

  ~StackOfApartments();

  void Push(int N,float S);    //добавление элемента

  void Pop();                           //удаление элемента

  Apartment * Show();                    //показ вершины

  Apartment * ShowAll();                 //показ всех элементов стека  поочередно

  void DelAll();                       //удаление всех элеметов

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

  bool checkAdd();                      //проверка перед добавлением

  bool CheckDel();                      //проверка перед удалением

  int getCount();                        //количество элементов

};

StackOfApartments::StackOfApartments()

{

SPoint=new int(0);

ShowSPoint=new int(0);

for(int i=0;i<max;i++)

{

flats[i]=0;

}

Count=new int(0);

}

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

StackOfApartments::~StackOfApartments()

{

int x=*SPoint;

while(--x>=0)

{

  flats[x]->~Apartment();

}

delete SPoint;

SPoint=0;

delete ShowSPoint;

ShowSPoint=0;

delete Count;

Count=0;

}

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

void StackOfApartments::Push(int N,float S)

{

flats[*SPoint]=new Apartment(N,S);

(*SPoint)++;

*ShowSPoint=*SPoint;

(*Count)++;

}

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

void StackOfApartments::Pop()

{

(*SPoint)--;

flats[*SPoint]->~Apartment();

flats[*SPoint]=0;   

*ShowSPoint=*SPoint;

(*Count)--;

}

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

Apartment * StackOfApartments::Show()

{

 int x=*SPoint; 

int q=flats[--x]->getNumber();

float qq=flats[x]->getArea();

Apartment *tmp=new Apartment(q,qq);

return tmp;

}

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

Apartment * StackOfApartments::ShowAll()

{

  Apartment *n=flats[--(*ShowSPoint)];

  int q=n->getNumber();

float qq=n->getArea();

Apartment *tmp=new Apartment(q,qq);

  return tmp;

}

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

void StackOfApartments::DelAll()

{

delete flats[--(*SPoint)];

(*Count)--;

}

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

bool StackOfApartments::checkShowAll()

{

bool p;                       //true-можно показать

if(*ShowSPoint!=0)

{

  p=true;

}

else if(*ShowSPoint==0)

{

  p=false;

  *ShowSPoint=*SPoint;

}

return p;

}

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

bool StackOfApartments::checkAdd()

{

bool p;                        //true-можно добавить

if(*SPoint==max)

{

  p=false;

}

else

{

  p=true;

}

return p;

}

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

bool StackOfApartments::CheckDel()

{

bool p;                         //true-можно удалить

if(*SPoint==0)

{

  p=false;

}

else

{

  p=true;

}

return p;

}

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

int StackOfApartments::getCount()

{

 return *Count;

}

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

 

3)Третий класс ApartmentHouse(класс домов) получаем, используя механизм наследования. Наследуем его от класса StackOfApartments. В новом классе добавляем новые свойства: номер дома Number, указатель на объект типа ApartmentHouse - указатель на следующий элемент списка (самоадресация). Новые методы класса: конструктор, деструктор, методы доступа к полю Number, методы доступа к полю Next.

 Конструктор класса  в качестве входного параметра  принимает целое число для  инициализации поля Number, затем вызывает конструктор родительского класса. Деструктор использует вспомогательный указатель на объекты типа StackOfApartments для вызова деструктора соответствующего класса. Метод setNumber задаёт значение поля Number, в качестве входного параметра принимает целое число. Метод getNumber возвращает значение поля Number, тип целый. Метод setNext задаёт значение поля Next, в качестве входного параметра принимает указатель на объект типа ApartmentHouse. Метод getNext возвращает значение поля Next, указатель на объект типа ApartmentHouse.

 

 

class ApartmentHouse:public StackOfApartments          //класс домов

{

  private:

           int *Number;               //номер дома

           ApartmentHouse *Next;     //указатель на следующий элемент списка

  public:

           ApartmentHouse(int N):StackOfApartments()

             {Number=new int(N); Next=0;}

           ~ApartmentHouse();

           int getNumber();            //получить номер дома

           void setNumber(int N);      //задать номер дома

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