Assembler le tout
Fait partie de la section Logic & Flow du Journey Rust de Coddy — leçon 53 sur 66.
Défi
FacileVous recevrez six entrées. La première entrée est une commande qui peut être soit add, check, ou sell. La deuxième entrée est le nom d'un article. La troisième entrée est un nombre représentant soit la quantité à vendre (pour la commande sell), soit la quantité initiale (pour la commande add). La quatrième entrée est une liste de noms d'articles dans l'inventaire, séparés par des virgules. La cinquième entrée est une liste de prix correspondant à chaque article, séparés par des virgules. La sixième entrée est une liste de quantités correspondant à chaque article, séparées par des virgules.
Construisez un système complet de gestion d'inventaire qui gère les trois opérations : ajout d'articles, vérification du stock et vente d'articles. Utilisez une HashMap pour stocker les données d'inventaire où la clé est le nom de l'article et la valeur est un tuple contenant le prix et la quantité (f64, i32).
Exigences :
- Importez
HashMapdepuisstd::collections - Lisez la première entrée (commande) et supprimez les espaces blancs (trim)
- Lisez la deuxième entrée (nom de l'article) et supprimez les espaces blancs
- Lisez la troisième entrée (valeur de quantité/prix) et supprimez les espaces blancs
- Analysez (parse) la troisième entrée en
f64 - Lisez la quatrième entrée (noms d'articles séparés par des virgules) et supprimez les espaces blancs
- Lisez la cinquième entrée (prix séparés par des virgules) et supprimez les espaces blancs
- Lisez la sixième entrée (quantités séparées par des virgules) et supprimez les espaces blancs
- Créez une
HashMap<String, (f64, i32)>mutable pour l'inventaire - Séparez les noms d'articles par les virgules
- Séparez les prix par les virgules et analysez chacun en
f64 - Séparez les quantités par les virgules et analysez chacune en
i32 - Insérez chaque article dans l'inventaire avec son prix et sa quantité correspondants sous forme de tuple
- Utilisez une expression
matchsur la commande pour déterminer l'opération à effectuer - Pour la commande
add:- Utilisez
.entry()et.or_insert()pour ajouter l'article s'il n'existe pas, en utilisant la troisième entrée comme prix et0comme quantité initiale - Affichez :
Added [item_name] to inventory - Affichez :
Price: $[price] - Affichez :
Quantity: 0
- Utilisez
- Pour la commande
check:- Utilisez
.get()pour vérifier si l'article existe - Utilisez une expression
matchpour gérer l'Option - Si
Some, affichez :[item_name] is in stockPrice: $[price]Quantity: [quantity]
- Si
None, affichez :[item_name] is not in stock
- Utilisez
- Pour la commande
sell:- Analysez la troisième entrée en
i32comme étant la quantité à vendre - Utilisez
.get()pour vérifier si l'article existe - Utilisez une expression
matchpour gérer l'Option - Si
Some:- Vérifiez si la quantité actuelle est suffisante
- Si oui, mettez à jour l'inventaire avec la nouvelle quantité et affichez :
Sold [quantity_to_sell] [item_name]Total: $[total_price]Remaining stock: [new_quantity]
- Si non, affichez :
Insufficient stock for [item_name]Available: [current_quantity]
- Si
None, affichez :[item_name] is not in stock
- Analysez la troisième entrée en
- Pour toute autre commande, affichez :
Invalid command
Entrée :
- Première ligne : Commande (
add,check, ousell) - Deuxième ligne : Nom de l'article (par exemple,
Tablet) - Troisième ligne : Nombre (prix pour
add, quantité poursell, ignoré pourcheck) - Quatrième ligne : Noms d'articles séparés par des virgules (par exemple,
Laptop,Mouse,Keyboard) - Cinquième ligne : Prix séparés par des virgules (par exemple,
999.99,25.50,75.00) - Sixième ligne : Quantités séparées par des virgules (par exemple,
15,50,30)
Sortie :
- Pour la commande
add:Added [item_name] to inventoryPrice: $[price]Quantity: 0
- Pour la commande
check(l'article existe) :[item_name] is in stockPrice: $[price]Quantity: [quantity]
- Pour la commande
check(l'article n'existe pas) :[item_name] is not in stock - Pour la commande
sell(stock suffisant) :Sold [quantity_to_sell] [item_name]Total: $[total_price]Remaining stock: [new_quantity]
- Pour la commande
sell(stock insuffisant) :Insufficient stock for [item_name]Available: [current_quantity]
- Pour la commande
sell(l'article n'existe pas) :[item_name] is not in stock - Pour une commande invalide :
Invalid command
Essayez vous-même
use std::collections::HashMap;
use std::io;
fn main() {
// Lire les entrées
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();
// Créer le HashMap de l'inventaire
let mut inventory: HashMap<String, (f64, i32)> = HashMap::new();
// TODO: Écrivez votre code ci-dessous
// Analyser les entrées séparées par des virgules et remplir l'inventaire
// Utiliser une expression match sur command pour gérer les opérations add, check et sell
// N'oubliez pas d'afficher les messages appropriés en fonction de la commande
}Toutes les leçons de Logic & Flow
1Structures de contrôle avancées
L'expression 'match'Filtrage de plusieurs valeursFiltrage d'intervallesL'expression 'if let'Les boucles en tant qu'expressionsRécapitulatif - Analyseur de commandes simple4Regrouper des données avec les structures
Qu'est-ce qu'une structure ?Aperçu des structuresAccéder aux champs d'une structureStructures mutablesLes structures comme paramètres de fonctionStructures tupleRécapitulatif - Créer une structure Book2Introduction aux vecteurs
Qu'est-ce qu'un vecteur ?Créer un vecteurAjouter des éléments avec pushAccéder aux éléments d'un vecteurItérer sur un vecteurItération mutableSupprimer des élémentsRécapitulatif - Suivi de score basique5Paires clé-valeur avec les Hash Maps
Qu'est-ce qu'une Hash Map ?Créer une Hash MapInsérer des paires clé-valeurAccéder aux valeursParcourir une Hash MapMettre à jour une valeurSupprimer une paireRécapitulatif - Compteur de mots8Projet : Inventaire d'articles simple
Configuration du projetAjouter un articleVérifier le stockVendre un articleAssembler le tout3Liste de tâches en ligne de commande
Configuration du projetAjouter une tâcheAfficher toutes les tâchesSupprimer une tâcheCode final