Tuesday, November 1, 2011

Telephone Directory

/* PROGRAM TO IMPLEMENT A PHONE RECORD DATABASE USING LINKED LIST
AND FILE HANDLING USING FORMATTED I/O FUNCTIONS fscanf() and
fprintf()
*/

# include <conio.h>
# include <stdio.h>
# include <alloc.h>
# include <string.h>

struct node
{
int num;
char name[15];
struct node *next;
};

struct node *list; //global start pointer
FILE *fp; // Global file pointer

struct node *getrecord()
{
struct node *temp,e;
temp=(struct node*)malloc(sizeof(struct node));

printf("Reached till here...");
getch();

fflush(stdin);
// fscanf(fp,"%d %s
",&temp->num,temp->name);
fread(&temp,sizeof(temp),1,fp);
printf("%d %s",temp->num,temp->name);

// temp->num=e.num;
// strcpy(temp->name,e.name);
getch();
temp->next = NULL;
return temp;
}

struct node *getnode()
{
struct node *temp;
temp = (struct node*)malloc(sizeof(struct node));

printf("Enter the person's phone number--->");
scanf("%d",&temp->num);

printf("Enter the person's Name--->");
scanf("%s",&temp->name);

temp->next = NULL;
return temp;
}

struct node *search(int id,int *flag)
{
struct node *cur,*prev;
*flag=0;

if
(list==NULL)
return NULL;

for(prev=NULL,cur=list; (cur); prev=cur,cur=cur->next)
if(cur->num == id)
{
*flag = 1;
break;
}


return prev;
}

int insert(struct node *new1)
{
struct node *prev;
int flag;

prev = search(new1->num,&flag);

if(list==NULL)
{
list = new1; //first node in list
return;
}

if(flag==1)
return -1;
else
{
new1->next = prev->next;
prev->next = new1; // insert in the middle or end
}

return 0;
}

void display()
{
struct node *cur;
auto int n=0;

if(list==NULL)
{
printf("List empty !");
return;
}

printf("The phone records are--->");
cur=list;
for(cur=list;(cur);cur=cur->next)
{
printf("Record no. %d--->",n+1);
printf("Record phone no.:%d",cur->num);
printf("person Name:%s",cur->name);
n++;
}

}

int delnode(int id)
{
struct node *prev,*temp;
int flag=0;

if(list==NULL)
return -1;

prev=search(id,&flag);

if(flag==0)
return -1;

if(prev==NULL)
{
temp=list;
list=list->next;
free(temp);
}

else
{
temp=prev->next;
prev->next=temp->next;
free(temp);
}
return 0;
}

struct node *query(int id,char *flag,int toggle)
{
struct node *cur,*prev;
int x=0;

if(list==NULL)
return NULL;

if(toggle)
{
for(prev=NULL,cur=list; (cur); prev=cur,cur=cur->next)
if(cur->num == id)
{
x=1;
break;
}
}
else
{
for(prev=NULL,cur=list; (cur); prev=cur,cur=cur->next)
if(!strcmp(cur->name,flag))
{
x=1;
break;
}
}

if(x==0)
{
printf("The number doesnt exist !");
return NULL;
}

return cur;
}

void CopyToFile()
{
FILE *fp;
struct node *cur;
fp=fopen("phone.txt","w");

cur=list;
if(cur==NULL)
{
printf("
The list is empty, nothing to write back...");
return;
}
for(cur=list;(cur);cur=cur->next)
fprintf(fp,"%d %s
",cur->num,cur->name); //writing back to file
fclose(fp);
}






void main()
{
int ch=0,ans=0;
int val=0;
char str[15];
struct node *new1,*new2;


clrscr();

/* initialization of list with the existing records */

fp=fopen("phone.txt","r");

if(fp==NULL)
{
printf("File cant be opened !");
getch();
exit(1);
}

while(!feof(fp))
{
new1=getrecord();

if(insert(new1)==-1)
printf("Cant insert record ! Error...");
else
printf("Record entered...");
}
getch();
fclose(fp);

do
{
clrscr();
printf("Menu");
printf("1. Add a New phone record.");
printf("2. Delete an existing Record.");
printf("3. show all Records.");
printf("4. Modify a particular Record.");
printf("5. Exit.");
printf("Enter your choice--->");
scanf("%d",&ch);

switch(ch)
{
case 1:

new1 = getnode();
val = insert(new1);
if(val==-1)
printf("Employee id already exists ! try again...");
else
printf("Employee details successfully stored");
break;

case 2:
printf("Enter the phone no.you wish to delete--->");
scanf("%d",&val);
ans=delnode(val);

if(ans==-1)
printf("Record doesnt exist ! Try again...");
if(ans==0)
printf("Record deleted !");
break;

case 3:
display();
break;

case 4:
printf("Search by phone no. or Name ? (1/2)--->");
scanf("%d",&ch);
if(ch==1)
{
printf("Enter the phone no. you wish to search for--->");
scanf("%d",&val);
new2=query(val,&str,1);
}
else
{
printf("Enter the name of the person you wish to search
for--->");
scanf("%s",&str);
new2=query(val,&str,0);
}
if(new2)
{
printf("Enter the New name of the person--->");
scanf("%s",&new2->name);
printf("Enter new phone no. of the person--->");
scanf("%d",&new2->num);
printf("Record modified successfully !");
}
break;



case 5:
printf("Leaving Database,writing back to file...");
CopyToFile();
getch();
free(list);
exit(1);
break;
}
getch();
}while(1);

}

No comments:

Post a Comment