using System.Text.RegularExpressions; namespace vacanzeEstive_rubricaTelefonica; class Program { static void Main(string[] args) { Console.Clear(); int scelta = 0; Voce[] rubrica = new Voce[100]; //tetto massimo di voci possibili nella rubrica do { Console.WriteLine("Inserire un'opzione:"); Console.WriteLine("1. Aggiungi nuova voce in rubrica"); Console.WriteLine("2. Ricerca esatta per nome"); Console.WriteLine("3. Ricerca approssimata per nome"); Console.WriteLine("4. Visualizza rubrica completa"); Console.WriteLine("0. Esci"); Console.Write("Scelta: "); try { scelta = Convert.ToInt32(Console.ReadLine()); switch (scelta) { case 0: break; case 1: CreaVoce(rubrica); Pausa(); break; case 2: Pausa(); break; case 3: Pausa(); break; case 4: MostraRubrica(rubrica); Pausa(); break; default: Console.WriteLine("Opzione non valida."); Pausa(); break; } } catch (FormatException) { Console.WriteLine("Opzione non valida."); Pausa(); } } while (scelta != 0); } static void Pausa() { Console.WriteLine("Premere un tasto per continuare. . ."); Console.ReadKey(); } static void CreaVoce(Voce[] p_rubrica) { bool error; string scelta; int indiceVoce = TrovaProssimaPosizioneDisponibile(p_rubrica); string nome; string cognome; string telefono; string cellulare = null; string email = null; string indirizzo = null; const int LUNGHEZZA_NOME = 40; const int LUNGHEZZA_TELEFONO = 20; const string TELEFONO = "^(?:\\(?\\+?\\d{1,3}\\)?|\\(?00\\d{1,3}\\)?)?[\\s-]?\\d{3}[\\s-]\\d{3}[\\s-]\\d{4}$"; const string EMAIL = "^[\\w.-]+@([\\w-]+\\.)+[\\w-]{2,4}$"; const string CONFERMA = "[SsYy]"; const string NEGAZIONE = "[Nn]"; do { Console.Write("Inserire il nome della persona: "); nome = Console.ReadLine(); if (nome.Length > LUNGHEZZA_NOME) { Console.WriteLine($"Errore: il nome non può superare i {LUNGHEZZA_NOME} caratteri."); Pausa(); } } while (nome.Length > LUNGHEZZA_NOME); do { Console.Write("Inserire il cognome della persona: "); cognome = Console.ReadLine(); if (cognome.Length > LUNGHEZZA_NOME) { Console.WriteLine($"Errore: il cognome non può superare i {LUNGHEZZA_NOME} caratteri."); Pausa(); } } while (cognome.Length > LUNGHEZZA_NOME); do { error = false; Console.Write("Inserire il numero di telefono della persona: "); telefono = Console.ReadLine(); if (telefono.Length > LUNGHEZZA_TELEFONO) { error = true; Console.WriteLine($"Errore: il numero di telefono non può superare i {LUNGHEZZA_TELEFONO} caratteri."); Pausa(); } if (!Regex.IsMatch(telefono, TELEFONO)) { error = true; Console.WriteLine("Errore: il numero di telefono inserito non è valido."); Pausa(); } } while (error); do { error = false; Console.Write("Inserire il numero cellulare? [S/N] "); scelta = Console.ReadLine(); if (Regex.IsMatch(scelta, CONFERMA)) { do { error = false; Console.Write("Inserire il numero cellulare della persona: "); cellulare = Console.ReadLine(); if (cellulare.Length > LUNGHEZZA_TELEFONO) { error = true; Console.WriteLine($"Errore: il numero cellulare non può superare i {LUNGHEZZA_TELEFONO} caratteri."); Pausa(); } if (!Regex.IsMatch(cellulare, TELEFONO)) { error = true; Console.WriteLine("Errore: il numero cellulare inserito non è valido."); Pausa(); } } while (error); } else if (Regex.IsMatch(scelta, NEGAZIONE)) { cellulare = ""; } else { error = true; Console.WriteLine("Opzione non valida."); Pausa(); } } while (error); do { error = false; Console.Write("Inserire l'email? [S/N] "); scelta = Console.ReadLine(); if (Regex.IsMatch(scelta, CONFERMA)) { do { error = false; Console.Write("Inserire l'email della persona: "); email = Console.ReadLine(); if (!Regex.IsMatch(email, EMAIL)) { error = true; Console.WriteLine("Errore: l'email inserita non è valida."); Pausa(); } } while (error); } else if (Regex.IsMatch(scelta, NEGAZIONE)) { email = ""; } else { error = true; Console.WriteLine("Opzione non valida."); Pausa(); } } while (error); do { error = false; Console.Write("Inserire l'indirizzo? [S/N] "); scelta = Console.ReadLine(); if (Regex.IsMatch(scelta, CONFERMA)) { do { error = false; Console.Write("Inserire l'indirizzo della persona: "); indirizzo = Console.ReadLine(); if (string.IsNullOrEmpty(indirizzo)) { error = true; Console.WriteLine("Errore: inserire un indirizzo non vuoto."); Pausa(); } } while (error); } else if (Regex.IsMatch(scelta, NEGAZIONE)) { indirizzo = ""; } else { error = true; Console.WriteLine("Opzione non valida."); Pausa(); } } while (error); if (indiceVoce == -1) { Console.WriteLine("Errore: la rubrica è piena."); } else { p_rubrica[indiceVoce] = new Voce(nome, cognome, telefono, cellulare, email, indirizzo); Console.WriteLine("Voce creata con successo."); } } static int TrovaProssimaPosizioneDisponibile(Voce[] p_rubrica) { bool exit = false; int i; for (i = 0; i < p_rubrica.Length && exit; i++) { if (p_rubrica[i] == null) { exit = true; } } return !exit ? i : -1; } static void MostraRubrica(Voce[] p_rubrica) { if (p_rubrica[0] == null) { Console.WriteLine("Errore: rubrica vuota."); } else { for (int i = 0; i < p_rubrica.Length && p_rubrica[i] != null; i++) { Console.WriteLine($"Voce n. {i + 1}:"); p_rubrica[i].MostraVoce(); } } } }