\* C file handling program to Create Employee Record and Update it *\
# include < stdio.h >
# include < stdlib.h >
# include < string.h >
# define size 200
struct emp
{
int id ; char *name ;
} *emp1, *emp3 ;
void display( ) ;
void create( ) ;
void update( ) ;
FILE *fp, *fp1 ;
int count = 0 ;
int main( )
{
int i, n, ch ;
char filename[20] ;
printf("\n Enter the filename to be opened : ") ;
scanf("%s", filename ) ;
printf("1] Create a Record\n") ;
printf("2] Display Records\n") ;
printf("3] Update Records\n") ;
printf("4] Exit") ;
while (1)
{
printf("\nEnter your choice : ") ;
scanf("%d", &ch ) ;
switch (ch)
{
case 1 :
fp = fopen(filename, "a") ;
create() ;
break ;
case 2 :
fp1 = fopen(filename, "rb" ) ;
display() ;
break ;
case 3 :
fp1 = fopen(filename, "r+" ) ;
update() ;
break ;
case 4 :
exit( 0 ) ;
}
}
return 0 ;
}
/* To create an employee record */
void create( )
{
int i ;
char *p ;
emp1 = (struct emp *)malloc(sizeof(struct emp)) ;
emp1->name = (char *)malloc((size)*(sizeof(char))) ;
printf("Enter name of employee : ") ;
scanf(" %[^\n]s", emp1->name ) ;
printf("Enter emp id : ") ;
scanf(" %d", &emp1->id ) ;
fwrite(&emp1->id, sizeof(emp1->id), 1, fp) ;
fwrite(emp1->name, size, 1, fp ) ;
// count to number of entries of records
count++ ;
fclose(fp) ;
}
/* Display the records in the file */
void display( )
{
emp3 = (struct emp *)malloc(1*sizeof(struct emp)) ;
emp3->name = (char *)malloc(size*sizeof(char)) ;
int i = 1 ;
if ( fp1 == NULL )
printf("\nFile not opened for reading") ;
while (i <= count)
{
fread(&emp3->id, sizeof(emp3->id), 1, fp1) ;
fread(emp3->name, size, 1, fp1) ;
printf("\n%d %s",emp3->id,emp3->name ) ;
i++ ;
}
fclose(fp1) ;
free(emp3->name) ;
free(emp3) ;
}
/* Update the employee record */
void update( )
{
int id, flag = 0, i = 1 ;
char s[size] ;
if (fp1 == NULL)
{
printf("File cant be opened") ;
return ;
}
printf("Enter employee id to update : ") ;
scanf("%d", &id ) ;
emp3 = (struct emp *)malloc(1*sizeof(struct emp)) ;
emp3->name = (char *)malloc(size*sizeof(char)) ;
while( i <= count )
{
fread( &emp3->id, sizeof(emp3->id), 1, fp1 ) ;
fread( emp3->name, size, 1, fp1 ) ;
if ( id == emp3->id )
{
printf("Enter new name of emplyee to update : ") ;
scanf(" %[^\n]s", s ) ;
fseek( fp1, -204L, SEEK_CUR ) ;
fwrite( &emp3->id, sizeof(emp3->id), 1, fp1 ) ;
fwrite( s, size, 1, fp1 ) ;
flag = 1 ;
break ;
}
i++ ;
}
if (flag != 1)
{
printf("No employee record found") ;
flag = 0 ;
}
fclose(fp1) ;
free( emp3->name ) ;
free( emp3 ) ;
}