diff --git a/.project b/.project
new file mode 100644
index 0000000..bc765ee
--- /dev/null
+++ b/.project
@@ -0,0 +1,11 @@
+
+
+ PR2
+
+
+
+
+
+
+
+
diff --git a/PR2_UIB/.classpath b/PR2_UIB/.classpath
index 655aa55..c07c2e8 100644
--- a/PR2_UIB/.classpath
+++ b/PR2_UIB/.classpath
@@ -2,10 +2,16 @@
+
+
+
+
+
+
diff --git a/PR2_UIB/Exercises/Lernen/DemoXMLDeserialisierung.java b/PR2_UIB/Exercises/Lernen/DemoXMLDeserialisierung.java
new file mode 100644
index 0000000..1a6abf3
--- /dev/null
+++ b/PR2_UIB/Exercises/Lernen/DemoXMLDeserialisierung.java
@@ -0,0 +1,20 @@
+package Lernen;
+
+import java.beans.XMLDecoder;
+import java.io.FileInputStream;
+import java.io.IOException;
+
+public class DemoXMLDeserialisierung {
+
+ public static void main(String[] args) {
+ String filename = "Beispiel.xml"; // Corrected the filename
+
+ // Deserialize
+ try (XMLDecoder dec = new XMLDecoder(new FileInputStream(filename))) {
+ Person wiedereinePerson = (Person) dec.readObject();
+ System.out.println(wiedereinePerson.getName() + " " + wiedereinePerson.getVorname() + " " + wiedereinePerson.getAlter());
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+}
\ No newline at end of file
diff --git a/PR2_UIB/Exercises/Lernen/DemoXMLSerialisierung.java b/PR2_UIB/Exercises/Lernen/DemoXMLSerialisierung.java
new file mode 100644
index 0000000..663317c
--- /dev/null
+++ b/PR2_UIB/Exercises/Lernen/DemoXMLSerialisierung.java
@@ -0,0 +1,19 @@
+package Lernen;
+
+import java.io.*;
+import java.beans.*;
+
+public class DemoXMLSerialisierung {
+
+ public static void main(String[] args) {
+ Person einePerson = new Person("Mustermann", "Harald", 38);
+ String filename = "Beispiel.xml"; // Corrected the filename
+
+ // Serialize
+ try (XMLEncoder enc = new XMLEncoder(new FileOutputStream(filename))) {
+ enc.writeObject(einePerson);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+}
\ No newline at end of file
diff --git a/PR2_UIB/Exercises/Lernen/ObjectInputOutputStreamEx.java b/PR2_UIB/Exercises/Lernen/ObjectInputOutputStreamEx.java
new file mode 100644
index 0000000..23a3457
--- /dev/null
+++ b/PR2_UIB/Exercises/Lernen/ObjectInputOutputStreamEx.java
@@ -0,0 +1,27 @@
+package Lernen;
+
+import java.beans.XMLEncoder;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+import Testat1.Tutor_Aufgaben.Clone.Alien;
+import Testat1.Tutor_Aufgaben.Clone.Raumanzug;
+
+public class ObjectInputOutputStreamEx {
+
+ public static void main(String[] args) {
+ String DateiName = "test1.txt";
+ Alien a1 = new Alien ("sfei", new Raumanzug());
+ Alien a2 = a1;
+ Raumanzug r1 = a1.getAnzug();
+
+ try (XMLEncoder output = new XMLEncoder(new FileOutputStream(DateiName))){
+ output.writeObject(a1);
+
+
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+}
diff --git a/PR2_UIB/Exercises/Lernen/Person.java b/PR2_UIB/Exercises/Lernen/Person.java
new file mode 100644
index 0000000..f33ff29
--- /dev/null
+++ b/PR2_UIB/Exercises/Lernen/Person.java
@@ -0,0 +1,39 @@
+package Lernen;
+
+public class Person {
+ private String name;
+ private String vorname;
+ private int alter;
+
+ public Person() {}
+
+ public Person(String name, String vorname, int alter) {
+ this.name = name;
+ this.vorname = vorname;
+ this.alter = alter;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getVorname() {
+ return vorname;
+ }
+
+ public void setVorname(String vorname) {
+ this.vorname = vorname;
+ }
+
+ public int getAlter() {
+ return alter;
+ }
+
+ public void setAlter(int alter) {
+ this.alter = alter;
+ }
+}
diff --git a/PR2_UIB/Exercises/Lernen/StringsmitFileInputOutputStreams.java b/PR2_UIB/Exercises/Lernen/StringsmitFileInputOutputStreams.java
new file mode 100644
index 0000000..2f3a67f
--- /dev/null
+++ b/PR2_UIB/Exercises/Lernen/StringsmitFileInputOutputStreams.java
@@ -0,0 +1,40 @@
+package Lernen;
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.io.PrintWriter;
+
+public class StringsmitFileInputOutputStreams {
+
+
+ public static void main(String[] args) {
+ int e = 2;
+ double d = 2.4;
+ String dateiName = "src/test.txt";
+ String data = null;
+
+ try (BufferedReader input = new BufferedReader(new InputStreamReader(System.in))){
+ data = input.readLine();
+ } catch (Exception x) {
+ x.printStackTrace();
+ }
+
+ try (PrintWriter input = new PrintWriter(dateiName)){
+ String xy = null;
+ xy += (data + d )+ e;
+ input.write(xy);
+// input.println(d);
+// input.println(e);
+
+ } catch (Exception x) {
+ x.printStackTrace();
+ }
+ }
+
+}
diff --git a/PR2_UIB/Exercises/Lernen/Test.java b/PR2_UIB/Exercises/Lernen/Test.java
new file mode 100644
index 0000000..85552cf
--- /dev/null
+++ b/PR2_UIB/Exercises/Lernen/Test.java
@@ -0,0 +1,23 @@
+package Lernen;
+
+import Testat1.Tutor_Aufgaben.Clone.Alien;
+import Testat1.Tutor_Aufgaben.Clone.Raumanzug;
+
+public class Test {
+
+ public static void main(String[] args) throws CloneNotSupportedException {
+ Alien a1 = new Alien("Sirat", new Raumanzug());
+ Raumanzug r = a1.getAnzug();
+ r.auftanken();
+ System.out.println(r);
+ System.out.println(a1.toString());
+
+ Alien a2 = a1.clone();
+ Raumanzug r2 = a2.getAnzug();
+ r2.setSauerstoffVorrat(2);
+ System.out.println(a2.getAnzug());
+ System.out.println(r);
+ System.out.println(a2.toString());
+
+ }
+}
diff --git a/PR2_UIB/Exercises/Testat1/Tutor_Aufgaben/Aufgabenstellungen b/PR2_UIB/Exercises/Testat1/Tutor_Aufgaben/Aufgabenstellungen
new file mode 100644
index 0000000..57fc806
--- /dev/null
+++ b/PR2_UIB/Exercises/Testat1/Tutor_Aufgaben/Aufgabenstellungen
@@ -0,0 +1,25 @@
+Programmieren 2 Übungsstunde 15.04 Input/Output Grundlagen
+
+1. DoubleFormatter
+Implementiere eine Methode printDouble,
+die eine Dezimalzahl entgegennimmt und sie auf eine bestimmte Anzahl von Nachkommastellen gerundet ausgibt.
+Die Methode soll keine printf-Anweisung verwenden, sondern den gerundeten Wert selbst berechnen und ausgeben.
+
+2. Clone:
+fügen Sie der Klasse Alien eine clone()-Methode hinzu,
+die eine tiefe Kopie der Objekte anlegt.
+Hierzu müssen Sie auch Raumanzug mit einer clone()-Methode ausstatten.
+Testen Sie, ob Ihre Implementierung korrekt funktioniert, indem Sie die vorhandenen Testfälle ausführen.
+Damit die Tests laufen können, müssen Sie die Kommentarzeichen entfernen.
+
+3. BufferedWriter/Reader:
+Schreiben Sie die Datei Mondnacht.txt per BufferedWriter in Java und Lesen Sie die Datei Mondnacht.txt zeilenweise ein und geben
+Sie die Zeilen mit einer fortlaufenden Zeilennummer wieder aus.
+Dazu soll noch die Anzahl der Wörter, Buchstaben und Zeilen am Ende ausgegeben werden. Verwenden Sie hierzu einen BufferedReader.
+
+4. Serialisierung:
+Serialisieren Sie die Klasse Produkt und testen Sie ob die Serialisierung funktioniert hat.
+
+5. Bonus:
+Implementieren Sie eine Methode convertDate, die ein Datum im Format "dd.MM.yyyy" entgegennimmt und es in das Format "yyyy-MM-dd" konvertiert.
+Die Methode soll einen String zurückgeben, der das konvertierte Datum darstellt.
diff --git a/PR2_UIB/Exercises/Testat1/Tutor_Aufgaben/Clone/Alien.java b/PR2_UIB/Exercises/Testat1/Tutor_Aufgaben/Clone/Alien.java
new file mode 100644
index 0000000..632973d
--- /dev/null
+++ b/PR2_UIB/Exercises/Testat1/Tutor_Aufgaben/Clone/Alien.java
@@ -0,0 +1,102 @@
+package Testat1.Tutor_Aufgaben.Clone;
+
+import java.io.Serializable;
+
+/**
+ * Ein Alien.
+ */
+ public class Alien implements Cloneable, Serializable{
+
+ /**
+ * Name des Aliens.
+ */
+ private final String name;
+
+ /**
+ * Raumanzug des Aliens.
+ */
+ private Raumanzug raumanzug;
+
+ /**
+ * Erzeugt ein neues Alien.
+ *
+ * @param name Name des Aliens.
+ * @param raumanzug Anzug.
+ */
+ public Alien(String name, Raumanzug raumanzug) {
+ this.name = name;
+ this.raumanzug = raumanzug;
+ }
+
+ /**
+ * Gibt den Namen des Aliens zurück.
+ *
+ * @return Name des Aliens.
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * Gibt den Anzug zurück.
+ *
+ * @return der Anzug.
+ */
+ public Raumanzug getAnzug() {
+ return raumanzug;
+ }
+
+ /**
+ * @see java.lang.Object#hashCode()
+ */
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((name == null) ? 0 : name.hashCode());
+ result = prime * result + ((raumanzug
+ == null) ? 0 : raumanzug.hashCode());
+ return result;
+ }
+
+ /**
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ Alien other = (Alien) obj;
+ if (name == null) {
+ if (other.name != null) {
+ return false;
+ }
+ }
+ else if (!name.equals(other.name)) {
+ return false;
+ }
+ if (raumanzug == null) {
+ return other.raumanzug == null;
+ }
+ else {
+ return raumanzug.equals(other.raumanzug);
+ }
+ }
+// public Alien clone() throws CloneNotSupportedException{
+// Alien a = (Alien) super.clone();
+// return a;
+// }
+ public Alien clone() throws CloneNotSupportedException {
+ Alien a = (Alien) super.clone();
+ a.raumanzug = this.raumanzug.clone();
+ return a;
+ }
+
+}
diff --git a/PR2_UIB/Exercises/Testat1/Tutor_Aufgaben/Clone/AlienCloneTest.java b/PR2_UIB/Exercises/Testat1/Tutor_Aufgaben/Clone/AlienCloneTest.java
new file mode 100644
index 0000000..73a6158
--- /dev/null
+++ b/PR2_UIB/Exercises/Testat1/Tutor_Aufgaben/Clone/AlienCloneTest.java
@@ -0,0 +1,37 @@
+package Testat1.Tutor_Aufgaben.Clone;
+
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotSame;
+
+import org.junit.jupiter.api.Test;
+
+/**
+ * Test für die Clone-Methoden.
+ */
+public class AlienCloneTest {
+
+ /**
+ * Test-Methode.
+ *
+ * @throws CloneNotSupportedException wird geworfen, wenn clone_alien
+ * nicht korrekt implementiert wurde.
+ */
+ @Test
+ void testClone() throws CloneNotSupportedException {
+// TODO: Einkommentieren (strg+shift+c)
+ Raumanzug r1 = new Raumanzug();
+ Alien a1 = new Alien("Predator", r1);
+
+ Alien a2 = (Alien) a1.clone();
+ Raumanzug r2 = a2.getAnzug();
+
+ assertNotSame(a1, a2);
+ assertNotSame(r1, r2);
+
+ assertEquals(a1, a2);
+ assertEquals(r1, r2);
+ assertEquals(r1.getSauerstoffVorrat(), r2.getSauerstoffVorrat(),
+ 0.0001);
+ }
+}
diff --git a/PR2_UIB/Exercises/Testat1/Tutor_Aufgaben/Clone/Raumanzug.java b/PR2_UIB/Exercises/Testat1/Tutor_Aufgaben/Clone/Raumanzug.java
new file mode 100644
index 0000000..60720b7
--- /dev/null
+++ b/PR2_UIB/Exercises/Testat1/Tutor_Aufgaben/Clone/Raumanzug.java
@@ -0,0 +1,84 @@
+package Testat1.Tutor_Aufgaben.Clone;
+
+import java.io.Serializable;
+
+/**
+ * Ein Raumanzug.
+ */
+ public class Raumanzug implements Cloneable, Serializable{
+
+ /**
+ * Sauerstoffvorrat, der noch im Raumanzug ist.
+ */
+ private double sauerstoffVorrat;
+
+ /**
+ * Ertzeugt einen neuen Raumanzug.
+ */
+ public Raumanzug() {
+ sauerstoffVorrat = Math.random();
+ }
+
+ /**
+ * Sauerstoffvorrat im Anzug.
+ *
+ * @return Vorrat in % (0.0-1.0)
+ */
+ public double getSauerstoffVorrat() {
+ return sauerstoffVorrat;
+ }
+
+ /**
+ * Tankt den Anzug auf.
+ */
+ public void auftanken() {
+ sauerstoffVorrat = 1.0;
+ }
+
+ public void setSauerstoffVorrat(double sauerstoffVorrat) {
+ this.sauerstoffVorrat = sauerstoffVorrat;
+ }
+
+ /**
+ * @see java.lang.Object#hashCode()
+ */
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ long temp;
+ temp = Double.doubleToLongBits(sauerstoffVorrat);
+ result = prime * result + (int) (temp ^ (temp >>> 32));
+ return result;
+ }
+
+ /**
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ Raumanzug other = (Raumanzug) obj;
+ return Double.doubleToLongBits(sauerstoffVorrat)
+ == Double.doubleToLongBits(other.sauerstoffVorrat);
+ }
+ public Raumanzug clone() throws CloneNotSupportedException {
+ Raumanzug r = (Raumanzug) super.clone();
+ return r;
+ }
+
+ @Override
+ public String toString() {
+ return "Raumanzug [sauerstoffVorrat=" + sauerstoffVorrat + "]";
+ }
+
+}
+
diff --git a/PR2_UIB/Exercises/Testat1/Tutor_Aufgaben/DoubleFormatter/DoubleFormatter.java b/PR2_UIB/Exercises/Testat1/Tutor_Aufgaben/DoubleFormatter/DoubleFormatter.java
new file mode 100644
index 0000000..b26c80c
--- /dev/null
+++ b/PR2_UIB/Exercises/Testat1/Tutor_Aufgaben/DoubleFormatter/DoubleFormatter.java
@@ -0,0 +1,22 @@
+package Testat1.Tutor_Aufgaben.DoubleFormatter;
+
+
+public class DoubleFormatter {
+
+
+ public static void printDouble(double zahl, int nachkommastellen) {
+ double multi = Math.pow(10, nachkommastellen);
+ double ergebnis = Math.round(zahl * multi)/multi;
+ System.out.println(ergebnis);
+ }
+ public static void main(String[] args) {
+ printDouble(1.0, 1); // Erwartete Ausgabe: 1.0
+ printDouble(10.1, 1); // Erwartete Ausgabe: 10.1
+ printDouble(2.01, 2); // Erwartete Ausgabe: 2.01
+ printDouble(2.006, 2); // Erwartete Ausgabe: 2.01
+ printDouble(2.0001, 2); // Erwartete Ausgabe: 2.00
+ printDouble(2.0005, 3); // Erwartete Ausgabe: 2.001
+ printDouble(123.456, 1); // Erwartete Ausgabe: 123.4
+ printDouble(9876.54321, 3); // Erwartete Ausgabe: 9876.543
+ }
+}
diff --git a/PR2_UIB/Exercises/Testat1/Tutor_Aufgaben/Mondnacht.txt b/PR2_UIB/Exercises/Testat1/Tutor_Aufgaben/Mondnacht.txt
new file mode 100644
index 0000000..2c03b8d
--- /dev/null
+++ b/PR2_UIB/Exercises/Testat1/Tutor_Aufgaben/Mondnacht.txt
@@ -0,0 +1,6 @@
+Mondnacht
+Es war, als hätt' der Himmel
+Die Erde still geküsst,
+Dass sie im Blütenschimmer
+Von ihm nun träumen müsst.
+
diff --git a/PR2_UIB/Exercises/Testat1/Tutor_Aufgaben/Serialisierung/Main.java b/PR2_UIB/Exercises/Testat1/Tutor_Aufgaben/Serialisierung/Main.java
new file mode 100644
index 0000000..9b669cd
--- /dev/null
+++ b/PR2_UIB/Exercises/Testat1/Tutor_Aufgaben/Serialisierung/Main.java
@@ -0,0 +1,47 @@
+package Testat1.Tutor_Aufgaben.Serialisierung;
+
+import java.beans.XMLDecoder;
+import java.beans.XMLEncoder;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+public class Main {
+ public static void main(String[] args) {
+ // Erstelle ein Produkt
+ Product product = new Product("Handy", "ruft an", 299.99);
+
+ // Dateiname für die Serialisierung
+ String dateiname = "serializedProduct.xml";
+
+ // Serialisierung
+ Main.serialize(product, dateiname);
+
+ // Deserialisierung und Ausgabe
+ Product decodedProduct = Main.deserialize(product, dateiname);
+ System.out.printf("Name: %s\nDes: %s\nPrice: %s", decodedProduct.getName(),decodedProduct.getDescription(),decodedProduct.getPrice());
+ }
+
+ // Methode zur Serialisierung eines Produkts
+ public static void serialize (Product product, String dateiname) {
+ try (XMLEncoder encoder = new XMLEncoder(new FileOutputStream(dateiname))){
+ encoder.writeObject(product);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+
+ // Methode zur Deserialisierung eines Produkts
+ public static Product deserialize (Product product, String dateiname) {
+ Product decodedProduct = null;
+ try (XMLDecoder decoder = new XMLDecoder(new FileInputStream(dateiname))){
+ decodedProduct = (Product) decoder.readObject();
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return decodedProduct;
+ }
+}
+
diff --git a/PR2_UIB/Exercises/Testat1/Tutor_Aufgaben/Serialisierung/Product.java b/PR2_UIB/Exercises/Testat1/Tutor_Aufgaben/Serialisierung/Product.java
new file mode 100644
index 0000000..57e39cd
--- /dev/null
+++ b/PR2_UIB/Exercises/Testat1/Tutor_Aufgaben/Serialisierung/Product.java
@@ -0,0 +1,45 @@
+package Testat1.Tutor_Aufgaben.Serialisierung;
+
+import java.io.Serializable;
+
+public class Product implements Serializable {
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+ private String name;
+ private String description;
+ private double price;
+
+ public Product() {}
+
+ public Product(String name, String description, double price) {
+ this.name = name;
+ this.description = description;
+ this.price = price;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ public double getPrice() {
+ return price;
+ }
+
+ public void setPrice(double price) {
+ this.price = price;
+ }
+}
diff --git a/PR2_UIB/Moodle_Uebungen/Uebung1_Vererbung/Aufgabestellung_Uebung1 b/PR2_UIB/Moodle_Uebungen/Uebung1_Vererbung/Aufgabestellung_Uebung1
new file mode 100644
index 0000000..01d6067
--- /dev/null
+++ b/PR2_UIB/Moodle_Uebungen/Uebung1_Vererbung/Aufgabestellung_Uebung1
@@ -0,0 +1,23 @@
+Übung 1
+In dieser Übung soll ein fiktives Bankverwaltungssystem implementiert werden.
+Die Bank möchte dabei zwischen Geschäfts- und Privatkunden unterscheiden:
+
++ Erstellen Sie ein Java-Programm mit folgenden Klassen:
+ - Kunde als Oberklasse
+ - Geschäfts- und Privatkunde als abgeleitete Unterklassen
+ - Definieren sie dafür das package "verwaltung.kunden"
+
++ Definieren Sie für jede Klasse zwei bis drei sinnvolle Attribute und Methoden.
+ - Erstellen Sie Konstruktoren für alle Klassen und achten Sie implementieren diese so, dass sie super() verwenden können
+ - Begründen Sie die Zugrrifsrechte zu jedes Attributes und jeder Methode mit Hilfe von Quelltext-Kommentare
+ - Dokumentierte Sie die Methoden mit Hilfe des Javadoc-Formats
+ - Erzeugen Sie in der Klasse Auftrag eine Klassenvariable Auftragsnummer.
+ Können Sie darauf zugreifen, ohne ein Objekt erzeugt zu haben?
+
++ Gibt es Unterschiede und wenn ja, führen diese zu einer Revision ihres Quelltexts?
+
++ Finden Sie heraus, wie Adressen von Variablen in Java ausgegeben werden können.
+Erzeugen Sie skalare und zusammengesetzte Datentypen (also Objekte) und lassen Sie sich deren Adressen ausgeben.
+Als zusammengesetzten Datentyp deklarieren Sie eine Adress-Klasse (Name, Straße, PLZ, Wohnort) assoziieren dies mit der Kunden-Klasse.
+
++ Greifen Sie nun auf skalare und zusammengesetzte Attribute für das obige Beispiel zu und prüfen Sie mit Hilfe der Adressaufgabe, ob eine Kopie oder die Referenz übergeben wurde.
\ No newline at end of file
diff --git a/PR2_UIB/Moodle_Uebungen/Uebung1_Vererbung/verwaltung/kunden/Adresse.java b/PR2_UIB/Moodle_Uebungen/Uebung1_Vererbung/verwaltung/kunden/Adresse.java
new file mode 100644
index 0000000..e492a3f
--- /dev/null
+++ b/PR2_UIB/Moodle_Uebungen/Uebung1_Vererbung/verwaltung/kunden/Adresse.java
@@ -0,0 +1,15 @@
+package Uebung1_Vererbung.verwaltung.kunden;
+
+public class Adresse {
+ private String name;
+ private String strasse;
+ private String plz;
+ private String wohnort;
+
+ public Adresse(String name, String strasse, String plz, String wohnort) {
+ this.name = name;
+ this.strasse = strasse;
+ this.plz = plz;
+ this.wohnort = wohnort;
+ }
+}
diff --git a/PR2_UIB/Moodle_Uebungen/Uebung1_Vererbung/verwaltung/kunden/Geschaeftskunde.java b/PR2_UIB/Moodle_Uebungen/Uebung1_Vererbung/verwaltung/kunden/Geschaeftskunde.java
new file mode 100644
index 0000000..7855f60
--- /dev/null
+++ b/PR2_UIB/Moodle_Uebungen/Uebung1_Vererbung/verwaltung/kunden/Geschaeftskunde.java
@@ -0,0 +1,21 @@
+package Uebung1_Vererbung.verwaltung.kunden;
+
+public class Geschaeftskunde extends Kunde{
+ protected String firmaName;
+ protected String geschaeft;
+
+ Geschaeftskunde(String name,String vorname, Adresse adresse, String firmaName) {
+ super(name,vorname, adresse);
+ this.firmaName = firmaName;
+ }
+
+
+ public String getFirmaName() {
+ return firmaName;
+ }
+
+ public void setFirmaName(String firmaName) {
+ this.firmaName = firmaName;
+ }
+
+}
diff --git a/PR2_UIB/Moodle_Uebungen/Uebung1_Vererbung/verwaltung/kunden/Kunde.java b/PR2_UIB/Moodle_Uebungen/Uebung1_Vererbung/verwaltung/kunden/Kunde.java
new file mode 100644
index 0000000..a6da268
--- /dev/null
+++ b/PR2_UIB/Moodle_Uebungen/Uebung1_Vererbung/verwaltung/kunden/Kunde.java
@@ -0,0 +1,34 @@
+package Uebung1_Vererbung.verwaltung.kunden;
+
+public class Kunde {
+ private String name,vorname;
+ private int id;
+ private static int increment = 0;
+ private Adresse adresse;
+
+
+
+protected Kunde(String name,String vorname, Adresse adresse) {
+ this.id = increment;
+ increment++;
+
+ this.name = name;
+ this.vorname = vorname;
+ this.adresse = adresse;
+
+ }
+
+ public String toString() {
+
+ return "Kunde [id=" + id +"name=" + name + "vorname=" + vorname + ", adresse=" + adresse + "]";
+ }
+ public void setName(String name) {
+ this.name = name;
+ }
+ public void setAdresse(Adresse adresse) {
+ this.adresse = adresse;
+ }
+
+
+
+}
diff --git a/PR2_UIB/Moodle_Uebungen/Uebung1_Vererbung/verwaltung/kunden/Main.java b/PR2_UIB/Moodle_Uebungen/Uebung1_Vererbung/verwaltung/kunden/Main.java
new file mode 100644
index 0000000..6179491
--- /dev/null
+++ b/PR2_UIB/Moodle_Uebungen/Uebung1_Vererbung/verwaltung/kunden/Main.java
@@ -0,0 +1,60 @@
+package Uebung1_Vererbung.verwaltung.kunden;
+
+class Person {
+ String name;
+ int age;
+
+ public Person(String name, int age) {
+ this.name = name;
+ this.age = age;
+
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public int getAge() {
+ return age;
+ }
+
+ public void setAge(int age) {
+ this.age = age;
+ }
+
+ @Override
+ public String toString() {
+ return "Person [name=" + name + ", age=" + age + "]";
+ }
+}
+
+public class Main {
+ public static void main(String[] args) {
+ Person person = new Person("John", 30);
+ int s = 5;
+ System.out.println(s);
+ System.out.println(foo(s));
+ System.out.println(s);
+
+ System.out.println(person.toString());
+ System.out.println(foo(person));
+ System.out.println(person.toString());
+ }
+
+
+ public static Person foo(Person person) {
+ Person copy = new Person(person.getName(), person.getAge());
+ System.out.println(copy);
+ System.out.println(person.hashCode());
+ System.out.println(copy.hashCode());
+ copy.setName("Amin");
+ return copy;
+ }
+ public static int foo(int s) {
+ return s +1;
+ }
+}
diff --git a/PR2_UIB/Moodle_Uebungen/Uebung1_Vererbung/verwaltung/kunden/Privatkunde.java b/PR2_UIB/Moodle_Uebungen/Uebung1_Vererbung/verwaltung/kunden/Privatkunde.java
new file mode 100644
index 0000000..35e7e2f
--- /dev/null
+++ b/PR2_UIB/Moodle_Uebungen/Uebung1_Vererbung/verwaltung/kunden/Privatkunde.java
@@ -0,0 +1,14 @@
+package Uebung1_Vererbung.verwaltung.kunden;
+
+public class Privatkunde extends Kunde{
+ private String telefon, email;
+ private String berater;
+
+ protected Privatkunde(String name,String vorname, Adresse adresse, String telefon, String email) {
+ super(name,vorname,adresse);
+ this.telefon = telefon;
+ this.email = email;
+ this.berater = null;
+ }
+
+}
diff --git a/PR2_UIB/Moodle_Uebungen/Uebung2_IO/Aufgabestellung_Uebung2_IO b/PR2_UIB/Moodle_Uebungen/Uebung2_IO/Aufgabestellung_Uebung2_IO
new file mode 100644
index 0000000..ccb05bf
--- /dev/null
+++ b/PR2_UIB/Moodle_Uebungen/Uebung2_IO/Aufgabestellung_Uebung2_IO
@@ -0,0 +1,11 @@
+1. Erstellen Sie ein persönliches git-Repository,
+da wir die folgenden Aufgaben möglicherweise noch erweitern werden.
+
+2. Schreiben Sie eine Java-Klasse, welche die (sinnvolle!) Ausführung des unter dem Dateinamen DemoKonsole.java ermöglicht.
+Schreiben Sie dazu auch entsprechende Unit-Tests. Aktualisieren Sie ihr Repository spätestens nach einer Übungsstunde.
+
+3. Erstellen Sie basierend auf den angefügten Klassendiagramm und der Klasse ZaehlerUI.java die entsprechenden Klassen,
+Attribute und Methoden, im das Programm ausführen zu können. Was passiert, wenn Sie die super.clone()-Anweisungen weglassen?
+
+4. Erweitern Sie das beigefügte Paket zur Indexverwaltung.zip, so dass es lauffähig ist. Fügen Sie auch hier angemessen Unit-Tests hinzu.
+Bitte denken Sie nochmals daran, für die Teile 2. bis 4. jeweils ein git-Repositoroy anzulegen!
\ No newline at end of file
diff --git a/PR2_UIB/Moodle_Uebungen/Uebung2_IO/Indexverwaltung/Datei.java b/PR2_UIB/Moodle_Uebungen/Uebung2_IO/Indexverwaltung/Datei.java
new file mode 100644
index 0000000..a7d31c6
--- /dev/null
+++ b/PR2_UIB/Moodle_Uebungen/Uebung2_IO/Indexverwaltung/Datei.java
@@ -0,0 +1,80 @@
+package Uebung2_loesung.Indexverwaltung;
+import java.io.IOException;
+import java.io.RandomAccessFile;
+
+public class Datei {
+ private int aktuell;
+ private String dateiname = "Stammdatei.txt";
+ private int SATZLAENGE = 100;
+ private RandomAccessFile eineStammDatei;
+
+ public Datei() { }
+
+ public Datei(int satzlaenge)
+ {
+ SATZLAENGE = satzlaenge;
+ }
+
+ public void speichereSatz(String satz, int index) throws IOException
+ {
+ positioniereAufSatz(index);
+ writeFixedString(satz, SATZLAENGE);
+ }
+
+ public String leseSatz(int index) throws IOException
+ {
+ positioniereAufSatz(index);
+
+ return readFixedString(SATZLAENGE);
+ }
+
+ public void oeffneDatei(String name) throws IOException
+ {
+ if(!name.isBlank())
+ dateiname = name;
+
+ eineStammDatei = new RandomAccessFile(dateiname, "rw");
+ }
+
+ public void schliesseDatei() throws IOException
+ {
+ eineStammDatei.close();
+ }
+
+ public int gibAnzahlDatensaetze() throws IOException
+ {
+ return (int) (eineStammDatei.length() / SATZLAENGE);
+ }
+
+ private void positioniereAufSatz(int index) throws IOException
+ {
+ if(index * SATZLAENGE * Character.BYTES != aktuell)
+ {
+ aktuell = index * SATZLAENGE * Character.BYTES;
+ eineStammDatei.seek(aktuell);
+ }
+ }
+
+ private String readFixedString(int laenge) throws IOException
+ {
+ StringBuffer satz = new StringBuffer();
+
+ while(laenge-- > 0)
+ satz.append(eineStammDatei.readChar());
+
+ return satz.toString();
+ }
+
+ private void writeFixedString(String einDatensatz, int laenge) throws IOException
+ {
+ StringBuffer sb = new StringBuffer(einDatensatz);
+
+ while(sb.length() != laenge)
+ sb.append('\0');
+
+ for(int index = 0; index < laenge; index++) {
+
+ eineStammDatei.writeChar(sb.charAt(index));
+ }
+ }
+}
diff --git a/PR2_UIB/Moodle_Uebungen/Uebung2_IO/Indexverwaltung/Index.java b/PR2_UIB/Moodle_Uebungen/Uebung2_IO/Indexverwaltung/Index.java
new file mode 100644
index 0000000..2a332e6
--- /dev/null
+++ b/PR2_UIB/Moodle_Uebungen/Uebung2_IO/Indexverwaltung/Index.java
@@ -0,0 +1,101 @@
+package Uebung2_loesung.Indexverwaltung;
+import java.io.*;
+
+public class Index {
+ // Attribute
+ private final int MAX = 10;
+ private String dateiname = "Indexdatei.txt";
+ private int indextabelle[]; // 0 .. MAX-1
+ private RandomAccessFile eineIndexDatei;
+
+ // Konstruktor
+ public Index()
+ {
+ indextabelle = new int[MAX];
+ // Initialisierung der indextabelle
+ for(int i = 0; i < MAX; i++) indextabelle[i] = -1;
+ // Kein Datensatz zu Schluessel vorhanden
+ }
+
+ // Methoden
+ public void erzeugeEintrag(int schluessel, int index) throws IOException
+ {
+ /** Speichert zu einen Schluessel den zugehoerigen
+ * Datensatz-Index in der indextabelle
+ */
+ if(schluessel < MAX)
+ indextabelle[schluessel] = index;
+ // Aktualisieren der Indexdatei,
+ // d. h. Abspeichern der Datei
+ aktualisiereIndexDatei(schluessel);
+ }
+
+ public int gibIndexZuSchluessel(int schluessel) // throws InvalidIndexException
+ {
+ /*
+ // Gibt zu dem Schluessel den gefundenen
+ // Datensatz-Index zurueck
+ if(schluessel < MAX)
+ return indextabelle[schluessel];
+ // oder -1, wenn Schluessel zu gross ist
+ else
+ return -1;
+ */
+
+ if(schluessel >= MAX || indextabelle[schluessel] == -1)
+ throw new InvalidIndexException(schluessel);
+
+ return indextabelle[schluessel];
+
+ }
+
+ public void ladeIndexDatei() throws IOException
+ {
+ /** Liest die Indextabelle vollstaendig aus einer Datei
+ * Dies geschieht nur beim Start des Programms
+ */
+ eineIndexDatei = new RandomAccessFile(dateiname, "r");
+ int index;
+ for(int schluessel = 0; schluessel < MAX; schluessel++)
+ {
+ index = eineIndexDatei.readInt();
+ indextabelle[schluessel] = index;
+ }
+ eineIndexDatei.close();
+ }
+
+ public void speichereIndexDatei() throws IOException
+ {
+ /** Speichert die Indextabelle vollstaendig in einer Datei
+ * Dies geschieht beim Beenden des Programs
+ */
+ eineIndexDatei = new RandomAccessFile(dateiname, "rw");
+ for(int schluessel = 0; schluessel < MAX; schluessel++)
+ eineIndexDatei.writeInt(indextabelle[schluessel]);
+ eineIndexDatei.close();
+ }
+
+ private void aktualisiereIndexDatei(int schluessel) throws IOException
+ {
+ /** Aktualisiert die indextabelle in der Indexdatei
+ * Dies geschieht beim Hinzufuegen eines neuen
+ * Indexes oder Aendern eines alten Indexes
+ */
+ eineIndexDatei = new RandomAccessFile(dateiname, "rw");
+ // eine int-Zahl belegt 4 Bytes
+ eineIndexDatei.seek((long)(schluessel * 4));
+ eineIndexDatei.writeInt(indextabelle[schluessel]);
+ eineIndexDatei.close();
+ }
+
+ // Zum Testen
+ public void gibIndextabelleAus()
+ {
+ int schluessel = 0;
+ for(int element : indextabelle)
+ {
+ System.out.println(schluessel + " " + element);
+ schluessel++;
+ }
+ }
+}
diff --git a/PR2_UIB/Moodle_Uebungen/Uebung2_IO/Indexverwaltung/IndexUI.java b/PR2_UIB/Moodle_Uebungen/Uebung2_IO/Indexverwaltung/IndexUI.java
new file mode 100644
index 0000000..03f43e0
--- /dev/null
+++ b/PR2_UIB/Moodle_Uebungen/Uebung2_IO/Indexverwaltung/IndexUI.java
@@ -0,0 +1,95 @@
+package Uebung2_loesung.Indexverwaltung;
+import java.io.IOException;
+import java.util.Scanner;
+
+public class IndexUI {
+
+ public static void main(String[] args) {
+ // TODO Auto-generated method stub
+ Index indexDatei = new Index();
+ Datei stammDatei = new Datei();
+ Scanner sc = new Scanner(System.in);
+
+ try {
+ indexDatei.ladeIndexDatei();
+ }
+ catch(IOException e)
+ {
+ System.err.println("INFO - Dateien nicht vorhanden - Erzeuge Beispiel!");
+
+ int idx = 0;
+ try {
+ stammDatei.oeffneDatei("stammdatei.txt");
+
+ indexDatei.erzeugeEintrag(6, idx);
+ stammDatei.speichereSatz("Satz 1", idx);
+
+ idx++;
+ indexDatei.erzeugeEintrag(1, idx);
+ stammDatei.speichereSatz("Satz 2", idx);
+
+ idx++;
+ indexDatei.erzeugeEintrag(3, idx);
+ stammDatei.speichereSatz("Satz 3", idx);
+
+ idx++;
+ indexDatei.speichereIndexDatei();
+ stammDatei.schliesseDatei();
+
+ } catch (IOException ee) {
+ ee.printStackTrace();
+ }
+ }
+
+ indexDatei.gibIndextabelleAus();
+
+ try {
+ stammDatei.oeffneDatei("stammdatei.txt");
+
+ while(true) {
+ System.out.print("Bitte geben Sie einen Schluessel ein:");
+ String schluessel = sc.nextLine();
+
+ if(schluessel.isEmpty())
+ break;
+
+ try {
+ int index = indexDatei.gibIndexZuSchluessel(Integer.parseInt(schluessel));
+
+ String satz = stammDatei.leseSatz(index);
+
+ System.out.println("Der zu " + schluessel + " gewuenschte Satz lautet: ==> " + satz + " <==");
+
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (InvalidIndexException e) {
+ System.err.println("\n==> Zugriff auf nicht vorhandenen Schluessel: " + e.gibSchluessel() + " <==");
+ }
+
+ }
+
+ } catch (IOException e1) {
+ e1.printStackTrace();
+ } catch (NumberFormatException e2) {
+ e2.printStackTrace();
+ }
+ finally {
+ try {
+
+ indexDatei.speichereIndexDatei();
+
+ stammDatei.schliesseDatei();
+
+ System.err.println("Dateien geschlossen!");
+
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ System.out.println("Programm beendet!");
+
+ }
+
+}
diff --git a/PR2_UIB/Moodle_Uebungen/Uebung2_IO/Indexverwaltung/InvalidIndexException.java b/PR2_UIB/Moodle_Uebungen/Uebung2_IO/Indexverwaltung/InvalidIndexException.java
new file mode 100644
index 0000000..3eb8eec
--- /dev/null
+++ b/PR2_UIB/Moodle_Uebungen/Uebung2_IO/Indexverwaltung/InvalidIndexException.java
@@ -0,0 +1,17 @@
+package Uebung2_loesung.Indexverwaltung;
+
+public class InvalidIndexException extends Exception {
+ private int schluessel;
+
+ public InvalidIndexException(int s){
+ super("Access to Unknown Index");
+ schluessel = s;
+ }
+
+ public InvalidIndexException(int s, String fehlermeldung){
+ super(fehlermeldung);
+ schluessel = s;
+ }
+
+ public int gibSchluessel() { return schluessel; }
+}
diff --git a/PR2_UIB/Moodle_Uebungen/Uebung2_IO/loesung2/Console.java b/PR2_UIB/Moodle_Uebungen/Uebung2_IO/loesung2/Console.java
new file mode 100644
index 0000000..9c45fad
--- /dev/null
+++ b/PR2_UIB/Moodle_Uebungen/Uebung2_IO/loesung2/Console.java
@@ -0,0 +1,32 @@
+package Uebung2_IO.loesung2;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+
+public class Console {
+
+ public static void main(String[] args) {
+ // TODO Auto-generated method stub
+
+ }
+ public static String readString() throws IOException {
+ BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
+ String eingabe = reader.readLine();
+ return eingabe;
+ }
+ public static char[] readCharArray() throws IOException {
+ BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
+ String eingabe = reader.readLine();
+ char[] eingabeChar = eingabe.toCharArray();
+ return eingabeChar;
+ }
+ public static boolean readBoolean() throws IOException {
+ BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
+ String eingabe = reader.readLine();
+ boolean eingabeBo = Boolean.valueOf(eingabe);
+ return eingabeBo;
+
+}
+
+}
diff --git a/PR2_UIB/Moodle_Uebungen/Uebung2_IO/loesung2/ConsoleTest.java b/PR2_UIB/Moodle_Uebungen/Uebung2_IO/loesung2/ConsoleTest.java
new file mode 100644
index 0000000..bb4f91c
--- /dev/null
+++ b/PR2_UIB/Moodle_Uebungen/Uebung2_IO/loesung2/ConsoleTest.java
@@ -0,0 +1,46 @@
+package Uebung2_IO.loesung2;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+
+import org.junit.jupiter.api.Test;
+
+public class ConsoleTest {
+
+ @Test
+ public void testReadString() throws IOException {
+ ByteArrayInputStream inputStream = new ByteArrayInputStream("Testeingabe".getBytes());
+ System.setIn(inputStream);
+
+ String result = Console.readString();
+
+ assertEquals("Testeingabe", result);
+ }
+
+ @Test
+ public void testReadCharArray() throws IOException {
+
+ ByteArrayInputStream inputStream = new ByteArrayInputStream("abc".getBytes());
+ System.setIn(inputStream);
+
+ char[] result = Console.readCharArray();
+
+ assertArrayEquals(new char[]{'a', 'b', 'c'}, result);
+ }
+
+ @Test
+ public void testReadBoolean() throws IOException {
+
+ ByteArrayInputStream inputStream = new ByteArrayInputStream("true".getBytes());
+ System.setIn(inputStream);
+
+
+ boolean result = Console.readBoolean();
+
+
+ assertTrue(result);
+ }
+}
+
diff --git a/PR2_UIB/Moodle_Uebungen/Uebung2_IO/loesung2/DemoConsole.java b/PR2_UIB/Moodle_Uebungen/Uebung2_IO/loesung2/DemoConsole.java
new file mode 100644
index 0000000..8040a56
--- /dev/null
+++ b/PR2_UIB/Moodle_Uebungen/Uebung2_IO/loesung2/DemoConsole.java
@@ -0,0 +1,21 @@
+package Uebung2_IO.loesung2;
+
+public class DemoConsole {
+
+ public static void main(String[] args) throws Exception {
+ System.out.println("Text eingeben: ");
+ String text = Console.readString();
+ System.out.println("Gelesener Text: " + text);
+
+ System.out.println("Text eingeben: ");
+ char [] ca = Console.readCharArray();
+ System.out.println("Gelesenes char-Feld: ");
+ for(char celement: ca)
+ System.out.print(celement);
+ System.out.println();
+
+ System.out.println("Boolean eingeben: ");
+ boolean b = Console.readBoolean();
+ System.out.println("Gelesener Wert: " + b);
+ }
+}
diff --git a/PR2_UIB/Moodle_Uebungen/Uebung2_IO/loesung3/Unterzaehler.java b/PR2_UIB/Moodle_Uebungen/Uebung2_IO/loesung3/Unterzaehler.java
new file mode 100644
index 0000000..b8fa216
--- /dev/null
+++ b/PR2_UIB/Moodle_Uebungen/Uebung2_IO/loesung3/Unterzaehler.java
@@ -0,0 +1,24 @@
+package Uebung2_IO.loesung3;
+
+public class Unterzaehler extends Zaehler {
+ private int unterzaehlerstand;
+
+
+ Unterzaehler(String zahelerort, Verbraucher verbraucher, int zaehlerstand) {
+ super(zahelerort,verbraucher, zaehlerstand);
+ this.unterzaehlerstand = zaehlerstand;
+ }
+ public int getUnterzaehlerstand() {
+ return unterzaehlerstand;
+ }
+
+ public void setUnterzaehlerstand(int unterzaehlerstand) {
+ this.unterzaehlerstand = unterzaehlerstand;
+ }
+ @Override
+ public
+ Unterzaehler clone() throws CloneNotSupportedException {
+ return (Unterzaehler) super.clone();
+ }
+
+}
diff --git a/PR2_UIB/Moodle_Uebungen/Uebung2_IO/loesung3/Verbraucher.java b/PR2_UIB/Moodle_Uebungen/Uebung2_IO/loesung3/Verbraucher.java
new file mode 100644
index 0000000..bf81ba6
--- /dev/null
+++ b/PR2_UIB/Moodle_Uebungen/Uebung2_IO/loesung3/Verbraucher.java
@@ -0,0 +1,18 @@
+package Uebung2_IO.loesung3;
+
+public class Verbraucher {
+ private String name;
+
+ public Verbraucher(String name) {
+ this.name = name;
+ }
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+
+}
\ No newline at end of file
diff --git a/PR2_UIB/Moodle_Uebungen/Uebung2_IO/loesung3/Zaehler.java b/PR2_UIB/Moodle_Uebungen/Uebung2_IO/loesung3/Zaehler.java
new file mode 100644
index 0000000..69a51e7
--- /dev/null
+++ b/PR2_UIB/Moodle_Uebungen/Uebung2_IO/loesung3/Zaehler.java
@@ -0,0 +1,39 @@
+ package Uebung2_IO.loesung3;
+ //man muss hier Cloneable implementieren
+ public class Zaehler implements Cloneable {
+ private String zahelerort;
+ private Verbraucher verbraucher = null;
+ private int zaehlerstand;
+
+ public Zaehler(String zahelerort, Verbraucher verbraucher, int zaehlerstand) {
+
+ this.zahelerort = zahelerort;
+ this.verbraucher = verbraucher;
+ this.zaehlerstand = zaehlerstand;
+ }
+
+ public String getZahelerort() {
+ return zahelerort;
+ }
+ public void setZahelerort(String zahelerort) {
+ this.zahelerort = zahelerort;
+ }
+ public Verbraucher getMeinVerbraucher() {
+ return verbraucher;
+ }
+ public void setVerbraucher(Verbraucher verbraucher) {
+ this.verbraucher = verbraucher;
+ }
+ public int getZaehlerstand() {
+ return zaehlerstand;
+ }
+ public void setZaehlerstand(int zaehlerstand) {
+ this.zaehlerstand = zaehlerstand;
+ }
+ @Override
+ public Zaehler clone() throws CloneNotSupportedException {
+ return (Zaehler) super.clone();
+ }
+
+
+ }
diff --git a/PR2_UIB/Moodle_Uebungen/Uebung2_IO/loesung3/ZaehlerUI.java b/PR2_UIB/Moodle_Uebungen/Uebung2_IO/loesung3/ZaehlerUI.java
new file mode 100644
index 0000000..4d752c3
--- /dev/null
+++ b/PR2_UIB/Moodle_Uebungen/Uebung2_IO/loesung3/ZaehlerUI.java
@@ -0,0 +1,51 @@
+package Uebung2_IO.loesung3;
+
+public class ZaehlerUI {
+ public static void main(String[] args) throws Exception {
+ Zaehler einZaehler, klonZaehler = null;
+
+ Verbraucher einVerbraucher = new Verbraucher("Schulz");
+ einZaehler = new Zaehler("Elektro", einVerbraucher, 123);
+
+ try
+ {
+ klonZaehler = einZaehler.clone();
+ }
+ catch(CloneNotSupportedException e)
+ {
+ System.out.println("Fehler");
+ }
+
+ System.out.println("Zählerstand =" + einZaehler.getZaehlerstand()
+ + " gehört zu Verbraucher " + einZaehler.getMeinVerbraucher().getName());
+
+ System.out.println("Geklonter Zähler Zählerstand = " + klonZaehler.getZaehlerstand()
+ + " gehört zu Verbraucher " + klonZaehler.getMeinVerbraucher().getName());
+
+ if(einZaehler.getMeinVerbraucher() == klonZaehler.getMeinVerbraucher())
+ System.out.println("Verbraucher identisch");
+ else
+ System.out.println("Verbraucher nicht identisch");
+
+ Unterzaehler nochEinZaehler = new Unterzaehler("Gas", einVerbraucher, 500);
+
+ System.out.println("Zählerstand = " + nochEinZaehler.getZaehlerstand()
+ + " Unterzählerstand: " + nochEinZaehler.getUnterzaehlerstand()
+ + " gehört zu Verbraucher " + nochEinZaehler.getMeinVerbraucher().getName());
+
+ Unterzaehler klonUnterzaehler = null;
+
+ try
+ {
+ klonUnterzaehler = nochEinZaehler.clone();
+ }
+ catch(CloneNotSupportedException e)
+ {
+ System.out.println("Fehler");
+ }
+
+ System.out.println("Geklonter Unterzähler: Zählerstand = " + klonUnterzaehler.getZaehlerstand()
+ + " Unterzählerstand: " + klonUnterzaehler.getUnterzaehlerstand()
+ + " gehört zu Verbraucher " + klonUnterzaehler.getMeinVerbraucher().getName());
+ }
+}
diff --git a/PR2_UIB/Moodle_Uebungen/Uebung2_IO/loesung3/Zaehler_Klassendigramm.webp b/PR2_UIB/Moodle_Uebungen/Uebung2_IO/loesung3/Zaehler_Klassendigramm.webp
new file mode 100644
index 0000000..b442c85
Binary files /dev/null and b/PR2_UIB/Moodle_Uebungen/Uebung2_IO/loesung3/Zaehler_Klassendigramm.webp differ
diff --git a/PR2_UIB/Moodle_Uebungen/Uebung3_Buchungen/Buchung.java b/PR2_UIB/Moodle_Uebungen/Uebung3_Buchungen/Buchung.java
new file mode 100644
index 0000000..cc682be
--- /dev/null
+++ b/PR2_UIB/Moodle_Uebungen/Uebung3_Buchungen/Buchung.java
@@ -0,0 +1,34 @@
+package Uebung3_Buchungen;
+
+import java.util.Date;
+
+public class Buchung {
+
+ int buchungsnummer;
+ Date Buchungsdatum;
+ String buchungskonto;
+ private double buchungsbetrag;
+
+ private Buchung(int buchungsnummer, Date buchungsdatum, String buchungskonto, double buchungsbetrag) {
+ this.buchungsnummer = buchungsnummer;
+ Buchungsdatum = buchungsdatum;
+ this.buchungskonto = buchungskonto;
+ this.buchungsbetrag = buchungsbetrag;
+ }
+
+ @Override
+ public String toString() {
+ return "Buchung [buchungsnummer=" + buchungsnummer + ", Buchungsdatum=" + Buchungsdatum + ", buchungskonto="
+ + buchungskonto + ", buchungsbetrag=" + buchungsbetrag + "]";
+ }
+
+ public double getBuchungsbetrag() {
+ return buchungsbetrag;
+ }
+
+ public void setBuchungsbetrag(double buchungsbetrag) {
+ this.buchungsbetrag = buchungsbetrag;
+ }
+
+
+}
\ No newline at end of file
diff --git a/PR2_UIB/Moodle_Uebungen/Uebung3_Buchungen/BuchungenAufgabe.java b/PR2_UIB/Moodle_Uebungen/Uebung3_Buchungen/BuchungenAufgabe.java
new file mode 100644
index 0000000..88000d3
--- /dev/null
+++ b/PR2_UIB/Moodle_Uebungen/Uebung3_Buchungen/BuchungenAufgabe.java
@@ -0,0 +1,65 @@
+package Uebung3_Buchungen;
+
+import java.io.BufferedReader;
+import java.io.FileReader;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+
+public class BuchungenAufgabe {
+
+ public static void main(String[] args) {
+
+ ArrayList overEqual100 = new ArrayList<>();
+ ArrayList lessEqual100 = new ArrayList<>();
+ String dateiName = "buchungen.text";
+ try (BufferedReader reader = new BufferedReader(new FileReader(dateiName))){
+ String line;
+ while (( line = reader.readLine()) != null) {
+// String[] split1 = line.split("\"");
+// String [] split2 = split1[0].split(" ");
+// String [] zsm = {split2[0], split2[1], split1[1], split1[2]};
+ // Buchung buchung = new Buchung("...");
+ ArrayList data = splitIgnoringQuotes(line);
+ if (Double.parseDouble(data.get(3)) < 1000) {
+ lessEqual100.add(data);
+ }else {
+ overEqual100.add(data);
+ }
+ }
+
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ for (ArrayList arrayList : lessEqual100) {
+ System.out.println(arrayList.toString());
+ }
+ }
+ public static ArrayList splitIgnoringQuotes(String input) {
+ ArrayList parts = new ArrayList<>();
+ StringBuilder sb = new StringBuilder();
+ boolean insideQuotes = false;
+
+ for (char c : input.toCharArray()) {
+ if (c == '\"') {
+ insideQuotes = !insideQuotes;
+ } else if (c == ' ' && !insideQuotes) {
+ parts.add(sb.toString());
+ sb.setLength(0);
+ } else {
+ sb.append(c);
+ }
+ }
+
+ if (sb.length() > 0) {
+ parts.add(sb.toString());
+ }
+
+ return parts;
+ }
+}
+
+
+
diff --git a/PR2_UIB/Moodle_Uebungen/Uebung3_Buchungen/Reader.java b/PR2_UIB/Moodle_Uebungen/Uebung3_Buchungen/Reader.java
new file mode 100644
index 0000000..7de6bf3
--- /dev/null
+++ b/PR2_UIB/Moodle_Uebungen/Uebung3_Buchungen/Reader.java
@@ -0,0 +1,63 @@
+package Uebung3_Buchungen;
+
+import java.io.BufferedReader;
+import java.io.FileReader;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+
+public class Reader {
+
+ public static void main(String[] args) {
+ int buchungsnummer;
+ Date Buchungsdatum;
+ String buchungskonto;
+ double buchungsbetrag;
+ ArrayList overEqual100 = new ArrayList<>();
+ ArrayList lessEqual100 = new ArrayList<>();
+ String dateiName = "buchungen.text";
+ try (BufferedReader reader = new BufferedReader(new FileReader(dateiName))){
+ String line;
+ while (( line = reader.readLine()) != null) {
+ ArrayList data = splitIgnoringQuotes(line);
+ if (Double.parseDouble(data.get(3)) < 1000) {
+ lessEqual100.add(data);
+ }else {
+ overEqual100.add(data);
+ }
+ }
+
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ for (ArrayList arrayList : lessEqual100) {
+ System.out.println(arrayList.toString());
+ }
+ }
+ public static ArrayList splitIgnoringQuotes(String input) {
+ ArrayList parts = new ArrayList<>();
+ StringBuilder sb = new StringBuilder();
+ boolean insideQuotes = false;
+
+ for (char c : input.toCharArray()) {
+ if (c == '\"') {
+ insideQuotes = !insideQuotes;
+ } else if (c == ' ' && !insideQuotes) {
+ parts.add(sb.toString());
+ sb.setLength(0);
+ } else {
+ sb.append(c);
+ }
+ }
+
+ if (sb.length() > 0) {
+ parts.add(sb.toString());
+ }
+
+ return parts;
+ }
+}
+
+
diff --git a/PR2_UIB/buchungen.text b/PR2_UIB/buchungen.text
new file mode 100644
index 0000000..b64acdc
--- /dev/null
+++ b/PR2_UIB/buchungen.text
@@ -0,0 +1,7 @@
+1 22.03.2024 "Einzahlung" 1000.00
+2 22.03.2024 "Einzahlung" 50.00
+3 23.03.2024 "Einkauf Edeka" -45.45
+4 24.03.2024 "Gehalt" 1200.00
+5 31.03.2024 "Mietzins Wohnung" -1100.00
+6 31.03.2024 "Nebenkostenpauschale Wohnung" -250.00
+7 04.04.2024 "Einkauf Netto" 42.02
diff --git a/PR2_UIB/src/test.txt b/PR2_UIB/src/test.txt
new file mode 100644
index 0000000..aafd30e
--- /dev/null
+++ b/PR2_UIB/src/test.txt
@@ -0,0 +1 @@
+nullsirat jajjaefhfahj 12312.42
\ No newline at end of file