#include #include #include #include #define MAXPAROLE 30 struct _condomini{ char cognome[MAXPAROLE]; char nome[MAXPAROLE]; float importo; char situazione[MAXPAROLE]; struct _condomini *next; }; typedef struct _condomini condomini; condomini *head; FILE *fp; char surname[MAXPAROLE]; void acquisizione(void); void ispezione(void); void stampa_elenco(void); void notifica_pagamento(void); void aggiorna_file(void); void free_all(void); int main(void) { char temp[MAXPAROLE]; int scelta; do{ free_all(); acquisizione(); printf("[1]VERIFICA PAGAMENTO\n[2]STAMPA ELENCO\n[3]INSERISCI PAGAMENTO\n[4]ESCI\n-->"); fflush(stdout); gets(temp); scelta=atoi(temp); switch(scelta){ case 1: ispezione(); break; case 2: stampa_elenco(); break; case 3: notifica_pagamento(); break; case 4: return 1; break; default:printf("Opzione errata\n"); } }while(scelta!=4); } void acquisizione(void) { condomini *p1; char temp[80]; if((fp=fopen("condomini.txt","r"))==NULL) { printf("Impossibile aprire il file\n"); exit(1); } while((fgets(temp,101,fp))!=NULL) { if(!head) { head=(condomini*)malloc(sizeof(condomini)); sscanf(temp,"%s %s %f %s",&head->cognome,&head->nome,&head->importo,&head->situazione); head->next=NULL; } else { p1=head; head=(condomini*)malloc(sizeof(condomini)); sscanf(temp,"%s %s %f %s",&head->cognome,&head->nome,&head->importo,&head->situazione); head->next=p1; } } fclose(fp); } void ispezione(void) { int ok=0; condomini *p0=NULL,*p1; printf("Inserisci il cognome del condomino: "); fflush(stdout); gets(surname); p1=head; while(!ok) { if(!strcmpi(p1->cognome,surname)) { printf("%s",p1->situazione); ok=1; } else p1=p1->next; if(p1==NULL) { printf("Condomino non trovato\n"); ok=1; } } } void stampa_elenco(void) { condomini *p0; for(p0=head;p0!=NULL;p0=p0->next) printf("%s %s %.2f %s \n",p0->cognome,p0->nome,p0->importo,p0->situazione); } void notifica_pagamento(void) { int ok=0; condomini *p0,*p1=NULL; printf("Inserisci il cognome: "); fflush(stdout); gets(surname); p0=head; while(!ok) { if(!strcmpi(p0->cognome,surname)) { p1=p0; ok=1; } p0=p0->next; if(p0==NULL) ok=1; } if(!p1) printf("Condomino non trovato\n"); else { if(!strcmp(p1->situazione,"da_pagare")) strcpy(p1->situazione,"pagato"); else printf("Il condomino ha gia'eseguito il pagamento\n"); aggiorna_file(); } } void aggiorna_file() { condomini *p0; fp=fopen("condomini.txt","w"); for(p0=head;p0!=NULL;p0=p0->next) fprintf(fp,"%s %s %.2f %s\n",p0->cognome,p0->nome,p0->importo,p0->situazione); fclose(fp); } void free_all() { condomini *p0,*p1; if(head) { p1=head; while(p1) { p0=p1; p1=p1->next; free(p0); } head=NULL; } }