Compare commits

..

6 Commits

Author SHA1 Message Date
d4c77fef1c package-info.java ausgefüllt 2025-07-25 13:16:03 +02:00
22f5d6d57d gui Folder entfernt 2025-07-25 13:00:46 +02:00
ac4f45159d 4.3 f) fertig und Abgabebereit 2025-07-25 12:57:12 +02:00
7054e41f3b DHStudent.java und Person.java debugged
TestKlasse.java fertig bis zu Aufgabe 4.3 c)
2025-07-25 12:03:40 +02:00
9c98b720fe Aufgabe 3 2025-07-25 11:32:24 +02:00
75771c9fdb . 2025-07-25 10:31:42 +02:00
13 changed files with 605 additions and 15 deletions

6
.idea/GitLink.xml generated Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="uk.co.ben_gibson.git.link.SettingsState">
<option name="host" value="e0f86390-1091-4871-8aeb-f534fbc99cf0" />
</component>
</project>

View File

@ -1,15 +0,0 @@
//TIP To <b>Run</b> code, press <shortcut actionId="Run"/> or
// click the <icon src="AllIcons.Actions.Execute"/> icon in the gutter.
public class Main {
public static void main(String[] args) {
//TIP Press <shortcut actionId="ShowIntentionActions"/> with your caret at the highlighted text
// to see how IntelliJ IDEA suggests fixing it.
System.out.printf("Hello and welcome!");
for (int i = 1; i <= 5; i++) {
//TIP Press <shortcut actionId="Debug"/> to start debugging your code. We have set one <icon src="AllIcons.Debugger.Db_set_breakpoint"/> breakpoint
// for you, but you can always add more by pressing <shortcut actionId="ToggleLineBreakpoint"/>.
System.out.println("i = " + i);
}
}
}

2
src/module-info.java Normal file
View File

@ -0,0 +1,2 @@
module tinf24cs1.fix {
}

View File

@ -0,0 +1,63 @@
package personen;
/**
* Die Klasse Angestellter repräsentiert einen Angestellten einer Firma.
* Sie erbt von der abstrakten Klasse Person und implementiert das Interface IMitarbeiter.
*/
public class Angestellter extends Person implements IMitarbeiter {
/**
* Die Personalnummer des Angestellten
*/
private Integer personalNr;
/**
* Konstruktor für einen Angestellten
* @param name Der Name des Angestellten
* @param personalNr Die Personalnummer des Angestellten
*/
public Angestellter(String name, Integer personalNr) {
super(name);
this.personalNr = personalNr;
}
/**
* Überschreibt die ererbte Methode druckeObjekt
*/
@Override
public void druckeObjekt() {
System.out.println("Der Angestellte heisst " + this.name + ", hat die Personalnr. " +
this.personalNr + " und ist einer von " + Person.anzahl);
}
/**
* Implementiert die Methode aus dem Interface IMitarbeiter
*/
@Override
public void arbeitenOhneMurren() {
System.out.println("Ich bin Angestellter " + this.name + " und arbeite ohne Murren und Knurren!");
}
/**
* Gibt die Personalnummer des Angestellten aus
*/
public void druckePersonalNr() {
System.out.println("Personalnr. " + this.personalNr);
}
/**
* Getter-Methode für die Personalnummer
* @return Die Personalnummer des Angestellten
*/
public Integer getPersonalNr() {
return personalNr;
}
/**
* Setter-Methode für die Personalnummer
* @param personalNr Die neue Personalnummer
*/
public void setPersonalNr(Integer personalNr) {
this.personalNr = personalNr;
}
}

112
src/personen/DHStudent.java Normal file
View File

@ -0,0 +1,112 @@
package personen;
import java.util.Comparator;
/**
* DHStudent-Klasse repräsentiert einen DH-Studenten (Dualer Hochschule Student)
* Erbt von Student und implementiert IMitarbeiter
*
* @author Ihr Name
* @version 1.0
*/
public class DHStudent extends Student implements IMitarbeiter {
/**
* Der Kurs des DH-Studenten
*/
private String kurs;
/**
* Konstruktor für DHStudent
*
* @param name Der Name des DH-Studenten
* @param kurs Der Kurs des DH-Studenten
*/
public DHStudent(String name, String kurs) {
super(name);
this.kurs = kurs;
}
/**
* Implementierung der Methode arbeitenOhneMurren aus dem Interface IMitarbeiter
*/
@Override
public void arbeitenOhneMurren() {
System.out.println("Ich bin der DHStudent " + this.name + " und gehe daher immer freudig meine Arbeit an!");
}
/**
* Gibt den Namen des Kurses ohne Zeilenumbruch aus und ruft die ererbte Methode druckeObjekt mit Parameter true auf
*/
public void druckeKurs() {
System.out.print(this.kurs);
this.druckeObjekt(true);
}
/**
* Getter-Methode für den Kurs
*
* @return Der Kurs des DH-Studenten
*/
public String getKurs() {
return kurs;
}
/**
* Setter-Methode für den Kurs
*
* @param kurs Der neue Kurs des DH-Studenten
*/
public void setKurs(String kurs) {
this.kurs = kurs;
}
/**
* Überschreibt die toString-Methode für bessere Ausgabe
*
* @return String-Repräsentation mit Kurs, Name und Semester
*/
@Override
public String toString() {
return this.kurs + " " + this.name + " " + this.semester + ".Sem.";
}
/**
* Innere Klasse für Sortierung nach Kurs und Name
*/
public class ComparatorKursName implements Comparator<DHStudent> {
@Override
public int compare(DHStudent dhs1, DHStudent dhs2) {
int kursVergleich = dhs1.kurs.compareTo(dhs2.kurs);
if (kursVergleich != 0) {
return kursVergleich;
}
return dhs1.name.compareTo(dhs2.name);
}
}
/**
* Innere Klasse für Sortierung nach Semester, Name und Kurs
*/
public class ComparatorSemesterNameKurs implements Comparator<DHStudent> {
@Override
public int compare(DHStudent dhs1, DHStudent dhs2) {
int semesterVergleich = Integer.compare(dhs1.semester, dhs2.semester);
if (semesterVergleich != 0) {
return semesterVergleich;
}
int nameVergleich = dhs1.name.compareTo(dhs2.name);
if (nameVergleich != 0) {
return nameVergleich;
}
return dhs1.kurs.compareTo(dhs2.kurs);
}
}
/**
* Statische Methode druckeAnzahl (für spätere Aufgabenteile)
*/
public static void druckeAnzahl() {
System.out.println("DHStudent.anzahl = " + Person.anzahl);
}
}

32
src/personen/Firma.java Normal file
View File

@ -0,0 +1,32 @@
package personen;
/**
* Die Klasse Firma repräsentiert eine Firma mit einem Namen.
* Sie stellt Methoden zur Ausgabe des Firmennamens zur Verfügung.
*
* @author [Ihr Name]
* @version 1.0
*/
public class Firma {
/**
* Der Name der Firma
*/
private String name;
/**
* Konstruktor zur Erstellung einer neuen Firma
*
* @param name Der Name der Firma
*/
public Firma(String name) {
this.name = name;
}
/**
* Gibt den Text "Der Firmenname lautet" sowie den Firmennamen aus
*/
public void druckeName() {
System.out.println("Der Firmenname lautet " + this.name);
}
}

View File

@ -0,0 +1,13 @@
package personen;
/**
* Interface für Klausurschreiber
* Definiert die Fähigkeit, eine Klausur zu schreiben
*/
public interface IKlausurSchreiber {
/**
* Methode zum Schreiben einer Klausur
*/
void klausurSchreiben();
}

View File

@ -0,0 +1,13 @@
package personen;
/**
* Interface für die Mitarbeiter
* Definiert die Fähigkeit, ohne Murren zu arbeiten
*/
public interface IMitarbeiter {
/**
* Methode für die Arbeit ohne Murren
*/
void arbeitenOhneMurren();
}

View File

@ -0,0 +1,68 @@
package personen;
/**
* Klasse für Lehrbeauftragte, die Klausuren durchführen können
*/
public class Lehrbeauftragter {
/**
* Name des Lehrbeauftragten
*/
private String name;
/**
* Array der Prüflinge für die nächste Klausur
*/
private IKlausurSchreiber[] prueflinge;
/**
* Konstruktor für Lehrbeauftragter
* @param name Name des Lehrbeauftragten
*/
public Lehrbeauftragter(String name) {
this.name = name;
}
/**
* Gibt den Namen des Lehrbeauftragten zurück
* @return Name des Lehrbeauftragten
*/
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public IKlausurSchreiber[] getPrueflinge() {
return prueflinge;
}
/**
* Setzt das Array der Prüflinge für die nächste Klausur
* @param prueflinge Array mit den zu prüfenden Studenten
*/
public void setPrueflinge(IKlausurSchreiber[] prueflinge) {
this.prueflinge = prueflinge;
}
/**
* Lässt alle im Array prueflinge aufgeführten Studenten eine Klausur schreiben
*/
public void lasseKlausurSchreiben() {
// Enhanced for-loop (for-each) ab Java 5
for (IKlausurSchreiber pruefling : prueflinge) {
pruefling.klausurSchreiben();
}
}
/**
* Überschreibt die toString-Methode der Klasse Object
* @return Der Name des Lehrbeauftragten
*/
@Override
public String toString() {
return this.name;
}
}

47
src/personen/Person.java Normal file
View File

@ -0,0 +1,47 @@
package personen;
/**
* Abstrakte Klasse Person als Basisklasse für verschiedene Personentypen.
* Verwaltet eine Klassenvariable zur Zählung aller erstellten Personen.
*/
public abstract class Person {
/**
* Klassenvariable zur Zählung aller erstellten Personen
*/
protected static int anzahl = 0;
/**
* Name der Person
*/
protected String name;
/**
* Konstruktor der abstrakten Klasse Person
* @param name Der Name der Person
*/
public Person(String name) {
this.name = name;
Person.anzahl++;
}
/**
* Abstrakte Methode druckeObjekt - muss in abgeleiteten Klassen implementiert werden
*/
public abstract void druckeObjekt();
/**
* Klassenmethode zur Ausgabe der aktuellen Personenanzahl
*/
public static void druckeAnzahl() {
System.out.println("Person.anzahl: " + Person.anzahl);
}
/**
* Getter-Methode für den Namen
* @return Der Name der Person
*/
public String getName() {
return this.name;
}
}

129
src/personen/Student.java Normal file
View File

@ -0,0 +1,129 @@
package personen;
import java.util.Random;
/**
* Die Student-Klasse erbt von Person und implementiert IKlausurSchreiber.
* Studenten haben eine zufällige Semesterzahl und BAfG-Schulden.
*/
public class Student extends Person implements IKlausurSchreiber, Cloneable {
/** Die Semesterzahl des Studenten */
protected int semester;
/** Die BAfG-Schulden des Studenten */
protected double bafoegSchulden;
/**
* Konstruktor für Student
* @param name Der Name des Studenten
*/
public Student(String name) {
super(name);
// Zufallsgenerator mit verzögertem Startwert
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// Exception wird abgefangen
}
Random random = new Random(System.currentTimeMillis());
// Semesterzahl zuweisen: normale Studenten 1-12, DH-Studenten 1-6
if (this instanceof DHStudent) {
this.semester = random.nextInt(6) + 1;
this.bafoegSchulden = 0.00;
} else {
this.semester = random.nextInt(12) + 1;
this.bafoegSchulden = this.semester * 3000.00;
}
}
/**
* Überschreibt die abstrakte Methode aus Person
*/
@Override
public void druckeObjekt() {
System.out.println("Der Student heisst " + this.name + ", ist im " +
this.semester + ". Sem. und hat " + this.bafoegSchulden +
" EUR Schulden wegen Bafoeg.");
}
/**
* Überladene Version von druckeObjekt
* @param kurz Bei true wird nur Name und Semester ausgegeben
*/
public void druckeObjekt(boolean kurz) {
if (kurz) {
System.out.println("Der Student heisst " + this.name + " " +
this.semester + ". Sem.");
} else {
druckeObjekt();
}
}
/**
* Implementierung der Methode aus IKlausurSchreiber
*/
@Override
public void klausurSchreiben() {
String dh = (this instanceof DHStudent) ? "DH-" : "";
System.out.println("Ich bin ein " + dh + "Student namens " + this.name +
" und schreibe meine Klausuren perfekt!");
}
/**
* Getter-Methode für das Semester
* @return Die Semesterzahl
*/
public int getSemester() {
return this.semester;
}
/**
* Gibt die Semesterzahl aus
*/
public void druckeSemester() {
System.out.println("Semesterzahl: " + this.semester);
}
/**
* Clone-Methode für das Klonen von Studenten
* @return Ein geklonter Student
*/
@Override
public Object clone() {
try {
Student geklonterStudent = (Student) super.clone();
Person.anzahl++; // Nur bei erfolgreichem Klonen erhöhen
return geklonterStudent;
} catch (CloneNotSupportedException e) {
return null;
}
}
/**
* Getter für BAfG-Schulden (wird später für GUI benötigt)
* @return Die BAfG-Schulden
*/
public double getBafoegSchulden() {
return this.bafoegSchulden;
}
/**
* Setter für BAfG-Schulden (wird später für GUI benötigt)
* @param bafoegSchulden Die neuen BAfG-Schulden
*/
public void setBafoegSchulden(double bafoegSchulden) {
this.bafoegSchulden = bafoegSchulden;
}
/**
* Setter für Semester (wird später für GUI benötigt)
* @param semester Das neue Semester
*/
public void setSemester(int semester) {
this.semester = semester;
}
}

View File

@ -0,0 +1,13 @@
/**
* Dieses Paket enthält alle Klassen und Schnittstellen für das
* objektorientierte Java-Projekt zum Thema Personen.
*
* Das Paket umfasst:
* - Abstrakte Basisklasse Person
* - Konkrete Klassen: Student, DHStudent, Angestellter, Lehrbeauftragter, Firma
* - Schnittstellen: IKlausurSchreiber, IMitarbeiter
*
* @author Marcel Fix
* @version 1.0
*/
package personen;

107
src/test/TestKlasse.java Normal file
View File

@ -0,0 +1,107 @@
package test;
import personen.*;
import java.util.Arrays;
/**
* TestKlasse für die Programmieraufgabe TINF24CS1
* Diese Klasse testet alle erstellten Klassen und Schnittstellen
*/
public class TestKlasse {
// Testdaten fuer Studenten
static Student[] studentenFeld = {
new Student("Emil"),
new Student("Emil"),
new Student("Armin"),
new Student("Fritz"),
new Student("Ernst"),
new Student("Erna")
};
// Testdaten fuer DH-Studenten
static DHStudent[] dhStudentenFeld = {
new DHStudent("Anton", "TINF23CS1"),
new DHStudent("Michael", "TINF23CS1"),
new DHStudent("Uwe", "TINF23CS1"),
new DHStudent("Christian", "TINF23CS1"),
new DHStudent("Christian", "TINF24CS1"),
new DHStudent("Christiane", "TINF24CS1"),
new DHStudent("Uwe", "TINF24CS1"),
new DHStudent("Michaela", "TINF24CS1")
};
// Testdaten fuer Angestellte
static Angestellter[] angestelltenFeld = {
new Angestellter("Meier", 101000),
new Angestellter("Schulze", 101351),
new Angestellter("Hartmann", 102605),
new Angestellter("Grosskopf", 103731),
new Angestellter("Haudegen", 104566)
};
// Testdaten fuer Lehrbeauftragter
static Lehrbeauftragter[] lehrbeauftragtenFeld = {
new Lehrbeauftragter("Dr. Schlau"),
new Lehrbeauftragter("Prof. Einfallsreich"),
new Lehrbeauftragter("Dipl.-Ing. Pfiffikus"),
new Lehrbeauftragter("OStR Lehrreich")
};
/**
* Konstruktor der TestKlasse
* Hier wird der gesamte Testcode ausgeführt
*/
public TestKlasse() {
// 4.3a
System.out.println("=== 4.3a ===");
Person.druckeAnzahl();
System.out.println("Erklärung: Es sind 19 Personen, weil alle statischen Felder bereits beim Laden der Klasse initialisiert werden.");
System.out.println("Das passiert vor der Ausführung der main-Methode.");
System.out.println();
// 4.3b - HIER EINFÜGEN:
System.out.println("=== 4.3b ===");
Firma firma = new Firma("DH-Partnerfirma GmbH");
firma.druckeName();
System.out.println();
// 4.3c)
System.out.println("=== 4.3c ===");
int mitarbeiterZahl = angestelltenFeld.length + dhStudentenFeld.length;
System.out.println("Mitarbeiterzahl: " + mitarbeiterZahl);
System.out.println();
// 4.3d)
IMitarbeiter[] mitarbeiterFeld = new IMitarbeiter[angestelltenFeld.length + dhStudentenFeld.length];
// Alle Angestellten in das Mitarbeiterfeld kopieren
for (int i = 0; i < angestelltenFeld.length; i++) {
mitarbeiterFeld[i] = angestelltenFeld[i];
}
// Alle DH-Studenten in das Mitarbeiterfeld kopieren
for (int i = 0; i < dhStudentenFeld.length; i++) {
mitarbeiterFeld[angestelltenFeld.length + i] = dhStudentenFeld[i];
}
//4.3e
System.out.println("=== 4.3e ===");
System.out.println("Alle Mitarbeiter arbeiten:");
for (IMitarbeiter mitarbeiter : mitarbeiterFeld) {
mitarbeiter.arbeitenOhneMurren();
}
System.out.println();
// 4.3f
System.out.println("=== 4.3f ===");
System.out.println(Arrays.asList(lehrbeauftragtenFeld));
}
/**
* main-Methode
* Erstellt eine Instanz der TestKlasse
*/
public static void main(String[] args) {
new TestKlasse();
}
}