Главная      Учебники - Разные     Лекции (разные) - часть 32

 

Поиск            

 

Программирование на С++

 

             

Программирование на С++

МИНИСТЕРСТВО ОБЩЕГО И ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ.


МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ АВИАЦИОННО-ТЕХНОЛОГИЧЕСКИЙ УНИВЕРСИТЕТ

им. К.Э. ЦИОЛКОВКОГО


КАФЕДРА ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ


Курсовая работа второго курса второго семестра.


Руководитель: Чернадский


Дата сдачи: _____________


Подпись: _____________


Студент: Лицентов Д.Б.


Группа: 3ИТ-2-26


Москва

1998

Постановка задачи.


Необходимо реализовать список вида:





Техническое описание программы.


В программе предусмотрена работа со списком, которая включает в себя:


  1. Создание нового вписка;

  2. Добавление элемента в список;

  3. Вывод списка на дисплей;

  4. Сохранение данных списка в файл;

  5. Читение данных из файла;

  6. Удаление списка из памяти компьютера;

  7. Поиск элемента в списке;

  8. Сортировка списка;

  9. Удаление элемента списка.


Спецификация программы.


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

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


Для нормальной работы программы требуется PC совместимый компьютер и компилятор Borland 3.01 и выше. При использование иного сочетая характеристик системы на которой будет тестироваться программа возможны некоторые расхождения с результатами теста, но в основном ничего страшного произойти не должно.


Текст программы.


#include

#include


class List

{struct Tree

{int Body;

Tree *LP;

Tree *RP;

Tree(int Bdy=0) {Body=Bdy; LP=NULL; RP=NULL;}

~Tree() {Body=0; LP=NULL; RP=NULL;}

};

public:

List(int Digit=0);

Tree *Root;

List *LNext;

List *LPrev;

};


List::List(int Digit)

{Root=NULL;

for (int i=Digit*10; i

{Tree *PTree;

PTree=new Tree(i);

PTree->LP=NULL;

PTree->RP=NULL;

if (Root==NULL)

Root=PTree;

else

{Tree *PTree1=Root;

do

{if (PTree1->LP!=NULL)

PTree1=PTree1->LP;}

while (PTree1->LP!=NULL);

PTree1->LP=PTree;

PTree=NULL; PTree1=NULL;

}

}

}


class TreeWork : private List

{public:

void TreeWorkStart();

private:

int ElementQuantity;

int Mass;

int i;

List *BegP;

List *PList;

int MainMenu();

int Work(int Task);

int MakeNewList();

int AddElements();

int PrintList();

void EraseList();

int DeleteElement();

int FindElement();

int SubMenu();

int SubWork(int Task);

int SortByIncrease();

int SortByDecrease();

int SaveList();

int OpenList();

protected:

void GoThroughTree(Tree *L);

void Erase(Tree *L);

};


int TreeWork::MainMenu()

{cout<

cout<<" 1. Make New List." <

cout<<" 2. Add Element." <

cout<<" 3. Print List." <

cout<<" 4. Delete Element."<

cout<<" 5. Save List." <

cout<<" 6. Erase List." <

cout<<" 7. Open File." <

cout<<" 8. Find Element." <

cout<<" 9. Sort List." <

cout<<" 0. Exit." <

cout<

int i;

do

{cin>>i;

if (i<0 || i>9) cout<

}

while (i<0 || i>9);

return i;

}


int TreeWork::SubMenu()

{cout<

cout<<"1. Sort list by increase."<

cout<<"2. Sort list by decrease."<

int i;

cout<<"Your choice: ";

do

{cin>>i;

if (i<1 || i>2) cout<

}

while (i<1 || i>2);

return i;

}


int TreeWork::SubWork(int Task)

{switch (Task)

{case 1 : SortByIncrease(); break; //Increase

case 2 : SortByDecrease(); break; //Decrease

}

return 0;

}


int TreeWork::Work(int Task)

{switch (Task)

{case 1 : ElementQuantity=MakeNewList(); break; //Make New List

case 2 : ElementQuantity+=AddElements(); break; //Add Element

case 3 : PrintList(); break; //Print List

case 4 : DeleteElement(); break; //Delete Element

case 5 : SaveList(); break; //Save List

case 6 : ElementQuantity=0; EraseList(); break; //Erase List

case 7 : OpenList(); break; //Open File

case 8 : FindElement(); break; //Find Element

case 9 : SubWork(SubMenu()); break; //Sort List

case 0 : EraseList(); return -1; //Exit

}

return 0;

}


void TreeWork::TreeWorkStart()

{ElementQuantity=0;

do {} while (Work(MainMenu())!=-1);

}


int TreeWork::MakeNewList()

{if (BegP!=NULL)

{cout<

int Quant;

cout<

do

{cin>>Quant;

if (Quant<1)

cout<

}

while (Quant<1);

for (int i=0; i

{cout<

int Digit; cin>>Digit;

PList=new List(Digit);

if (BegP==NULL)

{BegP=PList;

BegP->LNext=BegP;

BegP->LPrev=BegP;

PList=NULL;}

else

{List *PList1=BegP->LPrev;

if (PList1==BegP)

{BegP->LNext=PList;

BegP->LPrev=PList;

PList->LNext=BegP;

PList->LPrev=BegP;

PList=NULL; PList1=NULL;}

else

{BegP->LPrev=PList;

PList1->LNext=PList;

PList->LNext=BegP;

PList->LPrev=PList1;

PList=NULL; PList1=NULL;}

}

}

return Quant;

}


int TreeWork::AddElements()

{if (BegP==NULL)

{MakeNewList(); return 0;}

int Quant;

cout<

do

{cin>>Quant;

if (Quant<1)

cout<

}

while (Quant<1);

for (int i=0; i

{cout<

int Digit;

cin>>Digit;

PList=new List(Digit);

List *PList1=BegP->LPrev;

if (PList1==BegP)

{BegP->LNext=PList;

BegP->LPrev=PList;

PList->LPrev=BegP;

PList->LNext=BegP;

PList1=NULL; PList=NULL;}

else

{BegP->LPrev=PList;

PList->LNext=BegP;

PList->LPrev=PList1;

PList1->LNext=PList;

PList=NULL; PList1=NULL;}

}

return Quant;

}


int TreeWork::PrintList()

{if (BegP==NULL)

{cout<

cout<

PList=BegP;

int i=1;

do

{cout<

GoThroughTree(PList->Root);

cout<

i++;

PList=PList->LNext;}

while (PList!=BegP);

return 0;

}


void TreeWork::GoThroughTree(Tree *L)

{Tree *PL=L, *PL1;

if (PL->LP!=NULL)

{PL1=PL;

PL=PL->LP;

cout<<"("<

Body<<","<

Body<<") ";

GoThroughTree(PL);}

if (PL->RP!=NULL)

{PL1=PL;

PL=PL->RP;

cout<<"("<

Body<<","<

Body<<") ";

GoThroughTree(PL);}

}


void TreeWork::Erase(Tree *L)

{Tree *PL=L;

if (PL->LP!=NULL)

{PL=PL->LP;

Erase(PL);}

if (PL->RP!=NULL)

{PL=PL->RP;

Erase(PL);}

PL->LP=NULL;

PL->RP=NULL;

}


void TreeWork::EraseList()

{if (BegP!=NULL)

{do

{List *PList1=BegP->LNext;

PList=PList1->LNext;

BegP->LNext=PList;

PList->LPrev=BegP;

Erase(PList1->Root);

delete [] PList1;

}

while (PList!=BegP);

BegP=NULL; PList=NULL;

}

}


int TreeWork::DeleteElement()

{cout<

int Number=0;

cin>>Number;

if (Number>ElementQuantity || Number<0)

{cout<

Number--;

PList=BegP;

for (int i=0; i

PList=PList->LNext;

List *PList1=PList->LNext, *PList2=PList->LPrev;

if (PList==BegP)

{PList1->LPrev=PList2;

PList2->LNext=PList1;

PList->LNext=NULL;

PList->LPrev=NULL;

delete [] PList;

BegP=PList1;

PList1=NULL; PList2=NULL;}

else

{PList1->LPrev=PList2;

PList2->LNext=PList1;

PList->LNext=NULL;

PList->LPrev=NULL;

delete [] PList;

PList1=NULL; PList2=NULL;}

ElementQuantity--;

return 0;

}


int TreeWork::FindElement()

{cout<

int Number=0;

cin>>Number;

PList=BegP;

do

{Tree *PT=PList->Root;

if (Number>PT->Body && Number

Body+10)

{cout<

GoThroughTree(PList->Root);

PList=NULL; cout<

PList=PList->LNext;

}

while (PList!=BegP);

cout<

PList=NULL;

return -1;

}


int TreeWork::SortByIncrease()

{

if(BegP==NULL) {cout<

List *PList1=BegP; PList=BegP;

do

{do

{if (PList1->Root->Body>PList->Root->Body)

{Tree *PT;

PT=PList1->Root;

PList1->Root=PList->Root;

PList->Root=PT;

PT=NULL;}

PList1=PList1->LNext;

}

while (PList1!=BegP);

PList=PList->LNext;

}

while (PList!=BegP);

return 0;

}


int TreeWork::SortByDecrease()

{

if(BegP==NULL) {cout<

List *PList1=BegP; PList=BegP;

do

{do

{if (PList1->Root->Body

Root->Body)

{Tree *PT;

PT=PList1->Root;

PList1->Root=PList->Root;

PList->Root=PT;

PT=NULL;}

PList1=PList1->LNext;

}

while (PList1!=BegP);

PList=PList->LNext;

}

while (PList!=BegP);

return 0;

}


int TreeWork::SaveList()

{if (BegP==NULL)

{cout<

ofstream F;

char *FileName=new char[25];

cout<>FileName;

F.open(FileName);

PList=BegP;

do

{i=0;

Mass=PList->Root->Body;

PList=PList->LNext;

if (PList!=BegP)

F<

else

F<

}

while (PList!=BegP);

F.close();

delete [] FileName;

return 0;

}


int TreeWork::OpenList()

{if (BegP!=NULL)

{cout<

cout<

char *FileName=new char[25];

cin>>FileName;

ifstream f;

ElementQuantity=0;

f.open(FileName);

char Next;

Next=f.peek();

while (Next!=EOF)

{

f>>Mass;

PList=new List(Mass/10);

if (BegP==NULL)

{BegP=PList;

BegP->LNext=BegP;

BegP->LPrev=BegP;

PList=NULL;}

else

{List *PList1=BegP->LPrev;

if (PList1==BegP)

{BegP->LNext=PList;

BegP->LPrev=PList;

PList->LNext=BegP;

PList->LPrev=BegP;

PList=NULL; PList1=NULL;}

else

{BegP->LPrev=PList;

PList1->LNext=PList;

PList->LNext=BegP;

PList->LPrev=PList1;

PList=NULL; PList1=NULL;}

}

Next=f.peek();

ElementQuantity++;

}

f.close();

delete [] FileName;

return 0;

}


TreeWork TW;


void main()

{TW.TreeWorkStart();}


Результаты работы программы.

Начало работы:



Main Menu: