Salve a tutti,
premetto che non sono per nulla esperto di programmazione in c++. Sono uno studente e sto avendo molta difficoltà con questo mini progetto.
L'obbiettivo è creare delle strutture che vengano salvate anche su dei file binari ( è un programma tipo per un ospedale e avro un file per i pazienti ed uno per gli esami) in modo tale che quando riaprirò il programma posso riprendere i dati.
A me è venuto in mente di organizzarlo così
questa è la mia struttura
Dal menu principale con una voce mando una funzione che carica struttura. Ecco a funzione :codice:struct recPazienti { int codPaz; char cognomePaz[30]; char nomePaz[30]; char dataNascita[15]; int telefonoPaz; };
Poi come vedete appena carico un paziente lo metto subito anche su file con questa funzione :codice:void nuovoPaziente (recPazienti paziente[],int &i){ int cont; system("CLS"); cout<<"\n Quanti pazienti vuoi inserire ?"; cin>>cont; cout<<"\n Inserisci i dati richiesti"; do { cout<<"\n\n Codice del paziente : "; cin>>paziente[i].codPaz; cout<<" Cognome : "; cin>>paziente[i].cognomePaz; cout<<" Nome : "; cin>>paziente[i].nomePaz; cout<<" Data di nascita : "; cin>>paziente[i].dataNascita; cout<<" Numero di telefono : "; cin>>paziente[i].telefonoPaz; cout<<"\n~~~~~~~~~~~~~~~~~~~~~~~~~~"; fflush(stdin); i++; cont--; scriviFilePaziente(paziente); } while(cont!=0); }
e fino a qui ok. Dopo con un altra voce del menu' principale chiamo due funzionicodice:void scriviFilePaziente(recPazienti paziente[]){ pPaz=fopen("Pazienti.dat","ab"); if (pPaz==NULL){ printf("ERRORE : File Pazienti.dat non aperto"); return; } fwrite(&paziente, sizeof(recPazienti),1,pPaz); fclose(pPaz); }
Una che mette i dati dal file alla struttura :
codice:void caricaStrPaz(recPazienti paziente[], int &i){ int n; pPaz=fopen("Pazienti.dat","rb"); if (pPaz==NULL){ printf("Il file Pazienti.dat non esiste"); } while(!feof(pPaz)){ n = fread(&paziente[i], sizeof(recPazienti),1,pPaz); if (n==1){ i++; } } fclose(pPaz); }
e l'altra funzione che alla fine mi visualizza la struttura
codice:void visualPaz(recPazienti paziente[], int num){ int i; system("CLS"); cout<<"\n Elenco dei dati di tutti i pazienti "<<endl; for (i=0;i<num;i++){ cout<<"\n Codice del paziente : "<<paziente[i].codPaz; cout<<"\n Cognome : "<<paziente[i].cognomePaz; cout<<"\n Nome : "<<paziente[i].nomePaz; cout<<"\n Data di nascita : "<<paziente[i].dataNascita; cout<<"\n Numero di telefono : "<<paziente[i].telefonoPaz; cout<<"\n\n~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl; } cout<<"\n Premere un tasto per tornare al menu' principale..."; getch(); }
nel main oltre al menu switch ho questo :
e queste sono le chiamate delle funzioni sopra riportate :codice:ecPazienti paziente[DIM]; (dim lo definito a 1000) int posPaz=0,posEsa=0;
Il programma non funziona per nulla. Non visualizza niente di quello che deve ma solo caratteri strani al posto dei dati.codice:nuovoPaziente(paziente,posPaz); caricaStrPaz(paziente,posPaz); visualPaz(paziente,posPaz);
Se qualcuno ha la pazienza di aiutarmi gliene sarei grato. Sto impazzendo ed è un lavoro molto importante.

Rispondi quotando