/*
 *        File: sol-m7u4es2.c
 *
 *        Data: 04/10/2016
 *
 * Descrizione: Progetta un programma di gestione delle schedine del Totocalcio
 *              che, partendo da un array di dimensione prefissata che contiene
 *              in ogni cella il codice della giocata, la data della giocata e
 *              la colonna con i tredici segni, effettui la copia in un altro
 *              vettore solo delle giocate relative all'anno e al mese richiesto
 *              dall'utente.
 */


#include <stdio.h>
#include <string.h>

#define MAX_TABELLA 4

struct data {
    int giorno;
    int mese;
    int anno;
};

struct schedina {
    int cod_giocata;
    struct data data_giocata;
    char colonna[14]; // Stringa contenente i tredici segni piu' \0
};

int inizializza_tabella(struct schedina vett[]) {
    // Inserisce quattro giocate di prova.
    // Restituisce il numero di giocate inserite nel vettore.
    
    vett[0].cod_giocata = 100;
    vett[0].data_giocata.giorno = 12;
    vett[0].data_giocata.mese = 5;
    vett[0].data_giocata.anno = 2005;
    strcpy(vett[0].colonna, "1XX22X1X11XX2");

    vett[1].cod_giocata = 200;
    vett[1].data_giocata.giorno = 19;
    vett[1].data_giocata.mese = 11;
    vett[1].data_giocata.anno = 2005;
    strcpy(vett[1].colonna, "XX21XX1X2XX12");

    vett[2].cod_giocata = 250;
    vett[2].data_giocata.giorno = 24;
    vett[2].data_giocata.mese = 11;
    vett[2].data_giocata.anno = 2005;
    strcpy(vett[2].colonna, "11X12XX1XX112");

    vett[3].cod_giocata = 300;
    vett[3].data_giocata.giorno = 21;
    vett[3].data_giocata.mese = 2;
    vett[3].data_giocata.anno = 2006;
    strcpy(vett[3].colonna, "21XX1X12XX1X1");

    return 4;
}

void stampa(struct schedina vett[], int dim) {
    
    printf("Codice Data Colonna\n");
    printf("---------------------------------\n");

    for (int i = 0; i < dim; i++)
        printf("%6d %02d/%02d/%04d %13s\n",
            vett[i].cod_giocata,
            vett[i].data_giocata.giorno,
            vett[i].data_giocata.mese,
            vett[i].data_giocata.anno,
            vett[i].colonna);
}

int copia_selettiva(struct schedina dvett[], struct schedina svett[], int dim_s,
                     int ric_mese, int ric_anno) {

    // Copia in dvett i soli elementi di svett che hanno mese e anno di giocata
    // uguali ai parametri di ricerca.
    // Restituisce il numero di elementi copiati.
    
    int i_d = 0;
    
    for(int i_s = 0; i_s < dim_s; i_s++)
        if (svett[i_s].data_giocata.mese == ric_mese && svett[i_s].data_giocata.anno == ric_anno)
            dvett[i_d++] = svett[i_s];
    
    return i_d;
}

int main( void ) {

    struct schedina tabella1[MAX_TABELLA], tabella2[MAX_TABELLA];
    int dim_tabella1, dim_tabella2;

    int mese, anno;
    
    // Inizializzazione statica della prima tabella
    dim_tabella1 = inizializza_tabella(tabella1);
    
    printf("Inserire il mese e l'anno da ricercare: ");
    // Per semplicita' si omette il controllo di validita'
    scanf("%d%d", &mese, &anno);
    
    dim_tabella2 = copia_selettiva(tabella2, tabella1, dim_tabella1, mese, anno);
    
    printf("\nContenuto della prima tabella:\n\n");
    stampa(tabella1, dim_tabella1);
    
    printf("\n\nContenuto della seconda tabella:\n\n");
    stampa(tabella2, dim_tabella2);

    return 0;
}