Code:
#include<stdio.h>
#include<string.h>
FILE *f1;
struct addr
{
char name[15];
double number;
}rec[100];
main()
{
int select,i=0,max=0,contnt=1;
int smatch[15],snum;
char sname[15];
int search(char *,int *,int);
void writeto(int),readall(int);
void rmv(char *,int *,int);
if((f1=fopen("book","r")) == NULL)
contnt=0;
else
for(i=0;!feof(f1);i++) {
fscanf(f1,"%s%lf",rec[i].name,&rec[i].number);
fclose(f1); }
max=i;
printf("The value of max is %d\n",max);
printf("1 Add an Entry\n2 Remove an Entry\n3 Search by name\n4 Read all\n0 Quit\n");
printf("Please select an option : ");
scanf("%d",&select);
switch(select)
{
case 0:
printf("\nGood bye !!\n\n");
exit(0);
break;
case 1:
writeto(max);
break;
case 2:
if(contnt != 0)
{
printf("Please Enter the name : ");
scanf("%s",sname);
rmv(sname,smatch,max);
printf("The entry has been removed\n");
}
else
printf("There is nothing to remove\n");
break;
case 3:
if(contnt != 0)
{
printf("Please Enter the name : ");
scanf("%s",sname);
snum=search(sname,smatch,max);
if(snum>0)
{
printf("The matching entries are \n");
for(i=0;i<snum;i++)
{
fscanf(f1,"%s%lf",rec[smatch[i]].name,&rec[smatch[i]].number);
fprintf(stdout,"%s %.0lf\n",rec[smatch[i]].name,rec[smatch[i]].number);
}
}
else
printf("Could not find any matching Entries\n");
}
else
printf("The Address book contains no entries\n");
break;
case 4:
if(contnt != 0)
readall(max);
else
printf("The file contains no entries, Please enter first\n");
break;
default:
printf("Please Enter the correct code\n");
}
}
void writeto(int lim)
{
int i,c=1;
printf("Enter the name and number\n");
f1=fopen("book","a");
for(i=lim;i< 100 && c != 0;i++)
{
fscanf(stdin,"%s%lf",rec[i].name,&rec[i].number);
fprintf(f1,"%s %.0lf",rec[i].name,rec[i].number);
printf("Any more : (press any key to continue or 0 to quit) : ");
scanf("%d",&c);
}
fclose(f1);
}
void rmv(char find[],int count[],int lim)
{
int i,j,send=0,k;
struct addr cpy[lim];
for(i=0;i<lim;i++)
{
if((k=(strcmp(rec[i].name,find))) == 0)
{ count[send]=i;
send++; }
}
f1=fopen("book","w");
k=0;
for(i=0;i<lim;i++)
if(i != count[k])
fprintf(f1,"%s %.0lf",rec[i].name,rec[i].number);
else
k++;
fclose(f1);
}
void readall(int lim)
{
int i,j;
double number;
char sml[15];
f1=fopen("book","r");
printf("Total Number of Entries : %d\n",lim);
for(i=0;i<lim;i++)
fscanf(f1,"%s%lf",rec[i].name,&rec[i].number);
for(i=0;i<lim;i++)
for(j=i;j<lim;j++)
if(strcmp(rec[i].name,rec[j].name)>0)
{
strcpy(sml,rec[j].name);
number=rec[j].number;
strcpy(rec[j].name,rec[i].name);
rec[j].number=rec[i].number;
strcpy(rec[i].name,sml);
rec[i].number=number;
}
for(i=0;i<lim;i++)
printf("%s %.0lf\n",rec[i].name,rec[i].number);
fclose(f1);
}
int search(char find[],int count[],int lim)
{
int i,send=0,k;
for(i=0;i<lim;i++)
{
fscanf(f1,"%s%lf",rec[i].name,&rec[i].number);
if((k=(strcmp(rec[i].name,find))) == 0)
{ count[send]=i;
send++; }
}
return(send);
}