La Programmatrice Verde 68fce1e25d Erogazioni
2025-07-24 13:03:39 +02:00

128 lines
4.7 KiB
C#

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;
}
}