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">
<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>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="l42d9aidsTNYsLyE-SN_-16" value="" style="shape=folder;fontStyle=1;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;html=1;whiteSpace=wrap;" vertex="1" parent="1">
<mxGeometry x="750" y="260" width="1580" height="1340" as="geometry" />
</mxCell>
<object label="" TUI="" id="ydUtLetK26WXyeJ3qCt--1">
<mxCell style="shape=folder;fontStyle=1;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;html=1;whiteSpace=wrap;points=[[0,0,0,-5,-13],[0,0,0,0,14],[0,0,0,0,78],[0,0,0,0,142],[0,0,0,0,206],[0,0,0,0,270],[0,0,0,20,0],[0,0,0,40,0],[0,0,0,160,14],[0,0,0,280,14],[0,0,0,280,78],[0,0,0,280,142],[0,0,0,280,206],[0,0,0,280,270],[0,0.5,0,0,0],[0.04,0.02,0,0,0],[0.06,0.04,0,0,0],[0.09,0.03,0,0,0],[0.13,0.04,0,0,0],[0.25,1,0,0,0],[0.5,1,0,0,0],[0.75,1,0,0,0]];" parent="1" vertex="1">
<mxGeometry x="90" y="280" width="300" height="220" as="geometry" />
@ -21,6 +18,9 @@
<mxCell id="ydUtLetK26WXyeJ3qCt--5" value="Bib Ui" style="html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="160" y="390" width="110" height="50" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--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">
<mxGeometry x="140" y="600" width="240" height="170" as="geometry" />
</mxCell>
@ -55,109 +55,144 @@
<mxGeometry x="130" y="600" width="70" height="20" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--28" value="&lt;font style=&quot;font-size: 11px;&quot;&gt;domain&lt;/font&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="767" y="260" width="70" height="20" as="geometry" />
<mxGeometry x="757" y="270" width="70" height="20" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--29" value="registrieren" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="450" y="300" width="60" height="30" as="geometry" />
</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">
<mxGeometry x="430" y="518" width="100" height="30" as="geometry" />
<mxGeometry x="430" y="440" width="100" height="30" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--33" value="Medium zurückgeben" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" 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 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 id="ydUtLetK26WXyeJ3qCt--38" value="" style="verticalLabelPosition=bottom;verticalAlign=top;html=1;shape=mxgraph.flowchart.on-page_reference;" parent="1" vertex="1">
<mxGeometry x="580" y="690" width="60" height="60" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--41" value="&lt;i&gt;Medium&lt;/i&gt;" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=none;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="1700" y="640" width="180" height="110" as="geometry" />
<mxGeometry x="1100" y="720" width="180" height="130" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--42" value="- ID: String&lt;div&gt;- erscheinungsjahr: int&lt;/div&gt;&lt;div&gt;- title: String&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="ydUtLetK26WXyeJ3qCt--41" vertex="1">
<mxGeometry y="26" width="180" height="84" as="geometry" />
<mxCell 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="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 id="ydUtLetK26WXyeJ3qCt--79" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1560" y="864" as="sourcePoint" />
<mxPoint x="1560" y="814" as="targetPoint" />
<mxPoint x="960" y="954" as="sourcePoint" />
<mxPoint x="960" y="904" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--80" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1560" y="814" as="sourcePoint" />
<mxPoint x="2250" y="814" as="targetPoint" />
<mxPoint x="960" y="904" as="sourcePoint" />
<mxPoint x="1650" y="904" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--81" value="" style="endArrow=none;html=1;rounded=0;exitX=0.584;exitY=0.003;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" edge="1">
<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">
<mxPoint x="2251.7599999999998" y="864.156" as="sourcePoint" />
<mxPoint x="2250" y="814" as="targetPoint" />
<mxPoint x="1650" y="944" as="sourcePoint" />
<mxPoint x="1650" y="904" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--82" value="Extends" style="endArrow=block;endSize=16;endFill=0;html=1;rounded=0;entryX=0.401;entryY=1.012;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" target="ydUtLetK26WXyeJ3qCt--42" edge="1">
<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">
<mxPoint x="1770" y="814" as="sourcePoint" />
<mxPoint x="1771.8199999999997" y="753.8760000000002" as="targetPoint" />
<mxPoint x="1170" y="904" as="sourcePoint" />
<mxPoint x="1330" y="904" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--84" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1720" y="864" as="sourcePoint" />
<mxPoint x="1720" y="814" as="targetPoint" />
<mxPoint x="1120" y="954" as="sourcePoint" />
<mxPoint x="1120" y="904" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--86" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1909.45" y="864" as="sourcePoint" />
<mxPoint x="1909.45" y="814" as="targetPoint" />
<mxPoint x="1309.45" y="954" as="sourcePoint" />
<mxPoint x="1309.45" y="904" as="targetPoint" />
<Array as="points">
<mxPoint x="1909.45" y="834" />
<mxPoint x="1309.45" y="924" />
</Array>
</mxGeometry>
</mxCell>
<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">
<mxPoint x="2070" y="864" as="sourcePoint" />
<mxPoint x="2070" y="814" as="targetPoint" />
<mxPoint x="1470" y="954" as="sourcePoint" />
<mxPoint x="1470" y="904" as="targetPoint" />
</mxGeometry>
</mxCell>
<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">
<mxPoint x="2250" y="864" as="sourcePoint" />
<mxPoint x="2250" y="814" as="targetPoint" />
<mxPoint x="1650" y="954" as="sourcePoint" />
<mxPoint x="1650" y="904" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--131" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" target="ydUtLetK26WXyeJ3qCt--10" edge="1">
<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">
<mxPoint x="790" y="364" as="sourcePoint" />
<Array as="points">
<mxPoint x="880" y="572" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--132" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.985;entryY=0.664;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" target="ydUtLetK26WXyeJ3qCt--11" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="790" y="364" as="sourcePoint" />
</mxGeometry>
<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 x="790" y="338" width="180" height="52" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--133" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" target="ydUtLetK26WXyeJ3qCt--12" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="790" y="364" as="sourcePoint" />
</mxGeometry>
<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" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--134" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" target="ydUtLetK26WXyeJ3qCt--13" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="790" y="364" as="sourcePoint" />
</mxGeometry>
<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" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--135" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" target="ydUtLetK26WXyeJ3qCt--14" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="790" y="364" as="sourcePoint" />
</mxGeometry>
<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" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--136" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" target="ydUtLetK26WXyeJ3qCt--38" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="790" y="364" as="sourcePoint" />
</mxGeometry>
<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" />
</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" 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 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">
@ -208,281 +243,121 @@
</mxGeometry>
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--158" value="Ausleihe" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="850" y="1090" width="310" height="118" as="geometry" />
<mxGeometry x="1280" y="340" width="160" height="114" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--159" value="- ausleihBeginn: LocalDate&lt;div&gt;- ausleihEnde: LocalDate&amp;nbsp;&lt;/div&gt;&lt;div&gt;- medium: Mediumverwalter&lt;/div&gt;&lt;div&gt;- benutzer: Benutzer&lt;/div&gt;&lt;div&gt;- verlängerungen: int&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="ydUtLetK26WXyeJ3qCt--158" vertex="1">
<mxGeometry y="26" width="310" height="84" as="geometry" />
<mxCell 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="160" height="54" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--160" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" parent="ydUtLetK26WXyeJ3qCt--158" vertex="1">
<mxGeometry y="110" width="310" height="8" as="geometry" />
<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 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 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" />
</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">
<mxGeometry y="80" width="160" height="8" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--165" value="&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="ydUtLetK26WXyeJ3qCt--162" vertex="1">
<mxGeometry y="88" width="160" height="2" as="geometry" />
<mxCell id="ydUtLetK26WXyeJ3qCt--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="26" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-15" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="ydUtLetK26WXyeJ3qCt--175" target="ydUtLetK26WXyeJ3qCt--162" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="1300" y="1250" />
</Array>
</mxGeometry>
<mxCell id="ydUtLetK26WXyeJ3qCt--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" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--175" value="&lt;i&gt;Benutzer&lt;/i&gt;" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=37;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;strokeColor=default;spacingTop=10;fontFamily=Helvetica;fontSize=12;fontColor=default;fillColor=default;" parent="1" vertex="1">
<mxGeometry x="1470" y="1010" width="260" height="320" as="geometry" />
<mxGeometry x="1560" y="310" width="260" height="320" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--176" value="&lt;span style=&quot;font-weight: normal;&quot;&gt;- bibAusweis: Ausweis&lt;/span&gt;&lt;div style=&quot;line-height: 140%;&quot;&gt;&lt;span style=&quot;background-color: initial; font-weight: normal;&quot;&gt;- name: String&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;line-height: 140%;&quot;&gt;&lt;span style=&quot;background-color: initial; font-weight: normal;&quot;&gt;- alter: int&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;line-height: 140%;&quot;&gt;&lt;span style=&quot;background-color: initial; font-weight: normal;&quot;&gt;- istStudent: boolean&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;line-height: 160%;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;-&amp;nbsp;&lt;span style=&quot;background-color: initial;&quot;&gt;ausgeliehenenMedien[]: 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" />
</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">
<mxGeometry y="200" width="260" height="8" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--178" value="&lt;span style=&quot;font-weight: normal;&quot;&gt;+ anmelden(): void&lt;/span&gt;&lt;div&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;+ abmelden: void&lt;br&gt;&lt;/span&gt;&lt;div&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;+ ausleihen(medium: Ausleihe): void&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-weight: normal; background-color: initial;&quot;&gt;&lt;i&gt;+ jahresgebühren(): double&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;+ zurückgeben(medium: Ausleihe): void&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;fontFamily=Helvetica;fontSize=12;fontColor=default;fontStyle=1;" parent="ydUtLetK26WXyeJ3qCt--175" vertex="1">
<mxCell id="ydUtLetK26WXyeJ3qCt--178" value="&lt;span style=&quot;font-weight: normal;&quot;&gt;+ anmelden(int kartenNummer): boolean&lt;/span&gt;&lt;div&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;+ ausleihe()&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;+ anzeigen()&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;+ verlängren()&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;+ zurückgeben()&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;+ gebührenbezahlen(int betrag): boolean&lt;/span&gt;&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;fontFamily=Helvetica;fontSize=12;fontColor=default;fontStyle=1;" parent="ydUtLetK26WXyeJ3qCt--175" vertex="1">
<mxGeometry y="208" width="260" height="112" as="geometry" />
</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">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1429" y="1450" as="sourcePoint" />
<mxPoint x="1429" y="1400" as="targetPoint" />
<mxPoint x="1519" y="750" as="sourcePoint" />
<mxPoint x="1519" y="700" as="targetPoint" />
<Array as="points">
<mxPoint x="1430" y="1430" />
<mxPoint x="1520" y="730" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--204" value="" style="endArrow=none;html=1;rounded=0;fontFamily=Helvetica;fontSize=12;fontColor=default;fontStyle=1;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1629" y="1450" as="sourcePoint" />
<mxPoint x="1629" y="1400" as="targetPoint" />
<mxPoint x="1719" y="750" as="sourcePoint" />
<mxPoint x="1719" y="700" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--205" value="" style="endArrow=none;html=1;rounded=0;fontFamily=Helvetica;fontSize=12;fontColor=default;fontStyle=1;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1429" y="1400" as="sourcePoint" />
<mxPoint x="1629" y="1400" as="targetPoint" />
<mxPoint x="1519" y="700" as="sourcePoint" />
<mxPoint x="1719" y="700" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--206" value="Extends" style="endArrow=block;endSize=16;endFill=0;html=1;rounded=0;fontFamily=Helvetica;fontSize=12;fontColor=default;fontStyle=1;entryX=0.344;entryY=0.997;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" target="ydUtLetK26WXyeJ3qCt--178" edge="1">
<mxGeometry width="160" relative="1" as="geometry">
<mxPoint x="1559" y="1400" as="sourcePoint" />
<mxPoint x="1540" y="1380" as="targetPoint" />
<mxPoint x="1649" y="700" as="sourcePoint" />
<mxPoint x="1630" y="680" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-2" value="BibSystem" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="790" y="330" width="490" height="280" as="geometry" />
</mxCell>
<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">
<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 relative="1" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-21" value="1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="1640" y="518" width="60" height="30" as="geometry" />
<mxCell 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="1040" y="546" width="160" height="34" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-22" value="1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="1750" y="610" width="60" height="30" as="geometry" />
<mxCell 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 y="26" width="160" height="8" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-25" value="Buch" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=none;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="1490" y="864" width="140" height="52" as="geometry" />
<mxCell 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="1020" y="368" width="160" height="34" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-26" value="- autor: String" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="i-RIzz4hhB1Q3m7lVkjo-25" vertex="1">
<mxGeometry y="26" width="140" height="26" as="geometry" />
<mxCell 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="160" height="8" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-29" value="Cd" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=none;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="1650" y="864" width="140" height="52" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-30" value="- künstler: String" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="i-RIzz4hhB1Q3m7lVkjo-29" vertex="1">
<mxGeometry y="26" width="140" height="26" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-31" value="Dvd" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=none;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="1838" y="864" width="140" height="52" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-32" value="- regisseur: String" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="i-RIzz4hhB1Q3m7lVkjo-31" vertex="1">
<mxGeometry y="26" width="140" height="26" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-37" value="Dvd" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=none;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="2008" y="864" width="140" height="52" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-38" value="- verlag: String" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="i-RIzz4hhB1Q3m7lVkjo-37" vertex="1">
<mxGeometry y="26" width="140" height="26" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-39" value="Videospiel" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=none;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="2178" y="864" width="140" height="52" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-40" value="- plattform: String" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="i-RIzz4hhB1Q3m7lVkjo-39" vertex="1">
<mxGeometry y="26" width="140" height="26" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-42" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="i-RIzz4hhB1Q3m7lVkjo-3" target="i-RIzz4hhB1Q3m7lVkjo-10" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-43" value="1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="1280" y="375" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-44" value="hat" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="1490" y="340" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-45" value="&lt;font style=&quot;font-size: 18px;&quot;&gt;&lt;b&gt;*&lt;/b&gt;&lt;/font&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;strokeWidth=5;" parent="1" vertex="1">
<mxGeometry x="1650" y="360" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-48" value="1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="1060" y="740" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-49" value="AusleihSystem" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="801" y="770" width="539" height="180" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-50" value="- ausleihBeginn: LocalDate&lt;div&gt;- ausleihEnde: LocalDate&amp;nbsp;&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="i-RIzz4hhB1Q3m7lVkjo-49" vertex="1">
<mxGeometry y="26" width="539" height="64" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-51" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" parent="i-RIzz4hhB1Q3m7lVkjo-49" vertex="1">
<mxGeometry y="90" width="539" height="8" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-52" value="+ mediumAusleihen(benutzer: Benutzer, eindutigeNummer: String): Ausleihe&lt;div&gt;+ mediumRückgabe(ausleihe: ArrayList&amp;lt;Ausleihe&amp;gt;, eindutigeKennung: String): ArrayList&amp;lt;String&amp;gt;&lt;/div&gt;&lt;div&gt;+ medienVerlängern(benutzer:Benutzer, eindutigeKennung: String): boolean&lt;/div&gt;&lt;div&gt;- findMedium(eindutigeKennung: String): Mediumverwalter&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="i-RIzz4hhB1Q3m7lVkjo-49" vertex="1">
<mxGeometry y="98" width="539" height="82" as="geometry" />
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-57" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.001;entryY=0.1;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="i-RIzz4hhB1Q3m7lVkjo-2" target="ydUtLetK26WXyeJ3qCt--158" edge="1">
<mxCell id="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 relative="1" as="geometry">
<Array as="points">
<mxPoint x="770" y="470" />
<mxPoint x="770" y="1102" />
</Array>
<mxPoint x="1180" y="407" as="sourcePoint" />
</mxGeometry>
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-58" value="&lt;font style=&quot;font-size: 22px;&quot;&gt;*&lt;/font&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="790" y="1080" width="60" height="30" as="geometry" />
</mxCell>
<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>
</mxGraphModel>
</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 domain.exceptionsKlassen.FalscheEingabeException;
import domain.ExceptionsKlassen.FalscheEingabeException;
import domain.fassade.BibSystem;
public class MedienHinzufügen {

View File

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

View File

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

View File

@ -1,12 +1,12 @@
package domain.ausleihSystem;
package domain.AusleiheSystem;
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import java.util.*;
import domain.benutzer.Benutzer;
import domain.exceptionsKlassen.MediumNichtGefundenException;
import domain.medium.*;
import domain.Benutzer.Benutzer;
import domain.ExceptionsKlassen.MediumNichtGefundenException;
import domain.Medium.*;
public class AusleiheSystem {
@ -17,7 +17,6 @@ public class AusleiheSystem {
this.medien = medien;
}
public Ausleihe mediumAusleihen(Benutzer benutzer, String eindeutigenummer) throws MediumNichtGefundenException {
Mediumverwalter mediumAusleihen = findMedium(eindeutigenummer);
@ -38,8 +37,7 @@ public class AusleiheSystem {
public ArrayList<String> mediumRückgabe(ArrayList<Ausleihe> ausleihe, String eindeutigeKennung) {
Ausleihe ausgelieheneMedium = ausleihe.stream()
.filter(k -> k.getMediumverwalter().getMedium().getID().equalsIgnoreCase(eindeutigeKennung))
.findFirst()
.filter(k -> k.getMediumverwalter().getMedium().getID().equalsIgnoreCase(eindeutigeKennung)).findFirst()
.orElse(null);
ArrayList<String> ausgeliehenMedien = new ArrayList<>();
@ -75,22 +73,22 @@ public class AusleiheSystem {
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()
.filter(k -> k.getMediumverwalter().getMedium().getID().equalsIgnoreCase(eindeutigeKennung)).findFirst()
.orElse(null);
LocalDate beginn = LocalDate.parse(ausleiheBeginn);
LocalDate ende = LocalDate.parse(ausleiheEnde);
LocalDate heutigesDatum = LocalDate.parse(datum);
LocalDate heutigesDatum;
LocalDate testDatum = LocalDate.parse(datum);
Benutzer bibBenutzer = ausgelieheneMedium.getBenutzer();
ausgelieheneMedium.setAusleiheBeginn(beginn);
ausgelieheneMedium.setAusleiheEnde(ende);
if (heutigesDatum.isAfter(ausgelieheneMedium.getAusleiheEnde())) {
long überfälligeTage = ausgelieheneMedium.getAusleiheEnde().until(heutigesDatum, ChronoUnit.DAYS);
double gebühren = 0.0;
if (ausgelieheneMedium != null) {
heutigesDatum = LocalDate.now();
if (heutigesDatum.isAfter(testDatum)) {
long überfälligeTage = testDatum.until(heutigesDatum, ChronoUnit.DAYS);
if (überfälligeTage <= 7)
gebühren = überfälligeTage * 1.0;
@ -101,9 +99,13 @@ public class AusleiheSystem {
}
bibBenutzer.setGebühren(bibBenutzer.getGebühren() + gebühren);
return bibBenutzer.getGebühren();
}
return bibBenutzer.getGebühren();
} else
throw new MediumNichtGefundenException("Das Medium wurde nicht gefunden");
return gebühren;
}
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.*;
@ -19,7 +19,7 @@ class MediumVerlängernTest {
@Test
void test() throws Exception {
bib.userRegistrieren("obai", "student", 15, "nein");
bib.userAnmelden("K1001");
bib.userAnmdelden("K1001");
bib.mediumAusleihen("K1001", "B001");
assertTrue(bib.medienVerlängern("B001", "K1001"));
}

View File

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

View File

@ -1,9 +1,8 @@
package domain.benutzer;
package domain.Benutzer;
import java.time.LocalDate;
import java.util.ArrayList;
import domain.ausleihSystem.Ausleihe;
import domain.AusleiheSystem.Ausleihe;
public abstract class Benutzer {
@ -76,14 +75,12 @@ public abstract class Benutzer {
return angemeldet;
}
public boolean anmelden() {
public void anmelden() {
this.angemeldet = true;
return this.angemeldet;
}
public boolean abmelden() {
public void abmelden() {
this.angemeldet = false ;
return this.angemeldet;
}
@ -103,32 +100,32 @@ public abstract class Benutzer {
this.anmeldebeginn = anmeldebeginn;
}
public double jahresgebühren(String datum) {
// Falls ein Testdatum angegeben ist
if (!datum.isEmpty()) {
LocalDate aktuellesDatum = LocalDate.parse(datum);
while (this.anmeldebeginn.isBefore(aktuellesDatum)) {
this.gebühren += getJahresgebühren();
this.anmeldebeginn = this.anmeldebeginn.plusYears(1); // Aktualisieren des Startdatums
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;
}
this.anmeldebeginn = aktuellesDatum; // Letztes Aktualisieren des Startdatums
}
else {
LocalDate nachEinemJahr = this.anmeldebeginn.plusYears(1);
while (LocalDate.now().isAfter(nachEinemJahr)) {
this.gebühren += getJahresgebühren();
this.anmeldebeginn = nachEinemJahr;
nachEinemJahr = this.anmeldebeginn.plusYears(1);
}
// Für Testate
public double simuliereJahresGebühren(String anmeldeBeginn) {
LocalDate aktuellesDatum = LocalDate.now();
LocalDate test = LocalDate.parse(anmeldeBeginn);
while (test.isBefore(aktuellesDatum)) {
this.gebühren += getJahresgebühr();
test = test.plusYears(1);
}
anmeldebeginn = test;
return this.gebühren;
}
public abstract double getJahresgebühren();
public abstract double getJahresgebühr();
@Override
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 {
@ -7,9 +7,9 @@ public class Mitarbeiter extends Benutzer {
}
@Override
public double getJahresgebühren() {
public double getJahresgebühr() {
return 0.0;
return 50.0;
}
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.*;
@ -8,13 +8,13 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import domain.benutzer.Benutzer;
import domain.exceptionsKlassen.BenutzerNichtAngemeldetException;
import domain.exceptionsKlassen.BenutzerNichtGefundenException;
import domain.exceptionsKlassen.FalscheEingabeException;
import domain.exceptionsKlassen.MediumNichtGefundenException;
import domain.Benutzer.Benutzer;
import domain.ExceptionsKlassen.BenutzerNichtAngemeldetException;
import domain.ExceptionsKlassen.BenutzerNichtGefundenException;
import domain.ExceptionsKlassen.FalscheEingabeException;
import domain.ExceptionsKlassen.MediumNichtGefundenException;
import domain.UserRegistieren.Registieren;
import domain.fassade.BibSystem;
import domain.fassade.Registieren;
class MedienSuchenTest {
@ -24,27 +24,27 @@ private BibSystem fassade;
void erstelleObjekt() throws FalscheEingabeException, BenutzerNichtGefundenException {
this.fassade = new BibSystem();
fassade.userRegistrieren("obai", "student", 15, "nein");
fassade.userAnmelden("K1001");
fassade.userAnmdelden("K1000");
}
@Disabled
void testMedienSuchenNachTitle()throws MediumNichtGefundenException, FalscheEingabeException, BenutzerNichtAngemeldetException, BenutzerNichtGefundenException {
ArrayList<String> nichtAusgeliehen = fassade.mediumDurchsuchen("Effektives Java Programmieren", "K1001");
void testMedienSuchenNachTitle()throws MediumNichtGefundenException, FalscheEingabeException, BenutzerNichtAngemeldetException {
ArrayList<String> nichtAusgeliehen = fassade.mediumDurchsuchen("Effektives Java Programmieren", "K1000");
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
void testMedienSuchenNachMedienart()throws MediumNichtGefundenException, FalscheEingabeException, BenutzerNichtAngemeldetException, BenutzerNichtGefundenException {
ArrayList<String> nichtAusgeliehen = fassade.mediumDurchsuchen("Videospiele", "K1001");
nichtAusgeliehen.forEach(System.out::println);
}
@Disabled
void testMedienSuchenNachausgeliehen()throws MediumNichtGefundenException, FalscheEingabeException, BenutzerNichtAngemeldetException, BenutzerNichtGefundenException {
ArrayList<String> nichtAusgeliehen = fassade.mediumDurchsuchen("ausgeliehen", "K1001");
void testMedienSuchenNachausgeliehen()throws MediumNichtGefundenException, FalscheEingabeException, BenutzerNichtAngemeldetException {
ArrayList<String> nichtAusgeliehen = fassade.mediumDurchsuchen("ausgeliehen", "K1000");
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 {

View File

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

View File

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

View File

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

View File

@ -1,8 +1,7 @@
package domain.medium;
package domain.Medium;
public class Brettspiel extends Medium {
private 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 {

View File

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

View File

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

View File

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

View File

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

View File

@ -1,4 +1,4 @@
package domain.medium;
package domain.Medium;
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
void test() throws Exception {
bib.userRegistrieren("obai", "student", 15, "nein");
bib.userAnmelden("K1001");
bib.userAnmdelden("K1001");
bib.mediumAusleihen("K1001", "B001");
assertEquals(2.0,bib.simuliereMedienRückgabe("B001", "2024-11-13"));
}
}

View File

@ -1,12 +1,12 @@
package domain.fassade;
import java.util.*;
import domain.ausleihSystem.*;
import domain.benutzer.*;
import domain.bibliothekskatalog.Mediensuchen;
import domain.exceptionsKlassen.*;
import domain.medium.*;
import domain.AusleiheSystem.*;
import domain.Benutzer.*;
import domain.Bibliothekskatalog.Mediensuchen;
import domain.ExceptionsKlassen.*;
import domain.Medium.*;
import domain.UserRegistieren.Registieren;
public class BibSystem {
private ArrayList<Benutzer> alleBibBenutzer;
@ -21,30 +21,46 @@ public class BibSystem {
this.medien = new HashMap<>();
this.ausleiheSystem = new AusleiheSystem(medien);
this.ausleihe = new ArrayList<>();
this.bibAdmin = new Mitarbeiter(new Ausweis("A"),"Xy Müller",20,false);
bibAdmin = new Mitarbeiter(new Ausweis("A"),"XY Müller",20,false);
mediumsAufladen();
}
// Registrierung
public void userRegistrieren(String name, String type, int alter, String istAdmin) throws FalscheEingabeException {
Benutzer bibBenutzer = Registieren.userRegistrieren(name, type, alter, istAdmin);
alleBibBenutzer.add(bibBenutzer);
public boolean gebührenBezahlen(double betrag, String bibKartennummer) throws BenutzerNichtGefundenException {
Benutzer benutzer = findeBenutzer(bibKartennummer);
double userBetrag = benutzer.getGebühren();
if (betrag == userBetrag ) {
((Mitarbeiter)bibAdmin).gebührVerbuchen(benutzer);
return true;
}
return false;
}
// Anmeldung
public double userAnmelden(String bibKartenNummer) throws BenutzerNichtGefundenException {
Benutzer bibBenutzer = findeBenutzer(bibKartenNummer);
bibBenutzer.anmelden();
return bibBenutzer.getGebühren();
public double jahresGebührenBerechnen(String bibKartennummer) throws BenutzerNichtGefundenException {
Benutzer benutzer = findeBenutzer(bibKartennummer);
return benutzer.jahresgebü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) {
return ausleiheSystem.mediumRückgabe(ausleihe, eindeutigeKennung);
}
// Mediums Durchsuchen
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 {
return ausleiheSystem.SimulieremediumRückgabe(ausleihe, eindeutigeKennung, datum);
}
if (benutzer.abmelden())
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");
ArrayList<String> treffer = new ArrayList<>();
@ -61,10 +77,6 @@ public class BibSystem {
|| auswahl.equalsIgnoreCase("Videospiele"))
treffer = medienSuchen.medienart(auswahl, medien);
else if (auswahl.equalsIgnoreCase("ja")) {
treffer = medienSuchen.baldVerfügbareMedien(ausleihe);
}
else
treffer = medienSuchen.title(auswahl, medien);
@ -74,136 +86,67 @@ public class BibSystem {
return treffer;
}
public void userRegistrieren(String name, String type, int alter, String istAdmin) throws FalscheEingabeException {
Benutzer bibBenutzer = Registieren.userRegistrieren(name, type, alter, istAdmin);
alleBibBenutzer.add(bibBenutzer);
}
/*
* Aufgaben des Leihsystems:
* 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();
return bibBenutzer.isAngemeldet();
}
// Mediums Ausleihen
public double mediumAusleihen(String bibKartenNummer, String eindeutigeKennung) throws Exception {
public String mediumAusleihen(String bibKartenNummer, String eindeutigeKennung) throws Exception {
Benutzer bibBenutzer = findeBenutzer(bibKartenNummer);
if (bibBenutzer instanceof Mitarbeiter)
throw new Exception("Mitarbeiter können keine Mediums ausleihen!");
if (bibBenutzer.abmelden())
if (!checkIfUserImSystemAngemeldetIst(bibKartenNummer))
throw new BenutzerNichtAngemeldetException("Sie müssen sich erst im System anmelden");
Ausleihe neueAusleihe = ausleiheSystem.mediumAusleihen(bibBenutzer, eindeutigeKennung);
ausleihe.add(neueAusleihe);
bibBenutzer.ausleihen(neueAusleihe);
return bibBenutzer.getGebühren();
return "Das Medium wurde erfolgreich ausgeliehen";
}
// Mediums verlängern
public boolean medienVerlängern(String eindeutigeKennung, String bibKartennummer) throws BenutzerNichtGefundenException, MediumNichtGefundenException {
Benutzer benutzer = findeBenutzer(bibKartennummer);
return ausleiheSystem.medienVerlängern(benutzer,eindeutigeKennung);
}
// Mediums Rückgabe
public ArrayList<String> medienRückgabe(String eindeutigeKennung) {
return ausleiheSystem.mediumRückgabe(ausleihe, eindeutigeKennung);
}
/* Admin Methoden:
* 1. Anmeldung
* 2. Gebühren des BibBenutzers anzeigen
* 3. Gebühren verbuchen
* 4. akteulle ausgelihene Mediums der Benutzer anzeigen
*
*/
// Anmeldung
public boolean adminAnmelden(String bibKartennummerAdmin){
this.bibAdmin.anmelden();
return this.bibAdmin.isAngemeldet();
}
// aktuelle Gebühren der Benutzer
public double getgbührenBenutzer(String bibKartennummer) throws BenutzerNichtGefundenException {
Benutzer benutzer = findeBenutzer(bibKartennummer);
return benutzer.getGebühren();
}
// akteulle ausgelihene Mediums der Benutzer
public ArrayList<String> ausgeliehenGegenstände(String bibKartennummer) throws BenutzerNichtGefundenException {
Benutzer bibUser = findeBenutzer(bibKartennummer);
ArrayList<String> treffer = new ArrayList<>();
for (Ausleihe ausleihe : bibUser.getAusgeliehenenMedien())
treffer.add(ausleihe.toString());
return treffer;
}
public boolean gebührenVerbuchen(String bibKartennummer) throws BenutzerNichtGefundenException {
Benutzer bibUser = findeBenutzer(bibKartennummer);
((Mitarbeiter)this.bibAdmin).gebührVerbuchen(bibUser);
return bibUser.getGebühren() == 0.0;
}
// Simuliere Datum
public double datumÄndern(String eindeutigeKennung,String ausleiheBeginn, String ausleiheEnde,String datum) throws MediumNichtGefundenException {
return ausleiheSystem.SimulieremediumRückgabe(ausleihe, eindeutigeKennung, ausleiheBeginn, ausleiheEnde, datum);
}
// jahresGebühren berechnen
public double jahresGebührenBerechnen(String bibKartennummer, String datum) throws BenutzerNichtGefundenException {
Benutzer benutzer = findeBenutzer(bibKartennummer);
return benutzer.jahresgebühren(datum);
}
// Mediums Aufladen
public void mediumsAufladen(String type, String ID, String title, int erscheinungsjahr, String ersteller,
String verlängbar, int anzahl, int leihdauer) throws FalscheEingabeException {
public void mediumsAufladen(String type, String ID, String title, int erscheinungsjahr,String ersteller,String verlängbar,int anzahl,int leihdauer) throws FalscheEingabeException {
Mediumverwalter medium;
boolean verlängerung = (verlängbar.equalsIgnoreCase("ja")) ? true: false;
switch (type) {
case "Buch":
medium = new Mediumverwalter(new Buch(ID, title, erscheinungsjahr, ersteller), verlängerung, anzahl,
leihdauer);
medium = new Mediumverwalter(new Buch(ID,title,erscheinungsjahr,ersteller),verlängerung,anzahl,leihdauer);
break;
case "Cd":
medium = new Mediumverwalter(new Cd(ID, title, erscheinungsjahr, ersteller), verlängerung, anzahl,
leihdauer);
medium = new Mediumverwalter(new Cd(ID,title,erscheinungsjahr,ersteller),verlängerung,anzahl,leihdauer);
break;
case "Brettspiel":
medium = new Mediumverwalter(new Brettspiel(ID, title, erscheinungsjahr, ersteller), verlängerung, anzahl,
leihdauer);
medium = new Mediumverwalter(new Brettspiel(ID,title,erscheinungsjahr,ersteller),verlängerung,anzahl,leihdauer);
break;
case "Dvd":
medium = new Mediumverwalter(new Dvd(ID, title, erscheinungsjahr, ersteller), verlängerung, anzahl,
leihdauer);
medium = new Mediumverwalter(new Dvd(ID,title,erscheinungsjahr,ersteller),verlängerung,anzahl,leihdauer);
break;
case "Videospiel":
medium = new Mediumverwalter(new Videospiel(ID, title, erscheinungsjahr, ersteller), verlängerung, anzahl,
leihdauer);
medium = new Mediumverwalter(new Videospiel(ID,title,erscheinungsjahr,ersteller),verlängerung,anzahl,leihdauer);
break;
default:
throw new FalscheEingabeException("Falsch Eingabe");
}
medien.put(ID, medium);
String getMediumID = medium.getMedium().getID();
medien.put(getMediumID, medium);
}
/*
* => Hilfsmethoden
*/
// Test Methode
private void mediumsAufladen() {
Mediumverwalter buch = new Mediumverwalter(new Buch("B001", "Effektives Java Programmieren", 2018, "Joshua Bloch"),true, 10, 28);
medien.put(buch.getMedium().getID(), buch);
@ -215,13 +158,15 @@ public class BibSystem {
Mediumverwalter buchIStNichtAusgeliehen = new Mediumverwalter(new Buch("BG001", "Javascript lenren", 2018, "Joshua Bloch"),true, 10, 28);
medien.put(buchIStNichtAusgeliehen.getMedium().getID(), buchIStNichtAusgeliehen);
Mediumverwalter Videospiel = new Mediumverwalter(new Videospiel("BG00122", "The Legend of Zelda: Breath of the Wild", 2017, "Nintendo Switch"),false, 2, 28);
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);
}
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()
.filter(k -> k.getBibAusweis().getKartenNummer().equalsIgnoreCase(bibKartenNummer)).findFirst()
.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.Test;
import domain.exceptionsKlassen.BenutzerNichtGefundenException;
import domain.exceptionsKlassen.FalscheEingabeException;
import domain.ExceptionsKlassen.BenutzerNichtGefundenException;
import domain.ExceptionsKlassen.FalscheEingabeException;
class UserAnmeldenTest {
@ -22,14 +22,14 @@ class UserAnmeldenTest {
// True => User ist Angemeldet
fassade.userRegistrieren("obai", "Student", 15, "nein");
fassade.userAnmelden("K1001");
assertTrue(fassade.userAnmdelden("K1001"));
}
@Test
void testBenutzerIstNichtImSystem() throws FalscheEingabeException, BenutzerNichtGefundenException {
// 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;
import domain.exceptionsKlassen.*;
import domain.ExceptionsKlassen.*;
import tui.Tui;
public class Main {

View File

@ -3,9 +3,9 @@ package tui;
import java.util.ArrayList;
import java.util.Scanner;
import domain.exceptionsKlassen.*;
import MedienHinzüfugen.MedienHinzufügen;
import domain.ExceptionsKlassen.*;
import domain.fassade.BibSystem;
import medienHinzüfugen.MedienHinzufügen;
public class Tui {
private BibSystem fassade;
@ -59,9 +59,6 @@ public class Tui {
case "8":
verbucheGebührenProzess();
break;
case "9":
datumÄndern();
break;
case "0":
programmIstAktiv = false;
System.out.println("Programm beendet.");
@ -85,12 +82,9 @@ public class Tui {
System.out.println("6. Ausgeliehene Gegenstände anzeigen");
System.out.println("7. Leihfrist verlängern");
System.out.println("8. Gebühren verbuchen (Admin)");
System.out.println("9. Datum ändern");
System.out.println("0. Programm beenden");
}
// Aktion: 1
private void registrierenProzess() {
System.out.println("<< Registrierung >>");
@ -114,7 +108,6 @@ public class Tui {
}
}
// Aktion: 2
private void anmeldenProzess() {
System.out.println("<< Anmeldung >>");
@ -122,38 +115,29 @@ public class Tui {
String kartennummer = eingabe.nextLine();
try {
{
double gebühren = fassade.userAnmelden(kartennummer);
System.out.println("Erfolgreich angemeldet.\n" + "Gebühren= " + gebühren);
if (fassade.userAnmdelden(kartennummer)) {
System.out.println("Erfolgreich angemeldet.");
}
} catch (BenutzerNichtGefundenException e) {
System.out.println("Fehler: " + e.getMessage());
}
}
// Aktion: 3
private void mediumDurchsuchenProzess() {
System.out.println("<< Medien durchsuchen >>");
System.out.print("Suchkriterium (z. B. Titel, Medienart, Ausgeliehen, nicht Ausgeliehen,Medien die bald wieder verügbar sind (ja/nein)): ");
System.out.print("Suchkriterium (z. B. Titel, Medienart): ");
String auswahl = eingabe.nextLine();
System.out.print("BibKartennummer: ");
String bibKartennummer = eingabe.nextLine();
try {
if (auswahl.equalsIgnoreCase("Medienart")) {
System.out.println("Bücher, Brettspiele, Dvds, Cds, Videospiele");
auswahl = eingabe.nextLine();
}
ArrayList<String> treffer = fassade.mediumDurchsuchen(auswahl, bibKartennummer);
treffer.forEach(System.out::println);
fassade.mediumDurchsuchen(auswahl, bibKartennummer);
} catch (Exception e) {
System.out.println("Fehler: " + e.getMessage());
}
}
// Aktion: 4
private void mediumAusleihenProzess() {
System.out.println("<< Medium ausleihen >>");
@ -164,14 +148,12 @@ public class Tui {
String eindeutigeKennung = eingabe.nextLine();
try {
double gebühren = fassade.mediumAusleihen(kartennummer, eindeutigeKennung);
System.out.println("Akteulle Gebühren= " + gebühren);
System.out.println(fassade.mediumAusleihen(kartennummer, eindeutigeKennung));
} catch (Exception e) {
System.out.println("Fehler: " + e.getMessage());
}
}
// Aktion: 5
private void mediumsRückgabeProzess() {
System.out.println("<< Medium zurückgeben >>");
@ -181,6 +163,7 @@ public class Tui {
try {
ArrayList<String> ausgelieheneMedien = fassade.medienRückgabe(eindeutigeKennung);
System.out.println("Medium erfolgreich zurückgegeben.");
if (ausgelieheneMedien.isEmpty())
System.out.println("Sie haben keine weiteren ausgeliehenen Medien.");
else {
@ -192,25 +175,6 @@ public class Tui {
}
}
// Aktion: 6
private void zeigeAusgelieheneGegenstände() {
System.out.println("<< Ausgeliehene Gegenstände anzeigen >>");
System.out.print("BibKartennummer: ");
String bibKartennummer = eingabe.nextLine();
try {
ArrayList<String> treffer = fassade.ausgeliehenGegenstände(bibKartennummer);
if (treffer.size() == 0)
System.out.println("Sie haben keine ausgeliehen Medien");
else
treffer.forEach(System.out::println);
} catch (Exception e) {
System.out.println("Fehler: " + e.getMessage());
}
}
// Aktion: 7
private void mediumsVerlängernProzess() {
System.out.println("<< Leihfrist verlängern >>");
@ -228,84 +192,31 @@ public class Tui {
}
}
//Aktion: 8
private void verbucheGebührenProzess() {
System.out.println("<< Gebühren verbuchen >>");
private void zeigeAusgelieheneGegenstände() {
System.out.println("<< Ausgeliehene Gegenstände anzeigen >>");
System.out.print("BibKartennummer des Admins: ");
System.out.print("BibKartennummer: ");
String bibKartennummer = eingabe.nextLine();
try {
if (fassade.adminAnmelden(bibKartennummer)) {
System.out.println("Erfolgreich Angemeldt");
System.out.println("Welche Aktion: ");
System.out.println("1.Betrag verbuchen");
System.out.println("2.ausgeliehene Mediums anzeigen");
System.out.println("3.aktuelles Betrag anzeigen");
System.out.print(">");
String auswahl = eingabe.nextLine();
String userID = eingabe.nextLine();
switch (auswahl) {
case "1":
System.out.println(fassade.gebührenVerbuchen(userID));
break;
case "2":
ArrayList<String> treffer = fassade.ausgeliehenGegenstände(userID);
treffer.forEach(System.out::println);
break;
case "3":
System.out.println(fassade.getgbührenBenutzer(userID));
break;
default:
System.out.println("Falsche Eingabe");
}
}
// fassade.zeigeAusgelieheneGegenstände(bibKartennummer);
} catch (Exception e) {
System.out.println("Fehler: " + e.getMessage());
}
}
// Aktion 9
private void datumÄndern() {
System.out.println("1.Jahresgebühren");
System.out.println("2.Ausleihefristen");
String auswahl = eingabe.nextLine();
private void verbucheGebührenProzess() {
System.out.println("<< Gebühren verbuchen >>");
switch (auswahl) {
case "1":
try {
System.out.println("Bibkartennummer:");
String bibkartennummer = eingabe.nextLine();
System.out.println("Datum: ");
String datum = eingabe.nextLine();
fassade.jahresGebührenBerechnen(bibkartennummer, datum);
} catch (BenutzerNichtGefundenException e) {
e.printStackTrace();
}
break;
case "2":
System.out.print("BibKartennummer des Nutzers: ");
String bibKartennummer = eingabe.nextLine();
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) {
// fassade.verbucheGebühren(bibKartennummer);
System.out.println("Gebühren erfolgreich verbucht.");
} catch (Exception e) {
System.out.println("Fehler: " + e.getMessage());
}
}
}
}