Add Assignmen 01 and Assignment 02

main
Jessica Steinberger 2025-03-18 22:49:20 +01:00
parent 75df6698fa
commit fb0ea1a7de
13 changed files with 343 additions and 1 deletions

View File

@ -44,7 +44,7 @@ Die folgende Tabelle zeigt Ihnen die Themen der Woche und welche Kapitel Sie bis
## Freiwillige Übungen
Die freiwilligen Übungen zur Vertiefung der Vorlesungsinhalte finden Sie in einem getrennten Repository: [Freiwillige Übungen](pr2-lecture-STG/uebungen/src/branch/main/readme.md)
Die freiwilligen Übungen zur Vertiefung der Vorlesungsinhalte finden Sie in einem getrennten Repository: [Freiwillige Übungen](https://gitty.informatik.hs-mannheim.de/pr2-lecture-STG/uebungen)
## Assignments

66
bin/submit.sh 100755
View File

@ -0,0 +1,66 @@
#!/usr/bin/bash
# Fail on first error
set -e
# check how we have been called
if [ ! "$0" == "bin/submit.sh" ]; then
echo -e "\e[31m"
echo "💣 Das Skript muss aus dem Hauptverzeichnis des Projektes"
echo "💣 mit bin/submit.sh aufgerufen werden."
echo -e "\e[0m"
exit 1
fi
echo "***************************************************************"
echo "Abgabe einreichen"
echo "***************************************************************"
echo ""
cd sources
# Test, if project builds
echo "------------------------------------------------------------------"
echo "Build..."
echo ""
if ! mvn; then
echo -e "\e[31m"
echo "💣 Projekt baut nicht und kann deswegen nicht abgegeben werden."
echo "💣 Bitte beheben Sie alle gemeldeten Fehler und versuchen Sie "
echo "💣 es dann erneut "
echo -e "\e[0m"
exit 1
else
echo -e "\e[32m"
echo "✅ Projekt gebaut "
echo -e "\e[0m"
fi
# Test, if all changes are committed
echo "------------------------------------------------------------------"
echo "Teste git-Staus..."
if ! git status | grep -q "nothing to commit" && ! git status | grep -q "nichts zu committen" ; then
echo -e "\e[31m"
echo "💣 Bitte checken Sie alle Änderungen per git ein. "
echo -e "\e[0m"
exit 1
else
echo -e "\e[32m"
echo "✅ Alle Dateien eingecheckt "
echo -e "\e[0m"
fi
# Submit
echo "------------------------------------------------------------------"
echo "Sende Lösung..."
if ! git push origin main; then
echo -e "\e[31m"
echo "💣 Push nicht erfolgreich. Bitte beheben Sie den Fehler und "
echo "💣 starten Sie das Skript erneut. "
echo -e "\e[0m"
exit 1
else
echo -e "\e[32m"
echo "✅ Aktuelle Lösungen eingereicht "
echo -e "\e[0m"
fi

66
bin/update.sh 100755
View File

@ -0,0 +1,66 @@
#!/usr/bin/bash
# Fail on first error
set -e
# check how we have been called
if [ ! "$0" == "bin/update.sh" ]; then
echo -e "\e[31m"
echo "💣 Das Skript muss aus dem Hauptverzeichnis des Projektes"
echo "💣 mit bin/update.sh oder bash bin/update.sh aufgerufen werden."
echo -e "\e[0m"
exit 1
fi
# Check the integrity of the .assignments directory
if [ -d ".assignments" ] && [ ! -d ".assignments/.git" ]; then
echo -e "\e[31m"
echo "Nicht korrektes .assignments-Verzeichnis. Wird gelöscht."
echo "Bitte achten Sie darauf, das .assignments-Verzeichnis nicht"
echo "einzuchecken."
echo -ne "\e[0m"
rm -rf ".assignments"
fi
# Clone repo if not already present
if [ ! -d ".assignments" ]; then
echo -e "\e[32m"
echo "Clone Repository mit den Aufgaben"
echo -ne "\e[0m"
git clone gitea@gitty.informatik.hs-mannheim.de:pr2-lecture-STG/assignments.git .assignments
mkdir -p sources/src/main/java
fi
# Sync exercises with local directory
echo -e "\e[32m"
echo "---------------------------------------------------------------"
echo "Hole neue Aufgaben und Quelltexte "
echo "---------------------------------------------------------------"
echo -ne "\e[0m"
(cd .assignments && git pull origin main)
rsync --ignore-existing -raz .assignments/sources/ sources/
for dir in .assignments/Assignment_*; do
rsync --ignore-existing -raz "$dir" ./
done
# Assignment files
rsync --ignore-existing -raz --include='Assignment_*' --exclude='*' .assignments/* ./
# Libraries
rsync -raz .assignments/sources/lib/ ./sources/lib
# Main readme
cp .assignments/readme.md README.md
# Update scripts
cp .assignments/bin/submit.sh bin/submit.sh
if [ -f .assignments/bin/update.sh ]; then
# Remove myself
rm bin/update.sh
# Copy the new version at the old location
cp .assignments/bin/update.sh bin/update.sh
fi

31
help/eclipse.md 100644
View File

@ -0,0 +1,31 @@
## Tabs in Eclipse
Eclipse verwendet standardmäßig Tabulatoren für die Einrückung von Quelltexten. Da dies aber dem Coding-Standard widerspricht und auch von den Check-Tools bemängelt wird, sollten Sie Eclipse entsprechend konfigurieren.
Öffnen Sie die Properties für das aktuelle Projekt über `File` -> `Properties`.
<img style="width: 30em;" src="img/tab_1.png">
Wählen Sie im Dialog die Option `Java Code Style` und dann `Formater`. Setzen Sie das Häkchen bei `Enable project specific settings` und klicken Sie auf `New`.
<img style="width: 15em;" src="img/tab_2.png">
Geben Sie dem Profil einen Namen, z.B. `PR2`.
<img style="width: 40em;" src="img/tab_3.png">
Wählen Sie unter dem Punkt `Indentation` als `Tab policy` den Eintrag `Spaces only` uns setzen Sie die Breiten auf jeweils `4`.
Schließen Sie den Dialog mit `OK` und das Properties-Fenster mit `Apply and Close`.
## Encoding und Zeilenende
Eclipse verwendet teilweise ein anderes Encoding als UTF-8 und benutzt Windows-Zeilenenden. Um dies zu verhindern nehmen Sie bitte folgende Einstellung vor:
Öffnen Sie die Properties für das aktuelle Projekt über `File` -> `Properties`.
Wählen Sie im Dialog die Option `Resources`.
<img style="width: 30em;" src="img/crlf.png">
Setzen Sie die Option `Text file encoding` auf `UTF-8` und `New text file line delimiter` auf `Unix`.

BIN
help/img/crlf.png 100644

Binary file not shown.

After

Width:  |  Height:  |  Size: 183 KiB

BIN
help/img/tab_1.png 100644

Binary file not shown.

After

Width:  |  Height:  |  Size: 223 KiB

BIN
help/img/tab_2.png 100644

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

BIN
help/img/tab_3.png 100644

Binary file not shown.

After

Width:  |  Height:  |  Size: 204 KiB

View File

@ -0,0 +1,9 @@
## Softwareausstattung
* **Ubuntu Linux** als Installation oder VM
* **Java JDK 21**<br>`sudo apt install openjdk-21-jdk openjdk-21-source openjdk-21-doc`
* **Git** und Git-Frontends<br>`sudo apt install git meld git-cola`
* **Maven 3.6 oder neuer**<br>`sudo apt install maven`
* **Eclipse**<br>Von der [Webseite](https://www.eclipse.org/downloads/) herunterladen und installieren. Bitte verwenden Sie die Version **Eclipse IDE for Java Developers**
Eine Anleitung zur Installation von Ubuntu Linux finden Sie [hier](https://github.com/informatik-mannheim/linux-hsma/blob/master/doc/readme.md). Diese Anleitung bezieht sich auf Ubuntu 21.04, funktioniert so aber auch mit einer neueren Version.

132
sources/pom.xml 100644
View File

@ -0,0 +1,132 @@
<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.hs_mannheim.pr2</groupId>
<artifactId>solutions</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>PR2 Excercises</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<junit.jupiter.version>5.9.1</junit.jupiter.version>
<junit.platform.version>1.9.1</junit.platform.version>
</properties>
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
<build>
<defaultGoal>install</defaultGoal>
<directory>${basedir}/target</directory>
<finalName>${project.artifactId}-${project.version}</finalName>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.10.1</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M7</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>3.2.0</version>
<dependencies>
<dependency>
<groupId>com.puppycrawl.tools</groupId>
<artifactId>checkstyle</artifactId>
<version>10.4</version>
</dependency>
</dependencies>
<configuration>
<configLocation>checkstyle.xml</configLocation>
<consoleOutput>true</consoleOutput>
<failsOnError>true</failsOnError>
<linkXRef>false</linkXRef>
</configuration>
<executions>
<execution>
<id>validate</id>
<phase>validate</phase>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<version>3.19.0</version>
<configuration>
<rulesets>
<ruleset>./pmd.xml</ruleset>
</rulesets>
<failOnViolation>true</failOnViolation>
<printFailingErrors>true</printFailingErrors>
</configuration>
<executions>
<execution>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<!--
<dependency>
<groupId>de.smits_net.games</groupId>
<artifactId>game-framework</artifactId>
<version>1.0</version>
<scope>compile</scope>
</dependency>
-->
<dependency>
<groupId>com.github.thomsmits</groupId>
<artifactId> game-framework</artifactId>
<version>v1.0</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>${junit.jupiter.version}</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>${junit.jupiter.version}</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>${junit.jupiter.version}</version>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-suite</artifactId>
<version>${junit.platform.version}</version>
</dependency>
<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
<version>${junit.jupiter.version}</version>
</dependency>
<dependency>
<groupId>org.jfree</groupId>
<artifactId>jfreechart</artifactId>
<version>1.5.3</version>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,16 @@
package pr2.bootstrap.hello;
/**
* Eine freundliche Klasse, die gerne Menschen begrüßt.
*/
public class Greeter {
/**
* Begrüßt die Person.
*
* @param name Name der Person, die begrüßt wird.
*/
public void greet(String name) {
System.out.printf("Hallo %s\n", name);
}
}

View File

@ -0,0 +1,22 @@
package pr2.bootstrap.hello;
/**
* Hello World Programm.
*/
public class HelloWorld {
/**
* Einstieg ins Programm. Der Name wird aus dem ersten
* Kommandozeilenargument genommen.
*
* @param args Argumente.
*/
public static void main(String[] args) {
Greeter g = new Greeter();
// TODO: Wenn kein Argument auf der Kommandozeile gegeben wurde,
// TODO: nehmen Sie als Namen "<Unbekannter>", andernfalls den
// TODO: Namen aus dem ersten Argument.
// TODO: greet Methode auf g rufen
}
}