/***************DB.C**************** Persistenza di struct su File. (Fischetti Pietro) ************************************/ #include #include //Numero massimo di record const int DB_MAX = 100; //Definizione record Anagrafica typedef struct Anag { int ID; char Cognome[40]; int CAP; char Tel[20]; }Anag; int main(int arc, char **argv) { char *DB_Name = "Anag.db";//Nome File che conterra' il DB FILE *fout = fopen(DB_Name,"wb"); FILE *fin = NULL; Anag n; Anag DB[DB_MAX];//DB: Array di struct al massimo DB_MAX record int i=0; int N=0;//Numero di record effettivi //Inserisco dei record e li salvo su file DB[i].ID=i+1; strcpy(DB[i].Cognome,"Abate"); DB[i].CAP=16100; strcpy(DB[i].Tel,"010112233"); fwrite((const char*)&DB[i++], sizeof( Anag ),1,fout); DB[i].ID=i+1; strcpy(DB[i].Cognome,"Rossi"); DB[i].CAP=DB[i-1].CAP+1; strcpy(DB[i].Tel,"010445566"); fwrite((const char*)&DB[i++], sizeof( Anag ),1,fout); DB[i].ID=i+1; strcpy(DB[i].Cognome,"Bianchi"); DB[i].CAP=DB[i-1].CAP+1; strcpy(DB[i].Tel,"010778899"); fwrite((const char*)&DB[i++], sizeof( Anag ),1,fout); fclose(fout); N=i;//Num. di record Effettivi //azzero velocemente l'array DB memset((char*)&DB, '\0', sizeof(Anag) * N); //Apro il file e riempio l'array DB fin = fopen("Anag.db","rb"); N=0; while( fread((char*)&DB[N], sizeof( Anag ),1,fin)) N++; fclose(fin); //Stampa Formattata printf("%4s %20s %5s %10s\n","ID","Cognome","CAP","Tel"); printf("-------------------------------------------\n"); for (i=0;i < N; i++) printf("%4d %20s %5d %10s\n",DB[i].ID,DB[i].Cognome,DB[i].CAP,DB[i].Tel); return 0; }