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

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

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

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

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

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

Дата сдачи _____________

Подпись _____________

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

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

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

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

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

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

Создание нового вписка;
Добавление элемента в список;
Вывод списка на дисплей;
Сохранение данных списка в файл;
Читение данных из файла;
Удаление списка из памяти компьютера;
Поиск элемента в списке;
Сортировка списка;
Удаление элемента списка.

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

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

Для нормальной работы программы требуется 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

*10+10;>
{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<<"