Der erste Prototyp

Nach gut zwei Wochen ist der erste Prototyp mit der grundlegenden Funktionalität fertig programmiert und wird mittlerweile in der Bäckerei getestet.

Aufbau

Die einzelnen Menüs sind über Tabs gelöst. Nach dem Start der Applikation öffnet sich die Hauptseite und die Kundenverwaltung ist standardmäßig aktiv.

Kunden können bereits angelegt, bearbeitet oder gelöscht werden.

Analog verhält es sich mit den Produkten

und natürlich auch mit den zugehörigen Kategorien

Auch das Hinzufügen von Zutaten und das Erstellen von neuen Teigen samt der Rezeptur ist bereits implementiert

Auch können bereits Bestellungen für einen bestimmten Produktionstag angelegt werden

Im nächsten Schritt folgt die Implementierung des Produktion-Moduls.

JavaFX

Für die Erstellung der GUI wird das JavaFX Framework verwendet. Bei JavaFX handelt es sich um ein modernes GUI Framework, welches auch die Möglichkeit bietet GUIs durch eine deklarative Beschreibung in FXML (XML ähnlich) zu erstellen. Auch existiert mit dem Scene Builder (https://gluonhq.com/products/scene-builder/) ein nützlicher WYSIWYG Editor zur Erstellung.

Durch die Verwendung des MVC Patterns wird eine höhere Kohäsion und eine lose Kopplung der Komponenten erreicht. So kann die GUI Form unabhängig vom auszuführenden Code entwickelt werden. Auch eine spätere Anpassung oder ein Austausch der GUI ist so sehr einfach möglich, ohne dass vorhandener Code stark angepasst werden muss (Open-Closed Prinzip).

Zusätzliche Infos zu JavaFX und MVC: http://blog.axxg.de/model-view-controller-mit-javafx/

Einbindung von JavaFX in ein Gradle Projekt

Zur Einbindung von JavaFX in das bestehende Gradle Projekt wird die build.gradle entsprechend angepasst.

plugins {
    id 'java'
    id 'application'
    id 'org.openjfx.javafxplugin' version '0.0.8'
}

sowie

javafx {
    modules = [ 'javafx.controls', 'javafx.graphics', 'javafx.fxml']
    version = '13'
}

und als Dependency

dependencies {   
    ... 
    compile group: 'org.controlsfx', name: 'controlsfx', version: '11.0.1'
}

Damit ein erstelltes FatJar später auf allen drei Plattformen (Windows, Mac, Linux) verwendet werden kann muss noch folgendes hinzugefügt werden:

Bei den dependencies:

dependencies {
    runtimeOnly "org.openjfx:javafx-graphics:$javafx.version:win"
    runtimeOnly "org.openjfx:javafx-graphics:$javafx.version:linux"
    runtimeOnly "org.openjfx:javafx-graphics:$javafx.version:mac"
}

sowie

jar {
    manifest {
        attributes 'Main-Class': 'de.cod3cruncher.Launcher'
    }
    from {
        configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
    }
}

Verwendete Technologien

Für die Umsetzung der Software werden folgende Technologien verwendet

Programmiersprache

Die Programmierung erfolgt in Java (OpenJDK Corretto-11.06 LTS) und für die GUI kommt JavaFX in der Version 13 zum Einsatz.

IDE

Als Entwicklungsumgebung kommt IntelliJ in der Ultimate Edition zum Einsatz.

Versionsverwaltung

Die Versionsverwaltung erfolgt mittels Git (gehostet auf Github). Als Desktop Client wird GitKraken eingesetzt

Build-Tool

Es handelt sich um ein Gradle Projekt.

Datenbank

Als Datenbank wird eine SQLite3 Datenbank verwendet, welche mittels sqlite-jdbc v 3..30.1 angebunden wird.

Zusätzlich

  • TestDrivenDevelopment mittels JUnit in der Version 4.12
  • Google guava in der Version 28.2
  • PDF Generierung mittels itexpdf
  • apache.commons

Datenhaltung: Wie sollen die Daten gespeichert werden?

Zuerst soll die Entscheidung bezüglich der verwendeten Datenbanktechnologie getroffen werden.

Für die Wahl wurden nur relationale Datenbanksysteme in Betracht gezogen. Da die Anwendung lediglich von einem einzelnen Benutzer lokal verwendet wird, erfolgt die Datenhaltung durch eine SQLite 3 Datenbank.

Durch die Verwendung von SQLite wird kein Server benötigt.

Die Datenbankstruktur

Folgende Tabellen werden aktuell verwendet:

  • address: Repräsentiert die Adresse eines Kunden
  • customer: Kundendaten, jeder Kunde besitzt eine eindeutige ID (PK)
  • categories: Speicherung der Kategorien, besteht lediglich aus einem (unique) Namen und einer ID.
  • products: Darstellung der Produkte
  • product_categories: Zuordnung der Produkte und Kategorien
  • ingredients: Enthält die Zutaten
  • dough: repräsentiert die Teige mittels einer eindeutigen ID und einem Namen
  • dough_ingredients: Für jede Zutat eines Teiges wird hier ein Eintrag vorgenommen
  • orders: enthält alle Bestellungen
  • order_item: enthält für jede Bestellung die einzelnen Posten

Der Bäckerei-Manager: Die Idee

Für eine kleine Bäckerei soll eine Verwaltungssoftware auf Basis von Java programmiert werden.

Die Funktionalität

Mit Hilfe der Software soll die Produktion einer kleinen Bäckerei verwaltet werden.

Funktionen:

  • Verwaltung eines Kundenstamms: Anlegen, Bearbeiten, Löschen
  • Verwaltung von Produkten
  • Erstellung eines Kategoriesystems für die Produkte
  • Erfassen der verschiedenen Teigen samt ihrer Rezepte
  • Erfassen von Bestellungen der Kunden
  • Berechnung der benötigten Teigmenge für einen Produktionstag
  • Berechnung der Zutatenmenge für die benötigte Teigmenge
  • Statistiken: Meistverkaufte Produkte, ….

Kunden

Die Software verwaltet einen Kundenstamm. Entsprechend können Kunden samt ihrer Daten (Name, Adresse, ….) angelegt, bearbeitet und auch wieder gelöscht werden. Auch müssen Kunden anhand bestimmter Suchkriterien, wie zum Beispiel ihrem Namen oder Wohnort, gefiltert werden können.

Produkte und Kategorien

Die verfügbare Produktpalette der Bäckerei muss verwaltet werden. Dazu können neue Produkte angelegt und bestehende Produkte bearbeitet (inklusive Löschen) werden.

Ein Produkt muss dabei mindestens einer Kategorie zugeordnet werden.

Auch besteht jedes Produkt aus einem Teig und weist ein gewisses Teiggewicht auf, wodurch später eine Produktionsmenge bestimmt werden kann.

Teig

Die verschiedenen Teige werden samt ihrer Rezepte abgebildet. Dadurch kann für bestellte Produkte die benötigte Teigmenge genau und automatisiert berechnet werden.

Bestellung und Produktion

Für einen Produktionstag können Bestellungen der Kunden angelegt werden. Basierend auf den Bestellungen wird eine Produktionsliste für den jeweiligen Produktionstag berechnet. Für jeden Teig werden widerum die entsprechenden Zutatenverhältnisse bestimmt. Diese Produktionsliste muss als PDF erstellt werden.

Statistik

Die Software soll ebenfalls eine Statistik-Komponente enthalten. Damit lassen sich später über einen gewissen Zeitraum bestimmte Größen abfragen: Welche Produkte verkaufen sich am Besten? etc.