#include
#include
#include
#include
#include
union REGS i,o;
char *menu[]={"1.Add Records","2.Show Records","3.Modify Records",
	 "4.Del Records","5.Search Record","6.Exit"};
main()
{
 int gd=DETECT,gm,choice=1,width=0,i,count,sr=0;
 char **buffer;
 FILE *m,*t;
 char sname[20];
 long int size;
 char mrec;
	 struct cust
	{
	 char name[20];
	 int accno;
	 float balance;
	};
 struct cust s;
 m=fopen("C:\record.txt","rb+");
 if(m==NULL)
 {
	t=fopen("C:\record.txt","wb+");
	if(t==NULL)
	{ printf("Error in opening file ");
	 exit();
	}
 }
 size=sizeof(s);
 initgraph(&gd,&gm,"C:\Tc\Bgi");
 setbkcolor(1);
 setcolor(11);
 if(initmouse()==0)
 {
 printf("
Mouse driver not loaded...");
 exit();
 }
 count=sizeof(menu)/sizeof(char *);
 settextstyle(TRIPLEX_FONT,0,3);
 displaymenu(menu,count,10,10);
 for(i=0;i
 if(textwidth(menu[i])>width)
	 width=textwidth(menu[i]);
 }
// movemouseptr(&x1,&y1);
 buffer=malloc(sizeof(menu));
 savemenu(menu,buffer,width,count,10,10);
 showmouseptr();
 while (1)
 { displaymenu(menu,count,10,10);
	choice=getresponse(menu,buffer,width,count,10,10);
	gotoxy(50,15);
	 hidemouseptr();
	 switch (choice)
 {
	case 1 : cleardevice();
	 fseek(m,0,SEEK_END);
	 mrec='y';
	 gotoxy(1,1);
	 while(mrec=='y')
	 {
	 printf("
Enter the Name of the Custumer ");
	 scanf("%s",s.name);
	 printf("
Enter the Acc.no of the Custumer ");
	 scanf("%d",&s.accno);
	 printf("
Enter the Balance of the Custumer ");
	 scanf("%f",&s.balance);
	 fwrite(&s,size,1,m);
	 printf("
Are there more Records (Y/N)");
	 fflush(stdin);
	 mrec=getche();
	 } printf("Press any key to go back to menu");
	 cleardevice();
	 break;
	case 2: cleardevice();
	 rewind(m);
	 gotoxy(1,1);
	 printf("
			Name		Acc.No		Ammount Due
");
	 sr=0;
	 if(fread(&s,size,1,m)==1)
	 { rewind(m);
	 while(fread(&s,size,1,m)==1)
	 {
	 printf("
%30s%12d%23.2f",s.name,s.accno,s.balance);
	 sr++;
	 }
	 } else
	printf("			There is no record to Display");
	 printf("
		There are %d Records",sr);
	 printf("
Press any key to go back to menu");
	 getch();
	 cleardevice();
	 break;
	case 3: clearviewport();
	 mrec='y';
	 gotoxy(1,1);
	 while(mrec=='y')
	 {
	 printf("
Enter the name of Customer whose rec. is to be modified
");
	 scanf("%s",sname);
	 // gets(sname);
	 rewind(m);
	 while (fread(&s,size,1,m)==1)
	 { sr=0;
	 if( strcmp (s.name,sname)==0)
	 { sr=1;
	// printf("
Enter new name,Acc.no,Balance ");
	// scanf("%s%d%f",s.name,&s.rollno,&s.percent);
	 printf("
Enter the new Name of the Custumer ");
	 scanf("%s",s.name);
	 //	 gets(s.name);
	 printf("
Enter the new Acc.no of the Custumer ");
	 scanf("%d",&s.accno);
	 printf("
Enter the new Balance of the Custumer ");
	 scanf("%f",&s.balance);
	 fseek(m,-size,SEEK_CUR);
	 fwrite(&s,size,1,m);
	 break;
	 }
	 }
	 if(sr==0)
	printf("
	Record "%s" is not found",sname);
	 printf("
Modify more records (Y/N)");
	 fflush(stdin);
	 mrec=getche();
	 }
	clearviewport();
	break;
	case 4: clearviewport();
	 mrec='y';
	 gotoxy(1,1);
	 while(mrec=='y')
	 {
	 printf("
Enter the name of the Customer to delete the rec ");
	 scanf("%s",sname);
	 //	 gets(sname);
	 t=fopen("C:\stemp.txt","wb");
	 rewind (m);
	while(fread(&s,size,1,m)==1)
	{
	 if(strcmp(s.name,sname)!=0)
	fwrite(&s,size,1,t);
	}
	 fclose(m);
	 fclose(t);
	 remove("C:\record.txt");
	 rename("C:\stemp.txt","C:\record.txt");
	 m=fopen("C:\record.txt","rb+");
	 printf("Delete more records (Y/N)");
	 fflush(stdin);
	 mrec=getche();
	 } clearviewport();
	// displaymenu(menu,count,10,10);
	// getch();
	// choice=getresponse(menu,buffer,width,count,10,10);
	 break;
	case 5: clearviewport();
	 mrec='y';
	 gotoxy(1,1);
	 while(mrec=='y')
	 {
	 printf("
Enter the name of Customer whose rec. is to be Searched
");
	 scanf("%s",sname);
	// gets(sname);
	 rewind(m);
	 while (fread(&s,size,1,m)==1)
	 { sr=0;
	 if( strcmp (s.name,sname)==0)
	 {
	 // printf("
Enter new name,Acc.no,Balance");
	 // scanf("%s%d%f",s.name,&s.rollno,&s.percent);
	//	fseek(m,-size,SEEK_CUR);
	// fwrite(&s,size,1,m);
	 printf("
Record found");
	 printf("
			 Name		Acc.No		Ammount Due
");
	 printf("
%30s%12d%23.2f",s.name,s.accno,s.balance);
	 sr=1;
	 getch();
	 break;
	 }
	 }
	 if(sr==0)
	 printf("
	Record "%s" is not found",sname);
	 printf("
Search more records (Y/N)");
	 fflush(stdin);
	 mrec=getche();
	 }
	clearviewport();
	break;
	case 6:
	 fclose(m);
	 exit();
 }
 showmouseptr();
 }
}
displaymenu(char **menu,int count,int x1,int y1)
{
 int i,h;
 h=textheight(menu[0]);
 for(i=0;i
}
savemenu (char **menu,char **buffer,int width,int count,int x1,int y1)
{
 int i,x2,yy1,yy2,area,h;
 h=textheight(menu[0]);
 for(i=0;i
 x2=x1+width;
 yy1=y1+i*(h+5);
 yy2=y1+(i+1)*(h+5);
 area=imagesize(x1,yy1,x2,yy2);
 buffer[i]=malloc(area);
 getimage(x1,yy1,x2,yy2,buffer[i]);
 }
}
getresponse(char **menu,char **buffer,int width,int count,int x1,int 
y1)
{
 int choice=1,prevchoice=0,x,y,x2,y2,button;
 int in,i,h;
 h=textheight(menu[0]);
 y2=y1+count*(h+5);
 x2=x1+width;
 rectangle(x1-5,y1-5,x2+5,y2+5);
 while(1)
 {
	 getmousepos(&button,&x,&y);
 if (x>=x1&&x<=x2&&y>=y1&&y<=y2)
 {	in=1;
	 for(i=1;i<=count;i++)
	 {
	 if(y<=y1+i*(h+5))
	 { choice=i;
	break;
	 }
	 }
	 if(prevchoice!=choice)
	 {
	hidemouseptr();
	highlight(buffer,choice,h,x1,y1);
	 if(prevchoice)
	 dehighlight(buffer,prevchoice,h,x1,y1);
	 prevchoice=choice;
	 showmouseptr();
	 }
	if((button & 1)==1)
	 {
	while ((button & 1)==1)
	 getmousepos(&button,&x,&y);
	if(x>=x1&&x<=x2&&y>=y1&&y<=y2)
	return(choice);
	 }
	}
 else
 {
 if( in ==1)
 {
	in=0;
	prevchoice=0;
	hidemouseptr();
	dehighlight(buffer,choice,h,x1,y1);
	showmouseptr();
 }
 }
 }
}
highlight(char **buffer,int ch,int h,int x1,int y1)
{
 putimage(x1,y1+(ch-1)*(h+5),buffer[ch-1],NOT_PUT);
}
dehighlight(char **buffer,int ch,int h,int x1,int y1)
{
 putimage(x1,y1+(ch-1)*(h+5),buffer[ch-1],COPY_PUT);
}
/* initmouse */
initmouse()
{
 i.x.ax=0;
 int86 (0x33,&i,&o);
 return(o.x.ax);
}
/* displays mouse pointer */
showmouseptr()
{
 i.x.ax=1;
 int86(0x33,&i,&o);
}
hidemouseptr()
{
 i.x.ax=2;
 int86(0x33,&i,&o);
}
/*gets mouse coordinates and button status*/
getmousepos(int *button,int *x,int *y)
{
 i.x.ax=3;
 int86(0x33,&i,&o);
 *button=o.x.bx;
 *x=o.x.cx;
 *y=o.x.dx;
}
movemouseptr(int *x,int *y)
{
 i.x.ax=4;
 int86(0x33,&i,&o);
 o.x.cx=*x;
 o.x.dx=*y;
 return 0;
}