Zimmer buchen - falscher Preis wird ausgegeben



  • Halloo, mein Code funktioniert irgendwie nicht! Mir wird der falsche Preis ausgegeben!
    Kann mir jemand helfen? Danke im Voraus!

    Aufgabenstellung:

    Das Ferienzimmer kostet

    am Wochenende (Sa und So) 100 Euro.
    an einem Wochentag (Mo bis Fr) 80 Euro.
    an einem Feiertag erhöht sich der Tagespreis um 10 Prozent.
    Randbedingungen und Programmdetails
    Entwerfen und implementieren Sie ein C++-Programm, das die Buchung des Ferienzimmers am PC ermöglicht. Dazu wird vom Nutzer zunächst das Datum des ersten Tages und danach das Datum des letzten Tages eingegeben. Sowohl der erste als auch der letzte Tag müssen vollständig vom Nutzer bezahlt werden. Jedes Datum ist eine 7 bzw. 8-stellige ganze Zahl.

    Falls das Zimmer im angegebenen Zeitraum frei ist, soll der Gesamtpreis für den Aufenthalt angezeigt werden. Nun hat der Nutzer die Wahl, die Buchung vorzunehmen. Bestätigt er die Buchung, wird das Zimmer reserviert.
    Ist das Datum nicht frei, bei Ablehnung der Buchung und nach Abarbeitung einer erfolgreichen Buchung soll der Nutzer gefragt werden, ob er ein neues Datum wählen möchte.
    Das Programm soll einen Buchungszeitraum vom 01.01.2024 bis 30.06.2024 bereitstellen. Zu Beginn des Programms ist das Zimmer an keinem Tag belegt.
    Um die entsprechenden Preise berechnen zu können, erhalten Sie eine Datei mit dem Namen kalender.txt. Darin enthalten sind alle Kalendertage vom 01.01.2024 bis 30.06.2024 mit dem jeweiligen Datum als 7 bzw. 8-stellige Zahl, die Information, ob ein Tag ein Feiertag ist (1: Feiertag; 0: kein Feiertag) und der Angabe zum Wochentag (Mo, Di, Mi, Do, Fr, Sa, So). Lesen Sie alle Daten der Datei ein und speichern diese in 1 Feld.
    Geben Sie nach erfolgreicher Buchung alle Tage aus (Wochentag, Datum TT.MM.JJJJ), Feiertag), an denen eine Buchung für das Zimmer vorliegt.
    Verwenden Sie ausschließlich die Bibliotheken iostream und fstream.

    kalender.txt: ausschnitt

    1012024 1 Mo
    2012024 0 Di
    3012024 0 Mi
    4012024 0 Do
    5012024 0 Fr
    6012024 0 Sa
    7012024 0 So
    8012024 0 Mo
    usw

    Mein Ansatz:

    #include <iostream>
    #include <fstream>

    using namespace std;

    struct Tag {
    long Datum;
    bool Feiertag;
    char Wochentag[3];
    bool gebucht;
    };

    const int TageGesamt = 182;

    int preis(bool Wochenende, bool Feiertag);

    void printBookingDates(Tag kalender[], int ersterTag, int letzterTag);

    int main() {
    Tag kalender[TageGesamt];

    ifstream datei("C:\Users\....\kalender.txt");
    if (!datei) {
    cerr << "Fehler beim Oeffnen von kalender.txt" << endl;
    return 1;
    }

    // Daten aus der Datei einlesen
    for (int i = 0; i < TageGesamt; ++i) {
    datei >> kalender[i].Datum >> kalender[i].Feiertag >> kalender[i].Wochentag;
    kalender[i].gebucht = false;
    }

    datei.close();

    // Benutzereingabe für den Buchungszeitraum
    long ersterTag, letzterTag;
    char neueBuchung;

    do {
    cout << "Geben Sie den ersten Tag der Buchung (TTMMJJJJ) ein: ";
    cin >> ersterTag;
    cout << "Geben Sie den letzten Tag der Buchung (TTMMJJJJ) ein: ";
    cin >> letzterTag;

      // Buchung überprüfen und Gesamtpreis berechnen
      int gesamtPreis = 0;
      for (int i = 0; i < TageGesamt; ++i) {
          if (kalender[i].Datum >= ersterTag && kalender[i].Datum <= letzterTag) {
              bool Wochenende = (kalender[i].Wochentag[0] == 'S' && kalender[i].Wochentag[1] == 'a' || kalender[i].Wochentag[1] == 'o');
              int preisTag = preis(Wochenende, kalender[i].Feiertag);
    
              if (kalender[i].gebucht) {
                  cout << "Tag " << kalender[i].Datum << " ist bereits gebucht!" << endl;
              } else {
                  kalender[i].gebucht = true;
                  gesamtPreis += preisTag;
              }
          }
      }
    
      // Gesamtpreis ausgeben
      cout << "Gesamtpreis: " << gesamtPreis << " Euro" << endl;
    

    // Funktion, um gebuchte Tage auszugeben
    printBookingDates(kalender, ersterTag, letzterTag);

      cout << "Möchten Sie eine neue Buchung vornehmen? (J/N): ";
      cin >> neueBuchung;
    

    } while (neueBuchung == 'J' || neueBuchung == 'j');

    return 0;
    }

    int preis(bool Wochenende, bool Feiertag) {
    const int wochenTagPreis = 80;
    const int wochenendPreis = 100;
    const double feiertagsAufschlag = 0.1;

    int grundPreis = Wochenende ? wochenendPreis : wochenTagPreis;
    if (Feiertag) {
    return static_cast<int>(grundPreis * (1 + feiertagsAufschlag));
    } else {
    return grundPreis;
    }
    }

    // Funktion, um die gebuchten Tage auszugeben
    void printBookingDates(Tag kalender[], int ersterTag, int letzterTag) {
    cout << "Gebuchte Tage:" << endl;
    for (int i = ersterTag; i <= letzterTag; ++i) {
    if (kalender[i].gebucht) {
    cout << kalender[i].Wochentag << kalender[i].Datum << " (TT.MM.JJJJ)" << endl;
    }
    }
    }



  • Bedenke die Operatorpriorität bei

    bool Wochenende = (kalender[i].Wochentag[0] == 'S' && kalender[i].Wochentag[1] == 'a' || kalender[i].Wochentag[1] == 'o');
    

    PS: Packe deinen Code in Code-Tags (Button "</>"), dann schaue ich mir auch noch mehr an...


Anmelden zum Antworten