Compare commits

...

No commits in common. "main" and "JavaFX" have entirely different histories.
main ... JavaFX

16 changed files with 1311 additions and 1086 deletions

View File

@ -1,20 +0,0 @@
# Personalbuero
This project allows to manage a Personalbuero. Made purely for school purposes.
## Badges
![GitHub code size in bytes](https://img.shields.io/github/languages/code-size/FUH22860/Personalbuero)
![Lines of code](https://img.shields.io/tokei/lines/github/FUH22860/Personalbuero)
## Features
- Mitarbeiter aufnehmen
- Mitarbeiter kündigen
- Gehalt/Alter/Dienstalter/Prämien berechnen
- Export/Import
- Cross platform
## Authors
- [@FUH22860](https://github.com/FUH22860)
## Acknowledgements
- [Github readme generator](https://nxt-readme.vercel.app/)

33
src/application/Main.java Normal file
View File

@ -0,0 +1,33 @@
package application;
import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.ButtonType;
public class Main extends Application {
public void start(Stage primaryStage) {
try {
RootBorderPane root = new RootBorderPane();
Scene scene = new Scene(root, 1000, 250);
primaryStage.setTitle("Mitarbeiter-Verwaltung");
primaryStage.setScene(scene);
primaryStage.show();
} catch (Exception e) {
showAlert(AlertType.ERROR, e.getMessage());
}
}
public static void showAlert(AlertType alertType, String message) {
Alert alert = new Alert(alertType, message, ButtonType.OK);
alert.setTitle("Hinweis");
alert.setHeaderText(null); // nice to have
alert.showAndWait(); // ...andWait ... modality
}
public static void main(String[] args) {
launch(args);
}
}

View File

@ -0,0 +1,86 @@
package application;
import javafx.application.Platform;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.Button;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
import javafx.scene.control.MenuItem;
import javafx.scene.control.RadioButton;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import model.Personalbuero;
public class RootBorderPane extends BorderPane {
private MenuItem miLaden, miSpeichern, miExportieren, miBeenden, miLoeschen, miSortAlter, miSortName, miSortGehalt,
miUeber;
private Menu mDatei, mMitarbeiter, mSortierenNach, mHilfe;
private MenuBar menuBar;
private Personalbuero personalbuero;
private VBox buttonBoxRechts;
private HBox buttonBoxUnten;
private RadioButton rbAlter, rbGehalt, rbNamen;
private Button btSortieren, btExportieren;
public RootBorderPane() {
initComponents();
addComponents();
addHandlers();
}
private void initComponents() {
miLaden = new MenuItem("Laden");
miSpeichern = new MenuItem("Speichern");
// miSpeichern.setDisable(true);
miExportieren = new MenuItem("Exportieren");
miBeenden = new MenuItem("Beenden");
miSortAlter = new MenuItem("Alter");
miSortName = new MenuItem("Namen");
miSortGehalt = new MenuItem("Gehalt");
miLoeschen = new MenuItem("L\u00f6schen");
miUeber = new MenuItem("\u00dcber");
mDatei = new Menu("Datei");
mMitarbeiter = new Menu("Mitarbeiter");
mSortierenNach = new Menu("Sortieren nach");
mHilfe = new Menu("Hilfe");
menuBar = new MenuBar();
personalbuero = new Personalbuero();
rbAlter = new RadioButton("nach Alter");
// rbAlter.setSelected(true);
rbNamen = new RadioButton("nach Namen");
rbGehalt = new RadioButton("nach Gehalt");
btSortieren = new Button("Sortieren");
btExportieren = new Button("Alle Mitarbeiter-Informationen exportieren...");
// TODO Container-Klassen zum Sortieren (rechts) und fuer die Buttons (unten)
}
private void addComponents() {
// TODO
}
private void addHandlers() {
// TODO
}
// -------------------------------------
// Handler-Methoden-------------------------
private void ueber() {
Main.showAlert(AlertType.INFORMATION, "Applikation Personalb\u00fcro");
}
private void beenden() {
// System.exit(0); never ever!!!!!
Platform.exit();
}
}

View File

@ -5,13 +5,14 @@ import java.time.Year;
* Klasse Arzt
*
* @author (WES)
* @version (2022-04-05)
* @version (2022-04-07)
*
* umgestellt auf Exception-Handling
* mit freiwilliger Uebung toStringCsv()
* mit freiwilliger Uebung public Arzt (String[] zeilenTeile)
* mit public Arzt(String[] zeilenTeile)
* mit setAllFields(String[] zeilenTeile)
* mit equals() und hashCode()
*/
public class Arzt extends Mitarbeiter implements GehaltBerechenbar
@ -90,6 +91,33 @@ public class Arzt extends Mitarbeiter implements GehaltBerechenbar
{
return fixum;
}
// ------------------------- equals / hashCode ---------------
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (!super.equals(obj))
return false;
if (getClass() != obj.getClass())
return false;
Arzt other = (Arzt) obj;
if (Float.floatToIntBits(fixum) != Float.floatToIntBits(other.fixum))
return false;
if (wochenStunden != other.wochenStunden)
return false;
return true;
}
@Override
public int hashCode() {
final int prime = 31;
int result = super.hashCode();
result = prime * result + Float.floatToIntBits(fixum);
result = prime * result + wochenStunden;
return result;
}
// -------------------------- print / toString / toStringCsv ------------

View File

@ -2,26 +2,29 @@ package model;
import java.time.Year;
// 2022-04-05 4BAIF
// 2022-04-07 4BAIF
// umgestellt auf Exception-Handling
// mit serialVersionUID fuer Serialisierung
// mit toStringCsv()
// mit Freelancer (String[] zeilenTeile)
// mit equals() und hashCode()
public class Freelancer extends Mitarbeiter implements PraemieBerechenbar, GehaltBerechenbar {
public class Freelancer extends Mitarbeiter implements PraemieBerechenbar, GehaltBerechenbar
{
private static final long serialVersionUID = 2022_03_22__13_15L;
private int stunden;
private float stundenSatz;
// private Year eintrJahr; // SO NICHT!!!
//private Year eintrJahr; // SO NICHT!!!
public Freelancer(float stundenSatz, int stunden) throws PersonalException {
public Freelancer(float stundenSatz, int stunden) throws PersonalException
{
super(); // ruft den parameterlosen/Default-Konstruktor der Superklasse Mitarbeiter auf
setStundenSatz(stundenSatz);
setStunden(stunden);
}
public Freelancer(String name, char gesch, Year gebJahr, Year eintrJahr, float stundenSatz, int stunden)
throws PersonalException {
public Freelancer(String name, char gesch, Year gebJahr, Year eintrJahr, float stundenSatz, int stunden) throws PersonalException
{
// setName(name); // so nicht!
// setGesch(gesch); // so nicht!
// ....
@ -30,44 +33,54 @@ public class Freelancer extends Mitarbeiter implements PraemieBerechenbar, Gehal
setStunden(stunden);
}
public Freelancer(String[] zeilenTeile) throws PersonalException {
public Freelancer (String[] zeilenTeile) throws PersonalException
{
super(zeilenTeile);
// Freelancer;Anna;w;1976;2002;"10";"100.0"
// [5] [6] im String-Array zeilenTeile
// Achtung: ArrayIndexOutOfBoundsException
// beim Parsen: NumberFormatException
try {
setStunden(Integer.parseInt(zeilenTeile[5].trim())); // int
setStundenSatz(Float.parseFloat(zeilenTeile[6].trim())); // float
} catch (ArrayIndexOutOfBoundsException e) {
throw new PersonalException("Array-Fehler bei Freelancer(zeilenTeile): " + e.getMessage());
} catch (NumberFormatException e) {
throw new PersonalException(
"Zahlenumwandlungs-Fehler (gebJahr oder eintrJahr) bei Freelancer(zeilenTeile): " + e.getMessage());
try
{
setStunden( Integer.parseInt(zeilenTeile[5].trim()) ); // int
setStundenSatz( Float.parseFloat(zeilenTeile[6].trim()) ); // float
}
catch(ArrayIndexOutOfBoundsException e)
{
throw new PersonalException("Array-Fehler bei Freelancer(zeilenTeile): "
+ e.getMessage());
}
catch(NumberFormatException e)
{
throw new PersonalException("Zahlenumwandlungs-Fehler (gebJahr oder eintrJahr) bei Freelancer(zeilenTeile): "
+ e.getMessage());
}
}
public int getStunden() {
public int getStunden()
{
return stunden;
}
public float getStundenSatz() {
public float getStundenSatz()
{
return stundenSatz;
}
public void setStunden(int stunden) throws PersonalException {
public void setStunden(int stunden) throws PersonalException
{
if (stunden > 0)
this.stunden = stunden;
else
throw new PersonalException("Fehler bei setStunden(): stunden sind 0 oder kleiner (" + stunden + ")");
}
public void setStundenSatz(float stundenSatz) throws PersonalException {
public void setStundenSatz(float stundenSatz) throws PersonalException
{
if (stundenSatz > 0f)
this.stundenSatz = stundenSatz;
else
throw new PersonalException(
"Fehler bei setStundenSatz(): stundenSatz ist 0.0 oder kleiner (" + stundenSatz + ")");
throw new PersonalException("Fehler bei setStundenSatz(): stundenSatz ist 0.0 oder kleiner (" + stundenSatz + ")");
}
// so NICHT!!!
@ -81,21 +94,19 @@ public class Freelancer extends Mitarbeiter implements PraemieBerechenbar, Gehal
// if (eintrJahr.getValue() <= aktJahr )
// this.eintrJahr = eintrJahr;
// else
// System.out.println("Falscher Parameterwert fuer setEintrJahr("+eintrJahr+")
// !!!");
// System.out.println("Falscher Parameterwert fuer setEintrJahr("+eintrJahr+") !!!");
// else
// System.out.println("Fehler bei setEintrJahr("+eintrJahr+") -> Person ist zu
// jung ("+berechneAlter()+")!!!");
// System.out.println("Fehler bei setEintrJahr("+eintrJahr+") -> Person ist zu jung ("+berechneAlter()+")!!!");
// }
// else
// System.out.println("null-Referenz bei gebJahr -> eintrJahr kann nicht
// geprueft werden !!!");
// System.out.println("null-Referenz bei gebJahr -> eintrJahr kann nicht geprueft werden !!!");
// else
// System.out.println("null-Referenz fuer setEintrJahr(Year eintrJahr) !!!");
// }
public float berechneGehalt() {
return stundenSatz * stunden;
public float berechneGehalt()
{
return stundenSatz*stunden;
}
public float berechnePraemie() // FUE Refactoring mit Verwendung von switch-case
@ -104,17 +115,18 @@ public class Freelancer extends Mitarbeiter implements PraemieBerechenbar, Gehal
if (berechneDienstalter() == 15)
praemie = berechneGehalt(); // 1x Gehalt als Praemie
else if (berechneDienstalter() == 20)
praemie = berechneGehalt() * 2; // 2x Gehalt als Praemie
else
if (berechneDienstalter() == 20)
praemie = berechneGehalt()*2; // 2x Gehalt als Praemie
return praemie;
}
public String infoBerechnungPraemie() {
public String infoBerechnungPraemie()
{
return "Fuer 15 Jahre Mitarbeit bei einem Personalbuero erhaelt der Freelancer ein \"Gehalt\", fuer 20 Jahre zwei \"Gehaelter\"\" als Praemie.";
}
// ----------------------------- equals / hashCode
// ------------------------- equals / hashCode ---------------
@Override
public boolean equals(Object obj) {
@ -132,25 +144,6 @@ public class Freelancer extends Mitarbeiter implements PraemieBerechenbar, Gehal
return true;
}
// ---------------------------- toString / print ----------------------------
public String toStringCsv() {
char sep = ';';
return super.toStringCsv() + sep + stunden + sep + stundenSatz;
}
public String toString() {
return new StringBuffer().append("Freelancer ").append(super.toString()). // ohne super. -> StackOverflowError
// -> rekursiver Methodenaufruf
append(" Stunden: ").append(stunden).append(" Stundensatz: ").append(stundenSatz).append(" Praemie: ")
.append(berechnePraemie()).toString();
}
public void print() {
System.out.println(this);
}
@Override
public int hashCode() {
final int prime = 31;
@ -160,4 +153,30 @@ public class Freelancer extends Mitarbeiter implements PraemieBerechenbar, Gehal
return result;
}
// ---------------------------- toString / print ----------------------------
public String toStringCsv()
{
char sep = ';';
return super.toStringCsv()+sep+stunden+sep+stundenSatz;
}
public String toString()
{
return new StringBuffer().append("Freelancer ").
append(super.toString()). // ohne super. -> StackOverflowError -> rekursiver Methodenaufruf
append(" Stunden: ").
append(stunden).append(" Stundensatz: ").
append(stundenSatz).
append(" Praemie: ").append(berechnePraemie()).toString();
}
public void print()
{
System.out.println(this);
}
}

View File

@ -6,7 +6,7 @@ import java.time.Year;
import java.util.Comparator;
import java.util.Objects;
//2022-04-05 4BAIF
//2022-04-07 4BAIF
//Klasse abstract
//Methode berechneGehalt() abstract
@ -18,7 +18,9 @@ import java.util.Objects;
// neuer Konstruktor Mitarbeiter(String[] zeilenTeile) fuer importMitarbeiter
// setAllFields(String [] zeilenTeile)
public abstract class Mitarbeiter implements Comparable<Mitarbeiter>, Serializable
// mit equals() und hashCode()
public abstract class Mitarbeiter implements Comparable <Mitarbeiter>, Serializable
//public class Mitarbeiter implements Comparable <Mitarbeiter> // zum Testen
{
@ -35,86 +37,99 @@ public abstract class Mitarbeiter implements Comparable<Mitarbeiter>, Serializab
setEintrJahr(Year.now());
}
public Mitarbeiter(String name, char gesch, Year gebJahr, Year eintrJahr) throws PersonalException {
public Mitarbeiter(String name, char gesch, Year gebJahr, Year eintrJahr) throws PersonalException
{
setName(name);
setGesch(gesch);
setGebJahr(gebJahr);
setEintrJahr(eintrJahr);
}
public Mitarbeiter(String[] zeilenTeile) throws PersonalException {
if (zeilenTeile != null) {
public Mitarbeiter(String[] zeilenTeile) throws PersonalException
{
if (zeilenTeile != null)
{
// setName();
// setGesch();
// setEintrJahr();
// setGebJahr();
setAllFields(zeilenTeile);
} else
}
else
throw new PersonalException("Fehler bei Mitarbeiter(String[]): null-Referenz erhalten");
}
// ------------------------------------ getter ------------------------
public String getName() {
//------------------------------------ getter ------------------------
public String getName()
{
return name;
}
public char getGesch() {
public char getGesch()
{
return gesch;
}
public Year getGebJahr() {
public Year getGebJahr()
{
return gebJahr;
}
public Year getEintrJahr() {
public Year getEintrJahr()
{
return eintrJahr;
}
// ------------------------------------ setter ------------------------
//------------------------------------ setter ------------------------
public void setName(String name) throws PersonalException {
public void setName(String name) throws PersonalException
{
if (name != null)
if (name.length() >= 2)
this.name = name;
else
throw new PersonalException("Falscher Parameterwert fuer setName(" + name + ") !!!");
throw new PersonalException("Falscher Parameterwert fuer setName("+name+") !!!");
else
throw new PersonalException("null-Referenz fuer setName(String name) !!!");
}
public void setGesch(char gesch) throws PersonalException {
if (gesch == 'm' || gesch == 'M' || gesch == 'w' || gesch == 'W' || gesch == 'x' || gesch == 'X')
public void setGesch(char gesch) throws PersonalException
{
if (gesch == 'm' || gesch == 'M' || gesch == 'w' || gesch == 'W' || gesch == 'x' || gesch == 'X' )
this.gesch = Character.toLowerCase(gesch); // Character ist "Wrapper"-Klasse von char
else
throw new PersonalException("Falscher Parameterwert fuer setGesch(" + gesch + ") !!!");
}
public void setGebJahr(Year gebJahr) throws PersonalException {
// int aktJahr = Year.now().getValue();
public void setGebJahr(Year gebJahr) throws PersonalException
{
//int aktJahr = Year.now().getValue();
Year aktYear = Year.now();
if (gebJahr != null)
// if (gebJahr.getValue() >= aktJahr-100 && gebJahr.getValue() <= aktJahr )
if (!gebJahr.isBefore(aktYear.minusYears(100)) && !gebJahr.isAfter(aktYear))
if ( !gebJahr.isBefore(aktYear.minusYears(100)) && !gebJahr.isAfter(aktYear) )
this.gebJahr = gebJahr;
else
throw new PersonalException("Falscher Parameterwert fuer setGebJahr(" + gebJahr + ") !!!");
throw new PersonalException("Falscher Parameterwert fuer setGebJahr("+gebJahr+") !!!");
else
throw new PersonalException("null-Referenz fuer setGebJahr(Year gebJahr) !!!");
}
public void setEintrJahr(Year eintrJahr) throws PersonalException {
public void setEintrJahr(Year eintrJahr) throws PersonalException
{
if (eintrJahr != null)
if (gebJahr != null) {
if (gebJahr != null)
{
int aktJahr = Year.now().getValue();
if (eintrJahr.getValue() >= gebJahr.getValue() + 15)
if (eintrJahr.getValue() <= aktJahr)
if (eintrJahr.getValue() >= gebJahr.getValue()+15)
if (eintrJahr.getValue() <= aktJahr )
this.eintrJahr = eintrJahr;
else
throw new PersonalException("Falscher Parameterwert fuer setEintrJahr(" + eintrJahr + ") !!!");
throw new PersonalException("Falscher Parameterwert fuer setEintrJahr("+eintrJahr+") !!!");
else
throw new PersonalException("Fehler bei setEintrJahr("+eintrJahr+") -> Person ist zu jung ("+berechneAlter()+")!!!");
}
else
throw new PersonalException("Fehler bei setEintrJahr(" + eintrJahr + ") -> Person ist zu jung ("
+ berechneAlter() + ")!!!");
} else
throw new PersonalException("null-Referenz bei gebJahr -> eintrJahr kann nicht geprueft werden !!!");
else
throw new PersonalException("null-Referenz fuer setEintrJahr(Year eintrJahr) !!!");
@ -125,32 +140,40 @@ public abstract class Mitarbeiter implements Comparable<Mitarbeiter>, Serializab
// beim Arbeiten mit Array kann es eine
// ArrayIndexOutOfBoundsException geben
try {
// Angestellter;Alfred; m; 1977; 2022
//Angestellter;Alfred; m; 1977; 2022
// [0] [1] [2] [3] [4] im Array zeilenTeile
setName(zeilenTeile[1].trim()); // trim(): whitespaces "vorne und hinten" entfernen
setGesch(zeilenTeile[2].trim().charAt(0)); // z.B. "m" -> 'm'
// Integer.parseInt(String)
// throws NumberFormatException bei Integer.parseInt
setGebJahr(Year.of(Integer.parseInt(zeilenTeile[3].trim()))); // "1977"
setGebJahr( Year.of(Integer.parseInt(zeilenTeile[3].trim())) ); // "1977"
// throws NumberFormatException bei Integer.parseInt
setEintrJahr(Year.of(Integer.parseInt(zeilenTeile[4].trim()))); // "2022"
} catch (ArrayIndexOutOfBoundsException e) {
throw new PersonalException("Array-Fehler bei setAllFields(): " + e.getMessage());
} catch (StringIndexOutOfBoundsException e) {
throw new PersonalException(
"Zeichenumwandlungsfehler-Fehler (gesch) bei setAllFields(): " + e.getMessage());
} catch (NumberFormatException e) {
throw new PersonalException(
"Zahlenumwandlungs-Fehler (gebJahr oder eintrJahr) bei setAllFields(): " + e.getMessage());
} catch (DateTimeException e) // wird von Year.of() moeglicherweise "geworfen"
}
catch(ArrayIndexOutOfBoundsException e)
{
throw new PersonalException(
"Jahreszahlumwandlungs-Fehler (gebJahr oder eintrJahr) bei setAllFields(): " + e.getMessage());
throw new PersonalException("Array-Fehler bei setAllFields(): "
+ e.getMessage());
}
catch (StringIndexOutOfBoundsException e)
{
throw new PersonalException("Zeichenumwandlungsfehler-Fehler (gesch) bei setAllFields(): "
+ e.getMessage());
}
catch(NumberFormatException e)
{
throw new PersonalException("Zahlenumwandlungs-Fehler (gebJahr oder eintrJahr) bei setAllFields(): "
+ e.getMessage());
}
catch (DateTimeException e) // wird von Year.of() moeglicherweise "geworfen"
{
throw new PersonalException("Jahreszahlumwandlungs-Fehler (gebJahr oder eintrJahr) bei setAllFields(): "
+ e.getMessage());
}
}
// -------------------------------------- weitere -----------------------
public int berechneAlter() {
//-------------------------------------- weitere -----------------------
public int berechneAlter()
{
// return 2021 - gebJahr; // ganz schlecht...
// Bessere Loesung in Einzelschritten:
@ -160,11 +183,12 @@ public abstract class Mitarbeiter implements Comparable<Mitarbeiter>, Serializab
// return alter;
// Bessere Loesung in einem Schritt:
return (gebJahr != null ? Year.now().getValue() - gebJahr.getValue() : -99); // Fehlercode
return (gebJahr != null?Year.now().getValue() - gebJahr.getValue():-99); // Fehlercode
}
public int berechneDienstalter() {
return (eintrJahr != null ? Year.now().getValue() - eintrJahr.getValue() : -99); // Fehlercode
public int berechneDienstalter()
{
return (eintrJahr != null?Year.now().getValue() - eintrJahr.getValue():-99); // Fehlercode
}
// public float berechneGehalt()
@ -189,19 +213,21 @@ public abstract class Mitarbeiter implements Comparable<Mitarbeiter>, Serializab
@Override
public int compareTo(Mitarbeiter o) { // "natuerliche" Reihenfolge von Gehalt
if (o != null) {
if (o != null)
{
if (berechneGehalt() > o.berechneGehalt())
return 1;
else if (berechneGehalt() < o.berechneGehalt())
else
if (berechneGehalt() < o.berechneGehalt())
return -1;
else
return 0;
} else // Annahme bis zum ExceptionHandling, dann NullPointerException
}
else // Annahme bis zum ExceptionHandling, dann NullPointerException
return 1;
}
// ----------------------------------- innere Klasse
// --------------------------------
// ----------------------------------- innere Klasse --------------------------------
public static class AlterComparator implements Comparator<Mitarbeiter> {
@ -220,13 +246,7 @@ public abstract class Mitarbeiter implements Comparable<Mitarbeiter>, Serializab
}
}
// ------------------------------------- equals / hashCode
@Override
public int hashCode() {
return Objects.hash(eintrJahr, gebJahr, gesch, name);
}
// ------------------------- equals / hashCode ---------------
@Override
public boolean equals(Object obj) {
if (this == obj)
@ -240,38 +260,41 @@ public abstract class Mitarbeiter implements Comparable<Mitarbeiter>, Serializab
&& gesch == other.gesch && Objects.equals(name, other.name);
}
// ------------------------------------ toString() / print
// --------------------------------------
public String toString() {
@Override
public int hashCode() {
return Objects.hash(eintrJahr, gebJahr, gesch, name);
}
// ------------------------------------ toString() / print --------------------------------------
public String toString()
{
String geschlecht;
switch (gesch) {
switch(gesch)
{
case 'm':
case 'M':
geschlecht = "maennlich";
break;
case 'M': geschlecht = "maennlich"; break;
case 'w':
case 'W':
geschlecht = "weiblich";
break;
case 'W': geschlecht = "weiblich"; break;
case 'x':
case 'X':
geschlecht = "divers";
break;
default:
geschlecht = "unbekannt";
case 'X': geschlecht = "divers"; break;
default : geschlecht = "unbekannt";
}
return "Name: " + name + ", Gesch.: " + geschlecht + ", Geb.Jahr: "
+ (gebJahr != null ? gebJahr.getValue() : "keines vorhanden") + ", Alter: " + berechneAlter()
+ ", Eintr.Jahr: " + (eintrJahr != null ? eintrJahr.getValue() : "keines vorhanden") + ", Dienstalter: "
+ berechneDienstalter() + ", Gehalt: " + berechneGehalt();
return "Name: " + name+
", Gesch.: " + geschlecht+
", Geb.Jahr: " + (gebJahr != null?gebJahr.getValue():"keines vorhanden")+
", Alter: " + berechneAlter()+
", Eintr.Jahr: " + (eintrJahr != null?eintrJahr.getValue():"keines vorhanden")+
", Dienstalter: "+ berechneDienstalter() +
", Gehalt: " + berechneGehalt();
}
public void print() {
System.out.println(this); // System.out.println(toString())
public void print()
{
System.out.println(this); //System.out.println(toString())
}
public String toStringCsv() {
public String toStringCsv()
{
char sep = ';'; // "Trennzeichen" zwischen den Attribut-Werten
StringBuilder sb = new StringBuilder();
@ -284,5 +307,8 @@ public abstract class Mitarbeiter implements Comparable<Mitarbeiter>, Serializab
return (sb.toString());
}
}

View File

@ -54,7 +54,16 @@ import java.util.List;
// 2022-04-01 importMitarbeiterCsc() fuer Angestellte
// 2022-04-05 importMitarbeiterCsc fuer Freelancer und Arzt
// 2022-01-07 doppeltes aufnehmen verhindern, equals, hashcode (Old and new)
// 2022-04-07 aufnehmen erweitert um !contains() -> keine doppelstes Aufnehmen
//2022-06-07: getMitarbeiter() NEU
// remove(List) NEU
// loadMitarbeiter(String) NEU
// loadMitarbeiter() angepasst
// saveMitarbeiter(String) NEU
// saveMitarbeiter() angepasst
// exportMitarbeiter(String) NEU
// exportMitarbeiter() angepasst
public class Personalbuero {
private ArrayList<Mitarbeiter> mitarbeiter; // eine ArrayList ist "getypt"
@ -72,6 +81,10 @@ public class Personalbuero {
// //return anzahl;
// return mitarbeiter.size();
// }
public List<Mitarbeiter> getMitarbeiter() {
return mitarbeiter; // Achtung: Vollzugriff auf Collection
}
// -------------------------------- weitere ------------------------------------
public boolean aufnehmen(Mitarbeiter ma) throws PersonalException {
@ -80,11 +93,10 @@ public class Personalbuero {
// if (anzahl < mitarbeiter.length)
// {
// mitarbeiter[anzahl] = ma;
if (!mitarbeiter.contains(ma)) {
if (!mitarbeiter.contains(ma))
return mitarbeiter.add(ma); // liefert immer true
} else {
throw new PersonalException("Fehler bei aufnehmen(): Mitarbeiter/in schon vorhanden");
}
else
throw new PersonalException("Fehler bei aufnehmen(): Mitarbeiter/in schon vorhanden\n" + ma);
// anzahl ++;
// return true;
// }
@ -319,14 +331,18 @@ public class Personalbuero {
}
}
public void remove(List<Mitarbeiter> auswahl) throws PersonalException
{
if (auswahl != null)
mitarbeiter.removeAll(auswahl);
else
throw new PersonalException("Fehler bei remove(auswahl): null-Referenz fuer auswahl erhalten");
}
// --------------------------------- files ----------------------------------
public void saveMitarbeiter() throws PersonalException {
String fSep = System.getProperty("file.separator");
//String strPfadName = "c:\\scratch\\mitarbeiter.ser";
String strPfadName = "c:"+ fSep + "scratch" + fSep + "mitarbeiter.ser";
public void saveMitarbeiter(String strPfadName) throws PersonalException {
if(strPfadName != null)
{
try ( // try with ressources -> close() erfolgt "automatisch"
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(strPfadName));) {
// hier erfolgt das "Speichern"
@ -338,15 +354,31 @@ public class Personalbuero {
throw new PersonalException("Eingabe/Ausgabe-Fehler bei saveMitarbeiter(): " + e.getMessage());
}
}
// loadMitarbeiter Variante 2 OHNE suppressWarning -> empfohlen
public void loadMitarbeiter() throws PersonalException
{
else
throw new PersonalException("Fehler bei saveMitarbeiter(): null-Referenz fuer strPfadName erhalten");
}
public void saveMitarbeiter() throws PersonalException {
String fSep = System.getProperty("file.separator");
//String strPfadName = "c:\\scratch\\mitarbeiter.ser";
String strPfadName = "c:"+ fSep + "scratch" + fSep + "mitarbeiter.ser";
saveMitarbeiter(strPfadName);
// try ( // try with ressources -> close() erfolgt "automatisch"
// ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(strPfadName));) {
// // hier erfolgt das "Speichern"
// oos.writeObject(mitarbeiter);
//
// } catch (FileNotFoundException e) {
// throw new PersonalException("Datei-Fehler bei saveMitarbeiter(): " + e.getMessage());
// } catch (IOException e) {
// throw new PersonalException("Eingabe/Ausgabe-Fehler bei saveMitarbeiter(): " + e.getMessage());
// }
}
// loadMitarbeiter Variante 2 OHNE suppressWarning -> empfohlen
public void loadMitarbeiter(String strPfadName) throws PersonalException {
if (strPfadName != null)
{
try ( ObjectInputStream ois =
new ObjectInputStream(new FileInputStream(strPfadName)))
@ -372,6 +404,41 @@ public class Personalbuero {
throw new PersonalException("Klassen-Fehler bei loadMitarbeiter(): " + e.getMessage());
}
}
else
throw new PersonalException("Fehler bei loadMitarbeiter(): null-Referenz fuer strPfadName erhalten");
}
public void loadMitarbeiter() throws PersonalException
{
String fSep = System.getProperty("file.separator");
//String strPfadName = "c:\\scratch\\mitarbeiter.ser";
String strPfadName = "c:"+ fSep + "scratch" + fSep + "mitarbeiter.ser";
loadMitarbeiter(strPfadName);
// try ( ObjectInputStream ois =
// new ObjectInputStream(new FileInputStream(strPfadName)))
// {
//
// List <?> tempMitarbeiter = (List <?>) ois.readObject();
//
// mitarbeiter.clear(); // ersetzen und NICHT hinzufuegen
//
// for (Object o : tempMitarbeiter)
// {
// if (o instanceof Mitarbeiter)
// {
// aufnehmen((Mitarbeiter)o);
// }
// }
//
// } catch (FileNotFoundException e) {
// throw new PersonalException("Datei-Fehler bei loadMitarbeiter(): " + e.getMessage());
// } catch (IOException e) {
// throw new PersonalException("Eingabe/Ausgabe-Fehler bei loadMitarbeiter(): " + e.getMessage());
// } catch (ClassNotFoundException e) {
// throw new PersonalException("Klassen-Fehler bei loadMitarbeiter(): " + e.getMessage());
// }
}
// Variante1: es geht "typsicherer" -> Variante2
// @SuppressWarnings("unchecked") // funktionsfaehige allerdings nicht empfohlene Variante1
@ -394,13 +461,10 @@ public class Personalbuero {
// }
// }
public void exportMitarbeiter() throws PersonalException
{
String fSep = System.getProperty("file.separator");
String strPfadName = "c:"+ fSep + "scratch" + fSep + "mitarbeiter.txt";
public void exportMitarbeiter(String strPfadName) throws PersonalException {
String nLn = System.getProperty("line.separator");
if (strPfadName != null)
{
try ( BufferedWriter bw = new BufferedWriter(new FileWriter(strPfadName)))
{
for (Mitarbeiter mit : mitarbeiter)
@ -414,6 +478,30 @@ public class Personalbuero {
+ e.getMessage());
}
}
else
throw new PersonalException("Fehler bei exportMitarbeiter(): null-Referenz fuer strPfadName erhalten");
}
public void exportMitarbeiter() throws PersonalException
{
String fSep = System.getProperty("file.separator");
String strPfadName = "c:"+ fSep + "scratch" + fSep + "mitarbeiter.txt";
exportMitarbeiter(strPfadName);
// String nLn = System.getProperty("line.separator");
// try ( BufferedWriter bw = new BufferedWriter(new FileWriter(strPfadName)))
// {
// for (Mitarbeiter mit : mitarbeiter)
// {
// //bw.write(mit.toString() + "\n");
// bw.write(mit.toString() + nLn); // mit Line-Separator
// }
//
// } catch (IOException e) {
// throw new PersonalException("Eingabe/Ausgabe-Fehler bei exportMitarbeiter()"
// + e.getMessage());
// }
}
public void exportMitarbeiterCsv() throws PersonalException
{

View File

@ -1,34 +0,0 @@
package model;
public class PersonalbueroException extends Exception {
// public PersonalbueroException() {
// // TODO Auto-generated constructor stub
// }
/**
* "Versionnumber" of class
*/
private static final long serialVersionUID = 2022_03_18_12_50L;
public PersonalbueroException(String message) {
super(message);
}
// public PersonalbueroException(Throwable cause) {
// super(cause);
// // TODO Auto-generated constructor stub
// }
//
// public PersonalbueroException(String message, Throwable cause) {
// super(message, cause);
// // TODO Auto-generated constructor stub
// }
//
// public PersonalbueroException(String message, Throwable cause, boolean enableSuppression,
// boolean writableStackTrace) {
// super(message, cause, enableSuppression, writableStackTrace);
// // TODO Auto-generated constructor stub
// }
}

View File

@ -1,2 +0,0 @@
module Personalbuero {
}

View File

@ -84,19 +84,20 @@ public class TestPersonalbueroMain {
}
System.out.println();
// ein Mitarbeiter
Angestellter a1;
try {
a1 = new Angestellter("Alfred", 'm', Year.of(1977), Year.now());
Angestellter a1 = new Angestellter("Alfred", 'm', Year.of(1977), Year.now());
pb.aufnehmen(a1);
System.out.println(pb); // 1 MA: Angestellter Alfred
Freelancer f2 = new Freelancer("Anna", 'w', Year.of(1976), Year.of(2002), 100f, 10); // 1000
pb.aufnehmen(f2);
System.out.println(pb); // 2 MA: Angestellter Alfred, Freelancerin Anna
System.out.println();
pb.saveMitarbeiter();
System.out.println("saveMitarbeiter() wurde ausgefuehrt");
System.out.println();
System.out.println(pb); // 1 MA: Angestellter Alfred
System.out.println(pb); // 2 MA: Angestellter Alfred,, Freelancerin Anna
System.out.println();
} catch (PersonalException e) {
@ -111,16 +112,16 @@ public class TestPersonalbueroMain {
try {
Personalbuero pb = new Personalbuero();
Freelancer f2 = new Freelancer("Anna", 'w', Year.of(1976), Year.of(2002), 100f, 10); // 1000
Freelancer f2 = new Freelancer("Adele", 'w', Year.of(1976), Year.of(2002), 100f, 10); // 1000
pb.aufnehmen(f2);
System.out.println(pb); // // Anna
System.out.println(pb); // // Adele
System.out.println();
pb.loadMitarbeiter();
System.out.println("loadMitarbeiter() wurde ausgefuehrt");
System.out.println();
System.out.println(pb); // 1 MA: Angestellter Alfred
System.out.println(pb); // 2 MA: Angestellter Alfred, Freelancerin Anna
System.out.println();
} catch (PersonalException e) {