Alles zusammenfügen
Teil des Abschnitts Logic & Flow der Rust-Journey von Coddy — Lektion 53 von 66.
Aufgabe
EinfachSie 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
HashMapausstd::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 und0als anfängliche Menge verwendet wird - Geben Sie aus:
Added [item_name] to inventory - Geben Sie aus:
Price: $[price] - Geben Sie aus:
Quantity: 0
- Verwenden Sie
- Für den Befehl
check:- Verwenden Sie
.get(), um zu prüfen, ob der Artikel existiert - Verwenden Sie einen
match-Ausdruck, um dieOptionzu behandeln - Falls
Some, geben Sie aus:[item_name] is in stockPrice: $[price]Quantity: [quantity]
- Falls
None, geben Sie aus:[item_name] is not in stock
- Verwenden Sie
- Für den Befehl
sell:- Parsen Sie die dritte Eingabe zu
i32als die zu verkaufende Menge - Verwenden Sie
.get(), um zu prüfen, ob der Artikel existiert - Verwenden Sie einen
match-Ausdruck, um dieOptionzu 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
- Parsen Sie die dritte Eingabe zu
- Für jeden anderen Befehl geben Sie aus:
Invalid command
Eingabe:
- Erste Zeile: Befehl (
add,checkodersell) - Zweite Zeile: Artikelname (z. B.
Tablet) - Dritte Zeile: Zahl (Preis für
add, Menge fürsell, ignoriert fürcheck) - 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 inventoryPrice: $[price]Quantity: 0
- Für den Befehl
check(Artikel existiert):[item_name] is in stockPrice: $[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
1Fortgeschrittener Kontrollfluss
Der 'match'-AusdruckAbgleichen mehrerer WerteBereiche abgleichenDer 'if let'-AusdruckSchleifen als AusdrückeRückblick – Einfacher Befehls-Parser4Daten gruppieren mit Structs
Was ist ein Struct?Übersicht über StructsZugriff auf Struct-FelderVeränderbare StructsStructs als FunktionsparameterTupel-StructsZusammenfassung – Ein Buch-Struct erstellen2Einführung in Vektoren
Was ist ein Vektor?Einen Vektor erstellenElemente mit push hinzufügenZugriff auf Vektor-ElementeÜber einen Vektor iterierenVeränderliche IterationElemente entfernenZusammenfassung – Einfacher Score-Tracker5Schlüssel-Wert-Paare mit Hash Maps
Was ist eine Hash Map?Erstellen einer Hash MapEinfügen von Schlüssel-Wert-PaarenZugreifen auf WerteIterieren über eine Hash MapAktualisieren eines WertesEntfernen eines PaaresZusammenfassung – Wortzähler8Projekt: Einfaches Artikelinventar
Projekt-SetupEinen Artikel hinzufügenLagerbestand prüfenEinen Artikel verkaufenAlles zusammenfügen11Abschluss-Herausforderungen
Wiederholung - Einzigartige ElementeWiederholung - Benutzerprofil-ValidatorWiederholung - Noten-Zusammenfassung3Kommandozeilen-To-Do-Liste
Projekt-SetupEine Aufgabe hinzufügenAlle Aufgaben anzeigenEine Aufgabe entfernenFinaler Code