Menu
Coddy logo textTech

Juntando tudo

Parte da seção Logic & Flow do Journey de Rust da Coddy — lição 53 de 66.

challenge icon

Desafio

Fácil

Você receberá seis entradas. A primeira entrada é um comando que pode ser add, check ou sell. A segunda entrada é o nome de um item. A terceira entrada é um número representando a quantidade a vender (para o comando sell) ou o preço inicial (para o comando add). A quarta entrada é uma lista separada por vírgulas de nomes de itens no inventário. A quinta entrada é uma lista separada por vírgulas de preços correspondentes a cada item. A sexta entrada é uma lista separada por vírgulas de quantidades correspondentes a cada item.

Construa um sistema de gerenciamento de inventário completo que lide com as três operações: adicionar itens, verificar estoque e vender itens. Use um HashMap para armazenar os dados do inventário onde a chave é o nome do item e o valor é uma tupla contendo o preço e a quantidade (f64, i32).

Requisitos:

  • Importe HashMap de std::collections
  • Leia a primeira entrada (comando) e remova os espaços em branco (trim)
  • Leia a segunda entrada (nome do item) e remova os espaços em branco (trim)
  • Leia a terceira entrada (valor de quantidade/preço) e remova os espaços em branco (trim)
  • Converta (parse) a terceira entrada para f64
  • Leia a quarta entrada (nomes de itens separados por vírgula) e remova os espaços em branco (trim)
  • Leia a quinta entrada (preços separados por vírgula) e remova os espaços em branco (trim)
  • Leia a sexta entrada (quantidades separadas por vírgula) e remova os espaços em branco (trim)
  • Crie um HashMap<String, (f64, i32)> mutável para o inventário
  • Divida (split) os nomes dos itens por vírgulas
  • Divida os preços por vírgulas e converta cada um para f64
  • Divida as quantidades por vírgulas e converta cada uma para i32
  • Insira cada item no inventário com seu preço e quantidade correspondentes como uma tupla
  • Use uma expressão match no comando para determinar qual operação realizar
  • Para o comando add:
    • Use .entry() e .or_insert() para adicionar o item se ele não existir, usando a terceira entrada como o preço e 0 como a quantidade inicial
    • Imprima: Added [item_name] to inventory
    • Imprima: Price: $[price]
    • Imprima: Quantity: 0
  • Para o comando check:
    • Use .get() para verificar se o item existe
    • Use uma expressão match para lidar com o Option
    • Se for Some, imprima:
      • [item_name] is in stock
      • Price: $[price]
      • Quantity: [quantity]
    • Se for None, imprima: [item_name] is not in stock
  • Para o comando sell:
    • Converta a terceira entrada para i32 como a quantidade a vender
    • Use .get() para verificar se o item existe
    • Use uma expressão match para lidar com o Option
    • Se for Some:
      • Verifique se a quantidade atual é suficiente
      • Se sim, atualize o inventário com a nova quantidade e imprima:
        • Sold [quantity_to_sell] [item_name]
        • Total: $[total_price]
        • Remaining stock: [new_quantity]
      • Se não, imprima:
        • Insufficient stock for [item_name]
        • Available: [current_quantity]
    • Se for None, imprima: [item_name] is not in stock
  • Para qualquer outro comando, imprima: Invalid command

Entrada:

  • Primeira linha: Comando (add, check ou sell)
  • Segunda linha: Nome do item (ex: Tablet)
  • Terceira linha: Número (preço para add, quantidade para sell, ignorado para check)
  • Quarta linha: Nomes de itens separados por vírgula (ex: Laptop,Mouse,Keyboard)
  • Quinta linha: Preços separados por vírgula (ex: 999.99,25.50,75.00)
  • Sexta linha: Quantidades separadas por vírgula (ex: 15,50,30)

Saída:

  • Para o comando add:
    • Added [item_name] to inventory
    • Price: $[price]
    • Quantity: 0
  • Para o comando check (item existe):
    • [item_name] is in stock
    • Price: $[price]
    • Quantity: [quantity]
  • Para o comando check (item não existe): [item_name] is not in stock
  • Para o comando sell (estoque suficiente):
    • Sold [quantity_to_sell] [item_name]
    • Total: $[total_price]
    • Remaining stock: [new_quantity]
  • Para o comando sell (estoque insuficiente):
    • Insufficient stock for [item_name]
    • Available: [current_quantity]
  • Para o comando sell (item não existe): [item_name] is not in stock
  • Para comando inválido: Invalid command

Experimente você mesmo

use std::collections::HashMap;
use std::io;

fn main() {
    // Ler entradas
    let mut command = String::new();
    io::stdin().read_line(&mut command).expect("Failed to read line");
    let command = command.trim();
    
    let mut item_name = String::new();
    io::stdin().read_line(&mut item_name).expect("Failed to read line");
    let item_name = item_name.trim();
    
    let mut value_input = String::new();
    io::stdin().read_line(&mut value_input).expect("Failed to read line");
    let value_input = value_input.trim();
    
    let mut items_input = String::new();
    io::stdin().read_line(&mut items_input).expect("Failed to read line");
    let items_input = items_input.trim();
    
    let mut prices_input = String::new();
    io::stdin().read_line(&mut prices_input).expect("Failed to read line");
    let prices_input = prices_input.trim();
    
    let mut quantities_input = String::new();
    io::stdin().read_line(&mut quantities_input).expect("Failed to read line");
    let quantities_input = quantities_input.trim();
    
    // Criar HashMap de inventário
    let mut inventory: HashMap<String, (f64, i32)> = HashMap::new();
    
    // TODO: Escreva seu código abaixo
    // Analisar as entradas separadas por vírgula e preencher o inventário
    // Usar a expressão match no comando para lidar com as operações add, check e sell
    // Lembre-se de exibir as mensagens apropriadas com base no comando
    
}

Todas as lições de Logic & Flow