Compare commits

..

No commits in common. "main" and "Anmelden" have entirely different histories.

58 changed files with 781 additions and 2103 deletions

2
.gitignore vendored
View File

@ -179,5 +179,3 @@ fabric.properties
# Android studio 3.1+ serialized cache file
.idea/caches/build_file_checksums.ser
/.classpath
/.project

View File

@ -21,7 +21,7 @@ Anwendungsfälle:
2. Medien ausleihen:
• Akteur: Kunde , System
• Akteur: Kunde
• Ziel: Medien ausleihen und zurückgeben
• Schritte:
1. Der Kunde muss im System angemeldet sein.
@ -34,7 +34,7 @@ Anwendungsfälle:
3. Leihfrist verlängern:
• Akteur: Kunde , System
• Akteur: Kunde
• Ziel: Die Leihfrist für Medien verlängern
• Schritte:
1. Der Kunde muss im System angemeldet sein.
@ -63,7 +63,7 @@ Anwendungsfälle:
5. Überfällige Artikel und Gebühren berechnen:
• Akteur: Kunde , System
• Akteure: System
• Ziel: Verwaltung der überfälligen Gebühren
• Schritte:
1. Das System überprüft regelmäßig die Rückgabedaten der ausgeliehenen Artikel.
@ -81,7 +81,7 @@ Anwendungsfälle:
6. Durchsuchen der Medien:
• Akteur: Kunde , System
• Akteur: Kunde
• Ziel: Der Benutzer soll in der Lage sein, den Medienkatalog des Systems nach verschiedenen Kriterien zu durchsuchen, um spezifische Medien zu finden.
• Schritte:
1. Kunde öffnet die Suchfunktion des Medienkatalogs im System.
@ -98,7 +98,7 @@ Anwendungsfälle:
7. Hinzufügen von Medien:
• Akteur: Kunde(Mitarbeiter), System
• Akteur: Kunde(Mitarbeiter)
• Ziel: der Mitarbeiter haben die Fähigkeit Medien im System hinzuzufügen
• Schritte:
1. Der Mitarbeiter gibt die Details des Mediums im System ein.

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

View File

@ -1,165 +1,228 @@
<mxfile host="app.diagrams.net" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36" version="24.8.6">
<mxfile host="app.diagrams.net" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36" version="24.8.3">
<diagram name="Seite-1" id="xkmZ0K6vz5A5_BixXH1Q">
<mxGraphModel dx="1873" dy="1415" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<mxGraphModel dx="1406" dy="1132" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="l42d9aidsTNYsLyE-SN_-16" value="" style="shape=folder;fontStyle=1;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;html=1;whiteSpace=wrap;" vertex="1" parent="1">
<mxGeometry x="750" y="260" width="1580" height="1340" as="geometry" />
</mxCell>
<object label="" TUI="" id="ydUtLetK26WXyeJ3qCt--1">
<mxCell style="shape=folder;fontStyle=1;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;html=1;whiteSpace=wrap;points=[[0,0,0,-5,-13],[0,0,0,0,14],[0,0,0,0,78],[0,0,0,0,142],[0,0,0,0,206],[0,0,0,0,270],[0,0,0,20,0],[0,0,0,40,0],[0,0,0,160,14],[0,0,0,280,14],[0,0,0,280,78],[0,0,0,280,142],[0,0,0,280,206],[0,0,0,280,270],[0,0.5,0,0,0],[0.04,0.02,0,0,0],[0.06,0.04,0,0,0],[0.09,0.03,0,0,0],[0.13,0.04,0,0,0],[0.25,1,0,0,0],[0.5,1,0,0,0],[0.75,1,0,0,0]];" parent="1" vertex="1">
<mxGeometry x="90" y="280" width="300" height="220" as="geometry" />
<mxCell style="shape=folder;fontStyle=1;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;html=1;whiteSpace=wrap;points=[[0,0,0,-5,-13],[0,0,0,0,14],[0,0,0,0,78],[0,0,0,0,142],[0,0,0,0,206],[0,0,0,0,270],[0,0,0,20,0],[0,0,0,40,0],[0,0,0,160,14],[0,0,0,280,14],[0,0,0,280,78],[0,0,0,280,142],[0,0,0,280,206],[0,0,0,280,270],[0,0.5,0,0,0],[0.04,0.02,0,0,0],[0.06,0.04,0,0,0],[0.09,0.03,0,0,0],[0.13,0.04,0,0,0],[0.25,1,0,0,0],[0.5,1,0,0,0],[0.75,1,0,0,0]];" vertex="1" parent="1">
<mxGeometry x="90" y="280" width="300" height="650" as="geometry" />
</mxCell>
</object>
<mxCell id="bG3rtPKbTOfA4ERHpklN-3" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="ydUtLetK26WXyeJ3qCt--3" target="ydUtLetK26WXyeJ3qCt--5" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--3" value="Actor" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;" parent="1" vertex="1">
<mxGeometry x="40" y="340" width="30" height="60" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--5" value="Bib Ui" style="html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="160" y="390" width="110" height="50" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--7" value="package" style="shape=folder;fontStyle=1;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="140" y="600" width="240" height="170" as="geometry" />
</mxCell>
<mxCell id="bG3rtPKbTOfA4ERHpklN-4" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="ydUtLetK26WXyeJ3qCt--9" target="ydUtLetK26WXyeJ3qCt--5" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--9" value="Main" style="html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="200" y="660" width="110" height="50" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--10" value="" style="verticalLabelPosition=bottom;verticalAlign=top;html=1;shape=mxgraph.flowchart.on-page_reference;" parent="1" vertex="1">
<mxGeometry x="580" y="300" width="60" height="60" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--11" value="" style="verticalLabelPosition=bottom;verticalAlign=top;html=1;shape=mxgraph.flowchart.on-page_reference;" parent="1" vertex="1">
<mxGeometry x="580" y="370" width="60" height="60" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--12" value="" style="verticalLabelPosition=bottom;verticalAlign=top;html=1;shape=mxgraph.flowchart.on-page_reference;" parent="1" vertex="1">
<mxGeometry x="580" y="440" width="60" height="60" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--13" value="" style="verticalLabelPosition=bottom;verticalAlign=top;html=1;shape=mxgraph.flowchart.on-page_reference;" parent="1" vertex="1">
<mxGeometry x="580" y="520" width="60" height="60" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--14" value="" style="verticalLabelPosition=bottom;verticalAlign=top;html=1;shape=mxgraph.flowchart.on-page_reference;" parent="1" vertex="1">
<mxGeometry x="580" y="600" width="60" height="60" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--25" value="&lt;font style=&quot;font-size: 11px;&quot;&gt;TUI&amp;nbsp;&lt;/font&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="80" y="280" width="70" height="20" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--26" value="&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="50" y="280" width="70" height="20" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--27" value="&lt;font style=&quot;font-size: 11px;&quot;&gt;Main&lt;/font&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="130" y="600" width="70" height="20" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--28" value="&lt;font style=&quot;font-size: 11px;&quot;&gt;domain&lt;/font&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="767" y="260" width="70" height="20" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--29" value="registrieren" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="450" y="300" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--32" value="Medium&amp;nbsp;leihfrist verlängern" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="430" y="518" width="100" height="30" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--33" value="Medium zurückgeben" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="440" y="590" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--34" value="Gebühren bezahlen" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="440" y="690" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--38" value="" style="verticalLabelPosition=bottom;verticalAlign=top;html=1;shape=mxgraph.flowchart.on-page_reference;" parent="1" vertex="1">
<mxGeometry x="580" y="690" width="60" height="60" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--41" value="&lt;i&gt;Medium&lt;/i&gt;" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=none;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="1700" y="640" width="180" height="110" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--42" value="- ID: String&lt;div&gt;- erscheinungsjahr: int&lt;/div&gt;&lt;div&gt;- title: String&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="ydUtLetK26WXyeJ3qCt--41" vertex="1">
<mxGeometry y="26" width="180" height="84" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--79" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1560" y="864" as="sourcePoint" />
<mxPoint x="1560" y="814" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--80" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1560" y="814" as="sourcePoint" />
<mxPoint x="2250" y="814" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--81" value="" style="endArrow=none;html=1;rounded=0;exitX=0.584;exitY=0.003;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="2251.7599999999998" y="864.156" as="sourcePoint" />
<mxPoint x="2250" y="814" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--82" value="Extends" style="endArrow=block;endSize=16;endFill=0;html=1;rounded=0;entryX=0.401;entryY=1.012;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" target="ydUtLetK26WXyeJ3qCt--42" edge="1">
<mxGeometry width="160" relative="1" as="geometry">
<mxPoint x="1770" y="814" as="sourcePoint" />
<mxPoint x="1771.8199999999997" y="753.8760000000002" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--84" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1720" y="864" as="sourcePoint" />
<mxPoint x="1720" y="814" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--86" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1909.45" y="864" as="sourcePoint" />
<mxPoint x="1909.45" y="814" as="targetPoint" />
<mxCell id="ydUtLetK26WXyeJ3qCt--224" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;fontFamily=Helvetica;fontSize=12;fontColor=default;fontStyle=1;" edge="1" parent="1" source="ydUtLetK26WXyeJ3qCt--3" target="ydUtLetK26WXyeJ3qCt--5">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="1909.45" y="834" />
<mxPoint x="55" y="310" />
<mxPoint x="325" y="310" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--87" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1">
<mxCell id="ydUtLetK26WXyeJ3qCt--3" value="Actor" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;" vertex="1" parent="1">
<mxGeometry x="40" y="340" width="30" height="60" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--215" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.75;entryDx=0;entryDy=0;fontFamily=Helvetica;fontSize=12;fontColor=default;fontStyle=1;" edge="1" parent="1" source="ydUtLetK26WXyeJ3qCt--5" target="ydUtLetK26WXyeJ3qCt--207">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--216" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.75;entryDx=0;entryDy=0;fontFamily=Helvetica;fontSize=12;fontColor=default;fontStyle=1;" edge="1" parent="1" source="ydUtLetK26WXyeJ3qCt--5" target="ydUtLetK26WXyeJ3qCt--208">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--217" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;fontFamily=Helvetica;fontSize=12;fontColor=default;fontStyle=1;" edge="1" parent="1" source="ydUtLetK26WXyeJ3qCt--5" target="ydUtLetK26WXyeJ3qCt--209">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--218" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;fontFamily=Helvetica;fontSize=12;fontColor=default;fontStyle=1;" edge="1" parent="1" source="ydUtLetK26WXyeJ3qCt--5" target="ydUtLetK26WXyeJ3qCt--210">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="245" y="428" />
<mxPoint x="245" y="525" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--219" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.75;entryDx=0;entryDy=0;fontFamily=Helvetica;fontSize=12;fontColor=default;fontStyle=1;" edge="1" parent="1" source="ydUtLetK26WXyeJ3qCt--5" target="ydUtLetK26WXyeJ3qCt--211">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="245" y="428" />
<mxPoint x="245" y="590" />
<mxPoint x="220" y="590" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--220" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;fontFamily=Helvetica;fontSize=12;fontColor=default;fontStyle=1;" edge="1" parent="1" source="ydUtLetK26WXyeJ3qCt--5" target="ydUtLetK26WXyeJ3qCt--212">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--5" value="Bib Ui" style="html=1;whiteSpace=wrap;" vertex="1" parent="1">
<mxGeometry x="270" y="403" width="110" height="50" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--6" value="" style="shape=folder;fontStyle=1;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;html=1;whiteSpace=wrap;" vertex="1" parent="1">
<mxGeometry x="760" y="270" width="1110" height="770" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--7" value="package" style="shape=folder;fontStyle=1;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;html=1;whiteSpace=wrap;" vertex="1" parent="1">
<mxGeometry x="95" y="970" width="240" height="170" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--227" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.75;entryY=1;entryDx=0;entryDy=0;fontFamily=Helvetica;fontSize=12;fontColor=default;fontStyle=1;" edge="1" parent="1" source="ydUtLetK26WXyeJ3qCt--9" target="ydUtLetK26WXyeJ3qCt--5">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="350" y="1055" />
<mxPoint x="350" y="742" />
<mxPoint x="352" y="742" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--9" value="Main" style="html=1;whiteSpace=wrap;" vertex="1" parent="1">
<mxGeometry x="160" y="1030" width="110" height="50" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--10" value="" style="verticalLabelPosition=bottom;verticalAlign=top;html=1;shape=mxgraph.flowchart.on-page_reference;" vertex="1" parent="1">
<mxGeometry x="580" y="300" width="60" height="60" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--11" value="" style="verticalLabelPosition=bottom;verticalAlign=top;html=1;shape=mxgraph.flowchart.on-page_reference;" vertex="1" parent="1">
<mxGeometry x="580" y="370" width="60" height="60" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--12" value="" style="verticalLabelPosition=bottom;verticalAlign=top;html=1;shape=mxgraph.flowchart.on-page_reference;" vertex="1" parent="1">
<mxGeometry x="580" y="440" width="60" height="60" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--13" value="" style="verticalLabelPosition=bottom;verticalAlign=top;html=1;shape=mxgraph.flowchart.on-page_reference;" vertex="1" parent="1">
<mxGeometry x="580" y="520" width="60" height="60" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--14" value="" style="verticalLabelPosition=bottom;verticalAlign=top;html=1;shape=mxgraph.flowchart.on-page_reference;" vertex="1" parent="1">
<mxGeometry x="580" y="600" width="60" height="60" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--25" value="&lt;font style=&quot;font-size: 11px;&quot;&gt;TUI&amp;nbsp;&lt;/font&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="90" y="280" width="70" height="20" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--26" value="&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="50" y="280" width="70" height="20" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--27" value="&lt;font style=&quot;font-size: 11px;&quot;&gt;Main&lt;/font&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="90" y="970" width="70" height="20" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--28" value="&lt;font style=&quot;font-size: 11px;&quot;&gt;domain&lt;/font&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="757" y="270" width="70" height="20" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--29" value="registrieren" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="450" y="300" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--30" value="Medium ausleihen" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="440" y="370" width="100" height="30" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--32" value="Medium&amp;nbsp;leihfrist verlängern" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="430" y="440" width="100" height="30" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--33" value="Medium zurückgeben" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="450" y="512" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--34" value="Gebühren bezahlen" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="450" y="590" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--36" value="Medium druchsuchen" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="460" y="690" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--38" value="" style="verticalLabelPosition=bottom;verticalAlign=top;html=1;shape=mxgraph.flowchart.on-page_reference;" vertex="1" parent="1">
<mxGeometry x="580" y="690" width="60" height="60" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--41" value="&lt;i&gt;Medium&lt;/i&gt;" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=none;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="1100" y="720" width="180" height="130" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--42" value="- KennungNummer: int" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" vertex="1" parent="ydUtLetK26WXyeJ3qCt--41">
<mxGeometry y="26" width="180" height="26" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--43" value="- title: String" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" vertex="1" parent="ydUtLetK26WXyeJ3qCt--41">
<mxGeometry y="52" width="180" height="26" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--44" value="- erscheinungsjahr: date&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;- autor: String&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: rgba(0, 0, 0, 0); font-family: monospace; font-size: 0px; text-wrap-mode: nowrap;&quot;&gt;- %3CmxGraphModel%3E%3Croot%3E%3CmxCell%20id%3D%220%22%2F%3E%3CmxCell%20id%3D%221%22%20parent%3D%220%22%2F%3E%3CmxCell%20id%3D%222%22%20value%3D%22-%20title%3A%20String%22%20style%3D%22text%3BstrokeColor%3Dnone%3BfillColor%3Dnone%3Balign%3Dleft%3BverticalAlign%3Dtop%3BspacingLeft%3D4%3BspacingRight%3D4%3Boverflow%3Dhidden%3Brotatable%3D0%3Bpoints%3D%5B%5B0%2C0.5%5D%2C%5B1%2C0.5%5D%5D%3BportConstraint%3Deastwest%3BwhiteSpace%3Dwrap%3Bhtml%3D1%3B%22%20vertex%3D%221%22%20parent%3D%221%22%3E%3CmxGeometry%20x%3D%221100%22%20y%3D%22658%22%20width%3D%22180%22%20height%3D%2226%22%20as%3D%22geometry%22%2F%3E%3C%2FmxCell%3E%3C%2Froot%3E%3C%2FmxGraphModel%3E&lt;/span&gt;&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" vertex="1" parent="ydUtLetK26WXyeJ3qCt--41">
<mxGeometry y="78" width="180" height="52" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--46" value="Buch" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=none;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="890" y="954" width="140" height="52" as="geometry">
<mxRectangle x="890" y="954" width="70" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--50" value="Cd" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=none;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="1070" y="954" width="140" height="52" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--54" value="Dvd" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=none;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="1241" y="954" width="140" height="52" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--58" value="Brettspiel" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=none;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="1410" y="954" width="140" height="52" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--62" value="Videospiel" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=none;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="1570" y="954" width="140" height="52" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--79" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="2070" y="864" as="sourcePoint" />
<mxPoint x="2070" y="814" as="targetPoint" />
<mxPoint x="960" y="954" as="sourcePoint" />
<mxPoint x="960" y="904" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--88" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1">
<mxCell id="ydUtLetK26WXyeJ3qCt--80" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="2250" y="864" as="sourcePoint" />
<mxPoint x="2250" y="814" as="targetPoint" />
<mxPoint x="960" y="904" as="sourcePoint" />
<mxPoint x="1650" y="904" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--131" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" target="ydUtLetK26WXyeJ3qCt--10" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="790" y="364" as="sourcePoint" />
<mxCell id="ydUtLetK26WXyeJ3qCt--81" value="" style="endArrow=none;html=1;rounded=0;exitX=0.584;exitY=0.003;exitDx=0;exitDy=0;exitPerimeter=0;" edge="1" parent="1" source="ydUtLetK26WXyeJ3qCt--62">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1650" y="944" as="sourcePoint" />
<mxPoint x="1650" y="904" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--132" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.985;entryY=0.664;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" target="ydUtLetK26WXyeJ3qCt--11" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="790" y="364" as="sourcePoint" />
<mxCell id="ydUtLetK26WXyeJ3qCt--82" value="Extends" style="endArrow=block;endSize=16;endFill=0;html=1;rounded=0;entryX=0.399;entryY=0.998;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" target="ydUtLetK26WXyeJ3qCt--44">
<mxGeometry width="160" relative="1" as="geometry">
<mxPoint x="1170" y="904" as="sourcePoint" />
<mxPoint x="1330" y="904" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--133" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" target="ydUtLetK26WXyeJ3qCt--12" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="790" y="364" as="sourcePoint" />
<mxCell id="ydUtLetK26WXyeJ3qCt--84" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1120" y="954" as="sourcePoint" />
<mxPoint x="1120" y="904" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--134" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" target="ydUtLetK26WXyeJ3qCt--13" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="790" y="364" as="sourcePoint" />
<mxCell id="ydUtLetK26WXyeJ3qCt--86" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1309.45" y="954" as="sourcePoint" />
<mxPoint x="1309.45" y="904" as="targetPoint" />
<Array as="points">
<mxPoint x="1309.45" y="924" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--135" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" target="ydUtLetK26WXyeJ3qCt--14" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="790" y="364" as="sourcePoint" />
<mxCell id="ydUtLetK26WXyeJ3qCt--87" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1470" y="954" as="sourcePoint" />
<mxPoint x="1470" y="904" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--136" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" target="ydUtLetK26WXyeJ3qCt--38" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="790" y="364" as="sourcePoint" />
<mxCell id="ydUtLetK26WXyeJ3qCt--88" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1650" y="954" as="sourcePoint" />
<mxPoint x="1650" y="904" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--137" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="ydUtLetK26WXyeJ3qCt--5" target="ydUtLetK26WXyeJ3qCt--10" edge="1">
<mxCell id="ydUtLetK26WXyeJ3qCt--194" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;fontFamily=Helvetica;fontSize=12;fontColor=default;fontStyle=1;" edge="1" parent="1" source="ydUtLetK26WXyeJ3qCt--117" target="ydUtLetK26WXyeJ3qCt--159">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--117" value="&lt;font style=&quot;font-size: 12px;&quot;&gt;BibSystem&lt;/font&gt;" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=none;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="790" y="338" width="180" height="52" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--131" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="ydUtLetK26WXyeJ3qCt--117" target="ydUtLetK26WXyeJ3qCt--10">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--132" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.985;entryY=0.664;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="ydUtLetK26WXyeJ3qCt--117" target="ydUtLetK26WXyeJ3qCt--11">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--133" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="ydUtLetK26WXyeJ3qCt--117" target="ydUtLetK26WXyeJ3qCt--12">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--134" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="ydUtLetK26WXyeJ3qCt--117" target="ydUtLetK26WXyeJ3qCt--13">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--135" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="ydUtLetK26WXyeJ3qCt--117" target="ydUtLetK26WXyeJ3qCt--14">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--136" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="ydUtLetK26WXyeJ3qCt--117" target="ydUtLetK26WXyeJ3qCt--38">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--137" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="ydUtLetK26WXyeJ3qCt--5" target="ydUtLetK26WXyeJ3qCt--10">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="430" y="415" />
@ -167,7 +230,7 @@
</Array>
</mxGeometry>
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--138" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=-0.027;entryY=0.593;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="ydUtLetK26WXyeJ3qCt--5" target="ydUtLetK26WXyeJ3qCt--11" edge="1">
<mxCell id="ydUtLetK26WXyeJ3qCt--138" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=-0.027;entryY=0.593;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="ydUtLetK26WXyeJ3qCt--5" target="ydUtLetK26WXyeJ3qCt--11">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="430" y="415" />
@ -175,7 +238,7 @@
</Array>
</mxGeometry>
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--139" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=-0.027;entryY=0.643;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="ydUtLetK26WXyeJ3qCt--5" target="ydUtLetK26WXyeJ3qCt--12" edge="1">
<mxCell id="ydUtLetK26WXyeJ3qCt--139" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=-0.027;entryY=0.643;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="ydUtLetK26WXyeJ3qCt--5" target="ydUtLetK26WXyeJ3qCt--12">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="430" y="415" />
@ -183,7 +246,7 @@
</Array>
</mxGeometry>
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--141" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="ydUtLetK26WXyeJ3qCt--5" target="ydUtLetK26WXyeJ3qCt--13" edge="1">
<mxCell id="ydUtLetK26WXyeJ3qCt--141" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="ydUtLetK26WXyeJ3qCt--5" target="ydUtLetK26WXyeJ3qCt--13">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="430" y="415" />
@ -191,7 +254,7 @@
</Array>
</mxGeometry>
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--142" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="ydUtLetK26WXyeJ3qCt--5" target="ydUtLetK26WXyeJ3qCt--14" edge="1">
<mxCell id="ydUtLetK26WXyeJ3qCt--142" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="ydUtLetK26WXyeJ3qCt--5" target="ydUtLetK26WXyeJ3qCt--14">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="430" y="415" />
@ -199,7 +262,7 @@
</Array>
</mxGeometry>
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--143" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=-0.01;entryY=0.593;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="ydUtLetK26WXyeJ3qCt--5" target="ydUtLetK26WXyeJ3qCt--38" edge="1">
<mxCell id="ydUtLetK26WXyeJ3qCt--143" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=-0.01;entryY=0.593;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="ydUtLetK26WXyeJ3qCt--5" target="ydUtLetK26WXyeJ3qCt--38">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="430" y="415" />
@ -207,282 +270,131 @@
</Array>
</mxGeometry>
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--158" value="Ausleihe" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="850" y="1090" width="310" height="118" as="geometry" />
<mxCell id="ydUtLetK26WXyeJ3qCt--158" value="Ausleihe" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="1000" y="403" width="160" height="114" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--159" value="- ausleihBeginn: LocalDate&lt;div&gt;- ausleihEnde: LocalDate&amp;nbsp;&lt;/div&gt;&lt;div&gt;- medium: Mediumverwalter&lt;/div&gt;&lt;div&gt;- benutzer: Benutzer&lt;/div&gt;&lt;div&gt;- verlängerungen: int&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="ydUtLetK26WXyeJ3qCt--158" vertex="1">
<mxGeometry y="26" width="310" height="84" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--160" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" parent="ydUtLetK26WXyeJ3qCt--158" vertex="1">
<mxGeometry y="110" width="310" height="8" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--162" value="Ausweis" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="1220" y="1300" width="160" height="90" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--163" value="- kartenNummer: String&lt;div&gt;- &lt;u&gt;generiereNummer &lt;/u&gt;= 1000&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="ydUtLetK26WXyeJ3qCt--162" vertex="1">
<mxCell id="ydUtLetK26WXyeJ3qCt--159" value="- type: String&lt;div&gt;- availability: boolean&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" vertex="1" parent="ydUtLetK26WXyeJ3qCt--158">
<mxGeometry y="26" width="160" height="54" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--164" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" parent="ydUtLetK26WXyeJ3qCt--162" vertex="1">
<mxCell id="ydUtLetK26WXyeJ3qCt--160" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" vertex="1" parent="ydUtLetK26WXyeJ3qCt--158">
<mxGeometry y="80" width="160" height="8" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--165" value="&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="ydUtLetK26WXyeJ3qCt--162" vertex="1">
<mxGeometry y="88" width="160" height="2" as="geometry" />
<mxCell id="ydUtLetK26WXyeJ3qCt--161" value="+ method(type): type" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" vertex="1" parent="ydUtLetK26WXyeJ3qCt--158">
<mxGeometry y="88" width="160" height="26" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-15" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="ydUtLetK26WXyeJ3qCt--175" target="ydUtLetK26WXyeJ3qCt--162" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="1300" y="1250" />
</Array>
</mxGeometry>
<mxCell id="ydUtLetK26WXyeJ3qCt--162" value="Ausweis" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="1010" y="556" width="160" height="114" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--175" value="&lt;i&gt;Benutzer&lt;/i&gt;" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=37;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;strokeColor=default;spacingTop=10;fontFamily=Helvetica;fontSize=12;fontColor=default;fillColor=default;" parent="1" vertex="1">
<mxGeometry x="1470" y="1010" width="260" height="320" as="geometry" />
<mxCell id="ydUtLetK26WXyeJ3qCt--163" value="- kartenNummer: int&lt;div&gt;&lt;br&gt;&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" vertex="1" parent="ydUtLetK26WXyeJ3qCt--162">
<mxGeometry y="26" width="160" height="54" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--176" value="&lt;span style=&quot;font-weight: normal;&quot;&gt;- bibAusweis: Ausweis&lt;/span&gt;&lt;div style=&quot;line-height: 140%;&quot;&gt;&lt;span style=&quot;background-color: initial; font-weight: normal;&quot;&gt;- name: String&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;line-height: 140%;&quot;&gt;&lt;span style=&quot;background-color: initial; font-weight: normal;&quot;&gt;- alter: int&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;line-height: 140%;&quot;&gt;&lt;span style=&quot;background-color: initial; font-weight: normal;&quot;&gt;- istStudent: boolean&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;line-height: 160%;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;-&amp;nbsp;&lt;span style=&quot;background-color: initial;&quot;&gt;ausgeliehenenMedien[]: Ausleihe&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;- angemeldet: boolean&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;- gebühren: double&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;- anmeldeBeginn: LocalDate&lt;/span&gt;&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;fontFamily=Helvetica;fontSize=12;fontColor=default;fontStyle=1;" parent="ydUtLetK26WXyeJ3qCt--175" vertex="1">
<mxCell id="ydUtLetK26WXyeJ3qCt--164" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" vertex="1" parent="ydUtLetK26WXyeJ3qCt--162">
<mxGeometry y="80" width="160" height="8" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--165" value="+ method(type): type" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" vertex="1" parent="ydUtLetK26WXyeJ3qCt--162">
<mxGeometry y="88" width="160" height="26" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--190" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;fontFamily=Helvetica;fontSize=12;fontColor=default;fontStyle=1;" edge="1" parent="1" source="ydUtLetK26WXyeJ3qCt--175" target="ydUtLetK26WXyeJ3qCt--163">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--175" value="&lt;i&gt;Benutzer&lt;/i&gt;" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=37;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;strokeColor=default;spacingTop=10;fontFamily=Helvetica;fontSize=12;fontColor=default;fillColor=default;" vertex="1" parent="1">
<mxGeometry x="1381" y="310" width="260" height="320" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--176" value="&lt;span style=&quot;font-weight: normal;&quot;&gt;- bibAusweis: Ausweis&lt;/span&gt;&lt;div style=&quot;line-height: 140%;&quot;&gt;&lt;span style=&quot;background-color: initial; font-weight: normal;&quot;&gt;- name: String&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;line-height: 140%;&quot;&gt;&lt;span style=&quot;background-color: initial; font-weight: normal;&quot;&gt;- alter: int&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;line-height: 140%;&quot;&gt;&lt;span style=&quot;background-color: initial; font-weight: normal;&quot;&gt;- istStudent: boolean&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;line-height: 160%;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;-&amp;nbsp;&lt;span style=&quot;background-color: initial;&quot;&gt;ausgeliehenenMedien[]: Medium&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;fontFamily=Helvetica;fontSize=12;fontColor=default;fontStyle=1;" vertex="1" parent="ydUtLetK26WXyeJ3qCt--175">
<mxGeometry y="37" width="260" height="163" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--177" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;fontFamily=Helvetica;fontSize=12;fontColor=default;fontStyle=1;" parent="ydUtLetK26WXyeJ3qCt--175" vertex="1">
<mxCell id="ydUtLetK26WXyeJ3qCt--177" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;fontFamily=Helvetica;fontSize=12;fontColor=default;fontStyle=1;" vertex="1" parent="ydUtLetK26WXyeJ3qCt--175">
<mxGeometry y="200" width="260" height="8" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--178" value="&lt;span style=&quot;font-weight: normal;&quot;&gt;+ anmelden(): void&lt;/span&gt;&lt;div&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;+ abmelden: void&lt;br&gt;&lt;/span&gt;&lt;div&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;+ ausleihen(medium: Ausleihe): void&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-weight: normal; background-color: initial;&quot;&gt;&lt;i&gt;+ jahresgebühren(): double&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;+ zurückgeben(medium: Ausleihe): void&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;fontFamily=Helvetica;fontSize=12;fontColor=default;fontStyle=1;" parent="ydUtLetK26WXyeJ3qCt--175" vertex="1">
<mxCell id="ydUtLetK26WXyeJ3qCt--178" value="&lt;span style=&quot;font-weight: normal;&quot;&gt;+ anmelden(int kartenNummer): boolean&lt;/span&gt;&lt;div&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;+ ausleihe()&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;+ anzeigen()&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;+ verlängren()&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;+ zurückgeben()&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;+ gebührenbezahlen(int betrag): boolean&lt;/span&gt;&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;fontFamily=Helvetica;fontSize=12;fontColor=default;fontStyle=1;" vertex="1" parent="ydUtLetK26WXyeJ3qCt--175">
<mxGeometry y="208" width="260" height="112" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--203" value="" style="endArrow=none;html=1;rounded=0;fontFamily=Helvetica;fontSize=12;fontColor=default;fontStyle=1;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1429" y="1450" as="sourcePoint" />
<mxPoint x="1429" y="1400" as="targetPoint" />
<Array as="points">
<mxPoint x="1430" y="1430" />
</Array>
</mxGeometry>
<mxCell id="ydUtLetK26WXyeJ3qCt--179" value="Kunde" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=36;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;strokeColor=default;spacingTop=10;fontFamily=Helvetica;fontSize=12;fontColor=default;fillColor=default;" vertex="1" parent="1">
<mxGeometry x="1320" y="750" width="160" height="96" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--204" value="" style="endArrow=none;html=1;rounded=0;fontFamily=Helvetica;fontSize=12;fontColor=default;fontStyle=1;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1629" y="1450" as="sourcePoint" />
<mxPoint x="1629" y="1400" as="targetPoint" />
</mxGeometry>
<mxCell id="ydUtLetK26WXyeJ3qCt--180" value="&lt;span style=&quot;font-weight: normal;&quot;&gt;+ field: type&lt;/span&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;fontFamily=Helvetica;fontSize=12;fontColor=default;fontStyle=1;" vertex="1" parent="ydUtLetK26WXyeJ3qCt--179">
<mxGeometry y="36" width="160" height="26" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--205" value="" style="endArrow=none;html=1;rounded=0;fontFamily=Helvetica;fontSize=12;fontColor=default;fontStyle=1;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1429" y="1400" as="sourcePoint" />
<mxPoint x="1629" y="1400" as="targetPoint" />
</mxGeometry>
<mxCell id="ydUtLetK26WXyeJ3qCt--181" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;fontFamily=Helvetica;fontSize=12;fontColor=default;fontStyle=1;" vertex="1" parent="ydUtLetK26WXyeJ3qCt--179">
<mxGeometry y="62" width="160" height="8" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--206" value="Extends" style="endArrow=block;endSize=16;endFill=0;html=1;rounded=0;fontFamily=Helvetica;fontSize=12;fontColor=default;fontStyle=1;entryX=0.344;entryY=0.997;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" target="ydUtLetK26WXyeJ3qCt--178" edge="1">
<mxGeometry width="160" relative="1" as="geometry">
<mxPoint x="1559" y="1400" as="sourcePoint" />
<mxPoint x="1540" y="1380" as="targetPoint" />
</mxGeometry>
<mxCell id="ydUtLetK26WXyeJ3qCt--182" value="&lt;span style=&quot;font-weight: normal;&quot;&gt;+ method(type): type&lt;/span&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;fontFamily=Helvetica;fontSize=12;fontColor=default;fontStyle=1;" vertex="1" parent="ydUtLetK26WXyeJ3qCt--179">
<mxGeometry y="70" width="160" height="26" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-2" value="BibSystem" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="790" y="330" width="490" height="280" as="geometry" />
<mxCell id="ydUtLetK26WXyeJ3qCt--183" value="Mitarbeiter" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=36;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;strokeColor=default;spacingTop=10;fontFamily=Helvetica;fontSize=12;fontColor=default;fillColor=default;" vertex="1" parent="1">
<mxGeometry x="1519" y="750" width="160" height="110" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-3" value="&lt;div style=&quot;font-size: 11px;&quot;&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;&lt;font style=&quot;font-size: 11px;&quot;&gt;- allBibBenutzer: ArrayList&amp;lt;Benutzer&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 11px;&quot;&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;&lt;font style=&quot;font-size: 11px;&quot;&gt;- medien: HashMap&amp;lt;String,Mediumverwalter&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 11px;&quot;&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;&lt;font style=&quot;font-size: 11px;&quot;&gt;- ausleihe: ArrayList&amp;lt;Ausleihe&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 11px;&quot;&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;&lt;font style=&quot;font-size: 11px;&quot;&gt;- ausleiheSystem: AusleihSystem&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 11px;&quot;&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;&lt;font style=&quot;font-size: 11px;&quot;&gt;- bibAdmin: Benutzer&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-size: 11px;&quot;&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;&lt;font style=&quot;font-size: 11px;&quot;&gt;&lt;br&gt;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;strokeWidth=3;" parent="i-RIzz4hhB1Q3m7lVkjo-2" vertex="1">
<mxGeometry y="26" width="490" height="104" as="geometry" />
<mxCell id="ydUtLetK26WXyeJ3qCt--184" value="&lt;span style=&quot;font-weight: normal;&quot;&gt;+ field: typ&lt;/span&gt;e" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;fontFamily=Helvetica;fontSize=12;fontColor=default;fontStyle=1;" vertex="1" parent="ydUtLetK26WXyeJ3qCt--183">
<mxGeometry y="36" width="160" height="26" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-4" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" parent="i-RIzz4hhB1Q3m7lVkjo-2" vertex="1">
<mxGeometry y="130" width="490" height="8" as="geometry" />
<mxCell id="ydUtLetK26WXyeJ3qCt--185" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;fontFamily=Helvetica;fontSize=12;fontColor=default;fontStyle=1;" vertex="1" parent="ydUtLetK26WXyeJ3qCt--183">
<mxGeometry y="62" width="160" height="48" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-5" value="+ userRegistrieren(name:String, type: String, alter: int, istAdmin: String): void&lt;div&gt;+ userAnmelden(bibKartennummer: String): boolean&lt;/div&gt;&lt;div&gt;+&amp;nbsp;mediumDurchsuchen(auswahl: String, bibKartennummer: String): ArrayList&amp;lt;String&amp;gt;&lt;/div&gt;&lt;div&gt;+&amp;nbsp;mediumAusleihen(bibKartenNummer:&amp;nbsp;&lt;span style=&quot;background-color: initial;&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;,eindeutigeKennung:&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;): String&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;+&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;medienVerlängern(eindeutigeKennung:&lt;/span&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;, bibKartennummer:&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;): boolean&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;+&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;gebührenBezahlen(betrag:&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;, bibKartennummer:&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;): boolean&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;+&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;medienRückgabe(eindeutigeKennung:&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;): ArrayList&amp;lt;String&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;+&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;jahresGebührenBerechnen(bibKartennummer:&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;, datum:&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;): double&lt;/span&gt;&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="i-RIzz4hhB1Q3m7lVkjo-2" vertex="1">
<mxGeometry y="138" width="490" height="142" as="geometry" />
<mxCell id="ydUtLetK26WXyeJ3qCt--191" value="&lt;div&gt;&lt;br&gt;&lt;/div&gt;1..*" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Helvetica;fontSize=12;fontColor=default;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="1330" y="440" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-10" value="Mediumverwalter" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="1580" y="390" width="160" height="128" as="geometry" />
<mxCell id="ydUtLetK26WXyeJ3qCt--192" value="hat" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Helvetica;fontSize=12;fontColor=default;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="1250" y="440" width="60" height="40" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-11" value="- verlängerbar: boolean&lt;div&gt;- anzahl: int&lt;/div&gt;&lt;div&gt;- leihdauer: int&lt;/div&gt;&lt;div&gt;- medium: Medium&lt;/div&gt;&lt;div&gt;- istAusgeliehen: boolean&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="i-RIzz4hhB1Q3m7lVkjo-10" vertex="1">
<mxGeometry y="26" width="160" height="94" as="geometry" />
<mxCell id="ydUtLetK26WXyeJ3qCt--193" value="1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Helvetica;fontSize=12;fontColor=default;fontStyle=1;" vertex="1" parent="1">
<mxGeometry x="1160" y="580" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-12" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" parent="i-RIzz4hhB1Q3m7lVkjo-10" vertex="1">
<mxGeometry y="120" width="160" height="8" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-20" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.398;entryY=0.01;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="i-RIzz4hhB1Q3m7lVkjo-10" target="ydUtLetK26WXyeJ3qCt--41" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-21" value="1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="1640" y="518" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-22" value="1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="1750" y="610" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-25" value="Buch" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=none;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="1490" y="864" width="140" height="52" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-26" value="- autor: String" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="i-RIzz4hhB1Q3m7lVkjo-25" vertex="1">
<mxGeometry y="26" width="140" height="26" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-29" value="Cd" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=none;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="1650" y="864" width="140" height="52" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-30" value="- künstler: String" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="i-RIzz4hhB1Q3m7lVkjo-29" vertex="1">
<mxGeometry y="26" width="140" height="26" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-31" value="Dvd" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=none;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="1838" y="864" width="140" height="52" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-32" value="- regisseur: String" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="i-RIzz4hhB1Q3m7lVkjo-31" vertex="1">
<mxGeometry y="26" width="140" height="26" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-37" value="Dvd" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=none;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="2008" y="864" width="140" height="52" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-38" value="- verlag: String" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="i-RIzz4hhB1Q3m7lVkjo-37" vertex="1">
<mxGeometry y="26" width="140" height="26" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-39" value="Videospiel" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=none;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="2178" y="864" width="140" height="52" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-40" value="- plattform: String" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="i-RIzz4hhB1Q3m7lVkjo-39" vertex="1">
<mxGeometry y="26" width="140" height="26" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-42" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="i-RIzz4hhB1Q3m7lVkjo-3" target="i-RIzz4hhB1Q3m7lVkjo-10" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-43" value="1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="1280" y="375" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-44" value="hat" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="1490" y="340" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-45" value="&lt;font style=&quot;font-size: 18px;&quot;&gt;&lt;b&gt;*&lt;/b&gt;&lt;/font&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;strokeWidth=5;" parent="1" vertex="1">
<mxGeometry x="1650" y="360" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-48" value="1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="1060" y="740" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-49" value="AusleihSystem" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="801" y="770" width="539" height="180" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-50" value="- ausleihBeginn: LocalDate&lt;div&gt;- ausleihEnde: LocalDate&amp;nbsp;&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="i-RIzz4hhB1Q3m7lVkjo-49" vertex="1">
<mxGeometry y="26" width="539" height="64" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-51" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" parent="i-RIzz4hhB1Q3m7lVkjo-49" vertex="1">
<mxGeometry y="90" width="539" height="8" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-52" value="+ mediumAusleihen(benutzer: Benutzer, eindutigeNummer: String): Ausleihe&lt;div&gt;+ mediumRückgabe(ausleihe: ArrayList&amp;lt;Ausleihe&amp;gt;, eindutigeKennung: String): ArrayList&amp;lt;String&amp;gt;&lt;/div&gt;&lt;div&gt;+ medienVerlängern(benutzer:Benutzer, eindutigeKennung: String): boolean&lt;/div&gt;&lt;div&gt;- findMedium(eindutigeKennung: String): Mediumverwalter&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="i-RIzz4hhB1Q3m7lVkjo-49" vertex="1">
<mxGeometry y="98" width="539" height="82" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-57" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.001;entryY=0.1;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="i-RIzz4hhB1Q3m7lVkjo-2" target="ydUtLetK26WXyeJ3qCt--158" edge="1">
<mxCell id="ydUtLetK26WXyeJ3qCt--197" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.371;entryY=0.008;entryDx=0;entryDy=0;entryPerimeter=0;fontFamily=Helvetica;fontSize=12;fontColor=default;fontStyle=1;" edge="1" parent="1" source="ydUtLetK26WXyeJ3qCt--117" target="ydUtLetK26WXyeJ3qCt--175">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="770" y="470" />
<mxPoint x="770" y="1102" />
<mxPoint x="860" y="300" />
<mxPoint x="1477" y="300" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-58" value="&lt;font style=&quot;font-size: 22px;&quot;&gt;*&lt;/font&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="790" y="1080" width="60" height="30" as="geometry" />
<mxCell id="ydUtLetK26WXyeJ3qCt--203" value="" style="endArrow=none;html=1;rounded=0;fontFamily=Helvetica;fontSize=12;fontColor=default;fontStyle=1;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1399" y="750" as="sourcePoint" />
<mxPoint x="1399" y="700" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-59" value="1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="741" y="444" width="60" height="30" as="geometry" />
<mxCell id="ydUtLetK26WXyeJ3qCt--204" value="" style="endArrow=none;html=1;rounded=0;fontFamily=Helvetica;fontSize=12;fontColor=default;fontStyle=1;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1599" y="750" as="sourcePoint" />
<mxPoint x="1599" y="700" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-61" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.998;entryY=0.588;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="ydUtLetK26WXyeJ3qCt--175" target="ydUtLetK26WXyeJ3qCt--159" edge="1">
<mxCell id="ydUtLetK26WXyeJ3qCt--205" value="" style="endArrow=none;html=1;rounded=0;fontFamily=Helvetica;fontSize=12;fontColor=default;fontStyle=1;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1399" y="700" as="sourcePoint" />
<mxPoint x="1599" y="700" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--206" value="Extends" style="endArrow=block;endSize=16;endFill=0;html=1;rounded=0;fontFamily=Helvetica;fontSize=12;fontColor=default;fontStyle=1;entryX=0.344;entryY=0.997;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" target="ydUtLetK26WXyeJ3qCt--178">
<mxGeometry width="160" relative="1" as="geometry">
<mxPoint x="1470" y="700" as="sourcePoint" />
<mxPoint x="1630" y="680" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--207" value="Registrieren" style="html=1;whiteSpace=wrap;strokeColor=default;align=center;verticalAlign=middle;spacingTop=10;fontFamily=Helvetica;fontSize=12;fontColor=default;fontStyle=1;fillColor=default;" vertex="1" parent="1">
<mxGeometry x="110" y="320" width="110" height="50" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--208" value="Anmelden" style="html=1;whiteSpace=wrap;strokeColor=default;align=center;verticalAlign=middle;spacingTop=10;fontFamily=Helvetica;fontSize=12;fontColor=default;fontStyle=1;fillColor=default;" vertex="1" parent="1">
<mxGeometry x="110" y="380" width="110" height="50" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--209" value="Medien Durchsuchen" style="html=1;whiteSpace=wrap;strokeColor=default;align=center;verticalAlign=middle;spacingTop=10;fontFamily=Helvetica;fontSize=12;fontColor=default;fontStyle=1;fillColor=default;" vertex="1" parent="1">
<mxGeometry x="110" y="440" width="110" height="50" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--210" value="Ausleihen eines Gegenstandes" style="html=1;whiteSpace=wrap;strokeColor=default;align=center;verticalAlign=middle;spacingTop=10;fontFamily=Helvetica;fontSize=12;fontColor=default;fontStyle=1;fillColor=default;" vertex="1" parent="1">
<mxGeometry x="110" y="500" width="110" height="50" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--211" value="Rückgabe eines Gegenstandes" style="html=1;whiteSpace=wrap;strokeColor=default;align=center;verticalAlign=middle;spacingTop=10;fontFamily=Helvetica;fontSize=12;fontColor=default;fontStyle=1;fillColor=default;" vertex="1" parent="1">
<mxGeometry x="110" y="560" width="110" height="50" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--212" value="&lt;strong&gt;Leihverwaltung&lt;/strong&gt;" style="html=1;whiteSpace=wrap;strokeColor=default;align=center;verticalAlign=middle;spacingTop=10;fontFamily=Helvetica;fontSize=12;fontColor=default;fontStyle=1;fillColor=default;" vertex="1" parent="1">
<mxGeometry x="110" y="620" width="110" height="50" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--213" value="Verbuchen von überfälligen Gebühren" style="html=1;whiteSpace=wrap;strokeColor=default;align=center;verticalAlign=middle;spacingTop=10;fontFamily=Helvetica;fontSize=12;fontColor=default;fontStyle=1;fillColor=default;" vertex="1" parent="1">
<mxGeometry x="110" y="680" width="160" height="50" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--221" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.997;entryY=0.395;entryDx=0;entryDy=0;entryPerimeter=0;fontFamily=Helvetica;fontSize=12;fontColor=default;fontStyle=1;" edge="1" parent="1" source="ydUtLetK26WXyeJ3qCt--5" target="ydUtLetK26WXyeJ3qCt--213">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-62" value="1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="1400" y="1134" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-63" value="hat" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="1300" y="1134" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-64" value="&lt;font style=&quot;font-size: 21px;&quot;&gt;*&lt;/font&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="1160" y="1134" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-65" value="1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="1420" y="1218" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-66" value="hat" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="1300" y="1220" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-68" value="&lt;font style=&quot;font-size: 12px;&quot;&gt;1&lt;/font&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="1240" y="1270" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-69" value="erstellt" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="1005" y="990" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-70" value="&lt;font style=&quot;font-size: 12px;&quot;&gt;1&lt;/font&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="960" y="1060" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-71" value="verwaltet" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="1760" y="550" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-72" value="kommuniziert" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="1060" y="670" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-73" value="hat" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="767" y="690" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="xSOr38UQ6ttjsq0tnJFV-1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.388;entryY=0.019;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="i-RIzz4hhB1Q3m7lVkjo-49" target="ydUtLetK26WXyeJ3qCt--158" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="xSOr38UQ6ttjsq0tnJFV-2" value="&lt;font style=&quot;font-size: 12px;&quot;&gt;1&lt;/font&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="1060" y="950" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="xSOr38UQ6ttjsq0tnJFV-5" value="Studenten" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="1350" y="1450" width="160" height="34" as="geometry" />
</mxCell>
<mxCell id="xSOr38UQ6ttjsq0tnJFV-7" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" parent="xSOr38UQ6ttjsq0tnJFV-5" vertex="1">
<mxGeometry y="26" width="160" height="8" as="geometry" />
</mxCell>
<mxCell id="xSOr38UQ6ttjsq0tnJFV-17" value="Medium druchsuchen" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="450" y="375" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="xSOr38UQ6ttjsq0tnJFV-18" value="Medium&lt;div&gt;Ausleihen&lt;/div&gt;" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" parent="1" vertex="1">
<mxGeometry x="440" y="440" width="80" height="40" as="geometry" />
</mxCell>
<mxCell id="l42d9aidsTNYsLyE-SN_-1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.057;entryY=-0.011;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="i-RIzz4hhB1Q3m7lVkjo-2" target="ydUtLetK26WXyeJ3qCt--175">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="l42d9aidsTNYsLyE-SN_-2" value="1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="1290" y="439" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="l42d9aidsTNYsLyE-SN_-3" value="hat" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="1470" y="690" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="l42d9aidsTNYsLyE-SN_-4" value="*" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="1470" y="970" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="l42d9aidsTNYsLyE-SN_-5" value="Mitarbeiter" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="1740" y="1437" width="300" height="60" as="geometry" />
</mxCell>
<mxCell id="l42d9aidsTNYsLyE-SN_-7" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" vertex="1" parent="l42d9aidsTNYsLyE-SN_-5">
<mxGeometry y="26" width="300" height="8" as="geometry" />
</mxCell>
<mxCell id="l42d9aidsTNYsLyE-SN_-8" value="+ gebührenVerbuchen(benutzer: Benutzer): void" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" vertex="1" parent="l42d9aidsTNYsLyE-SN_-5">
<mxGeometry y="34" width="300" height="26" as="geometry" />
</mxCell>
<mxCell id="l42d9aidsTNYsLyE-SN_-9" value="Erwachsener" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="1550" y="1450" width="160" height="34" as="geometry" />
</mxCell>
<mxCell id="l42d9aidsTNYsLyE-SN_-11" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" vertex="1" parent="l42d9aidsTNYsLyE-SN_-9">
<mxGeometry y="26" width="160" height="8" as="geometry" />
</mxCell>
<mxCell id="l42d9aidsTNYsLyE-SN_-13" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1630" y="1400" as="sourcePoint" />
<mxPoint x="1630" y="1400" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="l42d9aidsTNYsLyE-SN_-14" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1630" y="1400" as="sourcePoint" />
<mxPoint x="1890" y="1400" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="l42d9aidsTNYsLyE-SN_-15" value="" style="endArrow=none;html=1;rounded=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="l42d9aidsTNYsLyE-SN_-5">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1840" y="1450" as="sourcePoint" />
<mxPoint x="1890" y="1400" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="l42d9aidsTNYsLyE-SN_-17" value="" style="endArrow=none;html=1;rounded=0;exitX=0.457;exitY=0.004;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.526;entryY=1.014;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="i-RIzz4hhB1Q3m7lVkjo-49" target="i-RIzz4hhB1Q3m7lVkjo-5">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="970" y="660" as="sourcePoint" />
<mxPoint x="1020" y="610" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="l42d9aidsTNYsLyE-SN_-18" value="1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="1040.5" y="620" width="60" height="30" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 298 KiB

View File

@ -17,9 +17,3 @@ Zum Ausleihen von Medien muss sich der Benutzer laut Anforderung vorher im Syste
Frage: Wie wird jedoch der Ausleihprozess gehandhabt, wenn der Benutzer die Medien direkt vor Ort in der Bibliothek ausleihen möchte?
Ist eine Anmeldung im System dafür zwingend erforderlich, oder gibt es eine andere Möglichkeit für den Vor-Ort-Ausleihprozess?
Aspekt4:
gibt es in der Bib begrenzte Anzahl von der Mediums oder wie?
Aspekt5:
wie viel soll die Benutzer Gebühren bezahlen

View File

@ -0,0 +1,29 @@
private Benutzer findBenutzer(int kartennummer) {
alleBibBenutzer.stream()
.filter(k -> k.getBibAusweis().getKartenNummer() == kartennummer)
}
}
wie kann ich hier Benutzer mit Stream zurückgeben?
Antwort:
Um in der Methode findBenutzer den Benutzer mit der angegebenen Kartennummer zurückzugeben,
kannst du den stream()-Ansatz verwenden und das Ergebnis filtern.
Schließlich kannst du mit findFirst() das erste (und in diesem Fall das einzige) Element des Streams
abrufen, das die Bedingung erfüllt. Wenn kein Benutzer mit dieser Kartennummer vorhanden ist, könnte findFirst() ein Optional-Objekt ohne Wert zurückgeben.
Hier ist die angepasste Methode:
private Benutzer findBenutzer(int kartennummer) {
return alleBibBenutzer.stream()
.filter(k -> k.getBibAusweis().getKartenNummer() == kartennummer)
.findFirst()
.orElse(null); // Gibt null zurück, falls kein Benutzer mit der Kartennummer gefunden wurde
}
Erklärung der Anpassung
stream(): Wandelt die ArrayList in einen Stream um.
filter(...): Filtert den Stream nach Benutzern, deren Kartennummer mit der gesuchten übereinstimmt.
findFirst(): Nimmt das erste Element des Streams, das die Filterbedingung erfüllt.
orElse(null): Gibt null zurück, falls kein Benutzer gefunden wurde.

View File

@ -0,0 +1,5 @@
package domain;
public class Ausleihe {
}

View File

@ -0,0 +1,15 @@
package domain.Benutzer;
public class Ausweis {
private int kartenNummer;
private static int generiereNummer = 1000;
public Ausweis() {
this.kartenNummer = generiereNummer++;
}
public int getKartenNummer() {
return kartenNummer;
}
}

View File

@ -0,0 +1,87 @@
package domain.Benutzer;
import java.util.ArrayList;
import domain.Medium.Medium;
public abstract class Benutzer {
private Ausweis bibAusweis;
private String name;
private int alter;
private boolean istStudent;
private ArrayList<Medium> ausgeliehenenMedien;
private boolean angemeldet;
public Benutzer(Ausweis bibAusweis, String name, int alter, boolean istStudent) {
super();
this.bibAusweis = bibAusweis;
this.name = name;
this.alter = alter;
this.istStudent = istStudent;
this.ausgeliehenenMedien = new ArrayList<>();
this.angemeldet = false;
}
public Ausweis getBibAusweis() {
return bibAusweis;
}
public void setBibAusweis(Ausweis bibAusweis) {
this.bibAusweis = bibAusweis;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAlter() {
return alter;
}
public void setAlter(int alter) {
this.alter = alter;
}
public boolean isIstStudent() {
return istStudent;
}
public void setIstStudent(boolean istStudent) {
this.istStudent = istStudent;
}
public ArrayList<Medium> getAusgeliehenenMedien() {
return ausgeliehenenMedien;
}
public void addMedium(Medium medium) {
this.ausgeliehenenMedien.add(medium);
}
public void removeMedium(Medium medium) {
this.ausgeliehenenMedien.remove(medium);
}
public boolean isAngemeldet() {
return angemeldet;
}
public void setAngemeldet(boolean angemeldet) {
this.angemeldet = angemeldet;
}
@Override
public String toString() {
return "Benutzer [bibAusweisNummer= " + bibAusweis.getKartenNummer() + ", name=" + name + ", alter=" + alter + ", istStudent="
+ istStudent + ", ist im System Online = " + angemeldet + ", ausgeliehenenMedien=" + ausgeliehenenMedien + "]";
}
}

View File

@ -0,0 +1,9 @@
package domain.Benutzer;
public class Kunde extends Benutzer {
public Kunde(Ausweis bibAusweis, String name, int alter, boolean istStudent) {
super(bibAusweis, name, alter, istStudent);
}
}

View File

@ -0,0 +1,9 @@
package domain.Benutzer;
public class Mitarbeiter extends Benutzer {
public Mitarbeiter(Ausweis bibAusweis, String name, int alter, boolean istStudent) {
super(bibAusweis, name, alter, istStudent);
}
}

View File

@ -0,0 +1,50 @@
package domain;
import java.util.ArrayList;
import java.util.stream.Stream;
import domain.Benutzer.*;
import domain.ExceptionsKlassen.*;
public class BibSystem {
private ArrayList<Benutzer> alleBibBenutzer;
public BibSystem() {
this.alleBibBenutzer = new ArrayList<>();
}
public String userRegistrieren(String name, String type, int alter,String istAdmin) throws FalscheEingabeException {
if (name.isEmpty() || type.isEmpty() || alter <= 0 || istAdmin.isEmpty())
throw new FalscheEingabeException("Geben Sie alle Felder korrekt ein");
Benutzer benutzer;
Ausweis ausweis = new Ausweis();
boolean istStudentOderSchüler = (type.equalsIgnoreCase("schüler") || type.equalsIgnoreCase("student"))? true : false;
if (istAdmin.equalsIgnoreCase("nein"))
benutzer = new Mitarbeiter(ausweis,name,alter,istStudentOderSchüler);
else
benutzer = new Kunde(ausweis,name,alter,istStudentOderSchüler);
alleBibBenutzer.add(benutzer);
return benutzer.toString();
}
public boolean userAnmdelden(int kartennummer) throws BenutzerNichtGefundenException {
Benutzer tempUser = findBenutzer(kartennummer);
if (tempUser == null)
throw new BenutzerNichtGefundenException("Benutzer mit Kartennummer " + kartennummer + " nicht gefunden");
tempUser.setAngemeldet(true);
return tempUser.isAngemeldet();
}
private Benutzer findBenutzer(int kartennummer) {
return alleBibBenutzer.stream()
.filter(k -> k.getBibAusweis().getKartenNummer() == kartennummer)
.findFirst() // nimmt das erste Element des Streams, das die Filterbedingung erfüllt.
.orElse(null);
}
}

View File

@ -1,4 +1,4 @@
package domain.exceptionsKlassen;
package domain.ExceptionsKlassen;
public class BenutzerNichtGefundenException extends Exception {

View File

@ -1,4 +1,4 @@
package domain.exceptionsKlassen;
package domain.ExceptionsKlassen;
public class FalscheEingabeException extends Exception {

View File

@ -0,0 +1,39 @@
package domain.JTests;
import static org.junit.Assert.assertThrows;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import domain.BibSystem;
import domain.ExceptionsKlassen.BenutzerNichtGefundenException;
import domain.ExceptionsKlassen.FalscheEingabeException;
class AnmeldenJTest {
private BibSystem bib;
@BeforeEach
void setUp() throws Exception {
this.bib = new BibSystem();
}
@Test
void testUSerIstNichtAngemeldet() {
// Status => True
assertThrows(BenutzerNichtGefundenException.class, () -> bib.userAnmdelden(1110));
}
@Test
void testUSerIstAngemeldet() throws FalscheEingabeException, BenutzerNichtGefundenException {
// Status => True
bib.userRegistrieren("obai", "student", 16, "nein");
int kartennummer = 1000;
assertTrue(bib.userAnmdelden(kartennummer));
}
}

View File

@ -0,0 +1,33 @@
package domain.JTests;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import domain.BibSystem;
import domain.Benutzer.Ausweis;
import domain.Benutzer.Benutzer;
import domain.Benutzer.Kunde;
import domain.ExceptionsKlassen.FalscheEingabeException;
class RegistrierenTest {
private BibSystem bib;
@BeforeEach
void erstelleObjekt() {
this.bib = new BibSystem();
}
@Test
void test() throws FalscheEingabeException {
String name = "obai";
String type = "schüler";
String istAdmin = "nein";
String test = bib.userRegistrieren(name, type, 15,istAdmin);
assertTrue(test.contains(name));
System.out.println(test);
}
}

View File

@ -0,0 +1,11 @@
package domain.Medium;
import java.util.Date;
public class Brettspiel extends Medium {
public Brettspiel(int kennungNummer, String title, Date erscheinungsjahr, String autor) {
super(kennungNummer, title, erscheinungsjahr, autor);
}
}

View File

@ -0,0 +1,11 @@
package domain.Medium;
import java.util.Date;
public class Buch extends Medium {
public Buch(int kennungNummer, String title, Date erscheinungsjahr, String autor) {
super(kennungNummer, title, erscheinungsjahr, autor);
}
}

View File

@ -0,0 +1,11 @@
package domain.Medium;
import java.util.Date;
public class Cd extends Medium {
public Cd(int kennungNummer, String title, Date erscheinungsjahr, String autor) {
super(kennungNummer, title, erscheinungsjahr, autor);
}
}

View File

@ -0,0 +1,11 @@
package domain.Medium;
import java.util.Date;
public class Dvd extends Medium {
public Dvd(int kennungNummer, String title, Date erscheinungsjahr, String autor) {
super(kennungNummer, title, erscheinungsjahr, autor);
}
}

View File

@ -0,0 +1,53 @@
package domain.Medium;
import java.util.Date;
public abstract class Medium {
private int KennungNummer;
private String title;
private Date erscheinungsjahr;
private String autor;
public Medium(int kennungNummer, String title, Date erscheinungsjahr, String autor) {
super();
KennungNummer = kennungNummer;
this.title = title;
this.erscheinungsjahr = erscheinungsjahr;
this.autor = autor;
}
public int getKennungNummer() {
return KennungNummer;
}
public void setKennungNummer(int kennungNummer) {
KennungNummer = kennungNummer;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public Date getErscheinungsjahr() {
return erscheinungsjahr;
}
public void setErscheinungsjahr(Date erscheinungsjahr) {
this.erscheinungsjahr = erscheinungsjahr;
}
public String getAutor() {
return autor;
}
public void setAutor(String autor) {
this.autor = autor;
}
}

View File

@ -0,0 +1,11 @@
package domain.Medium;
import java.util.Date;
public class Videospiel extends Medium {
public Videospiel(int kennungNummer, String title, Date erscheinungsjahr, String autor) {
super(kennungNummer, title, erscheinungsjahr, autor);
}
}

View File

@ -1,65 +0,0 @@
package domain.ausleihSystem;
import java.time.LocalDate;
import java.util.Date;
import domain.benutzer.Benutzer;
import domain.medium.Mediumverwalter;
public class Ausleihe {
private LocalDate ausleiheBeginn, ausleiheEnde;
private Mediumverwalter medium;
private Benutzer benutzer;
private int verlängerungen;
public Ausleihe(Mediumverwalter medium, Benutzer benutzer,LocalDate ausleiheBeginn, LocalDate ausleiheEnde) {
this.medium = medium;
this.ausleiheBeginn = ausleiheBeginn;
this.ausleiheEnde = ausleiheEnde;
this.verlängerungen = 0;
this.benutzer = benutzer;
}
public Mediumverwalter getMediumverwalter() {
return medium;
}
public Benutzer getBenutzer() {
return benutzer;
}
public LocalDate getAusleiheBeginn() {
return ausleiheBeginn;
}
public void setAusleiheBeginn(LocalDate ausleiheBeginn) {
this.ausleiheBeginn = ausleiheBeginn;
}
public LocalDate getAusleiheEnde() {
return ausleiheEnde;
}
public void setAusleiheEnde(LocalDate ausleiheEnde) {
this.ausleiheEnde = ausleiheEnde;
}
public int getVerlängerungen() {
return verlängerungen;
}
public void setVerlängerungen(int verlängerungen) {
this.verlängerungen = verlängerungen;
}
@Override
public String toString() {
return "Ausgeliehene Mediums= "+ medium.toString()+
" Ausleihe Beginn= " +ausleiheBeginn +
" ,Ausleihe Ende= " + ausleiheEnde +
" ,verlängerungen= " + verlängerungen +
" ,inhaber= " + benutzer.toString() ;
}
}

View File

@ -1,28 +0,0 @@
package domain.ausleihSystem;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import domain.fassade.BibSystem;
class AusleiheJTest {
private BibSystem bib;
@BeforeEach
void setUp() throws Exception {
this.bib = new BibSystem();
}
@Test
void test() throws Exception {
bib.userRegistrieren("obai", "student", 15, "nein");
bib.userAnmelden("K1001");
double userGebühren = bib.mediumAusleihen("K1001", "B001");
assertEquals(0.0,userGebühren);
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

View File

@ -1,144 +0,0 @@
package domain.ausleihSystem;
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import java.util.*;
import domain.benutzer.Benutzer;
import domain.exceptionsKlassen.MediumNichtGefundenException;
import domain.medium.*;
public class AusleiheSystem {
private HashMap<String, Mediumverwalter> medien;
private LocalDate ausleiheBeginn, ausleiheEnde;
public AusleiheSystem(HashMap<String, Mediumverwalter> medien) {
this.medien = medien;
}
public Ausleihe mediumAusleihen(Benutzer benutzer, String eindeutigenummer) throws MediumNichtGefundenException {
Mediumverwalter mediumAusleihen = findMedium(eindeutigenummer);
if (mediumAusleihen.isIstAusgeliehen())
throw new MediumNichtGefundenException("Das Medium ist ausgeliehen");
mediumAusleihen.setIstAusgeliehen(true);
mediumAusleihen.setAnzahl(mediumAusleihen.getAnzahl() - 1);
this.ausleiheBeginn = LocalDate.now();
this.ausleiheEnde = ausleiheBeginn.plusDays(mediumAusleihen.getLeihdauer());
Ausleihe neueAusleihe = new Ausleihe(mediumAusleihen, benutzer, ausleiheBeginn, ausleiheEnde);
return neueAusleihe;
}
public ArrayList<String> mediumRückgabe(ArrayList<Ausleihe> ausleihe, String eindeutigeKennung) {
Ausleihe ausgelieheneMedium = ausleihe.stream()
.filter(k -> k.getMediumverwalter().getMedium().getID().equalsIgnoreCase(eindeutigeKennung))
.findFirst()
.orElse(null);
ArrayList<String> ausgeliehenMedien = new ArrayList<>();
LocalDate heutigesDatum;
Benutzer bibBenutzer = ausgelieheneMedium.getBenutzer();
if (ausgelieheneMedium != null) {
heutigesDatum = LocalDate.now();
if (heutigesDatum.isAfter(ausgelieheneMedium.getAusleiheEnde())) {
long überfälligeTage = ausgelieheneMedium.getAusleiheEnde().until(heutigesDatum, ChronoUnit.DAYS);
double gebühren = 0.0;
if (überfälligeTage <= 7)
gebühren = überfälligeTage * 1.0;
else {
gebühren = (7 * 1.0);
gebühren += ((überfälligeTage - 7) * 2.0);
}
bibBenutzer.setGebühren(bibBenutzer.getGebühren() + gebühren);
}
ausgelieheneMedium.getBenutzer().mediumZurückgeben(ausgelieheneMedium);
ausleihe.remove(ausgelieheneMedium);
ausgelieheneMedium.getMediumverwalter().setIstAusgeliehen(false);
ausgelieheneMedium.getMediumverwalter().setAnzahl(ausgelieheneMedium.getMediumverwalter().getAnzahl() + 1);
for (Ausleihe a : ausgelieheneMedium.getBenutzer().getAusgeliehenenMedien())
ausgeliehenMedien.add(a.toString());
}
return ausgeliehenMedien;
}
public double SimulieremediumRückgabe(ArrayList<Ausleihe> ausleihe, String eindeutigeKennung, String ausleiheBeginn, String ausleiheEnde,String datum) throws MediumNichtGefundenException {
Ausleihe ausgelieheneMedium = ausleihe.stream()
.filter(k -> k.getMediumverwalter().getMedium().getID().equalsIgnoreCase(eindeutigeKennung)).findFirst()
.orElse(null);
LocalDate beginn = LocalDate.parse(ausleiheBeginn);
LocalDate ende = LocalDate.parse(ausleiheEnde);
LocalDate heutigesDatum = LocalDate.parse(datum);
Benutzer bibBenutzer = ausgelieheneMedium.getBenutzer();
ausgelieheneMedium.setAusleiheBeginn(beginn);
ausgelieheneMedium.setAusleiheEnde(ende);
if (heutigesDatum.isAfter(ausgelieheneMedium.getAusleiheEnde())) {
long überfälligeTage = ausgelieheneMedium.getAusleiheEnde().until(heutigesDatum, ChronoUnit.DAYS);
double gebühren = 0.0;
if (überfälligeTage <= 7)
gebühren = überfälligeTage * 1.0;
else {
gebühren = (7 * 1.0);
gebühren += ((überfälligeTage - 7) * 2.0);
}
bibBenutzer.setGebühren(bibBenutzer.getGebühren() + gebühren);
}
return bibBenutzer.getGebühren();
}
public boolean medienVerlängern(Benutzer benutzer, String eindeutigeKennung) throws MediumNichtGefundenException {
Ausleihe medium = benutzer.getAusgeliehenenMedien().stream()
.filter(m -> m.getMediumverwalter().getMedium().getID().equalsIgnoreCase(eindeutigeKennung)).findFirst()
.orElse(null);
if (medium == null)
return false;
LocalDate heutigesDatum = LocalDate.now();
if (heutigesDatum.isAfter(medium.getAusleiheEnde()))
return false;
if (!medium.getMediumverwalter().isVerlängerbar())
return false;
if (medium.getVerlängerungen() == 3)
return false;
medium.setVerlängerungen(medium.getVerlängerungen() + 1);
medium.setAusleiheBeginn(LocalDate.now());
medium.setAusleiheEnde(LocalDate.now().plusDays(medium.getMediumverwalter().getLeihdauer()));
return true;
}
private Mediumverwalter findMedium(String eindeutigeKennung) throws MediumNichtGefundenException {
if (medien.containsKey(eindeutigeKennung))
return medien.get(eindeutigeKennung);
else
throw new MediumNichtGefundenException("Das ausgewählte Medium ist nicht verfügbar");
}
}

View File

@ -1,42 +0,0 @@
package domain.ausleihSystem;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.util.ArrayList;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import domain.benutzer.Benutzer;
import domain.fassade.BibSystem;
class MedienRückgabeTest {
private BibSystem bib;
@BeforeEach
void setUp() throws Exception {
this.bib = new BibSystem();
}
@Test
void test() throws Exception {
bib.userRegistrieren("obai", "student", 15, "nein");
bib.userAnmelden("K1001");
bib.mediumAusleihen("K1001", "B001");
Benutzer bibUser = bib.findeBenutzer("K1001");
double gebühren = bib.datumÄndern("B001", "2022-09-01", "2022-10-01", "2022-10-09");
assertEquals(9.0,gebühren);
assertTrue(bib.adminAnmelden("A1000"));
assertTrue(bib.getgbührenBenutzer("K1001") == 9.0);
bib.gebührenVerbuchen("K1001");
assertTrue (bibUser.getGebühren() == 0.0);
}
}

View File

@ -1,27 +0,0 @@
package domain.ausleihSystem;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import domain.fassade.BibSystem;
class MediumVerlängernTest {
private BibSystem bib;
@BeforeEach
void setUp() throws Exception {
this.bib = new BibSystem();
}
@Test
void test() throws Exception {
bib.userRegistrieren("obai", "student", 15, "nein");
bib.userAnmelden("K1001");
bib.mediumAusleihen("K1001", "B001");
assertTrue(bib.medienVerlängern("B001", "K1001"));
}
}

View File

@ -1,16 +0,0 @@
package domain.benutzer;
public class Ausweis {
private String kartennummer;
private static int generiereNummer = 1000;
public Ausweis(String zeichen) {
this.kartennummer =zeichen + generiereNummer++ ;
}
public String getKartenNummer() {
return kartennummer;
}
}

View File

@ -1,147 +0,0 @@
package domain.benutzer;
import java.time.LocalDate;
import java.util.ArrayList;
import domain.ausleihSystem.Ausleihe;
public abstract class Benutzer {
private Ausweis bibAusweis;
private String name;
private int alter;
private boolean istStudent;
private ArrayList<Ausleihe> ausgeliehenenMedien;
private boolean angemeldet;
private double gebühren;
private LocalDate anmeldebeginn;
public Benutzer(Ausweis bibAusweis, String name, int alter, boolean istStudent) {
super();
this.bibAusweis = bibAusweis;
this.name = name;
this.alter = alter;
this.istStudent = istStudent;
this.ausgeliehenenMedien = new ArrayList<>();
this.angemeldet = false;
this.gebühren = 0;
this.anmeldebeginn = LocalDate.now();
}
public Ausweis getBibAusweis() {
return bibAusweis;
}
public void setBibAusweis(Ausweis bibAusweis) {
this.bibAusweis = bibAusweis;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAlter() {
return alter;
}
public void setAlter(int alter) {
this.alter = alter;
}
public boolean isIstStudent() {
return istStudent;
}
public void setIstStudent(boolean istStudent) {
this.istStudent = istStudent;
}
public ArrayList<Ausleihe> getAusgeliehenenMedien() {
return ausgeliehenenMedien;
}
public void ausleihen(Ausleihe medium) {
this.ausgeliehenenMedien.add(medium);
}
public void mediumZurückgeben(Ausleihe medium) {
this.ausgeliehenenMedien.remove(medium);
}
public boolean isAngemeldet() {
return angemeldet;
}
public boolean anmelden() {
this.angemeldet = true;
return this.angemeldet;
}
public boolean abmelden() {
this.angemeldet = false ;
return this.angemeldet;
}
public double getGebühren() {
return gebühren;
}
public void setGebühren(double gebühren) {
this.gebühren = gebühren;
}
public LocalDate getAnmeldebeginn() {
return anmeldebeginn;
}
public void setAnmeldebeginn(LocalDate anmeldebeginn) {
this.anmeldebeginn = anmeldebeginn;
}
public double jahresgebühren(String datum) {
// Falls ein Testdatum angegeben ist
if (!datum.isEmpty()) {
LocalDate aktuellesDatum = LocalDate.parse(datum);
while (this.anmeldebeginn.isBefore(aktuellesDatum)) {
this.gebühren += getJahresgebühren();
this.anmeldebeginn = this.anmeldebeginn.plusYears(1); // Aktualisieren des Startdatums
}
this.anmeldebeginn = aktuellesDatum; // Letztes Aktualisieren des Startdatums
}
else {
LocalDate nachEinemJahr = this.anmeldebeginn.plusYears(1);
while (LocalDate.now().isAfter(nachEinemJahr)) {
this.gebühren += getJahresgebühren();
this.anmeldebeginn = nachEinemJahr;
nachEinemJahr = this.anmeldebeginn.plusYears(1);
}
}
return this.gebühren;
}
public abstract double getJahresgebühren();
@Override
public String toString() {
return "Benutzer [bibAusweisNummer= " + bibAusweis.getKartenNummer() +
", name=" + name +
", alter=" + alter +
", istStudent=" + istStudent +
", ist im System Online = " + angemeldet +
" ,Gebühren= "+ gebühren + "]";
}
public String zeigeAusgeliehenMediums() {
return "Ausgeliehene Mediums= " + ausgeliehenenMedien;
}
}

View File

@ -1,14 +0,0 @@
package domain.benutzer;
public class Erwachsener extends Benutzer {
public Erwachsener(Ausweis bibAusweis, String name, int alter, boolean istStudent) {
super(bibAusweis, name, alter, istStudent);
}
@Override
public double getJahresgebühren() {
return 50.0;
}
}

View File

@ -1,18 +0,0 @@
package domain.benutzer;
public class Mitarbeiter extends Benutzer {
public Mitarbeiter(Ausweis bibAusweis, String name, int alter, boolean istStudent) {
super(bibAusweis, name, alter, istStudent);
}
@Override
public double getJahresgebühren() {
return 0.0;
}
public void gebührVerbuchen(Benutzer benutzer) {
benutzer.setGebühren(0.0);
}
}

View File

@ -1,14 +0,0 @@
package domain.benutzer;
public class Student extends Benutzer {
public Student(Ausweis bibAusweis, String name, int alter, boolean istStudent) {
super(bibAusweis, name, alter, istStudent);
}
@Override
public double getJahresgebühren() {
return 25.0;
}
}

View File

@ -1,52 +0,0 @@
package domain.bibliothekskatalog;
import static org.junit.jupiter.api.Assertions.*;
import java.util.ArrayList;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import domain.benutzer.Benutzer;
import domain.exceptionsKlassen.BenutzerNichtAngemeldetException;
import domain.exceptionsKlassen.BenutzerNichtGefundenException;
import domain.exceptionsKlassen.FalscheEingabeException;
import domain.exceptionsKlassen.MediumNichtGefundenException;
import domain.fassade.BibSystem;
import domain.fassade.Registieren;
class MedienSuchenTest {
private BibSystem fassade;
@BeforeEach
void erstelleObjekt() throws FalscheEingabeException, BenutzerNichtGefundenException {
this.fassade = new BibSystem();
fassade.userRegistrieren("obai", "student", 15, "nein");
fassade.userAnmelden("K1001");
}
@Disabled
void testMedienSuchenNachTitle()throws MediumNichtGefundenException, FalscheEingabeException, BenutzerNichtAngemeldetException, BenutzerNichtGefundenException {
ArrayList<String> nichtAusgeliehen = fassade.mediumDurchsuchen("Effektives Java Programmieren", "K1001");
nichtAusgeliehen.forEach(System.out::println);
}
@Test
void testMedienSuchenNachMedienart()throws MediumNichtGefundenException, FalscheEingabeException, BenutzerNichtAngemeldetException, BenutzerNichtGefundenException {
ArrayList<String> nichtAusgeliehen = fassade.mediumDurchsuchen("Videospiele", "K1001");
nichtAusgeliehen.forEach(System.out::println);
}
@Disabled
void testMedienSuchenNachausgeliehen()throws MediumNichtGefundenException, FalscheEingabeException, BenutzerNichtAngemeldetException, BenutzerNichtGefundenException {
ArrayList<String> nichtAusgeliehen = fassade.mediumDurchsuchen("ausgeliehen", "K1001");
nichtAusgeliehen.forEach(System.out::println);
}
}

View File

@ -1,69 +0,0 @@
package domain.bibliothekskatalog;
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.stream.Collectors;
import domain.ausleihSystem.Ausleihe;
import domain.medium.*;
public class Mediensuchen {
public ArrayList<String> title(String title, HashMap<String,Mediumverwalter> medien) {
return medien.entrySet().stream()
.filter(t -> t.getValue().getMedium().getTitle().equalsIgnoreCase(title))
.map(t -> "Eindutige Kennung= " + t.toString()).collect(Collectors.toCollection(ArrayList::new));
}
public ArrayList<String> ausgeliehen(String ausgeliehen, HashMap<String,Mediumverwalter> medien) {
return medien.entrySet().stream()
.filter(t -> t.getValue().isIstAusgeliehen())
.map(t -> "Eindutige Kennung= " + t.toString()).collect(Collectors.toCollection(ArrayList::new));
}
public ArrayList<String> nichtAusgeliehen(String ausgeliehen, HashMap<String,Mediumverwalter> medien) {
return medien.entrySet().stream()
.filter(t -> !(t.getValue().isIstAusgeliehen()))
.map(t -> "Eindutige Kennung= " + t.toString()).collect(Collectors.toCollection(ArrayList::new));
}
public ArrayList<String> medienart(String medienart, HashMap<String, Mediumverwalter> medien) {
// Map zur Zuordnung von medienart zu Klassen
Map<String, Class<?>> medienKlassen = Map.of(
"Bücher", Buch.class,
"Brettspiele", Brettspiel.class,
"Dvds", Dvd.class,
"Cds", Cd.class,
"Videospiele", Videospiel.class
);
// Ermitteln der entsprechenden Klasse für die angegebene Medienart
Class<?> klasse = medienKlassen.get(medienart);
if (klasse == null) {
return null; // Ungültige Medienart
}
// Stream für die Filterung und Konvertierung
return medien.entrySet().stream()
.filter(t -> klasse.isInstance(t.getValue().getMedium())) // Filtert nach der Klasse
.map(t -> klasse.cast(t.getValue().getMedium())) // Castet das Medium zur richtigen Klasse
.map(t -> "Eindutige Kennung= " + t.toString()) // Konvertiert zu String
.collect(Collectors.toCollection(ArrayList::new)); // Sammeln als ArrayList
}
public ArrayList<String> baldVerfügbareMedien(ArrayList<Ausleihe> ausleihe) {
LocalDate heutigesDatum = LocalDate.now();
return ausleihe.stream()
.filter(t -> t.getAusleiheEnde().until(heutigesDatum, ChronoUnit.DAYS) <= 3)
.map(t -> t.getMediumverwalter())
.map(t -> t.toString())
.collect(Collectors.toCollection(ArrayList::new));
}
}

View File

@ -1,8 +0,0 @@
package domain.exceptionsKlassen;
public class BenutzerNichtAngemeldetException extends Exception {
public BenutzerNichtAngemeldetException(String error) {
super(error);
}
}

View File

@ -1,8 +0,0 @@
package domain.exceptionsKlassen;
public class MediumNichtGefundenException extends Exception {
public MediumNichtGefundenException(String error) {
super(error);
}
}

View File

@ -1,25 +0,0 @@
package domain.fassade;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
class AusleihfristenGebührenTest {
private BibSystem bib;
@BeforeEach
void setUp() throws Exception {
this.bib = new BibSystem();
}
@Test
void test() throws Exception {
bib.userRegistrieren("obai", "student", 15, "nein");
bib.userAnmelden("K1001");
bib.mediumAusleihen("K1001", "B001");
}
}

View File

@ -1,231 +0,0 @@
package domain.fassade;
import java.util.*;
import domain.ausleihSystem.*;
import domain.benutzer.*;
import domain.bibliothekskatalog.Mediensuchen;
import domain.exceptionsKlassen.*;
import domain.medium.*;
public class BibSystem {
private ArrayList<Benutzer> alleBibBenutzer;
private HashMap<String, Mediumverwalter> medien;
private ArrayList<Ausleihe> ausleihe;
private AusleiheSystem ausleiheSystem;
private Benutzer bibAdmin;
public BibSystem() {
this.alleBibBenutzer = new ArrayList<>();
this.medien = new HashMap<>();
this.ausleiheSystem = new AusleiheSystem(medien);
this.ausleihe = new ArrayList<>();
this.bibAdmin = new Mitarbeiter(new Ausweis("A"),"Xy Müller",20,false);
mediumsAufladen();
}
// Registrierung
public void userRegistrieren(String name, String type, int alter, String istAdmin) throws FalscheEingabeException {
Benutzer bibBenutzer = Registieren.userRegistrieren(name, type, alter, istAdmin);
alleBibBenutzer.add(bibBenutzer);
}
// Anmeldung
public double userAnmelden(String bibKartenNummer) throws BenutzerNichtGefundenException {
Benutzer bibBenutzer = findeBenutzer(bibKartenNummer);
bibBenutzer.anmelden();
return bibBenutzer.getGebühren();
}
// Mediums Durchsuchen
public ArrayList<String> mediumDurchsuchen(String auswahl, String bibKartenNummer) throws FalscheEingabeException, MediumNichtGefundenException, BenutzerNichtAngemeldetException, BenutzerNichtGefundenException {
Benutzer benutzer = findeBenutzer(bibKartenNummer);
if (benutzer.abmelden())
throw new BenutzerNichtAngemeldetException("Sie müssen sich erst im System anmelden");
ArrayList<String> treffer = new ArrayList<>();
Mediensuchen medienSuchen = new Mediensuchen();
if (auswahl.equalsIgnoreCase("ausgeliehen"))
treffer = medienSuchen.ausgeliehen(auswahl, medien);
else if (auswahl.equalsIgnoreCase("nicht Ausgeliehen"))
treffer = medienSuchen.nichtAusgeliehen(auswahl, medien);
else if (auswahl.equalsIgnoreCase("Bücher") || auswahl.equalsIgnoreCase("Brettspiele")
|| auswahl.equalsIgnoreCase("Dvds") || auswahl.equalsIgnoreCase("Cds")
|| auswahl.equalsIgnoreCase("Videospiele"))
treffer = medienSuchen.medienart(auswahl, medien);
else if (auswahl.equalsIgnoreCase("ja")) {
treffer = medienSuchen.baldVerfügbareMedien(ausleihe);
}
else
treffer = medienSuchen.title(auswahl, medien);
if (treffer.size() == 0)
throw new MediumNichtGefundenException("Kein treffer");
return treffer;
}
/*
* Aufgaben des Leihsystems:
* 1. Mediums ausleihen lassen
* 2. Mediums verlängern
* 3. Mediums Rückgabe
*/
// Mediums Ausleihen
public double mediumAusleihen(String bibKartenNummer, String eindeutigeKennung) throws Exception {
Benutzer bibBenutzer = findeBenutzer(bibKartenNummer);
if (bibBenutzer instanceof Mitarbeiter)
throw new Exception("Mitarbeiter können keine Mediums ausleihen!");
if (bibBenutzer.abmelden())
throw new BenutzerNichtAngemeldetException("Sie müssen sich erst im System anmelden");
Ausleihe neueAusleihe = ausleiheSystem.mediumAusleihen(bibBenutzer, eindeutigeKennung);
ausleihe.add(neueAusleihe);
bibBenutzer.ausleihen(neueAusleihe);
return bibBenutzer.getGebühren();
}
// Mediums verlängern
public boolean medienVerlängern(String eindeutigeKennung, String bibKartennummer) throws BenutzerNichtGefundenException, MediumNichtGefundenException {
Benutzer benutzer = findeBenutzer(bibKartennummer);
return ausleiheSystem.medienVerlängern(benutzer,eindeutigeKennung);
}
// Mediums Rückgabe
public ArrayList<String> medienRückgabe(String eindeutigeKennung) {
return ausleiheSystem.mediumRückgabe(ausleihe, eindeutigeKennung);
}
/* Admin Methoden:
* 1. Anmeldung
* 2. Gebühren des BibBenutzers anzeigen
* 3. Gebühren verbuchen
* 4. akteulle ausgelihene Mediums der Benutzer anzeigen
*
*/
// Anmeldung
public boolean adminAnmelden(String bibKartennummerAdmin){
this.bibAdmin.anmelden();
return this.bibAdmin.isAngemeldet();
}
// aktuelle Gebühren der Benutzer
public double getgbührenBenutzer(String bibKartennummer) throws BenutzerNichtGefundenException {
Benutzer benutzer = findeBenutzer(bibKartennummer);
return benutzer.getGebühren();
}
// akteulle ausgelihene Mediums der Benutzer
public ArrayList<String> ausgeliehenGegenstände(String bibKartennummer) throws BenutzerNichtGefundenException {
Benutzer bibUser = findeBenutzer(bibKartennummer);
ArrayList<String> treffer = new ArrayList<>();
for (Ausleihe ausleihe : bibUser.getAusgeliehenenMedien())
treffer.add(ausleihe.toString());
return treffer;
}
public boolean gebührenVerbuchen(String bibKartennummer) throws BenutzerNichtGefundenException {
Benutzer bibUser = findeBenutzer(bibKartennummer);
((Mitarbeiter)this.bibAdmin).gebührVerbuchen(bibUser);
return bibUser.getGebühren() == 0.0;
}
// Simuliere Datum
public double datumÄndern(String eindeutigeKennung,String ausleiheBeginn, String ausleiheEnde,String datum) throws MediumNichtGefundenException {
return ausleiheSystem.SimulieremediumRückgabe(ausleihe, eindeutigeKennung, ausleiheBeginn, ausleiheEnde, datum);
}
// jahresGebühren berechnen
public double jahresGebührenBerechnen(String bibKartennummer, String datum) throws BenutzerNichtGefundenException {
Benutzer benutzer = findeBenutzer(bibKartennummer);
return benutzer.jahresgebühren(datum);
}
// Mediums Aufladen
public void mediumsAufladen(String type, String ID, String title, int erscheinungsjahr, String ersteller,
String verlängbar, int anzahl, int leihdauer) throws FalscheEingabeException {
Mediumverwalter medium;
boolean verlängerung = (verlängbar.equalsIgnoreCase("ja")) ? true : false;
switch (type) {
case "Buch":
medium = new Mediumverwalter(new Buch(ID, title, erscheinungsjahr, ersteller), verlängerung, anzahl,
leihdauer);
break;
case "Cd":
medium = new Mediumverwalter(new Cd(ID, title, erscheinungsjahr, ersteller), verlängerung, anzahl,
leihdauer);
break;
case "Brettspiel":
medium = new Mediumverwalter(new Brettspiel(ID, title, erscheinungsjahr, ersteller), verlängerung, anzahl,
leihdauer);
break;
case "Dvd":
medium = new Mediumverwalter(new Dvd(ID, title, erscheinungsjahr, ersteller), verlängerung, anzahl,
leihdauer);
break;
case "Videospiel":
medium = new Mediumverwalter(new Videospiel(ID, title, erscheinungsjahr, ersteller), verlängerung, anzahl,
leihdauer);
break;
default:
throw new FalscheEingabeException("Falsch Eingabe");
}
medien.put(ID, medium);
}
/*
* => Hilfsmethoden
*/
private void mediumsAufladen() {
Mediumverwalter buch = new Mediumverwalter(new Buch("B001", "Effektives Java Programmieren", 2018, "Joshua Bloch"),true, 10, 28);
medien.put(buch.getMedium().getID(), buch);
Mediumverwalter buchIStAusgeliehen = new Mediumverwalter(new Buch("B00", "Effektives C++ Programmieren", 2018, "Joshua Bloch"),true, 10, 28);
buchIStAusgeliehen.setIstAusgeliehen(true);
medien.put(buchIStAusgeliehen.getMedium().getID(), buchIStAusgeliehen);
Mediumverwalter buchIStNichtAusgeliehen = new Mediumverwalter(new Buch("BG001", "Javascript lenren", 2018, "Joshua Bloch"),true, 10, 28);
medien.put(buchIStNichtAusgeliehen.getMedium().getID(), buchIStNichtAusgeliehen);
Mediumverwalter Videospiel = new Mediumverwalter(new Videospiel("BG00122", "The Legend of Zelda: Breath of the Wild", 2017, "Nintendo Switch"),false, 2, 28);
medien.put(Videospiel.getMedium().getID(), Videospiel);
}
public Benutzer findeBenutzer(String bibKartenNummer) throws BenutzerNichtGefundenException {
return alleBibBenutzer.stream()
.filter(k -> k.getBibAusweis().getKartenNummer().equalsIgnoreCase(bibKartenNummer)).findFirst()
.orElseThrow(() -> new BenutzerNichtGefundenException(
"Benutzer mit Kartennummer " + bibKartenNummer + " nicht gefunden"));
}
}

View File

@ -1,37 +0,0 @@
package domain.fassade;
import static org.junit.Assert.assertThrows;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import domain.benutzer.Benutzer;
import domain.exceptionsKlassen.BenutzerNichtGefundenException;
import domain.exceptionsKlassen.FalscheEingabeException;
class GebührenTest {
BibSystem fassade;
@BeforeEach
void setUp() throws Exception {
fassade = new BibSystem();
}
@Test
void testGebühren() throws Exception {
fassade.userRegistrieren("obai", "schüler", 15, "nein");
fassade.userAnmelden("K1001");
Benutzer user = fassade.findeBenutzer("K1001");
double gebühren = fassade.jahresGebührenBerechnen("K1001", "2026-11-16");
assertEquals(50.0, gebühren);
assertTrue (user.getGebühren() == gebühren);
assertTrue(fassade.adminAnmelden("A1000"));
assertTrue(fassade.getgbührenBenutzer("K1001") == 50.0);
fassade.gebührenVerbuchen("K1001");
assertTrue (user.getGebühren() == 0.0);
}
}

View File

@ -1,36 +0,0 @@
package domain.fassade;
import domain.benutzer.*;
import domain.exceptionsKlassen.FalscheEingabeException;
public class Registieren {
public static Benutzer userRegistrieren(String name, String type, int alter,String istAdmin) throws FalscheEingabeException {
Benutzer benutzer;
Ausweis ausweis;
if (!name.isEmpty()) {
boolean admin = (istAdmin.equalsIgnoreCase("Ja"))? true : false;
if ((type.equalsIgnoreCase("schüler") || type.equalsIgnoreCase("student"))) {
ausweis = new Ausweis("K");
benutzer = new Student(ausweis,name,alter,admin);
}
else if (type.equalsIgnoreCase("erwachsener")) {
ausweis = new Ausweis("K");
benutzer = new Erwachsener(ausweis,name,alter,admin);
}
else if (type.equalsIgnoreCase("mitarbeiter")) {
ausweis = new Ausweis("A");
benutzer = new Mitarbeiter(ausweis,name,alter,admin);
}
else
throw new FalscheEingabeException("Falsche Eingabe");
}
else
throw new FalscheEingabeException("Falsche Eingabe");
return benutzer;
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

View File

@ -1,41 +0,0 @@
package domain.fassade;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import domain.benutzer.Benutzer;
import domain.benutzer.Erwachsener;
import domain.benutzer.Mitarbeiter;
import domain.benutzer.Student;
import domain.exceptionsKlassen.FalscheEingabeException;
class RegistrierenTest {
private BibSystem bib;
@BeforeEach
void erstelleObjekt() {
this.bib = new BibSystem();
}
@Test
void testKunde() throws FalscheEingabeException {
Benutzer benutzer = Registieren.userRegistrieren("obai", "student", 15, "nein");
// True ist
assertTrue(benutzer instanceof Student);
String bibKartenNummer = "K1000";
assertTrue(benutzer.getBibAusweis().getKartenNummer().equalsIgnoreCase(bibKartenNummer));
Benutzer erwachsener = Registieren.userRegistrieren("obai", "erwachsener", 15, "nein");
// True
assertTrue(erwachsener instanceof Erwachsener);
}
}

View File

@ -1,35 +0,0 @@
package domain.fassade;
import static org.junit.Assert.assertThrows;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import domain.exceptionsKlassen.BenutzerNichtGefundenException;
import domain.exceptionsKlassen.FalscheEingabeException;
class UserAnmeldenTest {
BibSystem fassade;
@BeforeEach
void setUp() throws Exception {
fassade = new BibSystem();
}
@Test
void testAnmelden() throws FalscheEingabeException, BenutzerNichtGefundenException {
// True => User ist Angemeldet
fassade.userRegistrieren("obai", "Student", 15, "nein");
fassade.userAnmelden("K1001");
}
@Test
void testBenutzerIstNichtImSystem() throws FalscheEingabeException, BenutzerNichtGefundenException {
// True, da Benutzer nicht im System ist
assertThrows( BenutzerNichtGefundenException.class, () -> fassade.userAnmelden("K1001") );
}
}

View File

@ -1,30 +0,0 @@
package domain.medium;
public class Brettspiel extends Medium {
private String Verlag;
public Brettspiel(String ID,String title, int erscheinungsjahr, String Verlag) {
super(ID,title, erscheinungsjahr);
if (Verlag.isEmpty())
this.Verlag = "-";
else
this.Verlag = Verlag;
}
public String getVerlag() {
return Verlag;
}
public void setVerlag(String verlag) {
Verlag = verlag;
}
@Override
public String toString() {
return "Brettspiel: " + super.toString() + " ,Verlag=" + Verlag;
}
}

View File

@ -1,30 +0,0 @@
package domain.medium;
public class Buch extends Medium {
private String autor;
public Buch(String ID,String title, int erscheinungsjahr, String autor) {
super(ID,title, erscheinungsjahr);
if (autor.isEmpty())
this.autor = "-";
else
this.autor = autor;
}
public String getAutor() {
return autor;
}
public void setAutor(String autor) {
this.autor = autor;
}
@Override
public String toString() {
return "Buch: " + super.toString() + " ,autor=" + autor;
}
}

View File

@ -1,30 +0,0 @@
package domain.medium;
import java.util.Date;
public class Cd extends Medium {
private String Künstler;
public Cd(String ID,String title, int erscheinungsjahr,String Künstler) {
super(ID,title, erscheinungsjahr);
if (Künstler.isEmpty())
this.Künstler = "-";
else
this.Künstler = Künstler;
}
public String getKünstler() {
return Künstler;
}
public void setKünstler(String künstler) {
Künstler = künstler;
}
@Override
public String toString() {
return "CD: " + super.toString() + " ,Künstler=" + Künstler;
}
}

View File

@ -1,28 +0,0 @@
package domain.medium;
public class Dvd extends Medium {
private String regisseur;
public Dvd(String ID,String title, int erscheinungsjahr,String regisseur) {
super(ID,title, erscheinungsjahr);
if (regisseur.isEmpty())
this.regisseur = "-";
else
this.regisseur = regisseur;
}
public String getRegisseur() {
return regisseur;
}
public void setRegisseur(String regisseur) {
this.regisseur = regisseur;
}
@Override
public String toString() {
return "DVD: " + super.toString() + " ,Regisseur=" + regisseur;
}
}

View File

@ -1,34 +0,0 @@
package domain.medium;
public abstract class Medium {
private String title;
private int erscheinungsjahr;
private String ID;
public Medium(String ID,String title, int erscheinungsjahr) {
super();
this.title = title;
this.erscheinungsjahr = erscheinungsjahr;
this.ID = ID;
}
public String getTitle() {
return title;
}
public int getErscheinungsjahr() {
return erscheinungsjahr;
}
public String getID() {
return ID;
}
@Override
public String toString() {
return "ID= "+ ID + " ,title=" + title + ", erscheinungsjahr=" + erscheinungsjahr;
}
}

View File

@ -1,60 +0,0 @@
package domain.medium;
public class Mediumverwalter {
private boolean verlängerbar;
private int anzahl;
private int leihdauer;
private Medium medium;
private boolean istAusgeliehen;
public Mediumverwalter( Medium medium, boolean verlängerbar, int anzahl, int leihdauer) {
super();
this.verlängerbar = verlängerbar;
this.anzahl = anzahl;
this.leihdauer = leihdauer;
this.medium = medium;
}
public boolean isVerlängerbar() {
return verlängerbar;
}
public int getAnzahl() {
return anzahl;
}
public void setAnzahl(int anzahl) {
this.anzahl = anzahl;
}
public int getLeihdauer(){
return leihdauer;
}
public Medium getMedium() {
return medium;
}
public boolean isIstAusgeliehen() {
return istAusgeliehen;
}
public void setIstAusgeliehen(boolean istAusgeliehen) {
this.istAusgeliehen = istAusgeliehen;
}
@Override
public String toString() {
return "Medium=" + medium.toString() +
" ,verlängerbar=" + verlängerbar +
", anzahl=" + anzahl +
",ist Ausgeliehen= " + istAusgeliehen +
", Leihdauer=" + leihdauer ;
}
}

View File

@ -1,31 +0,0 @@
package domain.medium;
import java.util.Date;
public class Videospiel extends Medium {
private String plattform;
public Videospiel(String ID,String title, int erscheinungsjahr, String plattform) {
super(ID,title, erscheinungsjahr);
if (plattform.isEmpty())
this.plattform = "-";
else
this.plattform = plattform;
}
public String getPlattform() {
return plattform;
}
public void setPlattform(String plattform) {
this.plattform = plattform;
}
@Override
public String toString() {
return "Videospiel: " + super.toString() + " ,Plattform=" + plattform;
}
}

View File

@ -1,14 +1,11 @@
package main;
import domain.exceptionsKlassen.*;
import tui.Tui;
public class Main {
public static void main(String[] args) throws FalscheEingabeException, MediumNichtGefundenException, BenutzerNichtAngemeldetException {
public static void main(String[] args) {
new Tui();
}
}

View File

@ -1,78 +0,0 @@
package medienHinzüfugen;
import java.util.Scanner;
import domain.exceptionsKlassen.FalscheEingabeException;
import domain.fassade.BibSystem;
public class MedienHinzufügen {
private Scanner scanner = new Scanner(System.in);
private BibSystem fassade;
public MedienHinzufügen(BibSystem fassade) {
this.fassade = fassade;
}
public void start() {
System.out.println("Willkommen im Bibliothekssystem!");
boolean beenden = false;
while (!beenden) {
System.out.println("\nBitte wählen Sie eine Aktion aus:");
System.out.println("1: Neues Medium hinzufügen");
System.out.println("2: System beenden");
System.out.print("Ihre Auswahl: ");
int auswahl = scanner.nextInt();
scanner.nextLine();
switch (auswahl) {
case 1:
mediumHinzufügen();
break;
case 2:
beenden = true;
System.out.println("Programm beendet.");
break;
default:
System.out.println("Ungültige Auswahl. Bitte erneut versuchen.");
}
}
}
private void mediumHinzufügen() {
try {
System.out.println("Geben Sie den Typ des Mediums ein (Buch, Cd, Brettspiel, Dvd, Videospiel): ");
String type = scanner.nextLine();
System.out.println("Geben Sie die ID des Mediums ein: ");
String id = scanner.nextLine();
System.out.println("Geben Sie den Titel des Mediums ein: ");
String title = scanner.nextLine();
System.out.println("Geben Sie das Erscheinungsjahr ein: ");
int erscheinungsjahr = scanner.nextInt();
scanner.nextLine();
System.out.println("Geben Sie den Macher (Autor/Regisseur/Entwickler) ein: ");
String ersteller = scanner.nextLine();
System.out.println("Ist das Medium verlängerbar? (ja/nein): ");
String verlängerbar = scanner.nextLine();
System.out.println("Geben Sie die Anzahl der verfügbaren Exemplare ein: ");
int anzahl = scanner.nextInt();
System.out.println("Geben Sie die maximale Leihdauer (in Tagen) ein: ");
int leihdauer = scanner.nextInt();
scanner.nextLine();
fassade.mediumsAufladen(type, id, title, erscheinungsjahr, ersteller, verlängerbar, anzahl, leihdauer);
System.out.println("Medium erfolgreich hinzugefügt!");
} catch (FalscheEingabeException e) {
System.out.println("Fehler: " + e.getMessage());
}
}
}

View File

@ -1,311 +1,98 @@
package tui;
import java.util.ArrayList;
import java.util.Scanner;
import domain.exceptionsKlassen.*;
import domain.fassade.BibSystem;
import medienHinzüfugen.MedienHinzufügen;
import domain.BibSystem;
import domain.ExceptionsKlassen.BenutzerNichtGefundenException;
import domain.ExceptionsKlassen.FalscheEingabeException;
public class Tui {
private BibSystem fassade;
private Scanner eingabe;
private MedienHinzufügen mediumsHinzufügen;
public Tui() {
this.fassade = new BibSystem();
this.eingabe = new Scanner(System.in);
this.mediumsHinzufügen = new MedienHinzufügen(fassade);
System.out.println("<< Willkommen in der Bibliothek >>");
try {
startBibProgramm();
} catch (Exception e) {
System.out.println("Ein unerwarteter Fehler ist aufgetreten: " + e.getMessage());
}
}
private void startBibProgramm() {
boolean programmIstAktiv = true;
while (programmIstAktiv) {
zeigeHauptmenü();
System.out.print("> ");
String aktion = eingabe.nextLine();
try {
switch (aktion) {
case "1":
registrierenProzess();
break;
case "2":
anmeldenProzess();
break;
case "3":
mediumDurchsuchenProzess();
break;
case "4":
mediumAusleihenProzess();
break;
case "5":
mediumsRückgabeProzess();
break;
case "6":
zeigeAusgelieheneGegenstände();
break;
case "7":
mediumsVerlängernProzess();
break;
case "8":
verbucheGebührenProzess();
break;
case "9":
datumÄndern();
break;
case "0":
programmIstAktiv = false;
System.out.println("Programm beendet.");
break;
default:
System.out.println("Ungültige Eingabe. Bitte wählen Sie eine gültige Option.");
}
} catch (Exception e) {
System.out.println("Fehler: " + e.getMessage());
}
}
}
private void zeigeHauptmenü() {
System.out.println("\nHauptmenü:");
System.out.println("1. Registrieren");
System.out.println("2. Anmelden");
System.out.println("3. Medien durchsuchen");
System.out.println("4. Medium ausleihen");
System.out.println("5. Medium zurückgeben");
System.out.println("6. Ausgeliehene Gegenstände anzeigen");
System.out.println("7. Leihfrist verlängern");
System.out.println("8. Gebühren verbuchen (Admin)");
System.out.println("9. Datum ändern");
System.out.println("0. Programm beenden");
}
// Aktion: 1
private void registrierenProzess() {
System.out.println("<< Registrierung >>");
System.out.print("Name: ");
String name = eingabe.nextLine();
System.out.print("Alter: ");
int alter = Integer.parseInt(eingabe.nextLine());
System.out.print("Sind Sie Schüler oder Student? (Ja/Nein): ");
String type = eingabe.nextLine();
System.out.print("Sind Sie ein Admin? (Ja/Nein): ");
String istAdmin = eingabe.nextLine();
try {
fassade.userRegistrieren(name, type, alter, istAdmin);
System.out.println("Registrierung erfolgreich!");
} catch (FalscheEingabeException e) {
System.out.println("Fehler: " + e.getMessage());
}
}
// Aktion: 2
private void anmeldenProzess() {
System.out.println("<< Anmeldung >>");
System.out.print("Kartennummer: ");
String kartennummer = eingabe.nextLine();
try {
{
double gebühren = fassade.userAnmelden(kartennummer);
System.out.println("Erfolgreich angemeldet.\n" + "Gebühren= " + gebühren);
}
} catch (BenutzerNichtGefundenException e) {
System.out.println("Fehler: " + e.getMessage());
}
}
// Aktion: 3
private void mediumDurchsuchenProzess() {
System.out.println("<< Medien durchsuchen >>");
System.out.print("Suchkriterium (z. B. Titel, Medienart, Ausgeliehen, nicht Ausgeliehen,Medien die bald wieder verügbar sind (ja/nein)): ");
String auswahl = eingabe.nextLine();
System.out.print("BibKartennummer: ");
String bibKartennummer = eingabe.nextLine();
try {
if (auswahl.equalsIgnoreCase("Medienart")) {
System.out.println("Bücher, Brettspiele, Dvds, Cds, Videospiele");
auswahl = eingabe.nextLine();
}
ArrayList<String> treffer = fassade.mediumDurchsuchen(auswahl, bibKartennummer);
treffer.forEach(System.out::println);
} catch (Exception e) {
System.out.println("Fehler: " + e.getMessage());
}
}
// Aktion: 4
private void mediumAusleihenProzess() {
System.out.println("<< Medium ausleihen >>");
System.out.print("Kartennummer: ");
String kartennummer = eingabe.nextLine();
System.out.print("Eindeutige Kennung des Mediums: ");
String eindeutigeKennung = eingabe.nextLine();
try {
double gebühren = fassade.mediumAusleihen(kartennummer, eindeutigeKennung);
System.out.println("Akteulle Gebühren= " + gebühren);
} catch (Exception e) {
System.out.println("Fehler: " + e.getMessage());
}
}
// Aktion: 5
private void mediumsRückgabeProzess() {
System.out.println("<< Medium zurückgeben >>");
System.out.print("Eindeutige Kennung des Mediums: ");
String eindeutigeKennung = eingabe.nextLine();
try {
ArrayList<String> ausgelieheneMedien = fassade.medienRückgabe(eindeutigeKennung);
System.out.println("Medium erfolgreich zurückgegeben.");
if (ausgelieheneMedien.isEmpty())
System.out.println("Sie haben keine weiteren ausgeliehenen Medien.");
else {
System.out.println("Ihre verbleibenden ausgeliehenen Medien:");
ausgelieheneMedien.forEach(System.out::println);
}
} catch (Exception e) {
System.out.println("Fehler: " + e.getMessage());
}
}
// Aktion: 6
private void zeigeAusgelieheneGegenstände() {
System.out.println("<< Ausgeliehene Gegenstände anzeigen >>");
System.out.print("BibKartennummer: ");
String bibKartennummer = eingabe.nextLine();
try {
ArrayList<String> treffer = fassade.ausgeliehenGegenstände(bibKartennummer);
if (treffer.size() == 0)
System.out.println("Sie haben keine ausgeliehen Medien");
else
treffer.forEach(System.out::println);
} catch (Exception e) {
System.out.println("Fehler: " + e.getMessage());
}
}
// Aktion: 7
private void mediumsVerlängernProzess() {
System.out.println("<< Leihfrist verlängern >>");
System.out.print("BibKartennummer: ");
String bibKartennummer = eingabe.nextLine();
System.out.print("Eindeutige Kennung des Mediums: ");
String eindeutigeKennung = eingabe.nextLine();
try {
fassade.medienVerlängern(eindeutigeKennung, bibKartennummer);
System.out.println("Leihfrist erfolgreich verlängert.");
} catch (Exception e) {
System.out.println("Fehler: " + e.getMessage());
}
}
//Aktion: 8
private void verbucheGebührenProzess() {
System.out.println("<< Gebühren verbuchen >>");
System.out.print("BibKartennummer des Admins: ");
String bibKartennummer = eingabe.nextLine();
try {
if (fassade.adminAnmelden(bibKartennummer)) {
System.out.println("Erfolgreich Angemeldt");
System.out.println("Welche Aktion: ");
System.out.println("1.Betrag verbuchen");
System.out.println("2.ausgeliehene Mediums anzeigen");
System.out.println("3.aktuelles Betrag anzeigen");
System.out.print(">");
String auswahl = eingabe.nextLine();
String userID = eingabe.nextLine();
switch (auswahl) {
case "1":
System.out.println(fassade.gebührenVerbuchen(userID));
break;
case "2":
ArrayList<String> treffer = fassade.ausgeliehenGegenstände(userID);
treffer.forEach(System.out::println);
break;
case "3":
System.out.println(fassade.getgbührenBenutzer(userID));
break;
default:
System.out.println("Falsche Eingabe");
}
}
} catch (Exception e) {
System.out.println("Fehler: " + e.getMessage());
}
}
// Aktion 9
private void datumÄndern() {
System.out.println("1.Jahresgebühren");
System.out.println("2.Ausleihefristen");
String auswahl = eingabe.nextLine();
switch (auswahl) {
case "1":
try {
System.out.println("Bibkartennummer:");
String bibkartennummer = eingabe.nextLine();
System.out.println("Datum: ");
String datum = eingabe.nextLine();
fassade.jahresGebührenBerechnen(bibkartennummer, datum);
} catch (BenutzerNichtGefundenException e) {
e.printStackTrace();
}
break;
case "2":
try {
System.out.println("Bibkartennummer:");
String bibkartennummer = eingabe.nextLine();
System.out.println("AusleihBeginn: ");
String ausleihbeginn = eingabe.nextLine();
System.out.println("AusleihEnde: ");
String ausleihEnde = eingabe.nextLine();
System.out.println("Datum vom heute: ");
String heutigesDatum = eingabe.nextLine();
System.out.println("Medium ID: ");
String mediumID = eingabe.nextLine();
fassade.datumÄndern(mediumID, ausleihEnde, ausleihEnde, heutigesDatum);
} catch (MediumNichtGefundenException e) {
System.out.println("Fehler: " + e.getMessage());
private BibSystem fassade;
private Scanner eingabe = new Scanner(System.in);
public Tui() {
this.fassade = new BibSystem();
startBibProgramm();
}
private void startBibProgramm() {
String aktion;
System.out.println("<< Willkommen in der Bibliothek >>");
boolean programmIstAktiv = true;
while(programmIstAktiv) {
System.out.println("1.Registrieren");
System.out.println("2.Anmelden");
System.out.println("3.Medien Durchsuchen");
System.out.println("4.Ausleihen eines Gegenstandes");
System.out.println("5.Rückgabe eines Gegenstandes");
System.out.println("6.Ausgeliehene Gegenstände, Fälligkeitsdaten und aufgelaufene Gebühren anzeigen");
System.out.println("7.Verlängern der Leihfrist");
System.out.println("8.Verbuchen von überfälligen Gebühren (Admin)");
System.out.println("Wählen Sie bitte eine Aktion aus: ");
System.out.print(">");
aktion = eingabe.nextLine();
switch(aktion) {
case "1":
registrierenProzess();
break;
case "2":
anmeldenProzess();
break;
}
}
}
}
}
}
private void anmeldenProzess() {
int kartennummer;
System.out.println("Geben Sie bitte die Kartennummer Ihres Bibliotheksausweises an: ");
System.out.print(">");
kartennummer = eingabe.nextInt();
try {
if (fassade.userAnmdelden(kartennummer))
System.out.println("Sie sind nun im System Angemeldet");
} catch (BenutzerNichtGefundenException e) {
System.out.println(e.getMessage());
}
startBibProgramm();
}
private void registrierenProzess() {
boolean registrierenProzess = true;
String name;
int alter;
String type;
String istAdmin;
while (registrierenProzess) {
System.out.println("Name: ");
System.out.print(">");
name = eingabe.nextLine();
System.out.println("Alter: ");
System.out.print(">");
alter = eingabe.nextInt();
System.out.println("sind Sie Schüler oder Student: Ja/Nein");
System.out.print(">");
type = eingabe.nextLine();
System.out.println("Admin: Ja/Nein");
System.out.print(">");
istAdmin = eingabe.nextLine();
try {
fassade.userRegistrieren(name, type, alter, istAdmin);
startBibProgramm();
} catch (FalscheEingabeException e) {
System.out.println(e.getMessage());
continue;
}
}
}
}

View File

@ -1,27 +1,11 @@
Projektstruktur aufsetzen:
ich werde erst das Git-Repository und die Grundstruktur erstellen.
werde danach die Hauptverzeichnisse und grundlegende Klassen erstellen.
Ich werde in meiner Hauptverzeichnisse drei Packages anlegen:
1. domain für das Geschäftslogik
2. Tui texteulle user Interface Benutzeroberfläche (UI) und Controller-Logik
- die BibliotheksUI-Klasse, die die Interaktion mit dem Benutzer ermöglicht.
- hierbei werde ich Methoden für Anmeldung, Medienausleihe, Medienrückgabe, Verlängerung, und Gebührenerfassung erstellen
3. Main main klasse damit ich mein Software ausführe
Anforderungsanalyse:
Für das Bibliotheksverwaltungssystem werde ich zunächst eine gründliche Analyse der Anforderungen durchführen.
Hierbei werde ich festlegen, welche Funktionen und Ziele die BibSoftware erfüllen soll.
danach werde ich festlegen, welche Klassen ich für mein Software benötige
- Entwickle die abstrakte Klasse Medium mit Attributen und Methoden.
- Implementiere spezifische Medienklassen (Buch, DVD, CD, Brettspiel, Videospiel).
- Erstelle eine abstrakte Klasse Benutzer und spezifische Benutzerklassen (Erwachsener, Schüler, Student).
- Implementiere die AdminBenutzer-Klasse für spezielle Verwaltungsfunktionen.
Hierbei werde ich festlegen, welche Funktionen und Ziele die Software erfüllen soll. Ein wesentlicher Aspekt ist auch,
die unterschiedlichen Akteure zu identifizieren, die die Software verwenden werden, um ihre Bedürfnisse und Anforderungen zu berücksichtigen.
Design und Datenstrukturentscheidung:
In diesem Schritt plane und entwerfe ich die grundlegende Klassenstruktur.
Dazu werde ich ermitteln, wie viele Klassen benötigt werden und welche Attribute und Methoden jede Klasse enthalten soll.
ich werde auch die Beziehungen zwischen den Klassen definieren(z.b Vererbung, Assoziation, etc..)