Menu
Coddy logo textTech

Assembler le tout

Fait partie de la section Logic & Flow du Journey Rust de Coddy — leçon 53 sur 66.

challenge icon

Défi

Facile

Vous 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 HashMap depuis std::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 match sur 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 et 0 comme quantité initiale
    • Affichez : Added [item_name] to inventory
    • Affichez : Price: $[price]
    • Affichez : Quantity: 0
  • Pour la commande check :
    • Utilisez .get() pour vérifier si l'article existe
    • Utilisez une expression match pour gérer l'Option
    • Si Some, affichez :
      • [item_name] is in stock
      • Price: $[price]
      • Quantity: [quantity]
    • Si None, affichez : [item_name] is not in stock
  • Pour la commande sell :
    • Analysez la troisième entrée en i32 comme étant la quantité à vendre
    • Utilisez .get() pour vérifier si l'article existe
    • Utilisez une expression match pour 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
  • Pour toute autre commande, affichez : Invalid command

Entrée :

  • Première ligne : Commande (add, check, ou sell)
  • Deuxième ligne : Nom de l'article (par exemple, Tablet)
  • Troisième ligne : Nombre (prix pour add, quantité pour sell, ignoré pour check)
  • 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 inventory
    • Price: $[price]
    • Quantity: 0
  • Pour la commande check (l'article existe) :
    • [item_name] is in stock
    • Price: $[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