//*************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;
	}	
}	
