Sistema Bancario _ Problema_Fotos

9 respostas
luhkas1107

Olá galera to com uma duvida enorme aki, minha codificação ta meio bagunçada mais é o de menos , o meu problema é o seguinte o programa que eu fiz
é um pequeno sistema bancario, assim que eu clico na opção depositar, ele abre normal , vou la e deposito minhas patacas como mostrado nos procedimentos da imagem 1 e imagem 2

[color=red]imagem1:[/color]
[img]http://imageshack.us/a/img607/9404/imagem2lg.jpg[/img]
[color=darkred]imagem2:[/color]
[img]http://imageshack.us/a/img20/5300/imagem3sk.jpg[/img]
[color=red]Dinheiro Depositado:[/color]
[img]http://imageshack.us/a/img14/1156/imagem4kr.jpg[/img]
depois de depositado minhas patacas ele volta para o menu, aparentemente normal eu acho :)
[img]http://imageshack.us/a/img7/8614/imagem1iw.jpg[/img]

Agora vou conferir se minhas patacas foram depositadas, acessando a parte de saldo:
[img]http://imageshack.us/a/img834/7118/imagem6tk.jpg[/img]

E como esperado minhas patacas foram depositadas, Como esperado ...
[img]http://imageshack.us/a/img10/3954/imagem7o.jpg[/img]

REPITO O MESMO PROCESSO DO INICIO DO TOPICO
1ºDepois de ver o saldo volta para o menu
2ºDepois eu vou e deposito mais R$ 1.00
3ºVolto Para o Menu
4ºClico na Opção Saldo

RESULTADO ESPERADO :[color=darkblue]R$ 2.00[/color]

RESULTADO APRESENTADO : [color=red]R$ 3.00[/color]
[img]http://imageshack.us/a/img46/6972/imagem8rr.jpg[/img]

[color=cyan]A codificação(MENU) : [/color]
package Telas_Programa;

import java.awt.BorderLayout;
import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JLabel;
import java.awt.Font;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JMenuBar;
import javax.swing.JPopupMenu;
import java.awt.Component;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.Button;

public class Menu extends JDialog {

	private final JPanel contentPanel = new JPanel();

	/**
	 * Launch the application.
	 */
	
	
	public static void main(String[] args) {
	
		try {
			Menu dialog = new Menu();
			dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
			dialog.setVisible(true);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	
	
	
	public static float dinheiro;
	public static float dinheiroSacado;
	public static float dinheiroDepositado;
	


	/**
	 * Create the dialog.
	 */
	public Menu() {
		
		setTitle("Menu");
		setBounds(100, 100, 232, 312);
		getContentPane().setLayout(new BorderLayout());
		contentPanel.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent arg0) {
			}
		});
		contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
		getContentPane().add(contentPanel, BorderLayout.CENTER);
		contentPanel.setLayout(null);
		
		JLabel lblNewLabel = new JLabel("Sistema Bancario");
		lblNewLabel.setFont(new Font("Tahoma", Font.PLAIN, 18));
		lblNewLabel.setBounds(45, 48, 156, 23);
		contentPanel.add(lblNewLabel);
		dinheiroSacado=0;
		dinheiroDepositado=0;
		dinheiroSacado=Saque.dinheiroSacado;
		dinheiroDepositado=Deposito.dinheiroDepositado;
		if (dinheiroSacado!=0 && dinheiroSacado<dinheiro){
			dinheiro=dinheiro - dinheiroSacado;	
			dinheiroSacado=0;
		}
		if (dinheiroDepositado!=0){
			dinheiro=dinheiroDepositado+dinheiro;
			dinheiroDepositado=0;
		}
		
		
		
		Button saque = new Button("Saque");
		saque.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				setVisible(false);
				Saque frame = new Saque(); 				  
				frame.setVisible(true);  
				
			}
		});
		saque.setBounds(72, 112, 90, 22);
		contentPanel.add(saque);
		
		JButton btnNewButton = new JButton("Saldo");
		btnNewButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				setVisible(false);
				Saldo frame = new Saldo(); 				  
				frame.setVisible(true);  
			}
		});
		btnNewButton.setBounds(72, 150, 90, 23);
		contentPanel.add(btnNewButton);
		
		JButton btnNewButton_1 = new JButton("Deposito");
		btnNewButton_1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				setVisible(false);
				Deposito frame = new Deposito(); 				  
				frame.setVisible(true);  
			}
		});
		btnNewButton_1.setBounds(72, 184, 90, 23);
		contentPanel.add(btnNewButton_1);
		
	}
	private static void addPopup(Component component, final JPopupMenu popup) {
		component.addMouseListener(new MouseAdapter() {
			public void mousePressed(MouseEvent e) {
				if (e.isPopupTrigger()) {
					showMenu(e);
				}
			}
			public void mouseReleased(MouseEvent e) {
				if (e.isPopupTrigger()) {
					showMenu(e);
				}
			}
			private void showMenu(MouseEvent e) {
				popup.show(e.getComponent(), e.getX(), e.getY());
			}
		});
		
	}
	
}
[color=olive]DEPOSITO : [/color]
package Telas_Programa;

import java.awt.BorderLayout;
import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JTextField;
import javax.swing.JLabel;
import java.awt.Font;
import java.awt.Color;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class Deposito extends JDialog {

	private final JPanel contentPanel = new JPanel();
	private JTextField dinheirodeposito;
	  
	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		try {
			Deposito dialog = new Deposito();
			dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
			dialog.setVisible(true);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	Float dinheiro = Menu.dinheiro;
	public static float dinheiroDepositado;
	
	/**
	 * Create the dialog.
	 */
	public Deposito() {
		setTitle("Deposito");
		setBounds(100, 100, 250, 249);
		getContentPane().setLayout(new BorderLayout());
		contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
		getContentPane().add(contentPanel, BorderLayout.CENTER);
		contentPanel.setLayout(null);
		{
			dinheirodeposito = new JTextField();
			dinheirodeposito.setFont(new Font("Tahoma", Font.BOLD | Font.ITALIC, 17));
			dinheirodeposito.setForeground(Color.BLUE);
			dinheirodeposito.setBounds(59, 84, 121, 36);
			contentPanel.add(dinheirodeposito);
			dinheirodeposito.setColumns(10);
			
		}
		{
			JLabel lblDinheirodeposito = new JLabel("Dinheiro/Deposito");
			lblDinheirodeposito.setFont(new Font("Tahoma", Font.BOLD, 18));
			lblDinheirodeposito.setBounds(39, 27, 196, 26);
			contentPanel.add(lblDinheirodeposito);
			
		}
		{
			JButton btnDepositar = new JButton("Depositar");
			btnDepositar.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					String aux;
					aux=dinheirodeposito.getText();
					dinheiroDepositado=Float.parseFloat(aux);
					setVisible(false);
					Menu frame= new Menu();
					frame.setVisible(true);
					JOptionPane.showMessageDialog(null, "Dinheiro Depositado!");
					JOptionPane.showMessageDialog(null, "Dinheiro:"+dinheiroDepositado);
					
				}
			});
			btnDepositar.setBounds(10, 178, 89, 23);
			contentPanel.add(btnDepositar);
		}
		{
			JButton btnMenu = new JButton("Menu");
			btnMenu.setBounds(135, 178, 89, 23);
			contentPanel.add(btnMenu);
		}
		{
			JPanel buttonPane = new JPanel();
			buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
			getContentPane().add(buttonPane, BorderLayout.SOUTH);
		}
	}

}

[color=blue]SAQUE:[/color]

package Telas_Programa;

import java.awt.BorderLayout;
import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JTextField;
import javax.swing.JLabel;
import java.awt.Font;
import java.awt.Color;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class Saque extends JDialog {

	private final JPanel contentPanel = new JPanel();
	private JTextField txtR;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		try {
			Saque dialog = new Saque();
			dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
			dialog.setVisible(true);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static float dinheiro=Menu.dinheiro;
	public static float dinheiroSacado;
	/**
	 * Create the dialog.
	 */
	public Saque() {
		setTitle("Saque");
		setBounds(100, 100, 324, 237);
		getContentPane().setLayout(new BorderLayout());
		contentPanel.setForeground(Color.BLACK);
		contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
		getContentPane().add(contentPanel, BorderLayout.CENTER);
		contentPanel.setLayout(null);
		
		txtR = new JTextField();
		txtR.setForeground(Color.RED);
		txtR.setFont(new Font("Stencil", Font.BOLD, 16));
		txtR.setBounds(88, 74, 154, 41);
		contentPanel.add(txtR);
		txtR.setColumns(10);
		
		JLabel lblDinheiroSacado = new JLabel("Dinheiro Sacado");
		lblDinheiroSacado.setFont(new Font("Tahoma", Font.BOLD | Font.ITALIC, 18));
		lblDinheiroSacado.setBounds(88, 22, 154, 30);
		contentPanel.add(lblDinheiroSacado);
		
		JButton btnSacar = new JButton("SACAR");
		btnSacar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {

		String aux;
		
		aux = txtR.getText();
		dinheiroSacado=Float.parseFloat(aux);
		if(dinheiroSacado>dinheiro){
			JOptionPane.showMessageDialog(null, "Dinheiro Insulficiente!");
			dinheiroSacado=0;
			aux=null;
			setVisible(false);
			Menu frame=new Menu();
			frame.setVisible(true);
			
		}
		else{
			JOptionPane.showMessageDialog(null, "Dinheiro Sacado com suscesso");
			setVisible(false);
			Menu frame=new Menu();
			frame.setVisible(true);	
		}
			}
		});
		btnSacar.setBounds(10, 155, 89, 23);
		contentPanel.add(btnSacar);
		
		JButton btnMenu = new JButton("MENU");
		btnMenu.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				setVisible(false);
				Menu frame = new Menu(); 				  
				frame.setVisible(true);  
				
			}
		});
		btnMenu.setBounds(209, 155, 89, 23);
		contentPanel.add(btnMenu);
		{
			JPanel buttonPane = new JPanel();
			buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
			getContentPane().add(buttonPane, BorderLayout.SOUTH);
		}
	}
}

[color=red]SALDO:[/color]

package Telas_Programa;

import java.awt.BorderLayout;
import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import java.awt.Font;
import java.awt.Color;
import javax.swing.SwingConstants;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;


public class Saldo extends JDialog {

	private final JPanel contentPanel = new JPanel();

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		try {
			Saldo dialog = new Saldo();
			dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
			dialog.setVisible(true);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	Float dinheiro = Menu.dinheiro; 
	
	
	/**
	 * Create the dialog.
	 */
	public Saldo() {
		setBounds(100, 100, 224, 227);
		getContentPane().setLayout(new BorderLayout());
		contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
		getContentPane().add(contentPanel, BorderLayout.CENTER);
		contentPanel.setLayout(null);
		{
			JLabel lblNewLabel = new JLabel("Saldo");
			lblNewLabel.setBounds(80, 11, 49, 22);
			lblNewLabel.setFont(new Font("Tahoma", Font.BOLD, 18));
			contentPanel.add(lblNewLabel);
		}
		{
			
			
			//JOptionPane.showMessageDialog(null, " " );
			JLabel mostrarSaldo = new JLabel("R$ "+dinheiro);
			mostrarSaldo.setForeground(Color.BLUE);
			mostrarSaldo.setHorizontalAlignment(SwingConstants.CENTER);
			mostrarSaldo.setFont(new Font("Tahoma", Font.PLAIN, 16));
			mostrarSaldo.setBackground(Color.BLUE);
			mostrarSaldo.setBounds(62, 55, 90, 30);
			contentPanel.add(mostrarSaldo);
		}
		{
			JButton btnNewButton = new JButton("Menu");
			btnNewButton.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					setVisible(false);
					new Menu().setVisible(true); 
				}
			});
			btnNewButton.setBounds(63, 155, 89, 23);
			contentPanel.add(btnNewButton);
			
		}
	}

}

VLW GALERA

9 Respostas

mr.garcialuigi

Cara, eu posso tar errado, mas na minha opinião achei bem sujo o código, até difícil de ler. Na minha visão você complicou um pouco.

Eu faria:

  • Uma classe pra Conta do cara.
  • Essa classe teria os métodos:
    - Depositar;
    - Exibir Saldo;
    - Sacar;

Cada método trataria suas individualidades, e o Menu apenas chamaria esses métodos.
Eu deixaria mais orientado a objetos, acho que fica mais fácil resolver erros, e mais dificil de criar erros trabalhando dessa forma.
Confesso que não achei o teu erro nesse código.

luhkas1107

Beleza, como eu ti falei eu nao arrumei o codigo só fiz para ter um “norte” uma direção do sistema, mais nao entendi por que ta dando numeros errados entendeu??

luhkas1107

Eu fiz exatamente isso que vc falou vc pode até ver que no codigo do menu ele chama os metodos do SAQUE DEPOSITO e DO SALDO
só que ja mexi e remexi e nao consigo fazer essa bagaça dar certo

yfalbino

realmente seu codigo esta bem dificil de ler, mas nao achei nada de errado

tente mudar o codigo, organize ele, coloque em funcoes, fica mais organizado, e voce pode verificar melhor aonde está o erro

mr.garcialuigi

exatamente o que quis dizer, são tarefas simples…
Duvido que se você organizar isso ai não ache seu erro facilmente.

yfalbino

com certeza ele acha, é dificil achar erros no meio de um codigo bagunçado

tgcmv

Bem, se vc debugar seu código encontrará um erro aqui:

(na classe Menu)

 if (dinheiroDepositado!=0){  
            dinheiro=dinheiroDepositado+dinheiro;  
            dinheiroDepositado=0;  
 }

Uma vez feito o depósito o dinheiro depositado é sempre != 0 e neste caso o 'dinheiro' é sempre incrementado do valor depositado. Se vc após fazer algum depósito clicar em ver saldo, menu e ver saldo novamente já verá este erro.

Entretanto seu código vai contra qualquer boa pratica de programação. Se sugir um tempinho lhe mando uma versão melhorada com dicas de como continuar.

Recomendo leituras do blog da caelum e/ou apostilas da k19. Já em livros recomendo a série use a cabeça. E, principalmente de uma lida sobre TDD.

tgcmv

Apenas fontes
sistema_bancario.rar (6 KB)
https://mega.co.nz/#!uZpkGL5Z!XUZ73BQ765UUq4SoXPB6nX3jqN8R7hc6OR4cHiFDwuY

Projeto do eclipse
SistemaBancario.rar (22 KB)
https://mega.co.nz/#!acAmWS6T!UfuVs1j3FxXJPgxoXVv4OWlxII1FvvPXkuaRh3y_BjE

O que foi feito?

Bem, as telas não devem manipular suas regras de negócio.

Programando pensando em testes primeiro. Inicialmente foi criado uma classe teste para conta:

package test.model;

import static org.junit.Assert.assertTrue;
import model.Conta;

import org.junit.Before;
import org.junit.Test;

public class ContaTest {

	private Conta conta;

	@Before
	public void criar_conta_para_realizar_testes() {
		conta = new Conta();
	}

	@Test
	public void conta_deve_iniciar_com_saldo_zero() {

		assertTrue(conta.getSaldo() == 0);
	}

	@Test
	public void adicionando_e_removendo_valores_do_saldo() {
		assertTrue(conta.getSaldo() == 0);

		float saldoAntesOperacao;
		float saldoAposOperacao;

		saldoAntesOperacao = conta.getSaldo();
		conta.adicionarSaldo((float) 5.12);
		saldoAposOperacao = conta.getSaldo();
		assertTrue(saldoAposOperacao == (float) 5.12);

		saldoAntesOperacao = conta.getSaldo();
		conta.subtrairSaldo((float) 3.45);
		saldoAposOperacao = conta.getSaldo();
		assertTrue(saldoAposOperacao == saldoAntesOperacao - (float) 3.45);

	}
}

e foi criada uma classe para passar nesses teste.

Logo após foi feita um controlador da conta (chmaei-o de GerenciarConta)
package test.model;

import static org.junit.Assert.assertTrue;
import model.Conta;
import model.GerenciarConta;

import org.junit.Before;
import org.junit.Test;

import excecao.SaqueException;

public class GerenciarContaTest {

	private GerenciarConta operarConta;

	@Before
	public void criar_conta_para_realizar_testes() {
		operarConta = new GerenciarConta(new Conta());
	}

	@Test
	public void deve_depositar_atualizando_o_saldo_corretamente() {
		float valorDoDeposito = (float) 10.00;

		// Inicialmente O saldo deve ser 0;
		assertTrue(operarConta.verificarSaldo() == 0);

		// faço um deposito
		operarConta.depositar(valorDoDeposito);

		// o saldo deve ser agora de 10 reais
		assertTrue(operarConta.verificarSaldo() == (float) 10.00);

	}

	@Test
	public void nao_deve_depositar_valor_negativo() {
		// TODO
	}

	@Test
	public void deve_sacar_atualizando_o_saldo_corretamente()
			throws SaqueException {
		float valorDoDeposito = (float) 10.00;
		float valorDoSaque = (float) 5.50;

		// Inicialmente O saldo deve ser 0;
		assertTrue(operarConta.verificarSaldo() == 0);

		// faço um deposito (já testando anteriormente e por isso deve estar
		// funcionando corretamente)
		operarConta.depositar(valorDoDeposito);

		// faço um saque
		operarConta.sacar(valorDoSaque);

		// o saldo deve ser agora de valor do deposito subtraido do valor do
		// saque
		assertTrue(operarConta.verificarSaldo() == (valorDoDeposito - valorDoSaque));

	}

	@Test
	public void nao_deve_sacar_valor_negativo() {
		// TODO
	}

	@Test(expected = SaqueException.class)
	public void nao_deve_permitir_saque_maior_que_o_disponivel()
			throws SaqueException {
		float valorDoSaque = (float) 15.50;

		// Inicialmente O saldo deve ser 0;
		assertTrue(operarConta.verificarSaldo() == 0);

		// faço um saque sem depositar nada
		operarConta.sacar(valorDoSaque);
	}
}
E uma classe para passar nos teste:
package model;

import excecao.SaqueException;

public class GerenciarConta {

	private final Conta conta;

	public GerenciarConta(Conta conta) {
		this.conta = conta;
	}

	public float verificarSaldo() {
		return conta.getSaldo();
	}

	public void sacar(float valor) throws SaqueException {
		if (this.verificarSaldo() > valor) {
			conta.subtrairSaldo(valor);
		} else {
			throw new SaqueException();
		}

	}

	public void depositar(float valor) {
		conta.adicionarSaldo(valor);
	}

}

a exceção SaqueException apenas lança a frase não foi possivel realizar o saque.

Bem, as telas são as mesmas só alterando suas ações, como por exemplo:
btnDepositar.addActionListener(new ActionListener() {
				@Override
				public void actionPerformed(ActionEvent e) {

					float valor;
					valor = Float.parseFloat(dinheirodeposito.getText());
					setVisible(false);
					Menu frame = new Menu();
					frame.setVisible(true);
					JOptionPane.showMessageDialog(null, "Dinheiro Depositado!");
					JOptionPane
							.showMessageDialog(null, "Dinheiro: R$ " + valor);

					Menu.operarConta.depositar(valor);

				}
			});

Qualquer duvida pergunta ai. Bons estudos.

OBS.: Pode até parecer que criei muitas classes desnecessárias. Só que a medida que o sistema crescer vc verá que é melhor ter muitas classes pequenas do que uma só gigante. Procure ler sobre principios oo.

luhkas1107

Vlw galera vou seguir esse conselhos que vc6 me deram, o codigo vou testar aki e dou a respostaa!!

Criado 2 de abril de 2013
Ultima resposta 3 de abr. de 2013
Respostas 9
Participantes 4