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.
Klassendiagramm erstellen
Erstellen Sie ein Klassendiagramm mit Assoziationen, Multiplizitäten, Rollennamen und Sichtbarkeiten der Operationen (+-#). Hilfsfunktionen müssen nicht öffentlich sein.
Klasse Kino | Klasse Kunde | Klasse 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 |
Lösungsvorschlag 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).
Ein Kommentar
Die Kommentare sind geschlossen.