diff --git a/.gitignore b/.gitignore
index 75931e1..360665c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,28 @@
/Flugbuch/
+*target*
+*.jar
+*.war
+*.ear
+*.class
+
+# eclipse specific git ignore
+*.pydevproject
+.project
+.metadata
+bin/**
+tmp/**
+tmp/**/*
+*.tmp
+*.bak
+*.swp
+*~.nib
+local.properties
+.classpath
+.settings/
+.loadpath
+
+# External tool builders
+.externalToolBuilders/
+
+# Locally stored "Eclipse launch configurations"
+*.launch
\ No newline at end of file
diff --git a/Digitales_Fluglogbuch/.classpath b/Digitales_Fluglogbuch/.classpath
deleted file mode 100644
index bdbf2f5..0000000
--- a/Digitales_Fluglogbuch/.classpath
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Digitales_Fluglogbuch/.gitignore b/Digitales_Fluglogbuch/.gitignore
deleted file mode 100644
index ae3c172..0000000
--- a/Digitales_Fluglogbuch/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/bin/
diff --git a/Digitales_Fluglogbuch/.settings/org.eclipse.core.resources.prefs b/Digitales_Fluglogbuch/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index 99f26c0..0000000
--- a/Digitales_Fluglogbuch/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,2 +0,0 @@
-eclipse.preferences.version=1
-encoding/=UTF-8
diff --git a/Digitales_Fluglogbuch/build.fxbuild b/Digitales_Fluglogbuch/build.fxbuild
deleted file mode 100644
index b16fcae..0000000
--- a/Digitales_Fluglogbuch/build.fxbuild
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/Digitales_Fluglogbuch/fluglogbuch.db b/Digitales_Fluglogbuch/fluglogbuch.db
deleted file mode 100644
index 3186c40..0000000
Binary files a/Digitales_Fluglogbuch/fluglogbuch.db and /dev/null differ
diff --git a/Digitales_Fluglogbuch/src/Path_zu_JavaFX b/Digitales_Fluglogbuch/src/Path_zu_JavaFX
deleted file mode 100644
index e5b2a09..0000000
--- a/Digitales_Fluglogbuch/src/Path_zu_JavaFX
+++ /dev/null
@@ -1 +0,0 @@
---module-path "C:\Users\asus\OneDrive\Desktop\openjfx-22.0.1_windows-x64_bin-sdk\javafx-sdk-22.0.1\lib" --add-modules javafx.controls,javafx.graphics,javafx.fxml
diff --git a/src/Controller/FluglogbuchController.java b/src/Controller/FluglogbuchController.java
new file mode 100644
index 0000000..6b1e038
--- /dev/null
+++ b/src/Controller/FluglogbuchController.java
@@ -0,0 +1,71 @@
+// Fluglogbuch Software Studienleistung
+// Sabic Eldar (3009675), Hajrovic Davud (3013128), Keiserman Vlada (3012879)
+
+package Controller;
+
+import View.FluglogbuchUI;
+import javafx.application.Application;
+import javafx.geometry.Insets;
+import javafx.geometry.Pos;
+import javafx.scene.Scene;
+import javafx.scene.control.Button;
+import javafx.scene.control.Label;
+import javafx.scene.control.Tab;
+import javafx.scene.control.TabPane;
+import javafx.scene.layout.VBox;
+import javafx.stage.Stage;
+import Model.Database;
+
+public class FluglogbuchController extends Application {
+
+ @Override
+ public void start(Stage primaryStage) {
+ Database.createDatabase();
+ showWelcomeScreen(primaryStage);
+ }
+
+ private void showWelcomeScreen(Stage primaryStage) {
+ VBox vbox = new VBox(20);
+ vbox.setAlignment(Pos.CENTER);
+ vbox.setPadding(new Insets(20));
+
+ Label welcomeLabel = new Label("Willkommen zur Software:\nDigitales Fluglogbuch Version 1.0");
+ welcomeLabel.setStyle("-fx-font-size: 16px; -fx-font-weight: bold; -fx-text-alignment: center;");
+ Label createdByLabel = new Label("Erstellt von:\nEldarDavudVlada Software GmbH");
+ createdByLabel.setStyle("-fx-font-size: 14px; -fx-text-alignment: center;");
+
+ Button continueButton = new Button("Weiter");
+ continueButton.setStyle(
+ "-fx-font-size: 14px; -fx-padding: 10 20 10 20; -fx-background-color: #0073e6; -fx-text-fill: white;");
+ continueButton.setOnMouseEntered(e -> continueButton.setStyle(
+ "-fx-font-size: 14px; -fx-padding: 10 20 10 20; -fx-background-color: #005bb5; -fx-text-fill: white;"));
+ continueButton.setOnMouseExited(e -> continueButton.setStyle(
+ "-fx-font-size: 14px; -fx-padding: 10 20 10 20; -fx-background-color: #0073e6; -fx-text-fill: white;"));
+
+ vbox.getChildren().addAll(welcomeLabel, createdByLabel, continueButton);
+
+ Scene welcomeScene = new Scene(vbox, 500, 300);
+ primaryStage.setScene(welcomeScene);
+ primaryStage.show();
+
+ continueButton.setOnAction(e -> showMainApplication(primaryStage));
+ }
+
+ private void showMainApplication(Stage primaryStage) {
+ FluglogbuchUI view = new FluglogbuchUI();
+
+ TabPane tabPane = new TabPane();
+ Tab pilotenTab = new Tab("Pilotenverwaltung", view.createPilotenverwaltungPane());
+ Tab lizenzenTab = new Tab("Lizenzverwaltung", view.createLizenzverwaltungPane());
+ Tab berechtigungenTab = new Tab("Berechtigungsverwaltung", view.createBerechtigungsverwaltungPane());
+ Tab logbuchTab = new Tab("Logbucheinträge", view.createLogbucheintragPane());
+
+ tabPane.getTabs().addAll(pilotenTab, lizenzenTab, berechtigungenTab, logbuchTab);
+
+ view.start(primaryStage, tabPane);
+ }
+
+ public static void main(String[] args) {
+ launch(args);
+ }
+}
diff --git a/src/Model/Berechtigung.java b/src/Model/Berechtigung.java
new file mode 100644
index 0000000..8266dad
--- /dev/null
+++ b/src/Model/Berechtigung.java
@@ -0,0 +1,26 @@
+// Fluglogbuch Software Studienleistung
+// Sabic Eldar (3009675), Hajrovic Davud (3013128), Keiserman Vlada (3012879)
+
+package Model;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+
+public class Berechtigung {
+ public static void speichereBerechtigung(String berechtigung, String unterschrift, String datumDerPruefung,
+ String gueltigkeitsdatum, String ermaechtigungsnummer) {
+ String sql = "INSERT INTO berechtigungen(berechtigung, unterschrift, datum_der_pruefung, gueltigkeitsdatum, ermaechtigungsnummer) VALUES(?,?,?,?,?)";
+
+ try (Connection conn = Database.connect(); PreparedStatement pstmt = conn.prepareStatement(sql)) {
+ pstmt.setString(1, berechtigung);
+ pstmt.setString(2, unterschrift);
+ pstmt.setString(3, datumDerPruefung);
+ pstmt.setString(4, gueltigkeitsdatum);
+ pstmt.setString(5, ermaechtigungsnummer);
+ pstmt.executeUpdate();
+ } catch (SQLException e) {
+ System.out.println(e.getMessage());
+ }
+ }
+}
diff --git a/src/Model/Database.java b/src/Model/Database.java
new file mode 100644
index 0000000..1b5ce7f
--- /dev/null
+++ b/src/Model/Database.java
@@ -0,0 +1,84 @@
+// Fluglogbuch Software Studienleistung
+// Sabic Eldar (3009675), Hajrovic Davud (3013128), Keiserman Vlada (3012879)
+
+package Model;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+
+public class Database {
+ private static final String DB_URL = "jdbc:sqlite:C:\\Users\\asus\\fluglogbuch.db";
+
+ public static void createDatabase() {
+
+ String pilotTable = "CREATE TABLE IF NOT EXISTS piloten (\n"
+ + " id INTEGER PRIMARY KEY AUTOINCREMENT,\n"
+ + " vorname TEXT NOT NULL,\n"
+ + " nachname TEXT NOT NULL,\n"
+ + " strasse TEXT NOT NULL,\n"
+ + " stadt TEXT NOT NULL,\n"
+ + " plz TEXT NOT NULL,\n"
+ + " hausnummer TEXT NOT NULL,\n"
+ + " geburtsdatum TEXT NOT NULL,\n"
+ + " geburtsort TEXT NOT NULL,\n"
+ + " unterschrift TEXT NOT NULL\n"
+ + ");";
+
+ String lizenzTable = "CREATE TABLE IF NOT EXISTS lizenzen (\n"
+ + " id INTEGER PRIMARY KEY AUTOINCREMENT,\n"
+ + " art_der_lizenz TEXT NOT NULL,\n"
+ + " ausstellungsbehoerde TEXT NOT NULL,\n"
+ + " ausstellungsdatum TEXT NOT NULL,\n"
+ + " lizenznummer TEXT NOT NULL\n"
+ + ");";
+
+ String berechtigungTable = "CREATE TABLE IF NOT EXISTS berechtigungen (\n"
+ + " id INTEGER PRIMARY KEY AUTOINCREMENT,\n"
+ + " berechtigung TEXT NOT NULL,\n"
+ + " unterschrift TEXT NOT NULL,\n"
+ + " datum_der_pruefung TEXT NOT NULL,\n"
+ + " gueltigkeitsdatum TEXT NOT NULL,\n"
+ + " ermaechtigungsnummer TEXT NOT NULL\n"
+ + ");";
+
+ String logbuchTable = "CREATE TABLE IF NOT EXISTS logbuch_Eintraege (\n"
+ + " id INTEGER PRIMARY KEY AUTOINCREMENT,\n"
+ + " kennzeichen TEXT NOT NULL,\n"
+ + " start_flughafen TEXT NOT NULL,\n"
+ + " end_flughafen TEXT NOT NULL,\n"
+ + " start_zeit TEXT NOT NULL,\n"
+ + " end_zeit TEXT NOT NULL,\n"
+ + " anzahl_landungen INTEGER NOT NULL,\n"
+ + " pilot TEXT NOT NULL,\n"
+ + " datum TEXT NOT NULL,\n"
+ + " unterschrift TEXT NOT NULL\n"
+ + ");";
+
+ try (Connection conn = DriverManager.getConnection(DB_URL);
+ PreparedStatement st1 = conn.prepareStatement(pilotTable);
+ PreparedStatement st2 = conn.prepareStatement(lizenzTable);
+ PreparedStatement st3 = conn.prepareStatement(berechtigungTable);
+ PreparedStatement st4 = conn.prepareStatement(logbuchTable)) {
+
+ st1.execute();
+ st2.execute();
+ st3.execute();
+ st4.execute();
+
+ } catch (SQLException e) {
+ System.out.println(e.getMessage());
+ }
+ }
+
+ public static Connection connect() {
+ Connection conn = null;
+ try {
+ conn = DriverManager.getConnection(DB_URL);
+ } catch (SQLException e) {
+ System.out.println(e.getMessage());
+ }
+ return conn;
+ }
+}
\ No newline at end of file
diff --git a/src/Model/Lizenz.java b/src/Model/Lizenz.java
new file mode 100644
index 0000000..a06e329
--- /dev/null
+++ b/src/Model/Lizenz.java
@@ -0,0 +1,25 @@
+// Fluglogbuch Software Studienleistung
+// Sabic Eldar (3009675), Hajrovic Davud (3013128), Keiserman Vlada (3012879)
+
+package Model;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+
+public class Lizenz {
+ public static void speichereLizenz(String artDerLizenz, String ausstellungsbehoerde, String ausstellungsdatum,
+ String lizenznummer) {
+ String sql = "INSERT INTO lizenzen(art_der_lizenz, ausstellungsbehoerde, ausstellungsdatum, lizenznummer) VALUES(?,?,?,?)";
+
+ try (Connection conn = Database.connect(); PreparedStatement pstmt = conn.prepareStatement(sql)) {
+ pstmt.setString(1, artDerLizenz);
+ pstmt.setString(2, ausstellungsbehoerde);
+ pstmt.setString(3, ausstellungsdatum);
+ pstmt.setString(4, lizenznummer);
+ pstmt.executeUpdate();
+ } catch (SQLException e) {
+ System.out.println(e.getMessage());
+ }
+ }
+}
diff --git a/src/Model/Logbuch.java b/src/Model/Logbuch.java
new file mode 100644
index 0000000..ec9d282
--- /dev/null
+++ b/src/Model/Logbuch.java
@@ -0,0 +1,30 @@
+// Fluglogbuch Software Studienleistung
+// Sabic Eldar (3009675), Hajrovic Davud (3013128), Keiserman Vlada (3012879)
+
+package Model;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+
+public class Logbuch {
+ public static void speichereLogbuchEintrag(String kennzeichen, String startFlughafen, String endFlughafen,
+ String startZeit, String endZeit, int anzahlLandungen, String pilot, String datum, String unterschrift) {
+ String sql = "INSERT INTO logbuch_Eintraege(kennzeichen, start_flughafen, end_flughafen, start_zeit, end_zeit, anzahl_landungen, pilot, datum, unterschrift) VALUES(?,?,?,?,?,?,?,?,?)";
+
+ try (Connection conn = Database.connect(); PreparedStatement pstmt = conn.prepareStatement(sql)) {
+ pstmt.setString(1, kennzeichen);
+ pstmt.setString(2, startFlughafen);
+ pstmt.setString(3, endFlughafen);
+ pstmt.setString(4, startZeit);
+ pstmt.setString(5, endZeit);
+ pstmt.setInt(6, anzahlLandungen);
+ pstmt.setString(7, pilot);
+ pstmt.setString(8, datum);
+ pstmt.setString(9, unterschrift);
+ pstmt.executeUpdate();
+ } catch (SQLException e) {
+ System.out.println(e.getMessage());
+ }
+ }
+}
diff --git a/src/Model/Pilot.java b/src/Model/Pilot.java
new file mode 100644
index 0000000..8661ee8
--- /dev/null
+++ b/src/Model/Pilot.java
@@ -0,0 +1,30 @@
+// Fluglogbuch Software Studienleistung
+// Sabic Eldar (3009675), Hajrovic Davud (3013128), Keiserman Vlada (3012879)
+
+package Model;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+
+public class Pilot {
+ public static void speicherePilot(String vorname, String nachname, String strasse, String stadt, String plz,
+ String hausnummer, String geburtsdatum, String geburtsort, String unterschrift) {
+ String sql = "INSERT INTO piloten(vorname, nachname, strasse, stadt, plz, hausnummer, geburtsdatum, geburtsort, unterschrift) VALUES(?,?,?,?,?,?,?,?,?)";
+
+ try (Connection conn = Database.connect(); PreparedStatement pstmt = conn.prepareStatement(sql)) {
+ pstmt.setString(1, vorname);
+ pstmt.setString(2, nachname);
+ pstmt.setString(3, strasse);
+ pstmt.setString(4, stadt);
+ pstmt.setString(5, plz);
+ pstmt.setString(6, hausnummer);
+ pstmt.setString(7, geburtsdatum);
+ pstmt.setString(8, geburtsort);
+ pstmt.setString(9, unterschrift);
+ pstmt.executeUpdate();
+ } catch (SQLException e) {
+ System.out.println(e.getMessage());
+ }
+ }
+}
diff --git a/src/View/FluglogbuchUI.java b/src/View/FluglogbuchUI.java
new file mode 100644
index 0000000..86626d4
--- /dev/null
+++ b/src/View/FluglogbuchUI.java
@@ -0,0 +1,370 @@
+// Fluglogbuch Software Studienleistung
+// Sabic Eldar (3009675), Hajrovic Davud (3013128), Keiserman Vlada (3012879)
+
+package View;
+
+import javafx.geometry.Insets;
+import javafx.geometry.Pos;
+import javafx.scene.Scene;
+import javafx.scene.control.*;
+import javafx.scene.layout.GridPane;
+import javafx.scene.layout.HBox;
+import javafx.stage.Stage;
+import java.util.regex.Pattern;
+
+public class FluglogbuchUI {
+
+ public void start(Stage primaryStage, TabPane tabPane) {
+ primaryStage.setTitle("Digitales Fluglogbuch");
+
+ Scene scene = new Scene(tabPane, 800, 600);
+ scene.getStylesheets().add(getClass().getResource("styles.css").toExternalForm());
+ primaryStage.setScene(scene);
+ primaryStage.show();
+ }
+
+ public GridPane createPilotenverwaltungPane() {
+ GridPane grid = new GridPane();
+ grid.setPadding(new Insets(20));
+ grid.setVgap(15);
+ grid.setHgap(15);
+ grid.setAlignment(Pos.CENTER);
+
+ TextField vornameField = new TextField();
+ TextField nachnameField = new TextField();
+ TextField strasseField = new TextField();
+ TextField stadtField = new TextField();
+ TextField plzField = new TextField();
+ TextField hausnummerField = new TextField();
+ DatePicker geburtsdatumPicker = new DatePicker();
+ TextField geburtsortField = new TextField();
+ TextField unterschriftField = new TextField();
+
+ grid.add(createStyledLabel("Vorname:"), 0, 0);
+ grid.add(vornameField, 1, 0);
+ grid.add(createStyledLabel("Nachname:"), 0, 1);
+ grid.add(nachnameField, 1, 1);
+ grid.add(createStyledLabel("Straße:"), 0, 2);
+ grid.add(strasseField, 1, 2);
+ grid.add(createStyledLabel("Stadt:"), 0, 3);
+ grid.add(stadtField, 1, 3);
+ grid.add(createStyledLabel("Postleitzahl:"), 0, 4);
+ grid.add(plzField, 1, 4);
+ grid.add(createStyledLabel("Hausnummer:"), 0, 5);
+ grid.add(hausnummerField, 1, 5);
+ grid.add(createStyledLabel("Geburtsdatum:"), 0, 6);
+ grid.add(geburtsdatumPicker, 1, 6);
+ grid.add(createStyledLabel("Geburtsort:"), 0, 7);
+ grid.add(geburtsortField, 1, 7);
+ grid.add(createStyledLabel("Unterschrift:"), 0, 8);
+ grid.add(unterschriftField, 1, 8);
+
+ Button speichernButton = new Button("Speichern");
+ speichernButton.getStyleClass().add("save-button");
+
+ HBox buttonBox = new HBox(speichernButton);
+ buttonBox.setAlignment(Pos.CENTER);
+ buttonBox.setPadding(new Insets(10, 0, 0, 0));
+
+ grid.add(buttonBox, 1, 9);
+
+ speichernButton.setOnAction(e -> {
+ String vorname = vornameField.getText();
+ String nachname = nachnameField.getText();
+ String strasse = strasseField.getText();
+ String stadt = stadtField.getText();
+ String plz = plzField.getText();
+ String hausnummer = hausnummerField.getText();
+ String geburtsdatum = geburtsdatumPicker.getValue() != null ? geburtsdatumPicker.getValue().toString() : "";
+ String geburtsort = geburtsortField.getText();
+ String unterschrift = unterschriftField.getText();
+
+ if (isInputValidPilot(vorname, nachname, strasse, stadt, geburtsort, unterschrift)
+ && isAllFieldsFilled(vorname, nachname, strasse, stadt, geburtsort, unterschrift)) {
+ Model.Pilot.speicherePilot(vorname, nachname, strasse, stadt, plz, hausnummer, geburtsdatum, geburtsort,
+ unterschrift);
+ showAlert(Alert.AlertType.INFORMATION, "Erfolg", "Daten erfolgreich gespeichert");
+ }
+ });
+
+ return grid;
+ }
+
+ private Label createStyledLabel(String text) {
+ Label label = new Label(text);
+ label.setStyle("-fx-font-weight: bold; -fx-font-size: 14px;");
+ return label;
+ }
+
+ private boolean isInputValidPilot(String... inputs) {
+ Pattern numericPattern = Pattern.compile(".*\\d.*");
+
+ for (String input : inputs) {
+ if (input == null || input.trim().isEmpty()) {
+ showAlert(Alert.AlertType.ERROR, "Fehler", "Alle Felder müssen ausgefüllt sein.");
+ return false;
+ }
+ if (numericPattern.matcher(input).matches()) {
+ showAlert(Alert.AlertType.ERROR, "Fehler",
+ "In den Feldern Vorname, Nachname, Straße, Stadt, Geburtsort und Unterschrift dürfen keine Zahlen stehen.");
+ return false;
+ }
+ }
+ return true;
+ }
+
+ private void showAlert(Alert.AlertType alertType, String title, String message) {
+ Alert alert = new Alert(alertType);
+ alert.setTitle(title);
+ alert.setHeaderText(null);
+ alert.setContentText(message);
+ alert.showAndWait();
+ }
+
+ public GridPane createLizenzverwaltungPane() {
+ GridPane grid = new GridPane();
+ grid.setPadding(new Insets(20));
+ grid.setVgap(15);
+ grid.setHgap(15);
+ grid.setAlignment(Pos.CENTER);
+
+ TextField artDerLizenzField = new TextField();
+ TextField ausstellungsbehoerdeField = new TextField();
+ DatePicker ausstellungsdatumPicker = new DatePicker();
+ TextField lizenznummerField = new TextField();
+
+ grid.add(createStyledLabel("Art der Lizenz:"), 0, 0);
+ grid.add(artDerLizenzField, 1, 0);
+ grid.add(createStyledLabel("Ausstellungsbehörde:"), 0, 1);
+ grid.add(ausstellungsbehoerdeField, 1, 1);
+ grid.add(createStyledLabel("Ausstellungsdatum:"), 0, 2);
+ grid.add(ausstellungsdatumPicker, 1, 2);
+ grid.add(createStyledLabel("Lizenznummer:"), 0, 3);
+ grid.add(lizenznummerField, 1, 3);
+
+ Button speichernButton = new Button("Speichern");
+ speichernButton.getStyleClass().add("save-button");
+
+ HBox buttonBox = new HBox(speichernButton);
+ buttonBox.setAlignment(Pos.CENTER);
+ buttonBox.setPadding(new Insets(10, 0, 0, 0));
+
+ grid.add(buttonBox, 1, 4);
+
+ speichernButton.setOnAction(e -> {
+ String artDerLizenz = artDerLizenzField.getText();
+ String ausstellungsbehoerde = ausstellungsbehoerdeField.getText();
+ String ausstellungsdatum = ausstellungsdatumPicker.getValue() != null
+ ? ausstellungsdatumPicker.getValue().toString()
+ : "";
+ String lizenznummer = lizenznummerField.getText();
+
+ if (isInputValidLizenz(artDerLizenz, ausstellungsbehoerde)
+ && isAllFieldsFilled(artDerLizenz, ausstellungsbehoerde, ausstellungsdatum, lizenznummer)) {
+ Model.Lizenz.speichereLizenz(artDerLizenz, ausstellungsbehoerde, ausstellungsdatum, lizenznummer);
+ showAlert(Alert.AlertType.INFORMATION, "Erfolg", "Daten erfolgreich gespeichert");
+ }
+ });
+
+ return grid;
+ }
+
+ private boolean isInputValidLizenz(String... inputs) {
+ Pattern numericPattern = Pattern.compile(".*\\d.*");
+
+ for (String input : inputs) {
+ if (input == null || input.trim().isEmpty()) {
+ showAlert(Alert.AlertType.ERROR, "Fehler", "Alle Felder müssen ausgefüllt sein.");
+ return false;
+ }
+ if (numericPattern.matcher(input).matches()) {
+ showAlert(Alert.AlertType.ERROR, "Fehler",
+ "In den Feldern Ausstellungsbehörde und Art der Lizenz dürfen keine Zahlen stehen.");
+ return false;
+ }
+ }
+ return true;
+ }
+
+ public GridPane createBerechtigungsverwaltungPane() {
+ GridPane grid = new GridPane();
+ grid.setPadding(new Insets(20));
+ grid.setVgap(15);
+ grid.setHgap(15);
+ grid.setAlignment(Pos.CENTER);
+
+ TextField berechtigungField = new TextField();
+ TextField unterschriftField = new TextField();
+ DatePicker datumDerPruefungPicker = new DatePicker();
+ DatePicker gueltigkeitsdatumPicker = new DatePicker();
+ TextField ermaechtigungsnummerField = new TextField();
+
+ grid.add(createStyledLabel("Berechtigung:"), 0, 0);
+ grid.add(berechtigungField, 1, 0);
+ grid.add(createStyledLabel("Unterschrift:"), 0, 1);
+ grid.add(unterschriftField, 1, 1);
+ grid.add(createStyledLabel("Datum der Prüfung:"), 0, 2);
+ grid.add(datumDerPruefungPicker, 1, 2);
+ grid.add(createStyledLabel("Gültigkeitsdatum:"), 0, 3);
+ grid.add(gueltigkeitsdatumPicker, 1, 3);
+ grid.add(createStyledLabel("Ermächtigungsnummer:"), 0, 4);
+ grid.add(ermaechtigungsnummerField, 1, 4);
+
+ Button speichernButton = new Button("Speichern");
+ speichernButton.getStyleClass().add("save-button");
+
+ HBox buttonBox = new HBox(speichernButton);
+ buttonBox.setAlignment(Pos.CENTER);
+ buttonBox.setPadding(new Insets(10, 0, 0, 0));
+
+ grid.add(buttonBox, 1, 5);
+
+ speichernButton.setOnAction(e -> {
+ String berechtigung = berechtigungField.getText();
+ String unterschrift = unterschriftField.getText();
+ String datumDerPruefung = datumDerPruefungPicker.getValue() != null
+ ? datumDerPruefungPicker.getValue().toString()
+ : "";
+ String gueltigkeitsdatum = gueltigkeitsdatumPicker.getValue() != null
+ ? gueltigkeitsdatumPicker.getValue().toString()
+ : "";
+ String ermaechtigungsnummer = ermaechtigungsnummerField.getText();
+
+ if (isInputValidBerechtigung(berechtigung, unterschrift) && isAllFieldsFilled(berechtigung, unterschrift,
+ datumDerPruefung, gueltigkeitsdatum, ermaechtigungsnummer)) {
+ Model.Berechtigung.speichereBerechtigung(berechtigung, unterschrift, datumDerPruefung,
+ gueltigkeitsdatum, ermaechtigungsnummer);
+ showAlert(Alert.AlertType.INFORMATION, "Erfolg", "Daten erfolgreich gespeichert");
+ }
+ });
+
+ return grid;
+ }
+
+ private boolean isInputValidBerechtigung(String... inputs) {
+ Pattern numericPattern = Pattern.compile(".*\\d.*");
+
+ for (String input : inputs) {
+ if (input == null || input.trim().isEmpty()) {
+ showAlert(Alert.AlertType.ERROR, "Fehler", "Alle Felder müssen ausgefüllt sein.");
+ return false;
+ }
+ if (numericPattern.matcher(input).matches()) {
+ showAlert(Alert.AlertType.ERROR, "Fehler",
+ "In den Feldern Berechtigung und Unterschrift dürfen keine Zahlen stehen.");
+ return false;
+ }
+ }
+ return true;
+ }
+
+ public GridPane createLogbucheintragPane() {
+ GridPane grid = new GridPane();
+ grid.setPadding(new Insets(20));
+ grid.setVgap(15);
+ grid.setHgap(15);
+ grid.setAlignment(Pos.CENTER);
+
+ TextField kennzeichenField = new TextField();
+ TextField startFlughafenField = new TextField();
+ TextField endFlughafenField = new TextField();
+ TextField startZeitField = new TextField();
+ TextField endZeitField = new TextField();
+ TextField anzahlLandungenField = new TextField("0");
+ TextField pilotField = new TextField();
+ DatePicker datumPicker = new DatePicker();
+ TextField unterschriftField = new TextField();
+
+ grid.add(createStyledLabel("Kennzeichen:"), 0, 0);
+ grid.add(kennzeichenField, 1, 0);
+ grid.add(createStyledLabel("Start Flughafen:"), 0, 1);
+ grid.add(startFlughafenField, 1, 1);
+ grid.add(createStyledLabel("End Flughafen:"), 0, 2);
+ grid.add(endFlughafenField, 1, 2);
+ grid.add(createStyledLabel("Startzeit:"), 0, 3);
+ grid.add(startZeitField, 1, 3);
+ grid.add(createStyledLabel("Endzeit:"), 0, 4);
+ grid.add(endZeitField, 1, 4);
+ grid.add(createStyledLabel("Anzahl Landungen:"), 0, 5);
+ grid.add(anzahlLandungenField, 1, 5);
+ grid.add(createStyledLabel("Pilot:"), 0, 6);
+ grid.add(pilotField, 1, 6);
+ grid.add(createStyledLabel("Datum:"), 0, 7);
+ grid.add(datumPicker, 1, 7);
+ grid.add(createStyledLabel("Unterschrift:"), 0, 8);
+ grid.add(unterschriftField, 1, 8);
+
+ Button startButton = new Button("Start");
+ Button gelandetButton = new Button("Gelandet");
+ Button endeButton = new Button("Ende");
+ Button speichernButton = new Button("Speichern");
+
+ HBox buttonBox = new HBox(10, startButton, gelandetButton, endeButton);
+ buttonBox.setAlignment(Pos.CENTER);
+ HBox saveButtonBox = new HBox(speichernButton);
+ saveButtonBox.setAlignment(Pos.CENTER);
+ saveButtonBox.setPadding(new Insets(10, 0, 0, 0));
+
+ grid.add(buttonBox, 1, 9);
+ grid.add(saveButtonBox, 1, 10);
+
+ startButton.setOnAction(e -> startZeitField.setText(java.time.LocalTime.now().toString()));
+ gelandetButton.setOnAction(e -> {
+ try {
+ int currentLandungen = Integer.parseInt(anzahlLandungenField.getText());
+ anzahlLandungenField.setText(Integer.toString(currentLandungen + 1));
+ } catch (NumberFormatException ex) {
+ anzahlLandungenField.setText("1");
+ }
+ });
+ endeButton.setOnAction(e -> endZeitField.setText(java.time.LocalTime.now().toString()));
+
+ speichernButton.setOnAction(e -> {
+ String kennzeichen = kennzeichenField.getText();
+ String startFlughafen = startFlughafenField.getText();
+ String endFlughafen = endFlughafenField.getText();
+ String startZeit = startZeitField.getText();
+ String endZeit = endZeitField.getText();
+ int anzahlLandungen = Integer.parseInt(anzahlLandungenField.getText());
+ String pilot = pilotField.getText();
+ String datum = datumPicker.getValue() != null ? datumPicker.getValue().toString() : "";
+ String unterschrift = unterschriftField.getText();
+
+ if (isInputValidLogbuch(pilot, unterschrift, startFlughafen, endFlughafen) && isAllFieldsFilled(kennzeichen,
+ startFlughafen, endFlughafen, startZeit, endZeit, pilot, datum, unterschrift)) {
+ Model.Logbuch.speichereLogbuchEintrag(kennzeichen, startFlughafen, endFlughafen, startZeit, endZeit,
+ anzahlLandungen, pilot, datum, unterschrift);
+ showAlert(Alert.AlertType.INFORMATION, "Erfolg", "Daten erfolgreich gespeichert");
+ }
+ });
+
+ return grid;
+ }
+
+ private boolean isInputValidLogbuch(String... inputs) {
+ Pattern numericPattern = Pattern.compile(".*\\d.*");
+
+ for (String input : inputs) {
+ if (input == null || input.trim().isEmpty()) {
+ showAlert(Alert.AlertType.ERROR, "Fehler", "Alle Felder müssen ausgefüllt sein.");
+ return false;
+ }
+ if (numericPattern.matcher(input).matches()) {
+ showAlert(Alert.AlertType.ERROR, "Fehler",
+ "In den Feldern Start Flughafen, End Flughafen, Pilot und Unterschrift dürfen keine Zahlen stehen.");
+ return false;
+ }
+ }
+ return true;
+ }
+
+ private boolean isAllFieldsFilled(String... fields) {
+ for (String field : fields) {
+ if (field == null || field.trim().isEmpty()) {
+ showAlert(Alert.AlertType.ERROR, "Fehler", "Alle Felder müssen ausgefüllt werden");
+ return false;
+ }
+ }
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/src/View/styles.css b/src/View/styles.css
new file mode 100644
index 0000000..42a8a5f
--- /dev/null
+++ b/src/View/styles.css
@@ -0,0 +1,32 @@
+.root {
+ -fx-font-family: "Arial";
+}
+
+.label {
+ -fx-font-size: 14.0px;
+ -fx-font-weight: bold;
+}
+
+.text-field {
+ -fx-background-color: #f0f0f0;
+ -fx-border-color: #d3d3d3;
+ -fx-border-radius: 3.0;
+ -fx-padding: 5.0 7.0 5.0 7.0;
+}
+
+.button {
+ -fx-background-color: #4CAF50;
+ -fx-text-fill: white;
+ -fx-padding: 8.0 15.0 8.0 15.0;
+ -fx-font-size: 14.0px;
+ -fx-background-radius: 5.0;
+}
+
+.button:hover {
+ -fx-background-color: #45a049;
+}
+
+.button-box {
+ -fx-spacing: 10.0;
+ -fx-padding: 10.0 0.0 0.0 0.0;
+}