#include<stdio.h>

struct Contact{
	int No;
	char name [20];
	char phoneNumber[30];
	char Email_address[45];
};

void Emptydata(int max,FILE *f)
{
	unsigned int i;
	 
	struct Contact EmptyContact = {0,"","",""};
	
	for(i=1;i<=100;++i)
	{
		fwrite(&EmptyContact, sizeof(struct Contact),1,f);
	}
}
int main(void)
{
	int user;
	int counter=0;
	int numOfRecord=0,iterator=0;
	FILE *f;
	
	f=fopen("Contact.dat","wb+");
	Emptydata(50,f);
	
	struct Contact c[2]={{1,"Ariel","0981-154-203","Tong@gmail.com"},{2,"Chubao","0910-653-758","Chu@gmail.com"}};
	fseek(f,0,SEEK_SET);
	fwrite(c,sizeof(struct Contact),sizeof(c)/sizeof(struct Contact),f);
	fclose(f);
	

	printf("Enter the number of option you want(1 for read the existing contact, 2 for add new contact.)\n");
	scanf("%d",&user);
	
	if(user==1)
	{
		f=fopen("Contact.dat","rb");
		fseek(f,0,SEEK_END);
		
		numOfRecord=ftell(f)/sizeof(struct Contact);
		rewind(f);
		
		struct Contact c[numOfRecord];
		fread(c,sizeof(struct Contact),numOfRecord,f);
		
		for(iterator=0;iterator<numOfRecord;++iterator)
		{
			printf("%d%10s%20s%20s\n",c[iterator].No,c[iterator].name,c[iterator].phoneNumber,c[iterator].Email_address);
		}
	}
	if(user==2)
	{
		f=fopen("Contact.dat","r+b");
		
		struct Contact New ={0,"","",""};
		
		printf("Enter your name,phone number,and email address.\n");
		fscanf(stdin,"%10s%20s%20s",New.name,New.phoneNumber,New.Email_address);
		
		counter++;
		fseek(f,(counter+2)*sizeof(struct Contact),SEEK_END);
		
		numOfRecord=ftell(f)/sizeof(struct Contact);
		rewind(f);
		
		fwrite(&New,sizeof(struct Contact),numOfRecord-2,f);
			
		struct Contact c[numOfRecord];
		fread(c,sizeof(struct Contact),numOfRecord,f);
		
		for(iterator=0;iterator<numOfRecord;++iterator)
		{
			printf("%s%20s%20s\n",c[iterator].name,c[iterator].phoneNumber,c[iterator].Email_address);
		}
	}
	fclose(f);
}