FlowTalents Desafio 1: Locação de Automóveis

Leia tudo antes de fazer qualquer coisa

O dono de um pequeno negócio de locação de automóveis, em conjunto com a ViaFlow, quer realizar uma POC para validar o quanto um sistema simples de gestão operacional pode auxiliá-lo com o ¹cadastro de veículos e ²locações dos mesmos. Hoje a operação é manual, o que gera certa dor de cabeça e problemas eventuais.

O cliente possui uma frota de veículos de categorias A a D e quer experimentar um sistema simples, sem necessidade de persistência de dados após execução, onde ele possa:

Cadastrar veículos dos tipos Carro, Moto, Caminhao e Onibus informando placa, marca, ano e cor (*), além dos atributos específicos de cada classe, sendo:

para Carro: portas, ar-condicionado (sim ou não), câmbio (manual ou automático), direção (mecânica, hidráulica ou elétrica);

para Moto: quantidade de cilindradas;

para Caminhao: capacidade (em toneladas);

para Onibus: quantidade de assentos.

Realizar Locacao dos veículos cadastrados, verificando:

se o veículo em questão está disponível para locação;

se o motorista é apto a dirigir determinado veículo, através da categoria da sua CNH:

A: apenas motos;

B: apenas carros;

C: caminhões e carros;

D: ônibus, caminhões e carros;

Após as verificações, salve em uma estrutura de dados a locação, contendo a placa do automóvel. Não há necessidade de realizar cadastramento dos motoristas - o cliente apenas pediu que possa registrar também na locação o número de WhatsApp do locatário.

Desafios extras

"Não fez mais que a obrigação" award: crie uma função para encerrar determinada locação informando a placa e liberando o veículo.

"Business intelligence" award : utilize a biblioteca Date para criar uma locação com data limite, e indique em tela quando essa locação tiver vencido.

"Dominação mundial" award: faça com que a locação se encerre automaticamente após a data limite.

Dicas

Crie funcionalidades para imprimir informações da frota e das locações - isso te ajuda a enxergar o desenvolvimento ao mesmo tempo que entrega muito valor de consulta para o cliente.

Tenha a placa de cada automóvel como parâmetro identificador para realizar acessos e modificações nas estruturas de dados, e não permita que seja cadastrado um novo veículo com uma placa já existente.

Implemente herança - use a classe Veiculo para construir os atributos genéricos (*), e as subclasses para os atributos específicos. O cliente tem planos de alugar outros tipos de veículos, como barcos e aviões monomotores, então dessa forma você garante menor manutenção no futuro do projeto.

Orientações

Você pode programar em Java ou Javascript. (no entanto, incentivo Java, considerando a própria familiaridade com o projeto que estamos desenvolvendo nos sábados)

O projeto deve compilar, ou seja, atingir o momento zero da aplicação. Por isso, tenha cuidado com modificações de última hora, e prefira realizar vários commits pequenos a poucos gigantescos.

A data limite para o desenvolvimento da aplicação é 23:59 do dia 7 de janeiro.

O repositório com o seu código deve estar marcado como privado - inclua jmfantin2 como colaborador no Github para que eu possa ter acesso ao projeto.

Agora é a hora de pedir ajuda. Nossas dailies até o dia 7 terão foco nessa tarefa, então una-se aos outros e não tenha medo de debater sobre o desafio.

Estou à disposição. Vamos com tudo!