//*************Fecha.java****************



class Fecha{	

private int d,m,a; //representacin: da, mes y ao

public Fecha()		{ d=1; m=1; a=1 }

public Fecha(Fecha x)	{ d=x.d; m=x.m; a=x.a; }

public Fecha(int x,int y,int z){

	d=x; m=y; a=z; 

	if(!ok())

		error(fecha incorrecta);

}

public Fecha(String x){

	int i=x.indexOf(/), j;

	if( i<0 || (j=x.indexOf(/,i+1))<0) 

		error(fecha incorrecta);

     	d = Integer.parseInt(x.substring(0,i));

	m = Integer.parseInt(x.substring(i+1,j));

	a = Integer.parseInt(x.substring(j+1));

	if(!ok())

		error(fecha incorrecta);

}

public int dia(){return d;}

public int mes(){return m;}

public int ao(){return a;}

public void copiar(Fecha x){ 

	d=x.d; m=x.m; a=x.a; 

}

public String toString(){

	return (d<10?0:)+d+"/"+(m<10?0:)+m+/+a;

}

public int comparar(Fecha x){

	if( a < x.a ) return 1;

  	if( a > x.a ) return 1;

  	if( m < x.m ) return 1;

  	if( m > x.m ) return 1;

  	return d  x.d;

}

public int difAos(Fecha x){

  	Fecha max, min;

  	if( comparar(x) >= 0 ){

    		max=new Fecha(d,m,a); min=new Fecha(x.d,x.m.x.a);

  	}else{

    		min=new Fecha(d,m,a); max=new Fecha(x.d,x.m.x.a);

  	} 

  	return max.a  min.a  

  		(a==x.a ||  min.m<max.m || min.m==max.m && min.d<=max.d ? 0: 1);

}

private boolean ok(){

  	int max=0;

  	switch(m){

  		case 1: case 3: case 5: case 7: case 8: case 10: case 12: max=31; break;

  		case 4: case 6: case 9: case 11: max=30; break;

  		case 2: max = ( a%4==0 && a%100!=0 || a%400==0 ? 29: 28);

  	}

  	return a>0 && 1<=d && d<=max;

}

static public void error(String x){

  	System.out.println(x); 

	System.exit(0); //abortar (terminar) programa

}

}





//*************Cuenta.java****************

import java.io.*;



class Cuenta

{

	//representacion

	protected int numeroCuenta, numeroSecreto, saldo;

	

	public Cuenta()

	{	numeroSecreto=-1;

		numeroCuenta=-1;

		saldo=-1;

	}

	

	public Cuenta(int ncuenta, int nsecret)

	{	numeroCuenta=ncuenta;

		numeroSecreto=nsecret;

		saldo=0;	

	}

	

	public boolean verificar(int k)

	{	if(numeroSecreto==k)

			return true;

		return false;

	}

	

	public void depositar(int P)

	{	saldo+=P;

		return;

	}

	

	public boolean girar(int P)

	{	if(saldo < P)

			return false;

		saldo-=P;

		return true;

	}

	

	public int consultar()

	{	return saldo;

	}

		

}



//*************Cuenta1.java****************

import java.io.*;



public class Cuenta1 extends Cuenta

{

	public Cuenta1( int j , int k )

	{	saldo=0;

		numeroSecreto=k;

		numeroCuenta=j;

	}

	

	

	public boolean girar(int P)

	{	saldo-=P;

		return true;

	}	

	

}



//*************Cajero.java****************

// probar con numeros entre 1000000000 y 2147483647 parano salirse del rango int



import java.awt.*;

import java.io.*;

import java.awt.event.*;

import Cuenta;

import Cuenta1;



class Cajero extends Frame implements ActionListener

{	private Label L1=new Label("N Cuenta");

	private Label L2=new Label("N Secreto");



	private TextField nCuenta=new TextField("");

	private TextField nSecreto=new TextField("");



	private Button Saldo=new Button("Saldo?");

	private Button Girar=new Button("Girar");

	private Button Depositar=new Button("Depositar");

	private Button salir=new Button("Salir");

	

	private Label Monto=new Label("Monto?");

	private Label saldo=new Label("Saldo=");

	private Label Respuesta=new Label("");



	private TextField plata=new TextField("");



	static public void main(String[] args)throws IOException

	{

		new Cajero().show();

	}



	public Cajero()throws IOException

	{	Panel p1 = new Panel();

		p1.setLayout(new GridLayout(1,4) );

		p1.add(L1);p1.add(nCuenta);p1.add(L2);p1.add(nSecreto);

	

		Panel p2 = new Panel();

		p2.setLayout(new GridLayout(1,4) );

		p2.add(Saldo);p2.add(Girar);p2.add(Depositar);p2.add(salir);



		Panel p3 = new Panel();

		p3.setLayout(new GridLayout(1,4) );

		p3.add(Monto);p3.add(plata);p3.add(saldo);p3.add(Respuesta);

	

		setSize(500,115 );

		setLayout(new GridLayout(3,1) );

		add(p1);add(p2);add(p3);

		

		Saldo.addActionListener(this);

		Girar.addActionListener(this);

		Depositar.addActionListener(this);

		salir.addActionListener(this);

	}



	static String linC;



	public void actionPerformed( ActionEvent x )

	{	

		String a = nCuenta.getText();

		String b = nSecreto.getText();

	

		if( x.getSource() == salir )

			System.exit(0);	

		try

		{

			if( ! buscaCuenta(a) )

			{	Respuesta.setText("Cuenta Invalida");

				return;	

			}



			int tipo=Integer.parseInt(linC.substring(0,1) );

			int secret=Integer.parseInt( linC.substring(1,5) );

			int cuen=Integer.parseInt( linC.substring(5,15) );

			int saldo=Integer.parseInt( linC.substring( 15 , linC.length() ) );

	

			if( tipo == 1 )

			{	

				Cuenta cuenta=new Cuenta(cuen,secret);

			  	cuenta.verificar( Integer.parseInt(b) );

				cuenta.depositar(saldo);

			

				if ( x.getSource() == Saldo )

				{	

					Respuesta.setText( ""+cuenta.saldo );

					M.println("1"+b+a+cuenta.saldo);

					termina();

				}

				else if( x.getSource() == Girar )

				{	if( cuenta.girar( Integer.parseInt( plata.getText() ) ) )

					{	Respuesta.setText(""+ cuenta.saldo );

						M.println("1"+b+a+cuenta.saldo);

						termina();

					}

					else

						Respuesta.setText("Saldo no Suficiente");

				}

				else if( x.getSource() == Depositar )

				{	cuenta.depositar( Integer.parseInt( plata.getText() ) );

					Respuesta.setText( ""+cuenta.saldo );

					M.println("1"+b+a+cuenta.saldo);

					termina();

				}

			}

			else if( tipo == 2 )

			{	

				Cuenta1 cuenta=new Cuenta1(cuen,secret);

		  		cuenta.verificar( Integer.parseInt( b ) );

				cuenta.depositar(saldo);		

				if ( x.getSource() == Saldo )

				{	

					Respuesta.setText( ""+cuenta.saldo );

					M.println("2"+b+a+cuenta.saldo);

					termina();

				}

				else if( x.getSource() == Girar )

				{	if( cuenta.girar(Integer.parseInt( plata.getText() )) )

					{	Respuesta.setText( ""+cuenta.saldo );

						M.println("2"+b+a+cuenta.saldo);

						termina();

					}

				}

				else if( x.getSource() == Depositar )

				{	cuenta.depositar(Integer.parseInt( plata.getText() ));

					Respuesta.setText( ""+cuenta.saldo );

					M.println("2"+b+a+cuenta.saldo);

					termina();

				}

			}

			return;

		}		

		catch( Exception IOException )

		{	System.out.println("EXC!!");

			return;

		}		

	}



	static BufferedReader K;

	static PrintWriter M;



	public static boolean buscaCuenta( String A  )throws IOException 

	{	K = new BufferedReader(new FileReader("banco.txt") );

		M = new PrintWriter(new FileWriter("temp.txt"));

		String B=K.readLine();

		while(  (B.substring(5,15) ).compareTo(A) != 0  )

		{	M.println(B);

			B=K.readLine();

			if(B==null)

				return false;					

		}

		linC=B;

		return true;	

	}

	

	public static void termina()throws IOException

	{	String P=K.readLine();

		while( P != null )

		{	M.println( P );

			P=K.readLine();

		}

		K.close();

		M.close();

		

		BufferedReader K2=new BufferedReader(new FileReader("temp.txt") );;

		PrintWriter M2=new PrintWriter(new FileWriter("banco.txt"));

		String J = K2.readLine();

		while( J != null )

		{	M2.println( J );

			J=K2.readLine();

		}

		M2.close();

		K2.close();

		return;

	}	

}	

