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 int indice = 0; 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, indice++); 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, int p_indice) { bool error; string scelta; 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]"; string[] voce; 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 (p_indice == p_rubrica.Length) { Console.WriteLine("Errore: la rubrica è piena."); } else { voce = [nome, cognome, telefono, cellulare, email, indirizzo]; if (!DoesVoceExist(p_rubrica, voce)) { p_rubrica[p_indice] = new Voce(nome, cognome, telefono, cellulare, email, indirizzo); Console.WriteLine("Voce creata con successo."); } else { Console.WriteLine("Errore: la voce esiste già."); } } } 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(); } } } static bool DoesVoceExist(Voce[] p_rubrica, string[] p_voce) { bool esiste = false; for (int i = 0; i < p_rubrica.Length && p_rubrica[i] != null && !esiste; i++) { for (int j = 2; j < p_voce.Length && !esiste; j++) { if (p_voce[j] == p_rubrica[i].GetVoceAsArray()[j]) { esiste = true; } } } return esiste; } }