Sunteți pe pagina 1din 6

/*

--->>> Evidenta studentilor din facultatea de Automatica si Calculatoare


<<<-----> Se introduc date despre studenti: nume si prenume, an, decan de an, sectie(IS sau CTI):
- Pentru cei de la IS se citeste numarul de examene promovate;
- Pentru cei de la CTI se citeste numarul de examene promovate;
---> Afisarea datelor despre studenti pe ecran si in fisier;
---> Afisarea datelor despre studenti in ordine alfabetica dupa nume si pe sectii;
---> Afisarea datelor despre studentii:
- din sectia IS in ordinea crescatoare a numarului de examene promovate;
- din sectia CTI in ordinea descrescatoare a numarului de examene nepromovate;
---> Afisarea datelor despre studentii din sectia CTI care au numarul de examene nepromovate
mai mare
decat un numar indicat de la tastatura;
*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
typedef struct student
{
char *nume, *decan, *sectie;
int an, nr_examene_promovate, nr_examene_nepromovate;
struct student *urm;
}nod;
nod *adauga(nod *prim)
{
nod*p, *q;
p=(nod *)malloc(sizeof(nod));
p->nume=(char*)malloc(sizeof(char));
p->decan=(char*)malloc(sizeof(char));
p->sectie=(char*)malloc(sizeof(char));
printf("Nume si prenume:");
fflush(stdin);
gets(p->nume);
printf("An:");
scanf("%d", &p->an);
printf("Decan de an:");
fflush(stdin);
gets(p->decan);
do{
printf("Sectia:(IS sau CTI)");
fflush(stdin);
gets(p->sectie);
}while(strcmp(p->sectie,"IS")!=0 && strcmp(p->sectie, "CTI")!=0);
if(strcmp(p->sectie, "IS")==0)
{
printf("Numar examene promovate:");
scanf("%d", &(p->nr_examene_promovate));
}
else
{
printf("Numar de examene nepromovate:");
scanf("%d", &(p->nr_examene_nepromovate));
}

p->urm=NULL;
if(prim==NULL)
return p;
else
{
q=prim;
while(q->urm!=NULL)
q=q->urm;
q->urm=p;
}
return prim;

}
void afisare(nod *prim)
{
nod* p;
p=prim;
while(p!=NULL)
{
if(strcmp(p->sectie, "IS")==0)
printf("%s %d %s %s %d\n",
>nr_examene_promovate);
else
printf("%s %d %s %s %d\n",
>nr_examene_nepromovate);
p=p->urm;
}
}
void afisare_IS(nod *prim)
{
nod* p;
p=prim;
while(p!=NULL)
{
if(strcmp(p->sectie, "IS")==0)
printf("%s %d %s %s %d\n",
>nr_examene_promovate);
p=p->urm;
}
}
void afisare_CTI(nod *prim)
{
nod* p;
p=prim;
while(p!=NULL)
{
if(strcmp(p->sectie, "CTI")==0)
printf("%s %d %s %s %d\n",
>nr_examene_nepromovate);
p=p->urm;
}
}
void sortare_nume(nod *prim)
{
nod *p;
char nume[30], decan[30], sectie[30];
int an, prom, neprom, ok;
p=(nod *)malloc(sizeof(nod));
do{

p->nume, p->an, p->decan, p->sectie, pp->nume, p->an, p->decan, p->sectie, p-

p->nume, p->an, p->decan, p->sectie, p-

p->nume, p->an, p->decan, p->sectie, p-

ok=1;
p=prim;
while(p->urm!=NULL)
{
if(strcmp(p->sectie,"IS")==0 && strcmp(p->nume, p->urm->nume)>0)
{
strcpy(nume, p->nume);
strcpy(p->nume, p->urm->nume);
strcpy(p->urm->nume, nume);
an=p->an;
p->an=p->urm->an;
p->urm->an=an;
strcpy(decan, p->decan);
strcpy(p->decan, p->urm->decan);
strcpy(p->urm->decan, decan);
strcpy(sectie, p->sectie);
strcpy(p->sectie, p->urm->sectie);
strcpy(p->urm->sectie, sectie);
prom=p->nr_examene_promovate;
p->nr_examene_promovate=p->urm->nr_examene_promovate;
p->urm->nr_examene_promovate=prom;
ok=0;
}
p=p->urm;

}
}while(!ok);
do{
ok=1;
p=prim;
while(p->urm!=NULL)
{
if(strcmp(p->sectie,"CTI")==0 && strcmp(p->nume, p->urm->nume)>0)
{
strcpy(nume, p->nume);
strcpy(p->nume, p->urm->nume);
strcpy(p->urm->nume, nume);
an=p->an;
p->an=p->urm->an;
p->urm->an=an;
strcpy(decan, p->decan);
strcpy(p->decan, p->urm->decan);
strcpy(p->urm->decan, decan);
strcpy(sectie, p->sectie);
strcpy(p->sectie, p->urm->sectie);
strcpy(p->urm->sectie, sectie);
prom=p->nr_examene_nepromovate;
p->nr_examene_nepromovate=p->urm>nr_examene_nepromovate;

p->urm->nr_examene_nepromovate=prom;

}
p=p->urm;
}
}while(!ok);

ok=0;

}
void sortare_nr_examene(nod *prim)
{
nod *p;
char nume[30], decan[30], sectie[30];
int an, prom, neprom, ok;
p=(nod *)malloc(sizeof(nod));
do{
ok=1;
p=prim;
while(p->urm!=NULL)
{
if(strcmp(p->sectie,"IS")==0 && p->nr_examene_promovate>p->urm>nr_examene_promovate)
{
strcpy(nume, p->nume);
strcpy(p->nume, p->urm->nume);
strcpy(p->urm->nume, nume);
an=p->an;
p->an=p->urm->an;
p->urm->an=an;
strcpy(decan, p->decan);
strcpy(p->decan, p->urm->decan);
strcpy(p->urm->decan, decan);
strcpy(sectie, p->sectie);
strcpy(p->sectie, p->urm->sectie);
strcpy(p->urm->sectie, sectie);
prom=p->nr_examene_promovate;
p->nr_examene_promovate=p->urm->nr_examene_promovate;
p->urm->nr_examene_promovate=prom;
ok=0;
}
p=p->urm;
}
}while(!ok);
do{
ok=1;
p=prim;
while(p->urm!=NULL)
{
if(strcmp(p->sectie,"CTI")==0 && p->nr_examene_nepromovate<p->urm>nr_examene_nepromovate)
{
strcpy(nume, p->nume);
strcpy(p->nume, p->urm->nume);
strcpy(p->urm->nume, nume);
an=p->an;
p->an=p->urm->an;
p->urm->an=an;

strcpy(decan, p->decan);
strcpy(p->decan, p->urm->decan);
strcpy(p->urm->decan, decan);
strcpy(sectie, p->sectie);
strcpy(p->sectie, p->urm->sectie);
strcpy(p->urm->sectie, sectie);

>nr_examene_nepromovate;

neprom=p->nr_examene_nepromovate;
p->nr_examene_nepromovate=p->urmp->urm->nr_examene_nepromovate=neprom;
ok=0;

}
p=p->urm;
}
}while(!ok);
}
void cautare_numar(nod *prim, int nr)
{
nod* p;
p=prim;
while(p!=NULL)
{
if(p->nr_examene_nepromovate > nr && strcmp(p->sectie, "CTI")==0)
printf("%s %d %s %s %d\n", p->nume, p->an, p->decan, p->sectie, p>nr_examene_nepromovate);
p=p->urm;
}
}
int main()
{
int opt, nr;
nod *prim;
prim = NULL;
do{
printf("\n1.Adaugare student;\n");
printf("2.Afisare studenti;\n");
printf("3.Ordonare dupa nume pe sectii\n");
printf("4.Ordonare sectia IS crescator dupa nr de examene promovate\n");
printf(" Ordonare sectia CTI descrescator dupa nr de examene nepromovate\n");
printf("5.Afisarea sectia CTI pt nr de examene nepromovate mai mare ca un
numar dat\n");
printf("0.Exit\n");
printf("Introdu optiunea:\n");
scanf("%d",&opt);
switch(opt)
{
case 1:
prim=adauga(prim);
break;
case 2:
afisare(prim);
break;
case 3:
sortare_nume(prim);
printf("\nSectia IS :\n");

afisare_IS(prim);
printf("\nSectia CTI :\n");
afisare_CTI(prim);
break;
case 4:

case 5:

sortare_nr_examene(prim);
printf("\nSectia IS :\n");
afisare_IS(prim);
printf("\nSectia CTI :\n");
afisare_CTI(prim);
break;
printf("Dati numarul de examene nepromovate");
scanf("%d", &nr);
cautare_numar(prim, nr);
break;

}
}while(opt!=0);
getch();
return 0;
}

S-ar putea să vă placă și