Programa de Cadastro de Cliente, conta bancaria

Boa noite pessoal!!

Bom, não gosto de estar pedindo tanto socorro assim, mais eu estou com um problema meio chato…
não estou conseguindo fazer o extrado desse meu programa… tipo, fazer aquela impressão de movimentação da conta bancária, e estou tendo dificuldade nisso, para poder girar tipo um “vetor”, que poderá salvar os meus clientes cadastrados neles, e poderá passar o histórico da movimentação da conta do usuário.
Se puderem me ajudar nessa minha dificuldade… aqui está o código…

public class Lab03Sistema {
    Lab03Sistema vetoExtrato[] = new Lab03Sistema[10];
          
	int numAge;
	int numConta;
	double valor;
        
	private void leValores() {
			do {
				this.numAge = Console.readInt("Numero da Agencia : ");
			} while (this.numAge <= 0);
			do {
				this.numConta = Console.readInt("Numero da Conta   : ");
			} while (this.numConta <= 0);
			do {
				this.valor = Console.readDouble("Valor             : ");
			} while (this.valor <= 0.0);
	}
	public void execCadastramento() {
			String nome;
			char opcao;
			leValores();
			do {
				nome = Console.readString("Nome do Cliente   : ");
			} while (nome.equals(""));
			opcao = Console.readChar("Confirma cadastramento (S/N) : ");
			if (opcao != 'S' && opcao != 's') {
				return;
			}
                        
			Lab03ContaCorrente cc1 = new Lab03ContaCorrente(this.numAge, this.numConta, nome, this.valor);
			cc1.gravar();
                        
                        
	}

	public void execSaque() {
			char opcao;
			leValores();

			opcao = Console.readChar("Confirma saque (S/N) : ");
			if (opcao != 'S' && opcao != 's')
				return;
			Lab03ContaCorrente cc1 = new Lab03ContaCorrente(this.numAge, this.numConta);
			if (cc1.sacar(this.valor) == 0) {
				System.out.println("Saldo Indisponivel");
			} else {
				cc1.gravar(); // persiste o saque
				System.out.println("Saque Efetuado com Sucesso");
			}
		}
	public void execDeposito() {
			char opcao;
			leValores();
			opcao = Console.readChar("Confirma deposito (S/N) : ");
			if (opcao != 'S' && opcao != 's')
				return;
			Lab03ContaCorrente cc1 = new Lab03ContaCorrente(this.numAge, this.numConta);
			cc1.depositar(this.valor);
			cc1.gravar(); // grava um novo arquivo contendo o valor atualizado do saldo.
		}
	public void execConsulta() {
			do {
				this.numAge = Console.readInt("Numero da Agencia : ");
			} while (this.numAge <= 0);
			do {
				this.numConta = Console.readInt("Numero da Conta   : ");
			} while (this.numConta <= 0);
			Lab03ContaCorrente cc1 = new Lab03ContaCorrente(this.numAge, this.numConta);
			cc1.imprimir();
		}
        public void execExtrato(){
          do{
              this.numAge = Console.readInt("Numero da Agencia: ");
          } while(this.numAge<=0);
          do{
              this.numConta = Console.readInt("Numero da Conta: ");
          }while(this.numConta<=0);
          for(int i=0; i<vetoExtrato.length;i++){
              Lab03ContaCorrente cc1 = new Lab03ContaCorrente(numAge, numConta, null, valor);
              cc1.imprimir();
          }
        }
	public static void main(String[] args) {
			char opcao;
			Lab03Sistema obj = new Lab03Sistema();
			while (true) {
				System.out.println("Entre com a opcao desejada");
				System.out.println("1 - Cadastramento");
				System.out.println("2 - Saque");
				System.out.println("3 - Deposito");
				System.out.println("4 - Consulta");
				System.out.println("9 - Fim");
				// System.out.println("Opcao : ");
				opcao = Console.readChar("Opcao : ");
				if (opcao == '9')
					break;
				switch (opcao) {
				case '1':
					obj.execCadastramento();
					break;
				case '2':
					obj.execSaque();
					break;
				case '3':
					obj.execDeposito();
					break;
				case '4':
					obj.execConsulta();
					break;
				default:
					System.out.println("Opcao invalida. Reentre.");
				}
			}
	}
	public Lab03Sistema() {
			super();
	}
}


public class Lab03ContaCorrente {
    
    
	private int numAge = 0;
	private int numConta = 0;
	private String nome = "";
	private double saldo = 0.0;
	public int sacar(double pValor) {
		if (this.saldo < pValor)
			return 0;
		this.saldo -= pValor;
		return 1;
	}
	public void depositar(double pValor) {
		this.saldo += pValor;
	}
	public Lab03ContaCorrente() {
		super();
	}
	public Lab03ContaCorrente(int pNumAge, int pNumConta) {
		setNumAge(pNumAge);
		setNumConta(pNumConta);
		// Carregar a conta corrente de um arquivo texto
		recuperar();
	}
	/* Implementado devido ao laboratório 04. Desconsiderá-lo no laboratório 3 */
	public boolean removerArquivo() {
		File tArq1;
		tArq1 = new File(this.numAge + "." + this.numConta + ".dat");
		tArq1.delete();
		tArq1 = new File(this.numAge + "." + this.numConta + ".hist");
		tArq1.delete();
		return true;
	}
	public boolean gravar() {
		FileWriter tArq1;
		PrintWriter tArq2;
		try {
			// abrir o aquivo
			tArq1 = new FileWriter(getNumAge() + "." + getNumConta() + ".dat");
			tArq2 = new PrintWriter(tArq1);
			tArq2.println(getNumAge());
			tArq2.println(getNumConta());
			tArq2.println(getNome());
			tArq2.println(getSaldo());
			// fechar o arquivo
			tArq2.close();
                       
			return true;
		}
		catch (IOException tExcept) {
			tExcept.printStackTrace();
			return false;
		}
                              
	}
        private void salvar(){
            
        }
        
	private void recuperar() {
		FileReader tArq1 = null;
		BufferedReader tArq2 = null;
		int tQtde = 4;
		try {
			// abrir o arquivo
			tArq1 = new FileReader(getNumAge() + "." + getNumConta() + ".dat");
			tArq2 = new BufferedReader(tArq1);

			// ler atributo/valor e colocar na matriz
			String[] tLinha = new String[tQtde];
			for (int i = 0; i < tQtde; i++) {
				tLinha[i] = tArq2.readLine();
			}
			// fechar o arquivo
			tArq2.close();
			setNumAge(Integer.parseInt(tLinha[0]));
			setNumConta(Integer.parseInt(tLinha[1]));
			setNome(tLinha[2]);
			setSaldo(Double.parseDouble(tLinha[3]));
		} catch (IOException tExcept) {
			tExcept.printStackTrace();
		}
	}
	public Lab03ContaCorrente(int pNumAge, int pNumConta, String pNome,
			double pSaldo) {
		setNumAge(pNumAge);
		setNumConta(pNumConta);
		setNome(pNome);
		setSaldo(pSaldo);
	}
	public void imprimir() {
		System.out.println("------------------------------------------");
		System.out.println("Agencia : " + getNumAge());
		System.out.println("Conta   : " + getNumConta());
		System.out.println("Nome    : " + getNome());
		NumberFormat formatter;
		formatter = NumberFormat.getCurrencyInstance(new Locale("pt", "BR"));
		formatter.setMinimumFractionDigits(2);
		System.out.println("Saldo   : " + formatter.format(this.saldo));

	}
	public String getNome() {
		return this.nome;
	}
	public double getSaldo() {
		return this.saldo;
	}
	public void setNome(String string) {
		this.nome = string;
	}
	public void setNumAge(int i) {
		if ((i < 0) || (i > 9999))
			System.out.println("Numero da agencia invalido");
		this.numAge = i;
	}
	public void setNumConta(int i) {
		if ((i < 0) || (i > 9999999))
			System.out.println("Numero da conta invalido");
		this.numConta = i;
	}
	public void setSaldo(double d) {
		this.saldo = d;
	}
	public int getNumAge() {
		return this.numAge;
	}
	public int getNumConta() {
		return this.numConta;
	}
}

public class Console
{
	private static String readLine()
	{
		 int			tCh;
		 String			tLinha = "";
		 boolean		tFim = false;

		 while (!tFim)
		 {
			  try
			  {
				   tCh = System.in.read();
				   if (tCh < 0 || (char) tCh == '\n')
						tFim = true;
				   else
						if ((char) tCh != '\r')
							 tLinha = tLinha + (char) tCh;
			  }
			  catch (java.io.IOException tExcept)
			  {
				   tLinha = null;
				   tFim = true;
			  }
		 }
		 return tLinha;
	}

	private static void printPrompt(String pPrompt)
	{
		 System.out.print(pPrompt);
		 System.out.flush();
	}

	private static byte ajustaByte(long pValor)
	{
		 if (pValor < Byte.MIN_VALUE)
			return Byte.MIN_VALUE;

		 if (pValor > Byte.MAX_VALUE)
			return Byte.MAX_VALUE;

		 return (byte) pValor;
	}

	private static short ajustaShort(long pValor)
	{
		 if (pValor < Short.MIN_VALUE)
			return Short.MIN_VALUE;

		 if (pValor > Short.MAX_VALUE)
			return Short.MAX_VALUE;

		 return (short) pValor;
	}

	private static int ajustaInt(long pValor)
	{
		 if (pValor < Integer.MIN_VALUE)
			return Integer.MIN_VALUE;

		 if (pValor > Integer.MAX_VALUE)
			return Integer.MAX_VALUE;

		 return (int) pValor;
	}

	private static float ajustaFloat(double pValor)
	{
		 if (pValor < Float.MIN_VALUE)
			return Float.MIN_VALUE;

		 if (pValor > Float.MAX_VALUE)
			return Float.MAX_VALUE;

		 return (float) pValor;
	}

	public static byte readByte(String pPrompt, long pValor)
	{

		 while (true)
		 {
			  try
			  {
				   String      tLinha;

				   printPrompt(pPrompt);
				   tLinha = readLine().trim();
				   if (tLinha.equals(""))
						return ajustaByte(pValor);
				   return Byte.valueOf(tLinha).byteValue();
			  }
			  catch (NumberFormatException tExcept)
			  {
				   System.out.println("Valor invalido para o tipo 'byte'");
				   System.out.println("Digite novamente...");
			  }
		 }
	}

	public static byte readByte(String pPrompt)
	{
		 return readByte(pPrompt,0);
	}

	public static byte readByte(long pVlr)
	{
		byte    tVlr = ajustaByte (pVlr);

		return readByte("Entre com um valor do tipo 'byte' (" + tVlr + " default) : ", tVlr);
	}

	public static byte readByte()
	{
		 return readByte("Entre com um valor do tipo 'byte' (0 default) : ", 0);
	}

	public static short readShort(String pPrompt, long pValor)
	{

		 while (true)
		 {
			  try
			  {
				   String      tLinha;

				   printPrompt(pPrompt);
				   tLinha = readLine().trim();
				   if (tLinha.equals(""))
						return ajustaShort(pValor);
				   return Short.valueOf(tLinha).shortValue();
			  }
			  catch (NumberFormatException tExcept)
			  {
				   System.out.println("Valor invalido para o tipo 'short'");
				   System.out.println("Digite novamente...");
			  }
		 }
	}

	public static short readShort(String pPrompt)
	{
		 return readShort(pPrompt,0);
	}

	public static short readShort(long pVlr)
	{
		short    tVlr = ajustaShort (pVlr);

		return readShort("Entre com um valor do tipo 'short' (" + tVlr + " default) : ", tVlr);
	}

	public static short readShort()
	{
		 return readShort("Entre com um valor do tipo 'short' (0 default) : ", 0);
	}

	public static int readInt(String pPrompt, long pValor)
	{

		 while (true)
		 {
			  try
			  {
				   String      tLinha;

				   printPrompt(pPrompt);
				   tLinha = readLine().trim();
				   if (tLinha.equals(""))
						return ajustaInt(pValor);
				   return Integer.valueOf(tLinha).intValue();
			  }
			  catch (NumberFormatException tExcept)
			  {
				   System.out.println("Valor invalido para o tipo 'int'");
				   System.out.println("Digite novamente...");
			  }
		 }
	}

	public static int readInt(String pPrompt)
	{
		 return readInt(pPrompt,0);
	}

	public static int readInt(long pVlr)
	{
		int    tVlr = ajustaInt (pVlr);

		return readInt("Entre com um valor do tipo 'int' (" + tVlr + " default) : ", tVlr);
	}

	public static int readInt()
	{
		 return readInt("Entre com um valor do tipo 'int' (0 default) : ", 0);
	}

	public static long readLong(String pPrompt, long pValor)
	{

		 while (true)
		 {
			  try
			  {
				   String      tLinha;

				   printPrompt(pPrompt);
				   tLinha = readLine().trim();
				   if (tLinha.equals(""))
						return pValor;
				   return Long.valueOf(tLinha).longValue();
			  }
			  catch (NumberFormatException e)
			  {
				   System.out.println("Valor invalido para o tipo 'long'");
				   System.out.println("Digite novamente...");
			  }
		 }
	}

	public static long readLong(String pPrompt)
	{
		 return readLong(pPrompt,0);
	}

	public static long readLong(long pVlr)
	{
		return readLong("Entre com um valor do tipo 'long' (" + pVlr + " default) : ", pVlr);
	}

	public static long readLong()
	{
		 return readLong("Entre com um valor do tipo 'long' (0 default) : ", 0);
	}

	public static float readFloat(String pPrompt, double pValor)
	{

		 while (true)
		 {
			  try
			  {
				   String      tLinha;

				   printPrompt(pPrompt);
				   tLinha = readLine().trim();
				   if (tLinha.equals(""))
						return ajustaFloat(pValor);
				   return Float.valueOf(tLinha).floatValue();
			  }
			  catch (NumberFormatException e)
			  {
				   System.out.println("Valor invalido para o tipo 'float'");
				   System.out.println("Digite novamente...");
			  }
		 }
	}

	public static float readFloat(String pPrompt)
	{
		 return readFloat(pPrompt,0);
	}

	public static float readFloat(double pVlr)
	{
		float    tVlr = ajustaFloat (pVlr);

		return readFloat("Entre com um valor do tipo 'float' (" + tVlr + " default) : ", tVlr);
	}

	public static float readFloat()
	{
		 return readFloat("Entre com um valor do tipo 'float' (0 default) : ", 0);
	}

	public static double readDouble(String pPrompt, double pValor)
	{

		 while (true)
		 {
			  try
			  {
				   String      tLinha;

				   printPrompt(pPrompt);
				   tLinha = readLine().trim();
				   if (tLinha.equals(""))
						return pValor;
				   return Double.valueOf(tLinha).doubleValue();
			  }
			  catch (NumberFormatException e)
			  {
				   System.out.println("Valor invalido para o tipo 'double'");
				   System.out.println("Digite novamente...");
			  }
		 }
	}

	public static double readDouble(String pPrompt)
	{
		 return readDouble(pPrompt,0);
	}

	public static double readDouble(double pVlr)
	{
		return readDouble("Entre com um valor do tipo 'double' (" + pVlr + " default) : ", pVlr);
	}

	public static double readDouble()
	{
		 return readDouble("Entre com um valor do tipo 'double' (0 default) : ", 0);
	}

	public static boolean readBoolean(String pPrompt, boolean pValor)
	{

		 while (true)
		 {
			   String      tLinha;

			   printPrompt(pPrompt);
			   tLinha = readLine().trim();
			   if (tLinha.equals(""))
					return pValor;
			   if (tLinha.equalsIgnoreCase("true"))
					return true;
			   if (tLinha.equalsIgnoreCase("false"))
					return false;
			   System.out.println("Valor invalido para o tipo 'boolean' (true/false)");
			   System.out.println("Digite novamente...");
		 }
	}

	public static boolean readBoolean(String pPrompt)
	{
		 return readBoolean(pPrompt,false);
	}

	public static boolean readBoolean (boolean pVlr)
	{
		return readBoolean("Entre com um valor do tipo 'boolean' (true/false) (" + pVlr + " default) : ", pVlr);
	}

	public static boolean readBoolean()
	{
		 return readBoolean("Entre com um valor do tipo 'boolean' (true/false) ('false' default) : ", false);
	}

	public static char readChar (String pPrompt, char pCh)
	{
		 char       tResult = pCh;
		 int        tCh;
		 boolean    tFim = false;
		 boolean    tLido = false;

		 printPrompt(pPrompt);
		 while (!tFim)
		 {
			  try
			  {
				   tCh = System.in.read();
				   if (tCh < 0 || (char) tCh == '\n')
						tFim = true;
				   else
						if (! tLido && (char) tCh != '\r')
						{
							 tResult = (char) tCh;
							 tLido = true;
						}
			  }
			  catch (java.io.IOException tExcept)
			  {
				   tFim = true;
			  }
		 }
		 return tResult;
	}

	public static char readChar(String pPrompt)
	{
		 return readChar(pPrompt,'[code]
public class Lab03Sistema {
    Lab03Sistema vetoExtrato[] = new Lab03Sistema[10];
          
	int numAge;
	int numConta;
	double valor;
        
	private void leValores() {
			do {
				this.numAge = Console.readInt("Numero da Agencia : ");
			} while (this.numAge <= 0);
			do {
				this.numConta = Console.readInt("Numero da Conta   : ");
			} while (this.numConta <= 0);
			do {
				this.valor = Console.readDouble("Valor             : ");
			} while (this.valor <= 0.0);
	}
	public void execCadastramento() {
			String nome;
			char opcao;
			leValores();
			do {
				nome = Console.readString("Nome do Cliente   : ");
			} while (nome.equals(""));
			opcao = Console.readChar("Confirma cadastramento (S/N) : ");
			if (opcao != 'S' && opcao != 's') {
				return;
			}
                        
			Lab03ContaCorrente cc1 = new Lab03ContaCorrente(this.numAge, this.numConta, nome, this.valor);
			cc1.gravar();
                        
                        
	}

	public void execSaque() {
			char opcao;
			leValores();

			opcao = Console.readChar("Confirma saque (S/N) : ");
			if (opcao != 'S' && opcao != 's')
				return;
			Lab03ContaCorrente cc1 = new Lab03ContaCorrente(this.numAge, this.numConta);
			if (cc1.sacar(this.valor) == 0) {
				System.out.println("Saldo Indisponivel");
			} else {
				cc1.gravar(); // persiste o saque
				System.out.println("Saque Efetuado com Sucesso");
			}
		}
	public void execDeposito() {
			char opcao;
			leValores();
			opcao = Console.readChar("Confirma deposito (S/N) : ");
			if (opcao != 'S' && opcao != 's')
				return;
			Lab03ContaCorrente cc1 = new Lab03ContaCorrente(this.numAge, this.numConta);
			cc1.depositar(this.valor);
			cc1.gravar(); // grava um novo arquivo contendo o valor atualizado do saldo.
		}
	public void execConsulta() {
			do {
				this.numAge = Console.readInt("Numero da Agencia : ");
			} while (this.numAge <= 0);
			do {
				this.numConta = Console.readInt("Numero da Conta   : ");
			} while (this.numConta <= 0);
			Lab03ContaCorrente cc1 = new Lab03ContaCorrente(this.numAge, this.numConta);
			cc1.imprimir();
		}
        public void execExtrato(){
          do{
              this.numAge = Console.readInt("Numero da Agencia: ");
          } while(this.numAge<=0);
          do{
              this.numConta = Console.readInt("Numero da Conta: ");
          }while(this.numConta<=0);
          for(int i=0; i<vetoExtrato.length;i++){
              Lab03ContaCorrente cc1 = new Lab03ContaCorrente(numAge, numConta, null, valor);
              cc1.imprimir();
          }
        }
	public static void main(String[] args) {
			char opcao;
			Lab03Sistema obj = new Lab03Sistema();
			while (true) {
				System.out.println("Entre com a opcao desejada");
				System.out.println("1 - Cadastramento");
				System.out.println("2 - Saque");
				System.out.println("3 - Deposito");
				System.out.println("4 - Consulta");
				System.out.println("9 - Fim");
				// System.out.println("Opcao : ");
				opcao = Console.readChar("Opcao : ");
				if (opcao == '9')
					break;
				switch (opcao) {
				case '1':
					obj.execCadastramento();
					break;
				case '2':
					obj.execSaque();
					break;
				case '3':
					obj.execDeposito();
					break;
				case '4':
					obj.execConsulta();
					break;
				default:
					System.out.println("Opcao invalida. Reentre.");
				}
			}
	}
	public Lab03Sistema() {
			super();
	}
}


public class Lab03ContaCorrente {
    
    
	private int numAge = 0;
	private int numConta = 0;
	private String nome = "";
	private double saldo = 0.0;
	public int sacar(double pValor) {
		if (this.saldo < pValor)
			return 0;
		this.saldo -= pValor;
		return 1;
	}
	public void depositar(double pValor) {
		this.saldo += pValor;
	}
	public Lab03ContaCorrente() {
		super();
	}
	public Lab03ContaCorrente(int pNumAge, int pNumConta) {
		setNumAge(pNumAge);
		setNumConta(pNumConta);
		// Carregar a conta corrente de um arquivo texto
		recuperar();
	}
	/* Implementado devido ao laboratório 04. Desconsiderá-lo no laboratório 3 */
	public boolean removerArquivo() {
		File tArq1;
		tArq1 = new File(this.numAge + "." + this.numConta + ".dat");
		tArq1.delete();
		tArq1 = new File(this.numAge + "." + this.numConta + ".hist");
		tArq1.delete();
		return true;
	}
	public boolean gravar() {
		FileWriter tArq1;
		PrintWriter tArq2;
		try {
			// abrir o aquivo
			tArq1 = new FileWriter(getNumAge() + "." + getNumConta() + ".dat");
			tArq2 = new PrintWriter(tArq1);
			tArq2.println(getNumAge());
			tArq2.println(getNumConta());
			tArq2.println(getNome());
			tArq2.println(getSaldo());
			// fechar o arquivo
			tArq2.close();
                       
			return true;
		}
		catch (IOException tExcept) {
			tExcept.printStackTrace();
			return false;
		}
                              
	}
        private void salvar(){
            
        }
        
	private void recuperar() {
		FileReader tArq1 = null;
		BufferedReader tArq2 = null;
		int tQtde = 4;
		try {
			// abrir o arquivo
			tArq1 = new FileReader(getNumAge() + "." + getNumConta() + ".dat");
			tArq2 = new BufferedReader(tArq1);

			// ler atributo/valor e colocar na matriz
			String[] tLinha = new String[tQtde];
			for (int i = 0; i < tQtde; i++) {
				tLinha[i] = tArq2.readLine();
			}
			// fechar o arquivo
			tArq2.close();
			setNumAge(Integer.parseInt(tLinha[0]));
			setNumConta(Integer.parseInt(tLinha[1]));
			setNome(tLinha[2]);
			setSaldo(Double.parseDouble(tLinha[3]));
		} catch (IOException tExcept) {
			tExcept.printStackTrace();
		}
	}
	public Lab03ContaCorrente(int pNumAge, int pNumConta, String pNome,
			double pSaldo) {
		setNumAge(pNumAge);
		setNumConta(pNumConta);
		setNome(pNome);
		setSaldo(pSaldo);
	}
	public void imprimir() {
		System.out.println("------------------------------------------");
		System.out.println("Agencia : " + getNumAge());
		System.out.println("Conta   : " + getNumConta());
		System.out.println("Nome    : " + getNome());
		NumberFormat formatter;
		formatter = NumberFormat.getCurrencyInstance(new Locale("pt", "BR"));
		formatter.setMinimumFractionDigits(2);
		System.out.println("Saldo   : " + formatter.format(this.saldo));

	}
	public String getNome() {
		return this.nome;
	}
	public double getSaldo() {
		return this.saldo;
	}
	public void setNome(String string) {
		this.nome = string;
	}
	public void setNumAge(int i) {
		if ((i < 0) || (i > 9999))
			System.out.println("Numero da agencia invalido");
		this.numAge = i;
	}
	public void setNumConta(int i) {
		if ((i < 0) || (i > 9999999))
			System.out.println("Numero da conta invalido");
		this.numConta = i;
	}
	public void setSaldo(double d) {
		this.saldo = d;
	}
	public int getNumAge() {
		return this.numAge;
	}
	public int getNumConta() {
		return this.numConta;
	}
}

public class Console
{
	private static String readLine()
	{
		 int			tCh;
		 String			tLinha = "";
		 boolean		tFim = false;

		 while (!tFim)
		 {
			  try
			  {
				   tCh = System.in.read();
				   if (tCh < 0 || (char) tCh == '\n')
						tFim = true;
				   else
						if ((char) tCh != '\r')
							 tLinha = tLinha + (char) tCh;
			  }
			  catch (java.io.IOException tExcept)
			  {
				   tLinha = null;
				   tFim = true;
			  }
		 }
		 return tLinha;
	}

	private static void printPrompt(String pPrompt)
	{
		 System.out.print(pPrompt);
		 System.out.flush();
	}

	private static byte ajustaByte(long pValor)
	{
		 if (pValor < Byte.MIN_VALUE)
			return Byte.MIN_VALUE;

		 if (pValor > Byte.MAX_VALUE)
			return Byte.MAX_VALUE;

		 return (byte) pValor;
	}

	private static short ajustaShort(long pValor)
	{
		 if (pValor < Short.MIN_VALUE)
			return Short.MIN_VALUE;

		 if (pValor > Short.MAX_VALUE)
			return Short.MAX_VALUE;

		 return (short) pValor;
	}

	private static int ajustaInt(long pValor)
	{
		 if (pValor < Integer.MIN_VALUE)
			return Integer.MIN_VALUE;

		 if (pValor > Integer.MAX_VALUE)
			return Integer.MAX_VALUE;

		 return (int) pValor;
	}

	private static float ajustaFloat(double pValor)
	{
		 if (pValor < Float.MIN_VALUE)
			return Float.MIN_VALUE;

		 if (pValor > Float.MAX_VALUE)
			return Float.MAX_VALUE;

		 return (float) pValor;
	}

	public static byte readByte(String pPrompt, long pValor)
	{

		 while (true)
		 {
			  try
			  {
				   String      tLinha;

				   printPrompt(pPrompt);
				   tLinha = readLine().trim();
				   if (tLinha.equals(""))
						return ajustaByte(pValor);
				   return Byte.valueOf(tLinha).byteValue();
			  }
			  catch (NumberFormatException tExcept)
			  {
				   System.out.println("Valor invalido para o tipo 'byte'");
				   System.out.println("Digite novamente...");
			  }
		 }
	}

	public static byte readByte(String pPrompt)
	{
		 return readByte(pPrompt,0);
	}

	public static byte readByte(long pVlr)
	{
		byte    tVlr = ajustaByte (pVlr);

		return readByte("Entre com um valor do tipo 'byte' (" + tVlr + " default) : ", tVlr);
	}

	public static byte readByte()
	{
		 return readByte("Entre com um valor do tipo 'byte' (0 default) : ", 0);
	}

	public static short readShort(String pPrompt, long pValor)
	{

		 while (true)
		 {
			  try
			  {
				   String      tLinha;

				   printPrompt(pPrompt);
				   tLinha = readLine().trim();
				   if (tLinha.equals(""))
						return ajustaShort(pValor);
				   return Short.valueOf(tLinha).shortValue();
			  }
			  catch (NumberFormatException tExcept)
			  {
				   System.out.println("Valor invalido para o tipo 'short'");
				   System.out.println("Digite novamente...");
			  }
		 }
	}

	public static short readShort(String pPrompt)
	{
		 return readShort(pPrompt,0);
	}

	public static short readShort(long pVlr)
	{
		short    tVlr = ajustaShort (pVlr);

		return readShort("Entre com um valor do tipo 'short' (" + tVlr + " default) : ", tVlr);
	}

	public static short readShort()
	{
		 return readShort("Entre com um valor do tipo 'short' (0 default) : ", 0);
	}

	public static int readInt(String pPrompt, long pValor)
	{

		 while (true)
		 {
			  try
			  {
				   String      tLinha;

				   printPrompt(pPrompt);
				   tLinha = readLine().trim();
				   if (tLinha.equals(""))
						return ajustaInt(pValor);
				   return Integer.valueOf(tLinha).intValue();
			  }
			  catch (NumberFormatException tExcept)
			  {
				   System.out.println("Valor invalido para o tipo 'int'");
				   System.out.println("Digite novamente...");
			  }
		 }
	}

	public static int readInt(String pPrompt)
	{
		 return readInt(pPrompt,0);
	}

	public static int readInt(long pVlr)
	{
		int    tVlr = ajustaInt (pVlr);

		return readInt("Entre com um valor do tipo 'int' (" + tVlr + " default) : ", tVlr);
	}

	public static int readInt()
	{
		 return readInt("Entre com um valor do tipo 'int' (0 default) : ", 0);
	}

	public static long readLong(String pPrompt, long pValor)
	{

		 while (true)
		 {
			  try
			  {
				   String      tLinha;

				   printPrompt(pPrompt);
				   tLinha = readLine().trim();
				   if (tLinha.equals(""))
						return pValor;
				   return Long.valueOf(tLinha).longValue();
			  }
			  catch (NumberFormatException e)
			  {
				   System.out.println("Valor invalido para o tipo 'long'");
				   System.out.println("Digite novamente...");
			  }
		 }
	}

	public static long readLong(String pPrompt)
	{
		 return readLong(pPrompt,0);
	}

	public static long readLong(long pVlr)
	{
		return readLong("Entre com um valor do tipo 'long' (" + pVlr + " default) : ", pVlr);
	}

	public static long readLong()
	{
		 return readLong("Entre com um valor do tipo 'long' (0 default) : ", 0);
	}

	public static float readFloat(String pPrompt, double pValor)
	{

		 while (true)
		 {
			  try
			  {
				   String      tLinha;

				   printPrompt(pPrompt);
				   tLinha = readLine().trim();
				   if (tLinha.equals(""))
						return ajustaFloat(pValor);
				   return Float.valueOf(tLinha).floatValue();
			  }
			  catch (NumberFormatException e)
			  {
				   System.out.println("Valor invalido para o tipo 'float'");
				   System.out.println("Digite novamente...");
			  }
		 }
	}

	public static float readFloat(String pPrompt)
	{
		 return readFloat(pPrompt,0);
	}

	public static float readFloat(double pVlr)
	{
		float    tVlr = ajustaFloat (pVlr);

		return readFloat("Entre com um valor do tipo 'float' (" + tVlr + " default) : ", tVlr);
	}

	public static float readFloat()
	{
		 return readFloat("Entre com um valor do tipo 'float' (0 default) : ", 0);
	}

	public static double readDouble(String pPrompt, double pValor)
	{

		 while (true)
		 {
			  try
			  {
				   String      tLinha;

				   printPrompt(pPrompt);
				   tLinha = readLine().trim();
				   if (tLinha.equals(""))
						return pValor;
				   return Double.valueOf(tLinha).doubleValue();
			  }
			  catch (NumberFormatException e)
			  {
				   System.out.println("Valor invalido para o tipo 'double'");
				   System.out.println("Digite novamente...");
			  }
		 }
	}

	public static double readDouble(String pPrompt)
	{
		 return readDouble(pPrompt,0);
	}

	public static double readDouble(double pVlr)
	{
		return readDouble("Entre com um valor do tipo 'double' (" + pVlr + " default) : ", pVlr);
	}

	public static double readDouble()
	{
		 return readDouble("Entre com um valor do tipo 'double' (0 default) : ", 0);
	}

	public static boolean readBoolean(String pPrompt, boolean pValor)
	{

		 while (true)
		 {
			   String      tLinha;

			   printPrompt(pPrompt);
			   tLinha = readLine().trim();
			   if (tLinha.equals(""))
					return pValor;
			   if (tLinha.equalsIgnoreCase("true"))
					return true;
			   if (tLinha.equalsIgnoreCase("false"))
					return false;
			   System.out.println("Valor invalido para o tipo 'boolean' (true/false)");
			   System.out.println("Digite novamente...");
		 }
	}

	public static boolean readBoolean(String pPrompt)
	{
		 return readBoolean(pPrompt,false);
	}

	public static boolean readBoolean (boolean pVlr)
	{
		return readBoolean("Entre com um valor do tipo 'boolean' (true/false) (" + pVlr + " default) : ", pVlr);
	}

	public static boolean readBoolean()
	{
		 return readBoolean("Entre com um valor do tipo 'boolean' (true/false) ('false' default) : ", false);
	}

	public static char readChar (String pPrompt, char pCh)
	{
		 char       tResult = pCh;
		 int        tCh;
		 boolean    tFim = false;
		 boolean    tLido = false;

		 printPrompt(pPrompt);
		 while (!tFim)
		 {
			  try
			  {
				   tCh = System.in.read();
				   if (tCh < 0 || (char) tCh == '\n')
						tFim = true;
				   else
						if (! tLido && (char) tCh != '\r')
						{
							 tResult = (char) tCh;
							 tLido = true;
						}
			  }
			  catch (java.io.IOException tExcept)
			  {
				   tFim = true;
			  }
		 }
		 return tResult;
	}

	public static char readChar(String pPrompt)
	{
		 return readChar(pPrompt,'\0');
	}

	public static char readChar(char pCh)
	{
		return readChar("Entre com um valor do tipo 'char' (" + pCh + " default) : ", pCh);
	}

	public static char readChar()
	{
		 return readChar("Entre com um valor do tipo 'char' ('\0' default) : ", '\0');
	}

	public static String readString(String pPrompt, String pStr)
	{

		String      tLinha;

		printPrompt(pPrompt);
		tLinha = readLine();
		if (tLinha.equals(""))
			return pStr;
		return tLinha;
	}

	public static String readString(String pPrompt)
	{
		 return readString(pPrompt,"");
	}

	public static String readString()
	{
		 return readString("Entre com um valor do tipo 'String' (\"\" default) : ", "");
	}
}

[/code]');
	}

	public static char readChar(char pCh)
	{
		return readChar("Entre com um valor do tipo 'char' (" + pCh + " default) : ", pCh);
	}

	public static char readChar()
	{
		 return readChar("Entre com um valor do tipo 'char' ('[code]
public class Lab03Sistema {
    Lab03Sistema vetoExtrato[] = new Lab03Sistema[10];
          
	int numAge;
	int numConta;
	double valor;
        
	private void leValores() {
			do {
				this.numAge = Console.readInt("Numero da Agencia : ");
			} while (this.numAge <= 0);
			do {
				this.numConta = Console.readInt("Numero da Conta   : ");
			} while (this.numConta <= 0);
			do {
				this.valor = Console.readDouble("Valor             : ");
			} while (this.valor <= 0.0);
	}
	public void execCadastramento() {
			String nome;
			char opcao;
			leValores();
			do {
				nome = Console.readString("Nome do Cliente   : ");
			} while (nome.equals(""));
			opcao = Console.readChar("Confirma cadastramento (S/N) : ");
			if (opcao != 'S' && opcao != 's') {
				return;
			}
                        
			Lab03ContaCorrente cc1 = new Lab03ContaCorrente(this.numAge, this.numConta, nome, this.valor);
			cc1.gravar();
                        
                        
	}

	public void execSaque() {
			char opcao;
			leValores();

			opcao = Console.readChar("Confirma saque (S/N) : ");
			if (opcao != 'S' && opcao != 's')
				return;
			Lab03ContaCorrente cc1 = new Lab03ContaCorrente(this.numAge, this.numConta);
			if (cc1.sacar(this.valor) == 0) {
				System.out.println("Saldo Indisponivel");
			} else {
				cc1.gravar(); // persiste o saque
				System.out.println("Saque Efetuado com Sucesso");
			}
		}
	public void execDeposito() {
			char opcao;
			leValores();
			opcao = Console.readChar("Confirma deposito (S/N) : ");
			if (opcao != 'S' && opcao != 's')
				return;
			Lab03ContaCorrente cc1 = new Lab03ContaCorrente(this.numAge, this.numConta);
			cc1.depositar(this.valor);
			cc1.gravar(); // grava um novo arquivo contendo o valor atualizado do saldo.
		}
	public void execConsulta() {
			do {
				this.numAge = Console.readInt("Numero da Agencia : ");
			} while (this.numAge <= 0);
			do {
				this.numConta = Console.readInt("Numero da Conta   : ");
			} while (this.numConta <= 0);
			Lab03ContaCorrente cc1 = new Lab03ContaCorrente(this.numAge, this.numConta);
			cc1.imprimir();
		}
        public void execExtrato(){
          do{
              this.numAge = Console.readInt("Numero da Agencia: ");
          } while(this.numAge<=0);
          do{
              this.numConta = Console.readInt("Numero da Conta: ");
          }while(this.numConta<=0);
          for(int i=0; i<vetoExtrato.length;i++){
              Lab03ContaCorrente cc1 = new Lab03ContaCorrente(numAge, numConta, null, valor);
              cc1.imprimir();
          }
        }
	public static void main(String[] args) {
			char opcao;
			Lab03Sistema obj = new Lab03Sistema();
			while (true) {
				System.out.println("Entre com a opcao desejada");
				System.out.println("1 - Cadastramento");
				System.out.println("2 - Saque");
				System.out.println("3 - Deposito");
				System.out.println("4 - Consulta");
				System.out.println("9 - Fim");
				// System.out.println("Opcao : ");
				opcao = Console.readChar("Opcao : ");
				if (opcao == '9')
					break;
				switch (opcao) {
				case '1':
					obj.execCadastramento();
					break;
				case '2':
					obj.execSaque();
					break;
				case '3':
					obj.execDeposito();
					break;
				case '4':
					obj.execConsulta();
					break;
				default:
					System.out.println("Opcao invalida. Reentre.");
				}
			}
	}
	public Lab03Sistema() {
			super();
	}
}


public class Lab03ContaCorrente {
    
    
	private int numAge = 0;
	private int numConta = 0;
	private String nome = "";
	private double saldo = 0.0;
	public int sacar(double pValor) {
		if (this.saldo < pValor)
			return 0;
		this.saldo -= pValor;
		return 1;
	}
	public void depositar(double pValor) {
		this.saldo += pValor;
	}
	public Lab03ContaCorrente() {
		super();
	}
	public Lab03ContaCorrente(int pNumAge, int pNumConta) {
		setNumAge(pNumAge);
		setNumConta(pNumConta);
		// Carregar a conta corrente de um arquivo texto
		recuperar();
	}
	/* Implementado devido ao laboratório 04. Desconsiderá-lo no laboratório 3 */
	public boolean removerArquivo() {
		File tArq1;
		tArq1 = new File(this.numAge + "." + this.numConta + ".dat");
		tArq1.delete();
		tArq1 = new File(this.numAge + "." + this.numConta + ".hist");
		tArq1.delete();
		return true;
	}
	public boolean gravar() {
		FileWriter tArq1;
		PrintWriter tArq2;
		try {
			// abrir o aquivo
			tArq1 = new FileWriter(getNumAge() + "." + getNumConta() + ".dat");
			tArq2 = new PrintWriter(tArq1);
			tArq2.println(getNumAge());
			tArq2.println(getNumConta());
			tArq2.println(getNome());
			tArq2.println(getSaldo());
			// fechar o arquivo
			tArq2.close();
                       
			return true;
		}
		catch (IOException tExcept) {
			tExcept.printStackTrace();
			return false;
		}
                              
	}
        private void salvar(){
            
        }
        
	private void recuperar() {
		FileReader tArq1 = null;
		BufferedReader tArq2 = null;
		int tQtde = 4;
		try {
			// abrir o arquivo
			tArq1 = new FileReader(getNumAge() + "." + getNumConta() + ".dat");
			tArq2 = new BufferedReader(tArq1);

			// ler atributo/valor e colocar na matriz
			String[] tLinha = new String[tQtde];
			for (int i = 0; i < tQtde; i++) {
				tLinha[i] = tArq2.readLine();
			}
			// fechar o arquivo
			tArq2.close();
			setNumAge(Integer.parseInt(tLinha[0]));
			setNumConta(Integer.parseInt(tLinha[1]));
			setNome(tLinha[2]);
			setSaldo(Double.parseDouble(tLinha[3]));
		} catch (IOException tExcept) {
			tExcept.printStackTrace();
		}
	}
	public Lab03ContaCorrente(int pNumAge, int pNumConta, String pNome,
			double pSaldo) {
		setNumAge(pNumAge);
		setNumConta(pNumConta);
		setNome(pNome);
		setSaldo(pSaldo);
	}
	public void imprimir() {
		System.out.println("------------------------------------------");
		System.out.println("Agencia : " + getNumAge());
		System.out.println("Conta   : " + getNumConta());
		System.out.println("Nome    : " + getNome());
		NumberFormat formatter;
		formatter = NumberFormat.getCurrencyInstance(new Locale("pt", "BR"));
		formatter.setMinimumFractionDigits(2);
		System.out.println("Saldo   : " + formatter.format(this.saldo));

	}
	public String getNome() {
		return this.nome;
	}
	public double getSaldo() {
		return this.saldo;
	}
	public void setNome(String string) {
		this.nome = string;
	}
	public void setNumAge(int i) {
		if ((i < 0) || (i > 9999))
			System.out.println("Numero da agencia invalido");
		this.numAge = i;
	}
	public void setNumConta(int i) {
		if ((i < 0) || (i > 9999999))
			System.out.println("Numero da conta invalido");
		this.numConta = i;
	}
	public void setSaldo(double d) {
		this.saldo = d;
	}
	public int getNumAge() {
		return this.numAge;
	}
	public int getNumConta() {
		return this.numConta;
	}
}

public class Console
{
	private static String readLine()
	{
		 int			tCh;
		 String			tLinha = "";
		 boolean		tFim = false;

		 while (!tFim)
		 {
			  try
			  {
				   tCh = System.in.read();
				   if (tCh < 0 || (char) tCh == '\n')
						tFim = true;
				   else
						if ((char) tCh != '\r')
							 tLinha = tLinha + (char) tCh;
			  }
			  catch (java.io.IOException tExcept)
			  {
				   tLinha = null;
				   tFim = true;
			  }
		 }
		 return tLinha;
	}

	private static void printPrompt(String pPrompt)
	{
		 System.out.print(pPrompt);
		 System.out.flush();
	}

	private static byte ajustaByte(long pValor)
	{
		 if (pValor < Byte.MIN_VALUE)
			return Byte.MIN_VALUE;

		 if (pValor > Byte.MAX_VALUE)
			return Byte.MAX_VALUE;

		 return (byte) pValor;
	}

	private static short ajustaShort(long pValor)
	{
		 if (pValor < Short.MIN_VALUE)
			return Short.MIN_VALUE;

		 if (pValor > Short.MAX_VALUE)
			return Short.MAX_VALUE;

		 return (short) pValor;
	}

	private static int ajustaInt(long pValor)
	{
		 if (pValor < Integer.MIN_VALUE)
			return Integer.MIN_VALUE;

		 if (pValor > Integer.MAX_VALUE)
			return Integer.MAX_VALUE;

		 return (int) pValor;
	}

	private static float ajustaFloat(double pValor)
	{
		 if (pValor < Float.MIN_VALUE)
			return Float.MIN_VALUE;

		 if (pValor > Float.MAX_VALUE)
			return Float.MAX_VALUE;

		 return (float) pValor;
	}

	public static byte readByte(String pPrompt, long pValor)
	{

		 while (true)
		 {
			  try
			  {
				   String      tLinha;

				   printPrompt(pPrompt);
				   tLinha = readLine().trim();
				   if (tLinha.equals(""))
						return ajustaByte(pValor);
				   return Byte.valueOf(tLinha).byteValue();
			  }
			  catch (NumberFormatException tExcept)
			  {
				   System.out.println("Valor invalido para o tipo 'byte'");
				   System.out.println("Digite novamente...");
			  }
		 }
	}

	public static byte readByte(String pPrompt)
	{
		 return readByte(pPrompt,0);
	}

	public static byte readByte(long pVlr)
	{
		byte    tVlr = ajustaByte (pVlr);

		return readByte("Entre com um valor do tipo 'byte' (" + tVlr + " default) : ", tVlr);
	}

	public static byte readByte()
	{
		 return readByte("Entre com um valor do tipo 'byte' (0 default) : ", 0);
	}

	public static short readShort(String pPrompt, long pValor)
	{

		 while (true)
		 {
			  try
			  {
				   String      tLinha;

				   printPrompt(pPrompt);
				   tLinha = readLine().trim();
				   if (tLinha.equals(""))
						return ajustaShort(pValor);
				   return Short.valueOf(tLinha).shortValue();
			  }
			  catch (NumberFormatException tExcept)
			  {
				   System.out.println("Valor invalido para o tipo 'short'");
				   System.out.println("Digite novamente...");
			  }
		 }
	}

	public static short readShort(String pPrompt)
	{
		 return readShort(pPrompt,0);
	}

	public static short readShort(long pVlr)
	{
		short    tVlr = ajustaShort (pVlr);

		return readShort("Entre com um valor do tipo 'short' (" + tVlr + " default) : ", tVlr);
	}

	public static short readShort()
	{
		 return readShort("Entre com um valor do tipo 'short' (0 default) : ", 0);
	}

	public static int readInt(String pPrompt, long pValor)
	{

		 while (true)
		 {
			  try
			  {
				   String      tLinha;

				   printPrompt(pPrompt);
				   tLinha = readLine().trim();
				   if (tLinha.equals(""))
						return ajustaInt(pValor);
				   return Integer.valueOf(tLinha).intValue();
			  }
			  catch (NumberFormatException tExcept)
			  {
				   System.out.println("Valor invalido para o tipo 'int'");
				   System.out.println("Digite novamente...");
			  }
		 }
	}

	public static int readInt(String pPrompt)
	{
		 return readInt(pPrompt,0);
	}

	public static int readInt(long pVlr)
	{
		int    tVlr = ajustaInt (pVlr);

		return readInt("Entre com um valor do tipo 'int' (" + tVlr + " default) : ", tVlr);
	}

	public static int readInt()
	{
		 return readInt("Entre com um valor do tipo 'int' (0 default) : ", 0);
	}

	public static long readLong(String pPrompt, long pValor)
	{

		 while (true)
		 {
			  try
			  {
				   String      tLinha;

				   printPrompt(pPrompt);
				   tLinha = readLine().trim();
				   if (tLinha.equals(""))
						return pValor;
				   return Long.valueOf(tLinha).longValue();
			  }
			  catch (NumberFormatException e)
			  {
				   System.out.println("Valor invalido para o tipo 'long'");
				   System.out.println("Digite novamente...");
			  }
		 }
	}

	public static long readLong(String pPrompt)
	{
		 return readLong(pPrompt,0);
	}

	public static long readLong(long pVlr)
	{
		return readLong("Entre com um valor do tipo 'long' (" + pVlr + " default) : ", pVlr);
	}

	public static long readLong()
	{
		 return readLong("Entre com um valor do tipo 'long' (0 default) : ", 0);
	}

	public static float readFloat(String pPrompt, double pValor)
	{

		 while (true)
		 {
			  try
			  {
				   String      tLinha;

				   printPrompt(pPrompt);
				   tLinha = readLine().trim();
				   if (tLinha.equals(""))
						return ajustaFloat(pValor);
				   return Float.valueOf(tLinha).floatValue();
			  }
			  catch (NumberFormatException e)
			  {
				   System.out.println("Valor invalido para o tipo 'float'");
				   System.out.println("Digite novamente...");
			  }
		 }
	}

	public static float readFloat(String pPrompt)
	{
		 return readFloat(pPrompt,0);
	}

	public static float readFloat(double pVlr)
	{
		float    tVlr = ajustaFloat (pVlr);

		return readFloat("Entre com um valor do tipo 'float' (" + tVlr + " default) : ", tVlr);
	}

	public static float readFloat()
	{
		 return readFloat("Entre com um valor do tipo 'float' (0 default) : ", 0);
	}

	public static double readDouble(String pPrompt, double pValor)
	{

		 while (true)
		 {
			  try
			  {
				   String      tLinha;

				   printPrompt(pPrompt);
				   tLinha = readLine().trim();
				   if (tLinha.equals(""))
						return pValor;
				   return Double.valueOf(tLinha).doubleValue();
			  }
			  catch (NumberFormatException e)
			  {
				   System.out.println("Valor invalido para o tipo 'double'");
				   System.out.println("Digite novamente...");
			  }
		 }
	}

	public static double readDouble(String pPrompt)
	{
		 return readDouble(pPrompt,0);
	}

	public static double readDouble(double pVlr)
	{
		return readDouble("Entre com um valor do tipo 'double' (" + pVlr + " default) : ", pVlr);
	}

	public static double readDouble()
	{
		 return readDouble("Entre com um valor do tipo 'double' (0 default) : ", 0);
	}

	public static boolean readBoolean(String pPrompt, boolean pValor)
	{

		 while (true)
		 {
			   String      tLinha;

			   printPrompt(pPrompt);
			   tLinha = readLine().trim();
			   if (tLinha.equals(""))
					return pValor;
			   if (tLinha.equalsIgnoreCase("true"))
					return true;
			   if (tLinha.equalsIgnoreCase("false"))
					return false;
			   System.out.println("Valor invalido para o tipo 'boolean' (true/false)");
			   System.out.println("Digite novamente...");
		 }
	}

	public static boolean readBoolean(String pPrompt)
	{
		 return readBoolean(pPrompt,false);
	}

	public static boolean readBoolean (boolean pVlr)
	{
		return readBoolean("Entre com um valor do tipo 'boolean' (true/false) (" + pVlr + " default) : ", pVlr);
	}

	public static boolean readBoolean()
	{
		 return readBoolean("Entre com um valor do tipo 'boolean' (true/false) ('false' default) : ", false);
	}

	public static char readChar (String pPrompt, char pCh)
	{
		 char       tResult = pCh;
		 int        tCh;
		 boolean    tFim = false;
		 boolean    tLido = false;

		 printPrompt(pPrompt);
		 while (!tFim)
		 {
			  try
			  {
				   tCh = System.in.read();
				   if (tCh < 0 || (char) tCh == '\n')
						tFim = true;
				   else
						if (! tLido && (char) tCh != '\r')
						{
							 tResult = (char) tCh;
							 tLido = true;
						}
			  }
			  catch (java.io.IOException tExcept)
			  {
				   tFim = true;
			  }
		 }
		 return tResult;
	}

	public static char readChar(String pPrompt)
	{
		 return readChar(pPrompt,'\0');
	}

	public static char readChar(char pCh)
	{
		return readChar("Entre com um valor do tipo 'char' (" + pCh + " default) : ", pCh);
	}

	public static char readChar()
	{
		 return readChar("Entre com um valor do tipo 'char' ('\0' default) : ", '\0');
	}

	public static String readString(String pPrompt, String pStr)
	{

		String      tLinha;

		printPrompt(pPrompt);
		tLinha = readLine();
		if (tLinha.equals(""))
			return pStr;
		return tLinha;
	}

	public static String readString(String pPrompt)
	{
		 return readString(pPrompt,"");
	}

	public static String readString()
	{
		 return readString("Entre com um valor do tipo 'String' (\"\" default) : ", "");
	}
}

[/code]' default) : ", '[code]
public class Lab03Sistema {
    Lab03Sistema vetoExtrato[] = new Lab03Sistema[10];
          
	int numAge;
	int numConta;
	double valor;
        
	private void leValores() {
			do {
				this.numAge = Console.readInt("Numero da Agencia : ");
			} while (this.numAge <= 0);
			do {
				this.numConta = Console.readInt("Numero da Conta   : ");
			} while (this.numConta <= 0);
			do {
				this.valor = Console.readDouble("Valor             : ");
			} while (this.valor <= 0.0);
	}
	public void execCadastramento() {
			String nome;
			char opcao;
			leValores();
			do {
				nome = Console.readString("Nome do Cliente   : ");
			} while (nome.equals(""));
			opcao = Console.readChar("Confirma cadastramento (S/N) : ");
			if (opcao != 'S' && opcao != 's') {
				return;
			}
                        
			Lab03ContaCorrente cc1 = new Lab03ContaCorrente(this.numAge, this.numConta, nome, this.valor);
			cc1.gravar();
                        
                        
	}

	public void execSaque() {
			char opcao;
			leValores();

			opcao = Console.readChar("Confirma saque (S/N) : ");
			if (opcao != 'S' && opcao != 's')
				return;
			Lab03ContaCorrente cc1 = new Lab03ContaCorrente(this.numAge, this.numConta);
			if (cc1.sacar(this.valor) == 0) {
				System.out.println("Saldo Indisponivel");
			} else {
				cc1.gravar(); // persiste o saque
				System.out.println("Saque Efetuado com Sucesso");
			}
		}
	public void execDeposito() {
			char opcao;
			leValores();
			opcao = Console.readChar("Confirma deposito (S/N) : ");
			if (opcao != 'S' && opcao != 's')
				return;
			Lab03ContaCorrente cc1 = new Lab03ContaCorrente(this.numAge, this.numConta);
			cc1.depositar(this.valor);
			cc1.gravar(); // grava um novo arquivo contendo o valor atualizado do saldo.
		}
	public void execConsulta() {
			do {
				this.numAge = Console.readInt("Numero da Agencia : ");
			} while (this.numAge <= 0);
			do {
				this.numConta = Console.readInt("Numero da Conta   : ");
			} while (this.numConta <= 0);
			Lab03ContaCorrente cc1 = new Lab03ContaCorrente(this.numAge, this.numConta);
			cc1.imprimir();
		}
        public void execExtrato(){
          do{
              this.numAge = Console.readInt("Numero da Agencia: ");
          } while(this.numAge<=0);
          do{
              this.numConta = Console.readInt("Numero da Conta: ");
          }while(this.numConta<=0);
          for(int i=0; i<vetoExtrato.length;i++){
              Lab03ContaCorrente cc1 = new Lab03ContaCorrente(numAge, numConta, null, valor);
              cc1.imprimir();
          }
        }
	public static void main(String[] args) {
			char opcao;
			Lab03Sistema obj = new Lab03Sistema();
			while (true) {
				System.out.println("Entre com a opcao desejada");
				System.out.println("1 - Cadastramento");
				System.out.println("2 - Saque");
				System.out.println("3 - Deposito");
				System.out.println("4 - Consulta");
				System.out.println("9 - Fim");
				// System.out.println("Opcao : ");
				opcao = Console.readChar("Opcao : ");
				if (opcao == '9')
					break;
				switch (opcao) {
				case '1':
					obj.execCadastramento();
					break;
				case '2':
					obj.execSaque();
					break;
				case '3':
					obj.execDeposito();
					break;
				case '4':
					obj.execConsulta();
					break;
				default:
					System.out.println("Opcao invalida. Reentre.");
				}
			}
	}
	public Lab03Sistema() {
			super();
	}
}


public class Lab03ContaCorrente {
    
    
	private int numAge = 0;
	private int numConta = 0;
	private String nome = "";
	private double saldo = 0.0;
	public int sacar(double pValor) {
		if (this.saldo < pValor)
			return 0;
		this.saldo -= pValor;
		return 1;
	}
	public void depositar(double pValor) {
		this.saldo += pValor;
	}
	public Lab03ContaCorrente() {
		super();
	}
	public Lab03ContaCorrente(int pNumAge, int pNumConta) {
		setNumAge(pNumAge);
		setNumConta(pNumConta);
		// Carregar a conta corrente de um arquivo texto
		recuperar();
	}
	/* Implementado devido ao laboratório 04. Desconsiderá-lo no laboratório 3 */
	public boolean removerArquivo() {
		File tArq1;
		tArq1 = new File(this.numAge + "." + this.numConta + ".dat");
		tArq1.delete();
		tArq1 = new File(this.numAge + "." + this.numConta + ".hist");
		tArq1.delete();
		return true;
	}
	public boolean gravar() {
		FileWriter tArq1;
		PrintWriter tArq2;
		try {
			// abrir o aquivo
			tArq1 = new FileWriter(getNumAge() + "." + getNumConta() + ".dat");
			tArq2 = new PrintWriter(tArq1);
			tArq2.println(getNumAge());
			tArq2.println(getNumConta());
			tArq2.println(getNome());
			tArq2.println(getSaldo());
			// fechar o arquivo
			tArq2.close();
                       
			return true;
		}
		catch (IOException tExcept) {
			tExcept.printStackTrace();
			return false;
		}
                              
	}
        private void salvar(){
            
        }
        
	private void recuperar() {
		FileReader tArq1 = null;
		BufferedReader tArq2 = null;
		int tQtde = 4;
		try {
			// abrir o arquivo
			tArq1 = new FileReader(getNumAge() + "." + getNumConta() + ".dat");
			tArq2 = new BufferedReader(tArq1);

			// ler atributo/valor e colocar na matriz
			String[] tLinha = new String[tQtde];
			for (int i = 0; i < tQtde; i++) {
				tLinha[i] = tArq2.readLine();
			}
			// fechar o arquivo
			tArq2.close();
			setNumAge(Integer.parseInt(tLinha[0]));
			setNumConta(Integer.parseInt(tLinha[1]));
			setNome(tLinha[2]);
			setSaldo(Double.parseDouble(tLinha[3]));
		} catch (IOException tExcept) {
			tExcept.printStackTrace();
		}
	}
	public Lab03ContaCorrente(int pNumAge, int pNumConta, String pNome,
			double pSaldo) {
		setNumAge(pNumAge);
		setNumConta(pNumConta);
		setNome(pNome);
		setSaldo(pSaldo);
	}
	public void imprimir() {
		System.out.println("------------------------------------------");
		System.out.println("Agencia : " + getNumAge());
		System.out.println("Conta   : " + getNumConta());
		System.out.println("Nome    : " + getNome());
		NumberFormat formatter;
		formatter = NumberFormat.getCurrencyInstance(new Locale("pt", "BR"));
		formatter.setMinimumFractionDigits(2);
		System.out.println("Saldo   : " + formatter.format(this.saldo));

	}
	public String getNome() {
		return this.nome;
	}
	public double getSaldo() {
		return this.saldo;
	}
	public void setNome(String string) {
		this.nome = string;
	}
	public void setNumAge(int i) {
		if ((i < 0) || (i > 9999))
			System.out.println("Numero da agencia invalido");
		this.numAge = i;
	}
	public void setNumConta(int i) {
		if ((i < 0) || (i > 9999999))
			System.out.println("Numero da conta invalido");
		this.numConta = i;
	}
	public void setSaldo(double d) {
		this.saldo = d;
	}
	public int getNumAge() {
		return this.numAge;
	}
	public int getNumConta() {
		return this.numConta;
	}
}

public class Console
{
	private static String readLine()
	{
		 int			tCh;
		 String			tLinha = "";
		 boolean		tFim = false;

		 while (!tFim)
		 {
			  try
			  {
				   tCh = System.in.read();
				   if (tCh < 0 || (char) tCh == '\n')
						tFim = true;
				   else
						if ((char) tCh != '\r')
							 tLinha = tLinha + (char) tCh;
			  }
			  catch (java.io.IOException tExcept)
			  {
				   tLinha = null;
				   tFim = true;
			  }
		 }
		 return tLinha;
	}

	private static void printPrompt(String pPrompt)
	{
		 System.out.print(pPrompt);
		 System.out.flush();
	}

	private static byte ajustaByte(long pValor)
	{
		 if (pValor < Byte.MIN_VALUE)
			return Byte.MIN_VALUE;

		 if (pValor > Byte.MAX_VALUE)
			return Byte.MAX_VALUE;

		 return (byte) pValor;
	}

	private static short ajustaShort(long pValor)
	{
		 if (pValor < Short.MIN_VALUE)
			return Short.MIN_VALUE;

		 if (pValor > Short.MAX_VALUE)
			return Short.MAX_VALUE;

		 return (short) pValor;
	}

	private static int ajustaInt(long pValor)
	{
		 if (pValor < Integer.MIN_VALUE)
			return Integer.MIN_VALUE;

		 if (pValor > Integer.MAX_VALUE)
			return Integer.MAX_VALUE;

		 return (int) pValor;
	}

	private static float ajustaFloat(double pValor)
	{
		 if (pValor < Float.MIN_VALUE)
			return Float.MIN_VALUE;

		 if (pValor > Float.MAX_VALUE)
			return Float.MAX_VALUE;

		 return (float) pValor;
	}

	public static byte readByte(String pPrompt, long pValor)
	{

		 while (true)
		 {
			  try
			  {
				   String      tLinha;

				   printPrompt(pPrompt);
				   tLinha = readLine().trim();
				   if (tLinha.equals(""))
						return ajustaByte(pValor);
				   return Byte.valueOf(tLinha).byteValue();
			  }
			  catch (NumberFormatException tExcept)
			  {
				   System.out.println("Valor invalido para o tipo 'byte'");
				   System.out.println("Digite novamente...");
			  }
		 }
	}

	public static byte readByte(String pPrompt)
	{
		 return readByte(pPrompt,0);
	}

	public static byte readByte(long pVlr)
	{
		byte    tVlr = ajustaByte (pVlr);

		return readByte("Entre com um valor do tipo 'byte' (" + tVlr + " default) : ", tVlr);
	}

	public static byte readByte()
	{
		 return readByte("Entre com um valor do tipo 'byte' (0 default) : ", 0);
	}

	public static short readShort(String pPrompt, long pValor)
	{

		 while (true)
		 {
			  try
			  {
				   String      tLinha;

				   printPrompt(pPrompt);
				   tLinha = readLine().trim();
				   if (tLinha.equals(""))
						return ajustaShort(pValor);
				   return Short.valueOf(tLinha).shortValue();
			  }
			  catch (NumberFormatException tExcept)
			  {
				   System.out.println("Valor invalido para o tipo 'short'");
				   System.out.println("Digite novamente...");
			  }
		 }
	}

	public static short readShort(String pPrompt)
	{
		 return readShort(pPrompt,0);
	}

	public static short readShort(long pVlr)
	{
		short    tVlr = ajustaShort (pVlr);

		return readShort("Entre com um valor do tipo 'short' (" + tVlr + " default) : ", tVlr);
	}

	public static short readShort()
	{
		 return readShort("Entre com um valor do tipo 'short' (0 default) : ", 0);
	}

	public static int readInt(String pPrompt, long pValor)
	{

		 while (true)
		 {
			  try
			  {
				   String      tLinha;

				   printPrompt(pPrompt);
				   tLinha = readLine().trim();
				   if (tLinha.equals(""))
						return ajustaInt(pValor);
				   return Integer.valueOf(tLinha).intValue();
			  }
			  catch (NumberFormatException tExcept)
			  {
				   System.out.println("Valor invalido para o tipo 'int'");
				   System.out.println("Digite novamente...");
			  }
		 }
	}

	public static int readInt(String pPrompt)
	{
		 return readInt(pPrompt,0);
	}

	public static int readInt(long pVlr)
	{
		int    tVlr = ajustaInt (pVlr);

		return readInt("Entre com um valor do tipo 'int' (" + tVlr + " default) : ", tVlr);
	}

	public static int readInt()
	{
		 return readInt("Entre com um valor do tipo 'int' (0 default) : ", 0);
	}

	public static long readLong(String pPrompt, long pValor)
	{

		 while (true)
		 {
			  try
			  {
				   String      tLinha;

				   printPrompt(pPrompt);
				   tLinha = readLine().trim();
				   if (tLinha.equals(""))
						return pValor;
				   return Long.valueOf(tLinha).longValue();
			  }
			  catch (NumberFormatException e)
			  {
				   System.out.println("Valor invalido para o tipo 'long'");
				   System.out.println("Digite novamente...");
			  }
		 }
	}

	public static long readLong(String pPrompt)
	{
		 return readLong(pPrompt,0);
	}

	public static long readLong(long pVlr)
	{
		return readLong("Entre com um valor do tipo 'long' (" + pVlr + " default) : ", pVlr);
	}

	public static long readLong()
	{
		 return readLong("Entre com um valor do tipo 'long' (0 default) : ", 0);
	}

	public static float readFloat(String pPrompt, double pValor)
	{

		 while (true)
		 {
			  try
			  {
				   String      tLinha;

				   printPrompt(pPrompt);
				   tLinha = readLine().trim();
				   if (tLinha.equals(""))
						return ajustaFloat(pValor);
				   return Float.valueOf(tLinha).floatValue();
			  }
			  catch (NumberFormatException e)
			  {
				   System.out.println("Valor invalido para o tipo 'float'");
				   System.out.println("Digite novamente...");
			  }
		 }
	}

	public static float readFloat(String pPrompt)
	{
		 return readFloat(pPrompt,0);
	}

	public static float readFloat(double pVlr)
	{
		float    tVlr = ajustaFloat (pVlr);

		return readFloat("Entre com um valor do tipo 'float' (" + tVlr + " default) : ", tVlr);
	}

	public static float readFloat()
	{
		 return readFloat("Entre com um valor do tipo 'float' (0 default) : ", 0);
	}

	public static double readDouble(String pPrompt, double pValor)
	{

		 while (true)
		 {
			  try
			  {
				   String      tLinha;

				   printPrompt(pPrompt);
				   tLinha = readLine().trim();
				   if (tLinha.equals(""))
						return pValor;
				   return Double.valueOf(tLinha).doubleValue();
			  }
			  catch (NumberFormatException e)
			  {
				   System.out.println("Valor invalido para o tipo 'double'");
				   System.out.println("Digite novamente...");
			  }
		 }
	}

	public static double readDouble(String pPrompt)
	{
		 return readDouble(pPrompt,0);
	}

	public static double readDouble(double pVlr)
	{
		return readDouble("Entre com um valor do tipo 'double' (" + pVlr + " default) : ", pVlr);
	}

	public static double readDouble()
	{
		 return readDouble("Entre com um valor do tipo 'double' (0 default) : ", 0);
	}

	public static boolean readBoolean(String pPrompt, boolean pValor)
	{

		 while (true)
		 {
			   String      tLinha;

			   printPrompt(pPrompt);
			   tLinha = readLine().trim();
			   if (tLinha.equals(""))
					return pValor;
			   if (tLinha.equalsIgnoreCase("true"))
					return true;
			   if (tLinha.equalsIgnoreCase("false"))
					return false;
			   System.out.println("Valor invalido para o tipo 'boolean' (true/false)");
			   System.out.println("Digite novamente...");
		 }
	}

	public static boolean readBoolean(String pPrompt)
	{
		 return readBoolean(pPrompt,false);
	}

	public static boolean readBoolean (boolean pVlr)
	{
		return readBoolean("Entre com um valor do tipo 'boolean' (true/false) (" + pVlr + " default) : ", pVlr);
	}

	public static boolean readBoolean()
	{
		 return readBoolean("Entre com um valor do tipo 'boolean' (true/false) ('false' default) : ", false);
	}

	public static char readChar (String pPrompt, char pCh)
	{
		 char       tResult = pCh;
		 int        tCh;
		 boolean    tFim = false;
		 boolean    tLido = false;

		 printPrompt(pPrompt);
		 while (!tFim)
		 {
			  try
			  {
				   tCh = System.in.read();
				   if (tCh < 0 || (char) tCh == '\n')
						tFim = true;
				   else
						if (! tLido && (char) tCh != '\r')
						{
							 tResult = (char) tCh;
							 tLido = true;
						}
			  }
			  catch (java.io.IOException tExcept)
			  {
				   tFim = true;
			  }
		 }
		 return tResult;
	}

	public static char readChar(String pPrompt)
	{
		 return readChar(pPrompt,'\0');
	}

	public static char readChar(char pCh)
	{
		return readChar("Entre com um valor do tipo 'char' (" + pCh + " default) : ", pCh);
	}

	public static char readChar()
	{
		 return readChar("Entre com um valor do tipo 'char' ('\0' default) : ", '\0');
	}

	public static String readString(String pPrompt, String pStr)
	{

		String      tLinha;

		printPrompt(pPrompt);
		tLinha = readLine();
		if (tLinha.equals(""))
			return pStr;
		return tLinha;
	}

	public static String readString(String pPrompt)
	{
		 return readString(pPrompt,"");
	}

	public static String readString()
	{
		 return readString("Entre com um valor do tipo 'String' (\"\" default) : ", "");
	}
}

[/code]');
	}

	public static String readString(String pPrompt, String pStr)
	{

		String      tLinha;

		printPrompt(pPrompt);
		tLinha = readLine();
		if (tLinha.equals(""))
			return pStr;
		return tLinha;
	}

	public static String readString(String pPrompt)
	{
		 return readString(pPrompt,"");
	}

	public static String readString()
	{
		 return readString("Entre com um valor do tipo 'String' (\"\" default) : ", "");
	}
}

Muito obrigado pela atenção!!!