Lista 2

Recomendações Importantes

    • A lista deve ser entregue até às 23:59:59 do dia 04/07.
    • Deixe seus programas entendíveis. Imprima mensagens para auxiliar o usuário a utilizar o seu programa.
    • Seja criativo. As mensagens do seu programa não necessitam estar iguais aos exemplos, a menos que seja especificado.
    • A lista é individual, portanto não compartilhe seus códigos com outros alunos ou os coloque em locais públicos (Pastebin, Github).
    • Não copie. Se for detectado cópia da internet ou de um colega, as LISTAS envolvidas serão completamente zeradas.
    • Alguns exemplos aqui definidos podem apresentar comentários. Note que são apenas ilustrativos.
    • A correção da Questão Desafio é booleana. Ou seja: você receberá o ponto extra do desafio caso a resposta esteja 100% correta. Qualquer erro, mesmo que seja em apenas um caso, invalidará a questão.

Questão 1

A empresa que você trabalha fechou um contrato com uma rede de hotéis para desenvolver o ERP deles. Você, que foi considerado estagiário do mês, tem a confiança do seu chefe e vai ficar responsável por modelar e escrever as classes básicas do sistema segundo alguns requisitos passados pelo cliente:

  • Nomes diferentes são atribuídos a cada unidade da rede;
  • Os hotéis não seguem o mesmo padrão de requinte, portanto tem quantidade de estrelas variadas;
  • Todos os hotéis precisam do endereço armazenado no sistema;
  • Os hotéis tem telefone fixo, mas não necessariamente possuem fax;
  • Guarde também o número total de quartos solteiro, casal e suítes presidenciais;
  • Alguns hotéis são mais simples e não oferecem café-da-manhã, precisamos disso registrado;
  • Deve ser possível alterar qualquer um dos dados de um hotel.

OBS: Seu chefe quer testar o que você fez, então faça uma classe com um método main para que seja possível construir um objeto Hotel, segundo as especificações, e ao final imprima o objeto usando sua implementação do método toString da classe Hotel.

Faça tudo muito bem modularizado, essa é a sua chance de ser efetivado!

Questão 2

O gerente gostou do seu trabalho e resolveu que você iria prosseguir com o desenvolvimento do sistema. Agora você deve criar uma nova classe Hotel que vai ter as mesmas coisas da anterior, porém também vai ter o número de quarto ocupados, para cada tipo de quarto (solteiro, casal e presidencial). Crie também um método ocuparQuarto e desocuparQuarto que recebem o tipo do quarto alteram o número de quartos ocupados.

Depois disso você vai começar a criar a classe GerenciadorRede que vai possuir 4 hotéis e vai os seguintes métodos:

  • hotelDisponivel que recebe o tipo de quarto que o usuário deseja (solteiro, casal e presidencial) que retorna o primeiro Hotel que ainda tiverem vagas;
  • indicacaoHotel que recebe um perfil de cliente e indica a melhor opção para o cliente, levando em conta o número de estrelas e se tem ou não café-da-manhã, os clientes podem ser:
    • Mochileiro: 1 estrela, quarto solteiro, sem café-da-manhã;
    • Estudante: no máximo 3 estrelas, quarto solteiro, com café-da-manhã se tiver até 2 estrelas;
    • Casal Adulto: a partir de 3 estrelas, quarto casal, com café-da-manhã;
    • Empresário: 5 estrelas, quarto presidencial, com café-da-manhã.

Questão 3

O sr. João Alberto, dono de uma agência de turismo, anda tendo problemas com tantos papéis soltos e deseja organizar os pacotes de turismo da agência no computador, para isso ele contratou você.

Atualmente cada pacote é composto de uma pasta com 4 folhas que são compostas por:

    • Folha 1: nome do pacote, o meio de transporte, informações gerais e informações do pagamento;
    • Folhas 2 a 4: informações sobre os pontos turísticos (um por folha), cada uma tendo o nome, endereço e a descrição do ponto.

Depois de muito stress com toda essa papelada, quando um de seus funcionários bagunçou os papéis misturando os pontos turísticos de pacotes distintos, o sr. João Alberto pediu mais uma coisa, ele quer que o sistema possa verificar se os pontos turísticos são realmente válidos para aquele pacote. Para isso, ele informou que cada ponto turístico é cadastrado separadamente e dois pontos turísticos só podem estar no mesmo pacote se estiverem no mesmo estado e que os 4 primeiros dígitos do CEP sejam iguais.

Estruture as classes que representam Pacote e Ponto Turístico, validando a criação de um pacote (em caso não seja válido imprima uma mensagem no console).

Crie uma classe de teste onde possam ser criados 3 pontos turísticos e cadastrado (ou não) um pacote.

Questão 4

Josie, jornalista recém formada, está montando uma matéria especial sobre os recentes protestos estudantis para uma revista independente. No entanto, ela está com dificuldade em encontrar informações de uma maneira estruturada para contribuir com seu trabalho. Por isso, ela contratou você, exímio programador, para organizar melhor as informações sobre os recentes protestos.

Nessa primeira versão, o programa é composto pelas seguintes entidades:

  • Evento
    • Cada evento possui um endereço, uma data, a quantidade de pessoas que participaram do evento, o motivo do evento (melhor qualidade de educação, por exemplo), o cadastro da pessoa responsável pelo evento e os cometários sobre o evento.
    • OBS: - Cada comentário só possui uma linha.
    • Armazene os comentários como uma única String, onde cada comentário é separado por uma quebra de linha (‘/n’).
    • Endereço, data, motivo e responsável são informações obrigatórias.
  • Pessoa
    • Uma pessoa possui nome, universidade, telefone e mensagens.
    • OBS: - Cada mensagem só possui uma linha.
    • Armazene as mensagens como uma única String, onde cada mensagem é separada por uma quebra de linha (‘/n’).
    • Nome e telefone são informações obrigatórias.
  • Universidade
    • Uma universidade deve possuir nome, endereço e telefone.

Além disso, no programa deve ser possível:

  1. Visualizar todos os comentários sobre o evento.
  2. Visualizar um comentário específico sobre o evento (dado o número 0, o primeiro comentário é retornado, o número 1 retorna o segundo, e assim por diante).
  3. Cadastrar um novo comentário sobre o evento.
  4. As 3 operações acima, mas com mensagens de uma pessoa.

Crie uma classe de teste, onde o usuário possui as seguintes opções:

  1. Criar um evento
  2. Acessar informações sobre o último evento criado.
  3. Editar informações sobre o último evento criado.

OBS: - Caso o usuário digite uma data inválida, o programa deve avisá-lo e requisitar uma nova data.

Questão 5 - Desafio

O problema da Torre de Hanoi é um clássico. Diversas soluções para esse problema foram estudadas e exploradas ao longo dos anos. O problema consiste em três hastes: a inicial, a intermediária e a final. Na haste inicial, estão dispostos N discos, cada um com diâmetro diferente. O disco de maior diâmetro está na base, e cada disco está estritamente acima de um disco de diâmetro maior e estritamente abaixo de um disco de diâmetro menor (exceto o menor disco, que não tem discos sobre ele). O objetivo é, movendo um disco por vez, de uma haste para outra, transportar todos os discos para a haste final. Para movimentar um disco, você o remove da haste origem (ele precisa estar no topo desta, ou não pode ser movido) e o coloca sobre todos os discos da haste destino (caso haja algum). O desafio é você construir uma solução recursiva em Java para solucionar o problema da Torre de Hanoi.

Será dado o número N de discos. Seu programa deve imprimir passo a passo a resolução do problema, respeitando todas as regras acima. O formato de impressão é

A --> B

Onde A é a haste de onde você tirou o disco do topo e B é a haste onde você o colocou. Os valores de A e B podem ser 1 (haste inicial), 2 (haste intermediáia) e 3 (haste final).

Ao final deste processo, o programa deve encerrar.

Vamos resolver Hanoi?
Quantos discos você tem? Digite: 3
Hmm, 3 pinos. Ok!
1 --> 3
1 --> 2
3 --> 2
1 --> 3
2 --> 1
2 --> 3
1 --> 3