/*Programa creado por Guillermo Barrera Granados del 5108
IPN CECYT 8 */
/*De ancho tiene un tamaño de 80*/
/*De alto son 49*/
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
int ila=0;
struct dinero{
       long int b1000;
       long int b500;
       long int b200;
       long int b100;
       long int b50;
       long int tot;
       }din_caj,tot;
struct cuenta{
      int nip;
      float saldo;
      int cuenta;
      }banca[1000];
void banco (void);
void llenar (void);
void cuentas (void);
void usuario (void);
void marco (void);
void borra (void);
void letras (void);
void ast (void);
void llenar (void);
void dar (int);
void aut (void);
int main (void)
{

textcolor(WHITE);
    unsigned char op1;
    unsigned char op2;

    aut();
    marco();
    letras();
    do{
    textcolor(WHITE);
    borra();
    gotoxy(20,20);
    printf("MENU PRINCIPAL DEL CAJERO AUTOMATICO");

     gotoxy(5,12);
    printf("Programa creado por Barrera Granados Guillermo Alejandro del 5108");
    gotoxy(20,21);
    printf("1  --  Menu del administrador del cajero");
    gotoxy(20,22);
    printf("2  --  Iniciar servicio del cajero");
    gotoxy(20,23);
    op1=getch();
    switch(op1)
    {
       case 49: banco();
		break;
       case 50: usuario();
		break;
       default: {
		  gotoxy(20,24);
		  printf("Opcion no valida");}
    }
    borra();
    gotoxy(20,26);
    printf("¿Desea ir al menu principal del cajero?");
    gotoxy(20,27);
    printf("s/n");
    gotoxy(20,28);
    op2=getch();
    }while(op2==83||op2==115);
    return 0;
}

void  marco (void)
{

      clrscr();
      int x,y,i;
      for(x=1;x<=80;x++)
      {
	 for(y=1;y<=49;y++)
	 {
	   if(x==1&&y==1)
	   {
	     gotoxy(x,y);
	     printf("%c",201);
	     }
	   else
	   {
	       if(x==80&&y==1)
	       {
		 gotoxy(x,y);
		 printf("%c",187);
	       }
	       else
	       {
		   if(x==1&&y==49)
		   {
		     gotoxy(x,y);
		     printf("%c",200);
		   }
		   else
		   {
		       if(y==49&&x==80)
		       {
			 gotoxy(x,y);
			 printf("%c",188);
		       }
		       else
		       {
			   if(y==1||y==49)
			   {
			     gotoxy(x,y);
			     printf("%c",205);
			   }
			   else
			   {
			       if(x==1||x==80)
			       {
				 gotoxy(x,y);
				 printf("%c",186);
				 }
			   }
		   }
	   }
	   }
	   }
	   }
	   }
	   gotoxy(2,2);
}//FIN
void ast (void)
{
  printf("+");
}
void letras (void)
{
textcolor(WHITE);
gotoxy(23,6);
ast();
gotoxy(23,7);
ast();
gotoxy(24,5);
ast();
gotoxy(24,6);
ast();
gotoxy(24,7);
ast();
gotoxy(24,8);
ast();
gotoxy(25,4);
ast();
gotoxy(25,5);
ast();
gotoxy(25,8);
ast();
gotoxy(25,9);
ast();
gotoxy(26,4);
ast();
gotoxy(26,9);
ast();
gotoxy(27,5);
ast();
gotoxy(27,8);
ast();
gotoxy(29,8);
ast();
gotoxy(29,9);
ast();
gotoxy(30,6);
ast();
gotoxy(30,7);
ast();
gotoxy(30,8);
ast();
gotoxy(31,4);
ast();
gotoxy(31,5);
ast();
gotoxy(31,8);
ast();
gotoxy(32,6);
ast();
gotoxy(32,7);
ast();
gotoxy(32,8);
ast();
gotoxy(33,8);
ast();
gotoxy(33,9);
ast();
gotoxy(35,7);
ast();
gotoxy(36,8);
ast();
gotoxy(37,9);
ast();
gotoxy(38,8);
ast();
gotoxy(38,7);
ast();
gotoxy(38,6);
ast();
gotoxy(38,5);
ast();
gotoxy(38,4);
ast();
gotoxy(37,4);
ast();
gotoxy(36,4);
ast();
gotoxy(39,4);
ast();
gotoxy(40,4);
ast();
gotoxy(42,4);
ast();
gotoxy(42,5);
ast();
gotoxy(42,6);
ast();
gotoxy(42,7);
ast();
gotoxy(42,8);
ast();
gotoxy(42,9);
ast();
gotoxy(43,4);
ast();
gotoxy(43,6);
ast();
gotoxy(43,9);
ast();
gotoxy(44,4);
ast();
gotoxy(44,9);
ast();
gotoxy(46,4);
ast();
gotoxy(46,5);
ast();
gotoxy(46,6);
ast();
gotoxy(46,7);
ast();
gotoxy(46,8);
ast();
gotoxy(46,9);
ast();
gotoxy(47,4);
ast();
gotoxy(47,6);
ast();
gotoxy(48,4);
ast();
gotoxy(48,6);
ast();
gotoxy(48,7);
ast();
gotoxy(48,8);
ast();
gotoxy(49,5);
ast();
gotoxy(49,9);
ast();
gotoxy(51,6);
ast();
gotoxy(51,7);
ast();
gotoxy(52,5);
ast();
gotoxy(52,8);
ast();
gotoxy(53,4);
ast();
gotoxy(53,9);
ast();
gotoxy(54,5);
ast();
gotoxy(54,8);
ast();
gotoxy(55,6);
ast();
gotoxy(55,7);
ast();
gotoxy(2,13);


}

void borra (void)
{
     textcolor(WHITE);
     int x,y;
     for(x=2;x<80;x++)
     {
       for(y=11;y<49;y++)
       {
	 gotoxy(x,y);
	 printf(" ");
       }
     }
}
void banco (void)
{
     textcolor(WHITE);
     borra();
     unsigned char op1;
     gotoxy(20,20);
     printf("MENU ADMINISTRADOR");
     gotoxy(20,21);
     printf("1  --  Llenar cajero");
     gotoxy(20,22);
     printf("2  --  Administrar cuentas");
     gotoxy(20,23);
     op1=getch();
     switch(op1)
     {
       case 49: llenar();
		break;
       case 50: cuentas();
		break;
       default: {
		  gotoxy(20,24);
		  printf("Opcion no valida");
		}
     }
}

void usuario (void)
{
     textcolor(WHITE);
     int cuen,nip,i,act;
     unsigned char op;
     do{
     borra();
     act=-1;
     gotoxy(20,20);
     printf("INGRESE SU CUENTA");
     gotoxy(20,21);
     scanf("%d",&cuen);
     gotoxy(20,22);
     printf("INGRESE SU NIP");
     gotoxy(20,23);
     textcolor(BLACK);
     cscanf("%d",&nip);
     for(i=0;i<1000;i++)
     {
       if(banca[i].nip==nip&&banca[i].cuenta==cuen)
	 act=i;
     }
     if(act!=-1)
     {
	  dar(act);
     }
     else
     {
       gotoxy(20,24);
       printf("Cuenta o nip no valida");
       getch();
     }
     gotoxy(20,48);
     op=getch();

     }while(op!=83&&op!=115);
}


void llenar (void)
{
     borra();
     unsigned char o;
     gotoxy(20,20);
     printf("MENU DE LLENADO DE CAJERO");
     gotoxy(20,21);
     printf("Ingresa la cantidad de billetes de 50");
     gotoxy(20,22);
     scanf("%d",&din_caj.b50);
     gotoxy(20,23);
     printf("Ingresa la cantidad de billetes de 100");
     gotoxy(20,24);
     scanf("%d",&din_caj.b100);
     gotoxy(20,25);
     printf("Ingresa la cantidad de billetes de 200");
     gotoxy(20,26);
     scanf("%d",&din_caj.b200);
     gotoxy(20,27);
     printf("Ingresa la cantidad de billetes de 500");
     gotoxy(20,28);
     scanf("%d",&din_caj.b500);
     gotoxy(20,29);
     printf("Ingresa la cantidad de billetes de 1000");
     gotoxy(20,30);
     scanf("%d",&din_caj.b1000);
     din_caj.tot=(din_caj.b50*50)+(din_caj.b100*100)+(din_caj.b200*200)+(din_caj.b500*500)+(din_caj.b1000*1000);
     gotoxy(20,31);
     printf("El cajero tiene un total de %d pesos",din_caj.tot);
     getch();
}

void cuentas (void)
{
     float aux;
     unsigned char op;
     do
     {
       borra();
       gotoxy(20,20);
       printf("Asigne el numero de cuenta");
       gotoxy(20,21);
       scanf("%d",&banca[ila].cuenta);
       gotoxy(20,22);
       printf("Asigne el nip");
       gotoxy(20,23);
       scanf("%d",&banca[ila].nip);
       gotoxy(20,24);
       printf("Asigne el saldo");
       gotoxy(20,25);
       scanf("%f",&aux);
       banca[ila].saldo=aux;
       gotoxy(20,26);
       printf("Desea crear otra cuenta");
       gotoxy(20,27);
       printf("S / N");
       gotoxy(20,28);
       op=getch();
       ila=ila+1;
     }while(op==83||op==115);
}

void dar (int pos)
{
     float ret,dis,res,i,re,saldo;
    int n1000,n500,n200,n100,n50;
     unsigned char op;
     n1000=0;
     n500=0;
     n200=0;
     n100=0;
     n50=0;
     borra();
     gotoxy(20,20);
     printf("Su saldo es %.2f",banca[pos].saldo);
     dis=banca[pos].saldo;
     re=dis;
     i=0;
     while(dis>=50)
     {
       dis=dis-50;
       i=i+1;
     }
     res=i*50;
     re=res;
     gotoxy(20,21);
     printf("Su saldo disponible el dia de hoy es %.0f",re);
     gotoxy(20,22);
     gotoxy(20,23);
     printf("");
     gotoxy(20,24);
     
       gotoxy(20,25);
       printf("Ingrese la cantidad a retirar");
       gotoxy(20,26);
       scanf("%f",&ret);
       if(ret>re||ret>din_caj.tot)
       {
	 gotoxy(20,27);
	 printf("Cantidad no valida");
	 getch();
       }
       else
       {
       saldo=banca[pos].saldo;
       saldo=saldo-(ret);
       banca[pos].saldo=saldo;
	   tot.tot=ret;
	   while(ret>=1000)
	   {
	     ret=ret-1000;
	     n1000=n1000+1;
	   }

	   while(ret>=500)
	   {
	     ret=ret-500;
	     n500=n500+1;
	   }

	   while(ret>=200)
	   {
	     ret=ret-200;
	     n200=n200+1;
	   }

	   while(ret>=100)
	   {
	     ret=ret-100;
	     n100=n100+1;
	   }

	   while(ret>=50)
	   {
	     ret=ret-50;
	     n50=n50+1;
	   }
	   if(din_caj.b50>=n50&&din_caj.b100>=n100&&din_caj.b200>=n200&&din_caj.b500>=n500&&din_caj.b1000>=n1000)
	   {
	din_caj.b50=din_caj.b50-n50;
	din_caj.b100=din_caj.b100-n100;
	din_caj.b200=din_caj.b200-n200;
	din_caj.b500=din_caj.b500-n500;
	din_caj.b1000=din_caj.b1000-n1000;

	   gotoxy(20,28);
	   printf("Se entregaran los siguiente billetes");
	   gotoxy(20,30);
	   printf("%d billetes de 1000 pesos",n1000);
	   gotoxy(20,31);
	   printf("%d billetes de 500 pesos",n500);
	   gotoxy(20,32);
	   printf("%d billetes de 200 pesos",n200);
	   gotoxy(20,33);
	   printf("%d billetes de 100 pesos",n100);
	   gotoxy(20,34);
	   printf("%d billetes de 50 pesos   Su nuevo saldo es de %.2f",n50,banca[pos].saldo);
	getch();
    }
    else
    {
	 gotoxy(20,28);
	 printf("Cantidad de dinero insuficiente");
	 getch();



}
}     }

void aut (void)
{
 int con;
 for(con=0;con<1000;con++)
 {
   banca[con].saldo=1000+con+(con*4)-(con);
   banca[con].nip=con+1000;
   banca[con].cuenta=con+1000;
}

}














