From fac050b5dbc3cfc1e43d8ed0bb8347af69bf35c4 Mon Sep 17 00:00:00 2001
From: Martin Goik <goik@hdm-stuttgart.de>
Date: Wed, 28 Sep 2016 14:53:50 +0200
Subject: [PATCH] Exam summer 2016

---
 Klausuren/Sd1/2016summer/Exam/.gitignore      |   5 +
 Klausuren/Sd1/2016summer/Exam/pom.xml         |  64 +++++++
 .../hdm_stuttgart/eval/ShowReachedPoints.java |  15 ++
 .../de/hdm_stuttgart/eval/Test_Helper.java    | 162 ++++++++++++++++++
 .../de/hdm_stuttgart/eval/Test_Konto.java     |  97 +++++++++++
 .../de/hdm_stuttgart/sw1/klausur/Helper.java  | 108 ++++++++++++
 .../sw1/klausur/angebot/DummyZinsen.java      |  21 +++
 .../sw1/klausur/angebot/Konto.java            |  89 ++++++++++
 .../Exam/src/main/resources/log4j2.xml        |  21 +++
 .../2016summer/Exam/src/test/java/.gitkeep    |   0
 Klausuren/Sd1/2016summer/Makefile             |   6 +
 Klausuren/Sd1/2016summer/Solution/.gitignore  |   5 +
 Klausuren/Sd1/2016summer/Solution/Doc/a.xhtml |  76 ++++++++
 Klausuren/Sd1/2016summer/Solution/Doc/b.xhtml |  48 ++++++
 Klausuren/Sd1/2016summer/Solution/pom.xml     |  64 +++++++
 .../hdm_stuttgart/eval/ShowReachedPoints.java |  15 ++
 .../de/hdm_stuttgart/eval/Test_Helper.java    | 162 ++++++++++++++++++
 .../de/hdm_stuttgart/eval/Test_Konto.java     |  97 +++++++++++
 .../de/hdm_stuttgart/sw1/klausur/Helper.java  | 157 +++++++++++++++++
 .../sw1/klausur/angebot/DummyZinsen.java      |  21 +++
 .../sw1/klausur/angebot/Konto.java            | 124 ++++++++++++++
 .../Solution/src/main/resources/log4j2.xml    |  21 +++
 .../Solution/src/test/java/.gitkeep           |   0
 23 files changed, 1378 insertions(+)
 create mode 100644 Klausuren/Sd1/2016summer/Exam/.gitignore
 create mode 100644 Klausuren/Sd1/2016summer/Exam/pom.xml
 create mode 100644 Klausuren/Sd1/2016summer/Exam/src/main/java/de/hdm_stuttgart/eval/ShowReachedPoints.java
 create mode 100644 Klausuren/Sd1/2016summer/Exam/src/main/java/de/hdm_stuttgart/eval/Test_Helper.java
 create mode 100644 Klausuren/Sd1/2016summer/Exam/src/main/java/de/hdm_stuttgart/eval/Test_Konto.java
 create mode 100644 Klausuren/Sd1/2016summer/Exam/src/main/java/de/hdm_stuttgart/sw1/klausur/Helper.java
 create mode 100644 Klausuren/Sd1/2016summer/Exam/src/main/java/de/hdm_stuttgart/sw1/klausur/angebot/DummyZinsen.java
 create mode 100644 Klausuren/Sd1/2016summer/Exam/src/main/java/de/hdm_stuttgart/sw1/klausur/angebot/Konto.java
 create mode 100644 Klausuren/Sd1/2016summer/Exam/src/main/resources/log4j2.xml
 create mode 100644 Klausuren/Sd1/2016summer/Exam/src/test/java/.gitkeep
 create mode 100644 Klausuren/Sd1/2016summer/Makefile
 create mode 100644 Klausuren/Sd1/2016summer/Solution/.gitignore
 create mode 100644 Klausuren/Sd1/2016summer/Solution/Doc/a.xhtml
 create mode 100644 Klausuren/Sd1/2016summer/Solution/Doc/b.xhtml
 create mode 100644 Klausuren/Sd1/2016summer/Solution/pom.xml
 create mode 100644 Klausuren/Sd1/2016summer/Solution/src/main/java/de/hdm_stuttgart/eval/ShowReachedPoints.java
 create mode 100644 Klausuren/Sd1/2016summer/Solution/src/main/java/de/hdm_stuttgart/eval/Test_Helper.java
 create mode 100644 Klausuren/Sd1/2016summer/Solution/src/main/java/de/hdm_stuttgart/eval/Test_Konto.java
 create mode 100644 Klausuren/Sd1/2016summer/Solution/src/main/java/de/hdm_stuttgart/sw1/klausur/Helper.java
 create mode 100644 Klausuren/Sd1/2016summer/Solution/src/main/java/de/hdm_stuttgart/sw1/klausur/angebot/DummyZinsen.java
 create mode 100644 Klausuren/Sd1/2016summer/Solution/src/main/java/de/hdm_stuttgart/sw1/klausur/angebot/Konto.java
 create mode 100644 Klausuren/Sd1/2016summer/Solution/src/main/resources/log4j2.xml
 create mode 100644 Klausuren/Sd1/2016summer/Solution/src/test/java/.gitkeep

diff --git a/Klausuren/Sd1/2016summer/Exam/.gitignore b/Klausuren/Sd1/2016summer/Exam/.gitignore
new file mode 100644
index 000000000..0f65e3ad7
--- /dev/null
+++ b/Klausuren/Sd1/2016summer/Exam/.gitignore
@@ -0,0 +1,5 @@
+/.classpath
+/.project
+/.settings
+/.A1.log
+/dependency-reduced-pom.xml
diff --git a/Klausuren/Sd1/2016summer/Exam/pom.xml b/Klausuren/Sd1/2016summer/Exam/pom.xml
new file mode 100644
index 000000000..4f1c7030d
--- /dev/null
+++ b/Klausuren/Sd1/2016summer/Exam/pom.xml
@@ -0,0 +1,64 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+
+	<groupId>de.hdm-stuttgart.sw1.klausur</groupId>
+	<artifactId>sw1_2016sommer_exam</artifactId>
+	<version>0.8</version>
+	<packaging>jar</packaging>
+
+	<name>sw1_2016summer_exam</name>
+	<url>https://freedocs.mi.hdm-stuttgart.de</url>
+
+	<properties>
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+	</properties>
+
+	<repositories>
+		<repository>
+			<id>hdm-mi-internal-maven-repo</id>
+			<url>https://maven.mi.hdm-stuttgart.de/artifacts</url>
+		</repository>
+	</repositories>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-compiler-plugin</artifactId>
+				<version>3.5.1</version>
+				<configuration>
+					<source>1.8</source>
+					<target>1.8</target>
+				</configuration>
+			</plugin>
+		</plugins>
+	</build>
+
+	<dependencies>
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+			<version>4.12</version>
+		</dependency>
+
+		<dependency>
+			<groupId>org.apache.logging.log4j</groupId>
+			<artifactId>log4j-api</artifactId>
+			<version>2.1</version>
+		</dependency>
+
+		<dependency>
+			<groupId>org.apache.logging.log4j</groupId>
+			<artifactId>log4j-core</artifactId>
+			<version>2.1</version>
+		</dependency>
+
+		<dependency>
+			<groupId>de.hdm_stuttgart.mi.exam</groupId>
+			<artifactId>unitmarking</artifactId>
+			<version>0.9</version>
+		</dependency>
+
+	</dependencies>
+</project>
diff --git a/Klausuren/Sd1/2016summer/Exam/src/main/java/de/hdm_stuttgart/eval/ShowReachedPoints.java b/Klausuren/Sd1/2016summer/Exam/src/main/java/de/hdm_stuttgart/eval/ShowReachedPoints.java
new file mode 100644
index 000000000..e3000dc25
--- /dev/null
+++ b/Klausuren/Sd1/2016summer/Exam/src/main/java/de/hdm_stuttgart/eval/ShowReachedPoints.java
@@ -0,0 +1,15 @@
+package de.hdm_stuttgart.eval;
+
+import de.hdm_stuttgart.mi.exam.unitmarking.RunTests;
+
+public class ShowReachedPoints {
+
+   /**
+    * Execution reveals the number of reached points.
+    * 
+    * @param args Unused
+    */
+   public static void main(String[] args) {
+      RunTests.exec(Test_Helper.class, Test_Konto.class);
+   }
+}
diff --git a/Klausuren/Sd1/2016summer/Exam/src/main/java/de/hdm_stuttgart/eval/Test_Helper.java b/Klausuren/Sd1/2016summer/Exam/src/main/java/de/hdm_stuttgart/eval/Test_Helper.java
new file mode 100644
index 000000000..c4963d24a
--- /dev/null
+++ b/Klausuren/Sd1/2016summer/Exam/src/main/java/de/hdm_stuttgart/eval/Test_Helper.java
@@ -0,0 +1,162 @@
+package de.hdm_stuttgart.eval;
+
+import org.junit.Assert;
+import org.junit.FixMethodOrder;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.DisableOnDebug;
+import org.junit.rules.TestRule;
+import org.junit.rules.Timeout;
+import org.junit.runners.MethodSorters;
+
+import de.hdm_stuttgart.mi.exam.unitmarking.Marking;
+import de.hdm_stuttgart.sw1.klausur.Helper;
+
+import static de.hdm_stuttgart.sw1.klausur.Helper.*;
+
+@SuppressWarnings({"javadoc"})
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+public class Test_Helper {
+
+	// Kill test if tests last longer than 1000 milliseconds unless in debugging mode
+	@Rule
+    public final TestRule timeout = new DisableOnDebug(Timeout.millis(1000));
+
+	/**
+	 * Tests zu {@link Helper#klartextName(int)}
+	 */
+   @Test
+   @Marking(points=3)
+   public void test_100_klartext() {
+      Assert.assertEquals("sieben", klartextName(7));
+   }
+
+   @Test
+   @Marking(points=3)
+   public void test_120_klartext() {
+      Assert.assertEquals("null", klartextName(0));
+   }
+
+   @Test
+   @Marking(points=3)
+   public void test_130_klartextNegativ() {
+      Assert.assertEquals("Uuups, keine Regel für den Wert -1", klartextName(-1));
+      Assert.assertEquals("Uuups, keine Regel für den Wert 13", klartextName(13));
+   }
+
+   /**
+    * Tests zu {@link Helper#getProduktBetrag(int, int)}
+    */
+   @Test
+   @Marking(points=8)
+   public void test_145_produktbetrag() {
+      Assert.assertEquals(10, getProduktBetrag(2, 5));
+      Assert.assertEquals(110, getProduktBetrag(2, -55));
+      Assert.assertEquals(120, getProduktBetrag(-40, 3));
+      Assert.assertEquals(21, getProduktBetrag(-3, -7));
+   }
+
+   /**
+    * Tests zu {@link Helper#getQuadrant(double)}
+    */
+   @Test
+   @Marking(points=8)
+   public void test_160_quadrant() {
+      
+      for (int i = 0; i < 90; i++) {
+         Assert.assertEquals(1, getQuadrant(i));
+      }
+      
+      for (int i = 90; i < 180; i++) {
+         Assert.assertEquals(2, getQuadrant(i));
+      }
+      
+      for (int i = 180; i < 270; i++) {
+         Assert.assertEquals(3, getQuadrant(i));
+      }
+      
+      for (int i = 270; i < 360; i++) {
+         Assert.assertEquals(4, getQuadrant(i));
+      }
+   }
+
+   /**
+    * Tests zu {@link Helper#getZeitangabe(long)}
+    */
+   @Test
+   @Marking(points=8)
+   public void test_180_zeitangabe() {
+      Assert.assertEquals("0:0:31", getZeitangabe(31));
+      Assert.assertEquals("0:2:5", getZeitangabe(125));
+      Assert.assertEquals("0:5:1", getZeitangabe(301));
+      Assert.assertEquals("0:10:42", getZeitangabe(642));
+      Assert.assertEquals("2:0:41", getZeitangabe(7241));
+   }
+   
+   /**
+    * Tests zu {@link Helper#spiegelung(int[])}
+    */
+   @Test
+   @Marking(points=8)
+   public void test_200_spiegelung() {
+      spiegelung(null); // Sollte keine Exception werfen.
+      
+      {
+         final int[] input = new int[]{};
+         spiegelung(input);
+         Assert.assertArrayEquals(new int[]{}, input);
+      }
+      
+      {
+         final int[] input = new int[]{1};
+         spiegelung(input);
+         Assert.assertArrayEquals(new int[]{1}, input);
+      }
+      
+      {
+         final int[] input = new int[]{1, 2};
+         spiegelung(input);
+         Assert.assertArrayEquals(new int[]{2, 1}, input);
+      }
+      
+      {
+         final int[] input = new int[]{2, 1};
+         spiegelung(input);
+         Assert.assertArrayEquals(new int[]{1, 2}, input);
+      }
+      
+      {
+         final int[] input = new int[]{-1, 22, -333};
+         spiegelung(input);
+         Assert.assertArrayEquals(new int[]{-333, 22, -1}, input);
+      }
+      
+      {
+         final int[] input = new int[]{-1, 22, -333};
+         spiegelung(input);
+         Assert.assertArrayEquals(new int[]{-333, 22, -1}, input);
+      }
+      
+      {
+         final int[] input = new int[]{-1, 22, -333, 24, 55};
+         spiegelung(input);
+         Assert.assertArrayEquals(new int[]{55, 24, -333, 22, -1}, input);
+      }
+      
+   }
+   
+   /**
+    * Tests zu {@link Helper#istGueltig(String)}
+    */
+   @Test
+   @Marking(points=9)
+   public void test_240_istGueltig() {
+      Assert.assertTrue(istGueltig("0-201-31452-5"));
+      Assert.assertTrue(istGueltig("8535902775"));
+      Assert.assertTrue(istGueltig("8-535-9027-75"));
+      Assert.assertFalse(istGueltig("1843369283"));
+      Assert.assertFalse(istGueltig("9-2")); //Just two digits
+      Assert.assertFalse(istGueltig("")); //empty
+   }
+   
+}
\ No newline at end of file
diff --git a/Klausuren/Sd1/2016summer/Exam/src/main/java/de/hdm_stuttgart/eval/Test_Konto.java b/Klausuren/Sd1/2016summer/Exam/src/main/java/de/hdm_stuttgart/eval/Test_Konto.java
new file mode 100644
index 000000000..435ae4945
--- /dev/null
+++ b/Klausuren/Sd1/2016summer/Exam/src/main/java/de/hdm_stuttgart/eval/Test_Konto.java
@@ -0,0 +1,97 @@
+package de.hdm_stuttgart.eval;
+
+import org.junit.Assert;
+import org.junit.FixMethodOrder;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.DisableOnDebug;
+import org.junit.rules.TestRule;
+import org.junit.rules.Timeout;
+import org.junit.runners.MethodSorters;
+
+import de.hdm_stuttgart.mi.exam.unitmarking.Marking;
+import de.hdm_stuttgart.sw1.klausur.angebot.Konto;
+
+@SuppressWarnings({ "javadoc" })
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+public class Test_Konto {
+
+	// Kill test if tests last longer than 1000 milliseconds unless in debugging mode
+	@Rule
+	public final TestRule timeout = new DisableOnDebug(Timeout.millis(1000));
+
+	
+   @Test
+   @Marking(points=2)
+   public void test_200_NeuesKonto() {
+      final Konto konto = new Konto(100, 1, 10);
+      Assert.assertEquals(100, konto.getKontostand(), 1.e-6);
+   }
+   
+   @Test
+   @Marking(points=1)
+   public void test_210_NeuesKontoJournal() {
+      final Konto konto = new Konto(100, 1, 10);
+      Assert.assertEquals("Jahr 0, Kontostand=100, verzinsung=1.0%\n", konto.getJournal());
+   }
+   
+   @Test
+   @Marking(points=3)
+   public void test_220_einJahrPositiv() {
+      final Konto konto = new Konto(100, 1, 10);
+      konto.neuesJahr(100);
+      Assert.assertEquals(100 + 100*(1 + 1./100), konto.getKontostand(), 1.e-6);
+   }
+
+   @Test
+   @Marking(points=2)
+   public void test_240_einJahrNegativ() {
+      final Konto konto = new Konto(-100, 1, 10);
+      konto.neuesJahr(100);
+      Assert.assertEquals(-100*(1 + 10./100) + 100, konto.getKontostand(), 1.e-6);
+   }
+
+   @Test
+   @Marking(points=2)
+   public void test_250_einJahrJournal() {
+      final Konto konto = new Konto(-100, 1, 10);
+      konto.neuesJahr(100);
+      Assert.assertEquals(
+            "Jahr 0, Kontostand=-100, verzinsung=-10.0%\n" +
+            "Jahr 1, Kontostand=-10, verzinsung=-10.0%\n", 
+            konto.getJournal());
+   }
+
+   @Test
+   @Marking(points=4)
+   public void test_260_zweiJahre() {
+      final Konto konto = new Konto(100, 1, 10);
+      konto.neuesJahr(200, 2, 12);
+      konto.neuesJahr(100);
+      Assert.assertEquals((100 *(1 + 1./100) + 200) * (1 + 2./100) + 100, konto.getKontostand(), 1.e-6);
+   }
+
+   @Test
+   @Marking(points=4)
+   public void test_280_zweiJahrePlusMinus() {
+      final Konto konto = new Konto(100, 1, 10);
+      konto.neuesJahr(-200);
+      konto.neuesJahr(100);
+      Assert.assertEquals((100 *(1 + 1./100) - 200)*(1 + 10./100) + 100, konto.getKontostand(), 1.e-6);
+   }
+
+   @Test
+   @Marking(points=2)
+   public void test_300_zweiJahrePlusMinusJournal() {
+      final Konto konto = new Konto(100, 1, 10);
+      konto.neuesJahr(-200);
+      konto.neuesJahr(100);
+      System.out.println(konto.getJournal());
+      Assert.assertEquals(
+            "Jahr 0, Kontostand=100, verzinsung=1.0%\n" +
+            "Jahr 1, Kontostand=-99, verzinsung=-10.0%\n" +
+            "Jahr 2, Kontostand=-9, verzinsung=-10.0%\n", 
+            konto.getJournal());
+   }
+
+}
\ No newline at end of file
diff --git a/Klausuren/Sd1/2016summer/Exam/src/main/java/de/hdm_stuttgart/sw1/klausur/Helper.java b/Klausuren/Sd1/2016summer/Exam/src/main/java/de/hdm_stuttgart/sw1/klausur/Helper.java
new file mode 100644
index 000000000..7e6b7de08
--- /dev/null
+++ b/Klausuren/Sd1/2016summer/Exam/src/main/java/de/hdm_stuttgart/sw1/klausur/Helper.java
@@ -0,0 +1,108 @@
+package de.hdm_stuttgart.sw1.klausur;
+
+
+public class Helper {
+   
+   /**
+    * <p>Liefert die Deutschen Klartextnamen der Zahlen von 0 bis Zwölf, also:</p>
+    * 
+    *  <p>{0, 1, 2, ..., 12} wird zu {"eins", "zwei", ..., "zwölf"}</p>
+    *  
+    *  <p>Für alle anderen Werte soll "Uuups, keine Regel für den Wert X" zurückgegeben werden.</p>
+    * 
+    * @param a Umzuwandelnder Wert
+    * @return Klartextname.
+    */
+   static public String klartextName(final int a) {
+      return "huhuu!"; // TODO: Implementiere mich richtig.
+   }
+
+   /**
+    * Gibt den Betrag des Produkts der beiden Faktoren zurück. 
+    * 
+    * @param a Erster Wert
+    * @param b Zweiter Wert
+    * @return Betrag des Produkts.
+    */
+   static public int getProduktBetrag(final int a, final int b) {
+      return -2234;  // TODO: Implementiere mich richtig.
+   }
+
+   /**
+    * Der Quadrant für einen gegebenen Winkel.
+    * 
+    * Der Vollkreis wird in 0 bis 360 Grad eingeteilt. Je nach Winkel liegt ein Vektor
+    * im Quadrant 1, 2 3 oder 4:
+    * 
+    *              |
+    * Quadrant 2   |  Quadrant 1
+    *              |
+    *              |
+    *--------------+-------------
+    *              |
+    *              |
+    * Quadrant 3   | Quadrant 4
+    *              |
+    *  
+    *  Werte von einschließlich 0 bis ausschließlich 90 Grad liegen im ersten Quadranten usw.
+    *  
+    * 
+    * Gibt den Betrag des Produkts der beiden Faktoren zurück. 
+    * 
+    * @param winkel Winkel des zu betrachtenden Vektors aus dem Intervall [0, 360[.
+    * @return zugehöriger Quadrant.
+    */
+   static public int getQuadrant(final double winkel) {
+      return 42;  // TODO: Implementiere mich richtig.
+   }
+	
+   /**
+    * Umwandlung von Sekundenangaben in das Format hh:mm:ss Beispiel:
+    * 
+    * 7290 Sekunden entsprechen 2 Stunden, einer Minute und 30 Sekunden, also "2:1:30"
+    * 
+    * @param sekunden Nicht-negative Sekundenangabe
+    * @return Angabe in Stunden:Minuten:Sekunden
+    */
+   static public String getZeitangabe(final long sekunden) {
+      return "huhuu!";  // TODO: Implementiere mich richtig.
+   }
+	
+   /**
+    * <p>Kehre die Reihenfolge der Werte eines Feldes um. Beispiel:</p>
+    *  
+    *  <p> {1, 2, 3, 4, 5} wird zu {5, 4, 3, 2, 1}
+    * 
+    * @param werte Ein Feld aus Werten oder null (keine Aktion).
+    */
+   static public void spiegelung(int [] werte) {
+      // TODO: Implementiere mich richtig.
+   }
+   
+   /**
+    * <p>Prüfe die Gültigkeit einer ISBN Nummer.</p>
+    * 
+    * <p>Eine gegebene ISBN Nummer ist gültig, wenn:</p>
+    * 
+    * <ul>
+    *   <li>Sie aus 10 Ziffern besteht und ansonsten nur "-" Zeichen enthält</li>
+    *   
+    *   <li><p>Das Produkt 1 * d_1 + 2 * d_2 + ... + 10 * d_10 ein Vielfaches von 11 ist, wobei {d_10 d_9 ...,d_1} die Ziffern von rechts nach links darstellen</p>
+    *   <p>Beispiel: Die ISBN Nummer 0-201-31452-5 ist gültig:</p>
+    *   <p>Produkt von rechts nach links 1*5 + 2*2 + 3*5 + 4*4 + 5*1 + 6*3 + 7*1 + 8*0 + 9*2 + 10*0 = 88, also ein Vielfaches von 11.</p>
+    *   
+    *   <p>18-433-6928-3 ist hingegen ungültig. Ebenso 2234-223-12, da nur 9 Ziffern vorhanden sind.</p>
+    *   
+    *   </li>
+    * </ul>
+    * 
+    * @param isbn Referenznummer eines Buchs
+    * @return true or false
+    * 
+    * <p style="color: red;font-weight: bold;">Tip: Beachten Sie {@link Character#getNumericValue(char)} und {@link String#toCharArray()}.</p>
+    * 
+    */
+   static public boolean istGueltig(final String isbn) {
+      return true;  // TODO: Implementiere mich richtig.
+   }
+}
\ No newline at end of file
diff --git a/Klausuren/Sd1/2016summer/Exam/src/main/java/de/hdm_stuttgart/sw1/klausur/angebot/DummyZinsen.java b/Klausuren/Sd1/2016summer/Exam/src/main/java/de/hdm_stuttgart/sw1/klausur/angebot/DummyZinsen.java
new file mode 100644
index 000000000..673bb0e1b
--- /dev/null
+++ b/Klausuren/Sd1/2016summer/Exam/src/main/java/de/hdm_stuttgart/sw1/klausur/angebot/DummyZinsen.java
@@ -0,0 +1,21 @@
+package de.hdm_stuttgart.sw1.klausur.angebot;
+
+/**
+ * Demo zur Verwendung der Klasse {@link Konto}. Beachten Sie bitte die
+ * zugehörigen Junit Tests.
+ *
+ */
+public class DummyZinsen {
+
+	public static void main(String[] args) {
+		
+		final Konto konto = new Konto(100, 1.0, 10); // Start mit 100€, Guthabenzins 1%, Sollzins 10%
+		
+      konto.neuesJahr(100); // Verzinsung des bisherigen Betrags und Aufstockung um 100€ 
+      konto.neuesJahr(200, 2.0, 8); // Verzinsung des bisherigen Betrags, Aufstockung um 200€, Änderung der Zinssätze für das Folgejahr. 
+      konto.neuesJahr(-500);// Verzinsung des bisherigen Betrags, Abbuchung von 500€ 
+		
+		System.out.println(konto.getJournal());// Ausgabe des Journals
+	}
+
+}
diff --git a/Klausuren/Sd1/2016summer/Exam/src/main/java/de/hdm_stuttgart/sw1/klausur/angebot/Konto.java b/Klausuren/Sd1/2016summer/Exam/src/main/java/de/hdm_stuttgart/sw1/klausur/angebot/Konto.java
new file mode 100644
index 000000000..118582b53
--- /dev/null
+++ b/Klausuren/Sd1/2016summer/Exam/src/main/java/de/hdm_stuttgart/sw1/klausur/angebot/Konto.java
@@ -0,0 +1,89 @@
+package de.hdm_stuttgart.sw1.klausur.angebot;
+
+/**
+ * <p>Verzinsung von Guthaben oder Schulden. Es gelten folgende Regeln:</p>
+ * 
+ * <p>Einmal pro Jahr kann über eine der beiden Methoden  {@link #neuesJahr(double, double, double)} oder {@link #neuesJahr(double)}
+ *   gemäß Vorzeichen des Betrags eingezahlt oder abgehoben werden.</p>
+ *   
+ * <p>Gleichzeitig können zu diesem Zeitpunkt die Zinssätze für Guthaben und Schulden (Soll) für das Folgejahr angepasst werden.</p>
+ * 
+ */
+public class Konto {
+   
+   /**
+    * Erstelle neues Konto.
+    * 
+    * @param kontostand Initialer Kontostand.
+    * @param guthabenZins Initialer Guthabenzins.
+    * @param sollZins Initialer Schuldzins.  
+    */
+   public Konto(double kontostand, double guthabenZins, double sollZins) {
+      // TODO: Implementiere mich richtig.
+   }
+   
+   /**
+    * Diese oder alternativ die Methode {@link #neuesJahr(double)} wir einmal jährlich 
+    * 
+    * <ul>
+    *   <li>Durchführung der Verzinsung für das zurückliegende Jahr zu aktuellen Guthaben- bzw. Schuldzinsen.</li>
+    *   <li>Einzahlung für das jeweils nächste Jahr</li>
+    *   <li>Anpassung von Guthaben- und Schuldzins für das kommende Verzinsungsjahr.</li>
+    * </ul>
+    * ,  und .
+    * 
+    * @param betrag Je nach Vorzeichen neu hinzugefügter oder abgebuchter Betrag. 
+    * @param guthabenZins Der für das jeweils kommende Jahr geltende prozentuale Guthabenzins für nichtnegative Kontostände. 
+    * @param sollZins Der für das jeweils kommende Jahr geltende prozentuale Guthabenzins für negative Kontostände.
+    * 
+    * <p style="color: red;font-weight: bold;">Tip: Im Hinblick auf das Journal in {@link #getJournal()} können Sie alle
+    * benötigten Informationen in einer {@link StringBuffer} Instanzvariablen sammeln. Sinngemäß gilt dies auch für den jeweils
+    * aktuellen Kontostand.</p>
+    */
+   public void neuesJahr(double betrag, double guthabenZins, double sollZins) {
+      // TODO: Implementiere mich richtig.   
+      }
+
+   /**
+    * Wie {@link #neuesJahr(double, double, double)} allerdings ohne Änderung von Guthaben- und Sollzins für
+    * das kommende Verzinsungsjahr.
+    *  
+    * @param betrag Je nach Vorzeichen neu hinzugefügter oder abgebuchter Betrag. 
+    */
+   public void neuesJahr(double betrag) {
+      // TODO: Implementiere mich richtig.   
+      }
+   
+   /**
+    * @return Der aktuelle Kontostand.
+    */
+   public double getKontostand() {
+      return -323.43; // TODO: Implementiere mich richtig.
+   }
+   
+   /**
+    * Die Entwicklung der Kontostände kaufmännisch auf ganzzahlige Werte gerundet. Für das Beispiel {@link DummyZinsen#main(String[])} ergibt sich:
+    * 
+    * <pre>Jahr 0, Kontostand=100, verzinsung=1.0%
+    *Jahr 1, Kontostand=201, verzinsung=1.0%
+    *Jahr 2, Kontostand=403, verzinsung=2.0%
+    *Jahr 3, Kontostand=-89, verzinsung=-8.0%</pre>
+    * 
+    * @return Ausdruckbarer Verlauf der Kontoentwicklung
+    * 
+    * <ul>
+    *   <li><p style="color: red;font-weight: bold;">Tip: Im Hinblick auf das Journal in {@link #getJournal()} können Sie alle
+    * benötigten Informationen in einer {@link StringBuffer} Instanzvariablen sammeln. Sinngemäß gilt dies auch für den jeweils
+    * aktuellen Kontostand. Beachten Sie die Methode {@link Math#round(double)}</p></li>
+    * 
+    * <li><p style="color: red;font-weight: bold;">Tip: Ein Hang zum Erbsenzählen erleichtert die Lösung.
+    * Bereits ein falsches Leer- oder fehlendes Newline Zeichen (auch am Ende!)
+    * lässt die zugehörigen Tests scheitern. Beachten Sie allfällige Junit Fehlermeldungen sehr genau.</p></li>
+    * 
+    * </ul>
+    * 
+    */
+   public String getJournal() {
+      return "dxas"; // TODO: Implementiere mich richtig.
+   }
+}
\ No newline at end of file
diff --git a/Klausuren/Sd1/2016summer/Exam/src/main/resources/log4j2.xml b/Klausuren/Sd1/2016summer/Exam/src/main/resources/log4j2.xml
new file mode 100644
index 000000000..e4bd6e388
--- /dev/null
+++ b/Klausuren/Sd1/2016summer/Exam/src/main/resources/log4j2.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Configuration>
+    <Appenders>
+        <File name="A1" fileName="A1.log" append="false">
+            <PatternLayout pattern="%t %-5p %c{2} - %m%n"/>
+        </File>
+        <Console name="STDOUT" target="SYSTEM_OUT">
+            <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
+        </Console>
+    </Appenders>
+    <Loggers>
+
+        <!-- You my want to define class or package level per-logger rules -->
+        <Logger name="q.w.App" level="debug">
+            <AppenderRef ref="A1"/>
+        </Logger>
+        <Root level="info">
+            <AppenderRef ref="STDOUT"/>
+        </Root>
+    </Loggers>
+</Configuration>
\ No newline at end of file
diff --git a/Klausuren/Sd1/2016summer/Exam/src/test/java/.gitkeep b/Klausuren/Sd1/2016summer/Exam/src/test/java/.gitkeep
new file mode 100644
index 000000000..e69de29bb
diff --git a/Klausuren/Sd1/2016summer/Makefile b/Klausuren/Sd1/2016summer/Makefile
new file mode 100644
index 000000000..009cd0b7c
--- /dev/null
+++ b/Klausuren/Sd1/2016summer/Makefile
@@ -0,0 +1,6 @@
+all:
+	tar c- Exam|tar -x -C /tmp
+	cd /tmp/Exam; mvn clean eclipse:clean
+	cd /tmp; rm -f exam.zip; zip -r exam.zip Exam
+	echo /tmp/exam.zip has been created
+#end
diff --git a/Klausuren/Sd1/2016summer/Solution/.gitignore b/Klausuren/Sd1/2016summer/Solution/.gitignore
new file mode 100644
index 000000000..0f65e3ad7
--- /dev/null
+++ b/Klausuren/Sd1/2016summer/Solution/.gitignore
@@ -0,0 +1,5 @@
+/.classpath
+/.project
+/.settings
+/.A1.log
+/dependency-reduced-pom.xml
diff --git a/Klausuren/Sd1/2016summer/Solution/Doc/a.xhtml b/Klausuren/Sd1/2016summer/Solution/Doc/a.xhtml
new file mode 100644
index 000000000..0996e70ee
--- /dev/null
+++ b/Klausuren/Sd1/2016summer/Solution/Doc/a.xhtml
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html lang="de" xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <title>Helper Methoden</title>
+  </head>
+
+  <body><h2>Vorbereitung</h2><p>Entpacken Sie das oben sichtbare Archiv
+  <b>exam.zip</b> und importieren Sie den resultierenden Ordner
+  <code>Exam</code> als <span lang="en">Maven</span> Projekt in Ihren <span
+  lang="en">Eclipse Workspace</span>.</p><h2>Aufgabe</h2><p>Implementieren Sie
+  die in der Klasse <code>de.hdm_stuttgart.sw1.klausur.Helper</code> des
+  Eclipse Projekts vorbereiteten Dummy Methoden.</p><h2>Allgemeine
+  Hinweise</h2><ul>
+      <li><p>Die Javadoc Kommentare der jeweiligen Methoden beschreiben das
+      gewünschte Verhalten. Wählen Sie im Package Explorer die Projektwurzel
+      und generieren Sie die HTML Dokumentation über die Menüpunkte <code>Run
+      -&gt; Run As... -&gt; Maven build</code> mit dem Parameter
+      <code>javadoc:javadoc</code> im Eingabefeld „Goals:”. Die generierte
+      HTML Dokumentation wird im Unterordner <code>target/site/apidocs</code>
+      Ihres Projekts angelegt und kann durch einen Web Browser Ihrer Wahl
+      betrachtet werden.</p><p>Lesen Sie diese Dokumentation <b>sehr
+      genau</b>.</p><p>Bei einzelnen Methoden finden Sie rot markierte,
+      unverbindlicher Tips zur Implementierung. Sie können eine völlig andere
+      Strategie der Implementierung wählen, solange die zugehörigen JUnit
+      Tests erfolgreich sind.</p></li>
+
+      <li><p>Für jede Methode aus der Klasse
+      <code>de.hdm_stuttgart.sw1.klausur.Helper</code> stehen Ihnen in der
+      Testklasse <code>de.hdm_stuttgart.eval.Test_Helper</code> (Achtung:
+      Nicht unter <code>src/test/java</code> sondern in
+      <code>src/main/java</code>) korrespondierende Tests zur Verfügung.
+      Nutzen Sie diese!</p><p>Die von Ihnen erreichte Punktzahl richtet sich
+      nach der Anzahl positiv bestandener Tests. Sie bekommen keine Punkte für
+      Tests, bei denen Ihre Implementierung „fast richtig“ ist. Implementieren
+      Sie daher im Zweifelsfall weniger Methoden, diese dafür aber
+      vollständig.</p><p>Die Ausführung der Klasse
+      <code>de.hdm_stuttgart.sw1.klausur.test.ShowReachedPoints</code> liefert
+      Ihnen die Zahl der in dieser und anderen Programmieraufgaben insgesamt
+      erreichten und erreichbaren Punkte.</p></li>
+
+      <li><p>Beachten Sie alle beschriebenen Sonderfälle. Dazu zählen
+      insbesondere <code>null</code> Werte übergebener Variablen sowie
+      enthaltene <code>null</code> Werte in übergebenen Arrays.</p></li>
+
+      <li><p>Nutzen Sie den Debugger oder logging Statements im Fall
+      fehlgeschlagener Testfälle, falls Sie das zugrundeliegende Problem nicht
+      unmittelbar lösen können.</p></li>
+    </ul><h2 id="upload">Hochladen Ihrer Lösung in das
+  Klausursystem</h2><p>Exportieren Sie Ihre Implementierung dieser und
+  weiterer Programmieraufgaben per Rechtsklick im Package Explorer Ihres
+  Eclipse Projekts. Wählen Sie im Kontextmenü unter
+  »Export--&gt;General--&gt;Archive File« einen auf <code>.zip</code> endenden
+  Archivnamen. Exportieren Sie Ihr Projekt in dieses <code>.zip</code> Archiv
+  und laden Sie es in das Ilias Klausursystem hoch (unteres Seitenende) und
+  beachten Sie:</p><ul>
+      <li style="color: red;">Die hochgeladene .zip Datei muss im
+      Klausursystem sichtbar sein.</li>
+
+      <li style="color: red;">Reservieren Sie ausreichend Zeit vor Klausurende
+      für den Vorgang des Hochladens. Projekte, welche sich lediglich auf dem
+      Arbeitsplatzrechner befinden, werden nicht gewertet.</li>
+
+      <li style="color: red;">Laden Sie keine Projekte mit Java Syntaxfehlern
+      hoch, diese werden nicht bewertet!</li>
+
+      <li style="color: red;">Exportieren Sie Ihr Projekt <b>nicht</b> als
+      „.tgz“, „.java“, „.tar.gz“ o.ä. Das Klausursystem akzeptiert nur Archive
+      mit der Endung „.zip“.</li>
+    </ul><p>Alternativ können Sie auch sofort nachfolgende Aufgaben bearbeiten
+  und diese gemeinsam mit der Lösung der aktuellen Aufgabe hochladen.
+  Nachfolgende Programmieraufgaben enthalten keine separate Möglichkeit zum
+  Hochladen.</p><p>Falls Sie mehrere Archive hochladen, wird nur das zuletzt
+  hochgeladene Archiv bewertet. Sie können hochgeladene Archive
+  löschen.</p></body>
+</html>
diff --git a/Klausuren/Sd1/2016summer/Solution/Doc/b.xhtml b/Klausuren/Sd1/2016summer/Solution/Doc/b.xhtml
new file mode 100644
index 000000000..8e8981820
--- /dev/null
+++ b/Klausuren/Sd1/2016summer/Solution/Doc/b.xhtml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html>
+<html lang="de" xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <title>Jährliche Verzinsung</title>
+  </head>
+
+  <body><h2>Hinweis zur Bewertung</h2><p>Diese Aufgabe erbringt im Vergleich
+  zur ihrer Schwierigkeit eine geringere Punktzahl als die Aufgabe „Helper
+  Methoden”.</p><h2>Beschreibung</h2><p>Eine Bank möchte die Logik zur
+  Verzinsung von Konten in einer einzelnen Klasse
+  <code>de.hdm_stuttgart.sw1.klausur.angebot.Konto</code>
+  implementieren.</p><h2>Vorbereitung</h2><p>Sollten Sie die Aufgabe „Helper
+  Methoden” nicht bearbeitet haben, so lesen Sie bitte die dortige Anleitung
+  zum Eclipse Maven Projektimport und die zugehörigen allgemeinen Hinweise.
+  Ansonsten arbeiten Sie mit Ihrem Eclipse Maven Projekt
+  weiter.</p><h2>Erläuterung</h2><p>Konten sollen mit einem Anfangsbetrag
+  angelegt werden können. Ist dieser positiv, so gelten Guthabenzinsen. Bei
+  negativem Betrag wird ein Sollzins berechnet.</p><p>Einmal Jährlich erfolgt
+  die Verzinsung. Nur zu diesem Zeitpunkt können Beträge auf das Konto zu-
+  oder vom Konto abgebucht werden. Optional können zu diesem Zweitpunkt die
+  Zinswerte für das nächste Jahr verändert werden</p><p>Beachten Sie die
+  detaillierteren Erläuterungen und Tips in den Javadoc Köpfen sowie die Tests
+  in <code>de.hdm_stuttgart.eval.Test_Konto</code> unter
+  <code>src/main/java</code> und das Programmbeispiel in
+  <code>de.hdm_stuttgart.sw1.klausur.angebot.DummyZinsen</code>.</p><h2>Aufgabe</h2><p>Vervollständigen
+  Sie die Implementierung der Klasse
+  <code>de.hdm_stuttgart.sw1.klausur.angebot.Konto</code>. Die Javadoc
+  Kommentare präzisieren obige Erläuterungen.</p><h2>Allgemeine
+  Hinweise</h2><ul>
+      <li><p>Konvertieren Sie (soweit noch nicht geschehen) die Javadoc
+      Kommentare gemäß der Beschreibung in der Aufgabe „Helper Methoden” zur
+      besseren Ansicht im Browser in das Html Format.</p></li>
+
+      <li><p>Verwenden Sie die Testklasse
+      <code>de.hdm_stuttgart.eval.Test_Konto</code> zur Prüfung der
+      Vollständigkeit und Korrektheit Ihrer Implementierung.</p></li>
+    </ul><h2>Hochladen Ihrer Lösung in das Klausursystem</h2><p>Laden Sie Ihre
+  Lösung in der Aufgabe „Helper Methoden” gemäß den dortigen Hinweisen hoch.
+  Falls Sie diese andere Aufgabe bereits bearbeitet haben, enthält Ihr Upload
+  beide Aufgaben.</p><p>Tragen Sie im unten stehenden Freitextfeld genau einen
+  der beiden Texte ein:</p><ol>
+      <li><b>Ich habe die aktuelle Aufgabe bearbeitet und erhoffe dafür
+      Punkte.</b></li>
+
+      <li><b>Ich habe die aktuelle Aufgabe nicht bearbeitet.</b></li>
+    </ol></body>
+</html>
diff --git a/Klausuren/Sd1/2016summer/Solution/pom.xml b/Klausuren/Sd1/2016summer/Solution/pom.xml
new file mode 100644
index 000000000..30152ad6d
--- /dev/null
+++ b/Klausuren/Sd1/2016summer/Solution/pom.xml
@@ -0,0 +1,64 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+
+	<groupId>de.hdm-stuttgart.sw1.klausur</groupId>
+	<artifactId>sw1_2016sommer_solve</artifactId>
+	<version>0.9</version>
+	<packaging>jar</packaging>
+
+	<name>sw1_2016summer_solve</name>
+	<url>https://freedocs.mi.hdm-stuttgart.de</url>
+
+	<properties>
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+	</properties>
+
+	<repositories>
+		<repository>
+			<id>hdm-mi-internal-maven-repo</id>
+			<url>https://maven.mi.hdm-stuttgart.de/artifacts</url>
+		</repository>
+	</repositories>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-compiler-plugin</artifactId>
+				<version>3.5.1</version>
+				<configuration>
+					<source>1.8</source>
+					<target>1.8</target>
+				</configuration>
+			</plugin>
+		</plugins>
+	</build>
+
+	<dependencies>
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+			<version>4.12</version>
+		</dependency>
+
+		<dependency>
+			<groupId>org.apache.logging.log4j</groupId>
+			<artifactId>log4j-api</artifactId>
+			<version>2.1</version>
+		</dependency>
+
+		<dependency>
+			<groupId>org.apache.logging.log4j</groupId>
+			<artifactId>log4j-core</artifactId>
+			<version>2.1</version>
+		</dependency>
+
+		<dependency>
+			<groupId>de.hdm_stuttgart.mi.exam</groupId>
+			<artifactId>unitmarking</artifactId>
+			<version>0.9</version>
+		</dependency>
+
+	</dependencies>
+</project>
diff --git a/Klausuren/Sd1/2016summer/Solution/src/main/java/de/hdm_stuttgart/eval/ShowReachedPoints.java b/Klausuren/Sd1/2016summer/Solution/src/main/java/de/hdm_stuttgart/eval/ShowReachedPoints.java
new file mode 100644
index 000000000..e3000dc25
--- /dev/null
+++ b/Klausuren/Sd1/2016summer/Solution/src/main/java/de/hdm_stuttgart/eval/ShowReachedPoints.java
@@ -0,0 +1,15 @@
+package de.hdm_stuttgart.eval;
+
+import de.hdm_stuttgart.mi.exam.unitmarking.RunTests;
+
+public class ShowReachedPoints {
+
+   /**
+    * Execution reveals the number of reached points.
+    * 
+    * @param args Unused
+    */
+   public static void main(String[] args) {
+      RunTests.exec(Test_Helper.class, Test_Konto.class);
+   }
+}
diff --git a/Klausuren/Sd1/2016summer/Solution/src/main/java/de/hdm_stuttgart/eval/Test_Helper.java b/Klausuren/Sd1/2016summer/Solution/src/main/java/de/hdm_stuttgart/eval/Test_Helper.java
new file mode 100644
index 000000000..c4963d24a
--- /dev/null
+++ b/Klausuren/Sd1/2016summer/Solution/src/main/java/de/hdm_stuttgart/eval/Test_Helper.java
@@ -0,0 +1,162 @@
+package de.hdm_stuttgart.eval;
+
+import org.junit.Assert;
+import org.junit.FixMethodOrder;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.DisableOnDebug;
+import org.junit.rules.TestRule;
+import org.junit.rules.Timeout;
+import org.junit.runners.MethodSorters;
+
+import de.hdm_stuttgart.mi.exam.unitmarking.Marking;
+import de.hdm_stuttgart.sw1.klausur.Helper;
+
+import static de.hdm_stuttgart.sw1.klausur.Helper.*;
+
+@SuppressWarnings({"javadoc"})
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+public class Test_Helper {
+
+	// Kill test if tests last longer than 1000 milliseconds unless in debugging mode
+	@Rule
+    public final TestRule timeout = new DisableOnDebug(Timeout.millis(1000));
+
+	/**
+	 * Tests zu {@link Helper#klartextName(int)}
+	 */
+   @Test
+   @Marking(points=3)
+   public void test_100_klartext() {
+      Assert.assertEquals("sieben", klartextName(7));
+   }
+
+   @Test
+   @Marking(points=3)
+   public void test_120_klartext() {
+      Assert.assertEquals("null", klartextName(0));
+   }
+
+   @Test
+   @Marking(points=3)
+   public void test_130_klartextNegativ() {
+      Assert.assertEquals("Uuups, keine Regel für den Wert -1", klartextName(-1));
+      Assert.assertEquals("Uuups, keine Regel für den Wert 13", klartextName(13));
+   }
+
+   /**
+    * Tests zu {@link Helper#getProduktBetrag(int, int)}
+    */
+   @Test
+   @Marking(points=8)
+   public void test_145_produktbetrag() {
+      Assert.assertEquals(10, getProduktBetrag(2, 5));
+      Assert.assertEquals(110, getProduktBetrag(2, -55));
+      Assert.assertEquals(120, getProduktBetrag(-40, 3));
+      Assert.assertEquals(21, getProduktBetrag(-3, -7));
+   }
+
+   /**
+    * Tests zu {@link Helper#getQuadrant(double)}
+    */
+   @Test
+   @Marking(points=8)
+   public void test_160_quadrant() {
+      
+      for (int i = 0; i < 90; i++) {
+         Assert.assertEquals(1, getQuadrant(i));
+      }
+      
+      for (int i = 90; i < 180; i++) {
+         Assert.assertEquals(2, getQuadrant(i));
+      }
+      
+      for (int i = 180; i < 270; i++) {
+         Assert.assertEquals(3, getQuadrant(i));
+      }
+      
+      for (int i = 270; i < 360; i++) {
+         Assert.assertEquals(4, getQuadrant(i));
+      }
+   }
+
+   /**
+    * Tests zu {@link Helper#getZeitangabe(long)}
+    */
+   @Test
+   @Marking(points=8)
+   public void test_180_zeitangabe() {
+      Assert.assertEquals("0:0:31", getZeitangabe(31));
+      Assert.assertEquals("0:2:5", getZeitangabe(125));
+      Assert.assertEquals("0:5:1", getZeitangabe(301));
+      Assert.assertEquals("0:10:42", getZeitangabe(642));
+      Assert.assertEquals("2:0:41", getZeitangabe(7241));
+   }
+   
+   /**
+    * Tests zu {@link Helper#spiegelung(int[])}
+    */
+   @Test
+   @Marking(points=8)
+   public void test_200_spiegelung() {
+      spiegelung(null); // Sollte keine Exception werfen.
+      
+      {
+         final int[] input = new int[]{};
+         spiegelung(input);
+         Assert.assertArrayEquals(new int[]{}, input);
+      }
+      
+      {
+         final int[] input = new int[]{1};
+         spiegelung(input);
+         Assert.assertArrayEquals(new int[]{1}, input);
+      }
+      
+      {
+         final int[] input = new int[]{1, 2};
+         spiegelung(input);
+         Assert.assertArrayEquals(new int[]{2, 1}, input);
+      }
+      
+      {
+         final int[] input = new int[]{2, 1};
+         spiegelung(input);
+         Assert.assertArrayEquals(new int[]{1, 2}, input);
+      }
+      
+      {
+         final int[] input = new int[]{-1, 22, -333};
+         spiegelung(input);
+         Assert.assertArrayEquals(new int[]{-333, 22, -1}, input);
+      }
+      
+      {
+         final int[] input = new int[]{-1, 22, -333};
+         spiegelung(input);
+         Assert.assertArrayEquals(new int[]{-333, 22, -1}, input);
+      }
+      
+      {
+         final int[] input = new int[]{-1, 22, -333, 24, 55};
+         spiegelung(input);
+         Assert.assertArrayEquals(new int[]{55, 24, -333, 22, -1}, input);
+      }
+      
+   }
+   
+   /**
+    * Tests zu {@link Helper#istGueltig(String)}
+    */
+   @Test
+   @Marking(points=9)
+   public void test_240_istGueltig() {
+      Assert.assertTrue(istGueltig("0-201-31452-5"));
+      Assert.assertTrue(istGueltig("8535902775"));
+      Assert.assertTrue(istGueltig("8-535-9027-75"));
+      Assert.assertFalse(istGueltig("1843369283"));
+      Assert.assertFalse(istGueltig("9-2")); //Just two digits
+      Assert.assertFalse(istGueltig("")); //empty
+   }
+   
+}
\ No newline at end of file
diff --git a/Klausuren/Sd1/2016summer/Solution/src/main/java/de/hdm_stuttgart/eval/Test_Konto.java b/Klausuren/Sd1/2016summer/Solution/src/main/java/de/hdm_stuttgart/eval/Test_Konto.java
new file mode 100644
index 000000000..435ae4945
--- /dev/null
+++ b/Klausuren/Sd1/2016summer/Solution/src/main/java/de/hdm_stuttgart/eval/Test_Konto.java
@@ -0,0 +1,97 @@
+package de.hdm_stuttgart.eval;
+
+import org.junit.Assert;
+import org.junit.FixMethodOrder;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.DisableOnDebug;
+import org.junit.rules.TestRule;
+import org.junit.rules.Timeout;
+import org.junit.runners.MethodSorters;
+
+import de.hdm_stuttgart.mi.exam.unitmarking.Marking;
+import de.hdm_stuttgart.sw1.klausur.angebot.Konto;
+
+@SuppressWarnings({ "javadoc" })
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+public class Test_Konto {
+
+	// Kill test if tests last longer than 1000 milliseconds unless in debugging mode
+	@Rule
+	public final TestRule timeout = new DisableOnDebug(Timeout.millis(1000));
+
+	
+   @Test
+   @Marking(points=2)
+   public void test_200_NeuesKonto() {
+      final Konto konto = new Konto(100, 1, 10);
+      Assert.assertEquals(100, konto.getKontostand(), 1.e-6);
+   }
+   
+   @Test
+   @Marking(points=1)
+   public void test_210_NeuesKontoJournal() {
+      final Konto konto = new Konto(100, 1, 10);
+      Assert.assertEquals("Jahr 0, Kontostand=100, verzinsung=1.0%\n", konto.getJournal());
+   }
+   
+   @Test
+   @Marking(points=3)
+   public void test_220_einJahrPositiv() {
+      final Konto konto = new Konto(100, 1, 10);
+      konto.neuesJahr(100);
+      Assert.assertEquals(100 + 100*(1 + 1./100), konto.getKontostand(), 1.e-6);
+   }
+
+   @Test
+   @Marking(points=2)
+   public void test_240_einJahrNegativ() {
+      final Konto konto = new Konto(-100, 1, 10);
+      konto.neuesJahr(100);
+      Assert.assertEquals(-100*(1 + 10./100) + 100, konto.getKontostand(), 1.e-6);
+   }
+
+   @Test
+   @Marking(points=2)
+   public void test_250_einJahrJournal() {
+      final Konto konto = new Konto(-100, 1, 10);
+      konto.neuesJahr(100);
+      Assert.assertEquals(
+            "Jahr 0, Kontostand=-100, verzinsung=-10.0%\n" +
+            "Jahr 1, Kontostand=-10, verzinsung=-10.0%\n", 
+            konto.getJournal());
+   }
+
+   @Test
+   @Marking(points=4)
+   public void test_260_zweiJahre() {
+      final Konto konto = new Konto(100, 1, 10);
+      konto.neuesJahr(200, 2, 12);
+      konto.neuesJahr(100);
+      Assert.assertEquals((100 *(1 + 1./100) + 200) * (1 + 2./100) + 100, konto.getKontostand(), 1.e-6);
+   }
+
+   @Test
+   @Marking(points=4)
+   public void test_280_zweiJahrePlusMinus() {
+      final Konto konto = new Konto(100, 1, 10);
+      konto.neuesJahr(-200);
+      konto.neuesJahr(100);
+      Assert.assertEquals((100 *(1 + 1./100) - 200)*(1 + 10./100) + 100, konto.getKontostand(), 1.e-6);
+   }
+
+   @Test
+   @Marking(points=2)
+   public void test_300_zweiJahrePlusMinusJournal() {
+      final Konto konto = new Konto(100, 1, 10);
+      konto.neuesJahr(-200);
+      konto.neuesJahr(100);
+      System.out.println(konto.getJournal());
+      Assert.assertEquals(
+            "Jahr 0, Kontostand=100, verzinsung=1.0%\n" +
+            "Jahr 1, Kontostand=-99, verzinsung=-10.0%\n" +
+            "Jahr 2, Kontostand=-9, verzinsung=-10.0%\n", 
+            konto.getJournal());
+   }
+
+}
\ No newline at end of file
diff --git a/Klausuren/Sd1/2016summer/Solution/src/main/java/de/hdm_stuttgart/sw1/klausur/Helper.java b/Klausuren/Sd1/2016summer/Solution/src/main/java/de/hdm_stuttgart/sw1/klausur/Helper.java
new file mode 100644
index 000000000..6bd14a3dc
--- /dev/null
+++ b/Klausuren/Sd1/2016summer/Solution/src/main/java/de/hdm_stuttgart/sw1/klausur/Helper.java
@@ -0,0 +1,157 @@
+package de.hdm_stuttgart.sw1.klausur;
+
+
+public class Helper {
+   
+   /**
+    * <p>Liefert die Deutschen Klartextnamen der Zahlen von 0 bis Zwölf, also:</p>
+    * 
+    *  <p>{0, 1, 2, ..., 12} wird zu {"eins", "zwei", ..., "zwölf"}</p>
+    *  
+    *  <p>Für alle anderen Werte soll "Uuups, keine Regel für den Wert X" zurückgegeben werden.</p>
+    * 
+    * @param a Umzuwandelnder Wert
+    * @return Klartextname.
+    */
+   static public String klartextName(final int a) {
+      switch(a) {
+      case 0: return "null";
+      case 1: return "eins";
+      case 2: return "zwei";
+      case 3: return "drei";
+      case 4: return "vier";
+      case 5: return "fünf";
+      case 6: return "sechs";
+      case 7: return "sieben";
+      case 8: return "acht";
+      case 9: return "neun";
+      case 10: return "zehn";
+      case 11: return "elf";
+      case 12: return "zwölf";
+
+      default : return "Uuups, keine Regel für den Wert " + a;
+      }
+   }
+
+   /**
+    * Gibt den Betrag des Produkts der beiden Faktoren zurück. 
+    * 
+    * @param a Erster Wert
+    * @param b Zweiter Wert
+    * @return Betrag des Produkts.
+    */
+   static public int getProduktBetrag(final int a, final int b) {
+      return Math.abs(a * b);
+   }
+
+   /**
+    * Der Quadrant für einen gegebenen Winkel.
+    * 
+    * Der Vollkreis wird in 0 bis 360 Grad eingeteilt. Je nach Winkel liegt ein Vektor
+    * im Quadrant 1, 2 3 oder 4:
+    * 
+    *              |
+    * Quadrant 2   |  Quadrant 1
+    *              |
+    *              |
+    *--------------+-------------
+    *              |
+    *              |
+    * Quadrant 3   | Quadrant 4
+    *              |
+    *  
+    *  Werte von einschließlich 0 bis ausschließlich 90 Grad liegen im ersten Quadranten usw.
+    *  
+    * 
+    * Gibt den Betrag des Produkts der beiden Faktoren zurück. 
+    * 
+    * @param winkel Winkel des zu betrachtenden Vektors aus dem Intervall [0, 360[.
+    * @return zugehöriger Quadrant.
+    */
+   static public int getQuadrant(final double winkel) {
+      if (winkel < 90) {
+         return 1;
+      } else if (winkel < 180) {
+         return 2;
+      } else if (winkel < 270) {
+         return 3;
+      } else {
+         return 4;
+      }
+   }
+	
+   /**
+    * Umwandlung von Sekundenangaben in das Format hh:mm:ss Beispiel:
+    * 
+    * 7290 Sekunden entsprechen 2 Stunden, einer Minute und 30 Sekunden, also "2:1:30"
+    * 
+    * @param sekunden Nicht-negative Sekundenangabe
+    * @return Angabe in Stunden:Minuten:Sekunden
+    */
+   static public String getZeitangabe(final long sekunden) {
+      final long stunden = sekunden / (60 * 60);
+      long rest = sekunden  % (60 * 60);
+      long minuten = rest / 60;
+      rest = rest % 60;
+      return stunden + ":" + minuten + ":" + rest;
+   }
+	
+   /**
+    * <p>Kehre die Reihenfolge der Werte eines Feldes um. Beispiel:</p>
+    *  
+    *  <p> {1, 2, 3, 4, 5} wird zu {5, 4, 3, 2, 1}
+    * 
+    * @param werte Ein Feld aus Werten oder null (keine Aktion).
+    */
+   static public void spiegelung(int [] werte) {
+      if (null != werte) {
+         final int length = werte.length;
+         for (int i = 0; i < length / 2; i++) {
+            final int save = werte[i];
+            werte[i] = werte[length - i - 1];
+            werte[length - i - 1] = save;
+         }
+      }
+   }
+   
+   /**
+    * <p>Prüfe die Gültigkeit einer ISBN Nummer.</p>
+    * 
+    * <p>Eine gegebene ISBN Nummer ist gültig, wenn:</p>
+    * 
+    * <ul>
+    *   <li>Sie aus 10 Ziffern besteht und ansonsten nur "-" Zeichen enthält</li>
+    *   
+    *   <li><p>Das Produkt 1 * d_1 + 2 * d_2 + ... + 10 * d_10 ein Vielfaches von 11 ist, wobei {d_10 d_9 ...,d_1} die Ziffern von rechts nach links darstellen</p>
+    *   <p>Beispiel: Die ISBN Nummer 0-201-31452-5 ist gültig:</p>
+    *   <p>Produkt von rechts nach links 1*5 + 2*2 + 3*5 + 4*4 + 5*1 + 6*3 + 7*1 + 8*0 + 9*2 + 10*0 = 88, also ein Vielfaches von 11.</p>
+    *   
+    *   <p>18-433-6928-3 ist hingegen ungültig. Ebenso 2234-223-12, da nur 9 Ziffern vorhanden sind.</p>
+    *   
+    *   </li>
+    * </ul>
+    * 
+    * @param isbn
+    * @return true or false
+    * 
+    * <p style="color: red;font-weight: bold;">Tip: Beachten Sie {@link Character#getNumericValue(char)} und {@link String#toCharArray()}.</p>
+    * 
+    */
+   static public boolean istGueltig(final String isbn) {
+      int ziffernAnzahl = 0;
+      int produktsumme = 0;
+      for (final char c: new StringBuffer(isbn).reverse().toString().toCharArray()) {
+         if (Character.isDigit(c)) {
+            ziffernAnzahl++;
+            produktsumme += ziffernAnzahl * Character.getNumericValue(c);
+         } else if (c != '-') {
+            return false; //
+         }
+      }
+      if (10 == ziffernAnzahl && 0 == produktsumme % 11) {
+         return true;
+      } else {
+         return false;
+      }
+   }
+}
\ No newline at end of file
diff --git a/Klausuren/Sd1/2016summer/Solution/src/main/java/de/hdm_stuttgart/sw1/klausur/angebot/DummyZinsen.java b/Klausuren/Sd1/2016summer/Solution/src/main/java/de/hdm_stuttgart/sw1/klausur/angebot/DummyZinsen.java
new file mode 100644
index 000000000..673bb0e1b
--- /dev/null
+++ b/Klausuren/Sd1/2016summer/Solution/src/main/java/de/hdm_stuttgart/sw1/klausur/angebot/DummyZinsen.java
@@ -0,0 +1,21 @@
+package de.hdm_stuttgart.sw1.klausur.angebot;
+
+/**
+ * Demo zur Verwendung der Klasse {@link Konto}. Beachten Sie bitte die
+ * zugehörigen Junit Tests.
+ *
+ */
+public class DummyZinsen {
+
+	public static void main(String[] args) {
+		
+		final Konto konto = new Konto(100, 1.0, 10); // Start mit 100€, Guthabenzins 1%, Sollzins 10%
+		
+      konto.neuesJahr(100); // Verzinsung des bisherigen Betrags und Aufstockung um 100€ 
+      konto.neuesJahr(200, 2.0, 8); // Verzinsung des bisherigen Betrags, Aufstockung um 200€, Änderung der Zinssätze für das Folgejahr. 
+      konto.neuesJahr(-500);// Verzinsung des bisherigen Betrags, Abbuchung von 500€ 
+		
+		System.out.println(konto.getJournal());// Ausgabe des Journals
+	}
+
+}
diff --git a/Klausuren/Sd1/2016summer/Solution/src/main/java/de/hdm_stuttgart/sw1/klausur/angebot/Konto.java b/Klausuren/Sd1/2016summer/Solution/src/main/java/de/hdm_stuttgart/sw1/klausur/angebot/Konto.java
new file mode 100644
index 000000000..7608b3928
--- /dev/null
+++ b/Klausuren/Sd1/2016summer/Solution/src/main/java/de/hdm_stuttgart/sw1/klausur/angebot/Konto.java
@@ -0,0 +1,124 @@
+package de.hdm_stuttgart.sw1.klausur.angebot;
+
+/**
+ * <p>Verzinsung von Guthaben oder Schulden. Es gelten folgende Regeln:</p>
+ * 
+ * <p>Einmal pro Jahr kann über eine der beiden Methoden  {@link #neuesJahr(double, double, double)} oder {@link #neuesJahr(double)}
+ *   gemäß Vorzeichen des Betrags eingezahlt oder abgehoben werden.</p>
+ *   
+ * <p>Gleichzeitig können zu diesem Zeitpunkt die Zinssätze für Guthaben und Schulden (Soll) für das Folgejahr angepasst werden.</p>
+ * 
+ */
+public class Konto {
+   
+   int jahr = 0;
+
+   private double kontostand = 0,
+         guthabenZins, sollZins;
+   
+   final StringBuffer journal = new StringBuffer();
+   
+   private void verzinsung() {
+      if (0 < kontostand) {
+         kontostand *= (1 + guthabenZins / 100);
+      } else {
+         kontostand *= (1 + sollZins / 100);
+      }
+      jahr++;
+   }
+   
+   private void journalEintrag() {
+      journal.append("Jahr " + jahr + ", Kontostand=" + Math.round(kontostand));
+      if (0 <= kontostand) {
+         journal.append(", verzinsung=" + guthabenZins);
+      } else {
+         journal.append(", verzinsung=-" + sollZins);
+      }
+      journal.append("%\n");
+   }
+   
+   /**
+    * Erstelle neues Konto.
+    * 
+    * @param kontostand Initialer Kontostand.
+    * @param guthabenZins Initialer Guthabenzins.
+    * @param sollZins Initialer Schuldzins.  
+    */
+   public Konto(double kontostand, double guthabenZins, double sollZins) {
+      this.kontostand = kontostand;
+      this.guthabenZins = guthabenZins;
+      this.sollZins = sollZins;
+      journalEintrag();
+   }
+   
+   /**
+    * Diese oder alternativ die Methode {@link #neuesJahr(double)} wir einmal jährlich 
+    * 
+    * <ul>
+    *   <li>Durchführung der Verzinsung für das zurückliegende Jahr zu aktuellen Guthaben- bzw. Schuldzinsen.</li>
+    *   <li>Einzahlung für das jeweils nächste Jahr</li>
+    *   <li>Anpassung von Guthaben- und Schuldzins für das kommende Verzinsungsjahr.</li>
+    * </ul>
+    * ,  und .
+    * 
+    * @param betrag Je nach Vorzeichen neu hinzugefügter oder abgebuchter Betrag. 
+    * @param guthabenZins Der für das jeweils kommende Jahr geltende prozentuale Guthabenzins für nichtnegative Kontostände. 
+    * @param schuldZins Der für das jeweils kommende Jahr geltende prozentuale Guthabenzins für negative Kontostände.
+    * 
+    * <p style="color: red;font-weight: bold;">Tip: Im Hinblick auf das Journal in {@link #getJournal()} können Sie alle
+    * benötigten Informationen in einer {@link StringBuffer} Instanzvariablen sammeln. Sinngemäß gilt dies auch für den jeweils
+    * aktuellen Kontostand.</p>
+    */
+   public void neuesJahr(double betrag, double guthabenZins, double sollZins) {
+      verzinsung();
+      this.guthabenZins= guthabenZins;
+      this.sollZins = sollZins;
+      kontostand += betrag;
+      journalEintrag();
+   }
+
+   /**
+    * Wie {@link #neuesJahr(double, double, double)} allerdings ohne Änderung von Guthaben- und Sollzins für
+    * das kommende Verzinsungsjahr.
+    *  
+    * @param betrag Je nach Vorzeichen neu hinzugefügter oder abgebuchter Betrag. 
+    */
+   public void neuesJahr(double betrag) {
+      verzinsung();
+      kontostand += betrag;
+      journalEintrag();
+   }
+   
+   /**
+    * @return Der aktuelle Kontostand.
+    */
+   public double getKontostand() {
+      return kontostand;
+   }
+   
+   /**
+    * Die Entwicklung der Kontostände kaufmännisch auf ganzzahlige Werte gerundet. Für das Beispiel {@link DummyZinsen#main(String[])} ergibt sich:
+    * 
+    * <pre>Jahr 0, Kontostand=100, verzinsung=1.0%
+    *Jahr 1, Kontostand=201, verzinsung=1.0%
+    *Jahr 2, Kontostand=403, verzinsung=2.0%
+    *Jahr 3, Kontostand=-89, verzinsung=-8.0%</pre>
+    * 
+    * @return Ausdruckbarer Verlauf der Kontoentwicklung
+    * 
+    * <ul>
+    *   <li><p style="color: red;font-weight: bold;">Tip: Im Hinblick auf das Journal in {@link #getJournal()} können Sie alle
+    * benötigten Informationen in einer {@link StringBuffer} Instanzvariablen sammeln. Sinngemäß gilt dies auch für den jeweils
+    * aktuellen Kontostand. Beachten Sie die Methode {@link Math#round(double)}</p></li>
+    * 
+    * <li><p style="color: red;font-weight: bold;">Tip: Ein Hang zum Erbsenzählen erleichtert die Lösung.
+    * Bereits ein falsches Leer- oder fehlendes Newline Zeichen (auch am Ende!)
+    * lässt die zugehörigen Tests scheitern. Beachten Sie allfällige Junit Fehlermeldungen sehr genau.</p></li>
+    * 
+    * </ul>
+    * 
+    */
+   public String getJournal() {
+      return journal.toString();
+   }
+}
\ No newline at end of file
diff --git a/Klausuren/Sd1/2016summer/Solution/src/main/resources/log4j2.xml b/Klausuren/Sd1/2016summer/Solution/src/main/resources/log4j2.xml
new file mode 100644
index 000000000..e4bd6e388
--- /dev/null
+++ b/Klausuren/Sd1/2016summer/Solution/src/main/resources/log4j2.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Configuration>
+    <Appenders>
+        <File name="A1" fileName="A1.log" append="false">
+            <PatternLayout pattern="%t %-5p %c{2} - %m%n"/>
+        </File>
+        <Console name="STDOUT" target="SYSTEM_OUT">
+            <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
+        </Console>
+    </Appenders>
+    <Loggers>
+
+        <!-- You my want to define class or package level per-logger rules -->
+        <Logger name="q.w.App" level="debug">
+            <AppenderRef ref="A1"/>
+        </Logger>
+        <Root level="info">
+            <AppenderRef ref="STDOUT"/>
+        </Root>
+    </Loggers>
+</Configuration>
\ No newline at end of file
diff --git a/Klausuren/Sd1/2016summer/Solution/src/test/java/.gitkeep b/Klausuren/Sd1/2016summer/Solution/src/test/java/.gitkeep
new file mode 100644
index 000000000..e69de29bb
-- 
GitLab