Док-4-Листинг программы (Готовое ДЗ неизвестного варианта (3))
Описание файла
Файл "Док-4-Листинг программы" внутри архива находится в папке "Готовое ДЗ неизвестного варианта (3)". Документ из архива "Готовое ДЗ неизвестного варианта (3)", который расположен в категории "". Всё это находится в предмете "объектно-ориентированное программирование (ооп)" из 3 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "объектно-ориентированное программирование (ооп)" в общих файлах.
Онлайн просмотр документа "Док-4-Листинг программы"
Текст из документа "Док-4-Листинг программы"
Московский государственный технический университет им. Н.Э.Баумана
____________________________________________________________________
Утверждаю: | _______________________ |
Большаков С.А. | "__"_____________2006 г. |
Домашнее задание по дисциплине ПППО
“ Библиотека классов таблиц и их содержимого в виде текстовых ячеек ”
Листинг программы
(вид документа)
писчая бумага
(вид носителя)
11
(количество листов)
ИСПОЛНИТЕЛЬ: | |
студент группы ИУ5-63 | _______________________ |
Вершинский А.В. Вариант 4. | "__"_____________2006 г. |
Москва – 2006
________________________________________________________________
-
Файл cbase.hpp
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <iostream.h>
#include <string.h>
//заголовочный файл
struct sCell
{
char Text[120];
char TextColor[10];
int number;
sCell * Prev;
sCell * Next;
sCell(void) : Prev(NULL), Next(NULL) { Text[0]='\0'; }
};
////////////////////////////////////////////////////////
class AbstStr
{
public:
AbstStr()
{
First=NULL;
Last=NULL;
Current=NULL;
lastnumber=0;
}
~AbstStr() {}
char TextColorStr[10];
char Alignment[15];
sCell * First;
sCell * Last;
sCell * Current;
int lastnumber;
virtual sCell * GetFirst(void) {return Current=First; }
virtual int AddCell (sCell *pC)=0;
virtual int DelCell (sCell *pC)=0;
virtual void UnionCell(sCell *pC)=0;
virtual void ExchangeCell(sCell * pC,sCell * pC2)=0;
virtual void ClearCell(sCell *pC)=0;
};
////////////////////////////////////////////////////
class Str : public AbstStr
{
public:
Str(): AbstStr()
{
int number = 0;
} ;
~Str() {}
int number;
virtual int AddCell (sCell *pC);
virtual int DelCell (sCell *pC);
virtual void UnionCell(sCell *pC);
virtual void ExchangeCell(sCell * pC, sCell * pC2);
virtual void ClearCell(sCell * pC);
void AddText( char *s);
Str operator= (Str);
Str operator+ (Str);
Str operator++ (void);
Str operator-(Str);
sCell operator [](int i)
{
int k=0;
this->GetFirst();
for(k=0;k<i;k++)
{
if(this->Current)
this->Current=this->Current->Next;
}
return *this->Current;
}
friend ostream & operator <<( ostream & out , Str & obj );
};
-
Файл cbase.cpp
#if !defined(__CBASE_HPP)
#include "cbase.hpp"
#endif
// Описание методов класса
int Str::AddCell(sCell *pC)
{
if (!pC) return 0;
if (!this->First)
{
this->First=pC;
this->Last=pC;
this->Current=pC;
}
else
{
this->Last->Next=pC;
pC->Prev=this->Last;
this->Last=pC;
}
this->Last->number=++this->lastnumber;
return this->Last->number;
}
//-----------------------------------------------//
void Str::ClearCell(sCell *pC)
{
strcpy((char *) pC->Text, " ") ;
}
//-----------------------------------------------//
int Str::DelCell(sCell *pC)
{
if (!pC->Prev)
{
pC->Next->Prev = NULL;
First = pC->Next;
delete pC;
}
else if (!pC->Next)
{
pC->Prev->Next = NULL;
Last = pC->Prev;
delete pC;
}
else
{
sCell *pPrev=pC->Prev;
sCell *pNext=pC->Next;
delete pC;
pPrev->Next=pNext;
pNext->Prev=pPrev;
}
return this->Last->number;
}
//-----------------------------------------------//
void Str::UnionCell(sCell *pC)
{
strcat((char *)pC->Text,(char *)pC->Next->Text);
ClearCell(pC->Next);
}
//-----------------------------------------------//
void Str::ExchangeCell(sCell * pC,sCell * pC2)
{
if ((!pC)||(!pC2)) return ;
int iNum = pC->number;
if ((!pC->Next)&&(!pC->Prev))
{
if ((!pC2->Prev)&&(!pC2->Next))
{
pC->number = pC2->number;
pC2->number = iNum;
return ;
}
if ((pC2->Next)&&(!pC2->Prev))
{
pC2->Next->Prev = pC;
pC->Next = pC2->Next;
pC2->Next = NULL;
pC->number = pC2->number;
pC2->number = iNum;
return ;
}
if ((!pC2->Next)&&(pC2->Prev))
{
pC2->Prev->Next = pC;
pC->Prev = pC2->Prev;
pC2->Prev = NULL;
pC->number = pC2->number;
pC2->number = iNum;
return ;
}
if ((pC2->Next)&&(pC2->Prev))
{
pC2->Prev->Next = pC;
pC2->Next->Prev = pC;
pC->Prev = pC2->Prev;
pC2->Prev = NULL;
pC->Next = pC2->Next;
pC2->Next = NULL;
pC->number = pC2->number;
pC2->number = iNum;
return ;
}
}
if ((!pC->Next)&&(pC->Prev))
{
sCell * pPrev = pC->Prev;
pPrev->Next = pC2;
if ((!pC2->Prev)&&(!pC2->Next))
{
pC2->Prev = pC->Prev;
pC->Prev = NULL;
pC->number = pC2->number;
pC2->number = iNum;
return ;
}
if ((pC2->Next)&&(!pC2->Prev))
{
pC2->Next->Prev = pC;
pC->Next = pC2->Next;
pC2->Prev = pC->Prev;
pC->Prev =NULL;
pC2->Next = NULL;
pC->number = pC2->number;
pC2->number = iNum;
return ;
}
if ((!pC2->Next)&&(pC2->Prev))
{
pC2->Prev->Next = pC;
pC->Prev = pC2->Prev;
pC2->Prev = pPrev;
pC->number = pC2->number;
pC2->number = iNum;
return ;
}
if ((pC2->Next)&&(pC2->Prev))
{
pC2->Prev->Next = pC;
pC2->Next->Prev = pC;
pC->Prev = pC2->Prev;
pC2->Prev = pPrev;
pC->Next = pC2->Next;
pC2->Next = NULL;
pC->number = pC2->number;
pC2->number = iNum;
return ;
}
}
if ((pC->Next)&&(!pC->Prev))
{
sCell * pNext = pC->Next;
pNext->Prev = pC2;
if ((!pC2->Prev)&&(!pC2->Next))
{
pC2->Next = pC->Next;
pC->Next = NULL;
pC->number = pC2->number;
pC2->number = iNum;
return ;
}
if ((pC2->Next) && (!pC2->Prev))
{
this->First = pC2;
pC2->Next->Prev = pC;
pC->Next = pC2->Next;
pC2->Next = pNext;
pC->Prev =NULL;
pC->number = pC2->number;
pC2->number = iNum;
return ;
}
if ((!pC2->Next)&&(pC2->Prev))
{
this->First = pC2;
pC2->Prev->Next = pC;
pC->Prev = pC2->Prev;
pC2->Next = pC->Next;
pC->Next = NULL;
pC2->Prev = NULL;
pC->number = pC2->number;
pC2->number = iNum;
return ;
}
if ((pC2->Next)&&(pC2->Prev))
{
this->First = pC2;
pC2->Prev->Next = pC;
pC2->Next->Prev = pC;
pC->Prev = pC2->Prev;
pC2->Prev = NULL;
pC->Next = pC2->Next;
pC2->Next = pNext;
pC->number = pC2->number;
pC2->number = iNum;
return ;
}
}
if ((pC->Next)&&(pC->Prev))
{
sCell * pPrev = pC->Prev;
sCell * pNext = pC->Next;
pNext->Prev = pC2;
pPrev->Next = pC2;
if ((!pC2->Prev)&&(!pC2->Next))
{
pC2->Next = pC->Next;
pC->Next = NULL;
pC2->Prev = pC->Prev;
pC->Prev = NULL;
pC->number = pC2->number;
pC2->number = iNum;
return ;
}
if ((pC2->Next) && (!pC2->Prev))
{
pC2->Next->Prev = pC;
pC->Next = pC2->Next;
pC2->Next = pNext;
pC2->Prev = pPrev;
pC->Prev =NULL;
pC->number = pC2->number;
pC2->number = iNum;
return ;
}
if ((!pC2->Next)&&(pC2->Prev))
{
pC2->Prev->Next = pC;
pC->Prev = pC2->Prev;
pC2->Next = pC->Next;
pC->Next = NULL;
pC2->Prev = pPrev;
pC->number = pC2->number;
pC2->number = iNum;
return ;
}
if ((pC2->Next)&&(pC2->Prev))
{
pC2->Prev->Next = pC;
pC2->Next->Prev = pC;
pC->Prev = pC2->Prev;
pC2->Prev = pPrev;
pC->Next = pC2->Next;
pC2->Next = pNext;
pC->number = pC2->number;
pC2->number = iNum;
return ;
}
}
}
//-----------------------------------------------//
void Str::AddText(char *s)
{
strcat((char *)this->Current->Text,s);
}
//-----------------------------------------------//
//переопределение операторов
Str Str::operator=(Str pc)
{
First=pc.First;
Last=pc.Last;
Current=pc.Current;
lastnumber = pc.lastnumber;
number = pc.number;
return *this;
}
Str Str::operator+(Str pc)
{
Last->Next=pc.First;
pc.First->Prev=Last;
Last=pc.Last;
Current=First;
this->lastnumber =this->lastnumber+pc.lastnumber;
this->number = this->number + pc.number;
return *this;
}
Str Str::operator++ ()
{
Current=Current->Next;
return *this;
}
Str Str::operator-(Str pc)
{
while ((pc.Current)&&(this->Current))
{
int i = strcmp((char *)pc.Current->Text,(char *)this->Current->Text);
if (i==0)
{
ClearCell(this->Current);
this->Current = this->Current->Next;
pc.Current = pc.Current->Next;
}
else
{
this->Current = this->Current->Next;
pc.Current = pc.Current->Next;
}
}
return *this;
}
ostream & operator <<( ostream & out , Str & pc )
{
out << "============================" << endl;
out << "Строка" << endl;
out << "---------" << endl;
out << "Выравнивание в строке: " << (char *)pc.Alignment << endl;
out << "Цвет текста в строке: " <<(char *) pc.TextColorStr << endl;
cout << "Длина строки:" << pc.lastnumber << endl;
cout << "Номер строки:" << pc.number << endl;
out << "Содержиться в строке: " << endl;
out << "------------------------" << endl;
while(pc.Current)
{
cout << " Номер ячейки: " << pc.Current->number << endl;
cout << " Текст в ячейке: " << (char *)pc.Current->Text << endl;
cout << " Цвет текста в ячейке: " << (char *)pc.Current->TextColor << endl;
++pc;
}
out << "============================" << endl;
return out;
}
-
Файл тестового примера main.cpp
#if !defined(__CBASE_CPP)
#include "cbase.cpp"