Mettere insieme il tutto
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, separate da virgole.
Crea un sistema completo di gestione dell'inventario che gestisca tutte e tre le operazioni: aggiunta di articoli, verifica 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 vuoti iniziali e finali
- Leggi il secondo input (nome dell'articolo) e rimuovi gli spazi vuoti iniziali e finali
- Leggi il terzo input (valore della quantità/del prezzo) e rimuovi gli spazi vuoti iniziali e finali
- Converti il terzo input in
f64 - Leggi il quarto input (nomi degli articoli separati da virgole) e rimuovi gli spazi vuoti iniziali e finali
- Leggi il quinto input (prezzi separati da virgole) e rimuovi gli spazi vuoti iniziali e finali
- Leggi il sesto input (quantità separate da virgole) e rimuovi gli spazi vuoti iniziali e finali
- 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 converti ciascuno in
f64 - Dividi le quantità in corrispondenza delle virgole e converti ciascuna in
i32 - Inserisci ciascun articolo nell'inventario con il prezzo e la quantità corrispondenti, come 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:- Converti il terzo input in
i32come quantità da vendere - Usa
.get()per verificare se l'articolo esiste - Usa un'espressione
matchper gestireOption - Se è
Some:- Verifica che la quantità attuale sia 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
- Converti il terzo input in
- Per qualsiasi altro comando, stampa:
Invalid command
Input:
- Prima riga: comando (
add,checkoppuresell) - Seconda riga: nome dell'articolo (ad esempio,
Tablet) - Terza riga: numero (prezzo per
add, quantità persell, ignorato percheck) - Quarta riga: nomi degli articoli separati da virgole (ad esempio,
Laptop,Mouse,Keyboard) - Quinta riga: prezzi separati da virgole (ad esempio,
999.99,25.50,75.00) - Sesta riga: quantità separate da virgole (ad esempio,
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 la 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'I cicli come espressioniRiepilogo - Parser di comandi semplice4Raggruppare i dati con le struct
Che cos'è una struct?Panoramica sulle structAccedere ai campi di una structStruct mutabiliLe struct come parametri di funzioneStruct tuplaRiepilogo - Crea una struct Book2Introduzione ai vettori
Che cos'è un vettore?Creare un vettoreAggiungere elementi con pushAccedere agli elementi di un vettoreScorrere un vettoreIterazione mutabileRimuovere elementiRiepilogo - Tracker di punteggi di base5Coppie chiave-valore con le mappe hash
Che cos'è una mappa hash?Creare una mappa hashInserire coppie chiave-valoreAccedere ai valoriIterare su una mappa hashAggiornare un valoreRimuovere una coppiaRiepilogo - Contatore di parole8Progetto: semplice inventario di articoli
Impostazione del progettoAggiungere un articoloControllare le scorteVendere un articoloMettere insieme il tutto3Lista di cose da fare da riga di comando
Impostazione del progettoAggiungere un'attivitàVisualizzare tutte le attivitàRimuovere un'attivitàCodice finaleEsercitati da solo: Compilatore Rust online