agenzia_viaggi/Program.cs
2025-05-07 20:39:27 +02:00

430 lines
16 KiB
C#

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();
}
}
}
while (eccezione || input <= 0 || input > numeroClienti);
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);
clienti[input - 1].InserisciPrenotazione(periodi[scelta], Convert.ToString(giorniPrenotati), Convert.ToString(numeroPersone));
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);
}
}