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.
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. |
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.
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]
| |||||||||||||||||
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.
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. |