Compare commits

...

17 Commits

Author SHA1 Message Date
Obai Albek d7ebd00706 Update 2025-05-18 22:56:17 +02:00
obai de0b00d4ae Code-Verbesserung nach dem Feedback 2024-11-20 12:01:33 +01:00
3009594 eda91e849a code-verbesserung 2024-11-19 14:20:03 +01:00
3009594 6fabcb4d46 code-Verbesserung 2024-11-19 13:55:24 +01:00
3009594 e89fa80185 Code-Verbesserung 2024-11-18 21:42:40 +01:00
3009594 55934bacfe Code-Verbesserung 2024-11-18 21:13:20 +01:00
obai 8006b66f42 Code-Verbesserung 2024-11-18 19:12:14 +01:00
obai 7858e0c1ce Code-Verbesserung 2024-11-18 19:00:14 +01:00
3009594 194a7df9e0 Endkontrolle 2024-11-17 22:43:41 +01:00
3009594 d22956b53f EndKontrolle für das System 2024-11-17 22:18:28 +01:00
3009594 b62bed0fb0 MedienHinzufügen Prozess & code-Verbesserungen 2024-11-16 18:32:51 +01:00
3009594 712087279b Gebühren berechnen Prozess 2024-11-16 17:29:55 +01:00
3009594 da0ce0845f Medium verlängernProzess fertig implementiert und getestet 2024-11-15 18:19:05 +01:00
3009594 1b02808644 MedienRückgabe- AusleiheFrist simulieren berechnen und testen 2024-11-15 17:51:55 +01:00
3009594 34b2daa2bb JahresGebühren simulieren berechnen und bezahlen 2024-11-15 14:23:11 +01:00
3009594 76334da35f Medien Rückgabe 2024-11-14 21:40:07 +01:00
3009594 c58e4e9dcf Ausleihe-Prozess 2024-11-14 13:52:51 +01:00
49 changed files with 1598 additions and 862 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

View File

@ -1,9 +1,12 @@
<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">
<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">
<diagram name="Seite-1" id="xkmZ0K6vz5A5_BixXH1Q">
<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">
<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">
<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" />
@ -18,9 +21,6 @@
<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,144 +55,109 @@
<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="757" y="270" width="70" height="20" as="geometry" />
<mxGeometry x="767" y="260" width="70" height="20" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--29" value="registrieren" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="450" y="300" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="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="440" width="100" height="30" as="geometry" />
<mxGeometry x="430" y="518" width="100" height="30" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--33" value="Medium zurückgeben" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="450" y="512" width="60" height="30" as="geometry" />
<mxGeometry x="440" y="590" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--34" value="Gebühren bezahlen" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="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" />
<mxGeometry x="440" y="690" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--38" value="" style="verticalLabelPosition=bottom;verticalAlign=top;html=1;shape=mxgraph.flowchart.on-page_reference;" parent="1" vertex="1">
<mxGeometry x="580" y="690" width="60" height="60" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--41" value="&lt;i&gt;Medium&lt;/i&gt;" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=none;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="1100" y="720" width="180" height="130" as="geometry" />
<mxGeometry x="1700" y="640" width="180" height="110" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--42" value="- KennungNummer: int" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" 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 id="ydUtLetK26WXyeJ3qCt--42" value="- ID: String&lt;div&gt;- erscheinungsjahr: int&lt;/div&gt;&lt;div&gt;- title: String&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="ydUtLetK26WXyeJ3qCt--41" vertex="1">
<mxGeometry y="26" width="180" height="84" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--79" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="960" y="954" as="sourcePoint" />
<mxPoint x="960" y="904" as="targetPoint" />
<mxPoint x="1560" y="864" as="sourcePoint" />
<mxPoint x="1560" y="814" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--80" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="960" y="904" as="sourcePoint" />
<mxPoint x="1650" y="904" as="targetPoint" />
<mxPoint x="1560" y="814" as="sourcePoint" />
<mxPoint x="2250" y="814" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--81" value="" style="endArrow=none;html=1;rounded=0;exitX=0.584;exitY=0.003;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="ydUtLetK26WXyeJ3qCt--62" 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" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1650" y="944" as="sourcePoint" />
<mxPoint x="1650" y="904" as="targetPoint" />
<mxPoint x="2251.7599999999998" y="864.156" as="sourcePoint" />
<mxPoint x="2250" y="814" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--82" value="Extends" style="endArrow=block;endSize=16;endFill=0;html=1;rounded=0;entryX=0.399;entryY=0.998;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" target="ydUtLetK26WXyeJ3qCt--44" edge="1">
<mxCell id="ydUtLetK26WXyeJ3qCt--82" value="Extends" style="endArrow=block;endSize=16;endFill=0;html=1;rounded=0;entryX=0.401;entryY=1.012;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" target="ydUtLetK26WXyeJ3qCt--42" edge="1">
<mxGeometry width="160" relative="1" as="geometry">
<mxPoint x="1170" y="904" as="sourcePoint" />
<mxPoint x="1330" y="904" as="targetPoint" />
<mxPoint x="1770" y="814" as="sourcePoint" />
<mxPoint x="1771.8199999999997" y="753.8760000000002" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--84" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1120" y="954" as="sourcePoint" />
<mxPoint x="1120" y="904" as="targetPoint" />
<mxPoint x="1720" y="864" as="sourcePoint" />
<mxPoint x="1720" y="814" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--86" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1309.45" y="954" as="sourcePoint" />
<mxPoint x="1309.45" y="904" as="targetPoint" />
<mxPoint x="1909.45" y="864" as="sourcePoint" />
<mxPoint x="1909.45" y="814" as="targetPoint" />
<Array as="points">
<mxPoint x="1309.45" y="924" />
<mxPoint x="1909.45" y="834" />
</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="1470" y="954" as="sourcePoint" />
<mxPoint x="1470" y="904" as="targetPoint" />
<mxPoint x="2070" y="864" as="sourcePoint" />
<mxPoint x="2070" y="814" 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="1650" y="954" as="sourcePoint" />
<mxPoint x="1650" y="904" as="targetPoint" />
<mxPoint x="2250" y="864" as="sourcePoint" />
<mxPoint x="2250" y="814" as="targetPoint" />
</mxGeometry>
</mxCell>
<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">
<mxCell id="ydUtLetK26WXyeJ3qCt--131" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" target="ydUtLetK26WXyeJ3qCt--10" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="880" y="572" />
</Array>
<mxPoint x="790" y="364" as="sourcePoint" />
</mxGeometry>
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--117" value="&lt;font style=&quot;font-size: 12px;&quot;&gt;BibSystem&lt;/font&gt;" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=none;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="790" y="338" width="180" height="52" as="geometry" />
<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>
<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 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>
<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 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>
<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 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>
<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 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>
<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">
@ -243,121 +208,281 @@
</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="1280" y="340" width="160" height="114" as="geometry" />
<mxGeometry x="850" y="1090" width="310" height="118" as="geometry" />
</mxCell>
<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 id="ydUtLetK26WXyeJ3qCt--159" value="- ausleihBeginn: LocalDate&lt;div&gt;- ausleihEnde: LocalDate&amp;nbsp;&lt;/div&gt;&lt;div&gt;- medium: Mediumverwalter&lt;/div&gt;&lt;div&gt;- benutzer: Benutzer&lt;/div&gt;&lt;div&gt;- verlängerungen: int&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="ydUtLetK26WXyeJ3qCt--158" vertex="1">
<mxGeometry y="26" width="310" height="84" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--160" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" parent="ydUtLetK26WXyeJ3qCt--158" vertex="1">
<mxGeometry y="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" />
<mxGeometry y="110" width="310" height="8" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--162" value="Ausweis" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="1300" y="528" width="160" height="114" as="geometry" />
<mxGeometry x="1220" y="1300" width="160" height="90" as="geometry" />
</mxCell>
<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">
<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">
<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="+ 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 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>
<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 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>
<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="1560" y="310" width="260" height="320" as="geometry" />
<mxGeometry x="1470" y="1010" width="260" height="320" as="geometry" />
</mxCell>
<mxCell id="ydUtLetK26WXyeJ3qCt--176" value="&lt;span style=&quot;font-weight: normal;&quot;&gt;- bibAusweis: Ausweis&lt;/span&gt;&lt;div style=&quot;line-height: 140%;&quot;&gt;&lt;span style=&quot;background-color: initial; font-weight: normal;&quot;&gt;- name: String&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;line-height: 140%;&quot;&gt;&lt;span style=&quot;background-color: initial; font-weight: normal;&quot;&gt;- alter: int&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;line-height: 140%;&quot;&gt;&lt;span style=&quot;background-color: initial; font-weight: normal;&quot;&gt;- istStudent: boolean&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;line-height: 160%;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;-&amp;nbsp;&lt;span style=&quot;background-color: initial;&quot;&gt;ausgeliehenenMedien[]: Medium&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;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">
<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">
<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(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">
<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">
<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="1519" y="750" as="sourcePoint" />
<mxPoint x="1519" y="700" as="targetPoint" />
<mxPoint x="1429" y="1450" as="sourcePoint" />
<mxPoint x="1429" y="1400" as="targetPoint" />
<Array as="points">
<mxPoint x="1520" y="730" />
<mxPoint x="1430" y="1430" />
</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="1719" y="750" as="sourcePoint" />
<mxPoint x="1719" y="700" as="targetPoint" />
<mxPoint x="1629" y="1450" as="sourcePoint" />
<mxPoint x="1629" y="1400" 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="1519" y="700" as="sourcePoint" />
<mxPoint x="1719" y="700" as="targetPoint" />
<mxPoint x="1429" y="1400" as="sourcePoint" />
<mxPoint x="1629" y="1400" 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="1649" y="700" as="sourcePoint" />
<mxPoint x="1630" y="680" as="targetPoint" />
<mxPoint x="1559" y="1400" as="sourcePoint" />
<mxPoint x="1540" y="1380" as="targetPoint" />
</mxGeometry>
</mxCell>
<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">
<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">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<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 id="i-RIzz4hhB1Q3m7lVkjo-21" value="1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="1640" y="518" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="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 id="i-RIzz4hhB1Q3m7lVkjo-22" value="1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="1750" y="610" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="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 id="i-RIzz4hhB1Q3m7lVkjo-25" value="Buch" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=none;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="1490" y="864" width="140" height="52" as="geometry" />
</mxCell>
<mxCell id="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 id="i-RIzz4hhB1Q3m7lVkjo-26" value="- autor: String" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="i-RIzz4hhB1Q3m7lVkjo-25" vertex="1">
<mxGeometry y="26" width="140" height="26" as="geometry" />
</mxCell>
<mxCell id="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">
<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">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1180" y="407" as="sourcePoint" />
<Array as="points">
<mxPoint x="770" y="470" />
<mxPoint x="770" y="1102" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="i-RIzz4hhB1Q3m7lVkjo-58" value="&lt;font style=&quot;font-size: 22px;&quot;&gt;*&lt;/font&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="790" y="1080" width="60" height="30" as="geometry" />
</mxCell>
<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.

After

Width:  |  Height:  |  Size: 298 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 89 KiB

View File

@ -1,29 +0,0 @@
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,48 +0,0 @@
package domain.AusleiheSystem;
import java.text.SimpleDateFormat;
import java.util.Date;
import domain.Medium.Medium;
import domain.Medium.Mediumverwalter;
public class Ausleihe {
private SimpleDateFormat simpleFormatter;
private Date ausleiheBeginn, ausleiheEnde;
private Mediumverwalter medium;
private int verlängerungen;
public Ausleihe(Mediumverwalter medium,Date ausleiheBeginn, Date ausleiheEnde) {
this.medium = medium;
this.ausleiheBeginn = ausleiheBeginn;
this.ausleiheEnde = ausleiheEnde;
this.simpleFormatter = new SimpleDateFormat("dd-MM-yyyy HH:mm");
this.verlängerungen = 0;
}
public Date getAusleiheBeginn() {
return ausleiheBeginn;
}
public void setAusleiheBeginn(Date ausleiheBeginn) {
this.ausleiheBeginn = ausleiheBeginn;
}
public Date getAusleiheEnde() {
return ausleiheEnde;
}
public void setAusleiheEnde(Date ausleiheEnde) {
this.ausleiheEnde = ausleiheEnde;
}
public Mediumverwalter getMedium() {
return medium;
}
@Override
public String toString() {
return "Ausgeliehene Mediums= "+ medium.toString()+ " Ausleihe Beginn= " +simpleFormatter.format(ausleiheBeginn) + " ,Ausleihe Ende= " + simpleFormatter.format(ausleiheEnde) + " ,verlängerungen= " + verlängerungen;
}
}

View File

@ -1,51 +0,0 @@
package domain.AusleiheSystem;
import java.util.*;
import domain.Benutzer.Benutzer;
import domain.ExceptionsKlassen.MediumNichtGefundenException;
import domain.Medium.*;
public class AusleiheSystem {
private HashMap<String,Mediumverwalter> medien;
private Date ausleiheBeginn;
private Date ausleiheEnde;
private Calendar calendar;
public AusleiheSystem( HashMap<String,Mediumverwalter> medien) {
this.medien = medien;
}
public Ausleihe mediumAusleihen(Benutzer benutzer, String eindutigenummer) throws MediumNichtGefundenException {
Mediumverwalter mediumAusleihen = findMedium(eindutigenummer);
if (mediumAusleihen.isIstAusgeliehen())
throw new MediumNichtGefundenException("Das Medium ist ausgeliehen");
mediumAusleihen.setIstAusgeliehen(true);
mediumAusleihen.setAnzahl(mediumAusleihen.getAnzahl() - 1);
this.ausleiheBeginn = new Date();
this.calendar = Calendar.getInstance();
calendar.setTime(ausleiheBeginn);
calendar.add(Calendar.WEEK_OF_YEAR, mediumAusleihen.getLeihdauer());
this.ausleiheEnde = calendar.getTime();
Ausleihe neueAusleihe = new Ausleihe(mediumAusleihen,ausleiheBeginn,ausleiheEnde);
benutzer.ausleihen(neueAusleihe);
System.out.println(benutzer.getAusgeliehenenMedien());
return neueAusleihe;
}
private Mediumverwalter findMedium(String eindeutigeKennung) throws MediumNichtGefundenException {
if (medien.containsKey(eindeutigeKennung))
return medien.get(eindeutigeKennung);
else
throw new MediumNichtGefundenException("Das ausgewählte Medium ist nicht verfügbar");
}
}

View File

@ -1,124 +0,0 @@
package domain.Benutzer;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import domain.AusleiheSystem.Ausleihe;
import domain.Medium.Medium;
public abstract class Benutzer {
private Ausweis bibAusweis;
private String name;
private int alter;
private boolean istStudent;
private ArrayList<Ausleihe> ausgeliehenenMedien;
private boolean angemeldet;
private double gebühren;
private Date anmeldebeginn,anmeldeEnde;
private SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
public Benutzer(Ausweis bibAusweis, String name, int alter, boolean istStudent) {
super();
this.bibAusweis = bibAusweis;
this.name = name;
this.alter = alter;
this.istStudent = istStudent;
this.ausgeliehenenMedien = new ArrayList<>();
this.angemeldet = false;
this.gebühren = 0;
this.anmeldebeginn = new Date();
}
public Ausweis getBibAusweis() {
return bibAusweis;
}
public void setBibAusweis(Ausweis bibAusweis) {
this.bibAusweis = bibAusweis;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAlter() {
return alter;
}
public void setAlter(int alter) {
this.alter = alter;
}
public boolean isIstStudent() {
return istStudent;
}
public void setIstStudent(boolean istStudent) {
this.istStudent = istStudent;
}
public ArrayList<Ausleihe> getAusgeliehenenMedien() {
return ausgeliehenenMedien;
}
public void ausleihen(Ausleihe medium) {
this.ausgeliehenenMedien.add(medium);
}
public void removeMedium(Ausleihe medium) {
this.ausgeliehenenMedien.remove(medium);
}
public boolean isAngemeldet() {
return angemeldet;
}
public void setAngemeldet(boolean angemeldet) {
this.angemeldet = angemeldet;
}
public double getGebühren() {
return gebühren;
}
public void setGebühren(double gebühren) {
this.gebühren = gebühren;
}
public Date getAnmeldebeginn() {
return anmeldebeginn;
}
public void setAnmeldebeginn(String anmeldebeginn) throws ParseException {
this.anmeldebeginn = formatter.parse(anmeldebeginn);
}
public Date getAnmeldeEnde() {
return anmeldeEnde;
}
public void setAnmeldeEnde(String anmeldeEnde) throws ParseException {
this.anmeldeEnde= formatter.parse(anmeldeEnde);
}
public abstract double getJahresgebühr();
@Override
public String toString() {
return "Benutzer [bibAusweisNummer= " + bibAusweis.getKartenNummer() + ", name=" + name + ", alter=" + alter + ", istStudent="
+ istStudent + ", ist im System Online = " + angemeldet + "Gebühren= "+ gebühren +"Anmeldet seit= " + formatter.format(anmeldeEnde) + ", ausgeliehenenMedien=" + ausgeliehenenMedien + "]";
}
}

View File

@ -1,14 +0,0 @@
package domain.Benutzer;
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,62 +0,0 @@
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 -> "Eindutige Kennung= " + t.toString()).collect(Collectors.toCollection(ArrayList::new));
case "Brettspiele":
return medien.entrySet().stream()
.filter(t -> t.getValue().getMedium() instanceof Brettspiel)
.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 -> "Eindutige Kennung= " + t.toString()).collect(Collectors.toCollection(ArrayList::new));
case "Cds":
return medien.entrySet().stream()
.filter(t -> t.getValue().getMedium() instanceof Cd)
.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 -> "Eindutige Kennung= " + t.toString()).collect(Collectors.toCollection(ArrayList::new));
default:
return null;
}
}
}

View File

@ -1,26 +0,0 @@
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

@ -1,47 +0,0 @@
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

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

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

View File

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

View File

@ -0,0 +1,42 @@
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

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

View File

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

View File

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

View File

@ -0,0 +1,14 @@
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,4 +1,4 @@
package domain.Benutzer;
package domain.benutzer;
public class Mitarbeiter extends Benutzer {
@ -7,11 +7,12 @@ public class Mitarbeiter extends Benutzer {
}
@Override
public double getJahresgebühr() {
return 50.0;
public double getJahresgebühren() {
return 0.0;
}
public void gebührVerbuchen(Benutzer benutzer) {
benutzer.setGebühren(getGebühren() * 0);
benutzer.setGebühren(0.0);
}
}

View File

@ -0,0 +1,14 @@
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,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.UserRegistieren.Registieren;
import domain.benutzer.Benutzer;
import domain.exceptionsKlassen.BenutzerNichtAngemeldetException;
import domain.exceptionsKlassen.BenutzerNichtGefundenException;
import domain.exceptionsKlassen.FalscheEingabeException;
import domain.exceptionsKlassen.MediumNichtGefundenException;
import domain.fassade.BibSystem;
import domain.fassade.Registieren;
class MedienSuchenTest {
@ -24,27 +24,27 @@ private BibSystem fassade;
void erstelleObjekt() throws FalscheEingabeException, BenutzerNichtGefundenException {
this.fassade = new BibSystem();
fassade.userRegistrieren("obai", "student", 15, "nein");
fassade.userAnmdelden("K1000");
fassade.userAnmelden("K1001");
}
@Disabled
void testMedienSuchenNachTitle()throws MediumNichtGefundenException, FalscheEingabeException, BenutzerNichtAngemeldetException {
ArrayList<String> nichtAusgeliehen = fassade.mediumDurchsuchen("Effektives Java Programmieren", "K1000");
void testMedienSuchenNachTitle()throws MediumNichtGefundenException, FalscheEingabeException, BenutzerNichtAngemeldetException, BenutzerNichtGefundenException {
ArrayList<String> nichtAusgeliehen = fassade.mediumDurchsuchen("Effektives Java Programmieren", "K1001");
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 testMedienSuchenNachausgeliehen()throws MediumNichtGefundenException, FalscheEingabeException, BenutzerNichtAngemeldetException {
ArrayList<String> nichtAusgeliehen = fassade.mediumDurchsuchen("ausgeliehen", "K1000");
void testMedienSuchenNachMedienart()throws MediumNichtGefundenException, FalscheEingabeException, BenutzerNichtAngemeldetException, BenutzerNichtGefundenException {
ArrayList<String> nichtAusgeliehen = fassade.mediumDurchsuchen("Videospiele", "K1001");
nichtAusgeliehen.forEach(System.out::println);
}
@Disabled
void testMedienSuchenNachausgeliehen()throws MediumNichtGefundenException, FalscheEingabeException, BenutzerNichtAngemeldetException, BenutzerNichtGefundenException {
ArrayList<String> nichtAusgeliehen = fassade.mediumDurchsuchen("ausgeliehen", "K1001");
nichtAusgeliehen.forEach(System.out::println);
}

View File

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

View File

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

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

View File

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

View File

@ -0,0 +1,37 @@
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 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

@ -0,0 +1,41 @@
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");
assertTrue(fassade.userAnmdelden("K1000"));
fassade.userAnmelden("K1001");
}
@Test
void testBenutzerIstNichtImSystem() throws FalscheEingabeException, BenutzerNichtGefundenException {
// True, da Benutzer nicht im System ist
assertThrows( BenutzerNichtGefundenException.class, () -> fassade.userAnmdelden("K1000") );
assertThrows( BenutzerNichtGefundenException.class, () -> fassade.userAnmelden("K1001") );
}
}

View File

@ -1,11 +1,12 @@
package domain.Medium;
package domain.medium;
public class Brettspiel extends Medium {
private String Verlag;
public Brettspiel(String title, int erscheinungsjahr, String Verlag) {
super(title, erscheinungsjahr);
public Brettspiel(String ID,String title, int erscheinungsjahr, String Verlag) {
super(ID,title, erscheinungsjahr);
if (Verlag.isEmpty())
this.Verlag = "-";

View File

@ -1,12 +1,12 @@
package domain.Medium;
package domain.medium;
public class Buch extends Medium {
private String autor;
public Buch(String title, int erscheinungsjahr, String autor) {
super(title, erscheinungsjahr);
public Buch(String ID,String title, int erscheinungsjahr, String autor) {
super(ID,title, erscheinungsjahr);
if (autor.isEmpty())
this.autor = "-";

View File

@ -1,12 +1,13 @@
package domain.Medium;
package domain.medium;
import java.util.Date;
public class Cd extends Medium {
private String Künstler;
public Cd(String title, int erscheinungsjahr,String Künstler) {
super(title, erscheinungsjahr);
public Cd(String ID,String title, int erscheinungsjahr,String Künstler) {
super(ID,title, erscheinungsjahr);
if (Künstler.isEmpty())
this.Künstler = "-";

View File

@ -1,11 +1,11 @@
package domain.Medium;
package domain.medium;
public class Dvd extends Medium {
private String regisseur;
public Dvd(String title, int erscheinungsjahr,String regisseur) {
super(title, erscheinungsjahr);
public Dvd(String ID,String title, int erscheinungsjahr,String regisseur) {
super(ID,title, erscheinungsjahr);
if (regisseur.isEmpty())
this.regisseur = "-";

View File

@ -1,16 +1,17 @@
package domain.Medium;
package domain.medium;
import java.util.Date;
public abstract class Medium {
private String title;
private int erscheinungsjahr;
private String ID;
public Medium(String title, int erscheinungsjahr) {
public Medium(String ID,String title, int erscheinungsjahr) {
super();
this.title = title;
this.erscheinungsjahr = erscheinungsjahr;
this.ID = ID;
}
public String getTitle() {
@ -20,10 +21,14 @@ public abstract class Medium {
public int getErscheinungsjahr() {
return erscheinungsjahr;
}
public String getID() {
return ID;
}
@Override
public String toString() {
return "title=" + title + ", erscheinungsjahr=" + erscheinungsjahr;
return "ID= "+ ID + " ,title=" + title + ", erscheinungsjahr=" + erscheinungsjahr;
}
}

View File

@ -1,4 +1,4 @@
package domain.Medium;
package domain.medium;
public class Mediumverwalter {
@ -8,7 +8,7 @@ public class Mediumverwalter {
private Medium medium;
private boolean istAusgeliehen;
public Mediumverwalter(boolean verlängerbar, int anzahl, int leihdauer, Medium medium) {
public Mediumverwalter( Medium medium, boolean verlängerbar, int anzahl, int leihdauer) {
super();
this.verlängerbar = verlängerbar;
this.anzahl = anzahl;
@ -48,9 +48,13 @@ public class Mediumverwalter {
@Override
public String toString() {
return "Medium=" + medium.toString() + " ,verlängerbar=" + verlängerbar + ", anzahl=" + anzahl + ",ist Ausgeliehen= " + istAusgeliehen + ", Leihdauer="
+ leihdauer ;
return "Medium=" + medium.toString() +
" ,verlängerbar=" + verlängerbar +
", anzahl=" + anzahl +
",ist Ausgeliehen= " + istAusgeliehen +
", Leihdauer=" + leihdauer ;
}
}

View File

@ -1,4 +1,4 @@
package domain.Medium;
package domain.medium;
import java.util.Date;
@ -6,8 +6,8 @@ public class Videospiel extends Medium {
private String plattform;
public Videospiel(String title, int erscheinungsjahr, String plattform) {
super(title, erscheinungsjahr);
public Videospiel(String ID,String title, int erscheinungsjahr, String plattform) {
super(ID,title, erscheinungsjahr);
if (plattform.isEmpty())
this.plattform = "-";

View File

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

View File

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

View File

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

View File

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