Progetto sviluppato per il corso di Ingegneria del Software.
Linguaggio di programmazione utilizzato: Java
Database: Relazionale (MySQL)
Architettura: BCED (Boundary Control Entity Database)
Containerizzazione: Docker
.
├── GestioneRistorante/
│ ├── src/
│ │ ├── boundary/ # Contiene le classi per l'interfaccia utente e gestione dell'input/output
│ │ ├── CFG/ # Connessione al database
│ │ ├── control/ # Coordina le operazioni
│ │ ├── database/ # Gestisce le query al database MySQL
│ │ ├── DTO/ # Data Transfer Objects per il trasferimento di dati tra i vari strati
│ │ ├── entity/ # Definisce le entità di dominio e loro relazioni
│ │ ├── Exceptions/ # Contiene le classi per la gestione personalizzata delle eccezioni
│ │ ├── resources/ # Risorse statiche come immagini, icone e file di testo
│ │ ├── test/ # Test unitari e di integrazione
│ │ └── utility/ # Contiene classi di utility per la gestione delle icone SVG e generazione PDF
│ └── bin/
├── SQL/
│ ├── init/
│ └── seeding/
├── docker/
├── images/
└── pom.xmlIl progetto implementa l'architettura BCED (Boundary Control Entity Database):
- Boundary: Gestisce l'interazione con l'utente attraverso l'interfaccia grafica Swing
- Control: Implementa la logica di business e coordina il flusso tra interfaccia e entità
- Entity: Rappresenta le entità del dominio e le loro relazioni
- Database: Gestisce la persistenza dei dati attraverso il database MySQL
Questa architettura favorisce la separazione delle responsabilità e migliora la manutenibilità del codice.
- Java 11 → Linguaggio di programmazione principale del progetto
- MySQL 8.0 → Sistema di gestione database relazionale per la persistenza dei dati
- Swing → Libreria grafica Java per la creazione dell'interfaccia utente
- JDBC 8.0.26 → Connettore Java per l'interazione con il database MySQL
- Docker 20.10 → Piattaforma per la containerizzazione dell'applicazione
La schermata iniziale consente ad ogni tipo di utente (cameriere, cuoco, cassiere, direttore) l'accesso alle funzionalità appropriate per il proprio ruolo.
L'interfaccia del cameriere permette di gestire le ordinazioni dei clienti. È possibile creare nuovi ordini, associarli ai tavoli, modificare elementi e inviare le richieste direttamente alla cucina.
Il modulo dedicato ai cuochi visualizza in tempo reale gli ordini ricevuti, organizzandoli per tempo di attesa. Il cuoco può segnare i piatti come "in preparazione" o "completati", aggiornando automaticamente lo stato dell'ordine e visualizzare dettagli relativi alle pietanze ordinate.
L'interfaccia del cassiere gestisce i pagamenti e l'emissione degli scontrini. Il sistema calcola automaticamente il conto in base agli ordini associati al tavolo, supportando la creazione PDF dello scontrino.
Il pannello amministrativo consente al direttore di monitorare l'andamento del ristorante e controllare le scorte. Include strumenti per la generazione di report per gli ingredienti da riordinare.
Il progetto è completamente dockerizzato per facilitare l'installazione e garantire lo stesso ambiente di esecuzione su qualsiasi piattaforma. Include:
- Container per l'applicazione Java con interfaccia Swing
- Container per il database MySQL
- Container per phpMyAdmin (per la gestione web del database)
Il sistema utilizza variabili d'ambiente definite nel file .env per configurare l'applicazione:
# Database
DATABASE_URL=jdbc:mysql://db:3306/ristorante
DATABASE_USER=root
DATABASE_PASSWORD=password
# Porte
JAVA_APP_PORT=8090
PHPMYADMIN_PORT=8081
Puoi modificare queste variabili nel file .env per personalizzare la configurazione.
MYSQL_ROOT_PASSWORD: Password dell'utente root del databaseMYSQL_DATABASE: Nome del databaseMYSQL_USER: Nome dell'utente aggiuntivo (non utilizzato nella connessione attuale)MYSQL_PASSWORD: Password dell'utente aggiuntivo
DATABASE_URL: URL JDBC per la connessione al databaseDATABASE_USER: Utente per la connessione al database (impostato su root)DATABASE_PASSWORD: Password per la connessione al database
PHPMYADMIN_PORT: Porta per accedere a phpMyAdminJAVA_APP_PORT: Porta esposta per l'applicazione Java
-
macOS:
- Docker Desktop
- XQuartz (per l'interfaccia grafica)
-
Windows:
- Docker Desktop
- VcXsrv Windows X Server (per l'interfaccia grafica)
chmod +x avvia-app-rebuild.sh
./avvia-app-rebuild.shQuesto script si occuperà di:
- Configurare X11 (XQuartz) per la visualizzazione dell'interfaccia grafica
- Fermare eventuali container in esecuzione
- Ricostruire i container (elimina anche i dati esistenti)
- Mostrare i log dell'applicazione
-
Compila l'applicazione Java (usa Git Bash o WSL):
chmod +x compile.sh ./compile.sh
-
Costruisci e avvia i container:
docker compose build --no-cache docker compose up -d
Se tutto è configurato correttamente, la GUI Java Swing apparirà automaticamente sul desktop di Windows tramite VcXsrv.
Prima di avviare i container, compila l'applicazione:
chmod +x compile.sh
./compile.shchmod +x setup-x11-macos.sh
./setup-x11-macos.shchmod +x docker-utils.sh
./docker-utils.sh startQuesto comando avvierà:
- Un container MySQL con il database ristorante
- Un container per l'applicazione Java con GUI
- Un container phpMyAdmin per gestire facilmente il database
Utilizza lo script docker-utils.sh per gestire facilmente tutti gli aspetti del sistema:
# Per vedere i log dell'applicazione
./docker-utils.sh logs
# Per riavviare i container (mantenendo i dati)
./docker-utils.sh restart
# Per vedere lo stato dei container
./docker-utils.sh status
# Per accedere alla console MySQL
./docker-utils.sh db-consolePer gestire il database tramite interfaccia web, accedi a:
- URL: http://localhost:8081
- Username: root
- Password: password
./docker-utils.sh stopPer rimuovere anche i volumi (dati del database):
./docker-utils.sh rebuildSe l'interfaccia grafica non appare:
# Riconfigurare X11 e riavviare i container
./setup-x11-macos.sh
./docker-utils.sh restart
# Controllare i log per eventuali errori
./docker-utils.sh logsSu macOS se l'interfaccia grafica non appare ma i container si avviano correttamente:
export DISPLAY=:0oppure
export DISPLAY=localhost:0# Controlla i log del database
./docker-utils.sh db-logs
# Verifica se il container database è in salute
./docker-utils.sh status
# In caso di persistenti problemi, ricostruisci i container
./avvia-app-rebuild.sh- Verifica di avere installato JDK 11 o superiore:
java -version - Controlla eventuali errori nei sorgenti Java
- Verifica che il driver MySQL sia stato scaricato correttamente in
GestioneRistorante/bin/jars/
Per informazioni più dettagliate, consultare i seguenti documenti:
- GUI-Docker.md: Guida dettagliata per la configurazione dell'interfaccia grafica in Docker per macOS e Windows
- TESTING.md: Guide per testing e configurazione dell'ambiente di sviluppo, inclusa la configurazione di IntelliJ IDEA




