P. Pfahler, E. Stümpel

Programmieren in Java, Winter 1997/98

4. Übungsblatt, 17.11.1997

Abgabe: 24.11.1997, 18h an elfriede@uni-paderborn.de, Subject "Blatt4"


Aufgabe 6 (Modellierung/Implementierung)

Neueröffnung "Java Garden" -- American Style Restaurant

Das heißt: Kein Gast setzt sich einfach dahin, wo es ihm am besten gefällt, sondern die Sitzplätze werden beim Empfang zugeteilt.

Im "Java Garden" soll ein Computersystem die Zuteilung der Sitzplätze übernehmen. Das System trägt den Namen "Setzer". Dazu ist am Eingang ein Terminal installiert, das eintreffende Gruppen von Gästen begrüßt und sie nach dem Namen der Gruppe fragt. Der Name soll dazu dienen, die Gäste persönlicher anzusprechen oder z.B. individuelle Abrechnungen zu drucken (Beispiele "Fam. Becker", "Ulla und Karl", "Fachbereich 17").

Wir gehen davon aus, daß Gruppen von Gästen, die zusammen kommen auch zusammen an einem Tisch sitzen wollen und sich nicht auf mehrere Tische aufteilen lassen. Auch wollen wir berücksichtigen, daß eine Gruppe, wenn es möglich ist, einen Tisch für sich alleine haben möchte, sich aber, falls kein passender ganz freier Tisch mehr da ist zu einer anderen Gruppe dazusetzt.

Ihre Aufgabe ist die Simulation des "Setzer"-Systems im "Java Garden". Es geht also darum, das Restaurant und Gruppen von Gästen zu modellieren, das Platzverteilungsverfahren zu implementieren und das Kommen und Gehen zu Gästegruppen zu simulieren, um die Platzverteilung zu testen.

Um Ihnen den Entwurf zu erleichtern und um Ihre Lösung besser beurteilen und vergleichen zu können, schlagen wir die folgende Klassenstruktur vor. Der Vorschlag bedeutet, daß aufgeführten Attribute und Methoden auf jeden Fall vorhanden sein sollten, aber durchaus durch weitere Attribute und Methode ergänzt werden können und müssen.

Ein normaler Tisch

class Tisch 

Eigenschaften:
      int SitzPlätze              // Anzahl der Sitzplätze

Konstruktion:
      Tisch(int SitzPlätze)

Ein Tisch im Restaurant

class RestaurantTisch extends Tisch

Eigenschaften:
  int TischNummer                 // Nummer des Tisches
  int frei                        // Zahl der freien Plätze
  Gaeste Gaeste[]                 // Die Gästegruppen an diesem Tisch

Konstruktor:
  RestaurantTisch(int SitzPlätze, int TischNummer)

Ein Restaurant

class Restaurant

Eigenschaften:
  String name                     // Der Name
  RestaurantTisch Tische[]        // Die MaxTisch RestaurantTische

Konstruktor:
  Restaurant(String name, int MaxTisch)

Methode:
  void add(RestaurantTisch t)     // Einrichtung des Restaurants

Die Gäste

class Gaeste

Eigenschaften:
  String Name                     // Name der Gästegruppe
  int Anzahl                      // Personenanzahl

Konstruktor:
 Gaeste(String Name, int Anzahl)

Der "Setzer"

class Setzer

Eigenschaften:
 Restaurant r

Konstruktor:
  Setzer(Restaurant r)
  
Methoden:
  void kommen(Gaeste g)           // Eine Gruppe von Gaesten kommt
  void gehen(Gaeste g)            // Eine Gruppe von Gaesten geht
  void zeigeBelegung()            // Drucke Übersicht über die Belegung

Zur Simulation verwenden wir das folgende und ähnliche Hauptprogramme in der Klasse jg_simulation.java.

class jg_simulation
{
  public static void main(String argv[])
    { 
      // Erzeuge das Restaurant "JavaGarden"
      Restaurant JavaGarden = new Restaurant("Java Garden",12);

      // Einrichtung des Restaurants "JavaGarden"
      JavaGarden.add(new RestaurantTisch(4,1));
      JavaGarden.add(new RestaurantTisch(4,2));
      JavaGarden.add(new RestaurantTisch(2,3));
      JavaGarden.add(new RestaurantTisch(2,4));
      JavaGarden.add(new RestaurantTisch(6,5));

      // Unser "Setzer"-System "Robbi"
      Setzer Robbi = new Setzer(JavaGarden);

      // Ein paar Gästegruppen
      Gaeste beckers = new Gaeste("Fam. Becker", 4);
      Gaeste uuk = new Gaeste("Ulla und Karl", 2);
      Gaeste fb17 = new Gaeste("Fachbereich 17", 84);
      Gaeste schmidts = new Gaeste("Firma Schmidt", 4);

      // Arbeit für "Robbi"
      Robbi.kommen(beckers);
      Robbi.kommen(uuk);
      Robbi.kommen(fb17);
      Robbi.kommen(schmidts);
      Robbi.zeigeBelegung();
      Robbi.gehen(beckers);
      // usw.
    }
}
Bitte schreiben Sie für die Abgabe die vier Dateien einfach durch "///////////////////////////////... " getrennt hintereinander in ihre Abgabe-Mail.