Code:
#include <stdio.h>
#include <conio.h>
#include <string.h>
struct date_en{
int dd,mm,yy;
};
struct data{
int id;
char name[20];
char addy[30];
int age;
struct date_en date;
};
add_new_rec(FILE *ptr)
{
ptr=fopen("details.dat","a+");
struct data info;
printf("Enter ID: ");
info.id=0;
while(info.id < 1000 || info.id > 9999)
{
scanf("%d",&info.id);
}
printf("\nEnter Name: ");
scanf(" %[^\n]",info.name);
fflush(stdin);
printf("\nEnter Addy: ");
scanf(" %[^\n]",info.addy);
fflush(stdin);
printf("\nEnter age: ");
scanf("%d",&info.age);
printf("Enter date: ");
scanf("%d",&info.date.dd);
printf("/");
scanf("%d",&info.date.mm);
printf("/");
scanf("%d",&info.date.yy);
fwrite(&info,sizeof(struct data),1,ptr);
fclose(ptr);
return 0;
}
void view_all_rec(FILE *fptr)
{
struct data info;
fptr=fopen("details.dat","r");
rewind(fptr);
while(!feof(fptr))
{
fread(&info,sizeof(struct data),1, fptr);
printf("%d\n",info.id);
printf("%s\n",info.name);
printf("%s\n",info.addy);
printf("%d\n",info.age);
printf("%d/%d/%d",info.date.dd,info.date.mm,info.date.yy);
printf("\npress any key for next record!");
getch();
}
fclose(fptr);
}
void view_rec(FILE *ptr)
{
struct data info;
ptr=fopen("details.dat","r");
int searchkey,found=0;
printf("Input ID no to search");
scanf("%d",&searchkey);
rewind(ptr);
while(!feof(ptr) && found==0 )
{
fread(&info,sizeof(struct data),1, ptr);
if (info.id == searchkey)
{
found=1;
printf("%d\n",info.id);
printf("%s\n",info.name);
printf("%s\n",info.addy);
printf("%d\n",info.age);
printf("%d/%d/%d",info.date.dd,info.date.mm,info.date.yy);
getch();
}
else
found=0;
}
fclose(ptr);
}
void modify_rec(FILE *ptr)
{
struct data info;
ptr=fopen("details.dat","r+");
char save;
int mod ;
printf("Input ID no to search");
scanf("%d",&mod);
rewind(ptr);
while(!feof(ptr))
{
fread(&info,sizeof(struct data),1, ptr);
if (info.id == mod)
{
printf("\nEnter Name: ");
scanf(" %[^\n]",info.name);
fflush(stdin);
printf("\nEnter Addy: ");
scanf(" %[^\n]",info.addy);
fflush(stdin);
printf("\nEnter age: ");
scanf("%d",&info.age);
printf("Enter date (dd-mm-yy): ");
scanf("%d",&info.date.dd);
printf("/");
scanf("%d",&info.date.mm);
printf("/");
scanf("%d",&info.date.yy);
printf("\n\n MODIFY SAVE? Y/N : ");
scanf("%s",&save);
if ((save =='Y') ||(save =='y'))
{
// fseek?
fwrite(&info,sizeof (struct data),1,ptr);
printf("DATA HAVE BEEN UPDATED !!");
getch();
}
}
else
printf("Record not found");
}
fclose(ptr);
}
int print_menu()
{
int choice;
printf("##########################\n");
printf("# 1.Add New Record #\n");
printf("# 2.View Record #\n");
printf("# 3.View All Record #\n");
printf("# 4.Modify Record #\n");
printf(" 5.Quit \n");
printf("##########################\n");
printf("Please choose what option you want:");
scanf("%d",&choice);
return choice;
}
main()
{
FILE *ptr;
char dum;
int choose;
if((ptr = fopen ("details.dat","r"))==NULL){
ptr = fopen ("details.dat","w");
}
do {
choose=print_menu();
switch(choose)
{
case 1: add_new_rec(ptr);
break;
case 2: view_rec(ptr);
break;
case 3:
view_all_rec(ptr);
break;
case 4:
modify_rec(ptr);
break;
default:
printf("Error - Wrong Option!");
scanf("%c",&dum);
getch();
clrscr();
}
} while (choose !=5);
return 0;
}