Code:
#include<stdio.h>
struct student
{
int rollno;
char name[30];
float mark;
}stud;
// FUNCTION TO INSERT RECORDS TO THE FILE
void insert()
{
FILE *fp;
fp = fopen("Record.dat", "a");
printf("Enter the Roll no :");
scanf("%d", &stud.rollno);
printf("Enter the Name :");
scanf("%s", &stud.name);
printf("Enter the mark :");
scanf("%f", &stud.mark);
fwrite(&stud, sizeof(stud), 1, fp);
printf("\nRECORD ADDED");
fclose(fp);
}
// FUNCTION TO DISPLAY RECORDS
void display()
{
FILE *fp1;
fp1 = fopen("Record.dat", "r");
printf("\nRoll Number\tName\tMark\n\n");
while (fread(&stud, sizeof(stud), 1, fp1))
printf(" %d\t\t%s\t%.2f\n", stud.rollno, stud.name, stud.mark);
fclose(fp1);
}
// FUNCTION TO SEARCH THE GIVEN RECORD
void search()
{
FILE *fp2;
int r, s, avl;
printf("\nEnter the Roll no you want to search :");
scanf("%d", &r);
avl = avlrollno(r);
if (avl == 0)
printf("Roll No %d is not available in the file\n",r);
else
{
fp2 = fopen("Record.dat", "r");
while (fread(&stud, sizeof(stud), 1, fp2))
{
s = stud.rollno;
if (s == r)
{
printf("\nRoll no = %d", stud.rollno);
printf("\nName = %s", stud.name);
printf("\nMark = %.2f\n", stud.mark);
}
}
fclose(fp2);
}
}
// FUNCTION TO DELETE A RECORD
void deletefile()
{
FILE *fpo;
FILE *fpt;
int r, s;
printf("Enter the Roll no you want to delete :");
scanf("%d", &r);
if (avlrollno(r) == 0)
{
printf("Roll no %d is not available in the file\n", r);
}
else
{
fpo = fopen("Record.dat", "r");
fpt = fopen("TempFile.dat", "w");
while (fread(&stud, sizeof(stud), 1, fpo))
{
s = stud.rollno;
if (s != r)
fwrite(&stud, sizeof(stud), 1, fpt);
}
fclose(fpo);
fclose(fpt);
fpo = fopen("Record.dat", "w");
fpt = fopen("TempFile.dat", "r");
while (fread(&stud, sizeof(stud), 1, fpt))
{
fwrite(&stud, sizeof(stud), 1, fpo);
printf("\nRECORD DELETED\n");
}
fclose(fpt);
fclose(fpo);
}
}
// FUNCTION TO UPDATE THE RECORD
void update()
{
int avl;
FILE *fpt;
FILE *fpo;
int s, r, ch;
printf("Enter roll number to update:");
scanf("%d", &r);
avl = avlrollno(r);
if (avl == 0)
{
printf("Roll number %d is not Available in the file", r);
}
else
{
fpo = fopen("Record.dat", "r");
fpt = fopen("TempFile.dat", "w");
while (fread(&stud, sizeof(stud), 1, fpo))
{
s = stud.rollno;
if (s != r)
fwrite(&stud, sizeof(stud), 1, fpt);
else
{
printf("\n\t1. Update Name of Roll Number %d", r);
printf("\n\t2. Update Mark of Roll Number %d", r);
printf("\n\t3. Update both Name and Mark of Roll Number %d", r);
printf("\nEnter your choice:");
scanf("%d", &ch);
switch (ch)
{
case 1:
printf("Enter Name:");
scanf("%s", &stud.name);
break;
case 2:
printf("Enter Mark : ");
scanf("%f", &stud.mark);
break;
case 3:
printf("Enter Name: ");
scanf("%s", &stud.name);
printf("Enter Mark: ");
scanf("%f", &stud.mark);
break;
default:
printf("Invalid Selection");
break;
}
fwrite(&stud, sizeof(stud), 1, fpt);
}
}
fclose(fpo);
fclose(fpt);
fpo = fopen("Record.dat", "w");
fpt = fopen("TempFile.dat", "r");
while (fread(&stud, sizeof(stud), 1, fpt))
{
fwrite(&stud, sizeof(stud), 1, fpo);
}
fclose(fpt);
fclose(fpo);
printf("RECORD UPDATED");
}
}
/* FUNCTION TO SORT THE RECORD */
void sort()
{
int a[20];
int count = 0;
int i,j,t,c;
FILE *fpo;
fpo = fopen("Record.dat","r");
while(fread(&stud,sizeof(stud),1,fpo))
{
a[count]=stud.rollno;
count++;
}
c = count;
for(i=0;i<count-1;i++)
{
for(j=i+1;j<count;j++)
{
if(a[i]>a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
printf("Roll no.\tName\tMark\n\n");
count =c;
for(i=0;i<count;i++)
{
rewind(fpo);
while(fread(&stud,sizeof(stud),1,fpo))
{
if(a[i]==stud.rollno)
{
printf("\n%d\t\t%s\t\t%2f",stud.rollno,stud.name,stud.mark);
}
}
}
}
// FUNCTION TO CHECK GIVEN ROLL NO IS AVAILABLE //
int avlrollno(int rno)
{
FILE *fp;
int c = 0;
fp = fopen("Record.dat", "r");
while (!feof(fp))
{
fread(&stud, sizeof(stud), 1, fp);
if (rno == stud.rollno)
{
fclose(fp);
return 1;
}
}
fclose(fp);
return 0;
}
//FUNCTION TO CHECK THE FILE IS EMPTY OR NOT
int empty()
{
int c = 0;
FILE *fp;
fopen("Record.dat","r");
while(fread(&stud,sizeof(stud),1,fp))
{
c = 1;
fclose(fp);
return c;
}
}
int main()
{
//insert();
//display();
//search();
//deletefile();
//update();
//sort();
int c,emp;
do
{
printf("\n\t----Select your Choice----------------\n");
printf("\n\t1.INSERT\n\t2.DISPLAY\n\t3.SEARCH");
printf("\n\t4.DELETE\n\t5.UPDATE\n\t6.SORT");
printf("\n\t7.EXIT");
printf("\n\n--------------------------------------\n");
printf("\nEnter Your Choice:");
scanf("%d",&c);
printf("\n");
switch(c)
{
case 1:
insert();
break;
case 2:
emp=empty();
if(emp==0)
{
printf("\nTHE FILE IS EMPTY\n");
}
else
{
display();
break;
}
case 3:
search();
break;
case 4:
deletefile();
break;
case 5:
update();
break;
case 6:
emp=empty();
if(emp==0)
{
printf("\nTHE FILE IS EMPTY\n");
}
else
{
sort();
break;
}
case 7:
exit(1);
break;
default:
printf("\nYour Choice is wrong\nPlease Try Again\n");
break;
}
}while(c!=7);
return 0;
}
and in the tutorial itself there is no fclose for while loop in sort function