Datenbank aus Objekten?
-
Der Compiler wird wohl noch etwas mehr sagen.
-
[EDIT] Hat sich erledigt
Ich hab gerade nochmal geguckt. Es gib keine Buildtime und auch keine Runtime Fehler.
Ich benutze Xcode Wenn ich das Programm starte wird Zeile 20 (kunde erstellterKunde;) grün markiert und daneben steht: Thread 1: breakpoint 2.1
In der Konsole wird (11db) angezeigt.Keine Ahnung was das ist.
aktualisierter Code:
#include <iostream> #include <fstream> #include <string> #include "main.hpp" #include "classKunde.hpp" #include "classDatenbank.hpp" #include "infilestream.hpp" using namespace std; void loadKundeInDatabase(const kunde& createdKunde){ /* soll eine objekt der Klasse datenbank erstellen und und dann mit der funktion neuerKunde den Kunden in den Vektor pushen*/ datenbank database; database.neuerKunde(createdKunde); } kunde erstelleKunde(){ kunde erstellterKunde; //muss ich ja machen, wenn ich die eingaben übergeben will, oder? string name, vorname, firmenname; int umsatz, kundennr; cout << "Name des Kunden: "; cin >> name; cout << "Vorname des Kunden: "; cin >> vorname; cout << "Firmenname des Kunden: "; cin >> firmenname; cout << "Umsatz des Kunden: "; cin >> umsatz; cout << "Kundennummer des Kunden: "; cin >> kundennr; erstellterKunde.setfirmenName(firmenname); erstellterKunde.setnachName(name); erstellterKunde.setvorName(vorname); erstellterKunde.setjahresUmsatz(umsatz); erstellterKunde.setkundenNummer(kundennr); return erstellterKunde; } int main() { loadKundeInDatabase(erstelleKunde()); return 0; }
-
So jetzt noch eine Sinnvolle Frage.
Nehmen wir mal an ein Kunde wird in dem Vektor "kunden" gespeichert.
Wie findet der zugriff auf eines der Objekte statt.Ich möchte jetzt mit kunde.getKundenNummerByName(); die Kundennummer erhalten
kunden[0] = kunde 1
kunden[1] = kunde 2
...wenn ich jetzt die kundeNummer von Kunde 2 ausgeben will.
Ich kann ja nicht auf den Vector zugreifen, weil dieser private ist.
also: kunden[1].getKundenNummerByName geht nicht.
-
Du hast im Debugger einen Breakpoint gesetzt und das Programm wird jetzt dort angehalten. Du wirst dich wohl mal mit der XCode Dokumentation auseinandersetzen müssen.
-
Ja hab ich schon gemerkt
-
kaiuwe schrieb:
So jetzt noch eine Sinnvolle Frage.
Nehmen wir mal an ein Kunde wird in dem Vektor "kunden" gespeichert.
Wie findet der zugriff auf eines der Objekte statt.Ich möchte jetzt mit kunde.getKundenNummerByName(); die Kundennummer erhalten
kunden[0] = kunde 1
kunden[1] = kunde 2
...wenn ich jetzt die kundeNummer von Kunde 2 ausgeben will.
Ich kann ja nicht auf den Vector zugreifen, weil dieser private ist.
also: kunden[1].getKundenNummerByName geht nicht.Ich würde der Klasse Datenbank eine öffentliche Methode "getKundeByName" spendieren, die hat ja Zugriff auf die privaten Daten.
Kunde getKundeByName(const std::string& name);
In dieser Funktion gehst du durch alle Elemente (die Kunden) im Vector bis du den gesuchten gefunden hast und diesen gibst du zurück.
In deinem Programm kannst du dann schreiben:
auto gesuchterKunde = datenbank.getKundeByName("Mustermann"); auto kundennummer = gesuchterKunde.getKundennummer(); // oder zusammen, wenn du von dem Kunden wirklich NUR die Kundennummer brauchst auto kundennummer = datenbank.getKundeByName("Mustermann").getKundennummer();
-
Du weißt schon, dass die Datenbank nicht lange Bestand hat, weil am Ende der Routine der Gültigkeitsbereich der Variablen endet?
void loadKundeInDatabase(const kunde& createdKunde){ /* soll eine objekt der Klasse datenbank erstellen und und dann mit der funktion neuerKunde den Kunden in den Vektor pushen*/ datenbank database; database.neuerKunde(createdKunde); } // hier wird "database" wieder zerstört
-
kaiuwe schrieb:
void erstelleKunde(){ string name, vorname, firmenname; int umsatz, kundennr; cout << "Name des Kunden: "; cin >> name; cout << "Vorname des Kunden: "; cin >> vorname; cout << "Firmenname des Kunden: "; cin >> firmenname; cout << "Umsatz des Kunden: "; cin >> umsatz; cout << "Kundennummer des Kunden: "; cin >> kundennr; kunde erstellterKunde; //muss ich ja machen, wenn ich die eingaben übergeben will, oder? erstellterKunde.setfirmenName(firmenname); erstellterKunde.setnachName(name); erstellterKunde.setvorName(vorname); erstellterKunde.setjahresUmsatz(umsatz); erstellterKunde.setkundenNummer(kundennr); loadKundeInDatabase(erstellterKunde); }
Stimmt schon so. Es wäre geschickter einen Konstruktor für "Kunde" zu schreiben, damit du direkt ein gültiges Kundenobjekt erzeugen kannst.
// variablen cin cout usw. was oben schon steht Kunde kunde{name, vorname, firmenname, umsatz, kundennummer}; return kunde;
-
temi schrieb:
Du weißt schon, dass die Datenbank nicht lange Bestand hat, weil am Ende der Routine der Gültigkeitsbereich der Variablen endet?
void loadKundeInDatabase(const kunde& createdKunde){ /* soll eine objekt der Klasse datenbank erstellen und und dann mit der funktion neuerKunde den Kunden in den Vektor pushen*/ datenbank database; database.neuerKunde(createdKunde); } // hier wird "database" wieder zerstört
wäre es ratsam die Datenbank direkt im Hauptprogramm du erstellen?
wie hier:
#include <iostream> #include <fstream> #include <string> #include "main.hpp" #include "classKunde.hpp" #include "classDatenbank.hpp" #include "infilestream.hpp" using namespace std; datenbank database; void loadKundeInDatabase(const kunde& createdKunde){ database.neuerKunde(createdKunde); } int main() { return 0; }
-
kaiuwe schrieb:
Wäre es ratsam die Datenbank direkt im Hauptprogramm du erstellen?
Ja.
Warum nicht so?
int main() { Datenbank db; db.loadFromFile("db.dat"); // irgendwelcher Code db.neuerKunde(erstelleKunde()); // noch mehr Code db.saveToFile("db.dat"); } // hier wird "db" ungültig, aber hier endet ja auch das Programm