Indice del forum Olimpo Informatico
I Forum di Zeus News
Leggi la newsletter gratuita - Attiva il Menu compatto
 
 FAQFAQ   CercaCerca   Lista utentiLista utenti   GruppiGruppi   RegistratiRegistrati 
 ProfiloProfilo   Messaggi privatiMessaggi privati   Log inLog in 

    Newsletter RSS Facebook Twitter Contatti Ricerca
Problemi con modularizzazione programma e lettura file
Nuovo argomento   Rispondi    Indice del forum -> Programmazione
Precedente :: Successivo  
Autore Messaggio
cristinabalestra
Comune mortale
Comune mortale


Registrato: 01/07/20 00:38
Messaggi: 1

MessaggioInviato: 01 Lug 2020 00:56    Oggetto: Problemi con modularizzazione programma e lettura file Rispondi citando

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
Profilo Invia messaggio privato
bdoriano
Amministratore
Amministratore


Registrato: 02/04/07 11:05
Messaggi: 14294
Residenza: 3° pianeta del sistema solare...

MessaggioInviato: 01 Lug 2020 10:16    Oggetto: Rispondi citando

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
Profilo Invia messaggio privato
SverX
Supervisor Macchinisti
Supervisor Macchinisti


Registrato: 25/03/02 11:16
Messaggi: 11553
Residenza: Tokelau

MessaggioInviato: 02 Lug 2020 11:48    Oggetto: Rispondi citando

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
Profilo Invia messaggio privato HomePage
zeross
Moderatore Software e Programmazione
Moderatore Software e Programmazione


Registrato: 19/11/08 11:04
Messaggi: 6028
Residenza: Atlantica

MessaggioInviato: 14 Mag 2022 20:10    Oggetto: Rispondi

mi ricorda una interfaccia per una base dati gestionale, ma mancano dei pezzi....
Top
Profilo Invia messaggio privato MSN
Mostra prima i messaggi di:   
Nuovo argomento   Rispondi    Indice del forum -> Programmazione Tutti i fusi orari sono GMT + 1 ora
Pagina 1 di 1

 
Vai a:  
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