/** * File: andmebaas1.c * Author: Rainer Liis * Created: 14.02.2018 * Last edit: 14.02.2018 * * Description: programm, mis loeb sisse ühest failist tudengite andmed * ja teisest ainete andmed ja prindib uude faili eksamipileti. */ #include <stdio.h> #include <string.h> #include "struktuurid.h" int tudengidSisse (FILE *tudengid, Student *tudeng, Student *tudeng_massiiv); int ainedSisse (FILE *ained, Subject *aine, Subject *aine_massiiv); void yhildus (Subject *aine_massiiv, Student *tudeng_massiiv, Pilet *pileti_liige, int counter_sub, int counter_stud); int sortimine (Pilet *pileti_liige, int counter_sub); void eksamileht (Pilet *pileti_liige, int counter_sub, int ainete_hulk); int main (void) { FILE *tudengid, *ained; // tekitab pointerid failidele Pilet pileti_liige[30]; // muutuja ainete ja tudengite ühildamiseks Student tudeng[30]; // muutuja tudengi andmete hoiustamiseks Subject aine[30]; // muutuja aine andmete hoiustamiseks Student tudeng_massiiv[30]; // massiiv tudengite hoidmiseks Subject aine_massiiv[30]; // massiiv ainete hoiustamiseks int counter_stud; // tudengite loendur int counter_sub; // ainete loendur int ainete_hulk; // loeb ära mitu erinevat ainet on tudengid = fopen ("tudengid.txt", "r"); // avab faili tudengid ained = fopen ("ained.txt", "r"); // avab faili andmed counter_stud = tudengidSisse (tudengid, tudeng, tudeng_massiiv); counter_sub = ainedSisse (ained, aine, aine_massiiv); fclose (tudengid); fclose (ained); yhildus (aine_massiiv, tudeng_massiiv, pileti_liige, counter_sub, counter_stud); ainete_hulk = sortimine (pileti_liige, counter_sub); printf ("Aineid kokku: %d\n", ainete_hulk); eksamileht (pileti_liige, counter_sub, ainete_hulk); return 0; } int tudengidSisse (FILE *tudengid, Student *tudeng, Student *tudeng_massiiv) { int i = 0; int counter = 0; while (fscanf (tudengid, "%s %s %d", tudeng->eesnimi, tudeng->perenimi, &tudeng->matrikkel) != EOF) { strcpy (tudeng_massiiv[i].eesnimi, tudeng->eesnimi); strcpy (tudeng_massiiv[i].perenimi, tudeng->perenimi); tudeng_massiiv[i].matrikkel = tudeng->matrikkel; i++; counter++; } for (i = 0; i < counter; i++) { printf ("%s, %s, %d\n", tudeng_massiiv[i].eesnimi, tudeng_massiiv[i].perenimi, tudeng_massiiv[i].matrikkel); } printf (" \n"); return counter; } int ainedSisse (FILE *ained, Subject *aine, Subject *aine_massiiv) { int i = 0; int counter = 0; while (fscanf (ained, "%s %s %d %d", aine->nimi, aine->kood, &aine->matrikkel, &aine->tulemus) != EOF) { strcpy (aine_massiiv[i].nimi, aine->nimi); strcpy (aine_massiiv[i].kood, aine->kood); aine_massiiv[i].matrikkel = aine->matrikkel; aine_massiiv[i].tulemus = aine->tulemus; i++; counter++; } for (i = 0; i < counter; i++) { printf ("%s, %s, %d, %d\n", aine_massiiv[i].nimi, aine_massiiv[i].kood, aine_massiiv[i].matrikkel, aine_massiiv[i].tulemus); } printf (" \n"); return counter; } void yhildus (Subject *aine_massiiv, Student *tudeng_massiiv, Pilet *pileti_liige, int counter_sub, int counter_stud) { int i; int j; int k = 0; int counter = 0; for (i = 0; i < counter_sub; i++) { for (j = 0; j < counter_stud; j++) { if (aine_massiiv[i].matrikkel == tudeng_massiiv[j].matrikkel) { strcpy (pileti_liige[k].aineNimi, aine_massiiv[i].nimi); strcpy (pileti_liige[k].perenimi, tudeng_massiiv[j].perenimi); strcpy (pileti_liige[k].eesnimi, tudeng_massiiv[j].eesnimi); pileti_liige[k].matrikkel = tudeng_massiiv[j].matrikkel; pileti_liige[k].tulemus = aine_massiiv[i].tulemus; k++; counter++; } } } for (i = 0; i < counter; i++) { printf ("%s, %s, %s, %d, %d\n", pileti_liige[i].aineNimi, pileti_liige[i].perenimi, pileti_liige[i].eesnimi, pileti_liige[i].matrikkel, pileti_liige[i].tulemus); } printf (" \n"); return; } int sortimine (Pilet *pileti_liige, int counter_sub) { Pilet temp; int i, j; int ainete_hulk = 0; for (i = 0; i < counter_sub; i++) { for (j = 0; j < counter_sub; j++) { if (strcmp (pileti_liige[j-1].aineNimi, pileti_liige[j].aineNimi) == 0) { if (strcmp (pileti_liige[j-1].perenimi, pileti_liige[j].perenimi) > 0) { temp = pileti_liige[j-1]; pileti_liige[j-1] = pileti_liige[j]; pileti_liige[j] = temp; } } } } for (i = 0; i < counter_sub; i++) { if (strcmp (pileti_liige[i-1].aineNimi, pileti_liige[i].aineNimi) != 0) { ainete_hulk++; } } for (i = 0; i < counter_sub; i++) { printf ("%s, %s, %s, %d, %d\n", pileti_liige[i].aineNimi, pileti_liige[i].perenimi, pileti_liige[i].eesnimi, pileti_liige[i].matrikkel, pileti_liige[i].tulemus); } printf (" \n"); return ainete_hulk; } void eksamileht (Pilet *pileti_liige, int counter_sub, int ainete_hulk) { int i; int j = 0; Pilet ainete_loend[ainete_hulk]; FILE *output; for (i = 0; i < counter_sub; i++) { if (strcmp (pileti_liige[i-1].aineNimi, pileti_liige[i].aineNimi) != 0) { strcpy (ainete_loend[j].aineNimi, pileti_liige[i].aineNimi); j++; } } for (i = 0; i < ainete_hulk; i++) { output = fopen (ainete_loend[i].aineNimi, "r"); if (output) { printf ("Avati fail %s\n", ainete_loend[i].aineNimi); fclose (output); } else { output = fopen (ainete_loend[i].aineNimi, "w"); fprintf (output, "%s\n Perenimi Eesnimi Matrikkel Tulemus\n", ainete_loend[i].aineNimi); printf ("Loodi fail %s\n", ainete_loend[i].aineNimi); fclose (output); } } for (i = 0; i < ainete_hulk; i++) { output = fopen (ainete_loend[i].aineNimi, "a"); for (j = 0; j < counter_sub; j++) { if (strcmp (ainete_loend[i].aineNimi, pileti_liige[j].aineNimi) == 0) { fprintf (output, "%s %s %d %d\n", pileti_liige[j].perenimi, pileti_liige[j].eesnimi, pileti_liige[j].matrikkel, pileti_liige[j].tulemus); printf ("Faili nimega %s prinditi: %s %s %d %d\n", pileti_liige[j].aineNimi, pileti_liige[j].perenimi, pileti_liige[j].eesnimi, pileti_liige[j].matrikkel, pileti_liige[j].tulemus); } } fclose (output); } return; }