You are on page 1of 10

//Balint Gabriel , grupa 211 - a

#include <windows.h>
#include <conio.h>
#include <fstream>

#define NR_Materii 8
#define PCLP_credite 6
#define MS_credite 4
#define Fizica_credite 4
#define GAC_credite 6
#define RC_credite 4
#define SD_credite 3
#define Sport_credite 1
#define Engleza_credite 2
#define suma_credite 30

using namespace std;

bool CFW(char n[20])


{
int ok=0;
int dim=strlen(n);
for(int i=0;i<dim;i++)
{
if((*(n+i)<65 || *(n+i)>122) || (*(n+i)>90 && *(n+i)<97))
ok++;
}
if(ok)
return false;
else
return true;
}

bool CFN(double a)
{
if(a>=1 && a<=10)
return true;
else
{
printf("Introduceti un numar din intervalul (1-10)!\n");
return false;
}
}

struct studenti
{

char nume[20];
double nota[20];
double mediaPonderata;
double mediaAritmetica;

}student[50];

bool CFName(char nume[20],int nr,int nr1)


{
int gasit=0;
for(int i=0;i<nr+nr1;i++)
{
if(strcmp(nume,student[i].nume)==0)
gasit++;
}
if(gasit>1)
{
printf("Un student cu acelasi nume este deja in lista!\n");
return false;
}
else
return true;
}

void note(int i)
{
int j=0;
printf("Introduce-ti notele studentului %s cu id-ul %d",student[i].nume,i+1);
do{printf("\nPCLP(%d credite) : ",PCLP_credite);scanf("%lf",&student[i].nota[j+
+]);}while(!CFN(student[i].nota[j-1]));
do{printf("GAC(%d credite) : ",GAC_credite);scanf("%lf",&student[i].nota[j+
+]);}while(!CFN(student[i].nota[j-1]));
do{printf("Structuri de date(%d credite) :
",SD_credite);scanf("%lf",&student[i].nota[j++]);}while(!CFN(student[i].nota[j-
1]));
do{printf("Matematici speciale(%d credite) :
",MS_credite);scanf("%lf",&student[i].nota[j++]);}while(!CFN(student[i].nota[j-
1]));
do{printf("Fizica(%d credite) :
",Fizica_credite);scanf("%lf",&student[i].nota[j++]);}while(!CFN(student[i].nota[j-
1]));
do{printf("Retele de calculatoare(%d credite) :
",RC_credite);scanf("%lf",&student[i].nota[j++]);}while(!CFN(student[i].nota[j-
1]));
do{printf("Engleza tehnica(%d credite) :
",Engleza_credite);scanf("%lf",&student[i].nota[j++]);}while(!
CFN(student[i].nota[j-1]));
do{printf("Educatie fizica si sport(%d credite) :
",Sport_credite);scanf("%lf",&student[i].nota[j++]);}while(!CFN(student[i].nota[j-
1]));
printf("\n");
j=0;
student[i].mediaPonderata=0.00;
student[i].mediaPonderata+=(student[i].nota[j++]*PCLP_credite);
student[i].mediaPonderata+=(student[i].nota[j++]*GAC_credite);
student[i].mediaPonderata+=(student[i].nota[j++]*SD_credite);
student[i].mediaPonderata+=(student[i].nota[j++]*MS_credite);
student[i].mediaPonderata+=(student[i].nota[j++]*Fizica_credite);
student[i].mediaPonderata+=(student[i].nota[j++]*RC_credite);
student[i].mediaPonderata+=(student[i].nota[j++]*Engleza_credite);
student[i].mediaPonderata+=(student[i].nota[j++]*Sport_credite);
student[i].mediaPonderata=double(student[i].mediaPonderata/suma_credite);
student[i].mediaAritmetica=0.00;
for(int j=0;j<NR_Materii;j++)
{
student[i].mediaAritmetica+=student[i].nota[j];
}
student[i].mediaAritmetica=double(student[i].mediaAritmetica/NR_Materii);
}

void afisareNoteStudent(int i)
{
int j=0;
printf("Studentul : %s \n",student[i].nume);
printf("PCLP(%d credite) : %.2lf",PCLP_credite,student[i].nota[j++]);
printf("\nGAC(%d credite) : %.2lf",GAC_credite,student[i].nota[j++]);
printf("\nStructuri de date(%d credite) : %.2lf",SD_credite,student[i].nota[j+
+]);
printf("\nMatematici speciale(%d credite) :
%.2lf",MS_credite,student[i].nota[j++]);
printf("\nFizica(%d credite) : %.2lf",Fizica_credite,student[i].nota[j++]);
printf("\nRetele de calculatoare(%d credite) :
%.2lf",RC_credite,student[i].nota[j++]);
printf("\nEngleza tehnica(%d credite) :
%.2lf",Engleza_credite,student[i].nota[j++]);
printf("\nEducatie fizica si sport(%d credite) :
%.2lf",Sport_credite,student[i].nota[j++]);
printf("\nMedia ponderata : %.2lf",student[i].mediaPonderata);
printf("\nMedia aritmetica : %.2lf\n",student[i].mediaAritmetica);
}

void copiereNoteFisier(int nr)


{
FILE *stud;
char nume[20];
printf("\nIntroduce-ti numele fisierului(fara extensia .txt)\n");
scanf("%s",nume);
strcat(nume,".txt");
if((stud=fopen(nume,"w"))==NULL)
{
printf("A aparut o eroare la deschiderea fisierului !\n");
}
else
{
stud=fopen(nume,"w");
for(int i=0;i<nr;i++)
{
int j=0;
int k=0;
fprintf(stud,"Studentul : %s\n",student[i].nume);
fprintf(stud,"PCLP - Nota : %.2lf (%.2lf puncte)\n",student[i].nota[k++],
(student[i].nota[j++]*PCLP_credite));
fprintf(stud,"GAC - Nota : %.2lf (%.2lf puncte)\n",student[i].nota[k++],
(student[i].nota[j++]*GAC_credite));
fprintf(stud,"Structuri de date - Nota : %.2lf (%.2lf
puncte)\n",student[i].nota[k++],(student[i].nota[j++]*SD_credite));
fprintf(stud,"Matematici speciale - Nota : %.2lf (%.2lf
puncte)\n",student[i].nota[k++],(student[i].nota[j++]*MS_credite));
fprintf(stud,"Fizica - Nota : %.2lf (%.2lf puncte)\n",student[i].nota[k++],
(student[i].nota[j++]*Fizica_credite));
fprintf(stud,"Retele de calculatoare - Nota : %.2lf (%.2lf
puncte)\n",student[i].nota[k++],(student[i].nota[j++]*RC_credite));
fprintf(stud,"Engleza tehnica - Nota : %.2lf (%.2lf
puncte)\n",student[i].nota[k++],(student[i].nota[j++]*Engleza_credite));
fprintf(stud,"Educatie fizica si sport - Nota : %.2lf (%.2lf
puncte)\n",student[i].nota[k++],(student[i].nota[j++]*Sport_credite));
fprintf(stud,"Media ponderata : %.2lf\n",student[i].mediaPonderata);
fprintf(stud,"Media aritmetica : %.2lf\n\n",student[i].mediaAritmetica);
}
printf("\nFisierul a fost creat cu succes!\n");
fclose(stud);
}
}

void ActualizareLista(int &nr)


{
FILE *fisier;
char nume[20];
printf("Introdu numele fisierului (fara extensia .txt)\n");
scanf("%s",nume);
strcat(nume,".txt");

if((fisier=fopen(nume,"r"))==NULL)
printf("Eroare la citirea fisierului!\n");
else
{
system("cls");
int a=0;
do{
for(int i=0;i<3;i++)
{
printf("*");Sleep(300);
}
system("cls");
a++;
}while(a!=3);
printf("Fisierul a fost citit cu succes!\n");
fisier=fopen(nume,"r");
char aux[20];
int c=1,i=nr;
double num;
int NrStud=0;
while(!feof(fisier))
{
if(getc(fisier)==58)
{
if(c==11)
{
fgets(aux,6,fisier);
num=strtod(aux,NULL);
student[i].mediaAritmetica=num;
c=1;i++;nr++;NrStud++;
}
else if(c==10)
{
fgets(aux,6,fisier);
num=strtod(aux,NULL);
student[i].mediaPonderata=num;
c++;
}
else if(c>1 && c<10)
{
fgets(aux,6,fisier);
num=strtod(aux,NULL);
student[i].nota[c-2]=num;
c++;
}
else if(c==1)
{
fgets(aux,20,fisier);
int m=0;
char aux2[20]={" "};
int dim=strlen(aux);
for(int l=0;l<dim;l++)
{

if(((*(aux+l))<91 && *(aux+l)>64) || (*(aux+l)>96 &&


*(aux+l)<123))
{
*(aux2+m)=*(aux+l);
m++;
}
}
strcpy(student[i].nume,aux2);
c++;
}
}
}
printf("S-au importat informatiile a %d studenti\n",NrStud);

}
}

void EliminareStudent(int &nr)


{
if(nr==0)
printf("Lista este goala !!\n");
else
{
char Student[20];
printf("Numele studentului : ");scanf("%s",Student);
int gasit=0;
int s[nr];
for(int i=0;i<nr;i++)
{
if(strcmp(student[i].nume,Student)==0)
{
s[gasit]=i+1;
gasit++;

}
}
do{
if(gasit==0)
{
printf("Nu s-au gasit studenti cu numele %s!\n",Student);
}
else if(gasit >= 1)
{
printf("Studentul %s(id-ul:%d) a fost sters din
lista!\n",Student,s[gasit-1]);
if(nr==1 || s[gasit-1]==nr)
{
nr--;
}
else if(nr>1 && s[gasit-1]!=nr)
{
for(int i=s[gasit-1]-1;i<nr-1;i++)
{
strcpy(student[i].nume,student[i+1].nume);
student[i].mediaAritmetica=student[i+1].mediaAritmetica;
student[i].mediaPonderata=student[i+1].mediaPonderata;
for(int j=0;j<NR_Materii;j++)
{
student[i].nota[j]=student[i+1].nota[j];
}
}
nr--;
}
gasit--;
}

}while(gasit!=0);

}
}

void SortareStudentiCrescator(int nr)


{
char aux[20];
double auxint;
int k=0;
for(int i=0;i<nr-1;i++)
{
for(int j=i+1;j<nr;j++)
{
if(strcmp(student[i].nume,student[j].nume)>0)
{
strcpy(aux,student[i].nume);
strcpy(student[i].nume,student[j].nume);
strcpy(student[j].nume,aux);
do{
auxint=student[i].nota[k];
student[i].nota[k]=student[j].nota[k];
student[j].nota[k++]=auxint;
}while(k!=9);
k=0;
auxint=student[i].mediaAritmetica;
student[i].mediaAritmetica=student[j].mediaAritmetica;
student[j].mediaAritmetica=auxint;
auxint=student[i].mediaPonderata;
student[i].mediaPonderata=student[j].mediaPonderata;
student[j].mediaPonderata=auxint;

}
}
}

void sortareDupaMedia(int nr)


{
char aux[20];
double auxint;
int k=0;
for(int i=0;i<nr-1;i++)
{
for(int j=i+1;j<nr;j++)
{
if(student[i].mediaAritmetica<student[j].mediaAritmetica)
{
strcpy(aux,student[i].nume);
strcpy(student[i].nume,student[j].nume);
strcpy(student[j].nume,aux);
do{
auxint=student[i].nota[k];
student[i].nota[k]=student[j].nota[k];
student[j].nota[k++]=auxint;
}while(k!=9);
k=0;
auxint=student[i].mediaAritmetica;
student[i].mediaAritmetica=student[j].mediaAritmetica;
student[j].mediaAritmetica=auxint;
auxint=student[i].mediaPonderata;
student[i].mediaPonderata=student[j].mediaPonderata;
student[j].mediaPonderata=auxint;

}
}
}

void meniuPrincipal(int a)
{
printf("Studenti:%d\n\n",a);
printf("1.Adauga studenti in lista.\n");
printf("2.Elimina studenti din lista.\n");
printf("3.Cauta un student.\n");
printf("4.Sorteaza lista.\n");
printf("5.Creeaza un fisier cu informatiile studentilor.\n");
printf("6.Actualizeaza lista cu studenti din fiser.\n");
printf("9.Iesi din program.\n");
printf("Alege:");
}

int main()
{

int choice,nr=0,
nr1=0;
do{
meniuPrincipal(nr);

scanf("%d",&choice);

switch(choice)
{
case 1 : printf("Introdu numarul de studenti : ");scanf("%d",&nr1);
for(int i=nr;i<nr+nr1;i++)
{ do{do{
printf("Numele studentului cu id-ul numarul %d : ",i+1);
scanf("%s",student[i].nume);}while(!CFName(student[i].nume,nr,nr1));
if(!CFW(student[i].nume))
printf("Nu ati introdus un nume!");
}while(!CFW(student[i].nume));
note(i);
}
nr+=nr1;
break;
case 2: EliminareStudent(nr);break;

case 3:
if(nr==0)
{
printf("Lista este goala!\n");
}
else
{
printf("1.Dupa id.\n");
printf("2.Dupa nume.\n");
printf("Alege:");
int choice1;
scanf("%d",&choice1);
switch(choice1)
{case 1:
{
int id;
do{
printf("Id-ul studentului : ");scanf("%d",&id);
if(id>nr)
printf("Nu exista student cu id-ul %d",id);
}
while(id>nr);
system("cls");afisareNoteStudent(id-1);
break;}
case 2:
{
char numeStd[20];
do{
printf("Numele studentului : ");
scanf("%s",numeStd);
if(!CFW(numeStd))
{
printf("Nu ati introdus un nume!\n");
}
}while(!CFW(numeStd));
int gasit=0;
int s[nr];
for(int i=0;i<nr;i++)
{
if(strcmp(student[i].nume,numeStd)==0)
{
s[gasit]=i+1;
gasit++;

}
}
if(gasit==0)
{
printf("Nu s-a gasit studenti cu numele %s!\n",numeStd);
}
else
{
printf("S-au gasit %d studenti cu numele %s\n",gasit,numeStd);
int a;
printf("Afisati informatiile?\n1.DA\n2.NU\n");
scanf("%d",&a);
if(a==1)
{
system("cls");
for(int k=0;k<gasit;k++)
{
printf("Studentul cu ID-ul %d:\n",s[k]);
afisareNoteStudent(s[k]-1);
printf("\nApasa o tasta pentru a continua!");
getch();
system("cls");
}}
}
break;}
default:printf("Nu ati ales nicio optiune!\n");
}

}
break;

case 4:if(nr<2)
{
printf("Lista este goala sau are un singur student!\n");
}
else
{
char ch;
printf("a.In ordine alfabetica.\n");
printf("b.Dupa medie.\n");
ch=getch();
if(ch=='a' || ch=='A')
{
SortareStudentiCrescator(nr);
printf("Lista a fost sortata!\n");
}
else if(ch=='b' || ch =='B')
{
sortareDupaMedia(nr);
printf("Lista a fost sortata!\n");
}
else
{
printf("Nu ati ales nicio optiune!\n");
}

}
break;
case 5:
if(nr==0)
{
printf("Lista este goala!\n");

}
else
{
copiereNoteFisier(nr);
}
break;
case 6:ActualizareLista(nr);break;
default : if(choice!=9)printf("Nu ati ales nici o optiune !!\n");
}
printf("\nApasa o tasta pentru a continua!");
getch();
system("cls");
}while(choice!=9);
}

You might also like