Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Вставка студента на указанную позицию в списке




Для выполнения данного действия в программу введена функция Pos_Comp.

void Pos_Comp(Comp &l,int x,int x1)

{

Students* C=new Students;

Students* C1=new Students;

Students* B=new Students;

Students* B1=new Students;

system("cls");

int j;

B=l.Ferst;

for (j=1;j<x;j++)

{

B=B->next;

}

int i;

B1=l.Ferst;

for (j=1;j<x1;j++)

{

B1=B1->next;

}

if (x<x1)

{

if (B==l.Ferst)

{

if (B->next!=B1){C=l.Ferst;

while(C!=NULL)

{

if (C->next==B1){C->next=B;break;}

C=C->next;

}}

l.Ferst=B->next;

B->next=B1->next;

B1->next=B;

}

else

{

if (B->next!=B1){

C=l.Ferst;

while(C!=NULL)

{

if (C->next==B){C->next=B->next;break;}

C=C->next;

}

 

B->next=B1->next;

B1->next=B;}

else

{

C=l.Ferst;

while (C!=NULL)

{

if (C->next==B1) {C->next=B;break;}

C=C->next;

}

B->next=B1->next;

B1->next=B;

}

}

}else

{

if (B1==l.Ferst)

{

if (B1->next!=B){C=l.Ferst;

while(C!=NULL)

{

if (C->next==B){C->next=B->next;break;}

C=C->next;

}}

l.Ferst=B->next;

B->next=B1;

}

else

{

if (B1->next!=B){

C=l.Ferst;

while(C!=NULL)

{

if (C->next==B){C->next=B->next;break;}

C=C->next;

}

C=l.Ferst;

while(C!=NULL)

{

if (C->next==B1){C->next=B;break;}

C=C->next;

}

B->next=B1;}

else

{

C=l.Ferst;

while (C!=NULL)

{

if (C->next==B1) {C->next=B;break;}

C=C->next;

}

B1->next=B->next;

B->next=B1;

}

}

}

}

 

Алгоритм данной функции заключается в перестановке указателе от элемента на место, которого нужно поставить студента к элементу, которого мы ставим на это место. А указатели у предыдущего элемента присвоить указатель элемента, которого мы перенесли. И присвоить указатель предыдущей позиции адрес вставляемого элемента. В качестве параметров функция принимает список, позицию элемента который нужно перенести и позицию элемента на которую нужно вставить.

Результат работы:

Для примера перенесем Смирново в начало списка.

Результат работы функции:

 

Блок-схема:

Начало
Students* C=new Students; Students* C1=new Students; Students* B=new Students; Students* B1=new Students; int j; B=l.Ferst;  
j=1..x
B=B->next;  
int i; B1=l.Ferst;  
 
А

 
А
x<x1  
да
B==l.Ferst  
да
C=l.Ferst;  
C!=NULL  
C->next==B1  
C->next=B;  
да
C=C->next;  
l.Ferst=B->next; B->next=B1->next; B1->next=B;  
B->next!=B1  
C=l.Ferst;  
да
C!=NULL  
C->next==B  
C->next=B->next;  
да
C=C->next;  
 
B->next=B1->next; B1->next=B;  
C=l.Ferst;  
C!=NULL  
C->next==B  
C->next==B1  
да
C->next=B;  
 
B->next=B1->next; B1->next=B;  
 
Б
 
В
Конец

 
Б
B1==l.Ferst  
да
C=l.Ferst;  
C!=NULL  
B1->next!=B  
C->next=B;  
да
C=C->next;  
 
l.Ferst=B->next; B->next=B1->next; B1->next=B;  
B1->next!=B  
C=l.Ferst;  
да
C!=NULL  
C->next==B  
C->next=B->next;  
да
C=C->next;  
 
B->next=B1->next; B1->next=B;  
C=l.Ferst;  
C!=NULL  
C->next==B  
C->next==B1  
да
C->next=B;  
 
B->next=B1->next; B1->next=B;  
 
В

ОСНОВНАЯ ПРОГРАММА

Основная программа сводится к вызову всех выше перечисленных функции по команде пользователя.

 

int _tmain(int argc, _TCHAR* argv[])

{

SetConsoleCP(1251);// установка кодовой страницы win-cp 1251 в поток ввода

SetConsoleOutputCP(1251); // установка кодовой страницы win-cp 1251 в поток вывода

string s;

Works D;

Comp l;

Students* S;

l.Ferst=NULL;

ifstream F;

F.open("T.txt");

if (F.fail())

{

cout<<"Файла не существует. Будет создан новый файл!"<<"\n";

system("pause");

F.close();

ofstream F;

F.open("T.txt");

}

else

{

while(!F.eof())

{

Students* C=new Students;

F>>C->SurName;

F>>C->Name;

F>>C->SecName;

F>>C->NumSRB;

if (l.Ferst==NULL)

{

l.Ferst=C;

} else if(l.Ferst->next==NULL){l.Ferst->next=C;l.End=C;}else{l.End->next=C;l.End=C;}

}

}

int T=0;

while (T==0)

{

int V;

cout<<"\n Для добавления записи в таб нажмите 1\n Для удаления записи нажмите 2\n Для поиска нажмите 3\n Для сортировки по алфавиту нажмите 4\n Для редоктирования записи нажмите 5\n Для перестановки нажмите 6\n Для ввывода нажмите 7\n Для выхода нажмите 0\n";

cin>>V;

switch (V)

{

case 1:

D.In_List(l);

break;

case 2:

S=D.Search(l);

D.De_Comp(l,S);

break;

case 3:

D.Search(l);

break;

case 4:

D.Sort_Comp(l);

break;

case 5:

D.Ref_Comp(l,D.Search(l));

break;

case 6:

int x,x1;

cout<<"Введите запись которую нужно переместить: ";

cin>>x;

cout<<"Введите на которую нужно переместить: ";

cin>>x1;

D.Pos_Comp(l,x,x1);

break;

case 7:

D.PritComp(l);

break;

case 0:

S=l.Ferst;

F.close();

ofstream F;

F.open("T.txt",ios_base::trunc);

while (S!=NULL)

{

if (S->next!=NULL){

F<<S->SurName<<"\n";

F<<S->Name<<"\n";

F<<S->SecName<<"\n";

F<<S->NumSRB<<"\n";}else{

F<<S->SurName<<"\n";

F<<S->Name<<"\n";

F<<S->SecName<<"\n";

F<<S->NumSRB;}

S=S->next;

}

F.close();

T=1;

}

//-------------

}

D.PritComp(l);

return 0;

}

Первым что делает основная программа есть ли текстовый файл где хранятся данные пользователе если нет то она создает файл если да то открывает его и прочитывает содержимое. После этого программа, выдает пользователь интерфейс все дальнейшие действия производятся, по команде пользователя.

Блок-Схема:

Начало
string s; Works D; Comp l; Students* S l.Ferst=NULL; ifstream F; F.open("T.txt");
F.fail()  
да
Вывод (Нет файла)
 
А
!F.eof()
Students* C=new Students;  
 
Б

 
А
F.close(); ofstream F;F.open("T.txt");
 
Б
C->SurName; C->Name; C->SecName; C->NumSRB;  
l.Ferst==NULL  
да
l.Ferst=C;  
l.Ferst->next==NULL  
да
l.Ferst->next=C; l.End=C;  
l.End->next=C; l.End=C;  
int T=0,V;  
T==0  
Вывод( Интерфейс)
Ввод(V)
V==1  
D.In_List(l);  
V==2  
S=D.Search(l) D.De_Comp(l,S)  
V==3  
D.Search(l);  
V==4  
D.Sort_Comp(l);  
V==5  
D.Ref_Comp(l,D.Search(l));  
V==6  
D.Pos_Comp(l,x,x1);  
V==7  
D.PritComp(l);  
 
В
 
Г

 
В
S=l.Ferst; F.close(); ofstream F; F.open("T.txt");  
S!=NULL  
Вывод S->SurName; S->Name; S->SecName; S->NumSRB;  
S!=NULL  
F.close(); T=1;  
 
В
   
Конец


 

ОБЩИЙ ЛИСТИНГ ПРОГРАММЫ

#include "stdafx.h"

#include <Windows.h>

#include <stdio.h>

#include <fstream>

#include <conio.h>

#include <string>

#include <iostream>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])

{

class Students

{public:

string Name;

string SurName;

string SecName;

string NumSRB;

Students* next;

Students()

{

next=NULL;

};

~Students(){};

};

 

//------------Динамический список-------

struct Comp

{

Students* Ferst;

Students* End;

};

class Works

{public:

void PritComp(Comp &l)

{

setlocale(LC_ALL, "Russian");

system("cls");

int i=1;

Students* C;

C=l.Ferst;

while(C!=NULL)

{

cout<<i<<"."<<"Фамилия: "<<C->SurName<<" ";

cout<<"Имя: "<<C->Name<<" ";

cout<<"Отчество: "<<C->SecName<<" ";

cout<<"Зачетная книжка: "<<C->NumSRB<<"\n";

C=C->next;

i++;

}

}

void In_List(Comp &l)

{

system("cls");

string s;

Students* C=new Students;

cout<<"Введите Фамилию"<<"\n";

cin>>C->SurName;

cout<<"Введите Имя"<<"\n";

cin>>C->Name;

cout<<"Введите Отчество"<<"\n";

cin>>C->SecName;

cout<<"Введите Номер зачетной книжки"<<"\n";

cin>>C->NumSRB;

if (l.Ferst==NULL)

{

l.Ferst=C;

} else if(l.Ferst->next==NULL){l.Ferst->next=C;l.End=C;}else{l.End->next=C;l.End=C;}

};

void Print_One(Comp &l,Students* C)

{

cout<<C->Name<<"\n";

cout<<C->SecName<<"\n";

cout<<C->NumSRB<<"\n";

cout<<C->SecName<<"\n";

}

void De_Comp(Comp &l,Students* C)

{

system("cls");

if (C==l.Ferst)

{

l.Ferst=C->next;

} else

{

Students* R;

R=l.Ferst;

while(R!=NULL)

{

if (R->next==C)R->next=C->next;

R=R->next;

}

};

delete C;

}

void Ref_Comp(Comp &l,Students* C)

{

system("cls");

int i;

string s;

int D=1;

while (D!=0)

{

system("cls");

cout<<"Чтобы отредоктировать: Фамилию нажмите 1,Имя нажмите 2,\n Отчество нажмите 3,Зачетную книжку нажмите 4, для выходя нажмите 0:";

cin>>i;

switch (i)

{

 

case 1:

cout<<"Введите Фамилию: ";

cin>>s;

C->SurName=s;

break;

case 2:

cout<<"Введите Имя: ";

cin>>s;

C->Name=s;

break;

case 3:

cout<<"Введите Отчество: ";

cin>>s;

C->SecName=s;

break;

case 4:

cout<<"Введите номер зачетной книжки: ";

cin>>s;

C->SurName=s;

break;

case 0:

D=0;

break;

default:

cout<<"Введено неверное значение: ";

 

}

}

}

void Sort_Comp(Comp &l)

{

system("cls");

Students *C=new Students;

Students *C1=new Students;

Students *B=new Students;

string st,s;

C=l.Ferst;

int n=0,i,j,j1;

while (C!=NULL)

{

n++;

C=C->next;

}

C=l.Ferst;

C1=C->next;

for (i=1;i<n;i++)

{

for (j=1;j<n;j++)

{

if (C1!=NULL)

{

s=C->SurName.substr(0,1);

st=C1->SurName.substr(0,1);

if (s>st)

{

B=l.Ferst;

while (B!=NULL)

{

if (B->next==C){B->next=C1;}

B=B->next;

}

if (C==l.Ferst) {l.Ferst=C1;}

C->next=C1->next;C1->next=C;

C=C1->next;

C1=C->next;

}

 

 

else {C=C->next;

C1=C1->next;}}

 

}

C=l.Ferst;

C1=C->next;

}

}

void Pos_Comp(Comp &l,int x,int x1)

{

Students* C=new Students;

Students* C1=new Students;

Students* B=new Students;

Students* B1=new Students;

system("cls");

int j;

B=l.Ferst;

for (j=1;j<x;j++)

{

B=B->next;

}

int i;

B1=l.Ferst;

for (j=1;j<x1;j++)

{

B1=B1->next;

}

if (x<x1)

{

if (B==l.Ferst)

{

if (B->next!=B1){C=l.Ferst;

while(C!=NULL)

{

if (C->next==B1){C->next=B;break;}

C=C->next;

}}

l.Ferst=B->next;

B->next=B1->next;

B1->next=B;

}

else

{

if (B->next!=B1){

C=l.Ferst;

while(C!=NULL)

{

if (C->next==B){C->next=B->next;break;}

C=C->next;

}

 

B->next=B1->next;

B1->next=B;}

else

{

C=l.Ferst;

while (C!=NULL)

{

if (C->next==B1) {C->next=B;break;}

C=C->next;

}

B->next=B1->next;

B1->next=B;

}

}

}else

{

if (B1==l.Ferst)

{

if (B1->next!=B){C=l.Ferst;

while(C!=NULL)

{

if (C->next==B){C->next=B->next;break;}

C=C->next;

}}

l.Ferst=B->next;

B->next=B1;

}

else

{

if (B1->next!=B){

C=l.Ferst;

while(C!=NULL)

{

if (C->next==B){C->next=B->next;break;}

C=C->next;

}

C=l.Ferst;

while(C!=NULL)

{

if (C->next==B1){C->next=B;break;}

C=C->next;

}

B->next=B1;}

else

{

C=l.Ferst;

while (C!=NULL)

{

if (C->next==B1) {C->next=B;break;}

C=C->next;

}

B1->next=B->next;

B->next=B1;

}

}

}

 

 

}

Students* Search(Comp l)

{

system("cls");

cout<<"Для поиска по Фамилии и Имени нажмите 1\n Для поиска по зачетной книжке нажмите 2";

int k;

cin>>k;

Students* C=new Students;

if (k==1)

{

string n,n1;

cout<<"Введите Фамилия"<<"\n";

cin>>n;

cout<<"Введите Имя"<<"\n";

cin>>n1;

C=l.Ferst;

while (C!=NULL)

{

if (C->SurName==n && C->Name==n1)

{

cout<<C->Name<<" ";

cout<<C->SurName<<" ";

cout<<C->NumSRB<<" ";

cout<<C->SecName<<"\n";

system("pause");

return C;

}

C=C->next;

}

cout<<"Нет совпадений\n";

system("pause");

} else{

 

string d;

cout<<"Введите Номер зачетной книжки"<<"\n";

cin>>d;

C=l.Ferst;

while (C!=NULL)

{

if (C->NumSRB==d)

{

cout<<C->Name<<" ";

cout<<C->SurName<<" ";

cout<<C->NumSRB<<" ";

cout<<C->SecName<<"\n";

system("pause");

return C;

}

C=C->next;

}

cout<<"Нет совпадений\n";

system("pause");

}

}

Works(){};

~Works(){};

};

//--------------------------------------

SetConsoleCP(1251);// установка кодовой страницы win-cp 1251 в поток ввода

SetConsoleOutputCP(1251); // установка кодовой страницы win-cp 1251 в поток вывода

string s;

Works D;

Comp l;

Students* S;//= new Students;

l.Ferst=NULL;

ifstream F;

F.open("T.txt");

if (F.fail())

{

cout<<"Файла не существует. Будет создан новый файл!"<<"\n";

system("pause");

F.close();

ofstream F;

F.open("T.txt");

}

else

{

while(!F.eof())

{

Students* C=new Students;

F>>C->SurName;

F>>C->Name;

F>>C->SecName;

F>>C->NumSRB;

if (l.Ferst==NULL)

{

l.Ferst=C;

} else if(l.Ferst->next==NULL){l.Ferst->next=C;l.End=C;}else{l.End->next=C;l.End=C;}

}

//D.De_Comp(l,l.End);

}

int T=0;

while (T==0)

{

int V;

cout<<"\n Для добавления записи в таб нажмите 1\n Для удаления записи нажмите 2\n Для поиска нажмите 3\n Для сортировки по алфавиту нажмите 4\n Для редоктирования записи нажмите 5\n Для перестановки нажмите 6\n Для ввывода нажмите 7\n Для выхода нажмите 0\n";

cin>>V;

switch (V)

{

case 1:

D.In_List(l);

break;

case 2:

S=D.Search(l);

D.De_Comp(l,S);

break;

case 3:

D.Search(l);

break;

case 4:

D.Sort_Comp(l);

break;

case 5:

D.Ref_Comp(l,D.Search(l));

break;

case 6:

int x,x1;

cout<<"Введите запись которую нужно переместить: ";

cin>>x;

cout<<"Введите на которую нужно переместить: ";

cin>>x1;

D.Pos_Comp(l,x,x1);

break;

case 7:

D.PritComp(l);

break;

case 0:

S=l.Ferst;

F.close();

ofstream F;

F.open("T.txt",ios_base::trunc);

while (S!=NULL)

{

if (S->next!=NULL){

F<<S->SurName<<"\n";

F<<S->Name<<"\n";

F<<S->SecName<<"\n";

F<<S->NumSRB<<"\n";}else{

F<<S->SurName<<"\n";

F<<S->Name<<"\n";

F<<S->SecName<<"\n";

F<<S->NumSRB;}

S=S->next;

}

F.close();

T=1;

}

//-------------

}

D.PritComp(l);

return 0;

}

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...