Compartilho minha resolucao do desafio da cafeteria.
A proposta original tem dois pontos que valem ser evoluidos:
- Item: o atendente digitava nome e preço a cada pedido — abre brecha para erro de digitação e cobrança com preço divergente.
- Cliente cadastrado: era resolvido com "S/N" — mas, num sistema real, "ser cadastrado" significa existir na base de clientes, e o jeito natural de identificar isso e pelo email.
A partir disso, parti de duas premissas: o cardápio ja esta cadastrado e a base de clientes também. O atendente seleciona itens pelo numero e informa o email do cliente.
registro deixa nome e preço juntos como uma unidade:
Tipo
tProduto = registro
nome: caractere
preco: real
FimRegistro
tCliente = registro
nome: caractere
email: caractere
FimRegistro
Agora cardápio[1] e um produto inteiro, e eu acesso cardápio[1].nome e cardápio[1].preço. O mesmo vale para o cliente, que passou a ter nome além do email
Algoritmo "AtendimentoCafeteria"
Tipo
tProduto = registro
nome: caractere
preco: real
FimRegistro
tCliente = registro
nome: caractere
email: caractere
FimRegistro
Var
cardapio: vetor[1..6] de tProduto
clientes: vetor[1..5] de tCliente
total, desconto, totalFinal: real
qtdItens, i, opcao, indiceCliente: inteiro
emailCliente: caractere
clienteEncontrado: logico
Inicio
// ----- 1. CARDAPIO PRE-CADASTRADO -----
cardapio[1].nome <- "Cafe Expresso" ; cardapio[1].preco <- 5.00
cardapio[2].nome <- "Cappuccino" ; cardapio[2].preco <- 8.50
cardapio[3].nome <- "Latte" ; cardapio[3].preco <- 9.00
cardapio[4].nome <- "Pao de Queijo" ; cardapio[4].preco <- 4.50
cardapio[5].nome <- "Croissant" ; cardapio[5].preco <- 7.00
cardapio[6].nome <- "Suco Natural" ; cardapio[6].preco <- 10.00
// ----- 2. BASE DE CLIENTES CADASTRADOS -----
clientes[1].nome <- "Ana" ; clientes[1].email <- "ana.silva@email.com"
clientes[2].nome <- "Joao" ; clientes[2].email <- "joao.silva@email.com"
clientes[3].nome <- "Maria" ; clientes[3].email <- "maria.souza@email.com"
clientes[4].nome <- "Pedro" ; clientes[4].email <- "pedro.lima@email.com"
clientes[5].nome <- "Carla" ; clientes[5].email <- "carla.dias@email.com"
total <- 0
clienteEncontrado <- falso
indiceCliente <- 0
// ----- 3. BOAS-VINDAS E CARDAPIO -----
Escreval("Bem-vindo a cafeteria. Vamos montar o pedido.")
Escreval("")
Escreval("Cardapio de hoje")
Escreval("----------------")
Para i de 1 ate 6 faca
Escreval(i, ". ", cardapio[i].nome, " - R$ ", cardapio[i].preco)
FimPara
Escreval("")
// ----- 4. PEDIDO -----
Escreva("Quantos itens o cliente quer pedir? ")
Leia(qtdItens)
Para i de 1 ate qtdItens faca
Escreva("Item ", i, " - escolha pelo numero do cardapio: ")
Leia(opcao)
Se (opcao >= 1) e (opcao <= 6) entao
Escreval("Adicionado: ", cardapio[opcao].nome, " (R$ ", cardapio[opcao].preco, ")")
total <- total + cardapio[opcao].preco
Senao
Escreval("Esse numero nao esta no cardapio. Vamos tentar outro item?")
FimSe
FimPara
// ----- 5. IDENTIFICACAO DO CLIENTE -----
Escreval("")
Escreval("Clientes cadastrados ganham 10% de desconto.")
Escreva("Informe o email do cliente (ou pressione Enter para pular): ")
Leia(emailCliente)
Para i de 1 ate 5 faca
Se clientes[i].email = emailCliente entao
clienteEncontrado <- verdadeiro
indiceCliente <- i
FimSe
FimPara
// ----- 6. CALCULO DO TOTAL -----
Se clienteEncontrado entao
Escreval("Que bom te ver de novo, ", clientes[indiceCliente].nome, ". Desconto aplicado.")
desconto <- total * 0.10
totalFinal <- total - desconto
Senao
Escreval("Email nao encontrado. Quer se cadastrar e ganhar desconto na proxima visita?")
desconto <- 0
totalFinal <- total
FimSe
// ----- 7. RESUMO FINAL -----
Escreval("")
Escreval("Resumo do pedido")
Escreval("----------------")
Se clienteEncontrado entao
Escreval("Cliente: ", clientes[indiceCliente].nome)
FimSe
Escreval("Subtotal: R$ ", total)
Escreval("Desconto (10%): R$ ", desconto)
Escreval("Total a pagar: R$ ", totalFinal)
Escreval("")
Escreval("Obrigado e volte sempre.")
FimAlgoritmo
Quando se troca vetores paralelos por registro de cliente com nome + email, ganha automaticamente a possibilidade de chamar o cliente pelo nome no atendimento.