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

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

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

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

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

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

Файлы: 1 файл

KURSOVAYaYa.docx

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

  LB1=0;   //компоненты LisBox1,LisBox2(LisBox3) ничего не содержат

  LB2=0;

  CLEAR=1;     //можно  очистить компоненты

}

 else if(SWITCH==3||SWITCH==4) //переход из вкладок закрыть и выход

 {

  SWITCH=0;

  Current->~ManagementCompany(); //освобождение памяти

  Current=0;

  LB1=0;      //компоненты LisBox1,LisBox2(LisBox3) ничего не содержат

  LB2=0;

}

OKRightDlg->Close(); //закрытие  диалога

}

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

void SaveToFile(ManagementCompany *New,string &Name)//сохранение данных в файл

{

string str=Name;

string str1=".DAT";

str+=str1;

const char *p=(str).c_str();

ofstream outfile(p, ios::binary);

int key=221218137;                  //идентификационный ключ

outfile.write(reinterpret_cast<char*>(&key), sizeof(int));

int x=sizeof(New->getName());

outfile.write(reinterpret_cast<char*>(&x), sizeof(int));        //размер имени

outfile.write(reinterpret_cast<char*>(&(New->getName())), x);   //имя

x=New->getCount();

outfile.write(reinterpret_cast<char*>(&x), sizeof(int));        //количество домов

while(New->checkpass())

{

   ApartmentHouse *TMP=New->pass();

   int y=TMP->getCount();

   outfile.write(reinterpret_cast<char*>(&y), sizeof(int));  //количество квартир в доме

   y=TMP->getNumber();

   outfile.write(reinterpret_cast<char*>(&y), sizeof(int));//номер дома

   while(TMP->checkShowAll())

   {

   Apartment *tmp=TMP->ShowAll();

   int n=tmp->getNumber();

   float s=tmp->getArea();

   outfile.write(reinterpret_cast<char*>(&n), sizeof(int));

   outfile.write(reinterpret_cast<char*>(&s), sizeof(float));

   }

}

New->setflag(false);

outfile.close();

}

void LoadFromFile(ManagementCompany *New,string &Name) //загрузка данных с //диска(New-пуст)

{

string str=Name;

string str1=".DAT";

const char *p=(str).c_str();

 int a=sizeof(p);        //проверка расширения файла

 a--;

char Q[4]={'T','A','D','.'};

int Count=0;

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

{

if(Q[i]==p[a])

{

  Count++;

}

a--;

}

if(Count!=4)

{

  str+=str1;

}

ifstream infile(p, ios::binary);

 if(infile.is_open()==true)  //проверка возможности открытия файла

 {

  int key;

  infile.read( reinterpret_cast<char*>(&key), sizeof(int));

  if(key==221218137)  //если ключ совпал,то считываем файл

  {

  P=1;

  int x;

  infile.read( reinterpret_cast<char*>(&x), sizeof(int));

  string name;

  infile.read( reinterpret_cast<char*>(&name), x);

  New->setName(name);                                  //запись имени

  infile.read( reinterpret_cast<char*>(&x), sizeof(int)); //кол-во домов

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

  {

   int q;

   infile.read( reinterpret_cast<char*>(&q), sizeof(int)); //количетво квартир

   int w;

   infile.read( reinterpret_cast<char*>(&w), sizeof(int)); //номер дома

   New->Add(w);

   for(int r=0;r<q;r++)

   {

int n;

float s;

infile.read(reinterpret_cast<char*>(&n), sizeof(int));

infile.read(reinterpret_cast<char*>(&s), sizeof(float));

New->AddAp(w,n,s);

   }

  }

  infile.close();

}

}

}

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

void __fastcall TOKRightDlg::FormCloseQuery(TObject *Sender, bool &CanClose)

{

SWITCH=0;

}

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

 

  Третий модуль содержит  объявление всех разработанных  классов и реализацию их методов. К нему подключен файл string из стандартной библиотеки для работы с объектами библиотечного класса string. Объявлена глобальная переменная const int max – задаёт размер массива для стека квартир(класс StackOfApartments).

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Список использованной литературы

  1. Вирт Н. Алгоритмы и структуры данных. Новая версия для Оберона (2010)
  2. Седжвик Р. Фундаментальные алгоритмы C++. Анализ. Структуры данных. Сортировка. Поиск (2001)
  3. Герберт Шилдт - Самоучитель C++
  4. Лафоре Р. - Объектно-ориентированное программирование в С++ (4-е изд.) 2004 (2)
  5. А.Я. Архангельский - С++ Builder 6 СПРАВОЧНОЕ ПОСОБИЕ Книга 1,2 Язык C++

 

 


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