E2ITx Musteraufgabe Kinoreservierung

Für ein Kino soll ein Reservierungssystem entwickelt werden.
Hier ein erster Entwurf mit einem Objektdiagramm.

Das Kino hat zunächst maximal 30 Plätze und es können sich maximal 20 Kunden registrieren.
Attribut name darf nicht leer sein, zur Not wird „No Name“ eingetragen.

Die Verwaltung wird mit Arrays realisiert. Es kann durch Stornierungen Lücken (Nullverweise) in den Arrays geben.

Kinoreservierung Objektdiagramm
Kinoreservierung Objektdiagramm

Klassendiagramm erstellen

Erstellen Sie ein Klassendiagramm mit Assoziationen, Multiplizitäten, Rollennamen und Sichtbarkeiten der Operationen (+-#). Hilfsfunktionen müssen nicht öffentlich sein.

Klasse KinoKlasse KundeKlasse Platz
Kino()
anzahlFrei():GZ // Hilfsfunktion
reservieren(n:GZ)
reservieren(n:GZ,k:Text)
neuerKunde(k:Text)
findeKunde(k:Text):Kunde // Hilfsfunktion
ausgebenReservierungen()
storniereReservierungen(k:Text)
Kunde(k:Text)
getName():





Platz()
Platz(kID:Kunde)
getKunde():Kunde




Operationen
Lösungsvorschlag Klassendiagramm
Kinoreservierung Klassendiagramm
Kinoreservierung Klassendiagramm

Quellcode erstellen

Erstellen Sie den Quellcode für alle Klassen des Projekts. Code muss sauber formatiert und sinnvoll kommentiert sein. Fehler z.B. Stornieren von Reservierungen einer nicht Person sollten abgefangen werden.
Weitere Hinweise:

  • anzahlFrei():GZ gibt die Anzahl der freien Plätze zurück
  • reservieren(n:GZ) reserviert die erst besten freien Plätze, es wird nicht versucht eine Gruppe nebeneinander liegender Plätze zu bilden.
  • reservieren(n:GZ,k:Text) reserviert wie oben die erst besten freien Plätze für einen Kunden k. Tipp: Verwende Hilfsfunktion findeKunde(k:Text):Kunde.
    Wird ein Kunde nicht gefunden wird z.B. dies ausgegeben: „Kunde Eva nicht gefunden“
  • findeKunde(k:Text):Kunde falls kein Kunde mit dem Namen k existiert wird null zurück gegeben.
  • ausgebenReservierungen() gibt alle reservierten Plätze auf der Konsole aus Beispiele:
    Platz 10 ist reserviert
    Platz 11 ist reserviert von Lara
  • storniereReservierungen(k:Text) löscht alle Reservierungen des Kunden k.
Lösungsvorschlag Kunde
public class Kunde{
  private String name; //{nicht leer}
  public Kunde(String k){
    if(k==null || k.equals("")){
      k="No Name";
    }
    name=k;
  }
  public String getName(){
    return name;
  }
}
Lösungsvorschlag Platz
public class Platz{
  private Kunde kunde;
  public Platz(){}
  public Platz(Kunde kID){
    kunde=kID;
  }
  public Kunde getKunde(){
    return kunde;
  }
}
Lösungsvorschlag Kino
public class Kino{
  private Platz derPlatz[] = new Platz[30];
  private Kunde derKunde[] = new Kunde[20];
  public Kino(){ // Konstruktor zum Testen
     System.out.println("\f"); 
     neuerKunde("Hugo");
     neuerKunde("Lara");
     reservieren(4);
     ausgebenReservierungen();
     reservieren(5,"Hugo");
     reservieren(3,"Eva");
     reservieren(2);
     reservieren(4,"Lara");
     ausgebenReservierungen();
     storniereReservierungen("Hugo");
     ausgebenReservierungen();
     reservieren(20,"Lara");
     ausgebenReservierungen();
  }
  private int anzahlFrei(){ // ermittelt die Anzahl freier Plätze
    int i,sum=0;
    for(i=0;i<derPlatz.length;i++){
      if(derPlatz[i]==null)sum++;
    }
    return sum;
  }
  public void reservieren(int n){ // einfach die nächsten freien Plätze
    int i;
    if(n>anzahlFrei()){
      System.out.printf("Nur noch %d Plätze vorhanden\n",anzahlFrei());
    }
    else{
      i=0;
      while(n>0){
        if(derPlatz[i]==null){
          derPlatz[i]=new Platz();
          n--;
        }
        i++;
      }
    }
  }
  public void reservieren(int n,String k){
    int i;
    Kunde ku;
    if(n>anzahlFrei()){
      System.out.printf("Nur noch %d Plätze vorhanden\n",anzahlFrei());
      return;
    }
    ku = findeKunde(k);
    if(ku==null){
      System.out.printf("Kunde %s nicht gefunden\n",k);
      return;
    }
    i=0;
    while(n>0){
      if(derPlatz[i]==null){
        derPlatz[i]=new Platz(ku);
        n--;
      }
      i++;
    }
  }
  public void neuerKunde(String k){
    int i;
    for(i=0;i<derKunde.length;i++){
      if(derKunde[i]==null){
        derKunde[i] = new Kunde(k);
        break;
      }
    }
  }
  private Kunde findeKunde(String n){
    int i;  
    for(i=0;i<derKunde.length;i++){
      if(derKunde[i]!=null && derKunde[i].getName().equals(n)){
        return derKunde[i];
      }
    }  
    return null;    
  }
  public void ausgebenReservierungen(){
    int i;
    for(i=0;i<derPlatz.length;i++){
      if(derPlatz[i]!=null){
        if(derPlatz[i].getKunde()!=null){
          System.out.printf("Platz %2d ist reserviert von %s\n",i,derPlatz[i].getKunde().getName());
        }
        else{
          System.out.printf("Platz %2d ist reserviert\n",i); 
        }
      }
    }
  }
  public void storniereReservierungen(String k){ // alle Reservierungen von k entfernen
    int i;
    Kunde ku = findeKunde(k);
    if(ku==null){
      System.out.printf("Kunde %s ist nicht vorhanden\n",k);
      return;
    }
    for(i=0;i<derPlatz.length;i++){
      if(derPlatz[i]!=null && derPlatz[i].getKunde()==ku){
        derPlatz[i]=null;
      }
    }
  }
}

Struktogramme erstellen

Erstellen Sie Struktogramme für Kino.anzahlFrei():GZ, Kino.findeKunde(k:Text):Kunde und Kino.reservieren(n:GZ).

Lösungsvorschlag Kino.anzahlFrei():GZ
Struktogramm Kino.anzahlFrei()
Struktogramm Kino.anzahlFrei()
Lösungsvorschlag Kino.findeKunde(k:Text):Kunde
Struktogramm
Struktogramm Kino.findeKunde()
Lösungsvorschlag Kino.reservieren(n:GZ)
Struktogramm Kino.reservieren()
Struktogramm Kino.reservieren()

Ein Kommentar

Die Kommentare sind geschlossen.