Вы находитесь на странице: 1из 15

Linguagem de Programao Prof.

Samuel Antonio Vieira


Projeto Estacionamento
A empresa de Estacionamento Da Hora contratou os servios de um consultor para
desenvolver o software para controlar a entrada e sada de carros.
No incio do dia, o operador atualiza o valor hora do estacionamento. Este valor hora cheio
para carros, 15% de desconto para moto e adio de 15% para utilitrios.
Ao entrar um carro, o operador digitar a placa, marca, modelo e hora entrada do carro, o
sistema dever propor a hora de entrada como a hora atual, mas pode ser mudada.
Ao sair, o operador digita a placa, consulta, o sistema dever devolver os dados do carro,
caso exista e propor a hora atual como hora sada.
O operador tambm pode verificar o faturamento por tipo de carro e total do
estacionamento.
Diagrama de Use Case

1 - proibida a reproduo deste material sem a autorizao do autor.

Linguagem de Programao Prof. Samuel Antonio Vieira


Diagrama de Classe

2 - proibida a reproduo deste material sem a autorizao do autor.

Linguagem de Programao Prof. Samuel Antonio Vieira


Diagrama de Sequncia

3 - proibida a reproduo deste material sem a autorizao do autor.

Linguagem de Programao Prof. Samuel Antonio Vieira


Implementando o Diagrama de Classe:
Classe Veiculo
1. package projeto.beans;
2.
3. public class Veiculo {
4.
5.
private double fatorEstacionameto;
6.
private String placa;
7.
private String modelo;
8.
private String marca;
9.
private String horaEntrada;
10.
private String horaSaida;
11.
private double totalEstacionamento;
12.
13.
public void calcularValor(double valorHora){
14.
String[] tE;
15.
String[] tS;
16.
double he,me,hs,ms;
17.
18.
tE = getHoraEntrada().split(":");
19.
tS = getHoraSaida().split(":");
20.
21.
he = Double.parseDouble(tE[0]);
22.
me = Double.parseDouble(tE[1]);
23.
hs = Double.parseDouble(tS[0]);
24.
ms = Double.parseDouble(tS[1]);
25.
26.
totalEstacionamento =((((hs*60)+ms)((he*60)+me))/60)*(valorHora*getFatorEstacionameto());
27.
}
28.
29.
public double getFatorEstacionameto() {
30.
return fatorEstacionameto;
31.
}
32.
33.
public void setFatorEstacionameto(double fatorEstacionameto)
{
34.
this.fatorEstacionameto = fatorEstacionameto;
35.
}
36.
37.
public String getPlaca() {
38.
return placa;
39.
}
40.
41.
public void setPlaca(String placa) {
42.
this.placa = placa;
43.
}
44.
45.
public String getModelo() {
46.
return modelo;
47.
}
48.
49.
public void setModelo(String modelo) {
50.
this.modelo = modelo;
51.
}
52.

4 - proibida a reproduo deste material sem a autorizao do autor.

Linguagem de Programao Prof. Samuel Antonio Vieira


53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.

public String getMarca() {


return marca;
}
public void setMarca(String marca) {
this.marca = marca;
}
public String getHoraEntrada() {
return horaEntrada;
}
public void setHoraEntrada(String horaEntrada) {
this.horaEntrada = horaEntrada;
}
public String getHoraSaida() {
return horaSaida;
}
public void setHoraSaida(String horaSaida) {
this.horaSaida = horaSaida;
}
public double getTotalEstacionamento() {
return totalEstacionamento;
}
}

Classe Carro
1. package projeto.beans;
2.
3. public class Carro extends Veiculo {
4.
5.
public Carro() {
6.
setFatorEstacionameto(1);
7.
}
8.
9. }

Classe Utilitrio
1. package projeto.beans;
2.
3. public class Utilitario extends Veiculo {
4.
5.
public Utilitario() {
6.
setFatorEstacionameto(1.15);
7.
}
8.
9. }

5 - proibida a reproduo deste material sem a autorizao do autor.

Linguagem de Programao Prof. Samuel Antonio Vieira


Classe Moto
1. package projeto.beans;
2.
3. public class Moto extends Veiculo {
4.
5.
public Moto() {
6.
setFatorEstacionameto(0.85);
7.
}
8. }

Classe Estacionamento
1. package projeto.beans;
2.
3. import java.util.*;
4.
5. public class Estacionamento {
6.
7.
private double valorHora;
8.
private double totalFaturamentoCarro;
9.
private double totalFaturamentoMoto;
10.
private double totalFaturamentoUtilitario;
11.
private double totalFaturamento;
12.
private ArrayList<Veiculo> veiculos;
13.
14.
public Estacionamento() {
15.
veiculos = new ArrayList<Veiculo>();
16.
}
17.
18.
public Veiculo procurarVeiculo(String placa) {
19.
20.
for(Veiculo v: this.veiculos){
21.
if(v.getPlaca().equals(placa)){
22.
return v;
23.
}
24.
25.
}
26.
return null;
27.
}
28.
29.
public void darEntrada(Veiculo veiculo) {
30.
this.veiculos.add(veiculo);
31.
32.
}
33.
34.
public void darSaida(Veiculo veiculo){
35.
36.
if(veiculo instanceof Moto)
37.
totalFaturamentoMoto +=
veiculo.getTotalEstacionamento();
38.
else if (veiculo instanceof Carro)
39.
totalFaturamentoCarro +=
veiculo.getTotalEstacionamento();
40.
else
41.
totalFaturamentoUtilitario +=
veiculo.getTotalEstacionamento();

6 - proibida a reproduo deste material sem a autorizao do autor.

Linguagem de Programao Prof. Samuel Antonio Vieira


42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.

totalFaturamento += veiculo.getTotalEstacionamento();
this.veiculos.remove(veiculo);
}
public double getValorHora() {
return valorHora;
}
public void setValorHora(double valorHora) {
this.valorHora = valorHora;
}
public double getTotalFaturamentoCarro() {
return totalFaturamentoCarro;
}
public double getTotalFaturamentoMoto() {
return totalFaturamentoMoto;
}
public double getTotalFaturamentoUtilitario() {
return totalFaturamentoUtilitario;
}
public double getTotalFaturamento() {
return totalFaturamento;
}
}

A interface com usurio

7 - proibida a reproduo deste material sem a autorizao do autor.

Linguagem de Programao Prof. Samuel Antonio Vieira


Implementando a interface
Classe JFormEstacionamento
1. package projeto.gui;
2.
3. import java.awt.*;
4. import java.awt.event.*;
5. import java.text.*;
6.
7. import javax.swing.*;
8.
9. import projeto.beans.*;
10.
11.
public class JFormEstacionamento extends JFrame implements
ActionListener{
12.
13.
14.
private GridBagConstraints gbc;
15.
16.
private JPanel jpnlCentro;
17.
private JPanel jpnlSul;
18.
19.
private JLabel rotulo1;
20.
private JLabel rotulo2;
21.
private JLabel rotulo3;
22.
private JLabel rotulo4;
23.
private JLabel rotulo5;
24.
private JLabel rotulo6;
25.
private JLabel rotulo7;
26.
private JLabel jlblTotal;
27.
28.
private JCheckBox jchkUtilitario;
29.
30.
private JTextField jtxtValorHora;
31.
private JTextField jtxtPlaca;
32.
private JTextField jtxtHoraEntrada;
33.
private JTextField jtxtHoraSaida;
34.
private JTextField jtxtModelo;
35.
36.
private JComboBox jcmbMarca;
37.
38.
private JButton jbtnLimpar;
39.
private JButton jbtnEntrada;
40.
private JButton jbtnSaida;
41.
private JButton jbtnFaturamento;
42.
private JButton jbtnSair;
43.
44.
private JButton jbtnAtualizar;
45.
private JButton jbtnConsultar;
46.
47.
private String[] marcas = { "-- Carros/Utilitrios", //0
48.
"AUDI",
49.
"BMW",
50.
"CHEVROLET",
51.
"CITRON",
52.
"DODGE",
53.
"FIAT",

8 - proibida a reproduo deste material sem a autorizao do autor.

Linguagem de Programao Prof. Samuel Antonio Vieira


54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.

"FORD",
"HONDA",
"HYUNDAI",
"KIA",
"LAND ROVER",
"MERCEDES-BENZ",
"MITSUBISHI",
"NISSAN",
"PEUGEOT",
"RENAULT",
"SUZUKI",
"TOYOTA",
"VOLKSWAGEN",
"VOLVO",
"Outros carros...",
"-- Motos",//22
"AGRALE",
"AMAZONAS",
"APRILIA",
"BMW",
"BUELL",
"CAGIVA",
"CALOI",
"DAFRA",
"DUCATI",
"GARINNI",
"HARLEY-DAVIDSON",
"HONDA",
"KASINSKI",
"KAWASAKI",
"KTM",
"PIAGGIO",
"SUNDOWN",
"SUZUKI",
"TRIUMPH",
"YAMAHA",
"-- Outras Motos..."
};
private Estacionamento estacionamento;
public JFormEstacionamento() {
super("Estacionamento da Hora");
setLayout(new BorderLayout());
jpnlCentro = new JPanel(new GridBagLayout());
jpnlSul = new JPanel(new FlowLayout());
rotulo1
rotulo2
rotulo3
rotulo4
rotulo5
rotulo6

=
=
=
=
=
=

new
new
new
new
new
new

JLabel("Valor Hora:");
JLabel("Placa:");
JLabel("Hora Entrada:");
JLabel("Hora Sada:");
JLabel("Marca:");
JLabel("Modelo:");

9 - proibida a reproduo deste material sem a autorizao do autor.

Linguagem de Programao Prof. Samuel Antonio Vieira


111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.

rotulo7 = new JLabel("Total a pagar:");


jtxtValorHora = new JTextField(10);
jtxtPlaca = new JTextField(10);
jtxtHoraEntrada = new JTextField(10);
jtxtHoraSaida = new JTextField(10);
jtxtModelo = new JTextField(10);
jcmbMarca = new JComboBox(marcas);
jchkUtilitario = new JCheckBox("Utilitrio");
jlblTotal = new JLabel("0,00");
jbtnLimpar = new JButton("Limpar");
jbtnAtualizar = new JButton("Atualizar");
jbtnConsultar = new JButton("Consultar");
jbtnEntrada = new JButton("Dar Entrada");
jbtnSaida = new JButton("Pagar e Dar a Sada");
jbtnFaturamento = new JButton("Verificar Faturamento");
jbtnSair = new JButton("Sair do Sistema");
gbc = new GridBagConstraints();
gbc.anchor = GridBagConstraints.LINE_START;
gbc.insets = new Insets(5, 5, 5, 5);
// Adicionando os componentes na coluna zero do grid
gbc.gridx = 0;
gbc.gridy = 0;
jpnlCentro.add(rotulo1,gbc);
gbc.gridy = 1;
jpnlCentro.add(rotulo2,gbc);
gbc.gridy = 2;
jpnlCentro.add(rotulo3,gbc);
gbc.gridy = 3;
jpnlCentro.add(rotulo4,gbc);
//Adicionando os componentes a coluna 1 do grid
gbc.gridx = 1;
gbc.gridy = 0;
jpnlCentro.add(jtxtValorHora,gbc);
gbc.gridy = 1;
jpnlCentro.add(jtxtPlaca,gbc);
gbc.gridy = 2;
jpnlCentro.add(jtxtHoraEntrada,gbc);
gbc.gridy = 3;
jpnlCentro.add(jtxtHoraSaida,gbc);
//Adicionando os componentes a coluna 2 do grid

10 - proibida a reproduo deste material sem a autorizao do autor.

Linguagem de Programao Prof. Samuel Antonio Vieira


168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.

gbc.gridx = 2;
gbc.gridy = 0;
jpnlCentro.add(jbtnAtualizar,gbc);
gbc.gridy = 1;
jpnlCentro.add(jbtnConsultar,gbc);
gbc.gridy = 3;
jpnlCentro.add(rotulo7,gbc);
rotulo7.setFont(new Font(Font.DIALOG,Font.PLAIN,30));
//Adicionando os componentes a coluna 3 do grid
gbc.gridx = 3;
gbc.gridy = 0;
jpnlCentro.add(rotulo5,gbc);
gbc.gridy = 1;
jpnlCentro.add(rotulo6,gbc);
//Adicionando os componentes a coluna 4 do grid
gbc.gridx = 4;
gbc.gridy = 0;
jpnlCentro.add(jcmbMarca,gbc);
gbc.gridy = 1;
jpnlCentro.add(jtxtModelo,gbc);
gbc.gridy = 2;
jpnlCentro.add(jchkUtilitario,gbc);
gbc.gridy = 3;
gbc.anchor = GridBagConstraints.LINE_END;
jpnlCentro.add(jlblTotal,gbc);
jlblTotal.setFont(rotulo7.getFont());
estacionamento = new Estacionamento();
jcmbMarca.addActionListener(this);
jbtnAtualizar.addActionListener(this);
jbtnConsultar.addActionListener(this);
jbtnEntrada.addActionListener(this);
jbtnFaturamento.addActionListener(this);
jbtnLimpar.addActionListener(this);
jbtnSaida.addActionListener(this);
jbtnSair.addActionListener(this);
jpnlSul.add(jbtnLimpar);
jpnlSul.add(jbtnEntrada);
jpnlSul.add(jbtnSaida);
jpnlSul.add(jbtnFaturamento);
jpnlSul.add(jbtnSair);
mudarEstado(true);

11 - proibida a reproduo deste material sem a autorizao do autor.

Linguagem de Programao Prof. Samuel Antonio Vieira


225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.

add(jpnlCentro, BorderLayout.CENTER);
add(jpnlSul,BorderLayout.SOUTH);
setSize(800,250);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

public void actionPerformed(ActionEvent e){


if(e.getSource() == jcmbMarca){
if(jcmbMarca.getSelectedIndex() > 22){
jchkUtilitario.setSelected(false);
jchkUtilitario.setEnabled(false);
}
else{
jchkUtilitario.setEnabled(true);
}
}
else if(e.getSource() == jbtnAtualizar){

estacionamento.setValorHora(Double.parseDouble(jtxtValorHora.getText()));
247.
JOptionPane.showMessageDialog(null, "Valor hora
atualizado com sucesso!");
248.
249.
}
250.
else if(e.getSource() == jbtnFaturamento){
251.
252.
JOptionPane.showMessageDialog(null, "Total de
Carros: " +
253.
new
DecimalFormat("#,##0.00").format(estacionamento.getTotalFaturamentoCarro()
) +
254.
"\nTotal de Utilitrios: " +
255.
new
DecimalFormat("#,##0.00").format(estacionamento.getTotalFaturamentoUtilita
rio()) +
256.
"\nTotal de Motos: " +
257.
new
DecimalFormat("#,##0.00").format(estacionamento.getTotalFaturamentoMoto())
+
258.
"\nTotal do Estacionamento: " +
259.
new
DecimalFormat("#,##0.00").format(estacionamento.getTotalFaturamento())
260.
);
261.
262.
}
263.
else if(e.getSource() == jbtnLimpar){
264.
265.
limpaCampos();
266.
mudarEstado(true);
267.
268.
}
269.
else if(e.getSource() == jbtnEntrada){
270.
int opcao = jcmbMarca.getSelectedIndex();

12 - proibida a reproduo deste material sem a autorizao do autor.

Linguagem de Programao Prof. Samuel Antonio Vieira


271.
Veiculo veiculo = null;
272.
273.
274.
if(opcao > 0 && opcao < 22){
275.
if(!jchkUtilitario.isSelected()){
276.
veiculo = new Carro();
277.
}
278.
else{
279.
veiculo = new Utilitario();
280.
}
281.
}
282.
else if(opcao > 22){
283.
veiculo = new Moto();
284.
}
285.
else{
286.
JOptionPane.showMessageDialog(null,
"Selecione uma marca vlida!");
287.
}
288.
289.
if(jtxtPlaca.getText().isEmpty() ||
jtxtModelo.getText().isEmpty() || jtxtValorHora.getText().isEmpty() ||
jtxtHoraEntrada.getText().isEmpty()){
290.
JOptionPane.showMessageDialog(null, "Valor
Hora/Placa/Modelo/Hora Entrada no podem ser vazios!",
"ERRO",JOptionPane.ERROR_MESSAGE);
291.
}
292.
else{
293.
if(veiculo != null){
294.
295.
veiculo.setModelo(jtxtModelo.getText());
296.
veiculo.setPlaca(jtxtPlaca.getText());
297.
veiculo.setMarca(jcmbMarca.getSelectedItem().toString());
298.
veiculo.setHoraEntrada(jtxtHoraEntrada.getText());
299.
veiculo.setHoraSaida(jtxtHoraSaida.getText());
300.
estacionamento.darEntrada(veiculo);
301.
302.
JOptionPane.showMessageDialog(null,
"Entrada realizada com sucesso!");
303.
304.
limpaCampos();
305.
mudarEstado(true);
306.
307.
}
308.
}
309.
310.
}
311.
else if(e.getSource() == jbtnConsultar){
312.
313.
String placa = jtxtPlaca.getText();
314.
315.
Veiculo veic =
estacionamento.procurarVeiculo(placa);

13 - proibida a reproduo deste material sem a autorizao do autor.

Linguagem de Programao Prof. Samuel Antonio Vieira


316.
317.
318.
319.
320.
321.

if(veic != null){
jtxtModelo.setText(veic.getModelo());
jtxtHoraEntrada.setText(veic.getHoraEntrada());

jcmbMarca.setSelectedItem((Object)veic.getMarca());
322.
323.
if(veic instanceof Utilitario){
324.
jchkUtilitario.setSelected(true);
325.
}
326.
327.
jtxtHoraSaida.setText(new
SimpleDateFormat("HH:mm").format(System.currentTimeMillis()));
328.
mudarEstado(false);
329.
330.
}
331.
else{
332.
JOptionPane.showMessageDialog(null, "Veiculo
no encontrado!");
333.
jtxtHoraEntrada.setText(new
SimpleDateFormat("HH:mm").format(System.currentTimeMillis()));
334.
mudarEstado(true);
335.
}
336.
337.
}
338.
else if(e.getSource() == jbtnSaida){
339.
340.
String placa = jtxtPlaca.getText();
341.
342.
Veiculo veiculo =
estacionamento.procurarVeiculo(placa);
343.
344.
if(jtxtHoraSaida.getText().isEmpty()){
345.
JOptionPane.showMessageDialog(null, "Hora
Sada no pode ser vazio!", "ERRO",JOptionPane.ERROR_MESSAGE);
346.
}
347.
else{
348.
veiculo.setHoraSaida(jtxtHoraSaida.getText());
349.
350.
veiculo.calcularValor(estacionamento.getValorHora());
351.
352.
if(veiculo.getTotalEstacionamento() >=0 ){
353.
estacionamento.darSaida(veiculo);
354.
355.
jlblTotal.setText(new
DecimalFormat("#,##0.00").format(veiculo.getTotalEstacionamento()));
356.
357.
JOptionPane.showMessageDialog(null,
"Fechamento efetuado com sucesso!");
358.
359.
mudarEstado(true);
360.
361.
jbtnEntrada.setEnabled(false);

14 - proibida a reproduo deste material sem a autorizao do autor.

Linguagem de Programao Prof. Samuel Antonio Vieira


362.
}
363.
else{
364.
JOptionPane.showMessageDialog(null,
"Hora Sada menor que Hora Entrada!", "ERRO",JOptionPane.ERROR_MESSAGE);
365.
}
366.
367.
368.
}
369.
370.
}
371.
}
372.
373.
private void limpaCampos() {
374.
jtxtModelo.setText("");
375.
jcmbMarca.setSelectedIndex(0);
376.
jtxtHoraEntrada.setText("");
377.
jtxtHoraSaida.setText("");
378.
jtxtPlaca.setText("");
379.
jchkUtilitario.setSelected(false);
380.
jlblTotal.setText("0,00");
381.
382.
}
383.
384.
private void mudarEstado(boolean estado){
385.
386.
jbtnAtualizar.setEnabled(estado);
387.
jbtnConsultar.setEnabled(estado);
388.
jbtnEntrada.setEnabled(estado);
389.
jbtnSaida.setEnabled(!estado);
390.
391.
jtxtValorHora.setEnabled(estado);
392.
jtxtHoraEntrada.setEnabled(estado);
393.
jtxtHoraSaida.setEnabled(!estado);
394.
jtxtModelo.setEnabled(estado);
395.
jtxtPlaca.setEnabled(estado);
396.
397.
jcmbMarca.setEnabled(estado);
398.
399.
jchkUtilitario.setEnabled(estado);
400.
401.
402.
}
403.
}

15 - proibida a reproduo deste material sem a autorizao do autor.