Precedente :: Successivo |
Autore |
Messaggio |
cristinabalestra Comune mortale
Registrato: 01/07/20 00:38 Messaggi: 1
|
Inviato: 01 Lug 2020 00: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 11:05 Messaggi: 14305 Residenza: 3° pianeta del sistema solare...
|
Inviato: 01 Lug 2020 10: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 11:16 Messaggi: 11586 Residenza: Tokelau
|
Inviato: 02 Lug 2020 11: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 Moderatore Software e Programmazione
Registrato: 19/11/08 11:04 Messaggi: 6305 Residenza: Atlantica
|
Inviato: 14 Mag 2022 20: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
|
|