Esempio pratico realistico di automazione della gestione delle prenotazioni online per corse su linee di trasporto pubblico (es. autobus extraurbani, navette aeroportuali, traghetti locali, treni regionali con prenotazione posti).
1. Analisi del problema.
Un’azienda di trasporto deve gestire:
- Linee di trasporto
- Corse giornaliere
- Mezzi utilizzati
- Passeggeri
- Prenotazioni posti
Il sistema deve permettere di:
- Prenotare un posto su una corsa
- Controllare disponibilità
- Evitare overbooking
- Gestire pagamenti
- Generare report utilizzo mezzi
2. Modellazione concettuale.
Entità principali
- Passeggero
- Linea
- Corsa
- Mezzo
- Prenotazione
- Pagamento
Relazioni
- Una linea ha più corse
- Una corsa utilizza un mezzo
- Un passeggero può effettuare più prenotazioni
- Una corsa ha più prenotazioni
3. Struttura database (Esempio SQL).
Tabella Passeggeri
CREATE TABLE Passeggeri (
id_passeggero INT PRIMARY KEY,
nome VARCHAR(50),
cognome VARCHAR(50),
email VARCHAR(100),
telefono VARCHAR(20)
);
Tabella Linee
CREATE TABLE Linee (
id_linea INT PRIMARY KEY,
nome_linea VARCHAR(50),
partenza VARCHAR(50),
arrivo VARCHAR(50)
);
Tabella Mezzi
CREATE TABLE Mezzi (
id_mezzo INT PRIMARY KEY,
modello VARCHAR(50),
posti_totali INT
);
Tabella Corse
CREATE TABLE Corse (
id_corsa INT PRIMARY KEY,
id_linea INT,
id_mezzo INT,
data_corsa DATE,
orario TIME,
FOREIGN KEY (id_linea) REFERENCES Linee(id_linea),
FOREIGN KEY (id_mezzo) REFERENCES Mezzi(id_mezzo)
);
Tabella Prenotazioni
CREATE TABLE Prenotazioni (
id_prenotazione INT PRIMARY KEY,
id_passeggero INT,
id_corsa INT,
numero_posti INT,
FOREIGN KEY (id_passeggero) REFERENCES Passeggeri(id_passeggero),
FOREIGN KEY (id_corsa) REFERENCES Corse(id_corsa)
);
Tabella Pagamenti
CREATE TABLE Pagamenti (
id_pagamento INT PRIMARY KEY,
id_prenotazione INT,
importo DECIMAL(8,2),
metodo VARCHAR(50),
stato VARCHAR(30),
FOREIGN KEY (id_prenotazione) REFERENCES Prenotazioni(id_prenotazione)
);
4. Automazioni pratiche.
Inserimento nuova corsa
INSERT INTO Corse
VALUES (10, 2, 5, ‘2026-03-20′, ’08:30’);
Corsa sulla linea 2 con mezzo 5.
Prenotazione posti
INSERT INTO Prenotazioni
VALUES (100, 7, 10, 2);
Il passeggero 7 prenota 2 posti sulla corsa 10.
Controllo disponibilità posti
SELECT
M.posti_totali – COALESCE(SUM(P.numero_posti),0) AS posti_disponibili
FROM Corse C
JOIN Mezzi M ON C.id_mezzo = M.id_mezzo
LEFT JOIN Prenotazioni P ON C.id_corsa = P.id_corsa
WHERE C.id_corsa = 10
GROUP BY M.posti_totali;
Elenco passeggeri di una corsa
SELECT Pa.nome, Pa.cognome
FROM Prenotazioni Pr
JOIN Passeggeri Pa ON Pr.id_passeggero = Pa.id_passeggero
WHERE Pr.id_corsa = 10;
Report utilizzo linee
SELECT L.nome_linea, COUNT(Pr.id_prenotazione) AS totale_prenotazioni
FROM Prenotazioni Pr
JOIN Corse C ON Pr.id_corsa = C.id_corsa
JOIN Linee L ON C.id_linea = L.id_linea
GROUP BY L.nome_linea;
5. Automazione avanzata (Trigger anti-overbooking).
CREATE TRIGGER controllo_posti
BEFORE INSERT ON Prenotazioni
FOR EACH ROW
BEGIN
DECLARE posti_prenotati INT;
DECLARE posti_totali INT;
SELECT COALESCE(SUM(numero_posti),0)
INTO posti_prenotati
FROM Prenotazioni
WHERE id_corsa = NEW.id_corsa;
SELECT posti_totali
INTO posti_totali
FROM Corse C
JOIN Mezzi M ON C.id_mezzo = M.id_mezzo
WHERE C.id_corsa = NEW.id_corsa;
IF posti_prenotati + NEW.numero_posti > posti_totali THEN
SIGNAL SQLSTATE ‘45000’
SET MESSAGE_TEXT = ‘Posti non disponibili’;
END IF;
END;
Blocca prenotazioni oltre la capienza del mezzo.
6. Caso pratico reale.
Scenario.
Linea autobus:
- Venezia → Trieste
- Autobus con 50 posti
- 3 corse giornaliere
Processo automatizzato
- Cliente seleziona linea e orario
- Sistema verifica posti disponibili
- Cliente prenota e paga online
- Sistema genera biglietto digitale
- Autista visualizza elenco passeggeri
7. Funzionalità realistiche aggiuntive.
Sistema reale potrebbe includere:
- Selezione posto numerato
- QR code per accesso al mezzo
- Gestione abbonamenti
- Rimborso e modifiche prenotazione
- Tracking mezzi in tempo reale
- Notifiche ritardi
- Lista attesa automatica
- Tariffe dinamiche
8. Possibile architettura software.
Stack realistico:
- Database → PostgreSQL / MySQL
- Backend → Java Spring / Node.js / Python
- Frontend → Web app / App mobile
- Integrazione pagamento → Stripe / PayPal
- API → sistemi bigliettazione e tracking GPS
Mini riassunto.
L’automazione consente di:
- Gestire corse e linee
- Prenotare posti online
- Controllare disponibilità
- Evitare overbooking
- Automatizzare pagamenti
- Generare report operativi
