Объектная реализация контейнера на основе комбинированной структуры
Описание основных понятий и механизмов объектно-ориентированного программирования. Исследование демонстрационного модуля с характеристикой использованных стандартных компонентов. Структура проекта и требования к его функциональности, возможности.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 17.12.2014 |
Размер файла | 240,9 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
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);
tmp->~ApartmentHouse();
}
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->~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 («Невозможно загрузить файл»);
}
}
}
}
}
// -
void __fastcall TForm7:N3Click (TObject *Sender) // вкладка меню-сохранить
{
if (Current!=0) // если контейнер создан
{
if (SaveDialog1->Execute())
{
if (SaveDialog1->FileName!=»»)
{
AnsiString str2 = SaveDialog1->FileName;
string s= AnsiString(str2).c_str();
SaveToFile (Current, s);
}
}
}
else
{
ShowMessage («Данные Отсутствуют»);
}
}
// -
void __fastcall TForm7:N4Click (TObject *Sender) // вкладка меню-закрыть
{
if (Current!=0) // если контейнер создан
{
if (Current->getflag()) // если выполнялись действия над данными
{
SWITCH=3;
OKRightDlg->ShowModal(); // открытие диалогового окна
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= «ННН»;
Edit1->Enabled=false;
Edit4->Enabled=false;
ComboBox1->Enabled=false;
Edit5->Enabled=false;
Edit6->Enabled=false;
Edit7->Enabled=false;
ComboBox2->Enabled=false;
ComboBox3->Enabled=false;
}
else // если операции над данными не производились
{
Current->~ManagementCompany();
Current=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= «ННН»;
Edit1->Enabled=false;
Edit4->Enabled=false;
ComboBox1->Enabled=false;
Edit5->Enabled=false;
Edit6->Enabled=false;
Edit7->Enabled=false;
ComboBox2->Enabled=false;
ComboBox3->Enabled=false;
}
}
}
// -
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 TForm7:N5Click (TObject *Sender) // вкладка меню-выход
{
if (Current!=0) // если контейнер создан
{
if (Current->getflag()) // если выполнялись действия над данными
{
SWITCH=4;
OKRightDlg->ShowModal(); // открытие диалогового окна
}
}
Form7->Close(); // закрытие главной формы
}
// -
void __fastcall TForm7: Edit1Click (TObject *Sender) // запись названия компании
{
if (Current!=0) // если контейнер создан
{
if (Edit1->Text!=»») // если Edit1 не пуст
{
string s=AnsiString (Edit1->Text).c_str();
Current->setName(s); const char *p=(Current->getName()).c_str(); Label5->Caption=p; Edit1->Clear();
}
}
}
// -
void __fastcall TForm7: Edit4Click (TObject *Sender) // добавление дома
{
if (Current!=0) // если контейнер создан
{
if (Edit4->Text!=»») // если Edit4 не пуст
{
try {
int x=StrToInt (Edit4->Text);
Current->Add(x); // добавление
ComboBox3->Clear(); // очистка компонентов
ComboBox2->Clear();
ComboBox1->Clear();
CheckListBox1->Clear();
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();
}
}
catch(…)
{
ShowMessage («Возможен ввод целых чисел»);
}
Edit4->Clear();
}
}
}
// -
void __fastcall TForm7: Button2Click (TObject *Sender) // удаление заданного дома
{
if (Current!=0) // если контейнер создан
{
if (ComboBox3->Text!=»»)
{
try {
int x=StrToInt (ComboBox3->Text);
if (Current->checkDel())
{
Current->Del(x); // удаление
}
ComboBox3->Clear(); // очистка компонентов
ComboBox2->Clear();
ComboBox1->Clear();
CheckListBox1->Clear();
while (Current->checkpass()) // заполнение компонентов после удаления
{
ApartmentHouse *tmp=Current->pass();
int y=tmp->getNumber();
ComboBox3->Items->Add(y);
ComboBox2->Items->Add(y);
ComboBox1->Items->Add(y);
CheckListBox1->Items->Add(y);
tmp->~ApartmentHouse();
}
if (x==LB1) // очистка компонентов, если в них был выведен удалённый дом
{
ListBox1->Clear();
}
if (x==LB2)
{
ListBox2->Clear();
ListBox3->Clear();
Label4->Caption= «ННН»;
}
}
catch(…)
{
ShowMessage («Возможен ввод целых чисел»);
}
}
}
}
// -
void __fastcall TForm7: Button1Click (TObject *Sender) // добавление квартиры в заданный // дом
{
if (Current!=0) // если контейнер создан
{
if (ComboBox1->Text!=» «&&Edit5->Text!=»«&&Edit6->Text!=»»)
{
try {
int x=StrToInt (ComboBox1->Text);
int y=StrToInt (Edit5->Text);
float z=StrToFloat (Edit6->Text);
Current->AddAp (x, y, z); // добавление
int Q=CheckListBox1->Items->Count;
for (int i=0; i<Q; i++)
{ // если заданный дом отображается в комп-ах, то информация в них обновляется
if (CheckListBox1->Selected[i]==true)
{
int W=StrToInt (CheckListBox1->Items->Strings[i]);
if (W==x)
{
ApartmentHouse *tmp=0;
tmp=Current->search(W);
if (tmp!=0)
{
ListBox2->Clear();
ListBox3->Clear();
while (tmp->checkShowAll())
{
Apartment *TMP=tmp->ShowAll();
ListBox2->Items->Add (TMP->getNumber());
float x=TMP->getArea();
AnsiString str = FormatFloat («0.00», x);
ListBox3->Items->Add(str);
}
tmp->~ApartmentHouse();
}
}
break;
}
}
}
catch(…)
{
ShowMessage («Возможен ввод целых чисел (S кв. вещественные)»);
}
}
}
Edit5->Clear();
Edit6->Clear();
ListBox1->Clear();
if (ComboBox1->Text!=»»)
{
try {
int x=StrToInt (ComboBox1->Text);
ApartmentHouse *tmp=0;
tmp=Current->search(x);
if (tmp!=0)
{
while (tmp->checkShowAll())
{
ListBox1->Items->Add (tmp->ShowAll()->getNumber());
}
LB1=tmp->getNumber();
tmp->~ApartmentHouse();
}
}
catch(…)
{
ShowMessage («Возможен ввод целых чисел»);
}
}
}
// -
void __fastcall TForm7: Button3Click (TObject *Sender) // удаление заданной квартиры из // дома
{
if (Current!=0) // если контейнер создан
{
if (ComboBox2->Text!=» «&&Edit7->Text!=»»)
{
try {
int x=StrToInt (ComboBox2->Text);
int y=StrToInt (Edit7->Text);
Current->DelAp (x, y); // удаление
int Q=CheckListBox1->Items->Count;
for (int i=0; i<Q; i++)
{ // если заданный дом отображается в комп-ах, то информация в них обновляется
if (CheckListBox1->Selected[i]==true)
{
int W=StrToInt (CheckListBox1->Items->Strings[i]);
if (W==x)
{
ApartmentHouse *tmp=0;
tmp=Current->search(W);
if (tmp!=0)
{
ListBox2->Clear();
ListBox3->Clear();
while (tmp->checkShowAll())
{
Apartment *TMP=tmp->ShowAll();
ListBox2->Items->Add (TMP->getNumber());
float x=TMP->getArea();
AnsiString str = FormatFloat («0.00», x);
ListBox3->Items->Add(str);
}
tmp->~ApartmentHouse();
}
}
break;
}
}
}
catch(…)
{
ShowMessage («Возможен ввод целых чисел»);
}
}
}
Edit7->Clear();
ListBox1->Clear();
if (ComboBox1->Text!=»»)
{
try {
int x=StrToInt (ComboBox1->Text);
ApartmentHouse *tmp=0;
tmp=Current->search(x);
if (tmp!=0)
{
while (tmp->checkShowAll())
{
ListBox1->Items->Add (tmp->ShowAll()->getNumber());
}
LB1=tmp->getNumber();
tmp->~ApartmentHouse();
}
}
catch(…)
{
ShowMessage («Возможен ввод целых чисел»);
}
}
}
// -
void __fastcall TForm7: CheckListBox1ClickCheck (TObject *Sender) // вывод инф-ии выбранного дома
{
int x=CheckListBox1->Items->Count;
for (int i=0; i<x; i++)
{
if (CheckListBox1->Checked[i]==true&&CheckListBox1->Selected[i]!=true)
{
CheckListBox1->Checked[i]=false;
}
if (CheckListBox1->Selected[i]==true)
{
ApartmentHouse *tmp=0;
int y=StrToInt (CheckListBox1->Items->Strings[i]);
Label4->Caption=y;
tmp=Current->search(y);
if (tmp!=0)
{
ListBox2->Clear();
ListBox3->Clear();
while (tmp->checkShowAll())
{
Apartment *TMP=tmp->ShowAll();
ListBox2->Items->Add (TMP->getNumber());
float x=TMP->getArea();
AnsiString str = FormatFloat («0.00», x);
ListBox3->Items->Add(str);
}
LB2=tmp->getNumber();
tmp->~ApartmentHouse();
}
}
}
}
// -
void __fastcall TForm7: ComboBox1Select (TObject *Sender) // отображение инф-ии // выбранного дома при прокрутке
{
ListBox1->Clear();
if (ComboBox1->Text!=»»)
{
try {
int x=StrToInt (ComboBox1->Text);
ApartmentHouse *tmp=0;
tmp=Current->search(x);
if (tmp!=0)
{
while (tmp->checkShowAll())
{
ListBox1->Items->Add (tmp->ShowAll()->getNumber());
}
LB1=tmp->getNumber();
tmp->~ApartmentHouse();
}
}
catch(…)
{
ShowMessage («Возможен ввод целых чисел»);
}
}
}
// -
void __fastcall TForm7: Edit1MouseMove (TObject *Sender, TShiftState Shift, int X,
int Y) // справка
{
Edit1->Hint= «Наберите название компании, кликните для ввода»;
}
// -
void __fastcall TForm7: Edit4MouseMove (TObject *Sender, TShiftState Shift, int X,
int Y)) // справка
{
Edit4->Hint= «Наберите номер дома, кликните для ввода»;
}
// -
void __fastcall TForm7: Edit5MouseMove (TObject *Sender, TShiftState Shift, int X,
int Y)) // справка
{
Edit5->Hint= «Введите номер квартиры»;
}
// -
void __fastcall TForm7: Edit6MouseMove (TObject *Sender, TShiftState Shift, int X,
int Y)) // справка
{
Edit6->Hint= «Введите площадь квартиры»;
}
// -
void __fastcall TForm7: Edit7MouseMove (TObject *Sender, TShiftState Shift, int X,
int Y)) // справка
{
Edit7->Hint= «Введите номер квартиры»;
}
// -
void __fastcall TForm7: FormCloseQuery (TObject *Sender, bool &CanClose)
{
if (Current!=0)
{
SWITCH=3;
OKRightDlg->ShowModal();
}
}
// -
Ко второму модулю подключены файлы из стандартной библиотеки С++: fstream, iostream - для файлового ввода-вывода, string - для работы с объектами библиотечного класса string. Также подключены заголовочные файлы главного модуля и модуль с разработанными контейнерами. Также к модулю подключены глобальные переменные из главного модуля: Current, SWITCH, LB1, LB2, CLEAR, P. Прописаны прототипы функций для сохранения данных на диск и обратной загрузки.
// -
void __fastcall TOKRightDlg:OKBtnClick (TObject *Sender) // сохранить данные
{
if (SWITCH==2) // переход из вкладки-создать
{
SWITCH=0;
if (SaveDialog1->Execute())
{
if (SaveDialog1->FileName!=»»)
{
AnsiString str2 = SaveDialog1->FileName;
string s= AnsiString(str2).c_str();
SaveToFile (Current, s); // сохранение данных
Current->~ManagementCompany();
Current=0;
Current=new ManagementCompany(); // создание нового контейнера
LB1=0; // компоненты LisBox1, LisBox2 (LisBox3) ничего не содержат
LB2=0;
CLEAR=1; // можно очистить компоненты
}
}
}
else if (SWITCH==1) // переход из вкладки-открыть
{
SWITCH=0;
if (SaveDialog1->Execute())
{
if (SaveDialog1->FileName!=»»)
{
AnsiString str2 = SaveDialog1->FileName;
string s= AnsiString(str2).c_str();
SaveToFile (Current, s); // сохранение данных
Current->~ManagementCompany();
Current=0;
LB2=0; // компоненты LisBox1, LisBox2 (LisBox3) ничего не содержат
LB1=0;
}
}
if (OpenDialog1->Execute())
{
if (OpenDialog1->FileName!=»»)
{
AnsiString str2 = OpenDialog1->FileName;
string s= AnsiString(str2).c_str();
Current=new ManagementCompany();
LoadFromFile (Current, s); // загрузка данных с диска
}
}
}
else if (SWITCH==3) // переход из вкладки-закрыть
{
SWITCH=0;
if (SaveDialog1->Execute())
{
if (SaveDialog1->FileName!=»»)
{
AnsiString str2 = SaveDialog1->FileName;
string s= AnsiString(str2).c_str();
SaveToFile (Current, s); // сохранение данных
Current->~ManagementCompany(); // освобождение памяти
Current=0;
LB1=0; // компоненты LisBox1, LisBox2 (LisBox3) ничего не содержат
LB2=0;
}
}
}
else if (SWITCH==4) // переход из вкладки-выход
{
SWITCH=0;
if (SaveDialog1->Execute())
{
if (SaveDialog1->FileName!=»»)
{
AnsiString str2 = SaveDialog1->FileName;
string s= AnsiString(str2).c_str();
SaveToFile (Current, s); // сохранение данных
Current->~ManagementCompany(); // освобождение памяти
Current=0;
LB1=0; // компоненты LisBox1, LisBox2 (LisBox3) ничего не содержат
LB2=0;
}
}
}
OKRightDlg->Close(); // закрытие диалога
}
// -
void __fastcall TOKRightDlg: Button1Click (TObject *Sender) // не сохранять данные
{
if (SWITCH==1) // переход из вкладки-открыть
{
SWITCH=0;
Current->~ManagementCompany(); // освобождение памяти
Current=0;
LB1=0; // компоненты LisBox1, LisBox2 (LisBox3) ничего не содержат
LB2=0;
if (OpenDialog1->Execute())
{
if (OpenDialog1->FileName!=»»)
{
AnsiString str2 = OpenDialog1->FileName;
string s= AnsiString(str2).c_str();
Current=new ManagementCompany();
LoadFromFile (Current, s); // загрузка данных с диска
}
}
}
else if (SWITCH==2) // переход из вкладки-создать
{
SWITCH=0;
Current->~ManagementCompany(); // освобождение памяти
Current=0;
Current=new ManagementCompany(); // создание нового контейнера
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++
Размещено на Allbest.ru
...Подобные документы
Описание используемых понятий и механизмов объектно-ориентированного программирования. Разработка и описание необходимых классов. Демонстрационный модуль с кратким описанием использованных стандартных компонентов. Внешний вид и листинг программы.
курсовая работа [1,3 M], добавлен 24.07.2013Теоретическое описание линейного списка с алгоритмами реализации основных операций. Понятия, механизмы объектно-ориентированного программирования. Возможности проектируемого контейнера пользователей, его реализация на основе линейного списка с заголовком.
курсовая работа [475,2 K], добавлен 26.02.2015Основная цель технологии СОМ (объектная модель компонентов) - обеспечение возможности экспорта объектов. Объектно-ориентированное программирование и его место в программировании. Принципы и применение описаний информационных систем (UML и аналоги).
курсовая работа [698,3 K], добавлен 09.12.2013Понятие объектно-ориентированного программирования, характеристика используемых языков. Практическая разработка средств объектно-ориентированного программирования в задачах защиты информации: программная реализация на языке С++, а также Turbo Pascal.
курсовая работа [275,9 K], добавлен 22.12.2011Изучение объектно-ориентированного языка программирования Java, его функциональные возможности. Создание программного кода. Описание классов и методов, использованных в программе. Руководство пользователя, запуск сервера и клиентского приложения.
курсовая работа [1,8 M], добавлен 16.09.2015Характеристики и свойства языков программирования. Исследование эволюции объектно-ориентированных языков программирования. Построение эволюционной карты механизмов ООП. Разработка концептуальной модели функционирования пользовательского интерфейса.
курсовая работа [2,6 M], добавлен 17.11.2014Освоение методики проектирования программных комплексов на базе объектно-ориентированного программирования. Описание понятий класс, конструктор и деструктор, наследование простое и множественное. Реализация объектной модели на языке программирования с++.
курсовая работа [468,5 K], добавлен 11.12.2011Использование объектно-ориентированного программирования - хорошее решение при разработке крупных программных проектов. Объект и класс как основа объектно-ориентированного языка. Понятие объектно-ориентированных языков. Языки и программное окружение.
контрольная работа [60,1 K], добавлен 17.01.2011Исследование принципов объектно-ориентированного программирования на базе языка программирования С++. Разработка программного комплекса для ведения учёта памятников города. Описание процессов сортировки, поиска, формирования статистики по памятникам.
курсовая работа [782,4 K], добавлен 26.05.2014Анализ объектно-ориентированного программирования, имитирующего способы выполнения предметов. Основные принципы объектно-ориентированного программирования: инкапсуляция, наследование, полиморфизм. Понятие классов, полей, методов, сообщений, событий.
контрольная работа [51,7 K], добавлен 22.01.2013Основные операции с АВЛ-деревьями, добавление и удаление элемента из сбалансированного дерева. Эффективность сортировки вставкой в АВЛ–дерево и итераторы. Алгоритм реализации АВЛ–деревьев через классы объектно–ориентированного программирования.
курсовая работа [281,1 K], добавлен 29.11.2010Анализ предметной области "Конкурс поэтов" на основе объектно-ориентированного подхода. Разработка оконного приложения и описание информационной модели предметной области. Описание разработанных процедур С++ и результатов тестирования приложения.
курсовая работа [355,9 K], добавлен 18.06.2013Основные методы объектно-ориентированного программирования поисковой системы. Выбор языка программирования и среды разработки приложения. Реализация паттерна, использование принципа сохраняемости. Описание пользовательского интерфейса поисковой системы.
курсовая работа [781,4 K], добавлен 29.04.2015Изучение базовых понятий объектно-ориентированного программирования. Исследование принципов работы с классами и объектами. Построение системы классов для описания плоских геометрических фигур. Анализ методов создания объектов, перемещения на плоскости.
лабораторная работа [212,0 K], добавлен 10.03.2013Технологии программирования. Сущность объектно-ориентированного подхода к программированию. Назначение Си, исторические сведения. Алфавит, базовые типы и описание данных. Структуры и объединения. Операторы Си++. Функции. Библиотека времени выполнения.
курс лекций [51,9 K], добавлен 03.10.2008Разработка программы по оформлению заказов на билеты Оренбургского государственного областного драматического театра им. Горького. Использование объектно-ориентированного программирования и реализация проекта в среде визуального программирования Delphi 7.
курсовая работа [6,3 M], добавлен 12.11.2014Применение объектно-ориентированного программирования для написания нескольких модулей программы. Вычисление алгебраического уравнения методом половинного деления. Применение метода Эйлера в теории численных методов общих дифференциальных уравнений.
курсовая работа [398,1 K], добавлен 26.02.2015Анализ исходных данных. Определение структуры модуля для работы файлом. Разработка объектно-ориентированного приложения, использующего массив объектов, в среде Delphi. Модульная структура программного комплекса. Процедура сортировки методом вставки.
курсовая работа [2,2 M], добавлен 20.09.2014Структурная диаграмма программного модуля. Разработка схемы программного модуля и пользовательского интерфейса. Реализация программного модуля: код программы; описание использованных операторов и функций. Вид пользовательской формы с заполненной матрицей.
курсовая работа [215,3 K], добавлен 01.09.2010Разработка приложения "Калькулятор с переходом в строковый калькулятор" с применением объектно-ориентированного программирования. Концепция и понятия объектно-ориентированного программирования. Язык программирования Java. Листинг программы "Калькулятор".
курсовая работа [966,9 K], добавлен 11.02.2016