30/10/14 11:27
perillitommaso
void ricerca_cognome(t_Dati *datianagrafici){ char cognome[12];//cognome da cercare all'interno della banca dati char scelta[3];//scelta utente si/no int found; //variabile sentinella FILE *f; do{//ricerca il cliente in base al cognome f = fopen("BancaDati.txt","r"); if(f==NULL){//se il file non esiste printf("\nFile inesistente\n"); return; } found = 0; printf("\n\tInserisci il cognome del paziente da cercare nella banca dati: "); scanf("%s",cognome); fgets() if(found==0){ printf("\n\tIl Cliente %s da lei cercato e' inesistente",cognome); } printf("\n\tVuoi cercare un altro cliente? "); scanf("%s",scelta); while((strcmp(scelta,"si")!=0)&&(strcmp(scelta,"no")!=0)){ printf("\n\tERRORE, INSERISCI SOLO si O no"); scanf("%s",scelta); } }while(strcmp(scelta,"si")==0); return; }
allora io ho un file, in cui precedentemente ho aperto in modalità "a", e ho scritto il record:
typedef struct recDatiAnagrafici { char Nome [12]; char Cognome [12]; char Telefono [11]; t_Data Nascita;//record nascita composto da 3 campi t_Prestazioni prestazioni;//record prestazioni composto da 3 campi t_Importo importo;//record importo composta da 3 campi }t_Dati;
con la fprintf. il problema è che adesso dovrei ricercare nella banca data un cliente in base al cognome, e stampare poi i suoi dati in caso di successo, in caso di insuccesso devo far visualizzare un messaggio di errore ma non è quello il problema, non so come ricercare, ho trovato questa cosa su internet:
Inizio Vis: “Come si chiamano di nome di battesimo le persone che devo trovare nel file?” Acq: nomecerc Apri il file in input Leggi primo record nel buffer buf trovati = 0 Mentre non ho raggiunto l’eof Se buf.nome = nomecerc Vis: buf.codfis, buf.cognome, buf.nome trovati = trovati + 1 Finese Leggi prossimo record nel buffer buf FineMentre Chiudi il file Se trovati = 0 allora Vis: “Nessuna persona registrata all’interno di questo file si chiamava in quel modo” Finese Fine
ho provato a fare così:
void ricerca_cognome(){ char cognome[12];//cognome da cercare all'interno della banca dati char scelta[3];//scelta utente si/no int found; //variabile sentinella FILE *f; t_Dati buf;//record contenete i campi letti da file do{//ricerca il cliente in base al cognome f = fopen("BancaDati.txt","r"); if(f==NULL){//se il file non esiste printf("\nFile inesistente\n"); return; } printf("\n\tInserisci il cognome del paziente da cercare nella banca dati: "); scanf("%s",cognome); fgets(buf,sizeof(buf),f); found = 0; while(!feof(f)){ if(strcmp(cognome,buf.Cognome)==0){ printf("\n\t%s %s %s %d %s %d %s %2.f %s %2.f %s %2.f",buf.Nome,buf.Cognome,buf.Telefono,buf.Nascita.Giorno,buf.Nascita.Mese,buf.Nascita.Anno,buf.prestazioni.Prestazioni1,buf.importo.importo1,buf.prestazioni.Prestazioni2,buf.importo.importo2,buf.prestazioni.Prestazioni3,buf.importo.importo3); found = 1; } fgets(buf,sizeof(buf),f); } fclose(f); if(found==0){ printf("\n\tIl Cliente %s da lei cercato e' inesistente",cognome); } printf("\n\tVuoi cercare un altro cliente? "); scanf("%s",scelta); while((strcmp(scelta,"si")!=0)&&(strcmp(scelta,"no")!=0)){ printf("\n\tERRORE, INSERISCI SOLO si O no"); scanf("%s",scelta); } }while(strcmp(scelta,"si")==0); return; }
ma la fgets mi da errore...
Ultima modifica effettuata da perillitommaso 30/10/14 12:14
aaa