Hello, this demo shows you lots of example. Have fun!
It contains :
printf("\n1 Create");
printf("\n2 Display");
printf("\n3 Append");
printf("\n4 Number of records");
printf("\n5 Search");
printf("\n6 Update");
printf("\n7 Delete");
printf("\n8 Sort total on screen");
printf("\n9 Sort Total in File");
printf("\n10 Sort name on screen");
printf("\n0 Exit");
Source :
It contains :
printf("\n1 Create");
printf("\n2 Display");
printf("\n3 Append");
printf("\n4 Number of records");
printf("\n5 Search");
printf("\n6 Update");
printf("\n7 Delete");
printf("\n8 Sort total on screen");
printf("\n9 Sort Total in File");
printf("\n10 Sort name on screen");
printf("\n0 Exit");
Source :
C:
#include <stdio.h>
#include <stdlib.h>
typedef struct student
{
int rno;
char name[20];
struct subject
{
int scode;
char sname[20];
int mark;
}sub[3];
int total;
float per;
} student;
void create()
{
student* _student;
FILE* fp;
int n, i, j;
printf("Enter how many students you want : ");
scanf("%d", &n);
_student = (student*)calloc(n, sizeof(student));
fp = fopen("mystudents.txt", "w");
for (i = 0; i < n; i++)
{
_student[i].total = 0;
_student[i].per = 0;
printf("Enter Roll number: ");
scanf("%d", &_student[i]);
fflush(stdin);
printf("Enter name : ");
scanf("%[^\n]s", &_student[i].name);
for (j = 0; j < 3; j++)
{
printf("Enter marks of subject : %d", j + 1);
scanf("%d", &_student[i].sub[j].mark);
_student[i].total += _student[i].sub[j].mark;
}
_student[i].per = _student[i].total / 3.0;
fwrite(&_student[i], sizeof(student), 1, fp);
}
fclose(fp);
}
void display()
{
student _student;
FILE* fp;
fp = fopen("mystudents.txt", "r");
while (fread(&_student, sizeof(student), 1, fp))
{
printf("\n%-5d%-20s ", _student.rno, _student.name);
for (int j = 0; j < 3; j++)
{
printf("%4d", _student.sub[j].mark);
}
printf("%5d%7.2f", _student.total, _student.per);
}
fclose(fp);
}
void append()
{
student* _student = NULL;
FILE* fp;
int n, i, j;
printf("Enter how many students you want : ");
scanf("%d", &n);
_student = (student*)calloc(n, sizeof(student));
fp = fopen("mystudents.txt", "a");
for (i = 0; i < n; i++)
{
_student[i].total = 0;
_student[i].per = 0;
printf("Enter Roll number: ");
scanf("%d", &_student[i]);
fflush(stdin);
printf("Enter name : ");
scanf("%[^\n]s", _student[i].name);
for (j = 0; j < 3; j++)
{
printf("Enter marks of subject : %d", j + 1);
scanf("%d", &_student[i].sub[j].mark);
_student[i].total += _student[i].sub[j].mark;
}
_student[i].per = _student[i].total / 3.0;
fwrite(&_student[i], sizeof(student), 1, fp);
}
fclose(fp);
}
void numofrecord()
{
student _student;
FILE* fp;
fp = fopen("mystudents.txt", "r");
fseek(fp, 0, SEEK_END); // dosya sonuna kadar bak.
int n = ftell(fp) / sizeof(student);
printf("\n\n number of records = %d", n);
fclose(fp);
}
void search()
{
student _student;
FILE* fp;
int j, rno, found = 0;
fp = fopen("mystudents.txt", "r");
printf("Enter roll number to search : ");
scanf("%d", &rno);
while (fread(&_student, sizeof(student), 1, fp))
{
if (_student.rno == rno)
{
found = 1;
printf("\n%-5d%-20s", _student.rno, _student.name);
for (j = 0; j < 3; j++)
printf("%4d", _student.sub[j].mark);
printf("%5d%7.2f", _student.total, _student.per);
}
}
if (!found)
printf("\n Record not found\n");
fclose(fp);
}
void update()
{
student _student;
FILE* fp, * fp1;
int j, rno, found = 0;
fp = fopen("mystudents.txt", "r");
fp1 = fopen("temp.txt", "w");
printf("Enter roll number to update : ");
scanf("%d", &rno);
while (fread(&_student, sizeof(student), 1, fp))
{
if (_student.rno == rno)
{
_student.total = 0;
_student.per = 0;
found = 1;
fflush(stdin);
printf("Enter new name : ");
scanf("%[^\n]s", _student.name);
for (j = 0; j < 3; j++)
{
printf("Enter new marks of subject %d : ", j + 1);
scanf("%d", &_student.sub[j].mark);
_student.total += _student.sub[j].mark;
}
_student.per = _student.total / 3.0;
}
fwrite(&_student, sizeof(student), 1, fp1);
}
fclose(fp);
fclose(fp1);
if (found)
{
fp1 = fopen("temp.txt", "r");
fp = fopen("mystudents.txt", "w");
while (fread(&_student, sizeof(student), 1, fp1))
{
fwrite(&_student, sizeof(student), 1, fp);
}
fclose(fp);
fclose(fp1);
}
else
{
printf("\nRecord not found\n");
}
}
void delete_rec()
{
student _student;
FILE* fp, * fp1;
int j, rno, found = 0;
fp = fopen("mystudents.txt", "r");
fp1 = fopen("temp.txt", "w");
printf("Enter roll number to delete : ");
scanf("%d", &rno);
while (fread(&_student, sizeof(student), 1, fp))
{
if (_student.rno == rno)
{
found = 1;
}
else
{
fwrite(&_student, sizeof(student), 1, fp1);
}
}
fclose(fp);
fclose(fp1);
if (found)
{
fp1 = fopen("temp.txt", "r");
fp = fopen("mystudents.txt", "w");
while (fread(&_student, sizeof(student), 1, fp1))
{
fwrite(&_student, sizeof(student), 1, fp);
}
fclose(fp);
fclose(fp1);
}
else
{
printf("\nRecord not found\n");
}
}
void sortTotalOnScreen()
{
student *_student, _studentTemp;
FILE *fp = fopen("mystudents.txt","r");
fseek(fp,0,SEEK_END); //baştan sona kadar git
int n = ftell(fp) / sizeof(student); // Eleman sayısını al
_student=(student*)calloc(n,sizeof(student));
rewind(fp); // imleci dosya başına al.
for(int i=0;i<n;i++)
fread(&_student[i],sizeof(student),1,fp);
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
if(_student[i].total < _student[j].total)
{
_studentTemp = _student[i];
_student[i] = _student[j];
_student[j] = _studentTemp;
}
}
}
for(int i = 0; i < n;i++)
{
printf("\n%-5d%-20s",_student[i].rno,_student[i].name);
for(int j = 0; j < 3;j++)
printf("%4d",_student[i].sub[j].mark);
printf("%5d%7.2f",_student[i].total,_student[i].per);
}
fclose(fp);
}
void sortTotalInFile()
{
student *_student, _studentTemp;
FILE *fp = fopen("mystudents.txt","r");
fseek(fp,0,SEEK_END); //baştan sona kadar git
int n = ftell(fp) / sizeof(student); // Eleman sayısını al
_student=(student*)calloc(n,sizeof(student));
rewind(fp); // imleci dosya başına al.
for(int i=0;i<n;i++)
fread(&_student[i],sizeof(student),1,fp);
fclose(fp);
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
if(_student[i].total < _student[j].total)
{
_studentTemp = _student[i];
_student[i] = _student[j];
_student[j] = _studentTemp;
}
}
}
fp=fopen("mystudents.txt","w");
for(int i = 0; i < n;i++)
{
printf("\n%-5d%-20s",_student[i].rno,_student[i].name);
for(int j = 0; j < 3;j++)
printf("%4d",_student[i].sub[j].mark);
printf("%5d%7.2f",_student[i].total,_student[i].per);
fwrite(&_student,sizeof(student),1,fp);
}
fclose(fp);
}
void sortNameOnScreen()
{
student *_student, _studentTemp;
FILE *fp = fopen("mystudents.txt","r");
fseek(fp,0,SEEK_END); //baştan sona kadar git
int n = ftell(fp) / sizeof(student); // Eleman sayısını al
_student=(student*)calloc(n,sizeof(student));
rewind(fp); // imleci dosya başına al.
for(int i=0;i<n;i++)
fread(&_student[i],sizeof(student),1,fp);
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
if(strcmp(_student[i].name < _student[j].name) > 0 )
{
_studentTemp = _student[i];
_student[i] = _student[j];
_student[j] = _studentTemp;
}
}
}
for(int i = 0; i < n;i++)
{
printf("\n%-5d%-20s",_student[i].rno,_student[i].name);
for(int j = 0; j < 3;j++)
printf("%4d",_student[i].sub[j].mark);
printf("%5d%7.2f",_student[i].total,_student[i].per);
}
fclose(fp);
}
int main(int argc, char const* argv[])
{
int ch;
do
{
printf("\n1 Create");
printf("\n2 Display");
printf("\n3 Append");
printf("\n4 Number of records");
printf("\n5 Search");
printf("\n6 Update");
printf("\n7 Delete");
printf("\n8 Sort total on screen");
printf("\n9 Sort Total in File");
printf("\n10 Sort name on screen");
printf("\n0 Exit");
printf("\nEnter your choice : ");
scanf("%d", &ch);
switch (ch)
{
case 1:
create();
break;
case 2:
display();
break;
case 3:
append();
break;
case 4:
numofrecord();
break;
case 5:
search();
break;
case 6:
update();
break;
case 7:
delete_rec();
break;
case 8:
sortTotalOnScreen();
break;
case 9:
sortTotalInFile();
break;
case 10:
sortNameOnScreen();
break;
case 0:
exit(1);
break;
default:
printf("Type a valid number :");
break;
}
} while (ch != 0);
return 0;
}