Alles zusammenfügen
Teil des Abschnitts Logik & Ablauf der GO-Journey von Coddy — Lektion 25 von 68.
Aufgabe
EinfachVervollständigen Sie Ihr Bestandsverwaltungssystem, indem Sie ein umfassendes Hauptprogramm erstellen, das alle Funktionen integriert, die Sie in den vorangegangenen Lektionen aufgebaut haben. Diese abschließende Herausforderung führt die Bestandsinitialisierung, Bestandsprüfung, das Hinzufügen von Artikeln, Bestandsaktualisierungen und die Berichterstellung in einer vollständigen Befehlszeilenschnittstelle mit menügesteuerter Navigation zusammen.
Sie erhalten drei Eingaben:
- Einen String mit den initialen Bestandsdaten im Format
"product1:price1:quantity1,product2:price2:quantity2,product3:price3:quantity3"(z. B."Laptop:999.99:5,Mouse:25.50:15,Keyboard:75.00:8") - Einen String mit einer Sequenz von Menüoperationen im Format
"operation1,operation2,operation3", wobei die Operationen"check","add","update","report"oder"exit"sein können (z. B."check,add,update,report,exit") - Einen String mit Operationsparametern im Format
"param1|param2|param3", wobei jeder Parameter der Operation an der gleichen Position entspricht (z. B."Mouse|Monitor:299.99:10|Laptop:5|full,10")
Ihre Aufgabe ist es:
- Verwenden Sie dieselbe
Product-Struktur aus den vorherigen Lektionen mit den FeldernPrice(float64) undQuantity(int) - Analysieren Sie die erste Eingabe und initialisieren Sie die Bestands-Map mit den vorhandenen Produktdaten
- Zeigen Sie die Systemstartmeldung an:
"=== INVENTORY MANAGEMENT SYSTEM ===""System initialized with [number_of_products] products""Starting interactive session..."
- Analysieren Sie die zweite Eingabe, um die Sequenz der auszuführenden Operationen zu erhalten
- Analysieren Sie die dritte Eingabe, um die Parameter für jede Operation zu erhalten
- Zeigen Sie für jede Operation in der Sequenz den Operations-Header an und führen Sie die entsprechende Aktion aus:
- Für
"check": Zeigen Sie"--- STOCK CHECK ---"an und prüfen Sie den Bestand für das angegebene Produkt - Für
"add": Zeigen Sie"--- ADD ITEM ---"an und fügen Sie das angegebene Produkt hinzu - Für
"update": Zeigen Sie"--- UPDATE STOCK ---"an und aktualisieren Sie den Bestand für das angegebene Produkt - Für
"report": Zeigen Sie"--- GENERATE REPORT ---"an und erstellen Sie den angegebenen Bericht - Für
"exit": Zeigen Sie"--- SYSTEM EXIT ---"an und geben Sie die Beendigungsinformationen aus
- Für
- Implementieren Sie die Funktion
checkStock, die Menge und Fehler wie in den vorherigen Lektionen zurückgibt - Implementieren Sie die Funktion
addNewItem, die Produkte hinzufügt und Fehler wie in den vorherigen Lektionen zurückgibt - Implementieren Sie die Funktion
updateStock, die Mengen aktualisiert und Fehler wie in den vorherigen Lektionen zurückgibt - Implementieren Sie die Funktion
generateReport, die Berichte wie in den vorherigen Lektionen erstellt - Für die Operation
"check":- Verwenden Sie den Parameter als den zu prüfenden Produktnamen
- Anzeige:
"Checking stock for: [product_name]" - Falls gefunden:
"Stock level: [quantity] units" - Falls nicht gefunden:
"Product not found in inventory"
- Für die Operation
"add":- Analysieren Sie den Parameter im Format
"product_name:price:quantity" - Anzeige:
"Adding new product: [product_name]" - Bei Erfolg:
"Product added successfully" - Bei Fehler:
"Failed to add product: [error_message]"
- Analysieren Sie den Parameter im Format
- Für die Operation
"update":- Analysieren Sie den Parameter im Format
"product_name:change" - Anzeige:
"Updating stock for: [product_name]" - Bei Erfolg und positivem Change:
"Added [change] units. New stock: [new_quantity]" - Bei Erfolg und negativem Change:
"Removed [absolute_change] units. New stock: [new_quantity]" - Bei Fehler:
"Update failed: [error_message]"
- Analysieren Sie den Parameter im Format
- Für die Operation
"report":- Analysieren Sie den Parameter im Format
"report_type,threshold" - Anzeige:
"Generating [report_type] report with threshold [threshold]" - Erstellen und zeigen Sie den vollständigen Bericht wie in den vorherigen Lektionen an
- Analysieren Sie den Parameter im Format
- Für die Operation
"exit":- Zeigen Sie die abschließenden Bestandsstatistiken an:
"Final inventory status:""Total products: [total_products]""Total items: [total_items]""Total value: $[total_value]"
- Anzeige:
"Session completed successfully" - Anzeige:
"Thank you for using the Inventory Management System"
- Zeigen Sie die abschließenden Bestandsstatistiken an:
- Nach jeder Operation (außer exit), Anzeige:
"Operation completed. Continuing to next operation..."
Verwenden Sie das Paket strings zum Aufteilen von Eingabestrings, das Paket strconv zum Konvertieren von Strings in Zahlen, das Paket errors für die Fehlerbehandlung, das Paket fmt für formatierte Ausgaben und das Paket sort für die alphabetische Sortierung. Formatieren Sie alle Preise und Werte auf 2 Dezimalstellen. Diese Herausforderung zeigt, wie man ein komplettes interaktives System erstellt, das mehrere funktionale Komponenten zu einer kohärenten Benutzererfahrung mit ordnungsgemäßer Fehlerbehandlung und Zustandsverwaltung integriert.
Probier es selbst
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
type Task struct {
Name string
Completed bool
}
func removeTask(tasks []Task, index int) []Task {
return append(tasks[:index], tasks[index+1:]...)
}
func main() {
// Read input using bufio.Scanner to handle spaces properly
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
_ = scanner.Text() // Read but don't use the number of tasks
scanner.Scan()
taskData := scanner.Text()
scanner.Scan()
indexStr := scanner.Text()
// Parse task data
taskEntries := strings.Split(taskData, ",")
var tasks []Task
for _, entry := range taskEntries {
parts := strings.Split(entry, ":")
if len(parts) >= 2 {
name := parts[0]
status := parts[1] == "true"
tasks = append(tasks, Task{Name: name, Completed: status})
}
}
// Convert index string to integer
index, _ := strconv.Atoi(indexStr)
// Store the name of the task to be removed
removedTaskName := tasks[index].Name
// Remove the task
tasks = removeTask(tasks, index)
// Display remaining tasks
completedCount := 0
for _, task := range tasks {
if task.Completed {
fmt.Printf("[x] %s\n", task.Name)
completedCount++
} else {
fmt.Printf("[ ] %s\n", task.Name)
}
}
// Print confirmation message
fmt.Printf("Task '%s' removed successfully!\n", removedTaskName)
// Print summary
totalCount := len(tasks)
incompleteCount := totalCount - completedCount
fmt.Printf("Total: %d tasks (%d completed, %d remaining)\n", totalCount, completedCount, incompleteCount)
}Alle Lektionen in Logik & Ablauf
1Fortgeschrittener Kontrollfluss
Switch mit `fallthrough`Abbrechen von verschachtelten SchleifenFortsetzen einer bestimmten SchleifeDie `goto`-AnweisungZusammenfassung – Fortgeschrittene Schleifensteuerung4Projekt: Einfache Aufgabenliste
Projekt-SetupEine Aufgabe hinzufügen2Structs und Methoden
Methoden für Structs definierenValue ReceiverPointer ReceiverReceiver auswählenMethoden vs. FunktionenZusammenfassung – Struct-Verhalten5Maps im Detail
Maps von StructsPointer als Map-WertePrüfen auf Nil-MapsMaps vergleichenZusammenfassung – Wortfrequenz-Zähler8Projekt: Einfache Bestandsverwaltung
ProjektübersichtLagerbestand prüfen11Abschlussherausforderungen
Einfache KontaktlisteEinfacher Zahlen-ValidatorSammler für eindeutige Elemente3Interfaces (Die Grundlagen)
Was ist ein Interface?Ein Interface definierenEin Interface implementierenInterface-Typen verwendenLeeres InterfaceType AssertionsType SwitchZusammenfassung – Formen und Verhalten