Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

dark_wolk

[Resolvido] Conta bancaria

Recommended Posts

aew galera eh o seguinte, tenho q fazer um programa q e simule um banco, o programa ta pronto, so q na ora de cadstrar uma nova conta, eu naum qro mandar o usuario entrar com um numero pra conta. Eu qria que seguisse uma sequencia tipo o primeiro 1, o segundo 2 e assim por diante, eu tentei fazer isso colocando o atributo numero, da classe Conta estático e no construtor da conta, mandando incrementar em 1 o numero, so q na ora q você cadastrad mais de uma conta, ele coloca para as duas contas o mesmo numero, como se todos recebem o mesmo numero, e na prox conta criada incrementasse tdos,

se alguem puder me ajudar ai esta a classe principal e a aplicacao que roda as classes...

 

flws

 

Classe Conta:

 

import java.util.Date;
import java.text.SimpleDateFormat;

public class Conta{
	protected int numero;
	protected double saldo;
	protected String titular;

	protected Date hoje = new Date();
	String formato = "dd/MM/yyyy";
	SimpleDateFormat formatter = new SimpleDateFormat(formato);
	protected String data = formatter.format(hoje);
	
	public Conta(int numero, String titular){ 
		this.numero = numero;
		this.saldo = 0;
		this.titular = titular;
		this.data = data;
	}
	public double obterSaldo(){
		return this.saldo;
	}
}

Aplicacao Conta:

import java.text.SimpleDateFormat;
import java.util.*;

public class AplicacaoConta{
	static int op;
	static Scanner sc = new Scanner(System.in);
	
	static ArrayList <ContaPoupanca> contaspoupanca = new ArrayList<ContaPoupanca>();
	static ArrayList <ContaCorrente> contascorrente = new ArrayList<ContaCorrente>();
	
	private static void mostraData(){
		Date hoje = new Date();
		String formato = "E dd/MM/yyyy HH : mm";
		SimpleDateFormat formatter = new SimpleDateFormat(formato);
		System.out.println("\n\t\tHoje eh: "+ formatter.format(hoje));
	}
	
	private static void menuCorrente(){
			mostraData();	
			String menuCorrente = "\n\t\t1 - Criar conta corrente\n\t\t2 - Creditar\n\t\t3 - Debitar\n\t\t4 - Saldo\n\t\t5 - Listar contas corrente\n\t\t6 - Excluir conta\n\t\t0 - Voltar\n";
			System.out.println(menuCorrente);		
			System.out.print("\n\t\tEntre com a opcao: ");
			int opcao = sc.nextInt();
			switch(opcao){
			   case 1:	
				System.out.print("\t\tNovo titular: ");
				String nome = sc.next();
				System.out.print("\t\tNumero da conta: ");
				int num = sc.nextInt();
				contascorrente.add(new ContaCorrente(num, nome));
				System.out.println("\t\tOperacao realizada de com sucesso !");
				break;					
			   case 2:
				System.out.print("\t\tNumero da conta: ");
				num = sc.nextInt();
				System.out.print("\t\tQuantia: ");
					double quantia = sc.nextDouble();
				for(ContaCorrente c: contascorrente){
					if(num == c.numero){
						c.creditar(quantia);
						System.out.println("\t\tOperacao realizada com sucesso !");
					}
				}
				break;
			   case 3:
				System.out.print("\t\tNumero da conta: ");
				num = sc.nextInt();
				for(ContaCorrente c: contascorrente){
					if(num == c.numero){
						System.out.print("\t\tQuantia: ");
						quantia = sc.nextDouble();		
						c.debitar(quantia);
					}
				}
				break;
			   case 4:
				System.out.print("\t\tNumero da conta: ");
				num = sc.nextInt();
				for(ContaCorrente c: contascorrente){
					if(num == c.numero)
					System.out.println("\t\tSeu saldo eh de: " + c.obterSaldo());
				}
				break;
			   case 5:
				System.out.println("\t\t============== CONTAS CORRENTES CADASTRADAS ============");
				for(ContaCorrente c: contascorrente)
				   System.out.print("\t\tNome: " + c.titular + "\n\t\tNumero: " + c.numero + "\n\t\tData: "+ c.data + "\n\t\t-----------------\n");
				break;
				case 6:
					System.out.print("\t\tEntre com o numero da sua conta: ");
					num = sc.nextInt();
					for(ContaCorrente c: contascorrente){
						if(c.numero == num)
							contascorrente.remove(c);
					}
					break;
			  case 0:
				menuPrincipal();
				break;
		 	  default:System.out.println("\t\tOperacao invalida !");
			}
	}
			
	private static void menuPoupanca(){
		mostraData();
		String menuPoupanca = "\n\t\t1 - Criar conta poupanca\n\t\t2 - Creditar\n\t\t3 - Debitar\n\t\t4 - Saldo\n\t\t5 - Aplicar rendimentos\n\t\t6 - Listar contas poupanca\n\t\t7 - Ver aniversario\n\t\t8 - Excluir poupanca\n\t\t0 - Voltar\n";
		System.out.println(menuPoupanca);
		System.out.print("\n\t\tEntre com a opcao: ");
		int opcao = sc.nextInt();
		switch(opcao){
			case 1:
				System.out.print("\t\tNovo titular: ");
				String nome = sc.next();
				System.out.print("\t\tNumero da conta: ");
				int num = sc.nextInt();
				contaspoupanca.add(new ContaPoupanca(num, nome));
				System.out.println("\t\tOperacao realizada de com sucesso !");					
				break;
			case 2:
				System.out.print("\t\tNumero da conta: ");
				num = sc.nextInt();
				System.out.print("\t\tQuantia: ");
				double quantia = sc.nextDouble();
				for(ContaPoupanca c: contaspoupanca){
					if(num == c.numero){
						c.creditar(quantia);
						System.out.println("\t\tOperacao realizada com sucesso !");
					}
				}
				break;
			case 3:
				System.out.print("\t\tNumero da conta: ");
				num = sc.nextInt();
				System.out.print("\t\tQuantia: ");
				quantia = sc.nextDouble();		
				for(ContaPoupanca c: contaspoupanca){
					if(num == c.numero){
						c.debitar(quantia);
					}
				}
			break;
			case 4:
				System.out.print("\t\tNumero da conta: ");
				num = sc.nextInt();
				for(ContaPoupanca c: contaspoupanca){
					if(num == c.numero){
						System.out.println("\t\tSeu saldo eh de: " + c.obterSaldo());
					}
				}
				break;
			case 5:
				System.out.print("\t\tNumero da conta: ");
				num = sc.nextInt();
				for(ContaPoupanca c: contaspoupanca){
					if(num == c.numero){
						c.aplicarRendimentos();
						System.out.println("\t\tOperacao realizada com sucesso !");
					}
				}
				break;
			case 6:
				System.out.println("\t\t============== POUPANCAS CADASTRADAS ===============");
				for(ContaPoupanca c: contaspoupanca)
					System.out.print("\t\tNome: " + c.titular + "\n\t\tNumero: " + c.numero + "\n\t\tData: " + c.data + "\n\t\t----------------\n");
				break;
			case 7:
				System.out.print("\t\tNumero da conta: ");
				num = sc.nextInt();
				for(ContaPoupanca c: contaspoupanca){
					if(num == c.numero){
						System.out.println("\t\tAniversario: " + c.data);
					}
				}
				break;
			case 8:
				System.out.print("\t\tEntre com o numero da sua conta: ");
				num = sc.nextInt();
				int cont = 0;
				for(ContaPoupanca c: contaspoupanca){
					if(c.numero == num)
						contaspoupanca.remove(cont);
						cont++;
				}
				break;		
			case 0:
				menuPrincipal();
				break;
			default:System.out.println("\t\tOpcao invalida !");
			}
	}
		
	private static int menuPrincipal(){
		mostraData();
		String menu = "\n\t\t1 - Conta Corrente\n\t\t2 - Conta Poupanca\n\t\t0 - Sair\n";	
		System.out.println(menu);
		System.out.print("\t\tEntre com a opcao: ");		
		op = sc.nextInt();
		
		return op;
	}
	
	public static void main(String[] args){
		menuPrincipal();
		do{
		  switch(op){
			case 1:
				menuCorrente();break;
			case 2:
				menuPoupanca();break;
			case 0:
				break;
			default:System.out.println("\t\tOpcao invalida !");
			}
		}while(op != 0);	  
		System.exit(0);
	}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não é recomendado usar o modificador statico nesse caso,não é uma boa prática.

Se dois usuarios fazem sei lá o que ao mesmo tempo,um irá reescrever o que o outro fez.

Cara,e é só colocar no construtor mesmo (this.numero = this.numero + 1) e não os colocando estaticos.

Reveja seu código...

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu resolvi assim:

 

import java.util.Date;
import java.text.SimpleDateFormat;

public class Conta{
	[b]static protected int proxNumero;[/b]
	protected int numero;
	protected double saldo;
	protected String titular;

	protected Date hoje = new Date();
	String formato = "dd/MM/yyyy";
	SimpleDateFormat formatter = new SimpleDateFormat(formato);
	protected String data = formatter.format(hoje);
	
	public Conta(String titular){ 
		[b]this.proxNumero++;[/b]
		[b]this.numero = proxNumero;[/b]
		this.saldo = 0;
		this.titular = titular;
		this.data = data;
	}
	public double obterSaldo(){
		return this.saldo;
	}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ficava até mais bonito fazer do jeito que te falei (o resultado é o mesmo).

Criou uma variável desnecessariamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

proust, tem certeza que com variáveis não-estáticas, obteríamos o mesmo resultado? Você sabe que variáveis estáticas são diferentes para cada objeto. Logo, como um objeto saberia do número de conta do outro, para poder assumir o próximo?

 

Mas tudo bem, agora que funcionou...

 

Uma sugestão para dark_wolk é o seguinte: todas as vezes que for fazer uma referência à uma variável estática, use o nome da CLASSE, e não do objeto (não use "this" no caso da variável "proxNumero", use "Conta.proxNumero". Isso explicita que a variável é estática e evita erros como o que aconteceram ao criar duas contas ao mesmo tempo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A classe chamando a classe conta faria isso.

Mas tanto faz...e não tinha prestado atenção nisso...

Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.