Menu
Coddy logo textTech

Assembler le tout

Fait partie de la section Logique & Flux 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 add, check ou sell. La deuxième entrée est un nom d’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 séparés par des virgules dans l’inventaire. La cinquième entrée est une liste de prix séparés par des virgules correspondant à chaque article. La sixième entrée est une liste de quantités séparées par des virgules correspondant à chaque article.

Construisez un système complet de gestion d’inventaire qui gère les trois opérations : ajouter des articles, vérifier le stock et vendre des articles. Utilisez un HashMap pour stocker les données de l’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 superflus
  • Lisez la deuxième entrée (nom de l’article) et supprimez les espaces superflus
  • Lisez la troisième entrée (valeur de quantité/prix) et supprimez les espaces superflus
  • Analysez 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 superflus
  • Lisez la cinquième entrée (prix séparés par des virgules) et supprimez les espaces superflus
  • Lisez la sixième entrée (quantités séparées par des virgules) et supprimez les espaces superflus
  • Créez un HashMap<String, (f64, i32)> mutable pour l’inventaire
  • Divisez les noms d’articles en fonction des virgules
  • Divisez les prix en fonction des virgules et analysez chacun en f64
  • Divisez les quantités en fonction des 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 quelle 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 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 Logique & Flux

Entraînez-vous par vous-même : Compilateur Rust en ligne