Estou com dificuldade de modelar as classes pro seguinte projeto:
Uma empresa de transporte está em fase de expansão e necessita de sua ajuda para controlar a venda das passagens e conseqüentemente ter um relatório de valor arrecadado em cada viagem.
Atualmente ela possui duas linhas e quatro ônibus. Uma das linhas faz o trajeto entre Campinas e São Paulo com três ônibus e a outra linha faz o trajeto entre Campinas e Ribeirão Preto com apenas um ônibus. Assuma que para o trecho entre Campinas e São Paulo um ônibus leva uma hora de viagem e para o trecho entre Campinas e Ribeirão Preto um ônibus leva quatro horas.
As saídas de Campinas ocorrem às 4h30min para São Paulo, às 6h30min para Ribeirão Preto, às 7h00min para São Paulo e às 9h30min para São Paulo novamente. As saídas de Ribeirão Preto ocorrem todos os dias às 12h e as saídas de São Paulo ocorrem às 5h00min, às 6h00mim e às 11h.
Elabore um programa que auxilie na inclusão de novas linhas, novos ônibus (nas novas linhas e nas linhas já existentes) e também, faça as funcionalidades listadas abaixo visando a venda de passagens aos passageiros no próprio balcão na rodoviária. As funcionalidades são:
Venda de um bilhete;
o Nome;
o CPF;
o Poltrona.
Consulta de poltronas disponíveis em determinado ônibus de uma linha;
o Listar apenas as poltronas disponíveis;
Cancelamento de um bilhete.
Deixe também disponível um relatório de ganhos em determinado ônibus de uma linha.
Este programa deve rodar sem interface gráfica, apenas no prompt.
Como tudo gira em função do tempo(horários de saída dos ônibus, compra das passagens, inclusão de novas linhas), eu teria que,obrigatoriamente, utilizar Java Date / Time, alg outra(e.g: SimpleDateFormat) ?
Se sim, posso manipular a passagem do tempo para testar o programa?Ex: caso eu queira saber se um determinado ônibus já chegou no seu destino e esvaziou suas poltronas.
Pensei em criar uma classe Onibus com atributos: array de int representando os acentos(ex:0:acento vazio 1:preenchido); uma classe Direcao com atributo array com todas as linhas e outro com um array representando o tempo de saida correspondente ao array das linhas. Frisando que Direção estaria dentro da classe Onibus como atributo(uso de composição)
E uma classe Passagem para venda, que dependeria do horário de compra das passagens e do horário de saída das linhas.
Enfim, estou muito confuso, mesmo tendo achado a apostila da Caelum ótima, na hora que vou juntar todos os conceitos vistos num projeto só, acabo ficando meio perdido. Estou estudando por conta própria e achei uma lista de projetos de uma universidade que estou usando para praticar o que aprendi. Se alguém tiver ideias de como praticar com pequenos projetinhos, ficaria muito grato também.
De aluno pra aluno, mostre o que você fez, aplique o que sabe.
Muita coisa só se aprende errando e reconhecendo os erros, mas não se deve errar de forma proposital.
Gostei do exercício é relativamente simples e por semelhança minha próxima atividade do curso envolve este tema só que com aviões e outros requisitos funcionais diferentes, são três páginas de enunciado no meu caso enter, introdução explicação e outros bla, bla, blas.
Mostre em que ponto está e não se preocupe que nos ajudamos.
Eu estou brincando com este exercício.
addler acho que você não leu tudo… Eu estou na parte conceitual de modelagem de classes… mostrei o esboço das classes que pretendo fazer, mas estou em duvida da necessidade do uso de alguma classe que trate o tempo.
Em suma: preciso ou não usar alg API/ classe que mexa com tempo? Nunca mexi com uma e por isso pedi alguma sugestão de API… Usaria Java.Calendar, JODA, SimpleDateFormat?Qual seria mais adequada pra quem nunca usou uma?
A minha ideia nesse caso seria: Se o programa inicia, por exemplo, com 6:00am,existe algum método que adiantaria ou atrasaria o relógio, para testar as funções do programa?
Eu não sei muito sobre isso, pois eu gosto mais de usar o tempo em long e usar uma API de acordo com a necessidade.
Exemplo, onde eu adiciono minutos, se quisesse adicionar uma hora, bastaria lanças 60, veja:
public static void main(String[] args) {
long tempo = System.currentTimeMillis();
Calendar c = Calendar.getInstance();
c.setTimeInMillis(tempo);
System.out.println(c.getTime());
//adiantando o tempo em 5,5 minutos
c.setTimeInMillis(c.getTimeInMillis() + adicionaMinutos(5.5) );
System.out.println(c.getTime());
}
private static long adicionaMinutos(double totalMinutos){
return (long) (1000 * 60 * totalMinutos);
}
}
Quanto a estas APIs, cabe ver a documentação de cada uma, pra saber qual atende sua necessidade.
Mas como disse, sou estudante e você pode ter melhores respostas de outros participante.
Lembre também das classes Duration, Period e ChronoUnit.
Como ferramentas, cabe apenas ver qual atende melhor a sua necessidade, esta é minha avaliação.
Mas há profissionais no com mais tato quanto a este tema importante.
Exemplo usando o JODA:
public static void main(String[] args) {
Instant agora = Instant.now();
System.out.println("Agora: "+agora);
Instant depois = agora.plusMillis(adicionaMinutos(5.5));
System.out.println("Depois: "+depois);
Instant soComAPIJoda = depois;
System.out.println("Usando apenas o joda: "+soComAPIJoda.plus(5, ChronoUnit.MINUTES));
}
private static long adicionaMinutos(double totalMinutos){
return (long) (1000 * 60 * totalMinutos);
}