MezData-Logo

Lösung 2020-So-FIA-A1

1.1 Klassendiagramm erweitern

Von VIPKunde geht ein Pfeil nach Loge mit Multiplizität 1 und Rollenname dieLoge.

Von FanKunde geht ein Pfeil nach Loge mit Multiplizität 0..1 und Rollenname dieLoge.

1.2 Quellcode Klassen

Quellcode [2020-So-FIA-A1/src/Kunde.java]
import java.time.LocalDate;
import java.util.ArrayList;
 
public abstract class Kunde {
    private String name;
    private ArrayList<Karte> dieKarten = new ArrayList<Karte>();
 
    public Kunde(String name){
       this.name=name;
    }
    public double berechneKartenPreis(){
        double preis =0;
        int i;
        for (i=0;i<dieKarten.size();i++){
            preis+=dieKarten.get(i).berechneKartenPreis();
        }
        return preis;
    }
    public void kaufeKarte(double grundPreis, LocalDate kaufTag, LocalDate spielTag){
        Karte k = new Karte(grundPreis,kaufTag,spielTag);
        dieKarten.add(k);
    }
}
 
Quellcode [2020-So-FIA-A1/src/VIPKunde.java]
import java.util.ArrayList;
 
public class VIPKunde extends Kunde {
    private String telefonnummer;
    private ArrayList<VIPKunde> VIPFreunde = new ArrayList<VIPKunde>();
 
    public VIPKunde(String name, String telefonN){
        super(name);
        telefonnummer=telefonN;
    }
    public VIPKunde(String name, String telefonN, ArrayList<VIPKunde>freunde) {
        super(name);
        telefonnummer=telefonN;
        VIPFreunde=freunde;
    }
    public double berechneKartenPreis(){
        double preis;
        preis = super.berechneKartenPreis();
        if(VIPFreunde.size()>1){
            preis = preis*0.95;
        }
        return preis;
    }
}
 
Quellcode [2020-So-FIA-A1/src/Karte.java]
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
 
//https://www.javabrahman.com/java-8/java-8-how-to-calculate-difference-between-two-java-time-localdate-instances/
public class Karte {
    private double grundPreis;
    private LocalDate spielTag;
    private LocalDate gekauftAm;
 
    public Karte(double grundPreis, LocalDate kaufTag, LocalDate spielTag){
        this.grundPreis=grundPreis;
        this.spielTag=spielTag;
        this.gekauftAm=kaufTag;
    }
    public double berechneKartenPreis(){
        long diff = ChronoUnit.DAYS.between(gekauftAm, spielTag);
        if (diff>30){
            return grundPreis*0.9;
        }
        return grundPreis;
    }
}
 

1.3 Testprogramm

Quellcode [2020-So-FIA-A1/src/Test.java]
import java.time.LocalDate;
import java.util.ArrayList;
 
public class Test {
    public static void main(String[] args) {
        VIPKunde freund1 = new VIPKunde("Toni","023 11038");
        VIPKunde freundin2 = new VIPKunde("Tonja","023 110382");
        ArrayList<VIPKunde> freunde = new ArrayList<VIPKunde>();
        freunde.add(freund1);
        freunde.add(freundin2);
        VIPKunde klopp = new VIPKunde("Adam Klopp","032 6289347",freunde);
        klopp.kaufeKarte(24.90, LocalDate.parse("2020-06-01"),LocalDate.parse("2020-07-04"));
        klopp.kaufeKarte(22.90,LocalDate.parse("2020-06-01"),LocalDate.parse("2020-06-06"));
        System.out.println("Gesamtpreis: "+klopp.berechneKartenPreis());
    }
}
 

Projekt mit IntelliJ: 2020-So-FIA-A1.zip