You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
203 lines
6.5 KiB
Java
203 lines
6.5 KiB
Java
package com.company.lösungen;
|
|
|
|
public class onlineShop {
|
|
// Öffentliche Klasse zur Repräsentation eines Artikels
|
|
public class Article {
|
|
// Deklaration privater Variablen
|
|
private int articleNumber;
|
|
private float price;
|
|
|
|
// Konstruktor, der die Artikelnummer und den Preis
|
|
// erforderlich macht.
|
|
public Article(int articleNumber, float price) {
|
|
this.articleNumber = articleNumber;
|
|
this.price = price;
|
|
}
|
|
|
|
// Getter-Methode, die den Preis zurückliefert.
|
|
public float getPrice() {
|
|
return price;
|
|
}
|
|
}
|
|
|
|
// Öffentliche Klasse, die ein Buch repräsentiert.
|
|
// Die Klasse erbt von der Klasse Artikel
|
|
public class Book extends Article {
|
|
// Deklaration eigener privater Variablen
|
|
private String author;
|
|
private String title;
|
|
private int year;
|
|
|
|
// Der Mehrwertsteuersatz für Bücher (7 %) wird durch die
|
|
// statische Konstante VAT repräsentiert.
|
|
public static final float VAT = 0.07f;
|
|
|
|
// Öffentlicher Konstruktor mit der Vorschrift
|
|
// zum Anlegen eines Buchobjekts.
|
|
public Book(
|
|
int articleNumber,
|
|
float price,
|
|
String author,
|
|
String title,
|
|
int year
|
|
) {
|
|
// Aufruf des Konstruktors der Basisklasse Article
|
|
super(articleNumber, price);
|
|
|
|
// Zusätzlich werden die charakterisierenden
|
|
// Eigenschaften eines Buchs gesetzt.
|
|
this.author = author;
|
|
this.title = title;
|
|
this.year = year;
|
|
}
|
|
|
|
// Öffentliche Methode zur Berechnung des Bruttopreises
|
|
public float getPrice() {
|
|
// Rufe für Nettopreis die Methode in der Superklasse auf
|
|
// und addiere die für Bücher geltende Mehrwertsteuer
|
|
return round((super.getPrice() + super.getPrice() * Book.VAT) * 100) / 100.0;
|
|
}
|
|
|
|
// Öffentliche Methode, die einen geeigneten String generiert
|
|
// und zurückliefert.
|
|
public String toString() {
|
|
return "Buch - " + author + ": " + title + " (" + year + ")";
|
|
}
|
|
}
|
|
|
|
// Klasse, die eine DVD repräsentiert und von der Klasse
|
|
// Article ableitet.
|
|
class DVD extends Article {
|
|
// Deklaration privater Variablen, die spezifisch für eine
|
|
// DVD sind
|
|
private String name;
|
|
private String duration;
|
|
private int countryCode;
|
|
|
|
// Statische Konstante für Mehrwertsteuersatz für DVDs (19 %)
|
|
public static final float VAT = 0.19f;
|
|
|
|
// Öffentlicher Konstruktor der Klasse DVD. Zum Generieren eines
|
|
// Objekts der Klasse DVD werden die angegebenen Werte verlangt.
|
|
public DVD(
|
|
int articleNumber,
|
|
float price,
|
|
String name,
|
|
String duration,
|
|
int countryCode
|
|
) {
|
|
// Aufruf des Basisklassenkonstruktors
|
|
super(articleNumber, price);
|
|
|
|
// Zusätzliche Daten werden in den internen Variablen abgelegt.
|
|
this.name = name;
|
|
this.duration = duration;
|
|
this.countryCode = countryCode;
|
|
}
|
|
|
|
// Öffentliche Methode zur Berechnung des Bruttopreises
|
|
public float getPrice() {
|
|
// Rufe für Nettopreis die Methode in der Superklasse auf
|
|
// und addiere die für Bücher geltende Mehrwertsteuer
|
|
return round((super.getPrice() + super.getPrice() * DVD.VAT) * 100) / 100.0;
|
|
}
|
|
|
|
// Öffentliche Methode, die einen DVD-repräsentativen String
|
|
// zurückliefert.
|
|
public String toString() {
|
|
return "DVD - " + name;
|
|
}
|
|
}
|
|
|
|
// Klasse, die einen Warenkorb realisiert
|
|
public class ShoppingCart {
|
|
// Deklaration privater Variablen
|
|
private Article[] cart;
|
|
|
|
// Öffentlicher Konstruktor, der den internen
|
|
// Warenkorb initialisiert
|
|
public ShoppingCart() {
|
|
// Noch leerer Warenkorb
|
|
this.cart = new Article[0];
|
|
}
|
|
|
|
// Öffentliche Methode zum Hinzufügen eines Artikels
|
|
// zum Warenkorb. Der Artikel wird in Form eines
|
|
// Article-Objekts realisiert. Da sowohl Bücher als
|
|
// auch DVDs von der Klasse Article erben, sind beide
|
|
// Typen hier erlaubt und werden dafür auf die Basis-
|
|
// implementierung zurückgecastet.
|
|
public void addToCart(Article article) {
|
|
// Vergrößere Array um ein Element
|
|
Article[] cartNew = new Article[cart.length + 1];
|
|
|
|
// Kopiere alle Artikel rüber
|
|
for (int i = 0; i < cart.length; i = i + 1) {
|
|
cartNew[i] = cart[i];
|
|
}
|
|
|
|
// Setze neuen Artikel ans Ende der Liste
|
|
cartNew[cartNew.length - 1] = article;
|
|
|
|
// Übernehme neue Liste
|
|
cart = cartNew;
|
|
}
|
|
|
|
// Öffentliche Methode, die eine Rechnung auf der
|
|
// Konsole druckt
|
|
public void showBill() {
|
|
// Gesamtpreis
|
|
float sum = 0.0f;
|
|
|
|
// Jeden Artikel durchgehen
|
|
for (int i = 0; i < cart.length; i = i + 1) {
|
|
Article article = cart[i];
|
|
|
|
// Gebe Namen und Preis aus
|
|
System.out.println(article + "\t " + article.getPrice() + " Euro");
|
|
|
|
// Addiere zu Gesamtpreis
|
|
sum = sum + article.getPrice();
|
|
}
|
|
System.out.println("------------------------------------");
|
|
|
|
// Gebe Gesamtpreis aus
|
|
System.out.println("Gesamtpreis: " + str(sum) + " Euro");
|
|
}
|
|
}
|
|
|
|
// Startpunkt des Hauptprogramms
|
|
// Hier werden die implementierten Klassen zu Demonstrations- und
|
|
// Testzwecken instanziiert und verwendet.
|
|
public void setup() {
|
|
Book book = new Book(
|
|
122767676,
|
|
32.71f,
|
|
"Luigi Lo Iacono",
|
|
"WebSockets",
|
|
2015
|
|
);
|
|
|
|
DVD dvd1 = new DVD(
|
|
122767676,
|
|
14.95f,
|
|
"Spiel mir das Lied vom Tod",
|
|
"99:12",
|
|
1
|
|
);
|
|
DVD dvd2 = new DVD(
|
|
122767676,
|
|
8.40f,
|
|
"Casablanca, Classic Collection",
|
|
"99:12",
|
|
1
|
|
);
|
|
|
|
ShoppingCart wk = new ShoppingCart();
|
|
wk.addToCart(book);
|
|
wk.addToCart(dvd1);
|
|
wk.addToCart(dvd2);
|
|
wk.showBill();
|
|
}
|
|
}
|