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

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

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

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

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

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

Файлы: 1 файл

KURSOVAYaYa.docx

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

  В левой области главной формы располагаются компоненты, с помощью которых осуществляется ввод данных - добавление домов в управляющую компанию, изменение названия управляющей компании, а также возможность удалить заданный дом, если такой существует. В компонент Label5 выводится название управляющей компании.

  В центральной части главной формы в компоненте CheckListBox1  отображается список всех имеющихся домов, упорядоченный по возрастанию их номеров. При выборе какой-либо строки из CheckListBox1, в компоненте ListBox2 отображаются квартиры выбранного дома, а в компоненте ListBox3 площади (номер и площадь одной квартир выводятся в строках с одинаковыми номерами в компонентах ListBox2 и ListBox3). В компонент Label4 выводится номер дома, выбранного в CheckListBox1.

  В правой части  главной формы располагаются компоненты, с помощью которых можно добавить квартиру в заданный дом или удалить из него. В компоненте ListBox1 отображаются все квартиры выбранного дома при удалении или добавлении квартир.

  В верхней части  формы располагается компонент MainMenu. С помощью вкладок меню можно осуществить следующие действия: открыть, создать, сохранить, закрыть файл или закрыть саму программу. Если во время работы программы над данными производились какие-либо действия, то при попытке осуществить какие-нибудь действия с помощью вкладок меню появится диалоговое окно, предоставляющее возможность сохранить данные.

 

Описание структуры проекта

  Проект представляет собой набор программных единиц – модулей. Данный проект состоит из трёх модулей.

  Один из модулей, называемый главным, содержит инструкции, с которых начинается выполнение программы(Unit7), второй модуль(Unit8) –объявление всех разработанных классов с реализацией их методов, третий модуль(OKCANCL2) - диалоговое окно.

  К главному модулю подключены файлы из стандартной библиотеки С++: fstream,  iostream – для файлового ввода-вывода, string – для работы с объектами библиотечного класса string. Также подключены заголовочные файлы двух остальных модулей. Прописаны прототипы функций для сохранения данных на диск и обратной загрузки. Объявлены глобальные переменные целого типа: SWITCH – служит для переключение между различными вариантами действий в кнопках “да” и “нет” диалогового окна (сохранение данных), LB1и LB2 – содержат значение номера дома, который отображают компоненты Lisbox1 и Lisbox2, Lisbox3, необходимы компонентов, если дом с номером LB1 и(или) LB2 удалён; CLEAR – указывает на необходимость очистки компонентов ввода/вывода при открытии, создании и закрытии файла; P – служит для проверки успешности открытия файла. Указатель Current на объект класса ManagmentCompany – контейнер “Управляющая компания”, с которым работает пользователь.

 

void __fastcall TForm7::N2Click(TObject *Sender) //вкладка меню-создать

{

 if(Current!=0) //если контейнер создан

{

  if(Current->getflag())   //если выполнялись действия над данными

  {

  SWITCH=2;

  OKRightDlg->ShowModal(); //открытие диалогового окна

  if(CLEAR!=0)             //проверка необходимости очищения компонентов

{

  CLEAR=0;

  Edit1->Clear();

  ListBox2->Clear();

  CheckListBox1->Clear();

  Edit4->Clear();

  ComboBox1->Clear();

  Edit5->Clear();

  Edit6->Clear();

  Edit7->Clear();

  ComboBox2->Clear();

  ComboBox3->Clear();

  ListBox1->Clear();

  ListBox3->Clear();

  Label5->Caption="НАЗВАНИЕ  КОМНАНИИ";

  Label4->Caption="ННН";

}

  }

  else //если операции над данными не производились

  {

Current->~ManagementCompany();

    Current=new ManagementCompany();

Edit1->Enabled=true;

Edit4->Enabled=true;

ComboBox1->Enabled=true;

Edit5->Enabled=true;

Edit6->Enabled=true;

Edit7->Enabled=true;

ComboBox2->Enabled=true;

ComboBox3->Enabled=true;

  }

}

 else     //если контейнер не создан

{

Current=new ManagementCompany();

Edit1->Enabled=true;

Edit4->Enabled=true;

ComboBox1->Enabled=true;

Edit5->Enabled=true;

Edit6->Enabled=true;

Edit7->Enabled=true;

ComboBox2->Enabled=true;

ComboBox3->Enabled=true;

}

}

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

void __fastcall TForm7::N1Click(TObject *Sender) //вкладка меню-открыть

{

  if(Current!=0)    //если контейнер создан

{

  ComboBox1->Clear();

  ComboBox2->Clear();

  ComboBox3->Clear();

  ListBox1->Clear();

  ListBox2->Clear();

  ListBox3->Clear();

  CheckListBox1->Clear();

  Edit1->Clear();

  Edit4->Clear();

  Edit5->Clear();

  Edit6->Clear();

  Edit7->Clear();

  Label5->Caption="НАЗВАНИЕ  КОМНАНИИ";

  Label4->Caption="ННН";

  if(Current->getflag())   //если выполнялись действия над данными

  {

  SWITCH=1;

  OKRightDlg->ShowModal();  //открытие диалогового окна

  if(P!=0)                  //проверка на успешность загрузки данных с диска

  {

P=0;

const char *p=(Current->getName()).c_str();  //заполнение компонентов загруженными данными

Label5->Caption=p;

while(Current->checkpass())

{

ApartmentHouse *tmp=Current->pass();

int x=tmp->getNumber();

ComboBox3->Items->Add(x);

ComboBox2->Items->Add(x);

ComboBox1->Items->Add(x);

CheckListBox1->Items->Add(x);

tmp->~ApartmentHouse();

}

  }

  else  //если не удалось загрузить данные с диска

   {

Current->~ManagementCompany();

Current=0;

Edit1->Enabled=false;

Edit4->Enabled=false;

ComboBox1->Enabled=false;

Edit5->Enabled=false;

Edit6->Enabled=false;

Edit7->Enabled=false;

ComboBox2->Enabled=false;

ComboBox3->Enabled=false;

ShowMessage("Невозможно загрузить  файл");

   }

  }

  else    //если не выполнялись действия над данными

  {

    if(OpenDialog1->Execute())

{

if(OpenDialog1->FileName!="")

{

AnsiString str2 = OpenDialog1->FileName;

string s= AnsiString(str2).c_str();

Current->~ManagementCompany();

Current=new ManagementCompany();

LoadFromFile(Current,s);

  if(P!=0)             //проверка на успешность загрузки данных с диска

  {

P=0;

const char *p=(Current->getName()).c_str();   //заполнение компонентов //загруженными данными

Label5->Caption=p;

while(Current->checkpass())

{

ApartmentHouse *tmp=Current->pass();

int x=tmp->getNumber();

ComboBox3->Items->Add(x);

ComboBox2->Items->Add(x);

ComboBox1->Items->Add(x);

CheckListBox1->Items->Add(x);

tmp->~ApartmentHouse();

}

  }

  else     //если не удалось загрузить данные с диска

  {

Current->~ManagementCompany();

Current=0;

Edit1->Enabled=false;

Edit4->Enabled=false;

ComboBox1->Enabled=false;

Edit5->Enabled=false;

Edit6->Enabled=false;

Edit7->Enabled=false;

ComboBox2->Enabled=false;

ComboBox3->Enabled=false;

ShowMessage("Невозможно загрузить  файл");

  }

 }

}

  }

}

 else   //если контейнер не создан

{

  if(OpenDialog1->Execute())

{

if(OpenDialog1->FileName!="")

{

AnsiString str2 = OpenDialog1->FileName;

string s= AnsiString(str2).c_str();

Current=new ManagementCompany();

LoadFromFile(Current,s);

   if(P!=0)     //проверка на успешность загрузки данных с диска

   {

P=0;

const char *p=(Current->getName()).c_str();   //заполнение компонентов //загруженными данными

Label5->Caption=p;

while(Current->checkpass())

{

ApartmentHouse *tmp=Current->pass();

int x=tmp->getNumber();

ComboBox3->Items->Add(x);

ComboBox2->Items->Add(x);

ComboBox1->Items->Add(x);

CheckListBox1->Items->Add(x);

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