Menu
Coddy logo textTech

Alles zusammenfügen

Teil des Abschnitts Logic & Flow der Rust-Journey von Coddy — Lektion 53 von 66.

challenge icon

Aufgabe

Einfach

Sie erhalten sechs Eingaben. Die erste Eingabe ist ein Befehl, der entweder add, check oder sell sein kann. Die zweite Eingabe ist ein Artikelname. Die dritte Eingabe ist eine Zahl, die entweder die zu verkaufende Menge (für den Befehl sell) oder die anfängliche Menge (für den Befehl add) darstellt. Die vierte Eingabe ist eine durch Kommas getrennte Liste von Artikelnamen im Inventar. Die fünfte Eingabe ist eine durch Kommas getrennte Liste von Preisen, die jedem Artikel entsprechen. Die sechste Eingabe ist eine durch Kommas getrennte Liste von Mengen, die jedem Artikel entsprechen.

Erstellen Sie ein vollständiges Inventarverwaltungssystem, das alle drei Operationen verarbeitet: Hinzufügen von Artikeln, Überprüfen des Lagerbestands und Verkaufen von Artikeln. Verwenden Sie eine HashMap, um die Inventardaten zu speichern, wobei der Schlüssel der Artikelname und der Wert ein Tupel ist, das den Preis und die Menge (f64, i32) enthält.

Anforderungen:

  • Importieren Sie HashMap aus std::collections
  • Lesen Sie die erste Eingabe (Befehl) ein und entfernen Sie Leerzeichen am Anfang und Ende
  • Lesen Sie die zweite Eingabe (Artikelname) ein und entfernen Sie Leerzeichen am Anfang und Ende
  • Lesen Sie die dritte Eingabe (Mengen-/Preiswert) ein und entfernen Sie Leerzeichen am Anfang und Ende
  • Parsen Sie die dritte Eingabe zu f64
  • Lesen Sie die vierte Eingabe (kommagetrennte Artikelnamen) ein und entfernen Sie Leerzeichen am Anfang und Ende
  • Lesen Sie die fünfte Eingabe (kommagetrennte Preise) ein und entfernen Sie Leerzeichen am Anfang und Ende
  • Lesen Sie die sechste Eingabe (kommagetrennte Mengen) ein und entfernen Sie Leerzeichen am Anfang und Ende
  • Erstellen Sie eine veränderliche HashMap<String, (f64, i32)> für das Inventar
  • Teilen Sie die Artikelnamen an den Kommas auf
  • Teilen Sie die Preise an den Kommas auf und parsen Sie jeden zu f64
  • Teilen Sie die Mengen an den Kommas auf und parsen Sie jede zu i32
  • Fügen Sie jeden Artikel mit seinem entsprechenden Preis und seiner Menge als Tupel in das Inventar ein
  • Verwenden Sie einen match-Ausdruck auf den Befehl, um zu bestimmen, welche Operation ausgeführt werden soll
  • Für den Befehl add:
    • Verwenden Sie .entry() und .or_insert(), um den Artikel hinzuzufügen, falls er nicht existiert, wobei die dritte Eingabe als Preis und 0 als anfängliche Menge verwendet wird
    • Geben Sie aus: Added [item_name] to inventory
    • Geben Sie aus: Price: $[price]
    • Geben Sie aus: Quantity: 0
  • Für den Befehl check:
    • Verwenden Sie .get(), um zu prüfen, ob der Artikel existiert
    • Verwenden Sie einen match-Ausdruck, um die Option zu behandeln
    • Falls Some, geben Sie aus:
      • [item_name] is in stock
      • Price: $[price]
      • Quantity: [quantity]
    • Falls None, geben Sie aus: [item_name] is not in stock
  • Für den Befehl sell:
    • Parsen Sie die dritte Eingabe zu i32 als die zu verkaufende Menge
    • Verwenden Sie .get(), um zu prüfen, ob der Artikel existiert
    • Verwenden Sie einen match-Ausdruck, um die Option zu behandeln
    • Falls Some:
      • Prüfen Sie, ob die aktuelle Menge ausreicht
      • Falls ja, aktualisieren Sie das Inventar mit der neuen Menge und geben Sie aus:
        • Sold [quantity_to_sell] [item_name]
        • Total: $[total_price]
        • Remaining stock: [new_quantity]
      • Falls nein, geben Sie aus:
        • Insufficient stock for [item_name]
        • Available: [current_quantity]
    • Falls None, geben Sie aus: [item_name] is not in stock
  • Für jeden anderen Befehl geben Sie aus: Invalid command

Eingabe:

  • Erste Zeile: Befehl (add, check oder sell)
  • Zweite Zeile: Artikelname (z. B. Tablet)
  • Dritte Zeile: Zahl (Preis für add, Menge für sell, ignoriert für check)
  • Vierte Zeile: Kommagetrennte Artikelnamen (z. B. Laptop,Mouse,Keyboard)
  • Fünfte Zeile: Kommagetrennte Preise (z. B. 999.99,25.50,75.00)
  • Sechste Zeile: Kommagetrennte Mengen (z. B. 15,50,30)

Ausgabe:

  • Für den Befehl add:
    • Added [item_name] to inventory
    • Price: $[price]
    • Quantity: 0
  • Für den Befehl check (Artikel existiert):
    • [item_name] is in stock
    • Price: $[price]
    • Quantity: [quantity]
  • Für den Befehl check (Artikel existiert nicht): [item_name] is not in stock
  • Für den Befehl sell (ausreichender Lagerbestand):
    • Sold [quantity_to_sell] [item_name]
    • Total: $[total_price]
    • Remaining stock: [new_quantity]
  • Für den Befehl sell (unzureichender Lagerbestand):
    • Insufficient stock for [item_name]
    • Available: [current_quantity]
  • Für den Befehl sell (Artikel existiert nicht): [item_name] is not in stock
  • Für ungültigen Befehl: Invalid command

Probier es selbst

use std::collections::HashMap;
use std::io;

fn main() {
    // Eingaben lesen
    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();
    
    // Inventar-HashMap erstellen
    let mut inventory: HashMap<String, (f64, i32)> = HashMap::new();
    
    // TODO: Schreiben Sie Ihren Code unten
    // Analysieren Sie die durch Kommas getrennten Eingaben und befüllen Sie das Inventar
    // Verwenden Sie einen match-Ausdruck für den Befehl, um add, check und sell Operationen zu verarbeiten
    // Denken Sie daran, die entsprechenden Nachrichten basierend auf dem Befehl auszugeben
    
}

Alle Lektionen in Logic & Flow