Flugbuchungssystem
-
Hallo,
ich möchte bei CPP eine Übungsaufgabe programmieren. Folgende Aufgabenstellung:
in der main ein menü welches nur die methoden aufruft:Beispiel:
#include <cstdlib> #include <iostream> using namespace std; int main() { int iAuswahl = 5; while (iAuswahl != 0) { cout << "====MENUE====" << endl; cout << "(1) Platz buchen" << endl; cout << "(2) Platz stornieren" << endl; cout << "(3) Belegung anzeigen" << endl; cout << "(0) Programm beenden" << endl; cin >> iAuswahl; switch (iAuswahl) { case 1: book(); break; case 2: cancel(); break; case 3: show_bookings(); break; case 0: break; default: cout << "Falsche Eingabe!" << endl; cout << "Bitte wiederholen" << endl; } cin >> iAuswahl; } }Für die Klasse "Flight":
Das Flugzeug hat 22 Sitzreihen á 6 Sitzplätze.
Jeder Sitzplatz hat dann eventuell einen "Vornamen und Nachnamen für die gebuchte Person". Natürlich noch ein bool mit ist_belegt.struct seats{ string nachname; string vorname; int number; // für Sitzplatznummer int buchstabe; // Sitzplatzbuchstabe bool belegt; };Habe mir jetzt überlegt einen struct für den Sitzplatz zu machen mit "seats". Anschließend wollte ich die Sitzplätze iterieren damit ich bereits alle Sitzplätze erstellt habe. Natürlich mit leeren Werten und ist_belegt = false.
Komme aber bei dem Schritt nicht mehr weiter:
vector<seats> seat; ...Weiß leider nicht wie ich die Sitzpläze iterieren sollte.
Danke für eure Hilfe.
-
Schleifen kennst du?
Falls ja, dann stell eine deutlichere Frage, es ist unklar, womit genau du Schwierigkeiten hast.
Du könntest deinem
seats(wieso ist eigentlich ein Sitz in der Mehrzahl?) auch einen passenden Konstruktor verpassen. Es ist allgemein besser, wenn ein Objekt gleich nach Erstellung betriebsbereit ist, als dass man erst noch irgendwelche Initialisierungen auf dem Objekt machen muss. Letzteres könnte man nämlich vergessen, wohingegen ein Konstruktor automatisch aufgerufen wird. außerdem macht es den Code übersichtlicher.Früher oder später müsstest du natürlich trotzdem über deine Sitze iterieren, aber dazu habe ich ja oben schon was gesagt.
Ich weiß auch nicht, ob ich das Design mag. Eher nicht. Es passt nicht, dass ein Sitz einen Namen hat. Auch nicht unbedingt, dass der Sitz selber eine Nummer hat (das kann man aber noch verteidigen). Ein Name ist eine Eigenschaft der Person, die den Sitz reserviert hat, die Nummer ist ein Ordnungskriterium in der Gesamtheit der Sitze.
Lass dich von letzterem Absatz nicht verunsichern, dein Ansatz ist gut genug für ein Anfängerprogramm, bloß ich hätte es wahrscheinlich anders gemacht (ich kenne aber auch deine Aufgabenstellung nicht genau).
-
int buchstabe; // SitzplatzbuchstabeIch sag mal so ... Buchstabe als int??
Und du hast halt 6 structs mit gleicher Nummer aber verschiedenen Buchstaben. Also für eine Reihe!
-
struct verändert:
<Flight.h> struct seat { string Name, Vorname; bool ist_belegt; int Sitz[0][0]; //int iSitzreihe; //int iSitznummer; }; public: ... private: vector<seat> seats;oder sollte ich doch mit dem davor weitermachen. habe es nur aus dem grund verändert weil ich nicht weiterkam. hätte eigentlich die version davor bevorzugt, natürlich trotzdem kein problem es rückgänig zu machen.
Habe die Iterierung abgeschlossen.
<Flight.cpp> int iReihe = 21; int iSitzanzahl = 6; Flight::Flight() { for(int i=0; i<iReihe; i++){ new_seat.Sitz[i][0]; for(int j=0; j<iSitzanzahl; j++){ new_seat.Sitz[i][j]; new_seat.ist_belegt=false; seats.push_back(new_seat); } } }nur ich weiß gerade nicht wie ich weitermachen soll. hänge gerade daran dass, das ganze folgendermaßen aussehen sollte:
1: frei frei frei besetz besetz frei
2: besetz frei frei besetz frei frei
...
22: besetz frei frei besetz frei freieinen vector kann ich schließlich als eine liste sehen, natürlich kann ich diese liste mit einer for-schleife durch-iterieren bis seats.size().
aber wie genau kann ich sagen: das ist die Reihe zu den Reihen gehören diese Sitzplätze?
oder sollte ich mein programm komplett anderster gestalten, wenn ja, wie ungefähr.
-
Mein Vorschlag:
Ein Klasse für die Person. Eine Klasse für den Sitz und eine Klasse für die Sitzreihen. Sowie eine Klasse Flugzeug. Dann kannst du einem Sitz eine Person zuordnen. Und entsprechend die Sitze einer Sitzreihe. Und die Sitzreihen einem Flugzeug.Die Sitzreihe enthält einen vector mit den Sitzen. Und das Flugzeug enthält einen vector mit den Sitzreihen. So kannst du dich z.B. über Flugzeug->Sitzreihe->Sitz->Person durchhangeln.
-
depream schrieb:
struct seat { string Name, Vorname; bool ist_belegt; int Sitz[0][0]; //int iSitzreihe; //int iSitznummer; };Nein. Das ist nix.
Sitz ist ein zweidimensionales Array von int, mit den Dimensionen 0 und 0;
Dein Compiler sollte Dich davor warnen. Warnungen aktivieren!Ausserdem: Braucht denn ein Sitz seine Position, oder ist das nicht eine Eigenschaft des Flugzeugs, wo welcher Sitz ist?
depream schrieb:
nur ich weiß gerade nicht wie ich weitermachen soll. hänge gerade daran dass, das ganze folgendermaßen aussehen sollte:
1: frei frei frei besetz besetz frei
2: besetz frei frei besetz frei frei
...
22: besetz frei frei besetz frei freieinen vector kann ich schließlich als eine liste sehen, natürlich kann ich diese liste mit einer for-schleife durch-iterieren bis seats.size().
aber wie genau kann ich sagen: das ist die Reihe zu den Reihen gehören diese Sitzplätze?Weiss nicht, ob ich Dich richtig verstehe:
Hier z.B. hat Nathan beschrieben, wie Du einen Vector auch zweidimensional auffassen kannst.
Damit kannst Du ganz bequem Deinenstd::vectorbenutzen und hast trotzdem ein System von Spalten und Reihen.