Traccia d'esame · Gestione prenotazioni albergo¶
File: main.py, prenotazioni.txt · struttura dati: dizionario
Cosa chiede la traccia¶
Il programma gestisce le camere di un albergo caricate dal file di testo prenotazioni.txt. Ogni riga contiene i dati di una camera, separati da virgola:
Funzioni richieste:
carica_prenotazioni(nome_file): legge il file e riempie un dizionario che usa il numero della camera come chiave.mostra_prenotazioni(prenotazioni): stampa tutte le camere, i dati dei clienti e il costo totale del soggiorno (prezzo per notte × giorni).cerca_camera(prenotazioni): chiede il numero della camera, gestendo maiuscole/minuscole e spazi, e ne mostra le informazioni complete.aggiungi_prenotazione(prenotazioni): registra un nuovo cliente. Verifica che la camera non sia già occupata, poi chiede nome, prezzo per notte e giorni di soggiorno.salva_prenotazioni(nome_file, prenotazioni): salva il dizionario aggiornato inprenotazioni.txt, con la stessa struttura a una riga per camera separata da virgole.main(): ciclowhilecon il menu: 1 Mostra, 2 Cerca, 3 Aggiungi, 0 Salva ed esci.
Laboratorio¶
Prova così
Scegli 1 per vedere le camere, poi 2 e scrivi 102 con gli spazi: la camera viene trovata lo stesso. Con 3 prova a prenotare la 101 (occupata) e poi la 305. Esci con 0 e apri la scheda prenotazioni.txt: c'è la nuova riga.
Come ragionare sulla soluzione¶
- Il dizionario. La chiave è il numero della camera, come stringa (
'101'); il valore è un altro dizionario concliente,prezzoegiorni. Cosìprenotazioni['101']['cliente']vale'Mario Rossi'e il controllo "camera già occupata" è semplicementecamera in prenotazioni. - Leggere ogni riga.
riga.rstrip('\n').split(',')restituisce la lista dei 4 campi; prezzo e giorni vanno convertiti confloateint. - Spazi e maiuscole.
input(...).strip().upper()toglie gli spazi all'inizio e alla fine e rende uguali101ae101A. - Input sicuri. Prezzo e giorni vengono richiesti finché non sono numeri positivi: il prezzo con
try/except ValueError, i giorni conisdigit(). - La virgola nel nome. Se il nome del cliente contenesse una virgola, al prossimo avvio la riga verrebbe divisa in 5 campi: per questo la soluzione la rifiuta.
- Salvataggio. Si riapre il file in modalità
'w'e si riscrive una riga per camera:camera + ',' + cliente + ',' + str(prezzo) + ',' + str(giorni) + '\n'.