Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Программирование на C / C++ / Лабораторная работа №6 / laba11
.CPP#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