Como estou programando?

1 resposta
marcio0

Bom dia galera, terminei um exercício aqui, e o programa esta quase funcionando de acordo com o pedido, mas ainda faltam algumas coisas.
Mas o problema é que escrevi varias linhas de código, e ainda não sei como estou programando, então to postando o código aqui, e quero que me deem todas as criticas e sugestões, por favor!
Se quiserem posso também postar aqui o exercício e o diagrama de classes.
Quero saber se estou fazendo algo errado principalmente no tratamento de eventos e exceções, que são os ultimos assuntos que estudei.

package carro;

public abstract class Veiculo{
	private String placa;
	private String condutor;
	
	public Veiculo( String placa, String condutor ){
		setPlaca(placa);
		setCondutor(condutor);
	}
	
	public void setPlaca( String placa ){
		this.placa = placa;
	}
	
	public String getPlaca(){
		return placa;
	}
	
	public void setCondutor( String condutor ){
		this.condutor = condutor;
	}
	
	public String getCondutor(){
		return condutor;
	}
		
	public abstract boolean abastecer();
}
package posto;
import carro.*;
import javax.swing.JOptionPane;

public abstract class Abastecimento extends Veiculo{
	private int quantidadeLitros;
	private double valorCombustivel;
	
	public Abastecimento( String placa, String condutor, int quantidadeLitros, double valorCombustivel ){
		super( placa, condutor );
		setQuantidadeLitros( quantidadeLitros );
		setValorCombustivel( valorCombustivel );
	}
	
	public void setQuantidadeLitros( int quantidadeLitros ){
		this.quantidadeLitros = quantidadeLitros;
	}
	
	public int getQuantidadeLitros(){
		return quantidadeLitros;
	}
	
	public void setValorCombustivel( double valorCombustivel ){
		this.valorCombustivel = valorCombustivel;
	}
	
	public double getValorCombustivel(){
		return valorCombustivel;
	}
	
	public static boolean abastecer(){
		String escolha = "";
		
		try{
			escolha = JOptionPane.showInputDialog( "Deseja abastecer?\nS - sim\nN - não" );
		}
		catch( NullPointerException e){
			System.exit(0);
		}
		
		if ( escolha.equals( "s" ) )
			return true;
		else if ( escolha.equals( "n" ) )
			return false;
		else 
			JOptionPane.showMessageDialog( null, "Digite apenas s ou n!" );
		return false;
	}
	
	public abstract float mostrarTotal();
}
package posto;

public class Alcool extends Abastecimento{
	private float desconto = 0.03f;
	
	public Alcool( String placa, String condutor, int quantidadeLitros, double valorCombustivel){
		super( placa, condutor, quantidadeLitros, valorCombustivel );
	}
	
	public float getDesconto(){
		return desconto;
	}
	
	public void setDesconto( float desconto ){
		this.desconto = desconto;
	}
	
	public float mostrarTotal(){
		return (float)( ( getQuantidadeLitros() * getValorCombustivel() ) - getDesconto() );
	}
}
package posto;

public class Gasolina extends Abastecimento{
	
	public Gasolina( String placa, String condutor, int quantidadeLitros, double valorCombustivel ){
		super( placa, condutor, quantidadeLitros, valorCombustivel );
	}
	
	public float mostrarTotal() throws ArithmeticException{
		return (float)( getQuantidadeLitros() * getValorCombustivel() );
	}
}
package layout;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import posto.Abastecimento;
import posto.Alcool;
import posto.Gasolina;

public class PostoLayout extends JFrame{
	private JLabel lCondutor, lPlaca, lQtdLitros, lValCombustivel, lTotal;
	private JTextField tCondutor, tPlaca, tQtdLitros, tValCombustivel, tTotal;
	private JRadioButton rGasolina, rAlcool;
	private ButtonGroup bgCombustivel;
	private JButton bCadastrar, bExibir;
	private JPanel painel;
	
	public PostoLayout(){
		super( "Posto" );
		painel = new JPanel();
		painel = (JPanel) getContentPane();
		painel.setLayout( new GridLayout( 7,2 ) );
		painel.setFont( new Font( "Times New Roman", Font.ITALIC, 12 ) );
		this.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
		this.setResizable( false );
		
		//criação dos itens
		lCondutor = new JLabel( "Condutor" );
		lPlaca = new JLabel( "Placa" );
		lQtdLitros = new JLabel( "Quantidade de litros" );
		lValCombustivel = new JLabel( "Valor do combustível" );
		lTotal = new JLabel( "Valor total" );
		
		tCondutor = new JTextField( 10 );
		tPlaca = new JTextField( 10 );
		tQtdLitros = new JTextField( 10 );
		tValCombustivel = new JTextField( 10 );
		tTotal = new JTextField( 10 );
		
		rGasolina = new JRadioButton( "Gasolina" );
		rAlcool = new JRadioButton( "Álcool" );
		bgCombustivel = new ButtonGroup();
		bgCombustivel.add( rGasolina );
		bgCombustivel.add( rAlcool );
		
		bCadastrar = new JButton( "Cadastrar" );
		bExibir = new JButton( "Exibir" );
		
		//adicionando os itens ao painel
		painel.add( lCondutor );
		painel.add( tCondutor );
		painel.add( lPlaca );
		painel.add( tPlaca );
		painel.add( lQtdLitros );
		painel.add( tQtdLitros );
		painel.add( lValCombustivel );
		painel.add( tValCombustivel );
		painel.add( rGasolina );
		painel.add( rAlcool );
		painel.add( lTotal );
		painel.add( tTotal );
		painel.add( bCadastrar );
		painel.add( bExibir );
		
		this.pack();
		this.setLocationRelativeTo( null );
		
		Tratamento evento = new Tratamento();
		bCadastrar.addActionListener( evento );
		bExibir.addActionListener( evento );
	}
	/*TODO
	 *resolver a mensagem de dados cadastrados em caso de erro
	 *acionar o metodo abastecer() ao iniciar o programa
	 *consertar exibição do resultado no método mostrarTotal()
	 *limpar os campos de texto ao cadastrar
	*/
	public class Tratamento implements ActionListener{
		private Abastecimento carro;
		
		public void actionPerformed( ActionEvent evento ){
			if ( evento.getSource() == bCadastrar ){
				String condutor = tCondutor.getText();
				String placa = tPlaca.getText();
				int quantidadeLitros = 0;
				double valorCombustivel = 0;
				//boolean erro = true;
				
				try{
					quantidadeLitros = Integer.parseInt( tQtdLitros.getText() );
					valorCombustivel = Double.parseDouble( tValCombustivel.getText() );
				}
				catch( NumberFormatException e ){
					JOptionPane.showMessageDialog( null, "Devem ser digitados apenas números!" );
				}
				catch( Exception e ){
					JOptionPane.showMessageDialog( null, "ERRO" );
				}

				if ( rGasolina.isSelected() )
					carro = new Gasolina( placa, condutor, quantidadeLitros, valorCombustivel );
				else
					carro = new Alcool( placa, condutor, quantidadeLitros, valorCombustivel );
				tTotal.setText( Double.toString( carro.mostrarTotal() ) );
				JOptionPane.showMessageDialog( null, "Dados cadastrados!" );
			}//botao cadastrar
			else if ( evento.getSource() == bExibir ){
				try{
					tCondutor.setText( carro.getCondutor() );
					tPlaca.setText( carro.getPlaca() );
					tQtdLitros.setText( Integer.toString( carro.getQuantidadeLitros() ) );
					tValCombustivel.setText( Double.toString( carro.getValorCombustivel() ) );
					if ( carro instanceof Alcool )
						rAlcool.setSelected(true);
					else
						rGasolina.setSelected( true );
				}
				catch(NullPointerException e){
					JOptionPane.showMessageDialog( null, "Não há cadastros!" );
				}
				catch( Exception e ){
					JOptionPane.showMessageDialog( null, "ERRO" );
				}
			}//botao exibir
		}//action performed
	}//class tratamento
}
package programas;

import layout.PostoLayout;
import posto.Abastecimento;

public class Posto{
	public static void main( String args[] ){
			PostoLayout janela = new PostoLayout();
			janela.setVisible( true );
	}
}

Obrigado a quem puder ajudar.

1 Resposta

furutani

Olá

Uma coisa que me incomodou no seu código é o trecho abaixo

catch( Exception e ){ JOptionPane.showMessageDialog( null, "ERRO" );
Do jeito que está, não dá para saber qual é exatamente o erro. Sugiro que coloque pelo menos um e.printStackTrace(); para saber qual erro deu.

Criado 7 de junho de 2008
Ultima resposta 7 de jun. de 2008
Respostas 1
Participantes 2