Java - Urgente!

Boa tarde,

Venho por meio desta solicitar auxílio em um exercício da faculdade, uma vez que estou com dificuldade de colocar suas lógicas no programa.
Segue abaixo o exercício e o código do programa, e acho que deve ser melhorado.
Grato.
Exercício

  1. Sua empresa foi contratada para desenvolver um sistema de reserva de passagens aéreas para uma companhia de pequeno porte. Esta companhia possui quatro aeronaves que fazem os seguintes trechos, com os seguintes preços:

Aeronave 1 – Rio-Búzios-Rio – R$ 350,00
Aeronave 2 – Rio-Macaé-Rio - R$ 400,00
Aeronave 3 – Rio-Campos-Rio - R$ 400,00
Aeronave 4 – Rio-Vitória – Rio - R$ 700,00

Todas as aeronaves possuem somente vinte lugares.

Nosso aplicativo deve implementar as seguintes funcionalidades:

· O sistema poderá reservar passagens para até 10% a mais da capacidade da aeronave.
· Passageiros com menos de 10 anos pagam a metade do valor da passagem.
· Se houver menos do que 5 passageiros o vôo será cancelado.
· Após o encerramento das reservas, que poderá ser pelo esgotamento da aeronave ou pela hora de embarque, o sistema deverá informar, por cada vôo:
o Nomes dos passageiros embarcados por poltrona
o Valor total vendido de passagens
o Menores embarcados
o Quantidade de poltronas não ocupadas, se houver.
· Tratar todas as exceções possíveis sobre os dados digitados.
· Será utilizado o SWING como interface gráfica.

Código:

[code]import java.awt.;
import javax.swing.
;
import javax.swing.border.*;
import javax.swing.ButtonGroup;
import javax.swing.JRadioButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JOptionPane;
import javax.swing.JButton;

public class ReservaDePassagem extends JFrame
{
ButtonGroup bg = new ButtonGroup();
public ReservaDePassagem()

{ super(“Reserva de Passagens”);
setSize(1025,725);
Container c = getContentPane();
c.setLayout(new BorderLayout(3,9));

JPanel data           = new JPanel(new GridLayout(3,3,5,5));
data.setBorder(new TitledBorder(new EtchedBorder(),"Data")); 

JLabel label_dia     = new JLabel("Dia: "); 
JTextField campo_dia = new JTextField(2); 
JLabel label_mes     = new JLabel("Mes: "); 
JTextField campo_mes = new JTextField(2); 
JLabel label_ano     = new JLabel("Ano: "); 
JTextField campo_ano = new JTextField(4); 

data.add(label_dia); 
JPanel dia = new JPanel(); dia.add(campo_dia); data.add(dia);
data.add(label_mes); 
JPanel mes = new JPanel(); mes.add(campo_mes); data.add(mes);
data.add(label_ano); 
data.add(campo_ano);
JPanel p13 = new JPanel(); p13.add(data); 

JPanel classe       = new JPanel(new GridLayout(2,2,2,2));
classe.setBorder(new TitledBorder(new LineBorder(Color.black,3),"Classe")); 
JLabel label_classe = new JLabel("Classe:");
JRadioButton c1     = new JRadioButton("Aeronave 1:Rio-Búzios-Rio");
c1.setActionCommand("Pesquisar Aeronave 1");
JRadioButton c2     = new JRadioButton("Aeronave 2:Rio-Macaé-Rio");
JRadioButton c3     = new JRadioButton("Aeronave 3:Rio-Campos-Rio");
JRadioButton c4     = new JRadioButton("Aeronave 4:Rio-Campos-Rio");
classe.add(c1); classe.add(c2); classe.add(c3);classe.add(c4);
JPanel p14 = new JPanel(); p14.add(classe);

JPanel p1 = new JPanel(new GridLayout(3,3,3,3));
 p1.add(p13); p1.add(p14);

JPanel p = new JPanel(); p.add(p1); 
c.add(p,BorderLayout.NORTH);

JList  lista_voos = new JList();    
JScrollPane vs    = new JScrollPane(lista_voos); 
JPanel voos       = new JPanel(new BorderLayout(4,4)); 
voos.setBorder(new TitledBorder(new BevelBorder(BevelBorder.RAISED),"Voos disponiveis")); 
voos.add(vs,BorderLayout.CENTER); 

c.add(voos,BorderLayout.CENTER);

//ButtonGroup bg      = new ButtonGroup(); 
bg.add(c1); bg.add(c2); bg.add(c3); 

// c3.getModel().setSelected(true);

JPanel pBs = new JPanel();
JPanel pbs = new JPanel();
pbs.setLayout(new GridLayout(1,3,5,5));
JButton b1 = new JButton("Pesquisar");
b1.addActionListener(new ActionListener(){
     public void actionPerformed(ActionEvent e){
          if( bg.getSelection() != null ){
                 JOptionPane.showMessageDialog(
                         ReservaDePassagem.this, 
                         "Opção selecionada : " + bg.getSelection().getActionCommand());                    
             }else{
                 JOptionPane.showMessageDialog(
                         ReservaDePassagem.this, 
                         "Selecione uma opção!");                    
             }
         }
     });

JButton b2 = new JButton("Reservar");
JButton b3 = new JButton("Sair");
pbs.add(b1); pbs.add(b2); pbs.add(b3); 
pBs.add(pbs);

c.add(pBs,BorderLayout.SOUTH);

setVisible(true); 

}

public static void main (String[] a)
{ new ReservaDePassagem(); }
}[/code]

Primeiro, bem vindo ao GUJ!
Como vc é novo, vou te dar alguns toques, ok?
:thumbdown: (É o seu caso) Evite a palavra “Urgente” e palavras em maiúsculas no nome do tópico, pois isto faz quem que muitos dos GUJnautas nem sequer entrem no seu tópico.
:thumbdown: (Não é o seu caso) Não peça para fazermos seu trabalho. Estude o seu problema, tente, identifique suas dúvidas e postes aqui tais dúvidas.

Tô saindo agora do trampo, assim que chegar em casa (Por volta das 21:00), dou uma olhada no seu código pra ver se ele pode ser melhorado, ok!

Mais uma vez, bem vindo ao GUJ!

Obrigado, mantu

Estou tentando fazer com classes separadas, ou seja, ao clicar no botão reserva ele abre uma outra janela para cadastrar o cliente.
Para isto, estou com dificuldade de implentar esta rotina, para que chame a classe correspondente!

Mais uma vez obrigado,

Ramon Ferreira

Parece que o cara que bolou o exercício pegou uma prova de SCJD e está pedindo para os alunos fazerem :stuck_out_tongue:

Dá um pouco de trabalho para fazer (não é difícil, mas trabalhoso mesmo para a gente que tem 20 anos de programação), e se você está precisando entregar hoje mesmo eu sinto muito.

Coisas com interfaces gráficas são cheias de detalhes, e se você está tendo ainda por cima de brigar com GridLayout, GridBagLayout etc. é complicado.
(Se puder usar o NetBeans 5.0, a classe de layout chamada org.desktop.swing.GroupLayout, que é totalmente configurada pelo editor gráfico do NetBeans (“Free-Form Layout”), vai ser padrão do Java a partir da versão 6.0 (como javax.swing.GroupLayout), portanto você poderia acelerar o processo de desenhar a tela, que leva um tempo absurdo em Java.)

Você pelo menos já desenhou as telas no papel, e fez um diagrama de fluxo de o que cada botão etc. tem de fazer quando clicado?

Se você tiver isso tudo pronto no papel (não precisa ser bonitinho, mas você precisa pensar tudo antes), passar para o computador é bem mais rápido.

(Ainda bem que ele não pediu que vocês fizessem um sistema “cliente-servidor” ou um programa que tivesse vários funcionários acessando o mesmo sistema de reservas. Senão aí você ia ter um problema mais sério.

Dei uma lida sobre HashMap, que na vardade serve para evitar certa duplicidade, correto?
Então, estou tentando implementar o que está complicado, há algum código que se aproxime do enunciado para que eu possa tentar ajustá-lo?

Grato pela atenção,

Ramon Ferreira

Acho que seu problema pode ser resolvido só com arrays, já que você tem 4 aviões, cada avião com 20 lugares (mas as reservas podem ser para 22 lugares, ou seja, 10% a mais que a capacidade da aeronave), e você não pode reservar o lugar exato da poltrona.

Não seria preciso usar um HashMap ou coisa parecida.