```mermaid
classDiagram
    class Person
    <<abstract>> Person
    Person : - name
    Person : - adress
    class Tourguide
    Tourguide : - certifiedAdventurePackages <AdventurePackage*> vector
    class Participant
    class AdventurePackage
    AdventurePackage : - title
    AdventurePackage : - description
    class Accommodation
    Accommodation : - name
    Accommodation :  - adress
    class Trip
    Trip : - startingDate

    class Booking
    Booking : - payed
    Booking : - dateOfBooking

    Tourguide --|> Person
    Participant --|> Person
Trip "1..*" o-- "1..*" AdventurePackage
Trip "*" o-- "1" Accommodation
Participant "1..*" -- "1..*" Trip: Booking
Participant "1..*" .. Booking
Booking "1..*" .. "1..*" Trip
Tourguide "1" --o "*" Trip
Tourguide "1..*" -- "1..*" AdventurePackage
```


```mermaid
sequenceDiagram
    actor Tom as Tom : Human
    participant LibGui as libGUI
    participant Lib as Lib
    participant CTom as Tom : Customer
    activate LibGui

    Tom -) LibGui: name = "HP1"

    LibGui ->>+ Lib: getEbook("HP1")

    create participant EBook as HP1 : EBook
    Lib -->>+ EBook: <<create>> EBook("HP1", 3.99)
    note right of EBook: Im Konstruktor von EBook fehlt<br/>die Zuweisung des Preise.<br/>Hier ergänzt

    EBook --)- Lib: return
    Lib --)- LibGui: return

    LibGui --)+ Tom: return
    Tom -)- LibGui: clickBorrowButton

    LibGui ->>+ Lib: getEbook("HP1")
    Lib ->>+ CTom: borrow("HP1")
    CTom ->>+ EBook: getPrice()
    EBook --)- CTom: return 3.99

    CTom ->> CTom: charge(3.99)

    CTom --)- Lib: return

    Lib --)- LibGui: return

    LibGui ->>+ EBook: generateLink()
    EBook --)- LibGui: return link

    activate LibGui
    LibGui ->> LibGui: showLink()
    LibGui --)- LibGui: return

    LibGui --) Tom: return

    destroy EBook
    LibGui -x EBook: <<destroy>>

    destroy CTom
    LibGui -x CTom: <<destroy>>

    destroy Lib
    LibGui -x- Lib: <<destroy>>

    destroy LibGui
    Tom --x LibGui: <<destroy>>
```


```mermaid
classDiagram
    class Kreis{
        <<abstract>>
        - radius : ft
        + setRadius()
    }
    class Ellipse{
        - breite : ft
        - hoehe : ft
        + setBreite()
        + setHoehe()
    }
    
    Ellipse --|> Kreis
```

