|
|
|
|
|
Nun wird das eigentliche Verleihen und Zurückgeben der
Videos vorbereitet. Es ist notwendig, daß die Kunden
eindeutig identifiziert werden können. Dies geschieht
durch das Anmelden am Automaten mit einer
Kundennummer. In dieser Anwendung wird das
Identifizieren der Kunden vereinfacht. Jede (positive)
natürliche Zahl ist als Kundennummer
gültig. Außerdem wird angenommen, daß jeder
Kunde, der den Automaten bedient, rechtmäßiger
Kunde des "HOMECINEMA" ist - es
findet keine weitere Überprüfung statt.
|
Identifikation
|
|
Es wird die Klasse Customer benötigt. Eine
Instanz dieser Klasse repräsentiert einen angemeldeten
Kunden. Zuerst wird wieder das Grundgerüst der Klasse
implementiert. Die Variable customerID
enthält dabei die jeweilige Kundennummer:
|
Customer
|
|
 |  |  |
 |
public class Customer extends User
{
private String customerID;
public Customer(String customerID)
{
super(customerID);
this.customerID = customerID;
}
}
|  |
 |  |  |
|
|
|
Um die Klasse User nutzen zu
können muß das Paket users
importiert werden:
|
|
|
|
|
|
Da die Variable customerID als private
deklariert wurde, benötigt man eine Methode, die den Wert
dieser Variable zurückliefert:
|
|
|
 |  |  |
 |
public String getCustomerID()
{
return customerID;
}
|  |
 |  |  |
|
|
|
Jeder Kunde erhält ein Benutzerkonto, in dem die
ausgeliehenen Videos abgespeichert werden. Zurückgegebene
bzw. gekaufte Videos werden aus dem Benutzerkonto
entfernt. Durch einen StoringStock, der Attribut von
Customer ist, erfolgt die Realisierung. Zuerst
wird die Variable customerStoringStock definiert:
|
StoringStock
|
|
 |  |  |
 |
private StoringStock customerStoringStock;
|  |
 |  |  |
|
|
|
Im Konstruktor wird der StoringStock erzeugt,
der auf dem "Video-Catalog" basiert, und in
die globale Stockliste aufgenommen.
|
|
|
 |  |  |
 |
customerStoringStock =
new StoringStockImpl(
customerID,
(CatalogImpl)Shop.getTheShop().getCatalog("Video-Catalog"));
Shop.getTheShop().addStock(customerStoringStock);
|  |
 |  |  |
|
|
|
Für die Verwendung von StoringStock , StoringStockImpl und Shop werden folgende
import -Anweisungen benötigt:
|
|
|
 |  |  |
 |
import sale.*;
import data.*;
import data.ooimpl.*;
|  |
 |  |  |
|
|
|
Die Elemente des customerStoringStock sind
Instanzen der Klasse CassetteStoringStockItem ,
die nun implementiert wird. Neben dem Schlüsselwert und
dem Namen des entliehenen Videos wird das Datum der Ausleihe
vermerkt.
|
StoringStockItem
|
|
 |  |  |
 |
import sale.*;
import data.ooimpl.*;
import data.*;
public class CassetteStoringStockItem extends StockItemImpl
{
private Object date;
public CassetteStoringStockItem(String name, Object date)
{
super(name);
this.date = date;
}
}
|  |
 |  |  |
|
|
|
Zum Schluß wird die Methode getDate
geschrieben, die das Ausleihdatum des speziellen Videos
liefert.
|
|
|
 |  |  |
 |
public Object getDate()
{
return date;
}
|  |
 |  |  |
|
|
|
Es sind alle Voraussetzung erfüllt, um Videos über Methoden
zum customerStoringStock hinzufügen und entfernen zu
können. Die Klasse Customer wird wie folgt
ergänzt:
|
|
|
 |  |  |
 |
public void addVideoCassette(CassetteStoringStockItem cassette)
{
customerStoringStock.add(cassette, null);
}
public void removeVideoCassette(CassetteStoringStockItem cassette)
{
try {
customerStoringStock.remove(cassette, null);
}
catch (VetoException ve) {
}
}
|  |
 |  |  |
|
|
|
Die Methoden add und remove erwarten als zweiten Parameter wieder
einen DataBasket . Da ein DataBasket hier keine Rolle spielt, wird
null übergeben. Es ist zu beachten,
daß einige Kataloge in der Lage sind, das Verändern
bzw. Löschen eines CatalogItems zu
blockieren, indem sie eine VetoException werfen, z.B. wenn das CatalogItem gerade anderweitig benutzt wird.
Die Exception ist im Paket data.events
implementiert, das in die import -Anweisungen
aufgenommen werden muß:
|
VetoException
|
|
|
|
|
Eine Übersicht aller Videos, die ein Kunde ausgeliehen
hat, wird durch die Methode getStoringStock
geliefert.
|
|
|
 |  |  |
 |
public StoringStock getStoringStock()
{
return customerStoringStock;
}
|  |
 |  |  |
|
|
|
Die Verwaltung der Kunden erfolgt in der Klasse
VideoMachine . In einem HashSet
werden alle registrierten Kunden abgespeichert. Folgende
Variablendeklaration wird in die Klasse
VideoMachine eingefügt:
|
Kundenverwaltung
|
|
 |  |  |
 |
private static Set customerSet = new HashSet();
|  |
 |  |  |
|
|
|
Desweiteren werden Methoden benötigt, mit denen Kunden
in die Liste aufgenommen und entfernt werden können.
Die Klasse VideoMachine wird erweitert:
|
|
|
 |  |  |
 |
public static void addCustomer(Customer customer)
{
customerSet.add(customer);
}
public static void removeCustomer(Customer customer)
{
customerSet.remove(customer);
}
|  |
 |  |  |
|
|
|
Eine weitere Methode wird gebraucht, um eine Liste von
allen registrierten Kunden abzurufen:
|
|
|
 |  |  |
 |
public static Set getAllCustomer()
{
return customerSet.isEmpty() ? null : customerSet;
}
|  |
 |  |  |
|
|
|
Um die Kundenliste nach einem Kunden mit einer bestimmten ID
zu durchsuchen, wird die Klasse VideoMachine noch
einmal ergänzt:
|
|
|
 |  |  |
 |
public static Customer getCustomerByID(String customerID)
{
Iterator i = customerSet.iterator();
while (i.hasNext()) {
Customer customer = (Customer)i.next();
if (customer.getCustomerID().equals(customerID))
return customer;
}
return null;
}
|  |
 |  |  |
|
|
|
|
Hier der Quelltext der in diesem Kapitel geänderten Klassen:
|
|
|
|
|