Разработка программы для создания списка и обработки данных студентов, страница 7

cout << " STREET: ";

 in >> str;

 ed-> education -> street=strdup(str);

 cout << " HOUSE: ";

  in >> ed->education->house;

cout << " SPECIALNOST: ";

 in >> str;

 ed-> proffs -> name =strdup(str);

cout << " FORMA OBUCHENIYA: ";

 in >> str;

ed-> proffs -> from=strdup(str);

 cout << " KONKURS: ";

 in>> ed-> proffs -> competition;

 cout << " OPLATA: ";

 in >> ed-> proffs ->size_pay;

delete []str; //osvobojdenie pamyati

return in; //vernyt' potok

}

//добавление нового элемента в список

educational* input_new (educational* &ed)

 {

 educational *work=ed; //sohranenie elementa

 ed=new educational; //sozdanie novogo elementa

 if (ed==NULL) //esli pamyat' ne vudelilas'

    {

              ed=work; //vozvrat v ishodnui spisok

     return NULL;

    }

 cin >> ed; //vvedem element

 if (work==NULL) //esli pervui element v spiske

    ed->previous=NULL;

 else//esli ne pervui element

             {

              ed->previous=work; //vstavlyaem novui element

              work->next=ed; //v konec spiska

             }

 ed->next=NULL;

 return ed; //vernyt' novui element

 }

//удаление элемента из списка

educational* delete_element (educational* &ed, educational* &begin)

{

 educational *work;

 if ((ed->previous==NULL)&&(ed->next==NULL)) //esli odin element v spiske

    begin=NULL; //to delaem spisok pystum

 if ((ed->previous==NULL)&&(begin!=NULL)) //esli pervui element v spiske

    {

              begin=ed->next; //nachinaem spisok so vtorogo elementa

              ed->next->previous=NULL;

             }

 if ((ed->next==NULL)&&(begin!=NULL)) //esli poslednii element v spiske

    ed->previous->next=NULL; //to ydalyaem ssulky na nego

 if ((ed->next!=NULL)&&(ed->previous!=NULL)) //esli element v seredine spiska

             {

              ed->previous->next=ed->next; //to peredeluvaem ssulki

              ed->next->previous=ed->previous;}

 work=ed->previous;

 delete []ed-> education -> city;

 delete []ed-> education -> street;

 delete []ed-> proffs -> name;

 delete []ed-> proffs -> from;

 delete ed; //ydalyaem ob'ekt

 ed=work; //vernyt' predudyshii element

 return work;

 }

//poisk poslednego elementa v spiske

educational* find_to_end (educational* begin)

{

 educational* work=begin;

 if(work!=NULL)                            //esli ne pustoi to iskat'

      while((work->next!=NULL))            //esli tekyshii element ne poslednii

           work=work->next;                //to perehodim k sled. elementy

return work;                               //vernyt' poslednii element

}

//podshet kol-va elementov v spiske

int count_to_list (educational* begin)

{

 int count=1;

 educational* work=begin;                      //nachinaem s pervogo elementa

 if (work==NULL)                           //esli spisok pystoi

      count=0;                             //to kol-vo = 0

 else

      while(work=work->next)               //dvigaemsya poka ne poslednii

           count++;

return count;                              //vernyt' kol-vo elementov v spiske

}

//ydalit' ves' spisok

educational* delete_all (educational* &end, educational* &begin)

{

 while(begin!=NULL)                        //poka spisok ne stanet pystum

      if(end==NULL)                        //esli end-element ydalen

            end=find_to_end(begin);        //to ish'em konec spiska

      else

            delete_element (end, begin);   //inache ydalyaem element

return end;

}

//jdem najatiya klavishi

int wait_key(void)

{

return getch();                            //vernyt' vvedennui simvol

}

//sozdanie novogo spiska

educational* new_list (educational* &end, educational* &begin)

{