Главная Учебники - Разные Лекции (разные) - часть 32
|
МИНИСТЕРСТВО
ОБЩЕГО И ПРОФЕССИОНАЛЬНОГО
ОБРАЗОВАНИЯ
РОССИЙСКОЙ
ФЕДЕРАЦИИ.
МОСКОВСКИЙ
ГОСУДАРСТВЕННЫЙ
АВИАЦИОННО-ТЕХНОЛОГИЧЕСКИЙ
УНИВЕРСИТЕТ
им. К.Э. ЦИОЛКОВКОГО КАФЕДРА
ИНФОРМАЦИОННЫХ
ТЕХНОЛОГИЙ
Курсовая
работа второго
курса второго
семестра.
Руководитель:
Чернадский Дата
сдачи: _____________
Студент:
Лицентов Д.Б.
Группа:
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
{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<
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:
| ||||||