Definizioni dele funzioni:
#include "file.h"
contatto inizializza(contatto x){
printf("\nInserisci il nome del contatto: ");
scanf("%s",x.nome);
fflush(stdin);
printf("\nInserisci il cognome del contatto: ");
scanf("%s",x.cognome);
fflush(stdin);
printf("\nInserisci il numero telefonico del contatto: ");
scanf("%f",&x.telefono);
fflush(stdin);
return x;
}
void stampa (contatto x){
printf("\n||****************************************");
printf("\n||Nome: %s", x.nome);
printf("\n||Cognome: %s", x.cognome);
printf("\n||Numero: %2.f", x.telefono);
printf("\n||****************************************");
}
void scriviSuFile(contatto x, char nomeFile[]){
FILE *f;
f=fopen(nomeFile,"a");
fwrite(&x, sizeof( contatto), 1, f) ;
fclose(f);
}
contatto leggiDaFile(contatto x, char nomeFile[]){
FILE *f;
f=fopen(nomeFile,"r");
fread(&x, sizeof( contatto), 1, f);
fclose(f);
return x;
}
int contaContatti(char nomeFile[]){
int size;
FILE *f;
f=fopen(nomeFile,"r");
fseek(f,0,SEEK_END);
size=ftell(f);
fclose(f);
return size;
}
contatto sceldaDellaRicerca (char nomeFile[]){
FILE *f;
contatto test, x;
int menu, find;
f=fopen(nomeFile,"r");
printf("\n1. Nome");
printf("\n2. Cognome");
printf("\n3. Numero telefonico");
printf("\nQualsiasi altro valore per non eseguire la ricerca");
printf("\nEseguire ricerca per: ");
scanf("%d", &menu);
switch(menu){
case 1:
printf("\nInserisci il nome da cercare: ");
scanf("%s",x.nome);
while(find=fread(&test, sizeof( contatto),1,f)&&(strcmp(test.nome,x.nome)!=0));
if(!find){
strcpy(test.nome,"");
strcpy(test.cognome,"");
test.telefono=0;
}
break;
case 2:
printf("\nInserisci il cognome da cercare: ");
scanf("%s",x.cognome);
while(find=fread(&test, sizeof( contatto),1,f)&&(strcmp(test.cognome,x.cognome)!=0));
if(!find){
strcpy(test.nome,"");
strcpy(test.cognome,"");
test.telefono=0;
}
break;
case 3:
printf("\nInserisci il numero di telefono da cercare: ");
scanf("%f",&x.telefono);
while(find=fread(&test, sizeof( contatto),1,f)&&(test.telefono,x.telefono));
if(!find){
strcpy(test.nome,"");
strcpy(test.cognome,"");
test.telefono=0;
}
break;
}
fclose(f);
return test;
}
int elimina(char nomeFile[],contatto x){
contatto test;
FILE *f;
int find;
f=fopen(nomeFile,"w+");
while(find=fread(&test, sizeof( contatto),1,f)&&(strcmp(test.nome,x.nome)!=0));
if(!find){
return -1;
}
while(fread(&test, sizeof(contatto),1,f)){
fseek(f,-sizeof( contatto)*2,SEEK_CUR);
fwrite(&test, sizeof( contatto), 1, f);
}
fclose(f);
return 0;
}
int modifica(char nomeFile[],contatto x){
contatto test;
FILE *f;
int find;
f=fopen(nomeFile,"w+");
while(find=fread(&test, sizeof( contatto),1,f)&&(strcmp(test.nome,x.nome)!=0));
if(!find){
return -1;
}
x=inizializza(x);
fseek(f,-sizeof( contatto),SEEK_CUR);
fwrite(&x, sizeof( contatto), 1, f);
fclose(f);
return 0;
}
Main:
#include "file.h"
int main(){
int ricalcola/*, menu*/, cont;
contatto a;
char nomeFile[NOME];
printf("\nInserisci il nome del file: ");
scanf("%s", nomeFile);
printf("\nQuanti contatti vuoi inserire?");
scanf("%d",&cont);
for(int i=0;i<cont;i++){
a=inizializza(a);
scriviSuFile(a,nomeFile);
}
do{
//a=leggiDaFile(a,nomeFile);
//stampa(a);
a=sceldaDellaRicerca(nomeFile);
stampa(a);
if(a.telefono==0.0)
printf("\nNon c'è");
else
printf("\nc'è");
printf("\nPer ricalcolare digita 1: ");
scanf("%d", &ricalcola);
}while(ricalcola);
return 0;
}