Published using Google Docs
Reposição Prova2 - lp2 - 2019.2
Updated automatically every 5 minutes

Unidade Acadêmica de Sistemas e Computação

Laboratório de Programação 2 - 2019.2

Educadores: Eliane Araújo, Lívia Sampaio e Matheus Gaudencio

Reposição Prova 2 - 28/11/2019

Aluno(a): _________________________________________________________________

O almoço no Dilicinha é assim, você prepara um prato com 3 acompanhamentos e uma proteína. Por exemplo, você pode fazer uma refeição com arroz, feijão, legumes e hambúrguer de soja (proteína). Para acompanhar os pedidos no Dilicinha e ajudar a determinar o preço das refeições, você foi contratado para desenvolver um sistema eletrônico e moderno.

Você precisará cadastrar os possíveis acompanhamentos ao restaurante. Cada acompanhamento, independente de qual seja, custa R$2,00. Você deve também cadastrar as diferentes proteínas existentes para em seguida, registrar e montar as refeições vendidas. Por fim, você deve poder pegar a refeição mais pesada e a mais cara do sistema. Não será necessário fazer Main ou qualquer interface gráfica. Você deve fornecer apenas a fachada do sistema.

Agora vamos ao detalhamento das funcionalidades!

Parte 1 - Cadastrar Refeições e Acompanhamentos

Uma refeição é composta de até 3 acompanhamentos e 1 proteína. Toda refeição é criada sem nada definido e os acompanhamentos e proteínas podem ser acrescentadas ao longo da execução do programa. A refeição é identificada por um inteiro sequencial gerado pelo sistema, iniciando de 1.

Os acompanhamentos são apenas uma descrição textual e cada acompanhamento custa 200 centavos e pesa 100 gramas. O acompanhamento é identificado pela própria descrição textual. Na refeição só podem ser colocados acompanhamentos que foram cadastrados no sistema. Nada deve acontecer caso o usuário tente colocar um 4º acompanhamento na refeição.

  • void cadastrarAcompanhamento(String acompanhamento)
  • int criarRefeicao() // retorna o id da refeicao criada
  • String exibirRefeicao(int idRefeicao)
  • void adicionarAcompanhamento(int idRefeicao, String acompanhamento)

Durante a exibição da refeição, deve ser exibido: o custo e peso da refeição, os acompanhamentos e a proteína.

O sistema deve lançar exceção caso tente exibir uma refeição que não existe ou caso tente cadastrar, como acompanhamento, uma string nula ou vazia.

Os exemplos abaixo mostram algumas saídas. A saída não precisa seguir o mesmo formato abaixo, desde que tenha as mesmas informações exibidas.

Por simplicidade, os valores monetários neste sistema estão na unidade centavos, ou seja, R$2,00 é expresso por 200 centavos.

Refeição de id 1 sem acompanhamentos e sem proteína:

1 - 0 centavos - 0 gramas

Acompanhamentos: []

Proteina: -

Refeição de id 2, com 3 acompanhamentos, sem proteína:

2 - 600 centavos - 300 gramas

Acompanhamentos: ["feijao", "arroz", "legumes"]

Proteina: -

Parte 2 - Cadastrar Proteínas

Existem dois tipos de proteínas: Animal e Vegana. Ambos os tipos de proteínas têm peso e preço. Uma proteína animal têm uma origem (vaca, frango, porco, etc...), peso e preço. A proteína vegana têm um tipo de proteína (soja, fungi, grão de bico, etc…), peças por porção, peso por peça e preço por peça. Cada proteína é identificada unicamente por um inteiro sequencial gerado pelo sistema, iniciando de 1.

A tabela abaixo mostra cada proteína, com seus atributos, peso final e preço final, bem como o modelo de descrição textual.

Proteína

Atributos

Peso Final

Preço Final

Descrição

Animal

tipo, peso, preco

peso

preco

Tipo - peso_final - preco_final

Vegana

tipo, numPecas, precoPorPeca, pesoPorPeca

numPecas * pesoPorPeca

numPecas * precoPorPeca

Tipo - peso_final - preco_final - numPecas

Ao ser colocada em uma refeição, a proteína passa a fazer parte da descrição textual (e do cálculo de preço e peso da refeição). Ao tentar colocar uma proteína em um prato que já tenha uma proteína, nada deve acontecer.

Refeição de id 2, com 3 acompanhamentos, com adição de uma proteína (carne de vaca, de 4 reais, e 100 gramas) :

2 - 1000 centavos - 400 gramas

Acompanhamentos: ["feijao", "arroz", "legumes"]

Proteina: [tipo="vaca", peso=100, preco=400]


Para implementar esta segunda parte, o sistema deve:

  • int cadastrarProteinaAnimal(String tipo, int peso, int preco) // retorna o id da proteina cadastrada
  • int cadastrarProteinaVegana(String tipo, int numPecas, int precoPorPeca, int pesoPorPeca) // retorna o id da proteina cadastrada
  • void adicionarProteina(int idRefeicao, int idProteina)

Parte 3 - Top Refeições

No Dilicinha, as top refeições são presenteadas. Para que isso aconteça o sistema deve retornar o id da refeição de maior peso e retornar a refeição de maior valor. Em caso de empate da refeição de maior peso, vence a de maior valor. Em caso de empate na refeição de maior valor, vence a de maior peso.


Para implementar esta terceira parte, o sistema deve:

  • int topPeso()  // retorna o id da refeição
  • int topValor() // retorna o id da refeição

Obs: Você pode usar Collections.max() para pegar o maior valor de uma coleção ( https://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#max(java.util.Collection,%20java.util.Comparator) ). Caso não existam refeições cadastradas, lance uma exceção.

Parte 4 - Teste dos Tops

Escreva testes de unidade para as operações topPeso e topValor do sistema.