diff --git a/Pflichtenheft_GruppeD.md b/Pflichtenheft_GruppeD.md index d156149..f0158e6 100644 --- a/Pflichtenheft_GruppeD.md +++ b/Pflichtenheft_GruppeD.md @@ -3,7 +3,7 @@ title: "Pflichtenheft" subtitle: "Desktop-Fakturierungsanwendung — Gruppe D: Programmoberfläche" author: - Team 1 – Gruppe D -version: "1.0" +version: "1.1" lang: de-DE toc: true toc-depth: 3 @@ -14,7 +14,7 @@ fontsize: 12pt linestretch: 1.5 mainfont: "Times New Roman" sansfont: "Arial" -monofont: "DejaVu Sans Mono" +monofont: "Menlo" header-includes: | \usepackage{fancyhdr} \usepackage{lastpage} @@ -22,7 +22,7 @@ header-includes: | \fancyhf{} \fancyhead[L]{Team 1 – Gruppe D} \fancyhead[C]{Pflichtenheft} - \fancyhead[R]{Version 1.0} + \fancyhead[R]{Version 1.1} \fancyfoot[C]{\thepage\ /\ \pageref{LastPage}} \renewcommand{\headrulewidth}{0.4pt} \renewcommand{\footrulewidth}{0pt} @@ -39,7 +39,7 @@ header-includes: | +-----------------------------+-------------------------+-------------------------+ | Gruppe D (Oberfläche) | Modulverantwortlicher | Modulverantwortlicher | +-----------------------------+-------------------------+-------------------------+ -| 10.06.2026 | 10.06.2026 | 10.06.2026 | +| 13.06.2026 | 13.06.2026 | 13.06.2026 | +-----------------------------+-------------------------+-------------------------+ **Freigabevermerk:** Dieses Dokument ist nach Prüfung und Freigabe durch den @@ -51,6 +51,7 @@ und den Modultest der Komponente *Programmoberfläche*. | Version | Datum | Autor | Grund der Änderung | |---------|------------|----------------------------------------------|---------------------| | 1.0 | 10.06.2026 | Mirkan Güngör, Moritz König, Mohammed Bouhki | Initiale Erstellung | +| 1.1 | 13.06.2026 | Mirkan Güngör, Moritz König, Mohammed Bouhki | Einfügen der UML-Diagramme und Aktualisierung der Referenzen | \newpage @@ -100,7 +101,7 @@ Kapitel 11. ### 1.5 Referenzen - Lastenheft „Desktop-Fakturierungsanwendung", Team 1, Version 1.3, 09.06.2026 - Project Charter, Team 1, Version 1.3, 14.05.2026 -- Pflichtenheft Gruppe A „Prozess / Dokumentenzyklus", Version 1.0, 09.06.2026 +- Pflichtenheft Gruppe A „Prozess / Dokumentenzyklus", Version 1.1, 13.06.2026 - Pflichtenheft Gruppe B „Verwaltung von Produkten", Version 1.0, 10.06.2026 - Pflichtenheft Gruppe C „Verwaltung von Kunden", Version 1.0, 10.06.2026 - Vorlesungsunterlagen Software Engineering 1 (SoSe 2026), Foliensatz „Lasten- und Pflichtenheft" @@ -333,10 +334,13 @@ auslösenden Aktionen an (F-07). **Interne Schnittstellen (genutzte Dienste der anderen Komponenten), als Java-Interfaces skizziert:** +Hinweis: `PositionsEingabe` ist das UI-interne Modell der Gruppe D und wird im +Controller vor dem Aufruf der Gruppe-A-Schnittstelle in `Positionsangabe` umgewandelt. + ```java // Gruppe A — Dokumentenzyklus (genutzt von F-06 bis F-15) public interface DokumentService { - Rechnung erstelleRechnung(String kundenNr, List positionen, + Rechnung erstelleRechnung(String kundenNr, List positionen, LocalDate rechnungsdatum, LocalDate zahlungsziel); void storniere(String rechnungsnummer); List alleDokumente(); @@ -379,9 +383,7 @@ von GUI-Framework-Klassen und damit im Modultest ohne Oberfläche prüfbar. ### 7.1 Klassendiagramm - - -![Abbildung 1: UML-Klassendiagramm Programmoberfläche (Gruppe D)] +![UML-Klassendiagramm Programmoberfläche (Gruppe D)](diagramme/klassendiagramm_programmoberflaeche.png) **Beschreibung zu Abbildung 1:** Das Klassendiagramm zeigt die View- und Controller-Schicht der Oberfläche. Das `HauptFenster` (ein `JFrame`) verwaltet die Navigation (F-01, F-02): es @@ -398,9 +400,7 @@ einheitlich über die Klasse `Meldung` dargestellt (F-16, F-17). ### 7.2 Sequenzdiagramm - - -![Abbildung 2: UML-Sequenzdiagramm „Geführte Rechnungserstellung (Wizard)" (Gruppe D)] +![UML-Sequenzdiagramm Rechnungserstellung (Gruppe D)](diagramme/sequenz_rechnungserstellung_wizard_gruppeD.png) **Beschreibung zu Abbildung 2:** Das Sequenzdiagramm stellt die Dialogfolge *geführte Rechnungserstellung* dar. Die Anwender:in startet den Wizard; der diff --git a/Pflichtenheft_GruppeD.pdf b/Pflichtenheft_GruppeD.pdf index 65cc125..fbe1b3b 100644 Binary files a/Pflichtenheft_GruppeD.pdf and b/Pflichtenheft_GruppeD.pdf differ diff --git a/diagramme/klassendiagramm_programmoberflaeche.png b/diagramme/klassendiagramm_programmoberflaeche.png new file mode 100644 index 0000000..84a5512 Binary files /dev/null and b/diagramme/klassendiagramm_programmoberflaeche.png differ diff --git a/diagramme/klassendiagramm_programmoberflaeche.puml b/diagramme/klassendiagramm_programmoberflaeche.puml new file mode 100644 index 0000000..dc68a07 --- /dev/null +++ b/diagramme/klassendiagramm_programmoberflaeche.puml @@ -0,0 +1,106 @@ +@startuml +!pragma layout smetana +title UML-Klassendiagramm Programmoberflaeche (Gruppe D) +skinparam classAttributeIconSize 0 +skinparam linetype ortho + +package "gui" { + class HauptFenster { + - aktuellesModul : String + - wechsleZu(String) + } + + interface ModulPanel { + + aktualisiere() + + hatUngespeicherteAenderungen() : boolean + } + + class KundenPanel + class ProduktPanel + class DokumentListenPanel + class RechnungsWizardDialog + + class StammdatenController { + + kundenListe(String) : List + + produkteListe(String) : List + } + + class DokumentListenController { + + gefiltert(DokumentStatus) : List + + aktionenFuer(Dokument) : BelegAktionen + + storniere(String, boolean) : Meldung + } + + class RechnungsWizardController { + + weiter() : boolean + + zurueck() + + erzeugeZusammenfassung() : String + + speichern() : Meldung + } + + class RechnungsWizardModel { + - aktuellerSchritt : WizardSchritt + - kundenNr : String + - positionen : List + - rechnungsdatum : LocalDate + - zahlungsziel : LocalDate + } + + enum WizardSchritt { + KUNDE_WAEHLEN + POSITIONEN_ERFASSEN + DATEN_BESTAETIGEN + ZUSAMMENFASSUNG + SPEICHERN + } + + class Meldung { + - typ : MeldungsTyp + - feldname : String + - text : String + } + + class BelegAktionen + class PositionsEingabe +} + +package "Schnittstellen Gruppen A-C" { + interface DokumentService + interface KundenService + interface ProduktService +} + +package "gemeinsam" { + class EreignisBus +} + +ModulPanel <|.. KundenPanel +ModulPanel <|.. ProduktPanel +ModulPanel <|.. DokumentListenPanel + +HauptFenster *-- KundenPanel +HauptFenster *-- ProduktPanel +HauptFenster *-- DokumentListenPanel + +KundenPanel --> StammdatenController +ProduktPanel --> StammdatenController +DokumentListenPanel --> DokumentListenController +RechnungsWizardDialog --> RechnungsWizardController + +StammdatenController --> KundenService +StammdatenController --> ProduktService +DokumentListenController --> DokumentService +RechnungsWizardController --> DokumentService +RechnungsWizardController --> KundenService +RechnungsWizardController --> ProduktService + +RechnungsWizardController *-- RechnungsWizardModel +RechnungsWizardModel --> WizardSchritt +RechnungsWizardModel *-- PositionsEingabe +RechnungsWizardController --> Meldung +DokumentListenController --> BelegAktionen + +KundenPanel ..> EreignisBus : aktualisiert +ProduktPanel ..> EreignisBus : aktualisiert +DokumentListenPanel ..> EreignisBus : aktualisiert +@enduml diff --git a/diagramme/sequenz_rechnungserstellung_wizard_gruppeD.png b/diagramme/sequenz_rechnungserstellung_wizard_gruppeD.png new file mode 100644 index 0000000..dc909e9 Binary files /dev/null and b/diagramme/sequenz_rechnungserstellung_wizard_gruppeD.png differ diff --git a/diagramme/sequenz_rechnungserstellung_wizard_gruppeD.puml b/diagramme/sequenz_rechnungserstellung_wizard_gruppeD.puml new file mode 100644 index 0000000..49f5aab --- /dev/null +++ b/diagramme/sequenz_rechnungserstellung_wizard_gruppeD.puml @@ -0,0 +1,53 @@ +@startuml +title UML-Sequenzdiagramm Gefuehrte Rechnungserstellung (Gruppe D) +autonumber + +actor "Anwender:in" as Anw +boundary "RechnungsWizardDialog" as Dialog +control "RechnungsWizardController" as Controller +participant "KundenService\n(Gruppe C)" as Kunden +participant "ProduktService\n(Gruppe B)" as Produkte +participant "DokumentService\n(Gruppe A)" as Dokumente + +Anw -> Dialog : Wizard starten +Dialog -> Controller : getModel() +Controller --> Dialog : aktuellerSchritt = KUNDE_WAEHLEN +Dialog --> Anw : Schritt 1: Kunde waehlen + +Anw -> Dialog : Kunde suchen und auswaehlen +Dialog -> Kunden : suche(suchbegriff) +Kunden --> Dialog : List +Dialog -> Controller : weiter() +Controller --> Dialog : Schritt 2 anzeigen + +Anw -> Dialog : Produktposition und Menge erfassen +Dialog -> Produkte : suche(suchbegriff) +Produkte --> Dialog : List +Dialog -> Controller : weiter() + +alt Position fehlt oder Menge <= 0 + Controller --> Dialog : Meldung mit Feldname + Dialog --> Anw : Feld markieren und Meldung anzeigen +else Eingabe vollstaendig + Controller --> Dialog : Schritt 3 anzeigen +end + +Anw -> Dialog : Rechnungsdatum und Zahlungsziel bestaetigen +Dialog -> Controller : weiter() +Controller --> Dialog : Schritt 4 anzeigen + +Dialog -> Controller : erzeugeZusammenfassung() +Controller -> Kunden : findeKunde(kundennummer) +Controller -> Produkte : findeProdukt(produktnummer) +Controller -> Dokumente : berechneSummen(positionen) +Dokumente --> Controller : Summen +Controller --> Dialog : Zusammenfassung +Dialog --> Anw : Zusammenfassung anzeigen + +Anw -> Dialog : Speichern bestaetigen +Dialog -> Controller : speichern() +Controller -> Dokumente : erstelleRechnung(kundenNr, positionen,\nrechnungsdatum, zahlungsziel) +Dokumente --> Controller : Rechnung mit Rechnungsnummer +Controller --> Dialog : Erfolgsmeldung +Dialog --> Anw : Rechnungsnummer anzeigen +@enduml