Juntando tudo
Parte da seção Lógica & Fluxo do Journey de Rust da Coddy. Lição 53 de 66.
Desafio
FácilVocê 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 que representa a quantidade a vender (para o comando sell) ou a quantidade 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.
Crie um sistema completo de gerenciamento de inventário que lide com as três operações: adicionar itens, verificar o estoque e vender itens. Use um HashMap para armazenar os dados do inventário, em que a chave é o nome do item e o valor é uma tupla contendo o preço e a quantidade (f64, i32).
Requisitos:
- Importe
HashMapdestd::collections - Leia a primeira entrada (comando) e remova os espaços em branco
- Leia a segunda entrada (nome do item) e remova os espaços em branco
- Leia a terceira entrada (valor de quantidade/preço) e remova os espaços em branco
- Converta a terceira entrada para
f64 - Leia a quarta entrada (nomes de itens separados por vírgulas) e remova os espaços em branco
- Leia a quinta entrada (preços separados por vírgulas) e remova os espaços em branco
- Leia a sexta entrada (quantidades separadas por vírgulas) e remova os espaços em branco
- Crie um
HashMap<String, (f64, i32)>mutável para o inventário - Divida os nomes dos itens pelas vírgulas
- Divida os preços pelas vírgulas e converta cada um para
f64 - Divida as quantidades pelas 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
matchno comando para determinar qual operação realizar - Para o comando
add:- Use
.entry()e.or_insert()para adicionar o item caso ele não exista, usando a terceira entrada como preço e0como quantidade inicial - Imprima:
Added [item_name] to inventory - Imprima:
Price: $[price] - Imprima:
Quantity: 0
- Use
- Para o comando
check:- Use
.get()para verificar se o item existe - Use uma expressão
matchpara lidar comOption - Se for
Some, imprima:[item_name] is in stockPrice: $[price]Quantity: [quantity]
- Se for
None, imprima:[item_name] is not in stock
- Use
- Para o comando
sell:- Converta a terceira entrada para
i32como a quantidade a vender - Use
.get()para verificar se o item existe - Use uma expressão
matchpara lidar comOption - 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
- Converta a terceira entrada para
- Para qualquer outro comando, imprima:
Invalid command
Entrada:
- Primeira linha: Comando (
add,checkousell) - Segunda linha: Nome do item (por exemplo,
Tablet) - Terceira linha: Número (preço para
add, quantidade parasell, ignorado paracheck) - Quarta linha: Nomes de itens separados por vírgulas (por exemplo,
Laptop,Mouse,Keyboard) - Quinta linha: Preços separados por vírgulas (por exemplo,
999.99,25.50,75.00) - Sexta linha: Quantidades separadas por vírgulas (por exemplo,
15,50,30)
Saída:
- Para o comando
add:Added [item_name] to inventoryPrice: $[price]Quantity: 0
- Para o comando
check(o item existe):[item_name] is in stockPrice: $[price]Quantity: [quantity]
- Para o comando
check(o 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(o item não existe):[item_name] is not in stock - Para um 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 Lógica & Fluxo
1Fluxo de Controle Avançado
A Expressão 'match'Correspondência de Múltiplos ValoresCorrespondência de IntervalosA Expressão 'if let'Loops como ExpressõesRecapitulação - Parser de Comandos Simples4Agrupando Dados com Structs
O que é uma Struct?Visão Geral de StructsAcessando Campos de uma StructStructs MutáveisStructs como Parâmetros de FunçãoTuple StructsRecapitulação - Criando uma Struct Book2Introdução a Vetores
O que é um Vetor?Criando um VetorAdicionando Elementos com pushAcessando Elementos do VetorIterando sobre um VetorIteração MutávelRemovendo ElementosRecapitulação - Rastreador de Pontuação Básico5Pares Chave-Valor com Hash Maps
O que é um Hash Map?Criando um Hash MapInserindo Pares Chave-ValorAcessando ValoresIterando sobre um Hash MapAtualizando um ValorRemovendo um ParRecapitulação - Contador de Palavras8Projeto: Inventário Simples de Itens
Configuração do ProjetoAdicionando um ItemVerificando o EstoqueVendendo um ItemJuntando tudo3Lista de Tarefas via Linha de Comando
Configuração do ProjetoAdicionando uma TarefaVisualizando Todas as TarefasRemovendo uma TarefaCódigo FinalPratique por conta própria: Compilador de Rust online