// Simple Index Files // Gaurang Sinha // gaurang85@rediffmail.com // gaurang.cjb.net -or- gaurang85.tripod.com #include #include #include struct student{ char name[20]; int roll,age,marks; }db; struct index{ int roll,flag; long offset; }index,tempi; void add(),del(),sort(),modify(),search(),disp(); FILE *fp; FILE *ind; int main() { int s; if(!(fopen("data.dat","r"))) fp=fopen("data.dat","w"); if(!(fopen("index.dat","r"))) ind=fopen("index.dat","w"); fcloseall(); A: clrscr(); printf( "\n\t\tMENU" "\n\t1. Add Record" "\n\t2. Delete Record" "\n\t3. Modify Record" "\n\t4. Search Record" "\n\t5. Display Records" "\n\t6. Exit" "\n\t::> "); scanf("%d",&s); if(s==6)return 0; switch(s) { case 1: add(); goto A; case 2: del(); goto A; case 3: modify(); goto A; case 4: search(); goto A; case 5: disp(); goto A; default: goto A; } } void add() { long offset; fp=fopen("data.dat","rb+"); if(!fp){printf("\nError Opening DataBase File !");getch();return;} ind=fopen("index.dat","rb+"); if(!ind){printf("\nError Opening Index File !");getch();return;} printf("\n\n\tEnter Following Data"); printf("\nName : "); scanf("%s",db.name); printf("\nRoll No : "); scanf("%d",&db.roll); printf("\nAge : "); scanf("%d",&db.age); printf("\nMarks : "); scanf("%d",&db.marks); fseek(fp,0,SEEK_END); //Goto End Of File offset=ftell(fp); //Get The Offset Value fwrite(&db,sizeof(db),1,fp); fclose(fp); index.roll=db.roll; index.offset=offset; index.flag=1; fseek(ind,0,SEEK_END); //Goto End Of Index File fwrite(&index,sizeof(index),1,ind); fclose(ind); sort(); } void sort() { int i,j,max=0; ind=fopen("index.dat","rb+"); if(!ind){printf("\nError Opening Index File !");getch();return;} while(fread(&index,sizeof(index),1,ind)) max++; rewind(ind); for(i=0;itempi.roll) { fseek(ind,j*sizeof(index),SEEK_SET); fwrite(&tempi,sizeof(index),1,ind); fseek(ind,(j+1)*sizeof(index),SEEK_SET); fwrite(&index,sizeof(index),1,ind); } } } } fclose(ind); } void modify() { int roll,flg; printf("\nEnter Roll No : "); scanf("%d",&roll); fp=fopen("data.dat","rb+"); if(!fp){printf("\nError Opening DataBase File !");getch();return;} ind=fopen("index.dat","rb+"); if(!ind){printf("\nError Opening Index File !");getch();return;} while(fread(&index,sizeof(index),1,ind)) { if((index.roll==roll)&&(index.flag==1)) { flg=1;break; } } if(flg) { db.roll=roll; printf("\n\n\tReEnter Following Data for RollNo %d",roll); printf("\nName : "); scanf("%s",db.name); printf("\nAge : "); scanf("%d",&db.age); printf("\nMarks : "); scanf("%d",&db.marks); fseek(fp,index.offset,SEEK_SET); fwrite(&db,sizeof(db),1,fp); } else printf("\n\nNo Such Record Found !!!"); fcloseall(); } void search() { int roll,flg=0; printf("\nEnter Roll No : "); scanf("%d",&roll); fp=fopen("data.dat","rb+"); if(!fp){printf("\nError Opening DataBase File !");getch();return;} ind=fopen("index.dat","rb+"); if(!ind){printf("\nError Opening Index File !");getch();return;} while(fread(&index,sizeof(index),1,ind)) { if((index.roll==roll)&&(index.flag==1)) { flg=1;break; } } if(flg) { fseek(fp,index.offset,SEEK_SET); fread(&db,sizeof(db),1,fp); printf("\n\n\tRecord Found !!!"); printf("\nName : %s",db.name); printf("\nRoll No : %d",db.roll); printf("\nAge : %d",db.age); printf("\nMarks : %d",db.marks); fcloseall(); } else printf("\n\nNo Such Record Found !!!"); getch(); } void del() { char c; int roll,flg=0; printf("\nEnter Roll No : "); scanf("%d",&roll); fp=fopen("data.dat","rb+"); if(!fp){printf("\nError Opening DataBase File !");getch();return;} ind=fopen("index.dat","rb+"); if(!ind){printf("\nError Opening Index File !");getch();return;} while(fread(&index,sizeof(index),1,ind)) { if((index.roll==roll)&&(index.flag==1)) { flg=1;break; } } if(flg) { fseek(fp,index.offset,SEEK_SET); fread(&db,sizeof(db),1,fp); printf("\nName : %s",db.name); printf("\nRoll No : %d",db.roll); printf("\nAge : %d",db.age); printf("\nMarks : %d",db.marks); printf("\n\nAre You Sure You Want To Delete This Record ? "); c=getche(); if(c=='y'||c=='Y') { fseek(ind,-(long)sizeof(index),SEEK_CUR); index.flag=0; fwrite(&index,sizeof(index),1,ind); printf("\n\nRecord Successfully Deleted !!!"); } } else printf("\n\nNo Such Record Found !!!"); getch(); } void disp() { fp=fopen("data.dat","rb+"); if(!fp){printf("\nError Opening DataBase File !");getch();return;} ind=fopen("index.dat","rb+"); if(!ind){printf("\nError Opening Index File !");getch();return;} printf("\n\n\tRollNo\tName\t\tAge\tMarks"); while(fread(&index,sizeof(index),1,ind)) { fseek(fp,index.offset,SEEK_SET); fread(&db,sizeof(db),1,fp); if(index.flag==1) printf("\n\t %d\t%s\t\t %d\t %d", db.roll,db.name,db.age,db.marks); } fcloseall(); getch(); }