Compare commits

..

No commits in common. "main" and "HinzufügenVonMedien" have entirely different histories.

47 changed files with 635 additions and 907 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

View File

@ -1,12 +1,9 @@
<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.4">
<diagram name="Seite-1" id="xkmZ0K6vz5A5_BixXH1Q"> <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="2714" dy="1416" 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> <root>
<mxCell id="0" /> <mxCell id="0" />
<mxCell id="1" parent="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"> <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"> <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" /> <mxGeometry x="90" y="280" width="300" height="220" as="geometry" />
@ -21,6 +18,9 @@
<mxCell id="ydUtLetK26WXyeJ3qCt--5" value="Bib Ui" style="html=1;whiteSpace=wrap;" parent="1" vertex="1"> <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" /> <mxGeometry x="160" y="390" width="110" height="50" as="geometry" />
</mxCell> </mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--6" value="&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;" style="shape=folder;fontStyle=1;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="756" 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;" parent="1" vertex="1"> <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" /> <mxGeometry x="140" y="600" width="240" height="170" as="geometry" />
</mxCell> </mxCell>
@ -55,109 +55,144 @@
<mxGeometry x="130" y="600" width="70" height="20" as="geometry" /> <mxGeometry x="130" y="600" width="70" height="20" as="geometry" />
</mxCell> </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"> <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" /> <mxGeometry x="757" y="270" width="70" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--29" value="registrieren" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <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" /> <mxGeometry x="450" y="300" width="60" height="30" as="geometry" />
</mxCell> </mxCell>
<mxCell id="bG3rtPKbTOfA4ERHpklN-1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.25;exitDx=0;exitDy=0;" parent="1" source="ydUtLetK26WXyeJ3qCt--30" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="430" y="378" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--30" value="Medium ausleihen" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="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;" parent="1" vertex="1"> <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" /> <mxGeometry x="430" y="440" width="100" height="30" as="geometry" />
</mxCell> </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"> <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" /> <mxGeometry x="450" y="512" width="60" height="30" as="geometry" />
</mxCell> </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"> <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" /> <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;" parent="1" vertex="1">
<mxGeometry x="460" y="690" width="60" height="30" as="geometry" />
</mxCell> </mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--38" value="" style="verticalLabelPosition=bottom;verticalAlign=top;html=1;shape=mxgraph.flowchart.on-page_reference;" parent="1" vertex="1"> <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" /> <mxGeometry x="580" y="690" width="60" height="60" as="geometry" />
</mxCell> </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"> <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" /> <mxGeometry x="1100" y="720" width="180" height="130" as="geometry" />
</mxCell> </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"> <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;" parent="ydUtLetK26WXyeJ3qCt--41" vertex="1">
<mxGeometry y="26" width="180" height="84" as="geometry" /> <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;" parent="ydUtLetK26WXyeJ3qCt--41" vertex="1">
<mxGeometry y="52" width="180" height="26" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--44" value="- erscheinungsjahr: date&lt;div&gt;&lt;span style=&quot;background-color: initial; 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;" parent="ydUtLetK26WXyeJ3qCt--41" vertex="1">
<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;" parent="1" vertex="1">
<mxGeometry x="890" y="954" width="140" height="66" 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;" parent="1" vertex="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;" parent="1" vertex="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;" parent="1" vertex="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;" parent="1" vertex="1">
<mxGeometry x="1570" y="954" width="140" height="52" as="geometry" />
</mxCell> </mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--79" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1"> <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"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1560" y="864" as="sourcePoint" /> <mxPoint x="960" y="954" as="sourcePoint" />
<mxPoint x="1560" y="814" as="targetPoint" /> <mxPoint x="960" y="904" as="targetPoint" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--80" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1"> <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"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1560" y="814" as="sourcePoint" /> <mxPoint x="960" y="904" as="sourcePoint" />
<mxPoint x="2250" y="814" as="targetPoint" /> <mxPoint x="1650" y="904" as="targetPoint" />
</mxGeometry> </mxGeometry>
</mxCell> </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"> <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" source="ydUtLetK26WXyeJ3qCt--62" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="2251.7599999999998" y="864.156" as="sourcePoint" /> <mxPoint x="1650" y="944" as="sourcePoint" />
<mxPoint x="2250" y="814" as="targetPoint" /> <mxPoint x="1650" y="904" as="targetPoint" />
</mxGeometry> </mxGeometry>
</mxCell> </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"> <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;" parent="1" target="ydUtLetK26WXyeJ3qCt--44" edge="1">
<mxGeometry width="160" relative="1" as="geometry"> <mxGeometry width="160" relative="1" as="geometry">
<mxPoint x="1770" y="814" as="sourcePoint" /> <mxPoint x="1170" y="904" as="sourcePoint" />
<mxPoint x="1771.8199999999997" y="753.8760000000002" as="targetPoint" /> <mxPoint x="1330" y="904" as="targetPoint" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--84" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1"> <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"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1720" y="864" as="sourcePoint" /> <mxPoint x="1120" y="954" as="sourcePoint" />
<mxPoint x="1720" y="814" as="targetPoint" /> <mxPoint x="1120" y="904" as="targetPoint" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--86" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1"> <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"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1909.45" y="864" as="sourcePoint" /> <mxPoint x="1309.45" y="954" as="sourcePoint" />
<mxPoint x="1909.45" y="814" as="targetPoint" /> <mxPoint x="1309.45" y="904" as="targetPoint" />
<Array as="points"> <Array as="points">
<mxPoint x="1909.45" y="834" /> <mxPoint x="1309.45" y="924" />
</Array> </Array>
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--87" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1"> <mxCell id="ydUtLetK26WXyeJ3qCt--87" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="2070" y="864" as="sourcePoint" /> <mxPoint x="1470" y="954" as="sourcePoint" />
<mxPoint x="2070" y="814" as="targetPoint" /> <mxPoint x="1470" y="904" as="targetPoint" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--88" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1"> <mxCell id="ydUtLetK26WXyeJ3qCt--88" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="2250" y="864" as="sourcePoint" /> <mxPoint x="1650" y="954" as="sourcePoint" />
<mxPoint x="2250" y="814" as="targetPoint" /> <mxPoint x="1650" y="904" as="targetPoint" />
</mxGeometry> </mxGeometry>
</mxCell> </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"> <mxCell id="a17Tyx0-SzZjYovz-tY2-17" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="ydUtLetK26WXyeJ3qCt--117" target="a17Tyx0-SzZjYovz-tY2-10">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="a17Tyx0-SzZjYovz-tY2-19" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.75;entryDx=0;entryDy=0;" edge="1" parent="1" source="ydUtLetK26WXyeJ3qCt--117" target="a17Tyx0-SzZjYovz-tY2-5">
<mxGeometry relative="1" as="geometry"> <mxGeometry relative="1" as="geometry">
<mxPoint x="790" y="364" as="sourcePoint" /> <Array as="points">
<mxPoint x="880" y="572" />
</Array>
</mxGeometry> </mxGeometry>
</mxCell> </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"> <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;" parent="1" vertex="1">
<mxGeometry relative="1" as="geometry"> <mxGeometry x="790" y="338" width="180" height="52" as="geometry" />
<mxPoint x="790" y="364" as="sourcePoint" />
</mxGeometry>
</mxCell> </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"> <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" source="ydUtLetK26WXyeJ3qCt--117" target="ydUtLetK26WXyeJ3qCt--10" edge="1">
<mxGeometry relative="1" as="geometry"> <mxGeometry relative="1" as="geometry" />
<mxPoint x="790" y="364" as="sourcePoint" />
</mxGeometry>
</mxCell> </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"> <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" source="ydUtLetK26WXyeJ3qCt--117" target="ydUtLetK26WXyeJ3qCt--11" edge="1">
<mxGeometry relative="1" as="geometry"> <mxGeometry relative="1" as="geometry" />
<mxPoint x="790" y="364" as="sourcePoint" />
</mxGeometry>
</mxCell> </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"> <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" source="ydUtLetK26WXyeJ3qCt--117" target="ydUtLetK26WXyeJ3qCt--12" edge="1">
<mxGeometry relative="1" as="geometry"> <mxGeometry relative="1" as="geometry" />
<mxPoint x="790" y="364" as="sourcePoint" />
</mxGeometry>
</mxCell> </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"> <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" source="ydUtLetK26WXyeJ3qCt--117" target="ydUtLetK26WXyeJ3qCt--13" edge="1">
<mxGeometry relative="1" as="geometry"> <mxGeometry relative="1" as="geometry" />
<mxPoint x="790" y="364" as="sourcePoint" /> </mxCell>
</mxGeometry> <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" source="ydUtLetK26WXyeJ3qCt--117" target="ydUtLetK26WXyeJ3qCt--14" edge="1">
<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;" parent="1" source="ydUtLetK26WXyeJ3qCt--117" target="ydUtLetK26WXyeJ3qCt--38" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell> </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--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">
<mxGeometry relative="1" as="geometry"> <mxGeometry relative="1" as="geometry">
@ -208,281 +243,121 @@
</mxGeometry> </mxGeometry>
</mxCell> </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"> <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" /> <mxGeometry x="1280" y="340" width="160" height="114" as="geometry" />
</mxCell> </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"> <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;" parent="ydUtLetK26WXyeJ3qCt--158" vertex="1">
<mxGeometry y="26" width="310" height="84" as="geometry" /> <mxGeometry y="26" width="160" height="54" as="geometry" />
</mxCell> </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"> <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" /> <mxGeometry y="80" width="160" height="8" as="geometry" />
</mxCell>
<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;" parent="ydUtLetK26WXyeJ3qCt--158" vertex="1">
<mxGeometry y="88" width="160" height="26" as="geometry" />
</mxCell> </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"> <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" /> <mxGeometry x="1300" y="528" width="160" height="114" as="geometry" />
</mxCell> </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--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;" parent="ydUtLetK26WXyeJ3qCt--162" vertex="1">
<mxGeometry y="26" width="160" height="54" as="geometry" /> <mxGeometry y="26" width="160" height="54" as="geometry" />
</mxCell> </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--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">
<mxGeometry y="80" width="160" height="8" as="geometry" /> <mxGeometry y="80" width="160" height="8" as="geometry" />
</mxCell> </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"> <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;" parent="ydUtLetK26WXyeJ3qCt--162" vertex="1">
<mxGeometry y="88" width="160" height="2" as="geometry" /> <mxGeometry y="88" width="160" height="26" as="geometry" />
</mxCell> </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"> <mxCell id="ydUtLetK26WXyeJ3qCt--190" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;fontFamily=Helvetica;fontSize=12;fontColor=default;fontStyle=1;" parent="1" source="ydUtLetK26WXyeJ3qCt--175" target="ydUtLetK26WXyeJ3qCt--163" edge="1">
<mxGeometry relative="1" as="geometry"> <mxGeometry relative="1" as="geometry" />
<Array as="points">
<mxPoint x="1300" y="1250" />
</Array>
</mxGeometry>
</mxCell> </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"> <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" /> <mxGeometry x="1560" y="310" width="260" height="320" as="geometry" />
</mxCell> </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--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;span style=&quot;font-weight: normal;&quot;&gt;- angemeldet: 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;" parent="ydUtLetK26WXyeJ3qCt--175" vertex="1">
<mxGeometry y="37" width="260" height="163" as="geometry" /> <mxGeometry y="37" width="260" height="163" as="geometry" />
</mxCell> </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;" parent="ydUtLetK26WXyeJ3qCt--175" vertex="1">
<mxGeometry y="200" width="260" height="8" as="geometry" /> <mxGeometry y="200" width="260" height="8" as="geometry" />
</mxCell> </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;" parent="ydUtLetK26WXyeJ3qCt--175" vertex="1">
<mxGeometry y="208" width="260" height="112" as="geometry" /> <mxGeometry y="208" width="260" height="112" as="geometry" />
</mxCell> </mxCell>
<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;" parent="1" vertex="1">
<mxGeometry x="1450" y="750" width="160" height="96" as="geometry" />
</mxCell>
<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;" parent="ydUtLetK26WXyeJ3qCt--179" vertex="1">
<mxGeometry y="36" width="160" height="26" as="geometry" />
</mxCell>
<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;" parent="ydUtLetK26WXyeJ3qCt--179" vertex="1">
<mxGeometry y="62" width="160" height="8" as="geometry" />
</mxCell>
<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;" parent="ydUtLetK26WXyeJ3qCt--179" vertex="1">
<mxGeometry y="70" width="160" height="26" as="geometry" />
</mxCell>
<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;" parent="1" vertex="1">
<mxGeometry x="1670" y="750" width="160" height="110" as="geometry" />
</mxCell>
<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;" parent="ydUtLetK26WXyeJ3qCt--183" vertex="1">
<mxGeometry y="36" width="160" height="26" as="geometry" />
</mxCell>
<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;" parent="ydUtLetK26WXyeJ3qCt--183" vertex="1">
<mxGeometry y="62" width="160" height="48" as="geometry" />
</mxCell>
<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;" parent="1" vertex="1">
<mxGeometry x="1500" y="430" width="60" height="30" as="geometry" />
</mxCell>
<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;" parent="1" vertex="1">
<mxGeometry x="1459" y="472" width="60" height="40" as="geometry" />
</mxCell>
<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;" parent="1" vertex="1">
<mxGeometry x="1450" y="550" width="60" height="30" 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"> <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"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1429" y="1450" as="sourcePoint" /> <mxPoint x="1519" y="750" as="sourcePoint" />
<mxPoint x="1429" y="1400" as="targetPoint" /> <mxPoint x="1519" y="700" as="targetPoint" />
<Array as="points"> <Array as="points">
<mxPoint x="1430" y="1430" /> <mxPoint x="1520" y="730" />
</Array> </Array>
</mxGeometry> </mxGeometry>
</mxCell> </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"> <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"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1629" y="1450" as="sourcePoint" /> <mxPoint x="1719" y="750" as="sourcePoint" />
<mxPoint x="1629" y="1400" as="targetPoint" /> <mxPoint x="1719" y="700" as="targetPoint" />
</mxGeometry> </mxGeometry>
</mxCell> </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"> <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"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1429" y="1400" as="sourcePoint" /> <mxPoint x="1519" y="700" as="sourcePoint" />
<mxPoint x="1629" y="1400" as="targetPoint" /> <mxPoint x="1719" y="700" as="targetPoint" />
</mxGeometry> </mxGeometry>
</mxCell> </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"> <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"> <mxGeometry width="160" relative="1" as="geometry">
<mxPoint x="1559" y="1400" as="sourcePoint" /> <mxPoint x="1649" y="700" as="sourcePoint" />
<mxPoint x="1540" y="1380" as="targetPoint" /> <mxPoint x="1630" y="680" as="targetPoint" />
</mxGeometry> </mxGeometry>
</mxCell> </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"> <mxCell id="a17Tyx0-SzZjYovz-tY2-9" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="a17Tyx0-SzZjYovz-tY2-5" target="ydUtLetK26WXyeJ3qCt--41">
<mxGeometry x="790" y="330" width="490" height="280" 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>
<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>
<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>
<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>
<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>
<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" /> <mxGeometry relative="1" as="geometry" />
</mxCell> </mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-21" value="1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="a17Tyx0-SzZjYovz-tY2-5" 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;" vertex="1" parent="1">
<mxGeometry x="1640" y="518" width="60" height="30" as="geometry" /> <mxGeometry x="1040" y="546" width="160" height="34" as="geometry" />
</mxCell> </mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-22" value="1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="a17Tyx0-SzZjYovz-tY2-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="a17Tyx0-SzZjYovz-tY2-5">
<mxGeometry x="1750" y="610" width="60" height="30" as="geometry" /> <mxGeometry y="26" width="160" height="8" as="geometry" />
</mxCell> </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"> <mxCell id="a17Tyx0-SzZjYovz-tY2-10" value="AusleiheSystem" 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="1490" y="864" width="140" height="52" as="geometry" /> <mxGeometry x="1020" y="368" width="160" height="34" as="geometry" />
</mxCell> </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"> <mxCell id="a17Tyx0-SzZjYovz-tY2-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;" vertex="1" parent="a17Tyx0-SzZjYovz-tY2-10">
<mxGeometry y="26" width="140" height="26" as="geometry" /> <mxGeometry y="26" width="160" height="8" as="geometry" />
</mxCell> </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"> <mxCell id="a17Tyx0-SzZjYovz-tY2-14" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.025;entryY=0.151;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" target="ydUtLetK26WXyeJ3qCt--158">
<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">
<mxGeometry relative="1" as="geometry"> <mxGeometry relative="1" as="geometry">
<Array as="points"> <mxPoint x="1180" y="407" as="sourcePoint" />
<mxPoint x="770" y="470" />
<mxPoint x="770" y="1102" />
</Array>
</mxGeometry> </mxGeometry>
</mxCell> </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>
<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>
<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">
<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> </root>
</mxGraphModel> </mxGraphModel>
</diagram> </diagram>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 298 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

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

@ -1,8 +1,8 @@
package medienHinzüfugen; package MedienHinzüfugen;
import java.util.Scanner; import java.util.Scanner;
import domain.exceptionsKlassen.FalscheEingabeException; import domain.ExceptionsKlassen.FalscheEingabeException;
import domain.fassade.BibSystem; import domain.fassade.BibSystem;
public class MedienHinzufügen { public class MedienHinzufügen {

View File

@ -1,10 +1,10 @@
package domain.ausleihSystem; package domain.AusleiheSystem;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.Date; import java.util.Date;
import domain.benutzer.Benutzer; import domain.Benutzer.Benutzer;
import domain.medium.Mediumverwalter; import domain.Medium.Mediumverwalter;
public class Ausleihe { public class Ausleihe {

View File

@ -1,4 +1,4 @@
package domain.ausleihSystem; package domain.AusleiheSystem;
import static org.junit.jupiter.api.Assertions.*; import static org.junit.jupiter.api.Assertions.*;
@ -19,10 +19,8 @@ class AusleiheJTest {
@Test @Test
void test() throws Exception { void test() throws Exception {
bib.userRegistrieren("obai", "student", 15, "nein"); bib.userRegistrieren("obai", "student", 15, "nein");
bib.userAnmelden("K1001"); bib.userAnmdelden("K1000");
double userGebühren = bib.mediumAusleihen("K1001", "B001"); bib.mediumAusleihen("K1000", "B001");
assertEquals(0.0,userGebühren);
} }
} }

View File

@ -1,23 +1,22 @@
package domain.ausleihSystem; package domain.AusleiheSystem;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.temporal.ChronoUnit; import java.time.temporal.ChronoUnit;
import java.util.*; import java.util.*;
import domain.benutzer.Benutzer; import domain.Benutzer.Benutzer;
import domain.exceptionsKlassen.MediumNichtGefundenException; import domain.ExceptionsKlassen.MediumNichtGefundenException;
import domain.medium.*; import domain.Medium.*;
public class AusleiheSystem { public class AusleiheSystem {
private HashMap<String, Mediumverwalter> medien; private HashMap<String, Mediumverwalter> medien;
private LocalDate ausleiheBeginn, ausleiheEnde; private LocalDate ausleiheBeginn, ausleiheEnde;
public AusleiheSystem(HashMap<String, Mediumverwalter> medien) { public AusleiheSystem(HashMap<String, Mediumverwalter> medien) {
this.medien = medien; this.medien = medien;
} }
public Ausleihe mediumAusleihen(Benutzer benutzer, String eindeutigenummer) throws MediumNichtGefundenException { public Ausleihe mediumAusleihen(Benutzer benutzer, String eindeutigenummer) throws MediumNichtGefundenException {
Mediumverwalter mediumAusleihen = findMedium(eindeutigenummer); Mediumverwalter mediumAusleihen = findMedium(eindeutigenummer);
@ -38,14 +37,13 @@ public class AusleiheSystem {
public ArrayList<String> mediumRückgabe(ArrayList<Ausleihe> ausleihe, String eindeutigeKennung) { public ArrayList<String> mediumRückgabe(ArrayList<Ausleihe> ausleihe, String eindeutigeKennung) {
Ausleihe ausgelieheneMedium = ausleihe.stream() Ausleihe ausgelieheneMedium = ausleihe.stream()
.filter(k -> k.getMediumverwalter().getMedium().getID().equalsIgnoreCase(eindeutigeKennung)) .filter(k -> k.getMediumverwalter().getMedium().getID().equalsIgnoreCase(eindeutigeKennung)).findFirst()
.findFirst()
.orElse(null); .orElse(null);
ArrayList<String> ausgeliehenMedien = new ArrayList<>(); ArrayList<String> ausgeliehenMedien = new ArrayList<>();
LocalDate heutigesDatum; LocalDate heutigesDatum;
Benutzer bibBenutzer = ausgelieheneMedium.getBenutzer(); Benutzer bibBenutzer = ausgelieheneMedium.getBenutzer();
if (ausgelieheneMedium != null) { if (ausgelieheneMedium != null) {
heutigesDatum = LocalDate.now(); heutigesDatum = LocalDate.now();
if (heutigesDatum.isAfter(ausgelieheneMedium.getAusleiheEnde())) { if (heutigesDatum.isAfter(ausgelieheneMedium.getAusleiheEnde())) {
@ -75,35 +73,39 @@ public class AusleiheSystem {
return ausgeliehenMedien; return ausgeliehenMedien;
} }
public double SimulieremediumRückgabe(ArrayList<Ausleihe> ausleihe, String eindeutigeKennung, String ausleiheBeginn, String ausleiheEnde,String datum) throws MediumNichtGefundenException { public double SimulieremediumRückgabe(ArrayList<Ausleihe> ausleihe, String eindeutigeKennung, String datum)
throws MediumNichtGefundenException {
Ausleihe ausgelieheneMedium = ausleihe.stream() Ausleihe ausgelieheneMedium = ausleihe.stream()
.filter(k -> k.getMediumverwalter().getMedium().getID().equalsIgnoreCase(eindeutigeKennung)).findFirst() .filter(k -> k.getMediumverwalter().getMedium().getID().equalsIgnoreCase(eindeutigeKennung)).findFirst()
.orElse(null); .orElse(null);
LocalDate beginn = LocalDate.parse(ausleiheBeginn); LocalDate heutigesDatum;
LocalDate ende = LocalDate.parse(ausleiheEnde); LocalDate testDatum = LocalDate.parse(datum);
LocalDate heutigesDatum = LocalDate.parse(datum);
Benutzer bibBenutzer = ausgelieheneMedium.getBenutzer(); Benutzer bibBenutzer = ausgelieheneMedium.getBenutzer();
double gebühren = 0.0;
ausgelieheneMedium.setAusleiheBeginn(beginn); if (ausgelieheneMedium != null) {
ausgelieheneMedium.setAusleiheEnde(ende); 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 { if (heutigesDatum.isAfter(testDatum)) {
gebühren = (7 * 1.0); long überfälligeTage = testDatum.until(heutigesDatum, ChronoUnit.DAYS);
gebühren += ((überfälligeTage - 7) * 2.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();
} }
bibBenutzer.setGebühren(bibBenutzer.getGebühren() + gebühren); } else
} throw new MediumNichtGefundenException("Das Medium wurde nicht gefunden");
return bibBenutzer.getGebühren(); return gebühren;
} }
public boolean medienVerlängern(Benutzer benutzer, String eindeutigeKennung) throws MediumNichtGefundenException { public boolean medienVerlängern(Benutzer benutzer, String eindeutigeKennung) throws MediumNichtGefundenException {

View File

@ -0,0 +1,32 @@
package domain.AusleiheSystem;
import java.util.ArrayList;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
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.userAnmdelden("K1001");
bib.mediumAusleihen("K1001", "B001");
bib.mediumAusleihen("K1001", "BG001");
ArrayList<String> test = bib.medienRückgabe("B001");
if (test.size() == 0)
System.out.println("kein Mehr");
test.forEach(System.out::println);
}
}

View File

@ -1,4 +1,4 @@
package domain.ausleihSystem; package domain.AusleiheSystem;
import static org.junit.jupiter.api.Assertions.*; import static org.junit.jupiter.api.Assertions.*;
@ -19,7 +19,7 @@ class MediumVerlängernTest {
@Test @Test
void test() throws Exception { void test() throws Exception {
bib.userRegistrieren("obai", "student", 15, "nein"); bib.userRegistrieren("obai", "student", 15, "nein");
bib.userAnmelden("K1001"); bib.userAnmdelden("K1001");
bib.mediumAusleihen("K1001", "B001"); bib.mediumAusleihen("K1001", "B001");
assertTrue(bib.medienVerlängern("B001", "K1001")); assertTrue(bib.medienVerlängern("B001", "K1001"));
} }

View File

@ -1,4 +1,4 @@
package domain.benutzer; package domain.Benutzer;
public class Ausweis { public class Ausweis {
private String kartennummer; private String kartennummer;

View File

@ -1,9 +1,8 @@
package domain.benutzer; package domain.Benutzer;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.ArrayList; import java.util.ArrayList;
import domain.AusleiheSystem.Ausleihe;
import domain.ausleihSystem.Ausleihe;
public abstract class Benutzer { public abstract class Benutzer {
@ -76,14 +75,12 @@ public abstract class Benutzer {
return angemeldet; return angemeldet;
} }
public boolean anmelden() { public void anmelden() {
this.angemeldet = true; this.angemeldet = true;
return this.angemeldet;
} }
public boolean abmelden() { public void abmelden() {
this.angemeldet = false ; this.angemeldet = false ;
return this.angemeldet;
} }
@ -103,32 +100,32 @@ public abstract class Benutzer {
this.anmeldebeginn = anmeldebeginn; this.anmeldebeginn = anmeldebeginn;
} }
public double jahresgebühren() {
LocalDate nacheinemJahr = anmeldebeginn.plusYears(1);
if (LocalDate.now().isAfter(nacheinemJahr)) {
this.gebühren += getJahresgebühr();
anmeldebeginn = nacheinemJahr;
return this.gebühren;
}
return 0.0;
}
public double jahresgebühren(String datum) { // Für Testate
// Falls ein Testdatum angegeben ist public double simuliereJahresGebühren(String anmeldeBeginn) {
if (!datum.isEmpty()) { LocalDate aktuellesDatum = LocalDate.now();
LocalDate aktuellesDatum = LocalDate.parse(datum); LocalDate test = LocalDate.parse(anmeldeBeginn);
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 while (test.isBefore(aktuellesDatum)) {
} this.gebühren += getJahresgebühr();
else { test = test.plusYears(1);
LocalDate nachEinemJahr = this.anmeldebeginn.plusYears(1);
while (LocalDate.now().isAfter(nachEinemJahr)) {
this.gebühren += getJahresgebühren();
this.anmeldebeginn = nachEinemJahr;
nachEinemJahr = this.anmeldebeginn.plusYears(1);
}
} }
anmeldebeginn = test;
return this.gebühren; return this.gebühren;
} }
public abstract double getJahresgebühr();
public abstract double getJahresgebühren();
@Override @Override
public String toString() { public String toString() {

View File

@ -0,0 +1,16 @@
package domain.Benutzer;
import java.time.LocalDate;
public class Kunde extends Benutzer {
public Kunde(Ausweis bibAusweis, String name, int alter, boolean istStudent) {
super(bibAusweis, name, alter, istStudent);
}
@Override
public double getJahresgebühr() {
return 25.0;
}
}

View File

@ -1,4 +1,4 @@
package domain.benutzer; package domain.Benutzer;
public class Mitarbeiter extends Benutzer { public class Mitarbeiter extends Benutzer {
@ -7,9 +7,9 @@ public class Mitarbeiter extends Benutzer {
} }
@Override @Override
public double getJahresgebühren() { public double getJahresgebühr() {
return 0.0; return 50.0;
} }
public void gebührVerbuchen(Benutzer benutzer) { public void gebührVerbuchen(Benutzer benutzer) {

View File

@ -1,4 +1,4 @@
package domain.bibliothekskatalog; package domain.Bibliothekskatalog;
import static org.junit.jupiter.api.Assertions.*; import static org.junit.jupiter.api.Assertions.*;
@ -8,13 +8,13 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import domain.benutzer.Benutzer; import domain.Benutzer.Benutzer;
import domain.exceptionsKlassen.BenutzerNichtAngemeldetException; import domain.ExceptionsKlassen.BenutzerNichtAngemeldetException;
import domain.exceptionsKlassen.BenutzerNichtGefundenException; import domain.ExceptionsKlassen.BenutzerNichtGefundenException;
import domain.exceptionsKlassen.FalscheEingabeException; import domain.ExceptionsKlassen.FalscheEingabeException;
import domain.exceptionsKlassen.MediumNichtGefundenException; import domain.ExceptionsKlassen.MediumNichtGefundenException;
import domain.UserRegistieren.Registieren;
import domain.fassade.BibSystem; import domain.fassade.BibSystem;
import domain.fassade.Registieren;
class MedienSuchenTest { class MedienSuchenTest {
@ -24,27 +24,27 @@ private BibSystem fassade;
void erstelleObjekt() throws FalscheEingabeException, BenutzerNichtGefundenException { void erstelleObjekt() throws FalscheEingabeException, BenutzerNichtGefundenException {
this.fassade = new BibSystem(); this.fassade = new BibSystem();
fassade.userRegistrieren("obai", "student", 15, "nein"); fassade.userRegistrieren("obai", "student", 15, "nein");
fassade.userAnmelden("K1001"); fassade.userAnmdelden("K1000");
} }
@Disabled @Disabled
void testMedienSuchenNachTitle()throws MediumNichtGefundenException, FalscheEingabeException, BenutzerNichtAngemeldetException, BenutzerNichtGefundenException { void testMedienSuchenNachTitle()throws MediumNichtGefundenException, FalscheEingabeException, BenutzerNichtAngemeldetException {
ArrayList<String> nichtAusgeliehen = fassade.mediumDurchsuchen("Effektives Java Programmieren", "K1001"); ArrayList<String> nichtAusgeliehen = fassade.mediumDurchsuchen("Effektives Java Programmieren", "K1000");
nichtAusgeliehen.forEach(System.out::println); nichtAusgeliehen.forEach(System.out::println);
} }
@Disabled
void testMedienSuchenNachMedienart()throws MediumNichtGefundenException, FalscheEingabeException, BenutzerNichtAngemeldetException {
ArrayList<String> nichtAusgeliehen = fassade.mediumDurchsuchen("Videospiele", "K1000");
nichtAusgeliehen.forEach(System.out::println);
}
@Test @Test
void testMedienSuchenNachMedienart()throws MediumNichtGefundenException, FalscheEingabeException, BenutzerNichtAngemeldetException, BenutzerNichtGefundenException { void testMedienSuchenNachausgeliehen()throws MediumNichtGefundenException, FalscheEingabeException, BenutzerNichtAngemeldetException {
ArrayList<String> nichtAusgeliehen = fassade.mediumDurchsuchen("Videospiele", "K1001"); ArrayList<String> nichtAusgeliehen = fassade.mediumDurchsuchen("ausgeliehen", "K1000");
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); nichtAusgeliehen.forEach(System.out::println);
} }

View File

@ -0,0 +1,68 @@
package domain.Bibliothekskatalog;
import java.util.*;
import java.util.stream.Collectors;
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) {
switch(medienart) {
case "Bücher":
return medien.entrySet().stream()
.filter(t -> t.getValue().getMedium() instanceof Buch)
.map(t -> ((Buch)t))
.map(t -> "Eindutige Kennung= " + t.toString()).collect(Collectors.toCollection(ArrayList::new));
case "Brettspiele":
return medien.entrySet().stream()
.filter(t -> t.getValue().getMedium() instanceof Brettspiel)
.map(t -> ((Brettspiel)t))
.map(t -> "Eindutige Kennung= " + t.toString()).collect(Collectors.toCollection(ArrayList::new));
case "Dvds":
return medien.entrySet().stream()
.filter(t -> t.getValue().getMedium() instanceof Dvd)
.map(t -> ((Dvd)t))
.map(t -> "Eindutige Kennung= " + t.toString()).collect(Collectors.toCollection(ArrayList::new));
case "Cds":
return medien.entrySet().stream()
.filter(t -> t.getValue().getMedium() instanceof Cd)
.map(t -> ((Cd)t))
.map(t -> "Eindutige Kennung= " + t.toString()).collect(Collectors.toCollection(ArrayList::new));
case "Videospiele":
return medien.entrySet().stream()
.filter(t -> t.getValue().getMedium() instanceof Videospiel)
.map(t -> ((Videospiel)t))
.map(t -> "Eindutige Kennung= " + t.toString()).collect(Collectors.toCollection(ArrayList::new));
default:
return null;
}
}
}

View File

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

View File

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

View File

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

View File

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

View File

@ -1,8 +1,7 @@
package domain.medium; package domain.Medium;
public class Brettspiel extends Medium { public class Brettspiel extends Medium {
private String Verlag; private String Verlag;
public Brettspiel(String ID,String title, int erscheinungsjahr, String Verlag) { public Brettspiel(String ID,String title, int erscheinungsjahr, String Verlag) {

View File

@ -1,4 +1,4 @@
package domain.medium; package domain.Medium;
public class Buch extends Medium { public class Buch extends Medium {

View File

@ -1,11 +1,10 @@
package domain.medium; package domain.Medium;
import java.util.Date; import java.util.Date;
public class Cd extends Medium { public class Cd extends Medium {
private String Künstler; private String Künstler;
public Cd(String ID,String title, int erscheinungsjahr,String Künstler) { public Cd(String ID,String title, int erscheinungsjahr,String Künstler) {
super(ID,title, erscheinungsjahr); super(ID,title, erscheinungsjahr);

View File

@ -1,4 +1,4 @@
package domain.medium; package domain.Medium;
public class Dvd extends Medium { public class Dvd extends Medium {

View File

@ -1,4 +1,4 @@
package domain.medium; package domain.Medium;
public abstract class Medium { public abstract class Medium {

View File

@ -1,4 +1,4 @@
package domain.medium; package domain.Medium;
public class Mediumverwalter { public class Mediumverwalter {

View File

@ -1,4 +1,4 @@
package domain.medium; package domain.Medium;
import java.util.Date; import java.util.Date;

View File

@ -0,0 +1,26 @@
package domain.UserRegistieren;
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() && (type.equalsIgnoreCase("schüler") || type.equalsIgnoreCase("student")) && istAdmin.equalsIgnoreCase("nein")) {
ausweis = new Ausweis("K");
benutzer = new Kunde(ausweis,name,alter,false);
}
else if (!name.isEmpty() && type.equalsIgnoreCase("mitarbeiter") && istAdmin.equalsIgnoreCase("ja")) {
ausweis = new Ausweis("A");
benutzer = new Mitarbeiter(ausweis,name,alter,true);
}
else
throw new FalscheEingabeException("Falsche Eingabe");
return benutzer;
}
}

View File

@ -0,0 +1,47 @@
package domain.UserRegistieren;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import domain.Benutzer.Ausweis;
import domain.Benutzer.Benutzer;
import domain.Benutzer.Kunde;
import domain.Benutzer.Mitarbeiter;
import domain.ExceptionsKlassen.FalscheEingabeException;
import domain.Medium.Buch;
import domain.Medium.Mediumverwalter;
import domain.fassade.BibSystem;
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, da Kunde ist
assertTrue(benutzer instanceof Kunde);
String bibKartenNummer = "K1000";
assertTrue(benutzer.getBibAusweis().getKartenNummer().equalsIgnoreCase(bibKartenNummer));
}
@Test
void testMitarbeiter() throws FalscheEingabeException {
Benutzer benutzer = Registieren.userRegistrieren("obai", "mitarbeiter", 15, "ja");
// True, da Mitarbeiter ist
assertTrue(benutzer instanceof Mitarbeiter);
String bibKartenNummer = "A1001";
assertTrue(benutzer.getBibAusweis().getKartenNummer().equalsIgnoreCase(bibKartenNummer));
}
}

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,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,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,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

@ -17,9 +17,10 @@ class AusleihfristenGebührenTest {
@Test @Test
void test() throws Exception { void test() throws Exception {
bib.userRegistrieren("obai", "student", 15, "nein"); bib.userRegistrieren("obai", "student", 15, "nein");
bib.userAnmelden("K1001"); bib.userAnmdelden("K1001");
bib.mediumAusleihen("K1001", "B001"); bib.mediumAusleihen("K1001", "B001");
assertEquals(2.0,bib.simuliereMedienRückgabe("B001", "2024-11-13"));
} }
} }

View File

@ -1,12 +1,12 @@
package domain.fassade; package domain.fassade;
import java.util.*; import java.util.*;
import domain.AusleiheSystem.*;
import domain.ausleihSystem.*; import domain.Benutzer.*;
import domain.benutzer.*; import domain.Bibliothekskatalog.Mediensuchen;
import domain.bibliothekskatalog.Mediensuchen; import domain.ExceptionsKlassen.*;
import domain.exceptionsKlassen.*; import domain.Medium.*;
import domain.medium.*; import domain.UserRegistieren.Registieren;
public class BibSystem { public class BibSystem {
private ArrayList<Benutzer> alleBibBenutzer; private ArrayList<Benutzer> alleBibBenutzer;
@ -21,30 +21,46 @@ public class BibSystem {
this.medien = new HashMap<>(); this.medien = new HashMap<>();
this.ausleiheSystem = new AusleiheSystem(medien); this.ausleiheSystem = new AusleiheSystem(medien);
this.ausleihe = new ArrayList<>(); this.ausleihe = new ArrayList<>();
this.bibAdmin = new Mitarbeiter(new Ausweis("A"),"Xy Müller",20,false); bibAdmin = new Mitarbeiter(new Ausweis("A"),"XY Müller",20,false);
mediumsAufladen(); mediumsAufladen();
} }
// Registrierung public boolean gebührenBezahlen(double betrag, String bibKartennummer) throws BenutzerNichtGefundenException {
public void userRegistrieren(String name, String type, int alter, String istAdmin) throws FalscheEingabeException { Benutzer benutzer = findeBenutzer(bibKartennummer);
Benutzer bibBenutzer = Registieren.userRegistrieren(name, type, alter, istAdmin); double userBetrag = benutzer.getGebühren();
alleBibBenutzer.add(bibBenutzer); if (betrag == userBetrag ) {
((Mitarbeiter)bibAdmin).gebührVerbuchen(benutzer);
return true;
}
return false;
} }
// Anmeldung public double jahresGebührenBerechnen(String bibKartennummer) throws BenutzerNichtGefundenException {
public double userAnmelden(String bibKartenNummer) throws BenutzerNichtGefundenException { Benutzer benutzer = findeBenutzer(bibKartennummer);
Benutzer bibBenutzer = findeBenutzer(bibKartenNummer); return benutzer.jahresgebühren();
bibBenutzer.anmelden();
return bibBenutzer.getGebühren();
} }
public double simuliereJahresGebührenBerechnen(String bibKartennummer, String datum) throws BenutzerNichtGefundenException {
Benutzer benutzer = findeBenutzer(bibKartennummer);
return benutzer.simuliereJahresGebühren(datum);
}
public ArrayList<String> medienRückgabe(String eindeutigeKennung) {
// Mediums Durchsuchen return ausleiheSystem.mediumRückgabe(ausleihe, eindeutigeKennung);
public ArrayList<String> mediumDurchsuchen(String auswahl, String bibKartenNummer) throws FalscheEingabeException, MediumNichtGefundenException, BenutzerNichtAngemeldetException, BenutzerNichtGefundenException { }
Benutzer benutzer = findeBenutzer(bibKartenNummer);
public double simuliereMedienRückgabe(String eindeutigeKennung, String datum) throws MediumNichtGefundenException {
if (benutzer.abmelden()) return ausleiheSystem.SimulieremediumRückgabe(ausleihe, eindeutigeKennung, datum);
}
public boolean medienVerlängern(String eindeutigeKennung, String bibKartennummer) throws BenutzerNichtGefundenException, MediumNichtGefundenException {
Benutzer benutzer = findeBenutzer(bibKartennummer);
return ausleiheSystem.medienVerlängern(benutzer,eindeutigeKennung);
}
public ArrayList<String> mediumDurchsuchen(String auswahl, String bibKartenNummer)
throws FalscheEingabeException, MediumNichtGefundenException, BenutzerNichtAngemeldetException {
if (!checkIfUserImSystemAngemeldetIst(bibKartenNummer))
throw new BenutzerNichtAngemeldetException("Sie müssen sich erst im System anmelden"); throw new BenutzerNichtAngemeldetException("Sie müssen sich erst im System anmelden");
ArrayList<String> treffer = new ArrayList<>(); ArrayList<String> treffer = new ArrayList<>();
@ -60,11 +76,7 @@ public class BibSystem {
|| auswahl.equalsIgnoreCase("Dvds") || auswahl.equalsIgnoreCase("Cds") || auswahl.equalsIgnoreCase("Dvds") || auswahl.equalsIgnoreCase("Cds")
|| auswahl.equalsIgnoreCase("Videospiele")) || auswahl.equalsIgnoreCase("Videospiele"))
treffer = medienSuchen.medienart(auswahl, medien); treffer = medienSuchen.medienart(auswahl, medien);
else if (auswahl.equalsIgnoreCase("ja")) {
treffer = medienSuchen.baldVerfügbareMedien(ausleihe);
}
else else
treffer = medienSuchen.title(auswahl, medien); treffer = medienSuchen.title(auswahl, medien);
@ -73,137 +85,68 @@ public class BibSystem {
return treffer; return treffer;
} }
public void userRegistrieren(String name, String type, int alter, String istAdmin) throws FalscheEingabeException {
/* Benutzer bibBenutzer = Registieren.userRegistrieren(name, type, alter, istAdmin);
* Aufgaben des Leihsystems: alleBibBenutzer.add(bibBenutzer);
* 1. Mediums ausleihen lassen }
* 2. Mediums verlängern
* 3. Mediums Rückgabe public boolean userAnmdelden(String bibKartenNummer) throws BenutzerNichtGefundenException {
*/ Benutzer bibBenutzer = findeBenutzer(bibKartenNummer);
bibBenutzer.anmelden();
// Mediums Ausleihen return bibBenutzer.isAngemeldet();
public double mediumAusleihen(String bibKartenNummer, String eindeutigeKennung) throws Exception { }
public String mediumAusleihen(String bibKartenNummer, String eindeutigeKennung) throws Exception {
Benutzer bibBenutzer = findeBenutzer(bibKartenNummer); Benutzer bibBenutzer = findeBenutzer(bibKartenNummer);
if (bibBenutzer instanceof Mitarbeiter) if (bibBenutzer instanceof Mitarbeiter)
throw new Exception("Mitarbeiter können keine Mediums ausleihen!"); throw new Exception("Mitarbeiter können keine Mediums ausleihen!");
if (bibBenutzer.abmelden()) if (!checkIfUserImSystemAngemeldetIst(bibKartenNummer))
throw new BenutzerNichtAngemeldetException("Sie müssen sich erst im System anmelden"); throw new BenutzerNichtAngemeldetException("Sie müssen sich erst im System anmelden");
Ausleihe neueAusleihe = ausleiheSystem.mediumAusleihen(bibBenutzer, eindeutigeKennung); Ausleihe neueAusleihe = ausleiheSystem.mediumAusleihen(bibBenutzer, eindeutigeKennung);
ausleihe.add(neueAusleihe); ausleihe.add(neueAusleihe);
bibBenutzer.ausleihen(neueAusleihe); bibBenutzer.ausleihen(neueAusleihe);
return bibBenutzer.getGebühren(); return "Das Medium wurde erfolgreich ausgeliehen";
} }
// Mediums verlängern public void mediumsAufladen(String type, String ID, String title, int erscheinungsjahr,String ersteller,String verlängbar,int anzahl,int leihdauer) throws FalscheEingabeException {
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; Mediumverwalter medium;
boolean verlängerung = (verlängbar.equalsIgnoreCase("ja")) ? true : false; boolean verlängerung = (verlängbar.equalsIgnoreCase("ja")) ? true: false;
switch (type) { switch (type) {
case "Buch": case "Buch":
medium = new Mediumverwalter(new Buch(ID, title, erscheinungsjahr, ersteller), verlängerung, anzahl, medium = new Mediumverwalter(new Buch(ID,title,erscheinungsjahr,ersteller),verlängerung,anzahl,leihdauer);
leihdauer); break;
break;
case "Cd":
case "Cd": medium = new Mediumverwalter(new Cd(ID,title,erscheinungsjahr,ersteller),verlängerung,anzahl,leihdauer);
medium = new Mediumverwalter(new Cd(ID, title, erscheinungsjahr, ersteller), verlängerung, anzahl, break;
leihdauer);
break; case "Brettspiel":
medium = new Mediumverwalter(new Brettspiel(ID,title,erscheinungsjahr,ersteller),verlängerung,anzahl,leihdauer);
case "Brettspiel": break;
medium = new Mediumverwalter(new Brettspiel(ID, title, erscheinungsjahr, ersteller), verlängerung, anzahl,
leihdauer); case "Dvd":
break; medium = new Mediumverwalter(new Dvd(ID,title,erscheinungsjahr,ersteller),verlängerung,anzahl,leihdauer);
break;
case "Dvd":
medium = new Mediumverwalter(new Dvd(ID, title, erscheinungsjahr, ersteller), verlängerung, anzahl, case "Videospiel":
leihdauer); medium = new Mediumverwalter(new Videospiel(ID,title,erscheinungsjahr,ersteller),verlängerung,anzahl,leihdauer);
break; break;
case "Videospiel": default:
medium = new Mediumverwalter(new Videospiel(ID, title, erscheinungsjahr, ersteller), verlängerung, anzahl, throw new FalscheEingabeException("Falsch Eingabe");
leihdauer);
break;
default:
throw new FalscheEingabeException("Falsch Eingabe");
} }
medien.put(ID, medium); String getMediumID = medium.getMedium().getID();
medien.put(getMediumID, medium);
} }
/* // Test Methode
* => Hilfsmethoden
*/
private void mediumsAufladen() { private void mediumsAufladen() {
Mediumverwalter buch = new Mediumverwalter(new Buch("B001", "Effektives Java Programmieren", 2018, "Joshua Bloch"),true, 10, 28); Mediumverwalter buch = new Mediumverwalter(new Buch("B001", "Effektives Java Programmieren", 2018, "Joshua Bloch"),true, 10, 28);
medien.put(buch.getMedium().getID(), buch); medien.put(buch.getMedium().getID(), buch);
@ -215,13 +158,15 @@ public class BibSystem {
Mediumverwalter buchIStNichtAusgeliehen = new Mediumverwalter(new Buch("BG001", "Javascript lenren", 2018, "Joshua Bloch"),true, 10, 28); Mediumverwalter buchIStNichtAusgeliehen = new Mediumverwalter(new Buch("BG001", "Javascript lenren", 2018, "Joshua Bloch"),true, 10, 28);
medien.put(buchIStNichtAusgeliehen.getMedium().getID(), buchIStNichtAusgeliehen); 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); Mediumverwalter Videospiel = new Mediumverwalter(new Videospiel("BG00122", "The Legend of Zelda: Breath of the Wild", 2017, "Nintendo Switch"),true, 2, 28);
medien.put(Videospiel.getMedium().getID(), Videospiel); medien.put(Videospiel.getMedium().getID(), Videospiel);
} }
private boolean checkIfUserImSystemAngemeldetIst(String bibKartenNummer) {
return alleBibBenutzer.stream().anyMatch(user -> user.isAngemeldet());
}
public Benutzer findeBenutzer(String bibKartenNummer) throws BenutzerNichtGefundenException { private Benutzer findeBenutzer(String bibKartenNummer) throws BenutzerNichtGefundenException {
return alleBibBenutzer.stream() return alleBibBenutzer.stream()
.filter(k -> k.getBibAusweis().getKartenNummer().equalsIgnoreCase(bibKartenNummer)).findFirst() .filter(k -> k.getBibAusweis().getKartenNummer().equalsIgnoreCase(bibKartenNummer)).findFirst()
.orElseThrow(() -> new BenutzerNichtGefundenException( .orElseThrow(() -> new BenutzerNichtGefundenException(

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

@ -0,0 +1,36 @@
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;
class JahresGebührenTest {
BibSystem fassade;
@BeforeEach
void setUp() throws Exception {
fassade = new BibSystem();
}
@Test
void testFürKunde() throws Exception {
fassade.userRegistrieren("obai", "schüler", 15, "nein");
fassade.userAnmdelden("K1001");
double gebühren = fassade.simuliereJahresGebührenBerechnen("K1001", "2020-11-15");
assertEquals(100.0, gebühren);
assertTrue(fassade.gebührenBezahlen(gebühren, "K1001"));
}
@Disabled
void testFürMitarbeiter() throws Exception {
fassade.userRegistrieren("obai", "mitarbeiter", 15, "ja");
fassade.userAnmdelden("A1000");
double gebühren = fassade.simuliereJahresGebührenBerechnen("A1000","2020-11-15");
assertEquals(200.0,gebühren);
}
}

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;
}
}

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

@ -6,8 +6,8 @@ import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import domain.exceptionsKlassen.BenutzerNichtGefundenException; import domain.ExceptionsKlassen.BenutzerNichtGefundenException;
import domain.exceptionsKlassen.FalscheEingabeException; import domain.ExceptionsKlassen.FalscheEingabeException;
class UserAnmeldenTest { class UserAnmeldenTest {
@ -22,14 +22,14 @@ class UserAnmeldenTest {
// True => User ist Angemeldet // True => User ist Angemeldet
fassade.userRegistrieren("obai", "Student", 15, "nein"); fassade.userRegistrieren("obai", "Student", 15, "nein");
fassade.userAnmelden("K1001"); assertTrue(fassade.userAnmdelden("K1001"));
} }
@Test @Test
void testBenutzerIstNichtImSystem() throws FalscheEingabeException, BenutzerNichtGefundenException { void testBenutzerIstNichtImSystem() throws FalscheEingabeException, BenutzerNichtGefundenException {
// True, da Benutzer nicht im System ist // True, da Benutzer nicht im System ist
assertThrows( BenutzerNichtGefundenException.class, () -> fassade.userAnmelden("K1001") ); assertThrows( BenutzerNichtGefundenException.class, () -> fassade.userAnmdelden("K1001") );
} }
} }

View File

@ -1,6 +1,6 @@
package main; package main;
import domain.exceptionsKlassen.*; import domain.ExceptionsKlassen.*;
import tui.Tui; import tui.Tui;
public class Main { public class Main {

View File

@ -3,9 +3,9 @@ package tui;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Scanner; import java.util.Scanner;
import domain.exceptionsKlassen.*; import MedienHinzüfugen.MedienHinzufügen;
import domain.ExceptionsKlassen.*;
import domain.fassade.BibSystem; import domain.fassade.BibSystem;
import medienHinzüfugen.MedienHinzufügen;
public class Tui { public class Tui {
private BibSystem fassade; private BibSystem fassade;
@ -59,9 +59,6 @@ public class Tui {
case "8": case "8":
verbucheGebührenProzess(); verbucheGebührenProzess();
break; break;
case "9":
datumÄndern();
break;
case "0": case "0":
programmIstAktiv = false; programmIstAktiv = false;
System.out.println("Programm beendet."); System.out.println("Programm beendet.");
@ -85,12 +82,9 @@ public class Tui {
System.out.println("6. Ausgeliehene Gegenstände anzeigen"); System.out.println("6. Ausgeliehene Gegenstände anzeigen");
System.out.println("7. Leihfrist verlängern"); System.out.println("7. Leihfrist verlängern");
System.out.println("8. Gebühren verbuchen (Admin)"); System.out.println("8. Gebühren verbuchen (Admin)");
System.out.println("9. Datum ändern");
System.out.println("0. Programm beenden"); System.out.println("0. Programm beenden");
} }
// Aktion: 1
private void registrierenProzess() { private void registrierenProzess() {
System.out.println("<< Registrierung >>"); System.out.println("<< Registrierung >>");
@ -113,8 +107,7 @@ public class Tui {
System.out.println("Fehler: " + e.getMessage()); System.out.println("Fehler: " + e.getMessage());
} }
} }
// Aktion: 2
private void anmeldenProzess() { private void anmeldenProzess() {
System.out.println("<< Anmeldung >>"); System.out.println("<< Anmeldung >>");
@ -122,38 +115,29 @@ public class Tui {
String kartennummer = eingabe.nextLine(); String kartennummer = eingabe.nextLine();
try { try {
{ if (fassade.userAnmdelden(kartennummer)) {
double gebühren = fassade.userAnmelden(kartennummer); System.out.println("Erfolgreich angemeldet.");
System.out.println("Erfolgreich angemeldet.\n" + "Gebühren= " + gebühren);
} }
} catch (BenutzerNichtGefundenException e) { } catch (BenutzerNichtGefundenException e) {
System.out.println("Fehler: " + e.getMessage()); System.out.println("Fehler: " + e.getMessage());
} }
} }
// Aktion: 3
private void mediumDurchsuchenProzess() { private void mediumDurchsuchenProzess() {
System.out.println("<< Medien durchsuchen >>"); 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)): "); System.out.print("Suchkriterium (z. B. Titel, Medienart): ");
String auswahl = eingabe.nextLine(); String auswahl = eingabe.nextLine();
System.out.print("BibKartennummer: "); System.out.print("BibKartennummer: ");
String bibKartennummer = eingabe.nextLine(); String bibKartennummer = eingabe.nextLine();
try { try {
if (auswahl.equalsIgnoreCase("Medienart")) { fassade.mediumDurchsuchen(auswahl, bibKartennummer);
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) { } catch (Exception e) {
System.out.println("Fehler: " + e.getMessage()); System.out.println("Fehler: " + e.getMessage());
} }
} }
// Aktion: 4
private void mediumAusleihenProzess() { private void mediumAusleihenProzess() {
System.out.println("<< Medium ausleihen >>"); System.out.println("<< Medium ausleihen >>");
@ -164,14 +148,12 @@ public class Tui {
String eindeutigeKennung = eingabe.nextLine(); String eindeutigeKennung = eingabe.nextLine();
try { try {
double gebühren = fassade.mediumAusleihen(kartennummer, eindeutigeKennung); System.out.println(fassade.mediumAusleihen(kartennummer, eindeutigeKennung));
System.out.println("Akteulle Gebühren= " + gebühren);
} catch (Exception e) { } catch (Exception e) {
System.out.println("Fehler: " + e.getMessage()); System.out.println("Fehler: " + e.getMessage());
} }
} }
// Aktion: 5
private void mediumsRückgabeProzess() { private void mediumsRückgabeProzess() {
System.out.println("<< Medium zurückgeben >>"); System.out.println("<< Medium zurückgeben >>");
@ -180,7 +162,8 @@ public class Tui {
try { try {
ArrayList<String> ausgelieheneMedien = fassade.medienRückgabe(eindeutigeKennung); ArrayList<String> ausgelieheneMedien = fassade.medienRückgabe(eindeutigeKennung);
System.out.println("Medium erfolgreich zurückgegeben."); System.out.println("Medium erfolgreich zurückgegeben.");
if (ausgelieheneMedien.isEmpty()) if (ausgelieheneMedien.isEmpty())
System.out.println("Sie haben keine weiteren ausgeliehenen Medien."); System.out.println("Sie haben keine weiteren ausgeliehenen Medien.");
else { else {
@ -191,26 +174,7 @@ public class Tui {
System.out.println("Fehler: " + e.getMessage()); 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() { private void mediumsVerlängernProzess() {
System.out.println("<< Leihfrist verlängern >>"); System.out.println("<< Leihfrist verlängern >>");
@ -228,84 +192,31 @@ public class Tui {
} }
} }
//Aktion: 8 private void zeigeAusgelieheneGegenstände() {
private void verbucheGebührenProzess() { System.out.println("<< Ausgeliehene Gegenstände anzeigen >>");
System.out.println("<< Gebühren verbuchen >>");
System.out.print("BibKartennummer des Admins: "); System.out.print("BibKartennummer: ");
String bibKartennummer = eingabe.nextLine(); String bibKartennummer = eingabe.nextLine();
try { try {
if (fassade.adminAnmelden(bibKartennummer)) { // fassade.zeigeAusgelieheneGegenstände(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) { } catch (Exception e) {
System.out.println("Fehler: " + e.getMessage()); System.out.println("Fehler: " + e.getMessage());
} }
} }
// Aktion 9 private void verbucheGebührenProzess() {
private void datumÄndern() { System.out.println("<< Gebühren verbuchen >>");
System.out.println("1.Jahresgebühren");
System.out.println("2.Ausleihefristen"); System.out.print("BibKartennummer des Nutzers: ");
String auswahl = eingabe.nextLine(); String bibKartennummer = eingabe.nextLine();
switch (auswahl) { try {
case "1": // fassade.verbucheGebühren(bibKartennummer);
try { System.out.println("Gebühren erfolgreich verbucht.");
System.out.println("Bibkartennummer:"); } catch (Exception e) {
String bibkartennummer = eingabe.nextLine(); System.out.println("Fehler: " + e.getMessage());
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());
}
}
} }
} }