Скачиваний:
21
Добавлен:
02.05.2014
Размер:
11.05 Кб
Скачать
#include<iostream.h>
#include<fstream.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
#include<iomanip.h>
const int l=31;
struct fio
 {
    char fam[l];
    char im[l];
    char ot[l];
  };
struct student
  {
    fio f;
    char gr[l];
    int col;
    student *next;
  };
struct gruppa
  { char gr[l];
    int ng;
    gruppa *next;
  };
class dinam
{private:
 student *beg1;
 student *end1;
 student *find (fio name);
 int m;
 gruppa *beg2;
 gruppa *end2;
 int k;
 public:
 dinam() { m=0; k=0; beg1=NULL; end1=NULL; beg2=NULL; end2=NULL;}
~dinam();
 void inputstfile();
 void outputst();
 void perech();
 void sortgr();
 void outputgrmax();
 void outputgrfile();
 void alfsortfio();
 void outputstfile();
 void alfsortgr();
 void sortcol();
 void add();
 void deletefio();
};

void dinam::inputstfile()
{student*p;
ifstream fin;
char file[l];
cout<<"imya faila:";
cin>>file;
fin.open(file);
if(fin==NULL){cout<<"fail ne naiden ";
	      getch();
	      return;
	     }
p=new student;
if(p==NULL){cout<<"net pamyati ";
	      getch();
	      exit(1);
	     }
 fin>>p->f.fam>>p->f.im>>p->f.ot>>p->gr>>p->col;
 p->next=NULL;
 while (fin.good())
 {if (beg1==NULL)
      beg1=p;
  else end1->next=p;
  end1=p; m++;
  p=new student;
  if(p==NULL){cout<<"net pamyati  ";
	      getch();
	      exit(1);}
 fin>>p->f.fam>>p->f.im>>p->f.ot>>p->gr>>p->col;
 p->next=NULL;
 }
 delete p;
}

void dinam:: outputst()
{student *p;
int i;
 p=beg1;
 i=0;
 while (p!=NULL)
 {
  cout<<setw(14)<<setiosflags(ios::left)<<p->f.fam
      <<setw(11)<<setiosflags(ios::left)<<p->f.im
      <<setw(15)<<setiosflags(ios::left)<<p->f.ot
      <<setw(6)<<setiosflags(ios::left)<<p->gr
      <<setw(10)<<setiosflags(ios::left)<<p->col<<endl;
   p=p->next;
   if((i+1)%10==0) getch();
   i++;
 }
 getch();
}

void dinam:: perech()
{
 int fl,max;
 student *p1;
 gruppa *p2;

 beg2=NULL; end2=NULL;

 p1=beg1;
 max=p1->col;
 while(p1!=NULL)
  {
   if (p1->col>=max)
   max=p1->col;
   p1=p1->next;
  }
 k=0;
 p1=beg1;
 while (p1!=NULL)
    {
     if (p1->col==max)
       {
	fl=1;
	p2=beg2;
	while (p2!=NULL)
	 {
	  if(strcmp(p1->gr,p2->gr)==0)
	    {
	      fl=0;
	      p2->ng++;
	    }
	  p2=p2->next;
	 }
	if (fl==1)
	 {
	  p2=new gruppa;
	  if (p2==NULL) {
			 cout<<"net pamyati";
			 getch();
			 exit(1);
			}
	  strcpy(p2->gr,p1->gr);
	  p2->ng=1;
	  p2->next=NULL;
	  if (beg2==NULL) beg2=p2;
	  else end2->next=p2;
	  end2=p2;
	  k++;
	 }
       }
     p1=p1->next;
    }
   delete p1,p2;
}

dinam::~dinam()
{
student*p1;
if(beg1!=NULL)
   {while(beg1!=NULL)
      {p1=beg1;
       beg1=beg1->next;
       delete p1;
      }
    end1=NULL;
    m=0;
   }
 gruppa*p2;
if(beg2!=NULL)
   {while(beg2!=NULL)
      {p2=beg2;
       beg2=beg2->next;
       delete p2;
      }
    end2=NULL;
    k=0;
   }
}

void dinam::sortgr()
{int fl;
 gruppa *p1,*p2,*p3;
 if(beg2==NULL||beg2->next==NULL)
      return;
do
 {
  fl=0;
  p2=beg2;
  p3=p2->next;
   if(strcmp(p2->gr,p3->gr)>0)
    {
     p2->next=p3->next;
     p3->next=p2;
     beg2=p3;
     fl=1;
    }
 p1=beg2;
 while(p1->next->next!=NULL)
 {p2=p1->next;
  p3=p2->next;
  if(strcmp(p2->gr,p3->gr)>0)
  {p2->next=p3->next;
   p3->next=p2;
   p1->next=p3;
   fl=1;
  }
p1=p1->next;
}
} while(fl==1);
end2=p1->next;
}

void dinam:: outputgrmax()
{ int max1;
  gruppa *p;
  cout<<"Tablitsa grupp."<<endl;
   p=beg2;
   max1=p->ng;
   while(p!=NULL)
   {if (p->ng>=max1)
     max1=p->ng;
    p=p->next;
   }
   p=beg2;
   while(p!=NULL)
     {if (p->ng==max1)
	 cout<<setw(6)<<setiosflags(ios::left)<<p->gr
	  <<setw(10)<<setiosflags(ios::left)<<p->ng<<endl;
	  p=p->next;
      }
   getch();
}

void dinam:: outputgrfile()
{gruppa *p;
 ofstream out;
 char file[l];
 int max1;
 cout<<"imya faila:";
 cin>>file;
 out.open(file);
 if (out==NULL) {cout<<"Fail ne naiden";
		  getch();
		  return;
		 }
   p=beg2;
   max1=p->ng;
   while(p!=NULL)
   {if (p->ng>=max1)
     max1=p->ng;
    p=p->next;
   }
   out<<"gruppa "<<"kolichestvo studentov MAX "<<endl;
   p=beg2;
   while(p!=NULL)
     {if (p->ng==max1)
	 out<<setw(6)<<setiosflags(ios::left)<<p->gr
	  <<setw(10)<<setiosflags(ios::left)<<p->ng<<endl;
	  p=p->next;
      }
 out.close();
}

void dinam:: alfsortfio()
{int fl;
 student *p1,*p2,*p3;
 if(beg1==NULL||beg1->next==NULL)
      return;
 do
 {
  fl=0;
  p2=beg1;
  p3=p2->next;
  if(strcmp(p2->f.fam,p3->f.fam)>0)
    {
     p2->next=p3->next;
     p3->next=p2;
     beg1=p3;
     fl=1;
    }
  else if(strcmp(p2->f.fam,p3->f.fam)==0)
	 if(strcmp(p2->f.im,p3->f.im)>0)
	   {
	    p2->next=p3->next;
	    p3->next=p2;
	    beg1=p3;
	    fl=1;
	   }
	  else if(strcmp(p2->f.im,p3->f.im)==0)
		 if(strcmp(p2->f.ot,p3->f.ot)>0)
		   {
		    p2->next=p3->next;
		    p3->next=p2;
		    beg1=p3;
		    fl=1;
		   }
 p1=beg1;
 while(p1->next->next!=NULL)
 {p2=p1->next;
  p3=p2->next;
  if(strcmp(p2->f.fam,p3->f.fam)>0)
     {p2->next=p3->next;
      p3->next=p2;
      p1->next=p3;
      fl=1;
     }
   else if(strcmp(p2->f.fam,p3->f.fam)==0)
	 if(strcmp(p2->f.im,p3->f.im)>0)
	   {
	    p2->next=p3->next;
	    p3->next=p2;
	    p1->next=p3;
	    fl=1;
	   }
	  else if(strcmp(p2->f.im,p3->f.im)==0)
		 if(strcmp(p2->f.ot,p3->f.ot)>0)
		   {
		    p2->next=p3->next;
		    p3->next=p2;
		    p1->next=p3;
		    fl=1;
		   }
p1=p1->next;
}
} while(fl==1);
end1=p1->next;
}

void dinam:: outputstfile ()
{student*p;
 ofstream fout;
 char file[l];
 cout<<"imya faila:";
 cin>>file;
 fout.open(file);
 if (fout==NULL) {cout<<"Fail ne sozdan";
		  getch();
		  return;
		 }
 cout<<"familiya      "<<"imya       "<<"otchestvo      "<<"gruppa "<<"Kolichestvo ballov"<<endl;
 p=beg1;
 while(p!=NULL)
   {fout<<setw(14)<<setiosflags(ios::left)<<p->f.fam
      <<setw(11)<<setiosflags(ios::left)<<p->f.im
      <<setw(15)<<setiosflags(ios::left)<<p->f.ot
      <<setw(6)<<setiosflags(ios::left)<<p->gr
      <<setw(10)<<setiosflags(ios::left)<<p->col<<endl;
      p=p->next;
   }
 fout.close();
}

void dinam:: alfsortgr()
{int fl;
 student *p1,*p2,*p3;
 if(beg1==NULL||beg1->next==NULL)
      return;
 do
 {
  fl=0;
  p2=beg1;
  p3=p2->next;
  if(strcmp(p2->gr,p3->gr)>0)
    {
     p2->next=p3->next;
     p3->next=p2;
     beg1=p3;
     fl=1;
    }
   else if(strcmp(p2->gr,p3->gr)==0)
	   if(strcmp(p2->f.fam,p3->f.fam)>0)
	     {
	      p2->next=p3->next;
	      p3->next=p2;
	      beg1=p3;
	      fl=1;
	     }
      else if(strcmp(p2->f.fam,p3->f.fam)==0)
	     if(strcmp(p2->f.im,p3->f.im)>0)
	       {
		p2->next=p3->next;
		p3->next=p2;
		beg1=p3;
		fl=1;
	       }
	      else if(strcmp(p2->f.im,p3->f.im)==0)
		     if(strcmp(p2->f.ot,p3->f.ot)>0)
		       {
			p2->next=p3->next;
			p3->next=p2;
			beg1=p3;
			fl=1;
		       }
p1=beg1;
 while(p1->next->next!=NULL)
 {p2=p1->next;
  p3=p2->next;
  if(strcmp(p2->gr,p3->gr)>0)
    {
     p2->next=p3->next;
     p3->next=p2;
     p1->next=p3;
     fl=1;
    }
   else if(strcmp(p2->gr,p3->gr)==0)
	  if(strcmp(p2->f.fam,p3->f.fam)>0)
	    {p2->next=p3->next;
	     p3->next=p2;
	     p1->next=p3;
	     fl=1;
	    }
	  else if(strcmp(p2->f.fam,p3->f.fam)==0)
		 if(strcmp(p2->f.im,p3->f.im)>0)
		  {
		   p2->next=p3->next;
		   p3->next=p2;
		   p1->next=p3;
		   fl=1;
		  }
		 else if(strcmp(p2->f.im,p3->f.im)==0)
			if(strcmp(p2->f.ot,p3->f.ot)>0)
			 {
			  p2->next=p3->next;
			  p3->next=p2;
			  p1->next=p3;
			  fl=1;
			 }
p1=p1->next;
}
} while(fl==1);
end1=p1->next;
}

void dinam:: sortcol()
{int fl;
 student *p1,*p2,*p3;
 do
 {
  fl=0;
  p2=beg1;
  p3=p2->next;
     if(p2->col<p3->col)
	{
	 p2->next=p3->next;
	 p3->next=p2;
	 beg1=p3;
	 fl=1;
	}
      if(p2->col==p3->col)
	if(strcmp(p2->gr,p3->gr)>0)
	  {
	   p2->next=p3->next;
	   p3->next=p2;
	   beg1=p3;
	   fl=1;
	  }
p1=beg1;
while(p1->next->next!=NULL)
{p2=p1->next;
 p3=p2->next;
 if(p2->col<p3->col)
	{
	 p2->next=p3->next;
	 p3->next=p2;
	 p1->next=p3;
	 fl=1;
	}
      if(p2->col==p3->col)
	if(strcmp(p2->gr,p3->gr)>0)
	  {
	   p2->next=p3->next;
	   p3->next=p2;
	   p1->next=p3;
	   fl=1;
	  }
p1=p1->next;
}
}while(fl==1);
end1=p1->next;
}

void dinam::add()
{student*p;
p=new student;
if(p==NULL) {cout<<"net pamyati  ";
	      getch();
	      exit(1);}
cout<<"Familiya:";
cin>>p->f.fam;
cout<<"Imya:";
cin>>p->f.im;
cout<<"Otchestvo:";
cin>>p->f.ot;
cout<<"Gruppa:";
cin>>p->gr;
cout<<"Kolichestvo ballov:";
cin>>p->col;
p->next=NULL;
if (beg1==NULL) beg1=p; else end1->next=p; end1=p; m++;}

student *dinam::find (fio name)
{student*p;
 p=beg1;
 while (p!=NULL)
 {if((strcmp(p->f.fam,name.fam)==0)&&(strcmp(p->f.im,name.im)==0)&&(strcmp(p->f.ot,name.ot)==0))
 return p;
 p=p->next;
 }
 return NULL;
}

void dinam::deletefio()
{ student *p,*p0;
fio t;
cout<<"Familiya:";cin>>t.fam;
cout<<"Imya:";cin>>t.im;
cout<<"Otchestvo:";cin>>t.ot;
p0=find(t);
if (p0==NULL) {cout<<t.fam<<" "<<t.im<<" "<<t.ot<<" ne naiden";
getch();
return;}
if (p0==beg1){beg1=beg1->next;
	      m--;
	      if (p0==end1) end1=NULL;
	      delete p0;}
else{p=beg1;
     while(p->next!=p0)
     p=p->next;
     p->next=p0->next;
     m--;
     if (p0==end1) end1=p;
     delete p0;
     }
}

void main()
{dinam h;
   int pm;
 cout<<"MENYU";
 while(1)
 {clrscr();
 cout<<"1.vvod iz faila.\n";
 cout<<"2.vivod na ekran.\n";
 cout<<"3.formirovanie perechnya GRUPPMAX,\n";
 cout<<"sortirovka perechnya GRUPPMAX v alfavitnom poryadke,\n";
 cout<<"4.sohranenie v faile perechnya GRUPPMAX.\n";
 cout<<"5.sortirovka studentov po FIO v alfavitnom poryadke.\n";
 cout<<"6.sohranenie v faile resultata sortirovki v alfavitnom poryadke.\n";
 cout<<"7.sortirovka studentov po gruppe v alfavitnom poryadke: 6.\n";
 cout<<"8.sortirovka studentov po kolichestvu ballov: 6.\n";
 cout<<"9.dobavlenie zapisi: 6.\n";
 cout<<"10.udalenie zapisi: 6.\n";
 cout<<"11.vihod iz programmi.\n";
 cout<<endl<<endl;
 cout<<"vash vibor (1%11):";
 cin>>pm;
 switch(pm)
 { case 1:h.inputstfile();break;
   case 2:h.outputst();break;
   case 3:
	 {h.perech();
	  h.sortgr();
	  h.outputgrmax();
	  break;}
   case 4:h.outputgrfile();break;
   case 5:
	 {h.alfsortfio();
	  h.outputst();
	  break;}
   case 6:h.outputstfile();break;
   case 7:
	 {h.alfsortgr();
	  h.outputst();
	  break;}
   case 8:
	 {h.sortcol();
	  h.outputst();
	  break;}
   case 9:
	 {h.add();
	  h.outputst();
	  break;}
   case 10:
	 {h.deletefio();
	 h.outputst();
	 break;}
   case 11:cout<<"konets raboti";
	      getch();
	      exit(0);
	      return;
   default:cout<<"net punkta ";
	   cout<<"Povtorite";
		  getch();
		  break;
		  }
		  }
}
Соседние файлы в папке Лабораторная работа №6