Erste Schritte Hotel

Seyel

Mitglied
Hallo liebe Community,
erstellt werden soll eine Klasse Hotel, mit einem Konstruktor der die Hotelnamen und die jeweilige Anzahl an Zimmern verarbeitet. Insgesamt hat die Klasse drei Methoden: eine checkt Gäste ins Hotel, die andere checkt aus und die dritte ist eine Auflistung der aktuellen Anzahl der Gäste. Ich weiß leider nicht wie bzw wo ich anfangen soll. Bin allerdings auch neu hier, also verzeiht mir wenn die Frage nicht wie gewohnt gestellt wurde. Gebe gerne mehr Information bei Bedarf.
(a)Ein Konstruktor soll den hotelnamen und die anzahl_der_Zimmer verarbeiten

(b)Es soll eine Methode geben, die einen Gast in ein Zimmer einchecked (natürlich nur in ein freies Zimmer !) und das Zimmer als belegt kennzeichnet. Dabei soll auch der anreisetag (An- und Abreisetag speichern wir der Einfachheit halber als int mit den Werten 1,…,31) gespeichert werden.

(c)Eine zweite Methode soll den Gast an einem abreisetag auschecken, damit das Zimmer als frei kennzeichnen und den rechnungsbetrag (anhand des zimmerpreises und des anreisetags) zurückgeben.

(d)Programmieren Sie noch eine dritte Methode, die die jeweils aktuelle gästeliste() (mit zimmernummer und gastnamen oder frei) ausgibt
Vielen Dank im Voraus :)
 
Zuletzt bearbeitet von einem Moderator:

Robat

Top Contributor
Am Besten fängst du erstmal an dir zu überlegen (mit Zettel und Stift) wie deine Klassen aussehen - also wie der Name ist, welche Attribute sie besitzen und welche Methoden sie haben.
Wenn du das gemacht hast legst du los.
Leg die einzelnen Klassen an und erweitere die Klassen Stück für Stück mit den entsprechenden Methoden / Attributen.
 

Seyel

Mitglied
@Flown @Robat

Java:
public class Hotel {
  private String name;
  private int anzahlZimmer;
  private Zimmer[] zimmer;
 
  public Hotel(){
  }
  public Hotel(String name, int anz){
      this.name=name;
      this.anz=anzahlZimmer;
      this.zimmer= Zimmer[anz];
  }
  public int gastInsZimmer(Gast g, int anreiseTag){ 
  }
  public void gasteliste(){
  }
  public double gastAuschecken(Gast g, int abreisetag){
  }
}
Des Weiteren habe ich eine Klasse Gast und Hotel.
ZU (b)Es soll eine Methode geben, die einen Gast in ein Zimmer
einchecked (natürlich nur in ein freies Zimmer !) und das Zimmer
als belegt kennzeichnet. Dabei soll auch der anreisetag (Anund
Abreisetag speichern wir der Einfachheit halber als int mit den
Werten 1,…,31) gespeichert werden.

public int gastInsZimmer(Gast g, int anreiseTag){
//ich müsste eine Variable erstellen mit der ich die Verfügbarkeit abfrage, boolean? und in einer if Anweisung dann für den fall dass es frei ist einen Gast in das zimmer "einbuchen", und am besten eine variable mit zwei arrays... eine für die verfügbareit und die nächste für den anreisetag? Brauche ich eventuell sogar eine statische Variable um die Zimmernummer mitzuzählen?
}

Vielen Dank für die vielen Antworten :)
 
Zuletzt bearbeitet von einem Moderator:

Flown

Administrator
Mitarbeiter
Es gibt Code-Tags hier im Forum und diese dann bitte auch nutzen: [code=java]//JAVA CODE HERE[/code]
 

Robat

Top Contributor
this.zimmer= Zimmer[anz];
Das wird so nicht funktionieren. Hast du deinen Code mal compiliert?

this.anz=anzahlZimmer;
Die Zeile solltest du dir noch mal anschauen und überprüfen ob sie semantisch richtig ist :)

Wie sieht denn deine Klasse Zimmer aus? Wie du bereits richtig festgestellt hast, braucht diese auf jeden Fall einen Indikator, ob das Zimmer belegt ist oder nicht.

und am besten eine variable mit zwei arrays... eine für die verfügbareit und die nächste für den anreisetag?
Was genau meinst du damit? Wofür brauchst du 2 Arrays?
 

Seyel

Mitglied
Hallo,
ich habe mich jetzt mal durch die Aufgaben gearbeitet. Der Teil an dem ich hängen geblieben bin, soll die Anzahl der Zimmer im Hotel durchlaufen und dabei einen neuen Gast in ein Zimmer einweisen, wenn dieser nicht belegt ist. Ich verzweifel ein wenig daran, wie ich die Methode getZimmerart richtig verwenden kann, welche aus der Kindklasse ist.
Java:
public int gastInsZimmer(Gast g, int anreiseTag){
        for (int x=0;x<anzahlZimmer;x++){
            if (zimmer[x].getZimmerart("V"))
            {            zimmer[x].setGast(g);
                         zimmer[x].setZimmerart('B');
            }   
        }

Ich hoffe das mit Java tag hat geklappt

Vielen Dank im Voraus!
 

Robat

Top Contributor
Warum genau bekommt eine Methode die getZimmerart heißt einen Parameter? Ist eigentlich unüblich.
Was genau macht diese Methode denn? Wie prüfst du denn ob ein Zimmer frei ist?
 

Seyel

Mitglied
so sieht getZimmerart aus:
Java:
 public char getZimmerart(char za){
        this.zimmerArt=za;
        if (za!='V'){
        return this.zimmerArt;}
        else return za='B';
    }

Naja ich bin dabei in java erst reinzukommen und das war der schlüssigste weg für mich. Möchte keinesfalls behaupten dass es auch der sinnvollste ist. ich möchte eigentlich in der Methode getZimmerart prüfen ob das Zimmer vergeben ist, aber scheinbar ist es mir nicht gelungen.
 

truesoul

Top Contributor
Naja, wenn die prüfen willst ob ein Zimmer vergeben ist, dann ist getZimmerArt als Methodenname nicht passend :)
Dann eher sowas wie istZimmerVergeben() und dazu noch ein setter.

Grüße
 

Seyel

Mitglied
Also V steht für Verfügbar und B steht für Belegt

Und die Methodennamen sind schon vorgegeben, ich fülle die nur mit Inhalt und einen Setter habe ich auch schon
Java:
public void setZimmerart(char za){
       if (za=='V'){
           System.out.println("Das Zimmer ist verfügbar");
       }
       if (za=='B'){
           System.out.println("Das Zimmer ist belegt.");
       }
    }
aber mir fällt gerade auf, dass ich nicht wirklich etwas auf belegt oder verfügbar setze
 

truesoul

Top Contributor
Dann erstelle doch ein Enum alá

Java:
public enum Verfuegbarkeit {
    VERFUEGBAR, BELEGET, RESERVIERT;
}

Dafür ein setter und getter und wenn man auch mag sowas wie:

Java:
private Verfuegbarkeit verfuegbarkeit;

public boolean isZimmerFrei() {
    return verfuegbarkeit == Verfuegbarkeit.VERFUEGBAR;
}

Aber ZimmerArt wäre für mich sowas wie Einzelzimmer oder Doppelzimmer usw

Grüße
 

Seyel

Mitglied
Das Arbeiten mit einem Enum ist meines Wissens nach nicht für diese Aufgabe gestattet, aber trotzdem vielen Dank für die Antwort :)
 

truesoul

Top Contributor
Das Arbeiten mit einem Enum ist meines Wissens nach nicht für diese Aufgabe gestattet, aber trotzdem vielen Dank für die Antwort :)

Ok. Dann erstelle eine Klasse Verfuegbarkeit mit statischen Variablen:
Java:
    class Verfuegbarkeit {
        public static final String VERFUEGBAR = "VERFUEGBAR";
        public static final String BELEGET = "BELEGT";
        public static final String RESERVIERT = "RESERVIERT";
    }

    private String verfuegbarkeit;

    public boolean isZimmerFrei() {
        return Verfuegbarkeit.VERFUEGBAR.equals(verfuegbarkeit);
    }

Wichtig verfuebarkeit via setter setzen
 

Flamingo

Mitglied
Wenn die Methodennamen und alles schon gegeben sind, dann ändere doch den Setter so ab, dass er auch wirklich zimmerArt auf den übergebenen Wert setzt. Und bei der Überprüfung schaust du, ob der Getter "V" liefert:
Java:
if (zimmer[x].getZimmerart().equals("V"){
             zimmer[x].setGast(g);
             zimmer[x].setZimmerart('B');
}
 

Seyel

Mitglied
Java:
 public void setZimmerart(char za){
       
        for(int i=0;i<=zimmerNummer; i++){
            this.zimmerArt='V';
        }

ich habe es jetzt so gemacht, das der setter die Zimmer immer auf verfügbar stellt. Irgendwie kriege ich die Verbindung nicht hin hzu sgen setze das Zimmer auf B sobald jemand eincheckt
 

Flamingo

Mitglied
Damit hast du aber eigentlich die Idee eines Setters untergraben. Ein Setter sollte den zugehörigen Wert auf den übergebenen Wert setzen:
Java:
public void setZimmerart(char za){
   this.zimmerArt = za;
}

Wenn ein Gast eincheckt rufst du die Methode mit 'B' auf, wenn er wieder auscheckt, rufst du sie mit 'V' auf.
 

Seyel

Mitglied
so sieht jetzt mein getter aus... die Tage des Aufenthaltes dürfen sind aufgrund der einfachheit nur von 1 bis 31
Java:
public void setZimmerart(char za){
       
        for(int i=0;i<=zimmerNummer; i++){
            if(this.anreiseTag<= this.abreiseTag)
                this.zimmerArt='B';
            else this.zimmerArt='V';
        }
[code]
und mein getter sieht so aus
 [code=Java] 
 public char getZimmerart(char za){
        this.zimmerArt=za;
        return za;
    }
[code]

ich werde die reservierung der zimmer jetz tüber die aufenthaltsdauer mit dem anreisetag klären, dass ich also mit der methode gastinszimmer meine zimmer im hotel durchlaufe in der ersten for schleife und in der zweiten forschleife meinen char auf b setze solnge mein  anreisetag kleiner als mein abreisetag ist.... aber dann müsste ich noch eine schleife für meinen auenthalt erstellen der die tage hochzählt oder?

 [code=Java] 
 
    public int gastInsZimmer(Gast g, int anreiseTag){
        for (int x=0;x<anzahlZimmer;x++){
            for(int a=0;a<abreiseTag;a++){
                this.zA = 'B';
            }
            this.zA= 'V';
        }}
[code]
 

Flamingo

Mitglied
Und bei der Methode gastInsZimmer stimmt auch einiges nicht: Die Schleifenindizes x und a werden nirgendwo verwendet (ich denke x meint den Zimmerindex? Aussagendere Namen wären gut) und auch die übergebenen Parameter werden nicht genutzt, d.h. der Gast g wird in kein Zimmer gesetzt.

Das hattest du in Post #13 schon mal besser gemacht.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Hotel Zimmer Buchungen Website Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben