| 
                 
                
                
                 
                
		 
	
		| Precedente :: Successivo   | 
	 
	
	
		| Autore | 
		Messaggio | 
	 
	
		cristinabalestra Comune mortale
  
 
  Registrato: 01/07/20 01:38 Messaggi: 1
 
  | 
		
			
				 Inviato: 01 Lug 2020 01:56    Oggetto: Problemi con modularizzazione programma e lettura file | 
				     | 
			 
			
				
  | 
			 
			
				Salve, ho realizzato un codice sulla gestione dei cantieri solo che ho problemi con due funzioni (void vis_dipendenti_cantieri e void visualizza_cantiere_per_tipologia) in quanto non riesce a leggere i file e non sto riuscendo a capirne il motivo. Inoltre stavo cercando di rendere il programma modulare ma in alcune parti sto avendo difficoltà (le ho messe a commento queste parti). Mi potreste gentilmente aiutare? Vorrei capire dove sto sbagliando.
 
Vi allego il file di seguito:
 
(link rimosso).
 
 
Questo è il codice:
 
 	  | Codice: | 	 		  #include <stdio.h>
 
#include <stdlib.h>
 
#include <string.h>
 
#include <stdbool.h>
 
 
#define DIM 25
 
#define MAX 200
 
#define MIN 20
 
 
/*struttura per l'elaborazione delle date*/
 
typedef struct s_data{
 
    int giorno;
 
    int mese;
 
    int anno;
 
}s_data;
 
 
/*struttura per l'elaborazione degli indirizzi*/
 
typedef struct s_indirizzo{
 
    char citta[DIM];
 
    char via[DIM];
 
    int civico;
 
}s_indirizzo;
 
 
/*struttura per l'elaborazione dei codici dei cantieri*/
 
typedef struct s_assegnazione{
 
    char codice_dipendente[18];
 
    char codice_cantiere [3];
 
}s_assegnazione;
 
 
/*struttura per l'elaborazione dei dipendenti*/
 
typedef struct s_dipendente {
 
    char codice_fiscale[18];
 
    char cognome[DIM];
 
    char nome[DIM];
 
    char data_nascita[11];
 
    char luogo_nascita[DIM];
 
    char genere[DIM];
 
    int anni_esperienza;
 
    char ruolo[DIM];
 
   // struct s_dipendente *nextPtr;
 
}s_dipendente;
 
 
/*struttura per l'elaborazione dei cantieri*/
 
typedef struct s_cantiere {
 
    char codice[3];
 
    struct s_indirizzo indirizzo;
 
    int n_piani;
 
    int m_altezza;
 
    int mq_ampiezza;
 
    char orientamento[2];
 
    struct s_data data_inizio;
 
    char data_fine[11];
 
    char tipologia[DIM];
 
    char stato[DIM];
 
}s_cantiere;//variabile di appoggio per le operazioni su file cantieri
 
 
/*void gestioneDipendenti();
 
void gestioneCantieri();
 
void gestioneAssegnazioni();
 
*/
 
 
/*funzioni da utilizzare*/
 
char* scegliRuolo();
 
char* ricercaSuFile(char *, char *);
 
 
void visualizza_dipendente_citta();
 
s_dipendente stampaDipendente(s_dipendente);
 
s_dipendente ottieniDipendente(char *);
 
s_dipendente ottieniModificaDipendenteDaUtente(s_dipendente);
 
s_dipendente ottieniDipendenteDaUtente(char *);
 
 
 
void salvaSuFile(char *, char *);
 
 
s_cantiere stampaCantiere(s_cantiere);
 
s_cantiere ottieniCantiere(char *);
 
bool giaPresente(s_assegnazione);
 
char* scegliStatoCantiere();
 
s_assegnazione ottieniAssegnazione(char *);
 
 
//s_assegnazione ottieniCantiere(char *);
 
 
 
void registrazione_dip ();
 
void modifica_dati_dip ();
 
void rimozione_dip ();
 
void gestione_assegnazioni();
 
void registrazione_assegnazione(s_assegnazione);
 
bool rimozione_assegnazione(s_assegnazione);
 
void modifica_stato_cant();
 
void visualizza_dipendente_citta();
 
void vis_dipendenti_cantieri();
 
void visualizza_dipendenti_per_ruolo();
 
void visualizza_cantiere_per_tipologia();
 
 
void stampa_dipendenti_richiesti_citta(char *);
 
void stampa_costruzioni_richieste(char *);
 
void stampa_dipendenti_richiesti(char *);
 
 
int data_valida(int, int, int);
 
bool bisestile(int);
 
 
int main ()
 
{
 
    /*definizione variabili*/
 
    int scelta;
 
 
    /*possibili scelte*/
 
    do {
 
 
        printf ("\n\n");
 
        printf ("\t\t\t\t GESTIONE CANTIERI");
 
        printf ("\n\n   1. Registrazione nuovo dipendente");
 
        printf ("\n   2. Modifica di dati di un dipendente (non e' possibile modificare il codice fiscale)");
 
        printf ("\n   3. Rimozione di un dipendente");
 
        printf ("\n   4. Assegnazione/spostamento/rimozione di un dipendente da un cantiere");
 
        printf ("\n   5. Modifica di stato di un cantiere");
 
        printf ("\n   6. Visualizzazione di dipendenti che lavorano in un cantiere di una specifica citta'");
 
        printf ("\n   7. Ricerca di un dipendente e dei cantieri in cui lavora ordinati per la data di inizio lavori");
 
        printf ("\n   8. Visualizzazione di dipendenti con uno specifico ruolo");
 
        printf ("\n   9. Visualizzazione di cantieri di una specifica tipologia");
 
        printf ("\n   0. Fine");
 
        printf ("\n\n   Scegliere una opzione: ");
 
 
        scanf("%d", &scelta);
 
        printf("\n\n");
 
 
        switch(scelta) {
 
            case 0:
 
                return 0;
 
            case 1:
 
                registrazione_dip();
 
                break;
 
            case 2:
 
                modifica_dati_dip();
 
                break;
 
            case 3:
 
                rimozione_dip();
 
                break;
 
            case 4:
 
                gestione_assegnazioni();
 
                break;
 
            case 5:
 
                modifica_stato_cant();
 
                break;
 
            case 6:
 
                visualizza_dipendente_citta();
 
                break;
 
            case 7:
 
              vis_dipendenti_cantieri ();
 
               break;
 
            case 8:
 
                visualizza_dipendenti_per_ruolo();
 
                break;
 
            case 9:
 
                visualizza_cantiere_per_tipologia();
 
                break;
 
            default:
 
                printf ("\n   E' stato inserito un valore non valido!");
 
                break;
 
            }
 
        } while (scelta!=0);
 
 
        /*printf ("\n\n");
 
        printf ("\t\t\t\t GESTIONE EDILIZIA");
 
        printf ("\n\n   1. Gestione dipendenti");
 
        printf ("\n   2. Gestione cantieri");
 
        printf ("\n   3. Gestione assegnazioni");
 
 
        printf ("\n   0. Fine");
 
        printf ("\n\n   Scegliere una opzione: ");
 
 
        scanf("%d", &scelta);
 
        printf("\n\n");
 
 
        switch(scelta) {
 
            case 0:
 
                return 0;
 
            case 1:
 
                registrazione_dip();
 
                break;
 
            case 2:
 
                modifica_dati_dip();
 
                break;
 
            case 3:
 
                rimozione_dip();
 
                break;
 
            case 4:
 
                gestione_assegnazioni();
 
                break;
 
            case 5:
 
                modifica_stato_cant();
 
                break;
 
            case 6:
 
                visualizza_dipendente_citta();
 
                break;
 
            //case 7:
 
            //    vis_dipendenti_cantieri (arr_dipendenti, arr_cantieri, MAX, MIN);
 
            //    break;
 
            case 8:
 
                visualizza_dipendenti_per_ruolo();
 
                break;
 
            case 9:
 
                visualizza_cantiere_per_tipologia();
 
                break;
 
            default:
 
                printf ("\n   E' stato inserito un valore non valido!");
 
                break;
 
            }
 
        } while (scelta!=0);
 
 
*/
 
 
}
 
 
//funzione per la registrazione di nuovi dipendenti
 
void registrazione_dip ()
 
{
 
    char riga[100];
 
    s_dipendente dipendente;
 
 
    printf("\t\t\t REGISTRAZIONE DIPENDENTE\t\t\t\n");
 
    printf("\n   Codice fiscale:\t\t\t");
 
    scanf("%s",dipendente.codice_fiscale);
 
    //verifico se è già presente
 
    strcpy(riga,ricercaSuFile("employees.csv",dipendente.codice_fiscale));
 
    if (strcmp(riga,"non trovato")!=0){
 
        printf("\nIl dipendente e' gia' presente:\n");
 
        dipendente = ottieniDipendente(riga);
 
        stampaDipendente(dipendente);
 
    }
 
    else{
 
        dipendente = ottieniDipendenteDaUtente(dipendente.codice_fiscale);
 
        char salvataggio[100];
 
        sprintf(salvataggio, "%s,%s,%s,%s,%s,%s,%d,%s\n", dipendente.codice_fiscale,dipendente.cognome, dipendente.nome, dipendente.data_nascita, dipendente.luogo_nascita, dipendente.genere, dipendente.anni_esperienza, dipendente.ruolo);
 
 
        salvaSuFile("employees.csv",salvataggio);
 
        printf("\n\n   Salvataggio effettuato con successo!!!\n");
 
    }
 
}
 
 
void modifica_dati_dip ()
 
{
 
    bool trovato;
 
    FILE *sorgenteed;
 
    char modificare[3];
 
    char codi_fiscale[18];
 
 
    if ((sorgenteed = fopen("employees.csv","r")) == NULL){
 
        printf("\nImpossibile aprire il file!");
 
    }
 
    else{
 
        printf("\t\t\tMODIFICA DATI DIPENDENTE\t\t\t\n");
 
        printf("\n Codice fiscale:\t\t\t");
 
        scanf("%s",codi_fiscale);
 
        trovato = false;
 
 
        while(!feof(sorgenteed)){
 
            char aaa[100];
 
            char riga[100];
 
            fscanf(sorgenteed,"%s", aaa);
 
            if(strlen(aaa)>20){
 
 
                strcpy(riga,aaa);
 
                s_dipendente dipendente = ottieniDipendente(aaa);
 
 
                if (strcmp(dipendente.codice_fiscale,codi_fiscale)!=0){
 
                    char salvataggio[100];
 
                    sprintf(salvataggio, "%s,%s,%s,%s,%s,%s,%d,%s\n", dipendente.codice_fiscale,dipendente.cognome, dipendente.nome, dipendente.data_nascita, dipendente.luogo_nascita, dipendente.genere, dipendente.anni_esperienza, dipendente.ruolo);
 
                    salvaSuFile("appoggio.csv", salvataggio);
 
                }
 
                else{
 
                    trovato=true;
 
                    printf("\n\nIl dipendente che si intende modificare e': \n");
 
 
                    stampaDipendente(dipendente);
 
                    printf("\nConfermare la modifica(SI/NO): ");
 
                    scanf("%s", modificare);
 
                    if(strcmp(modificare,"SI")==0 || strcmp(modificare,"si")==0 || strcmp(modificare,"Si")==0 && strcmp(modificare,"sI")==0){
 
 
                        char salvataggio[100];
 
                        s_dipendente dipendente2 = ottieniModificaDipendenteDaUtente(dipendente);
 
                        sprintf(salvataggio, "%s,%s,%s,%s,%s,%s,%d,%s\n", dipendente2.codice_fiscale,dipendente2.cognome, dipendente2.nome, dipendente2.data_nascita, dipendente2.luogo_nascita, dipendente2.genere, dipendente2.anni_esperienza, dipendente2.ruolo);
 
                        salvaSuFile("appoggio.csv",salvataggio);
 
                        printf("\n\n   Modifica effettuata con successo!!!\n");
 
                    }
 
                    else{
 
                        char salvataggio[100];
 
                        sprintf(salvataggio, "%s,%s,%s,%s,%s,%s,%d,%s\n", dipendente.codice_fiscale,dipendente.cognome, dipendente.nome, dipendente.data_nascita, dipendente.luogo_nascita, dipendente.genere, dipendente.anni_esperienza, dipendente.ruolo);
 
                        salvaSuFile("appoggio.csv", salvataggio);
 
                    }
 
                }
 
            }
 
        }
 
    }
 
    fclose(sorgenteed);
 
    remove("employees.csv");
 
    rename("appoggio.csv", "employees.csv");
 
    if (trovato==false){
 
        printf("\nNon e' stato trovato nessun dipendente con questo codice fiscale!!");
 
    }
 
}
 
 
void rimozione_dip ()
 
{
 
    bool trovato;
 
    FILE *sorgenteed;
 
    char cancellare[3];
 
    char codi_fiscale [18];
 
 
    if ((sorgenteed = fopen("employees.csv", "r")) == NULL){
 
        printf ("\nImpossibile aprire il file!");
 
    }
 
    else{
 
        printf("\t\t\t RIMOZIONE DIPENDENTE\t\t\t\n");
 
        printf("\n   Codice fiscale:\t\t\t");
 
        scanf("%s",codi_fiscale);
 
        trovato = false;
 
        while(!feof(sorgenteed)){
 
            char aaa[100];
 
            char riga[100];
 
            fscanf(sorgenteed,"%s",aaa);
 
 
            if(strlen(aaa)>20){
 
 
                strcpy(riga,aaa);
 
 
                s_dipendente dipendente = ottieniDipendente(aaa);
 
 
                if(strcmp(dipendente.codice_fiscale,codi_fiscale )!=0){
 
                    char salvataggio[100];
 
                    sprintf(salvataggio, "%s,%s,%s,%s,%s,%s,%d,%s\n", dipendente.codice_fiscale,dipendente.cognome, dipendente.nome, dipendente.data_nascita, dipendente.luogo_nascita, dipendente.genere, dipendente.anni_esperienza, dipendente.ruolo);
 
                    salvaSuFile("appoggio.csv",salvataggio);
 
                }
 
                else{
 
                    trovato=true;
 
                    printf("Il dipendente che si intende rimuovere e': \n");
 
                    stampaDipendente(dipendente);
 
 
                    printf("\nConfermare la cancellazione(SI/NO):");
 
                    scanf("%s", cancellare);
 
                    if(strcmp(cancellare,"SI")!=0 && strcmp(cancellare,"si")!=0 && strcmp(cancellare,"Si")!=0 && strcmp(cancellare,"sI")!=0){
 
                        char salvataggio[100];
 
                        sprintf(salvataggio, "%s,%s,%s,%s,%s,%s,%d,%s\n", dipendente.codice_fiscale,dipendente.cognome, dipendente.nome, dipendente.data_nascita, dipendente.luogo_nascita, dipendente.genere, dipendente.anni_esperienza, dipendente.ruolo);
 
                        salvaSuFile("appoggio.csv",salvataggio);
 
                    }
 
                    else{
 
                        printf("Eliminazione effettuata con successo");
 
                    }
 
                }
 
            }
 
        }
 
    }
 
    fclose(sorgenteed);
 
    remove("employees.csv");
 
    rename("appoggio.csv", "employees.csv");
 
 
    if (trovato==false){
 
        printf("\nNon e' stato trovato nessun dipendente con questo codice fiscale!!");
 
    }
 
}
 
 
void gestione_assegnazioni (){
 
    int scelta;
 
    bool rimosso;
 
    s_assegnazione assegnazione;
 
 
    do {
 
        printf ("\n\n");
 
        printf ("\t\t\t\t GESTIONE ASSEGNAZIONI");
 
        printf ("\n\n   1. Assegnare un dipendente ad un cantiere");
 
        printf ("\n   2. Spostare un dipendente da uno ad un altro cantiere");
 
        printf ("\n   3. Rimuovere un dipendente da un cantiere");
 
        printf ("\n   4. Fine");
 
        printf ("\n\n   Scegliere una opzione: ");
 
 
        scanf("%d", &scelta);
 
        printf("\n\n");
 
        printf("\n   Inserire il codice fiscale del dipendente:\t\t\t");
 
        scanf("%s",assegnazione.codice_dipendente);
 
 
 
        switch(scelta) {
 
            case 1:
 
                registrazione_assegnazione(assegnazione);
 
                break;
 
            case 2:
 
                rimosso =  rimozione_assegnazione(assegnazione);
 
                if(rimosso == true){
 
                    registrazione_assegnazione(assegnazione);
 
                } else{
 
                    printf("\nNon e' stata trovata l'associazione a questo cantiere.");
 
                }
 
                break;
 
            case 3:
 
                rimozione_assegnazione(assegnazione);
 
                break;
 
            case 4:
 
                break;
 
            default:
 
                printf ("\n   E' stato inserito un valore non valido!");
 
                break;
 
            }
 
        } while (scelta<1 && scelta>4);
 
}
 
 
void registrazione_assegnazione(s_assegnazione assegnazione){
 
    char riga[100];
 
 
    printf("\n   Inserire il codice del cantiere a cui assegnarlo:\t\t\t");
 
    scanf("%s",assegnazione.codice_cantiere);
 
 
    if (giaPresente(assegnazione)){
 
        printf("\n  Il dipendente %s e' stato gia' associato al cantiere %s", assegnazione.codice_dipendente, assegnazione.codice_cantiere);
 
    }
 
    else{
 
        strcpy(riga,ricercaSuFile("constructions.csv",assegnazione.codice_cantiere));
 
        s_cantiere cantiere = ottieniCantiere(riga);
 
        stampaCantiere(cantiere);
 
        if(strcmp(cantiere.stato,"SOSPESO")==0 || strcmp(cantiere.stato,"CONCLUSO")==0){
 
            printf("\n\nNon e' possibile effettuare assegnazioni a questo cantiere perche' e' %s.",cantiere.stato);
 
        }
 
        else{
 
                //chiedere conferma se si andare avanti, altrimenti arriva alla fine
 
            strcpy(riga,ricercaSuFile("employees.csv", assegnazione.codice_dipendente));
 
 
 
            s_dipendente dipendente = ottieniDipendente(riga);
 
 
            if(strcmp(dipendente.ruolo,"CAPOCANTIERE")!=0 || strcmp(dipendente.ruolo,"CAPOCANTIERE")==0 && strcmp(ricercaSuFile("assegnazioni.csv",assegnazione.codice_dipendente),"non trovato")==0){
 
                    char salvataggio[100];
 
                    sprintf(salvataggio, "%s,%s\n",assegnazione.codice_dipendente, assegnazione.codice_cantiere);
 
                    salvaSuFile("assegnazioni.csv",salvataggio);
 
                    printf("\nAssegnazione effettuata con successo");
 
            }
 
            else{
 
                printf("Non e' possibile assegnare il dipendente %s %s al cantiere %s.",dipendente.cognome, dipendente.nome, cantiere.codice);
 
            }
 
        }
 
    }
 
}
 
 
bool rimozione_assegnazione(s_assegnazione assegnazione){
 
    char riga[100];
 
    bool trovato = false;
 
    FILE * sorgenteea;
 
    printf("\n   Inserire il codice del cantiere da cui rimuovere:\t\t\t");
 
    scanf("%s",assegnazione.codice_cantiere);
 
 
    if ((sorgenteea = fopen("assegnazioni.csv", "r")) == NULL){
 
        printf ("\nImpossibile aprire il file!");
 
    }
 
    else{
 
        while(!feof(sorgenteea)){
 
            char aaa[100];
 
            char riga[100];
 
            fscanf(sorgenteea,"%s",aaa);
 
            printf("\n%s",aaa);
 
            printf("%d",strlen(aaa));
 
            if(strlen(aaa)>4){
 
                strcpy(riga,aaa);
 
                s_assegnazione assegnazione2 = ottieniAssegnazione(aaa);
 
                printf("\n1%s",assegnazione2.codice_dipendente);
 
                printf("\n2%s",assegnazione.codice_dipendente);
 
 
 
                if(strcmp(assegnazione.codice_dipendente,assegnazione2.codice_dipendente)==0 && strcmp(assegnazione.codice_cantiere,assegnazione2.codice_cantiere)==0 ){
 
                    trovato=true;
 
                }
 
                else{
 
                    char salvataggio[100];
 
                    sprintf(salvataggio, "%s,%s\n",assegnazione2.codice_dipendente, assegnazione2.codice_cantiere);
 
                    printf("\nsalvataggio = %s",salvataggio);
 
                    salvaSuFile("appoggio.csv",salvataggio);
 
                }
 
            }
 
        }
 
    }
 
    fclose(sorgenteea);
 
    remove("assegnazioni.csv");
 
    rename("appoggio.csv", "assegnazioni.csv");
 
    return(trovato);
 
 
}
 
 
void modifica_stato_cant ()
 
{
 
    bool trovato;
 
    FILE *sorgenteec;
 
    char modificare[3];
 
    char codice_cantiere[18];
 
 
    if ((sorgenteec = fopen("constructions.csv", "r+")) == NULL){
 
        printf ("\nImpossibile aprire il file!");
 
    }
 
    else{
 
        printf("\t\t\t MODIFICA STATO CANTIERE\t\t\t\n");
 
        printf("\n   Inserire il codice codice del cantiere interessato:\t\t\t");
 
        scanf("%s",codice_cantiere);
 
 
        trovato = false;
 
 
        while(!feof(sorgenteec)){
 
 
            char aaa[100];
 
            char riga[100];
 
            fscanf(sorgenteec,"%s",aaa);
 
            if(strlen(aaa)>20){
 
                strcpy(riga,aaa);
 
                s_cantiere cantiere = ottieniCantiere(aaa);
 
 
                if (strcmp(cantiere.codice,codice_cantiere)!=0){
 
                    char salvataggio[100];
 
 
                    sprintf(salvataggio, "%s,%s,%s,%d,%d,%d,%d,%s,%d/%d/%d,%s,%s,%s\n",cantiere.codice, cantiere.indirizzo.citta, cantiere.indirizzo.via, cantiere.indirizzo.civico, cantiere.n_piani, cantiere.m_altezza, cantiere.mq_ampiezza, cantiere.orientamento, cantiere.data_inizio.giorno,cantiere.data_inizio.mese, cantiere.data_inizio.anno, cantiere.data_fine,cantiere.tipologia, cantiere.stato);
 
 
                    salvaSuFile("appoggio.csv",salvataggio);
 
                }
 
                else{
 
                    trovato = true;
 
                    stampaCantiere(cantiere);
 
                    strcpy(cantiere.stato,scegliStatoCantiere());
 
                    char salvataggio[100];
 
                    sprintf(salvataggio, "%s,%s,%s,%d,%d,%d,%d,%s,%d/%d/%d,%s,%s,%s\n",cantiere.codice, cantiere.indirizzo.citta, cantiere.indirizzo.via,cantiere.indirizzo.civico, cantiere.n_piani, cantiere.m_altezza, cantiere.mq_ampiezza, cantiere.orientamento, cantiere.data_inizio.giorno,cantiere.data_inizio.mese, cantiere.data_inizio.anno, cantiere.data_fine,cantiere.tipologia, cantiere.stato);
 
                    salvaSuFile("appoggio.csv",salvataggio);
 
                    printf("\n\n    Aggiornamento effettuato con successo!!!\n");
 
                }
 
            }
 
 
        }
 
    }
 
    fclose(sorgenteec);
 
 
    remove("constructions.csv");
 
    rename("appoggio.csv","constructions.csv");
 
    if (trovato == false){
 
        printf("\nNon e' stato trovato nessun cantiere con questo codice!!!");
 
    }
 
}
 
 
void visualizza_dipendente_citta()
 
{
 
    bool trovato;
 
    FILE *sorgenteec;
 
    char citta[DIM];
 
 
    if((sorgenteec=fopen("constructions.csv", "r"))==NULL){
 
        printf("\nImpossibile aprire il file!");
 
    }
 
    else{
 
        printf("\t\t\tVISUALIZZAZIONE DI UN DIPENDENTE IN UNA SPECIFICA CITTA'\t\t\t\n");
 
        printf("\nCitta':\t\t\t");
 
        scanf("%s", citta);
 
        trovato=false;
 
 
        while(!feof(sorgenteec)){
 
            char ddd[100];
 
            fscanf(sorgenteec, "%s", ddd);
 
            if(strlen(ddd)>20){
 
 
                s_cantiere cantiere = ottieniCantiere(ddd);
 
 
                if(strcmp(cantiere.indirizzo.citta, citta)==0){
 
                    printf("\nCANTIERE: ");
 
                    stampaCantiere(cantiere);
 
                    trovato=true;
 
                    FILE *assegna;
 
                    if((assegna=fopen("assegnazioni.csv", "r"))==NULL){
 
                        printf("\nImpossibile aprire il file!");
 
                    }
 
                    else{
 
                        while(!feof(assegna)){
 
                            char bbb[100];
 
                            fscanf(assegna, "%s", bbb);
 
                            if(strlen(bbb)>6){
 
                                //s_assegnazione assegnazione = ottieniAssegnazione(bbb);
 
                                s_assegnazione assegnazione;
 
                                strcpy(assegnazione.codice_dipendente,strtok(bbb,","));
 
                                strcpy(assegnazione.codice_cantiere,strtok(NULL,","));
 
                                if(strcmp(assegnazione.codice_cantiere, cantiere.codice)==0){
 
                                    FILE *sorgenteed;
 
                                    if((sorgenteed=fopen("employees.csv", "r"))==NULL){
 
                                        printf("\nImpossibile aprire il file!");
 
                                    }
 
                                    else{
 
                                        while(!feof(sorgenteed)){
 
                                            char ccc[100];
 
                                            fscanf(sorgenteed, "%s", ccc);
 
                                            if(strlen(ccc)>20){
 
                                                s_dipendente dipendente = ottieniDipendente(ccc);
 
 
                                                if(strcmp(dipendente.codice_fiscale, assegnazione.codice_dipendente)==0){
 
                                                    stampaDipendente(dipendente);
 
                                                }
 
                                            }
 
                                        }
 
                                        fclose(sorgenteed);
 
                                    }
 
                                }
 
                            }
 
                        }
 
                        fclose(assegna);
 
                    }
 
                }
 
            }
 
        }
 
    }
 
    if(trovato==false){
 
        printf("\nNon e' stato trovato nessun dipendente.");
 
    }
 
    fclose(sorgenteec);
 
}
 
 
void stampa_dipendenti_richiesti_citta(char *cit)
 
{
 
    FILE *sorgentec;
 
    FILE *assegna;
 
    FILE *sorgenteed;
 
    s_cantiere cantiere;
 
    s_assegnazione assegnazione;
 
    s_dipendente dipendente;
 
 
 
    if ((sorgentec = fopen("constructions.csv", "r")) == NULL){
 
        printf ("\nImpossibile aprire il file!");
 
    }
 
    else{
 
        while(!feof(sorgentec)) {
 
 
            char aaa[200];
 
            char* datainizio;
 
            char* datafine;
 
            fscanf(sorgentec,"%s",aaa);
 
 
            strcpy(cantiere.codice,strtok(aaa,","));
 
            strcpy(cantiere.indirizzo.citta,strtok(NULL,","));
 
            strcpy(cantiere.indirizzo.via,strtok(NULL,","));
 
            cantiere.indirizzo.civico = atoi(strtok(NULL,","));
 
            cantiere.n_piani = atoi(strtok(NULL,","));
 
            cantiere.m_altezza = atoi(strtok(NULL,","));
 
            cantiere.mq_ampiezza = atoi(strtok(NULL,","));
 
            strcpy(cantiere.orientamento,strtok(NULL,","));
 
            datainizio = strtok(NULL,",");
 
            datafine = strtok(NULL,",");
 
            strcpy(cantiere.tipologia,strtok(NULL,","));
 
            strcpy(cantiere.stato,strtok(NULL,","));
 
 
            if(strcmp(cantiere.indirizzo.citta, cit)==0) {
 
                strcpy(cantiere.codice,strtok(aaa,","));
 
                printf("1%s\n\n ", cantiere.codice);
 
                if ((assegna = fopen("assegnazioni.csv", "r")) == NULL){
 
                    printf ("\nImpossibile aprire il file!");
 
                }
 
                else{
 
                printf("2%s\n\n ", cantiere.codice);
 
                     while(!feof(assegna)) {
 
                printf("3%s\n\n ", cantiere.codice);
 
                        char bbb[100];
 
                printf("4%s\n\n ", cantiere.codice);
 
                        fscanf(assegna,"%s",bbb);
 
 
                printf("5%s\n\n ", cantiere.codice);
 
                        strcpy(assegnazione.codice_dipendente,strtok(bbb,","));
 
                printf("6%s\n\n ", cantiere.codice);
 
                        strcpy(assegnazione.codice_cantiere,strtok(NULL,","));
 
                printf("7%s\n\n ", cantiere.codice);
 
 
                        printf("Codice %s\t\t\tCo %s\n", cantiere.codice, assegnazione.codice_cantiere);
 
                        if(strcmp(cantiere.codice, assegnazione.codice_cantiere )==0){
 
                            strcpy(assegnazione.codice_dipendente,strtok(bbb,","));
 
                            if ((sorgenteed = fopen("employees2.csv", "r")) == NULL){
 
                                printf ("\nImpossibile aprire il file!");
 
                            }
 
                            else{
 
 
                                while(!feof(sorgenteed)){
 
                                    char ccc[100];
 
                                    char* datanascita;
 
 
                                    fscanf(sorgenteed,"%s",ccc);
 
 
                                    strcpy(dipendente.codice_fiscale,strtok(aaa,","));
 
                                    strcpy(dipendente.cognome,strtok(NULL,","));
 
                                    strcpy(dipendente.nome,strtok(NULL,","));
 
                                    datanascita = strtok(NULL,",");
 
                                    strcpy(dipendente.luogo_nascita,strtok(NULL,","));
 
                                    strcpy(dipendente.genere,strtok(NULL, ","));
 
                                    dipendente.anni_esperienza = atoi(strtok(NULL,","));
 
                                    strcpy(dipendente.ruolo,strtok(NULL,","));
 
 
                                    if(strcmp(assegnazione.codice_dipendente, dipendente.codice_fiscale )==0){
 
                                        printf("\n",dipendente.codice_fiscale);
 
                                        printf("   CODICE FISCALE: %s ", dipendente.codice_fiscale);
 
                                        printf("\nCognome:\t%s, ", dipendente.cognome);
 
                                        printf("\t\tNome:\t%s, ", dipendente.nome);
 
                                        printf("\n\t\tdata di nascita: %s, ", datanascita);
 
                                        printf("\tLuogo nascita: %s, ", dipendente.luogo_nascita);
 
                                        printf("\n\t\tgenere: %s, ", dipendente.genere);
 
                                        printf("\t\tAnni di esperienza: %d, ", dipendente.anni_esperienza);
 
                                        printf("ruolo: %s, ", dipendente.ruolo);
 
                                    }//end if confronto codice dipendente e codice fiscale
 
                                }//chiusura while fino a quando non termina file dipendente
 
                                fclose(sorgenteed);
 
                            }//chiusura else se file dipendenti non è aperto
 
                        }//end if confronto codice cantiere e codice delle assegnazioni
 
                    }//chiusura while fino a quando non termina file assegnazione
 
                   fclose(assegna);
 
                }//chiusura else se file assegnazione  non è aperto
 
            }//chiusura confronto città cantiere con città inserita
 
        }//chiusura while fino a quando non termina file cantieri
 
        fclose(sorgentec);
 
    }//chiusura else se file cantieri non è aperto
 
}//chiusura funzione
 
 
void visualizza_dipendenti_per_ruolo ()
 
{
 
    printf("\t\t\t VISUALIZZAZIONE DIPENDENTI PER RUOLO\t\t\t\n");
 
    stampa_dipendenti_richiesti(scegliRuolo());
 
}
 
 
void stampa_dipendenti_richiesti(char *ruo)
 
{
 
    FILE *sorgenteed;
 
    s_dipendente dipendente;
 
 
    if ((sorgenteed = fopen("employees2.csv", "r")) == NULL){
 
        printf ("\nImpossibile aprire il file!");
 
    }
 
    else{
 
        while(!feof(sorgenteed)) {
 
            char aaa[100];
 
            char* datanascita;
 
 
            fscanf(sorgenteed,"%s",aaa);
 
            strcpy(dipendente.codice_fiscale,strtok(aaa,","));
 
            strcpy(dipendente.cognome,strtok(NULL,","));
 
            strcpy(dipendente.nome,strtok(NULL,","));
 
            datanascita = strtok(NULL,",");
 
            strcpy(dipendente.luogo_nascita,strtok(NULL,","));
 
            strcpy(dipendente.genere,strtok(NULL, ","));
 
            dipendente.anni_esperienza = atoi(strtok(NULL,","));
 
            strcpy(dipendente.ruolo,strtok(NULL,","));
 
 
            if(strcmp(dipendente.ruolo, ruo)==0) {
 
                printf("\n\n\n",dipendente.codice_fiscale);
 
                printf("   CODICE FISCALE: %s ", dipendente.codice_fiscale);
 
                printf("\n   Cognome:\t%s, ", dipendente.cognome);
 
                printf("\t\tNome:\t%s, ", dipendente.nome);
 
                printf("\n   data di nascita: %s, ", datanascita);
 
                printf("\n\t\tgenere: %c, ", dipendente.genere);
 
                printf("\n   anni di esperienza: %d, ", dipendente.anni_esperienza);
 
                printf("\t\tLuogo nascita: %s, ", dipendente.luogo_nascita);
 
            }
 
        }
 
        fclose(sorgenteed);
 
    }
 
}
 
 
void vis_dipendenti_cantieri (s_dipendente*a, s_cantiere*b, const int n, const int m)
 
// Ricercare un dipendente, mostrando i suoi dati e i cantieri in cui lavora ordinati per data inizio lavori
 
{
 
   FILE *sorgenteed;
 
   s_dipendente dipendente;
 
    char scelta[5];
 
    printf("Vuoi ricercare un dipendente mostrando i dati e i cantieri dove lavora?\n");
 
    printf("Si o No: ");
 
    scanf("%s", scelta);
 
    char ricerca[19];
 
    int min;
 
   s_cantiere temp;
 
   FILE *dip;
 
    int conteggio=0;
 
    int i;
 
    int s;
 
    int t;
 
 
    if ((dip = fopen("employees.csv", "r")) == NULL){
 
        printf ("\nImpossibile aprire il file!");
 
    }
 
    else{
 
        while((strcmp(scelta, "Si")==0)||(strcmp(scelta, "si")==0)||(strcmp(scelta, "SI")==0)) {
 
            printf("Inserisci ruolo da ricercare: ");
 
            scanf("%s", ricerca);
 
            for (i=0; i<n; i++) {
 
                while((conteggio<n)&& feof(dip)) { 
 
                    char linea1[100];
 
                    fscanf(dip, "%s", linea1);
 
                    a[conteggio].codice_fiscale;
 
                    a[conteggio].cognome;
 
                    a[conteggio].nome;
 
                    a[conteggio].data_nascita;
 
                    a[conteggio].luogo_nascita;
 
                    a[conteggio].genere;
 
                    a[conteggio].anni_esperienza;
 
                    a[conteggio].ruolo;
 
                                       
 
                    conteggio++;
 
                }
 
                FILE *cant;
 
                if((cant=fopen("constructions.csv", "r"))==NULL) {
 
                    printf("Impossibile aprire il file\n");
 
                }
 
                else {
 
                    for(s=0; s<m; s++) {
 
                        min=s;
 
                        for(t=s+1; t<m; t++) {
 
                            if(b[t].data_inizio.giorno < b[min].data_inizio.giorno && b[t].data_inizio.mese < b[min].data_inizio.mese && b[t].data_inizio.anno < b[min].data_inizio.anno) {
 
                                min=t;
 
                            }
 
                        }
 
                        temp=b[min];
 
                        b[min]=b[s];
 
                        b[s]=temp;
 
                        
 
                        printf("%d/", b[s].data_inizio.giorno);
 
                        printf("%d/", b[s].data_inizio.mese);
 
                        printf("%d ", b[s].data_inizio.anno);
 
                    }
 
                    for(s=0; s<m; s++) {
 
                        if(strcmp(a[i].ruolo, ricerca)==0) {
 
                                printf("%d/", b[s].data_inizio.giorno);
 
                                printf("%d/", b[s].data_inizio.mese);
 
                                printf("%d, ", b[s].data_inizio.anno);
 
                                printf("%s, ", a[i].codice_fiscale);
 
                                printf("%s, ", a[i].cognome);
 
                                printf("%s, ", a[i].nome);
 
                                printf("%s, ", a[i].data_nascita);
 
                                printf("%s, ", a[i].luogo_nascita);
 
                                printf("%s, ", a[i].genere);
 
                                printf("%d, ", a[i].anni_esperienza);
 
                                printf("%s, ", a[i].ruolo);
 
                            }
 
                        }
 
                    }
 
                    fclose(cant);
 
                }
 
}
 
            printf("Vuoi ricercare ancora?\n");
 
            printf("Si o No: ");
 
            scanf("%s", scelta);
 
        }
 
        fclose(dip);
 
    
 
}
 
 
 
void visualizza_cantiere_per_tipologia ()
 
{
 
        printf("\t\t\t VISUALIZZAZIONE CANTIERI PER TIPOLOGIA\t\t\t\n");
 
 
        printf("   Digitare la tipologia : \n\t\t1. CONDOMINIO,\n\t\t2. VILLA,\n\t\t3. UFFICIO,\n\t\t4. INDUSTRIALE,\n\t\t5. COMMERCIALE,\n\t\t6. AUTORIMESSA,\n\t\t7. PARCO,\n\t\t8. SCUOLA\n\n   ");
 
        int tipo;
 
        char scelta[15];
 
        do{
 
            scanf("%d", &tipo);
 
            switch(tipo){
 
            case 1:
 
                strcpy(scelta,"CONDOMINIO");
 
                break;
 
            case 2:
 
                strcpy(scelta,"VILLA");
 
                break;
 
            case 3:
 
                strcpy(scelta,"UFFICIO");
 
                break;
 
            case 4:
 
                strcpy(scelta,"INDUSTRIALE");
 
                break;
 
            case 5:
 
                strcpy(scelta,"COMMERCIALE");
 
                break;
 
            case 6:
 
                strcpy(scelta,"AUTORIMESSA");
 
                break;
 
            case 7:
 
                strcpy(scelta,"PARCO");
 
                break;
 
            case 8:
 
                strcpy(scelta,"SCUOLA");
 
                break;
 
            default:
 
                printf("\nHai inserito un valore non valido! Digitare nuovamente: ");
 
        }
 
    } while (tipo<1 || tipo>8);
 
    stampa_costruzioni_richieste(scelta);
 
}
 
 
void stampa_costruzioni_richieste(char *tip)
 
{
 
    FILE *sorgentec;
 
    s_cantiere cantiere;
 
 
    if ((sorgentec = fopen("constructions.csv", "r")) == NULL){
 
        printf ("\nImpossibile aprire il file!");
 
    }
 
    else{
 
        while(!feof(sorgentec)) {
 
            char aaa[100];
 
            char* datainizio;
 
            char* datafine;
 
            fscanf(sorgentec,"%s",aaa);
 
 
            strcpy(cantiere.codice,strtok(aaa,","));
 
            strcpy(cantiere.indirizzo.citta,strtok(NULL,","));
 
            strcpy(cantiere.indirizzo.via,strtok(NULL,","));
 
            cantiere.indirizzo.civico = atoi(strtok(NULL,","));
 
            cantiere.n_piani = atoi(strtok(NULL,","));
 
            cantiere.m_altezza = atoi(strtok(NULL,","));
 
            cantiere.mq_ampiezza = atoi(strtok(NULL,","));
 
            strcpy(cantiere.orientamento,strtok(NULL,","));
 
            datainizio = strtok(NULL,",");
 
            datafine = strtok(NULL,",");
 
            strcpy(cantiere.tipologia,strtok(NULL,","));
 
            strcpy(cantiere.stato,strtok(NULL,"\n"));
 
 
            if(strcmp(cantiere.tipologia, tip)==0) {
 
                printf("\n",cantiere.codice);
 
                printf("CODICE: %s ", cantiere.codice);
 
                printf("\t%s, ", cantiere.indirizzo.citta);
 
                printf("%s, ", cantiere.indirizzo.via);
 
                printf("n %d, ", cantiere.indirizzo.civico);
 
                printf("\n\t\tpiani: %d, ", cantiere.n_piani);
 
                printf("altezza: %d, ", cantiere.m_altezza);
 
                printf("mq: %d, ", cantiere.mq_ampiezza);
 
                printf("orientamento: %s, ", cantiere.orientamento);
 
                printf("\n\t\tdata inizio: %s, ", datainizio);
 
                printf("data fine: %s, ", datafine);
 
                printf("STATO: %s\n", cantiere.stato);
 
            }
 
        }
 
        fclose(sorgentec);
 
    }
 
}
 
 
bool bisestile(int a){
 
   if ( (a%4) == 0) return true;   //se l'anno è bisestile restituisce true
 
   else return false;               //altrimenti restituisce false
 
}
 
 
int data_valida(int g, int m, int a){
 
   if(a>1939 && a<2021){
 
        if(2020-a<18){
 
            return 4;
 
        }
 
        if(m>0 && m<13){
 
            if( g>0 && (((m==4 || m==6 || m==9 || m==11) && (g<31)) || (m==2 && bisestile(a)==false && g<29) || (m==2 && bisestile(a)==true && g<30) || ((m==1 || m==3 || m==5 || m==7 || m==8 || m==10 || m==12) && g<32))){
 
                return 0;
 
            } else return 1;
 
        } else return 2;
 
   } else return 3;
 
}
 
 
char* scegliStatoCantiere(){
 
    char * stato;
 
    int scelta;
 
    printf("\n\tInserire il nuovo stato: 1.PIANIFICATO,\n\t\t2.ATTIVO, \n\t\t3.SOSPESO, \n\t\t4.CONCLUSO\n\t");
 
    do{
 
        scanf("%d", &scelta);
 
        switch(scelta){
 
        case 1:
 
            stato = "PIANIFICATO";
 
            break;
 
        case 2:
 
            stato = "ATTIVO";
 
            break;
 
        case 3:
 
            stato = "SOSPESO";
 
            break;
 
        case 4:
 
            stato = "CONCLUSO";
 
            break;
 
        default:
 
            printf("\nHai inserito un valore non valido! Digitare nuovamente: ");
 
        }
 
    } while (scelta<1 || scelta>4);
 
    return(stato);
 
}
 
char* scegliRuolo(){
 
    int ruolo;
 
    char *scelta;
 
    printf("   Digitare il ruolo : \n\t\t1. CAPOCANTIERE\n\t\t2. CARPENTIERE\n\t\t3. MURATORE\n\t\t4. INTONACATORE\n\t\t5. IDRAULICO\n\t\t6. ELETTRICISTA\n\t\t7. PIASTRELLISTA\n\t\t8. IMBIANCHINO\n\n   ");
 
    do{
 
        scanf("%d", &ruolo);
 
        switch(ruolo){
 
        case 1:
 
            scelta = "CAPOCANTIERE";
 
            break;
 
        case 2:
 
            scelta = "CARPENTIERE";
 
            break;
 
        case 3:
 
            scelta = "MURATORE";
 
            break;
 
        case 4:
 
            scelta = "INTONACATORE";
 
            break;
 
        case 5:
 
            scelta = "IDRAULICO";
 
            break;
 
        case 6:
 
            scelta = "ELETTRICISTA";
 
            break;
 
        case 7:
 
            scelta = "PIASTRELLISTA";
 
            break;
 
        case 8:
 
            scelta = "IMBIANCHINO";
 
            break;
 
        default:
 
            printf("\nHai inserito un valore non valido! Digitare nuovamente: ");
 
        }
 
    } while (ruolo<1 || ruolo>8);
 
    printf("%s", scelta);
 
    return(scelta);
 
}
 
 
char* scegliGenere(){
 
    int genere;
 
    char *scelta;
 
    printf("   Digitare il genere : \n\t\t1. UOMO\n\t\t2. DONNA\n\n   ");
 
    do{
 
        scanf("%d", &genere);
 
        switch(genere){
 
        case 1:
 
            scelta = "UOMO";
 
            break;
 
        case 2:
 
            scelta = "DONNA";
 
            break;
 
        default:
 
            printf("\nHai inserito un valore non valido! Digitare nuovamente: ");
 
        }
 
    } while (genere<1 || genere>2);
 
    printf("%s", scelta);
 
    return(scelta);
 
}
 
 
char* ricercaSuFile(char * nomeFile, char * codice){
 
    FILE *file_ric;
 
    char *riga_dipendente;
 
    char codice2[20];
 
    riga_dipendente="non trovato";
 
    //strcpy(riga_dipendente,"non trovato");
 
    if ((file_ric = fopen(nomeFile, "r")) == NULL){
 
        printf ("\nImpossibile aprire il file!");
 
    }
 
    else{
 
        while(!feof(file_ric) && strcmp(riga_dipendente,"non trovato")==0) {
 
            char aaa[100];
 
            char riga[100];
 
            fscanf(file_ric,"%s",aaa);
 
            strcpy(riga,aaa);
 
            strcpy(codice2,strtok(aaa,","));
 
            if(strcmp(codice,codice2)==0){
 
                riga_dipendente=riga;
 
            }
 
        }
 
        close(file_ric);
 
    }
 
    return(riga_dipendente);
 
}
 
 
s_dipendente stampaDipendente(s_dipendente d){
 
    printf("   CODICE FISCALE: %s ", d.codice_fiscale);
 
    printf("\nCognome:\t%s, ", d.cognome);
 
    printf("\t\tNome:\t%s, ", d.nome);
 
    printf("\n\t\tdata di nascita: %s, ", d.data_nascita);
 
    printf("\tLuogo nascita: %s, ", d.luogo_nascita);
 
    printf("\n\t\tgenere: %s, ", d.genere);
 
    printf("\t\tAnni di esperienza: %d, ", d.anni_esperienza);
 
    printf("ruolo: %s, ", d.ruolo);
 
 
    return(d);
 
}
 
 
s_cantiere stampaCantiere(s_cantiere c){
 
    printf("    CODICE:\t%s ",c.codice);
 
    printf("\nTipologia:\t%s ",c.tipologia);
 
    printf("\nIndirizzo:\t%s %d ",c.indirizzo.via,c.indirizzo.civico);
 
    printf("\nData inizio:\t%d/%d/%d ",c.data_inizio.giorno, c.data_inizio.mese, c.data_inizio.anno);
 
 
    return(c);
 
}
 
 
s_cantiere ottieniCantiere(char * aaa){
 
    s_cantiere c;
 
    strcpy(c.codice,strtok(aaa,","));
 
    strcpy(c.indirizzo.citta,strtok(NULL,","));
 
    strcpy(c.indirizzo.via,strtok(NULL,","));
 
    c.indirizzo.civico = atoi(strtok(NULL,","));
 
    c.n_piani = atoi(strtok(NULL,","));
 
    c.m_altezza = atoi(strtok(NULL,","));
 
    c.mq_ampiezza = atoi(strtok(NULL,","));
 
    strcpy(c.orientamento,strtok(NULL,","));
 
    c.data_inizio.giorno = atoi(strtok(NULL,"/"));
 
    c.data_inizio.mese = atoi(strtok(NULL,"/"));
 
    c.data_inizio.anno = atoi(strtok(NULL,","));
 
    strcpy(c.data_fine,strtok(NULL,","));
 
    strcpy(c.tipologia,strtok(NULL,","));
 
    strcpy(c.stato,strtok(NULL,","));
 
 
    return(c);
 
}
 
s_dipendente ottieniDipendente(char * aaa){
 
    s_dipendente d;
 
    strcpy(d.codice_fiscale,strtok(aaa,","));
 
    strcpy(d.cognome,strtok(NULL,","));
 
    strcpy(d.nome,strtok(NULL,","));
 
    strcpy(d.data_nascita,strtok(NULL,","));
 
    strcpy(d.luogo_nascita,strtok(NULL,","));
 
    strcpy(d.genere,strtok(NULL, ","));
 
    d.anni_esperienza = atoi(strtok(NULL,","));
 
    strcpy(d.ruolo,strtok(NULL,","));
 
 
    return(d);
 
}
 
 
s_assegnazione ottieniAssegnazione(char * aaa){
 
    s_assegnazione a;
 
    strcpy(a.codice_dipendente,strtok(aaa,","));
 
    strcpy(a.codice_cantiere,strtok(NULL,","));
 
    return(a);
 
}
 
 
s_dipendente ottieniModificaDipendenteDaUtente(s_dipendente d){
 
    int decisione;
 
    do{
 
        printf("\n\tDigitare cio' che si intende modificare: \n\t\t1. Anni di esperienza,\n\t\t2. Ruolo,\n\t\t3. Indietro\n\n");
 
        scanf("%d", &decisione);
 
        switch(decisione){
 
        case 1:
 
            printf("\n   Inserire anni di esperienza: ");
 
            scanf("%d", &d.anni_esperienza);//e commerciale
 
            break;
 
        case 2:
 
            strcpy(d.ruolo, scegliRuolo());
 
            break;
 
        case 3:
 
            break;
 
        default:
 
            printf("Valore non valido!");
 
            break;
 
        }
 
    } while (decisione!=3);
 
 
    return d;
 
}
 
 
s_dipendente ottieniDipendenteDaUtente(char * codiceFiscale){
 
    s_dipendente d;
 
    s_data data_nascita;
 
    strcpy(d.codice_fiscale,codiceFiscale);
 
    int valida;
 
    printf("   Cognome:\t\t\t\t");
 
    scanf("%s",d.cognome);
 
    printf("   Nome:\t\t\t\t");
 
    scanf("%s",d.nome);
 
 
    printf("   Data di nascita (formato gg/mm/aaaa):\t\t");
 
    do{
 
        char sdata[10];
 
        scanf("%d/%d/%d", &data_nascita.giorno, &data_nascita.mese, &data_nascita.anno);
 
        valida=data_valida(data_nascita.giorno, data_nascita.mese, data_nascita.anno);
 
        printf("%d",valida);
 
        switch(valida){
 
            case 0:
 
                sprintf(sdata, "%d/%d/%d", data_nascita.giorno,data_nascita.mese,data_nascita.anno);
 
                strcpy(d.data_nascita,sdata);
 
                break;
 
            case 1: printf("   Hai inserito un giorno non valido. Reinserisci la data: ");
 
                break;
 
            case 2: printf("   Hai inserito un mese non valido. Reinserisci la data: ");
 
                break;
 
            case 3: printf("   Hai inserito un anno non valido. Reinserisci la data: ");
 
                break;
 
            case 4: printf("   Possibile che il lavoratore abbia %d anni? Inserisci la vera data: ", 2020 - data_nascita.anno );
 
                break;
 
        }
 
    } while(valida!=0);
 
 
    printf("   Luogo di nascita : ");
 
    scanf("%s",d.luogo_nascita);
 
 
    strcpy(d.genere,scegliGenere());
 
 
    printf("   Anni di esperienza: \t\t\t");
 
    scanf("%d", &d.anni_esperienza);
 
    strcpy(d.ruolo,scegliRuolo());
 
 
    return(d);
 
}
 
 
bool giaPresente(s_assegnazione a){
 
    FILE *file_ric;
 
    bool presente=false;
 
 
    if ((file_ric = fopen("assegnazioni.csv", "r")) == NULL){
 
        printf ("\nImpossibile aprire il file!");
 
    }
 
    else{
 
        while(!feof(file_ric)){
 
            char aaa[100];
 
            char bbb[100];
 
            fscanf(file_ric,"%s",aaa);
 
            sprintf(bbb, "%s,%s",a.codice_dipendente, a.codice_cantiere);
 
 
            if(strcmp(aaa,bbb)==0){
 
                presente=true;
 
            }
 
        }
 
        close(file_ric);
 
    }
 
    return presente;
 
}
 
 
void salvaSuFile(char * nomeFile, char * contenuto){
 
    FILE *file_dip;
 
    if ((file_dip = fopen(nomeFile, "a")) == NULL){
 
        printf ("\nImpossibile aprire il file!");
 
    }
 
    else{
 
        fprintf(file_dip, "%s",contenuto);
 
        fclose(file_dip);
 
    }
 
} | 	 
  | 
			 
		  | 
	 
	
		| Top | 
		 | 
	 
	
		  | 
	 
	
		bdoriano Amministratore
  
  
  Registrato: 02/04/07 12:05 Messaggi: 14391 Residenza: 3° pianeta del sistema solare...
  | 
		
			
				 Inviato: 01 Lug 2020 11:16    Oggetto:  | 
				     | 
			 
			
				
  | 
			 
			
				Ciao cristinabalestra,
 
 
il link a GoogleDrive che hai postato richiedeva la password di Google per poterne vedere il contenuto.
 
Per sicurezza, il link è stato rimosso.
 
 
Ti conviene utilizzare un servizio di condivisione file completamente gratuito, tipo ufile.io o similare, che non richieda registrazione per poterne visualizzare il contenuto. | 
			 
		  | 
	 
	
		| Top | 
		 | 
	 
	
		  | 
	 
	
		SverX Supervisor Macchinisti
  
  
  Registrato: 25/03/02 12:16 Messaggi: 11861 Residenza: Tokelau
  | 
		
			
				 Inviato: 02 Lug 2020 12:48    Oggetto:  | 
				     | 
			 
			
				
  | 
			 
			
				non mi è chiaro cosa tenti di fare qui:
 
 
 	  | Codice: | 	 		                  while((conteggio<n)&& feof(dip)) {
 
                    char linea1[100];
 
                    fscanf(dip, "%s", linea1);
 
                    a[conteggio].codice_fiscale;
 
                    a[conteggio].cognome;
 
                    a[conteggio].nome;
 
                    a[conteggio].data_nascita;
 
                    a[conteggio].luogo_nascita;
 
                    a[conteggio].genere;
 
                    a[conteggio].anni_esperienza;
 
                    a[conteggio].ruolo;
 
                                       
 
                    conteggio++;
 
                } | 	  
 
 
dato che leggi l'intera stringa in linea1 e poi non te ne fai nulla. volevi forse fare un parse della stringa?
 
 
dato che il file è un CSV puoi provare a leggere i campi direttamente lasciando che sia fscanf a fare il parse per te... | 
			 
		  | 
	 
	
		| Top | 
		 | 
	 
	
		  | 
	 
	
		zeross Amministratore
  
  
  Registrato: 19/11/08 12:04 Messaggi: 8599 Residenza: Atlantica
  | 
		
			
				 Inviato: 14 Mag 2022 21:10    Oggetto:  | 
				     | 
			 
			
				
  | 
			 
			
				| mi ricorda una interfaccia per una base dati gestionale, ma mancano dei pezzi.... | 
			 
		  | 
	 
	
		| Top | 
		 | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
	 
	    
	   | 
	
Non puoi inserire nuovi argomenti Non puoi rispondere a nessun argomento Non puoi modificare i tuoi messaggi Non puoi cancellare i tuoi messaggi Non puoi votare nei sondaggi
  | 
   
 
  
 
		 |