using System.Linq.Expressions; namespace agenzia_viaggi; class Program { static void Main(string[] args) { Console.Clear(); int scelta = 3; bool eccezione; do { Console.WriteLine("Scegliere un'opzione:"); Console.WriteLine("1. Demo"); Console.WriteLine("2. Esecuzione standard"); Console.WriteLine("0. Esci"); Console.Write("Scelta: "); eccezione = false; try { scelta = Convert.ToInt32(Console.ReadLine()); } catch (FormatException) { Console.WriteLine("Opzione non valida"); eccezione = true; Pausa(); } if (!eccezione) { switch (scelta) { case 0: break; case 1: Console.Clear(); Demo(); break; case 2: Console.Clear(); Menu(); break; default: Console.WriteLine("Opzione non valida"); Pausa(); break; } } } while (eccezione || scelta < 0 || scelta > 2); } static void Pausa() { Console.WriteLine("Premere un tasto per continuare. . ."); Console.ReadKey(); } static void Demo() { Cliente[] clienti = new Cliente[2]; Console.Write("Quanti clienti considerare? 2"); Console.WriteLine("Scegliere un'opzione:"); Console.WriteLine("1. Inserire i dati dei clienti"); Console.WriteLine("2. Inserire una prenotazione"); Console.WriteLine("3. Mostra informazioni cliente"); Console.WriteLine("4. Cancella prenotazione"); Console.WriteLine("5. Mostra tutte le prenotazioni"); Console.WriteLine("0. Esci"); Console.Write("Scelta: "); } static void Menu() { int numeroClienti = 0, scelta = 0, input = 0; bool eccezione; do { Console.Write("Quanti clienti considerare? "); eccezione = false; try { numeroClienti = Convert.ToInt32(Console.ReadLine()); } catch (FormatException) { Console.WriteLine("Numero non valido"); eccezione = true; Pausa(); } if (!eccezione) { if (numeroClienti <= 0) { Console.WriteLine("Errore: non è possibile considerare meno di un cliente."); Pausa(); } } } while (eccezione || numeroClienti <= 0); Cliente[] clienti = new Cliente[numeroClienti]; do { Console.WriteLine("Scegliere un'opzione:"); Console.WriteLine("1. Inserire i dati dei clienti"); Console.WriteLine("2. Inserire una prenotazione"); Console.WriteLine("3. Mostra informazioni cliente"); Console.WriteLine("4. Cancella prenotazione"); Console.WriteLine("5. Mostra tutte le prenotazioni"); Console.WriteLine("0. Esci"); Console.Write("Scelta: "); eccezione = false; try { scelta = Convert.ToInt32(Console.ReadLine()); } catch (FormatException) { Console.WriteLine("Opzione non valida"); eccezione = true; Pausa(); } if (!eccezione) { switch (scelta) { case 0: break; case 1: do { Console.WriteLine("Inserire i dati di quale cliente? "); for (int i = 0; i < clienti.Length; i++) { Console.WriteLine(i + 1); } Console.Write("Scelta: "); eccezione = false; try { input = Convert.ToInt32(Console.ReadLine()); } catch (FormatException) { Console.WriteLine("Opzione non valida"); eccezione = true; Pausa(); } if (!eccezione) { if (input <= 0 || input > numeroClienti) { Console.WriteLine("Opzione non valida"); Pausa(); } else if (clienti[input - 1] != null) { Console.WriteLine("Errore: i dati di questo cliente sono già stati inseriti."); Pausa(); } } } while (eccezione || input <= 0 || input > numeroClienti || clienti[input - 1] != null); clienti[input - 1] = CreaCliente(); Console.WriteLine("Cliente inserito con successo"); Pausa(); break; case 2: string[] periodi = ["primavera", "estate", "autunno", "inverno"]; int giorniPrenotati = 0, numeroPersone = 0; do { Console.WriteLine("Inserire la prenotazione di quale cliente? "); for (int i = 0; i < clienti.Length; i++) { Console.WriteLine(i + 1); } Console.Write("Scelta: "); eccezione = false; try { input = Convert.ToInt32(Console.ReadLine()); } catch (FormatException) { Console.WriteLine("Opzione non valida"); eccezione = true; Pausa(); } if (!eccezione) { if (input <= 0 || input > numeroClienti) { Console.WriteLine("Opzione non valida"); Pausa(); } else if (clienti[input - 1] == null) { Console.WriteLine("I dati di questo cliente non sono ancora stati inseriti."); Pausa(); } } } while (eccezione || input <= 0 || input > numeroClienti || clienti[input - 1] == null); scelta = 5; do { Console.WriteLine("Quale periodo dell'anno scegliere?"); Console.WriteLine("1. Primavera"); Console.WriteLine("2. Estate"); Console.WriteLine("3. Autunno"); Console.WriteLine("4. Inverno"); Console.Write("Scelta: "); eccezione = false; try { scelta = Convert.ToInt32(Console.ReadLine()); } catch (FormatException) { Console.WriteLine("Opzione non valida"); eccezione = true; Pausa(); } if (!eccezione) { if (scelta < 1 || scelta > 4) { Console.WriteLine("Opzione non valida"); Pausa(); } } } while (eccezione || scelta < 1 || scelta > 4); do { Console.Write("Per quanti giorni prenotare? "); eccezione = false; try { giorniPrenotati = Convert.ToInt32(Console.ReadLine()); } catch (FormatException) { Console.WriteLine("Numero non valido"); eccezione = true; Pausa(); } if (!eccezione) { if (giorniPrenotati <= 0) { Console.WriteLine("Errore: impossibile prenotare per meno di un giorno."); Pausa(); } } } while (eccezione || giorniPrenotati <= 0); do { Console.Write("Per quante persone prenotare? "); eccezione = false; try { numeroPersone = Convert.ToInt32(Console.ReadLine()); } catch (FormatException) { Console.WriteLine("Numero non valido"); eccezione = true; Pausa(); } if (!eccezione) { if (numeroPersone <= 0) { Console.WriteLine("Errore: impossibile prenotare per meno di una persona."); Pausa(); } } } while (numeroPersone <= 0); eccezione = false; try { clienti[input - 1].InserisciPrenotazione(periodi[scelta], Convert.ToString(giorniPrenotati), Convert.ToString(numeroPersone)); } catch (Exception e) { Console.WriteLine(e.Message); eccezione = true; Pausa(); } if (!eccezione) { Console.WriteLine("Prenotazione inserita correttamente."); Pausa(); } break; case 3: for (int i = 0; i < numeroClienti; i++) { clienti[i].StampaDatiCliente(); clienti[i].StampaPrenotazioni(); } Pausa(); break; case 4: do { Console.WriteLine("Cancellare la prenotazione di quale cliente? "); eccezione = false; try { input = Convert.ToInt32(Console.ReadLine()); } catch (FormatException) { Console.WriteLine("Opzione non valida"); eccezione = true; Pausa(); } if (!eccezione) { if (input <= 0 || input > numeroClienti) { Console.WriteLine("Opzione non valida"); Pausa(); } } } while (eccezione || input <= 0 || input > numeroClienti); do { Console.WriteLine("Scegliere una prenotazione:"); for (int i = 0; i < clienti[input].GetPrenotazioni().Length; i++) { Console.WriteLine($"{i + 1}. {clienti[input].GetPrenotazioni()[i].GetUUID()}"); } Console.Write("Scelta: "); eccezione = false; try { scelta = Convert.ToInt32(Console.ReadLine()); } catch (FormatException) { Console.WriteLine("Opzione non valida"); eccezione = true; Pausa(); } if (!eccezione) { if (scelta < 1 || scelta > clienti[input].GetPrenotazioni().Length) { Console.WriteLine("Opzione non valida"); Pausa(); } } } while (eccezione || scelta < 1 || scelta > clienti[input].GetPrenotazioni().Length); try { clienti[input].CancellaPrenotazione(clienti[input].GetPrenotazioni()[scelta - 1].GetUUID()); } catch (Exception e) { Console.WriteLine(e.Message); } Pausa(); break; case 5: for (int i = 0; i < clienti.Length; i++) { clienti[i].StampaPrenotazioni(); } Pausa(); break; default: Console.WriteLine("Opzione non valida"); Pausa(); break; } } } while (eccezione || scelta != 0); } static Cliente CreaCliente() { string nome, cognome, codiceFiscale; int eta = 0, prenotazioni = 0; const int MAX_PRENOTAZIONI = 10; bool eccezione; do { Console.Write("Inserire il nome: "); nome = Console.ReadLine(); if (string.IsNullOrWhiteSpace(nome)) { Console.WriteLine("Errore: inserire un nome"); Pausa(); } } while (string.IsNullOrWhiteSpace(nome)); do { Console.Write("Inserire il cognome: "); cognome = Console.ReadLine(); if (string.IsNullOrWhiteSpace(cognome)) { Console.WriteLine("Errore: inserire un cognome"); Pausa(); } } while (string.IsNullOrWhiteSpace(cognome)); do { Console.Write("Inserire il codice fiscale: "); codiceFiscale = Console.ReadLine(); if (string.IsNullOrWhiteSpace(codiceFiscale)) { Console.WriteLine("Errore: inserire un codice fiscale"); Pausa(); } } while (string.IsNullOrWhiteSpace(codiceFiscale)); do { Console.Write("Inserire l'età: "); eccezione = false; try { eta = Convert.ToInt32(Console.ReadLine()); } catch (FormatException) { Console.WriteLine("Età non valida"); eccezione = true; Pausa(); } if (!eccezione) { if (eta <= 0) { Console.WriteLine("Errore: non è possibile inserire un'età inferiore a 1"); Pausa(); } } } while (eccezione || eta <= 0); do { Console.Write("Inserire il numero di prenotazioni: "); eccezione = false; try { prenotazioni = Convert.ToInt32(Console.ReadLine()); } catch (FormatException) { Console.WriteLine("Numero non valido"); eccezione = true; Pausa(); } if (!eccezione) { if (prenotazioni <= 0) { Console.WriteLine("Errore: non è possibile inserire un numero di prenotazioni inferiore a 1"); Pausa(); } else if (prenotazioni > MAX_PRENOTAZIONI) { Console.WriteLine($"Errore: sono consentite al massimo {MAX_PRENOTAZIONI} prenotazioni per cliente"); Pausa(); } } } while (eccezione || prenotazioni <= 0 || prenotazioni > MAX_PRENOTAZIONI); return new Cliente(nome, cognome, codiceFiscale, Convert.ToString(eta), prenotazioni); } }