//----------------TOMOZEI LUCIANA MARIA-------------- //----------------1067------------------------------- //----------------BILET NR 9: CLASA LISTA, CLASA STUDENT #include #include #include #include #include #include #include class student { public: char nume_stud[30]; int nr_matricol; int an_studiu; int temp; int nr_note; float note[30]; //Constructorul contine un vector de note care trebuiesc introduse de la tastatura(Nu am reusit //sa initializez elementele vectorului) student(char n[30]="Anonim",int nr=0,int as=1,int tm=1,int nrn=1.) {strcpy(nume_stud,n);nr_matricol=nr;an_studiu=as;temp=tm;nr_note=nrn; if((nr_matricol==0)&&(nr_note==1))note[0]=0; else { for(int i=0;i>note[i]; }}} //Supraincaracari pentru operatii de intrare-iesire la nivel de student friend istream &operator>>(istream &i,student &s) { cout<<"Nume:";i>>s.nume_stud; cout<<"\nNumar matricol:";i>>s.nr_matricol; cout<<"\nAnul de studiu:";i>>s.an_studiu; cout<<"\nObiect temporar(0 sau 1):"; int vb; do { vb=0; i>>s.temp; if(s.temp>1) { cout<<"Data invalida!"; vb=1; } } while(vb==1); cout<<"\nNumarul de note:";i>>s.nr_note; for(int j=0;j>s.note[j];} return i; } friend ostream &operator<<(ostream &o,student s) { cout<<"Nume:";o<info.nr_matricol==s.nr_matricol)temp->info.temp=1; } fclose(f1); if(temp->info.temp==0) { f1=fopen("studenti.dat","ab+"); long t=filelength(fileno(f1)); fseek(f1,t,SEEK_CUR); fwrite(&temp->info,sizeof(temp->info),1,f1); fclose(f1); cout<<"\nAm salvat in fisier studentul "<<(char*)temp->info; } cap=cap->next; delete temp; } } void operator + (student s) //adaugare de nod { nod* aux=new nod; aux->info=s; aux->next=cap; cap=aux; } int operator - (int c) //stergerea unui nod { nod* p=cap; if(!p) return 0; else {student s1=p->info; if(s1.nr_matricol==c) { cap=cap->next; delete p; return 1; } else { nod* q=p->next; while(q&&q->info.nr_matricol!=c) { p=q; q=q->next; } if(q) { p->next=q->next; delete q; return 1; } else return 0; } } } //afisarea listei friend ostream& operator << (ostream& os,lista& lis) { nod* temp=lis.cap; if(!temp) { os<<" EMPTY"; } else printf("NUME ANUL DE STUDIU NR. MATRICOL MEDIA"); cout<<"\n-------------------------------------------------------------------------------"; while(temp) { cout<info.nume_stud; cout<info.an_studiu; cout<info.nr_matricol; cout<<(float)temp->info; temp=temp->next; } os<>" asigura crearea unei liste //cu obiectele salvate in fisier fara a fi temporare friend istream& operator >> (istream&is,lista& lis) { FILE *f1; student s; f1=fopen("studenti.dat","rb+"); do { fread(&s,sizeof(s),1,f1); if(s.temp==0)lis+s; } while(!feof(f1)); lis-s.nr_matricol; fclose(f1); return is; } //functia clasificare ordoneaza studentii pe ani de studiu //descrescator dupa medie friend void clasificare(lista& lis) { nod*temp=lis.cap; if(!temp||!temp->next)return; nod *i,*j; student t; for(i=temp;i->next;i=i->next) for(j=i->next;j;j=j->next) if(i->info.an_studiu>j->info.an_studiu) { t=j->info; j->info=i->info; i->info=t; } for(i=temp;i->next;i=i->next) for(j=i->next;j;j=j->next) if(i->info.an_studiu==j->info.an_studiu) if(((float)i->info)<((float)j->info)) { t=j->info; j->info=i->info; i->info=t; } } }; void main() { FILE *f1; lista ll,l1; system("cls"); cin>>l1; cout<<"Fisierul contine urmatoarele date:"; cout<>s3; //introducere date pentru s3 int y,u=0; //Cautarea unui articol student in fisier se face dupa cheia nr_matrico cout<<"Introduceti numarul matricol al elevului:";cin>>y; if((f1=fopen("studenti.dat","rb+"))==NULL)cout<<"Fisier inexistent!"; else { while((u==0)&&!feof(f1)) { fread(&s4,sizeof(s4),1,f1); if((s4.nr_matricol==y)&&(s4.temp==0))u=1; } if(u==0)cout<<"\nInregistrare inexistenta in fisier!"; else {cout<<"\nS-a citit din fisier ";cout<>a; ll-a; system("cls"); cout<<"\nNoua lista este:"<