Объектная реализация контейнера на основе комбинированной структуры «Динамический упорядоченный список массивов-стеков»
Курсовая работа, 13 Декабря 2014, автор: пользователь скрыл имя
Описание работы
Цель работы: получение навыков разработки объектных программ, включая создание набора собственных взаимосвязанных классов для объектной реализации специализированного контейнера. Контейнер предназначен для хранения и обработки данных некоторой информационной задачи. Контейнер представляет собой двухуровневую структуру данных, в которой уровни реализуются разными способами – один статически на базе массива (непрерывная реализация), другой – динамически с использованием адресных связей (связная реализация).
Содержание работы
Постановка задачи (цель работы, исходные данные, ожидаемый результат, требования к реализации)……………………………………………………………………………………….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).
Список использованной литературы
- Вирт Н. Алгоритмы и структуры данных. Новая версия для Оберона (2010)
- Седжвик Р. Фундаментальные алгоритмы C++. Анализ. Структуры данных. Сортировка. Поиск (2001)
- Герберт Шилдт - Самоучитель C++
- Лафоре Р. - Объектно-ориентированное программирование в С++ (4-е изд.) 2004 (2)
- А.Я. Архангельский - С++ Builder 6 СПРАВОЧНОЕ ПОСОБИЕ Книга 1,2 Язык C++