struct Produkt
verbindet Name und Bestand
C++ mit Arrays, Strukturen und Vektoren
Eine schulische Programmierreihe vom klassischen Array bis zu einer modularen Lagerverwaltung mit struct Produkt, std::vector und kontrollierter Eingabeprüfung.
- Sprache
- C++
- Umgebung
- Visual Studio
- Schwerpunkt
- Datenmodell und Vektor
Eigene Lernprogramme und Codeauszüge, keine vollständige Veröffentlichung von Klassenarbeiten oder Aufgabenblättern
Projektübersicht
Die Übungsreihe enthält zwei nachvollziehbare Entwicklungsstufen einer Lagerverwaltung. Die erste Fassung verwaltet Produktnamen und Bestände in zwei parallelen Arrays. In der überarbeiteten Fassung werden zusammengehörige Daten in einer eigenen Struktur gebündelt und in einem dynamischen Vektor gespeichert.
std::vector<Produkt>
verwaltet die Einträge
Ausgangssituation
Parallele Arrays funktionieren bei kleinen Aufgaben, verlangen aber, dass Name und Bestand an jeder Stelle denselben Index behalten. Wird nur eines der Felder verändert, können die Daten auseinanderlaufen. Außerdem ist die Größe eines klassischen Arrays bereits beim Kompilieren festgelegt.
Ziel des Projekts
Ziel war eine verständliche Konsolenanwendung, in der Produkte hinzugefügt, angezeigt, gesucht und im Bestand verändert werden können. Die zweite Version sollte das Datenmodell verbessern, ohne die klare Funktionsaufteilung und die vorhandenen Prüfungen zu verlieren.
Technische Planung
Zuerst wurden die gemeinsamen Eigenschaften eines Produkts festgelegt. Danach wurde entschieden, welche Funktionen den Vektor nur lesen und welche ihn verändern dürfen. Eingaben, Geschäftslogik und Ausgabe bleiben getrennt.
- Produkt als eigener Datensatz mit Name und Bestand
-
lesender Zugriff über
const std::vector<Produkt>& - ändernder Zugriff über Referenzparameter
- zentrale Suche nach dem Produktindex
- klarer Menüablauf mit einzelnen Funktionsaufrufen
Hardware und Software
Die Anwendung wurde als lokales C++-Konsolenprogramm entwickelt. Verwendet werden ausschließlich Bestandteile der Standardbibliothek.
- Entwicklung
- Microsoft Visual Studio und C++-Compiler
- Header
- iostream, string, vector und limits
- Daten
- struct Produkt und std::vector
- Qualität
- Referenzen, const, Bereichs- und Eingabeprüfungen
Umsetzung
Die Struktur fasst die Eigenschaften eines Produkts zusammen. Der Vektor speichert beliebig viele dieser Datensätze bis zur bewusst gesetzten Obergrenze. Neue Produkte werden erst nach Prüfung des Namens und möglicher Duplikate mit
push_back
eingefügt.
struct Produkt {
std::string name;
int bestand;
};
std::vector<Produkt> lager;
void produktHinzufuegen(std::vector<Produkt>& lager) {
Produkt neu;
neu.name = zeileEinlesen("Produktname: ");
neu.bestand = 0;
lager.push_back(neu);
}
Programmstruktur
Alle Menüaktionen greifen auf dasselbe klar definierte Datenmodell zu. Lesende Funktionen erhalten eine konstante Referenz; Funktionen zum Hinzufügen oder Ändern arbeiten mit einer veränderbaren Referenz.
Auftretende Probleme
Zu den relevanten Fehlerfällen gehörten leere oder doppelte Produktnamen, Buchstaben bei einer Zahleneingabe, negative Mengen, ungültige Produktnummern und eine Verringerung unter den vorhandenen Bestand. Beim Umbau musste außerdem jede Funktion vom Arrayzugriff auf den neuen Datensatz angepasst werden.
Fehlersuche
Die Menüpfade wurden einzeln getestet: leeres Lager, erstes Produkt, Duplikat, Suche, Erhöhen, Verringern, zu große Entnahme und Gesamtbestand. Zusätzlich wurden Grenzwerte und ungültige Eingaben geprüft. Dadurch ließ sich erkennen, ob der Fehler in der Eingabe, der Indexberechnung oder der Bestandslogik lag.
Umgesetzte Lösungen
-
struct Produktverhindert die Trennung zusammengehöriger Felder. -
std::vectorersetzt die feste Anzahl tatsächlich belegter Arrayplätze. -
produktIndexFindenbündelt die Suche an einer Stelle. -
cin.clearundcin.ignoresetzen fehlerhafte Eingaben kontrolliert zurück. -
empty,sizeund Bereichsprüfungen schützen vor ungültigen Zugriffen.
Sicherheitsaspekte
Die Anwendung verarbeitet keine echten Kunden- oder Unternehmensdaten. Technische Robustheit entsteht durch begrenzte Mengen, geprüfte Indizes, das Verbot negativer Bestände und den kontrollierten Umgang mit fehlerhaften Konsoleneingaben.
Ergebnis
Entstanden ist eine menügesteuerte Lagerverwaltung mit Funktionen zum Hinzufügen, Anzeigen, Suchen, Erhöhen, Verringern und Summieren. Der Vergleich beider Fassungen zeigt konkret, warum ein eigenes Datenmodell und ein Standardcontainer übersichtlicher sind als zwei getrennte Arrays.
Wichtigste Lernerfahrungen
Strukturen bilden fachlich zusammengehörige Daten direkt im Code ab. Ein Vektor nimmt zusätzlich die Verwaltung der belegten Elemente ab. Referenzen vermeiden unnötige Kopien, während
const
deutlich macht, welche Funktionen den Datenbestand nicht verändern dürfen.
Aktueller Status
Die Lagerverwaltung mit Arrays sowie die überarbeitete Version mit Struktur und Vektor sind als schulische Übungsprogramme dokumentiert. C++ bleibt eine Grundlage in Vertiefung; die praktische Stärke liegt derzeit weiterhin stärker bei Systemen und Netzwerken.
Zukünftige Verbesserungen
Sinnvolle nächste Schritte sind eine Klasse mit gekapselten Methoden, Speichern und Laden aus einer Datei, Groß-/Kleinschreibung bei der Suche, Sortierung, Mindestbestandswarnungen und automatisierte Tests. So könnte aus der Übung schrittweise eine besser wartbare Anwendung entstehen.
Weitere Projekte
Technische Fallstudien aus Systemen, Netzwerken, Digitaltechnik und Webentwicklung.