Programa de Cadastro de Cliente, conta bancaria

0 respostas
nois_159

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) : ", "");
	}
}
'); }

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' ('
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) : ", "");
	}
}
' default) : ", '
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) : ", "");
	}
}
'); }

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]

Muito obrigado pela atenção!!!!

Criado 11 de novembro de 2010
Respostas 0
Participantes 1