🏨 Sistema Prenotazioni Hotel con Dizionari Python
Gestisci prenotazioni, stanze e clienti con strutture dati avanzate
Introduzione
Benvenuto in questa esercitazione pratica sui dizionari Python! Costruiremo un sistema di prenotazione hotel completo che utilizza dizionari annidati, funzioni e logica intelligente per gestire stanze, clienti e prenotazioni.
Scenario Reale:
Lavorerai come sviluppatore per una catena hotel che ha bisogno di un sistema di prenotazione automatizzato. Userai dizionari per memorizzare dati complessi e funzioni per gestire le operazioni.
Lavorerai come sviluppatore per una catena hotel che ha bisogno di un sistema di prenotazione automatizzato. Userai dizionari per memorizzare dati complessi e funzioni per gestire le operazioni.
⚠️ ATTENZIONE: COPIA BLOCCATA
Il codice è protetto da sistema anti-copia. Dovrai SCRIVERE manualmente tutto il codice per imparare veramente! 🚫📋
Parte 1: Creazione Struttura Dati Hotel
▶ Dizionario delle Stanze
1
Crea una nuova cella su Google Colab e definisci le stanze:
Crea una nuova cella su Google Colab e definisci le stanze:
PYTHON
# CREAZIONE DIZIONARIO STANZE HOTEL
stanze_hotel = {
101: {"tipo": "Singola", "prezzo": 80, "disponibile": True, "servizi": ["TV", "WiFi"]},
102: {"tipo": "Singola", "prezzo": 80, "disponibile": True, "servizi": ["TV", "WiFi"]},
103: {"tipo": "Doppia", "prezzo": 120, "disponibile": True, "servizi": ["TV", "WiFi", "Minibar"]},
104: {"tipo": "Doppia", "prezzo": 120, "disponibile": False, "servizi": ["TV", "WiFi", "Minibar"]},
201: {"tipo": "Suite", "prezzo": 200, "disponibile": True, "servizi": ["TV", "WiFi", "Minibar", "Jacuzzi"]},
202: {"tipo": "Suite", "prezzo": 200, "disponibile": True, "servizi": ["TV", "WiFi", "Minibar", "Jacuzzi"]},
203: {"tipo": "Familiare", "prezzo": 180, "disponibile": True, "servizi": ["TV", "WiFi", "2 Letti Extra"]},
204: {"tipo": "Familiare", "prezzo": 180, "disponibile": False, "servizi": ["TV", "WiFi", "2 Letti Extra"]}
}
print("🏨 CATALOGO STANZE HOTEL")
print("="*50)
for numero, info in stanze_hotel.items():
stato = "✅ DISPONIBILE" if info["disponibile"] else "❌ OCCUPATA"
print(f"Stanza {numero}: {info['tipo']} - €{info['prezzo']}/notte - {stato}")
print(f" Servizi: {', '.join(info['servizi'])}")
print()
▶ Dizionario Clienti e Prenotazioni
2
Crea le strutture per clienti e prenotazioni:
Crea le strutture per clienti e prenotazioni:
PYTHON
# 2. DIZIONARI PER CLIENTI E PRENOTAZIONI
clienti = {
1001: {"nome": "Mario Rossi", "email": "mario@email.com", "telefono": "3331234567"},
1002: {"nome": "Laura Bianchi", "email": "laura@email.com", "telefono": "3347654321"},
1003: {"nome": "Giuseppe Verdi", "email": "giuseppe@email.com", "telefono": "3359876543"}
}
prenotazioni = {
5001: {"id_cliente": 1001, "stanza": 101, "notti": 3, "totale": 240},
5002: {"id_cliente": 1002, "stanza": 103, "notti": 5, "totale": 600},
5003: {"id_cliente": 1003, "stanza": 201, "notti": 2, "totale": 400}
}
print("\n📋 REGISTRO CLIENTI")
print("="*50)
for id_cliente, info in clienti.items():
print(f"ID: {id_cliente} - Nome: {info['nome']}")
print(f" Email: {info['email']} - Tel: {info['telefono']}")
print()
Parte 2: Funzioni per Gestione Intelligente
▶ Funzione per Cercare Stanze Disponibili
3
Crea funzioni per gestire l'hotel:
Crea funzioni per gestire l'hotel:
PYTHON
# 3. FUNZIONI PER GESTIONE HOTEL
def cerca_stanze_disponibili(tipo=None, prezzo_max=None):
"""
Cerca stanze disponibili con filtri opzionali
"""
print(f"\n🔍 CERCA STANZE DISPONIBILI" + "="*40)
stanze_trovate = []
for numero, info in stanze_hotel.items():
if info["disponibile"]:
# Applica filtri se specificati
if tipo and info["tipo"] != tipo:
continue
if prezzo_max and info["prezzo"] > prezzo_max:
continue
stanze_trovate.append((numero, info))
if stanze_trovate:
for numero, info in stanze_trovate:
print(f"Stanza {numero}: {info['tipo']} - €{info['prezzo']}/notte")
print(f" Servizi: {', '.join(info['servizi'])}")
print(f"\n📊 Trovate {len(stanze_trovate)} stanze disponibili")
else:
print("❌ Nessuna stanza disponibile con i filtri selezionati")
return stanze_trovate
# Test della funzione
print("Test 1 - Tutte le stanze disponibili:")
cerca_stanze_disponibili()
print("\nTest 2 - Solo Suite disponibili:")
cerca_stanze_disponibili(tipo="Suite")
print("\nTest 3 - Stanze sotto €150:")
cerca_stanze_disponibili(prezzo_max=150)
Parte 3: Sistema di Prenotazione
▶ Funzione per Prenotare una Stanza
4
Crea la funzione di prenotazione:
Crea la funzione di prenotazione:
PYTHON
# 4. FUNZIONE PER PRENOTARE STANZA
def prenota_stanza(id_cliente, numero_stanza, notti):
"""
Prenota una stanza per un cliente
"""
print(f"\n📅 NUOVA PRENOTAZIONE" + "="*45)
# Controlla se il cliente esiste
if id_cliente not in clienti:
print(f"❌ Cliente ID {id_cliente} non trovato!")
return False
# Controlla se la stanza esiste ed è disponibile
if numero_stanza not in stanze_hotel:
print(f"❌ Stanza {numero_stanza} non esiste!")
return False
if not stanze_hotel[numero_stanza]["disponibile"]:
print(f"❌ Stanza {numero_stanza} non disponibile!")
return False
# Calcola totale
prezzo_notte = stanze_hotel[numero_stanza]["prezzo"]
totale = prezzo_notte * notti
# Crea nuova prenotazione
nuova_prenotazione_id = max(prenotazioni.keys()) + 1 if prenotazioni else 5001
prenotazioni[nuova_prenotazione_id] = {
"id_cliente": id_cliente,
"stanza": numero_stanza,
"notti": notti,
"totale": totale
}
# Aggiorna stato stanza
stanze_hotel[numero_stanza]["disponibile"] = False
# Mostra conferma
cliente = clienti[id_cliente]
stanza = stanze_hotel[numero_stanza]
print(f"✅ PRENOTAZIONE CONFERMATA!")
print(f" ID Prenotazione: {nuova_prenotazione_id}")
print(f" Cliente: {cliente['nome']}")
print(f" Stanza: {numero_stanza} ({stanza['tipo']})")
print(f" Notti: {notti}")
print(f" Prezzo per notte: €{prezzo_notte}")
print(f" TOTALE: €{totale}")
print(f" Servizi inclusi: {', '.join(stanza['servizi'])}")
return nuova_prenotazione_id
# Test della funzione
print("Test prenotazione - Nuovo cliente nella stanza 203:")
id_nuovo_cliente = 1004
clienti[id_nuovo_cliente] = {"nome": "Anna Neri", "email": "anna@email.com", "telefono": "3361239876"}
prenota_stanza(id_nuovo_cliente, 203, 4)
▶ Funzione per Visualizzare Prenotazioni
5
Crea funzione per report prenotazioni:
Crea funzione per report prenotazioni:
PYTHON
# 5. FUNZIONE PER VISUALIZZARE PRENOTAZIONI
def visualizza_prenotazioni(filtro_cliente=None):
"""
Visualizza tutte le prenotazioni o solo quelle di un cliente
"""
print(f"\n📋 ELENCO PRENOTAZIONI" + "="*45)
totale_incassi = 0
prenotazioni_trovate = 0
for id_pren, info in prenotazioni.items():
if filtro_cliente and info["id_cliente"] != filtro_cliente:
continue
cliente = clienti[info["id_cliente"]]
stanza = stanze_hotel[info["stanza"]]
print(f"\nPrenotazione #{id_pren}:")
print(f" Cliente: {cliente['nome']} (ID: {info['id_cliente']})")
print(f" Stanza: {info['stanza']} ({stanza['tipo']})")
print(f" Notti: {info['notti']} - Totale: €{info['totale']}")
totale_incassi += info["totale"]
prenotazioni_trovate += 1
if prenotazioni_trovate > 0:
print(f"\n📊 RIEPILOGO:")
print(f" Prenotazioni trovate: {prenotazioni_trovate}")
print(f" Totale incassi: €{totale_incassi}")
else:
print("❌ Nessuna prenotazione trovata")
# Test delle funzioni
print("\nVisualizza tutte le prenotazioni:")
visualizza_prenotazioni()
print("\nVisualizza prenotazioni del cliente 1001:")
visualizza_prenotazioni(filtro_cliente=1001)
Parte 4: Funzioni Avanzate e Interfaccia
▶ Funzione per Check-out e Statistiche
6
Crea funzioni avanzate per gestione completa:
Crea funzioni avanzate per gestione completa:
PYTHON
# 6. FUNZIONI AVANZATE PER GESTIONE HOTEL
def effettua_checkout(numero_stanza):
"""
Libera una stanza dopo il checkout
"""
if numero_stanza in stanze_hotel:
if not stanze_hotel[numero_stanza]["disponibile"]:
stanze_hotel[numero_stanza]["disponibile"] = True
print(f"✅ Stanza {numero_stanza} liberata dopo checkout")
return True
else:
print(f"⚠️ Stanza {numero_stanza} già disponibile")
return False
else:
print(f"❌ Stanza {numero_stanza} non trovata")
return False
def statistiche_hotel():
"""
Mostra statistiche complete dell'hotel
"""
print(f"\n📈 STATISTICHE HOTEL" + "="*45)
# Calcola statistiche
totale_stanze = len(stanze_hotel)
stanze_disponibili = sum(1 for info in stanze_hotel.values() if info["disponibile"])
stanze_occupate = totale_stanze - stanze_disponibili
incasso_totale = sum(info["totale"] for info in prenotazioni.values())
notti_totali = sum(info["notti"] for info in prenotazioni.values())
# Calcola occupazione per tipo stanza
occupazione_per_tipo = {}
for info in stanze_hotel.values():
tipo = info["tipo"]
if tipo not in occupazione_per_tipo:
occupazione_per_tipo[tipo] = {"totali": 0, "occupate": 0}
occupazione_per_tipo[tipo]["totali"] += 1
if not info["disponibile"]:
occupazione_per_tipo[tipo]["occupate"] += 1
# Mostra risultati
print(f"Stanze totali: {totale_stanze}")
print(f"Stanze disponibili: {stanze_disponibili} ({stanze_disponibili/totale_stanze*100:.1f}%)")
print(f"Stanze occupate: {stanze_occupate} ({stanze_occupate/totale_stanze*100:.1f}%)")
print(f"Prenotazioni attive: {len(prenotazioni)}")
print(f"Notti prenotate totali: {notti_totali}")
print(f"Incasso totale: €{incasso_totale}")
print(f"\n📊 OCCUPAZIONE PER TIPO STANZA:")
for tipo, stats in occupazione_per_tipo.items():
perc_occupazione = (stats["occupate"] / stats["totali"] * 100) if stats["totali"] > 0 else 0
print(f" {tipo}: {stats['occupate']}/{stats['totali']} ({perc_occupazione:.1f}%)")
# Test delle funzioni avanzate
print("Test checkout stanza 104:")
effettua_checkout(104)
print("\nStatistiche complete hotel:")
statistiche_hotel()
Concetti di Python e Dizionari Appresi
Congratulazioni! Ora conosci:
- ✓ Dizionari Annidati: Strutture dati complesse e organizzate
- ✓ Funzioni Python: Creazione e utilizzo di funzioni personalizzate
- ✓ Manipolazione Dati: Accesso e modifica di dati in dizionari complessi
- ✓ Sistemi di Filtro: Ricerca e filtraggio di dati con criteri multipli
- ✓ Validazione Dati: Controllo di validità e consistenza dei dati
- ✓ Calcoli Automatici: Calcolo di totali, statistiche e metriche
- ✓ Sistemi Reali: Applicazione di Python a scenari business reali
Prossimi Passi nella Programmazione
Nella prossima esercitazione imparerai:
- 📈 Analisi dati avanzata con Pandas
- 🗄️ Sistemi di database con SQLite
- 🤖 Machine Learning per raccomandazioni
- 🌐 API REST per sistemi distribuiti
- 📊 Dashboard interattive con Streamlit
Hai costruito un sistema professionale di gestione hotel con Python!