/** * Classe Garita: Implementa os atributos e metodos necessários para * a simulação do funcionamento de uma Garita. * @author Luis Filipe */ public class Garita { /* * Constantes para facilitar o entendimento do codigo, * relacionadas ao tipo e ao estado da garita */ final public static int FECHADO=0; final public static int ABERTO=1; final public static int ENTRADA=1; final public static int SAIDA=0; /** Armazena o faturamento diário de todas Garitas*/ private static int soma=0; /** Armazena o preço de cada tipo de carro * ex: preço[0] é preço do carro Grande*/ private static int[] preço = {5,3,1}; /** Armazena o qtd de vagas de cada tipo de carro * ex: vagas[1] é qtd de vagas para carros Medios*/ private static int[] vagas = {3,5,3}; /** Armazena a qtd de garitas de entrada abertas */ private static int garitasAbertas=0; /** Um contador de garitas, usado para indicar qual valor deve * ser atribuido a proxima garita */ private static int numeroSeg=1; private int estado; private int tipo; private int numero; /**Total arrecadado pela garita específica*/ private int total; Garita(int tipo){ numero = numeroSeg; numeroSeg++; estado = FECHADO; this.tipo = tipo; } /**Muda o estado da garita e incrementa o contador de garitas abbertas*/ public void abrir(){ if (tipo == ENTRADA){ System.out.println("Entrada G"+numero+" em funcionamento"); estado = ABERTO; garitasAbertas++; }else{ System.out.println("Saida Aberta"); estado = ABERTO; } } /**Muda o estado da garita e incrementa o contador de garitas abbertas*/ public void fechar(){ if( tipo== ENTRADA){ if (estado == ABERTO) { System.out.println("Fechada a entrada G"+numero+" com o total de R$ " + total); estado=FECHADO; garitasAbertas--; soma+=total; }else System.out.println("A Garita já está fechada"); }else if (garitasAbertas == 0 ) { System.out.println("Estacionamento Fechado. Total do dia: R$ "+ soma ); }else System.out.println("Erro: Verifique se há alguma entrada em funcionamento" ); } /**Recebe o veiculo, atualizando as vagas e os valores arrecadados*/ public void recebeVeiculo(Veiculo v){ if (tipo==ENTRADA && estado==ABERTO){ if(existeVaga(v.getTamanho())){ total += efetuaCobranca(v.getTamanho()); maisVeiculo(v.getTamanho()); System.out.println("O veículo "+v.getNome()+ "entrando por: G" + numero); }else System.out.println("Não tem vaga"); }else System.out.println("A Garita não é de entrada ou não encontra-se aberta"); } /** Atualiza as vagas da garagem*/ public void liberaVeiculo(Veiculo v){ if (tipo == SAIDA){ menosVeiculo(v.getTamanho()); System.out.println(v.getNome()+" saindo..."); } } /**Verifica se existe vaga para um carro de um determinado * tamanho, passado por parametro*/ public boolean existeVaga(int tamanho){ if(vagas[tamanho]>0) return true; return false; } /**Retorna o preço de um determinado carro*/ public int efetuaCobranca(int tamanho){ return preço[tamanho]; } /**Atualiza as vagas da Garagem*/ public void maisVeiculo(int tamanho){ vagas[tamanho]-=1; } /**Atualiza as vagas da Garagem*/ public void menosVeiculo(int tamanho){ vagas[tamanho]+=1; } }