# Projektaufgabe – Entwicklung einer Werkstattverwaltungssoftware

Sie arbeiten als Softwareentwicklungs-Team in einem Unternehmen, das digitale Lösungen für kleine Betriebe entwickelt. Eine regionale Kfz-Werkstatt hat Sie beauftragt, eine Konsolenanwendung zu erstellen, mit der sie ihre täglichen Arbeitsabläufe digital verwalten kann. Die Daten sollen in einer Datenbank gespeichert werden.

## Auftrag des Kunden

### 1. Verwaltung der Personen, die Leistungen in Anspruch nehmen
Die Werkstatt möchte Informationen über ihre Kundschaft erfassen und abrufen können. Das System soll ermöglichen, neue Kunden anzulegen, vorhandene anzuzeigen und eine Übersicht aller erfassten Personen auszugeben.

### 2. Verwaltung der Fahrzeuge
Zu jeder Person können mehrere Fahrzeuge gehören. Das System soll das Anlegen neuer Fahrzeuge, das Anzeigen einzelner Fahrzeuge sowie eine Übersicht über alle Fahrzeuge einer bestimmten Person ermöglichen.

### 3. Dokumentation der Werkstattarbeiten
Für jedes Fahrzeug sollen Werkstattvorgänge angelegt und angezeigt werden können. Ein Werkstattvorgang besteht aus mehreren einzelnen Positionen, welche aus einem vordefinierten Katalog zu wählen sind

#### Vorgabekatalog für Leistungen und Preise

Die Werkstatt verwendet einen festen Leistungskatalog mit einheitlichen Preisen. Diese werden vorab in der Datenbank hinterlegt.

Der Katalog enthält folgende Positionen:

| Leistung                           | Preis pro Einheit |
|------------------------------------|-------------------|
| Ölwechsel                           | 89.00 €           |
| Bremsflüssigkeit wechseln           | 59.00 €           |
| Reifen wechseln (pro Stück)         | 18.00 €           |
| Klimaanlagen-Service                | 99.00 €           |
| Bremsbeläge erneuern vorne          | 149.00 €          |
| Zündkerzen austauschen              | 79.00 €           |
| Diagnose / Fehlerspeicher auslesen  | 25.00 €           |
| Arbeitszeit pro Stunde              | 75.00 €           |


### 4. Einsicht in Werkstattvorgänge
Alle erfassten Vorgänge sollen einzeln einsehbar sein. Dabei sollen folgende Informationen angezeigt werden können:
- alle erfassten Positionen eines Vorgangs inkl. Preis,
- die automatisch berechnete Gesamtsumme,
- das zugehörige Fahrzeug und die zugehörige Person.

## Datenhaltung

Alle Daten sollen dauerhaft in einer relationalen Datenbank gespeichert werden. Die Struktur der Datenbank (Tabellen, Beziehungen) ist auf Basis der fachlichen Anforderungen selbst zu entwickeln.

## Bedienoberfläche

Alle Funktionen sollen über ein verständliches, klar strukturiertes Konsolenmenü steuerbar sein.

## Technische Anforderungen

- Java-Konsolenanwendung
- Objektorientierte Programmierung
- Verwendung einer relationalen Datenbank
- Datenbankzugriff mit JDBC
- Verwendung eines festen Leistungskatalogs
- Sinnvolle Trennung von Logik und Datenzugriff
- Fehlerbehandlung für Nutzereingaben
- Übersichtlicher, gut strukturierter Code

## Liefergegenstände
Für die Colloboration und die Abgabe ist ein git Repository anzulegen. Die Lehrkraft ist dem Repository als Bearbeiter hinzuzufügen. Follgendes ist hierbei abzugeben:

- Vollständiger Source-Code als Maven-Projekt
- SQL-Skript zum Erstellen der Datenbanktabellen
- ER-Modell
- UML-Diagramm
- Kunden Domumentation als README
- Javadoc als HTML-Dokumentation

## Zusatzaufgaben (für Notenverbesserung über 1,5 hinaus)

Durch die vollständige und korrekte Umsetzung der regulären Anforderungen kann eine maximale Note von **1,5** erreicht werden.  
Für eine darüber hinausgehende Bewertung können zusätzlich folgende Erweiterungen umgesetzt werden:

- **Laden des Leistungskatalogs aus einer Datei**  
  (z. B. JSON oder CSV statt statischer Daten)

- **Rechnungserstellung**  
  Erzeugung eines strukturierten, druckfähigen Dokuments  
  (z. B. Textdatei, Markdown oder einfache PDF-Ausgabe)

- **Zugangsbeschränkung für Mitarbeiter**  
  Implementierung eines einfachen Login-Systems  
  (Nutzerverwaltung + Passwortprüfung)

- **Unit-Tests**  
  Testabdeckung von **> 90 %** der zentralen Funktionen

- **Testen mit gemockter Datenbank**  
  Nutzung von Mocks oder In-Memory-Datenbank zur Simulation der Datenhaltung

- **Datenexport**  
  Export von Vorgängen oder Kundendaten in JSON-, CSV- oder Textdateien

- **Logging**  
  Protokollierung aller Aktionen in einer Logdatei (z. B. mit einfachem File-Logger)


## Bewertungskriterien

- Qualität und Vollständigkeit des Datenmodells
- Saubere objektorientierte Struktur
- Funktionierende Datenbankanbindung
- Umsetzung des Leistungskatalogs
- Bedienbarkeit und Menüführung
- Code-Stil und Robustheit
- Qualität der Dokumentation
