#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
struct sev
{
char nume[30];
char prenume[50];
double age;
};
void citire(FILE *f, FILE *g,int n)
{
f=fopen("binar","wb");
g=fopen("text.txt","w");
struct sev *c;
c=calloc(n,sizeof(struct sev));
int i;
for(i=0; i<n; i++)
{
puts("____________________");
scanf("%s",&c[i].nume);
fprintf(g,"%s\n",c[i].nume);
getchar();
scanf("%s",&c[i].prenume);
fprintf(g,"%s\n",c[i].prenume);
getchar();
scanf("%lf",&c[i].age);
fprintf(g,"%lf\n",c[i].age);
getchar();
}
fwrite(c,sizeof(struct sev),n,f);
free(c);
fclose(f);
fclose(g);
}
void afisarefisier(FILE *f, FILE *g,int n)
{ int i;
struct sev ca;
f=fopen("binar","rb");
g=fopen("text.txt","r");
printf("Din fisier binar");
for(i=0; i<n; i++)
{
fread(&ca,sizeof(struct sev),1,f);
printf("\n%d\n",i+1);
puts(ca.nume);
puts(ca.prenume);
printf("%f",ca.age);
}
printf("Din fisier text");
for(i=0; i<n; i++)
{
printf("\n%d\n",i+1);
fscanf(g,"%s",&ca.nume);
puts(ca.nume);
fscanf(g,"%s",&ca.prenume);
puts(ca.prenume);
fscanf(g,"%lf",&ca.age);
printf("%f",ca.age);
}
fclose(f);
fclose(g);
}
void cautare (FILE *f, FILE *g, int *n)
{ int siz=0,i;
f=fopen("binar","rb");
g=fopen("text.txt","r");
struct sev ca,ga;
printf("\nCaut:\n");
scanf("%s",&ca.nume);
getchar();
scanf("%s",&ca.prenume);
getchar();
scanf("%lf",&ca.age);
getchar();
for(i=0; i<(*n); i++)
{
fread(&ga,sizeof(struct sev),1,f);
if(strcmp(ga.nume,ca.nume)==0&&strcmp(ga.prenume,ca.prenume)==0)
{
siz=1;
break;
}
}
fclose(f);
fclose(g);
if(siz==1)
printf("\nExista!\n");
else
adaugare(f,g,ca,n);
}
void adaugare(FILE *f, FILE *g,struct sev ca, int *n)
{
f=fopen("binar","ab");
g=fopen("text.txt","a");
fwrite(&ca,sizeof(struct sev),1,f);
fprintf(g,"%s\n",ca.nume);
fprintf(g,"%s\n",ca.prenume);
fprintf(g,"%lf\n",ca.age);
fclose(f);
fclose(g);
(*n)++;
}
int main()
{ int m;
scanf("%d",&m);
getchar();
FILE *f,*g;
citire(f,g,m);
afisarefisier(f,g,m);
cautare(f,g,&m);
return 0;
}