Mettere tutto insieme
Fa parte della sezione Logica e flusso del percorso Rust di Coddy. Lezione 53 di 66.
Sfida
FacileRiceverai sei input. Il primo input è un comando che può essere add, check oppure sell. Il secondo input è il nome di un articolo. Il terzo input è un numero che rappresenta la quantità da vendere (per il comando sell) oppure la quantità iniziale (per il comando add). Il quarto input è un elenco di nomi di articoli presenti nell'inventario, separati da virgole. Il quinto input è un elenco di prezzi corrispondenti a ciascun articolo, separati da virgole. Il sesto input è un elenco di quantità corrispondenti a ciascun articolo, separati da virgole.
Crea un sistema completo di gestione dell'inventario che gestisca tutte e tre le operazioni: aggiunta di articoli, controllo delle scorte e vendita di articoli. Usa una HashMap per memorizzare i dati dell'inventario, dove la chiave è il nome dell'articolo e il valore è una tupla contenente il prezzo e la quantità (f64, i32).
Requisiti:
- Importa
HashMapdastd::collections - Leggi il primo input (comando) e rimuovi gli spazi bianchi
- Leggi il secondo input (nome dell'articolo) e rimuovi gli spazi bianchi
- Leggi il terzo input (valore di quantità/prezzo) e rimuovi gli spazi bianchi
- Analizza il terzo input come
f64 - Leggi il quarto input (nomi degli articoli separati da virgole) e rimuovi gli spazi bianchi
- Leggi il quinto input (prezzi separati da virgole) e rimuovi gli spazi bianchi
- Leggi il sesto input (quantità separate da virgole) e rimuovi gli spazi bianchi
- Crea una
HashMap<String, (f64, i32)>mutabile per l'inventario - Dividi i nomi degli articoli in corrispondenza delle virgole
- Dividi i prezzi in corrispondenza delle virgole e analizza ciascuno come
f64 - Dividi le quantità in corrispondenza delle virgole e analizza ciascuna come
i32 - Inserisci ogni articolo nell'inventario con il prezzo e la quantità corrispondenti, sotto forma di tupla
- Usa un'espressione
matchsul comando per determinare quale operazione eseguire - Per il comando
add:- Usa
.entry()e.or_insert()per aggiungere l'articolo se non esiste, usando il terzo input come prezzo e0come quantità iniziale - Stampa:
Added [item_name] to inventory - Stampa:
Price: $[price] - Stampa:
Quantity: 0
- Usa
- Per il comando
check:- Usa
.get()per verificare se l'articolo esiste - Usa un'espressione
matchper gestireOption - Se è
Some, stampa:[item_name] is in stockPrice: $[price]Quantity: [quantity]
- Se è
None, stampa:[item_name] is not in stock
- Usa
- Per il comando
sell:- Analizza il terzo input come
i32per ottenere la quantità da vendere - Usa
.get()per verificare se l'articolo esiste - Usa un'espressione
matchper gestireOption - Se è
Some:- Verifica se la quantità attuale è sufficiente
- Se sì, aggiorna l'inventario con la nuova quantità e stampa:
Sold [quantity_to_sell] [item_name]Total: $[total_price]Remaining stock: [new_quantity]
- Se no, stampa:
Insufficient stock for [item_name]Available: [current_quantity]
- Se è
None, stampa:[item_name] is not in stock
- Analizza il terzo input come
- Per qualsiasi altro comando, stampa:
Invalid command
Input:
- Prima riga: comando (
add,checkoppuresell) - Seconda riga: nome dell'articolo (ad es.,
Tablet) - Terza riga: numero (prezzo per
add, quantità persell, ignorato percheck) - Quarta riga: nomi degli articoli separati da virgole (ad es.,
Laptop,Mouse,Keyboard) - Quinta riga: prezzi separati da virgole (ad es.,
999.99,25.50,75.00) - Sesta riga: quantità separate da virgole (ad es.,
15,50,30)
Output:
- Per il comando
add:Added [item_name] to inventoryPrice: $[price]Quantity: 0
- Per il comando
check(l'articolo esiste):[item_name] is in stockPrice: $[price]Quantity: [quantity]
- Per il comando
check(l'articolo non esiste):[item_name] is not in stock - Per il comando
sell(scorte sufficienti):Sold [quantity_to_sell] [item_name]Total: $[total_price]Remaining stock: [new_quantity]
- Per il comando
sell(scorte insufficienti):Insufficient stock for [item_name]Available: [current_quantity]
- Per il comando
sell(l'articolo non esiste):[item_name] is not in stock - Per un comando non valido:
Invalid command
Provalo tu
use std::collections::HashMap;
use std::io;
fn main() {
// Leggi gli input
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();
// Crea l'HashMap inventory
let mut inventory: HashMap<String, (f64, i32)> = HashMap::new();
// TODO: Scrivi il tuo codice qui sotto
// Analizza gli input separati da virgole e popola inventory
// Usa un'espressione match su command per gestire le operazioni add, check e sell
// Ricorda di produrre i messaggi appropriati in base a command
}Tutte le lezioni di Logica e flusso
1Flusso di controllo avanzato
L'espressione 'match'Corrispondenza di più valoriCorrispondenza di intervalliL'espressione 'if let'Cicli come espressioniRipasso - Parser di comandi semplice4Raggruppare i dati con le struct
Che cos'è una struct?Panoramica sulle structAccedere ai campi delle structStruct mutabiliStruct come parametri di funzioneStruct tuplaRiepilogo - Creare una struct Book2Introduzione ai vettori
Che cos'è un vettore?Creare un vettoreAggiungere elementi con pushAccedere agli elementi di un vettoreIterare su un vettoreIterazione mutabileRimuovere elementiRiepilogo - Tracker dei punteggi di base5Coppie chiave-valore con mappe hash
Che cos'è una mappa hash?Creare una mappa hashInserire coppie chiave-valoreAccedere ai valoriScorrere una mappa hashAggiornare un valoreRimuovere una coppiaRiepilogo - Contatore di parole8Progetto: inventario semplice degli articoli
Configurazione del progettoAggiungere un articoloControllare le scorteVendere un articoloMettere tutto insieme3Lista di attività da riga di comando
Configurazione del progettoAggiungere un'attivitàVisualizzare tutte le attivitàRimuovere un'attivitàCodice finaleEsercitati da solo: Compilatore Rust online