Rubrica_Miglioria/Program.cs
2025-09-23 18:59:08 +02:00

181 lines
7.7 KiB
C#

using System.Text.RegularExpressions;
namespace Rubrica_Miglioria;
class Program {
static void Main(string[] args) {
Console.Clear();
const int DIMENSIONE_RUBRICA = 100;
int scelta = 0;
string nome = "";
string numeroditelefono;
bool rubricaEsiste = false;
bool error;
bool check3 = false;
int contatore = 0;
string nomeesatto;
string nomeapprossimato;
string messaggio;
string[] nomi = new string[DIMENSIONE_RUBRICA];
string[] numeriditelefono = new string[DIMENSIONE_RUBRICA];
Voce singolavoce = null;
Voce[] voci = new Voce[DIMENSIONE_RUBRICA];
Rubrica rubrica = new Rubrica(DIMENSIONE_RUBRICA);
do {
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)Stampa completa rubrica");
Console.WriteLine("5)Esci");
scelta = Convert.ToInt32(Console.ReadLine());
switch (scelta) {
case 1:
if (contatore > DIMENSIONE_RUBRICA - 1) {
Console.WriteLine($"Limite di {DIMENSIONE_RUBRICA} voci nella rubrica raggiunta");
}
else {
do {
string? message;
error = true;
Console.WriteLine("Inserisci il nome della voce che andrà nella rubrica telefonica");
nome = Console.ReadLine().ToLower();
message = Controllo(nome, true, contatore, rubrica);
if (message != null) {
Console.WriteLine(message);
}
else {
error = false;
}
}
while (error);
do {
string? message;
error = true;
Console.WriteLine("Inserisci il numero di telefono della voce che andrà nella rubrica telefonica");
numeroditelefono = Console.ReadLine().ToLower();
message = Controllo(nome, true, contatore, rubrica);
if (message != null) {
Console.WriteLine(message);
}
else {
error = false;
}
}
while (error);
singolavoce = new Voce(nome, numeroditelefono);
voci[contatore] = singolavoce;
rubrica = new Rubrica(voci);
contatore++;
rubricaEsiste = true;
}
break;
case 2:
if (rubricaEsiste == false) {
Console.WriteLine("devi prima aggiungere una voce in rubrica");
}
else {
do {
check2 = false;
Console.WriteLine("Inserisci il nome esatto che stai cercando");
nomeesatto = Console.ReadLine();
nomeesatto = nomeesatto.ToLower();
check2 = VerificaCorrettezza(nome, true);
if (nomeesatto.Length > 40) {
Console.WriteLine("il nome non può essere lungo più di 40 caratteri");
}
if (check2 == true) {
Console.WriteLine("il nome non può contenere dei numeri");
}
}
while (nomeesatto.Length > 40 || check2 == true);
messaggio = rubrica.Ricerca(nomeesatto, true, contatore);
Console.WriteLine(messaggio);
}
break;
case 3:
if (rubricaEsiste == false) {
Console.WriteLine("devi prima aggiungere una voce in rubrica");
}
else {
do {
check2 = false;
Console.WriteLine("Inserisci il nome approsimato che stai cercando");
nomeapprossimato = Console.ReadLine();
nomeapprossimato = nomeapprossimato.ToLower();
check2 = VerificaCorrettezza(nome, true);
if (nomeapprossimato.Length > 40) {
Console.WriteLine("il nome non può essere lungo più di 40 caratteri");
}
if (check2 == true) {
Console.WriteLine("il nome non può contenere dei numeri");
}
}
while (nomeapprossimato.Length > 40 || check2 == true);
rubrica.Ricerca(nomeapprossimato, false, contatore);
}
break;
case 4:
if (rubricaEsiste == false) {
Console.WriteLine("devi prima aggiungere una voce in rubrica");
}
else {
rubrica.StampaRubricaCompleta(contatore);
}
break;
case 5:
break;
default:
Console.WriteLine("Questa scelta non esiste");
break;
}
}
while (scelta != 5);
Console.WriteLine("Chiusura effettuata con successo");
}
static bool VerificaCorrettezza(string p_stringa, bool p_tipologia) {
/*
tipologia=true -> Controllo validità nome
tipologia=false -> Controllo validità numero di telefono
*/
bool check;
const string NOME = "[1-9]+";
const string TELEFONO = "^(?:\\(?\\+?\\d{1,3}\\)?|\\(?00\\d{1,3}\\)?)?[\\s-]?\\d{3}[\\s-]\\d{3}[\\s-]\\d{4}$";
if (p_tipologia) {
check = Regex.IsMatch(p_stringa, NOME);
}
else {
check = Regex.IsMatch(p_stringa, TELEFONO);
}
return check;
}
static string? Controllo(string p_stringa, bool p_tipologia, int p_contatore, Rubrica? p_rubrica) {
/*
tipologia=true -> Controllo validità nome
tipologia=false -> Controllo validità numero di telefono
*/
string? ritorno = null;
const int LUNGHEZZA_NOME = 40;
const int LUNGHEZZA_TELEFONO = 20;
if (p_stringa.Length > (p_tipologia ? LUNGHEZZA_NOME : LUNGHEZZA_TELEFONO)) {
ritorno = $"Il {(p_tipologia ? "nome" : "numero di telefono")} non può essere lungo più di {(p_tipologia ? LUNGHEZZA_NOME : LUNGHEZZA_TELEFONO)} caratteri";
}
if (VerificaCorrettezza(p_stringa, p_tipologia)) {
ritorno = p_tipologia ? "Il nome non può contenere numeri" : "Numero di telefono non valido";
}
if (p_contatore != 0) {
if (p_rubrica.Contains(p_stringa)) {
ritorno = $"Questo {(p_tipologia ? "nome" : "numero di telefono")} esiste già nella rubrica.";
}
}
return ritorno;
}
}