#include <stdio.h>
#include <cstdlib>
#include <string.h>
#ifdef linux
#define CZYSC(); system("clear");
#else
#define CZYSC(); system("cls");
#endif
using namespace std;
struct OCENA
{
char data[11];
float oc;
OCENA(char* _data, float _oc);
};
OCENA::OCENA(char* _data, float _oc)
{
strcpy(data,_data);
oc=_oc;
}
struct STUDENT
{
char imie[25], nazwisko[25];
long int numer_indeksu;
unsigned liczba_ocen;
OCENA *stopnie[10];
STUDENT(char* _imie, char* _nazwisko,long int _numer_indeksu);
};
STUDENT::STUDENT(char* _imie, char* _nazwisko,long int _numer_indeksu)
{
strcpy(imie,_imie);
strcpy(nazwisko,_nazwisko);
numer_indeksu=_numer_indeksu;
liczba_ocen=0;
}
STUDENT *Grupa[30];
STUDENT* dodajStudenta();
int narysujMenu();
int wczytaj(int);
void zapisz(int);
void powrot();
void wyswietlStudenta(int);
void wyswietlGrupe(int);
void wyswietlSredniaStudenta(int);
void wyswietlSredniaGrupy(int);
void dadajOcene(int);
int main()
{
int choose;
int iloscStudentow=0;/*2;
Grupa[0]=new STUDENT("przemek0", "bierut0", 123456);
Grupa[0]->stopnie[0]=new OCENA("21.21.2121",3);
Grupa[0]->stopnie[1]=new OCENA("11.03.3241",4);
Grupa[0]->liczba_ocen=2;
Grupa[1]=new STUDENT("przemek1", "bierut1", 234567);
Grupa[1]->stopnie[0]=new OCENA("21.21.2176",3);
Grupa[1]->stopnie[1]=new OCENA("32.03.3431",4);
Grupa[1]->stopnie[2]=new OCENA("24.1.2534",3);
Grupa[1]->stopnie[3]=new OCENA("54.03.8741",4);
Grupa[1]->liczba_ocen=4;
Grupa[2]=new STUDENT("przemek2", "bierut2", 345678);
Grupa[2]->stopnie[0]=new OCENA("21.21.7821",3);
Grupa[2]->stopnie[1]=new OCENA("32.03.3561",4);
Grupa[2]->stopnie[2]=new OCENA("12.03.3871",4);
Grupa[2]->liczba_ocen=3;*/
while((choose=narysujMenu())!=9)
{
CZYSC();
switch(choose)
{
case 1:
Grupa[iloscStudentow]=dodajStudenta();
iloscStudentow++;
break;
case 2:
dadajOcene(iloscStudentow);
break;
case 3:
wyswietlStudenta(iloscStudentow);
break;
case 4:
wyswietlGrupe(iloscStudentow);
break;
case 5:
wyswietlSredniaStudenta(iloscStudentow);
break;
case 6:
wyswietlSredniaGrupy(iloscStudentow);
break;
case 7:
zapisz(iloscStudentow);
break;
case 8:
iloscStudentow=wczytaj(iloscStudentow);
break;
default:
printf("Zly wybor\n");
break;
}
powrot();
}
return 0;
}
void dadajOcene(int lS)
{
long int nI;
printf("Podaj numer indeksu studenta: ");
scanf("%ld",&nI);
int i=-1;
do
{ ++i;
if(Grupa[i]->numer_indeksu==nI)
{
char tempChar[11];
float tempFloat;
printf("Student: %s %s, %ld\nPodaj date: ", Grupa[i]->imie, Grupa[i]->nazwisko,Grupa[i]->numer_indeksu);
scanf("%s", tempChar);
printf("Podaj ocene: ");
scanf("%f", &tempFloat);
Grupa[i]->stopnie[Grupa[i]->liczba_ocen]=new OCENA(tempChar,tempFloat);
++Grupa[i]->liczba_ocen;
}
if(i==lS-1&&Grupa[i]->numer_indeksu!=nI)
{
printf("Nie znaleziono studenta posiadajacego indeks o numerze: %ld\n",nI);
}
}while(i<lS&&Grupa[i]->numer_indeksu!=nI);
}
void wyswietlGrupe(int lS)
{
for(int i =0;i<lS;++i)
{
printf("Student: %s %s, %ld\n", Grupa[i]->imie, Grupa[i]->nazwisko,Grupa[i]->numer_indeksu);
for(int ii=0;ii<Grupa[i]->liczba_ocen;++ii)
{
printf("\t%s: %4.1f",Grupa[i]->stopnie[ii]->data,Grupa[i]->stopnie[ii]->oc);
if(ii%2==0&&ii!=0)printf("\n");
}
printf("\n\n");
}scanf("%d",&lS);
}
void wyswietlStudenta(int lS)
{
long int nI;
printf("Podaj numer indeksu studenta: ");
scanf("%ld",&nI);
int i=-1;
do
{ ++i;
if(Grupa[i]->numer_indeksu==nI)
{
printf("Student: %s %s, %ld\n", Grupa[i]->imie, Grupa[i]->nazwisko,Grupa[i]->numer_indeksu);
for(int ii=0;ii<Grupa[i]->liczba_ocen;ii++)
{
printf("\t%s: %4.1f",Grupa[i]->stopnie[ii]->data,Grupa[i]->stopnie[ii]->oc);
if(ii%2==0&&ii!=0)printf("\n");
}
}
if(i==lS-1&&Grupa[i]->numer_indeksu!=nI)
{
printf("Nie znaleziono studenta posiadajacego indeks o numerze: %ld\n",nI);
}
}while(i<lS&&Grupa[i]->numer_indeksu!=nI);
printf("\n");
}
STUDENT* dodajStudenta()
{
char imie[25], nazwisko[25];
long int nI;
printf("Podaj imie: ");
scanf("%s", imie);
printf("Podaj nazwisko: ");
scanf("%s", nazwisko);
printf("Podaj numer indeksu: ");
scanf("%ld", &nI);
return new STUDENT(imie, nazwisko, nI);
}
void wyswietlSredniaStudenta(int lS)
{
long int nI;
printf("Podaj numer indeksu studenta: ");
scanf("%ld",&nI);
CZYSC();
int i=-1;
do
{ ++i;
if(Grupa[i]->numer_indeksu==nI)
{
printf("Student: %s %s, %ld\n", Grupa[i]->imie, Grupa[i]->nazwisko,Grupa[i]->numer_indeksu);
float sumaOcen=0;
for(int ii=0;ii<Grupa[i]->liczba_ocen;++ii)
{
sumaOcen+=Grupa[i]->stopnie[ii]->oc;
}
printf("Srednia: %0.2f",sumaOcen/Grupa[i]->liczba_ocen);
}
if(i==lS-1&&Grupa[i]->numer_indeksu!=nI)
{
printf("Nie znaleziono studenta posiadajacego indeks o numerze: %ld\n",nI);
}
}while(i<lS&&Grupa[i]->numer_indeksu!=nI);
printf("\n");
}
void wyswietlSredniaGrupy(int lS)
{
float sumaOcen=0, sumaSrednich=0;
for(int i=0;i<lS;++i)
{
for(int ii=0;ii<Grupa[i]->liczba_ocen;++ii)
{
sumaOcen+=Grupa[i]->stopnie[ii]->oc;
}
sumaSrednich+=sumaOcen/Grupa[i]->liczba_ocen;
}
printf("Srednia grupy wynosi: %f",sumaSrednich/lS);
}
int narysujMenu()
{
int choose;
printf("-----------Menu-----------\n");
printf("1-Dodaj studenta\n");
printf("2-Dodaj ocene dla studenta\n");
printf("3-Wyswietl oceny studenta\n");
printf("4-Wyswietl oceny grupy\n");
printf("5-Oblicz srednia studenta\n");
printf("6-Oblicz srednia grupy\n");
printf("7-Zapisz dane\n");
printf("8-Wczytaj dane\n");
printf("9-Zakoncz program\n");
printf("--------------------------\n");
printf("Wybierz opcje: ");
scanf("%d",&choose);
return choose;
}
void powrot()
{
system("pause");
CZYSC();
}
void zapisz(int lS)
{
char adresPliku[30];
printf("Podaj nazwe pliku do zapisu danych: \n");
scanf("%s", adresPliku);
FILE *plik=fopen(adresPliku, "w");
for (int i=0;i<lS;++i)
{
fwrite(Grupa[i], sizeof(STUDENT), 1, plik);
for (int ii=0;ii<Grupa[i]->liczba_ocen;++ii)
{
fwrite(Grupa[i]->stopnie[ii], sizeof(OCENA), 1, plik);
}
}
fclose(plik);
}
int wczytaj(int lS)
{
for (int i=0;i<lS;++i)
{
for (int ii=0;ii<Grupa[i]->liczba_ocen;++ii)
{
free(Grupa[i]->stopnie[ii]);
}
free(Grupa[i]);
}
lS =-1;
char adresPliku[30];
printf("Podaj nazwe pliku do odczytu danych:\n");
scanf("%s", adresPliku);
FILE *plik=fopen(adresPliku, "r");
while (!feof(plik))
{
++lS;
Grupa[lS] = (STUDENT*) malloc(sizeof(STUDENT));
fread(Grupa[lS], sizeof(STUDENT), 1, plik);
if (Grupa[lS]->liczba_ocen>0)
{
for (int ii=0;ii<Grupa[lS]->liczba_ocen;++ii)
{
Grupa[lS]->stopnie[ii] = (OCENA*) malloc(sizeof(OCENA));
fread(Grupa[lS]->stopnie[ii], sizeof(OCENA), 1, plik);
}
}
}
fclose(plik);
return lS;
}