using Microsoft.Win32.SafeHandles; namespace vacanzeEstive_benzinaio; class Program { static void Main(string[] args) { Console.Clear(); Rifornimento[] rifornimentos = CreaBenzinaio(); (bool, double, double) rifornimento; int scelta = 0; do { Console.WriteLine("Inserire un'opzione:"); Console.WriteLine("1. Rifornimento benzina super"); Console.WriteLine("2. Rifornimento gasolio"); Console.WriteLine("3. Visualizza totali"); Console.WriteLine("0. Esci"); Console.Write("Scelta: "); try { scelta = Convert.ToInt32(Console.ReadLine()); switch (scelta) { case 0: break; case 1: rifornimento = RifornimentoBenzina(rifornimentos); if (rifornimento.Item1) { Console.WriteLine("Le pompe di benzina sono attualmente fuori servizio. È pregata di rieseguire il programma e riprovare."); } else { Console.WriteLine($"Benzina erogata: {rifornimento.Item2} L"); Console.WriteLine($"Costo: €{rifornimento.Item3}"); } Pausa(); break; case 2: rifornimento = RifornimentoGasolio(rifornimentos); Console.WriteLine($"Gasolio erogato: {rifornimento.Item2} L"); Console.WriteLine($"Costo: €{rifornimento.Item3}"); Pausa(); break; case 3: 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 Rifornimento[] CreaBenzinaio() { Random r = new(); int totalePompe = r.Next(1, 30); //limito il numero di pompe totali a 30 per evitare di usare 10 GB di RAM int totaleBenzina = r.Next(totalePompe); //creo un numero casuale di pompe di benzina. Se non ce ne sono, allora sono fuori servizio Rifornimento[] ritorno = new Rifornimento[totalePompe]; for (int i = 0; i < totaleBenzina; i++) { ritorno[i] = new Rifornimento("benzina super", 1.885); } for (int i = totaleBenzina; i < totalePompe; i++) {//riempio il resto dell'array con pompe di gasolio. Non possono essere fuori servizio ritorno[i] = new Rifornimento("gasolio", 1.812); } return ritorno; } static int TrovaIndiceUltimaPompaBenzina(Rifornimento[] p_rifornimentos) { int i; bool exit = true; for (i = 0; i < p_rifornimentos.Length && exit; i++) { if (p_rifornimentos[i].GetTipoCarburante() == "gasolio") { exit = false; } } return i - 2; } static (bool, double, double) RifornimentoBenzina(Rifornimento[] p_rifornimentos) { (bool, double, double) ritorno; Random r = new(); int indiceUltimaPompaBenzina = TrovaIndiceUltimaPompaBenzina(p_rifornimentos); int indicePompaInUso = r.Next(indiceUltimaPompaBenzina + 1); (double, double) erogazione; if (indiceUltimaPompaBenzina < 0) { //pompe di benzina fuori servizio ritorno.Item1 = true; ritorno.Item2 = 0; ritorno.Item3 = 0; } else { erogazione = p_rifornimentos[indicePompaInUso].Erogazione(); ritorno.Item1 = false; ritorno.Item2 = erogazione.Item1; ritorno.Item3 = erogazione.Item2; } return ritorno; } static (bool, double, double) RifornimentoGasolio(Rifornimento[] p_rifornimentos) { (double, double) erogazione; (bool, double, double) ritorno; Random r = new(); int indiceUltimaPompaBenzina = TrovaIndiceUltimaPompaBenzina(p_rifornimentos); erogazione = p_rifornimentos[r.Next(indiceUltimaPompaBenzina + 1, p_rifornimentos.Length)].Erogazione(); ritorno.Item1 = false; ritorno.Item2 = erogazione.Item1; ritorno.Item3 = erogazione.Item2; return ritorno; } }