156 lines
6.1 KiB
C#
156 lines
6.1 KiB
C#
namespace vacanzeEstive_benzinaio;
|
|
|
|
class Program {
|
|
static void Main(string[] args) {
|
|
Console.Clear();
|
|
Rifornimento[] rifornimentos = CreaBenzinaio();
|
|
(bool, double, double) rifornimento;
|
|
double[] totali;
|
|
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:
|
|
totali = CalcoloTotali(rifornimentos);
|
|
Console.WriteLine($"Litri di benzina erogati: {totali[0]}");
|
|
Console.WriteLine($"Guadagno benzina: {totali[1]}");
|
|
Console.WriteLine($"Litri di gasolio erogati: {totali[2]}");
|
|
Console.WriteLine($"Guadagno gasolio: {totali[3]}");
|
|
Console.WriteLine($"Guadagno complessivo: {totali[4]}");
|
|
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();
|
|
|
|
const double COSTO_BENZINA = 1.885;
|
|
const double COSTO_GASOLIO = 1.812;
|
|
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", COSTO_BENZINA);
|
|
}
|
|
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", COSTO_GASOLIO);
|
|
}
|
|
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;
|
|
}
|
|
|
|
static double[] CalcoloTotali(Rifornimento[] p_rifornimentos) {
|
|
double[] ritorno = new double[5];
|
|
int indiceUltimaPompaBenzina = TrovaIndiceUltimaPompaBenzina(p_rifornimentos);
|
|
|
|
for (int i = 0; i < indiceUltimaPompaBenzina; i++) {
|
|
|
|
ritorno[0] += p_rifornimentos[i].GetLitriErogatiComplessivi(); //tutti i litri delle pompe di benzina
|
|
ritorno[1] += p_rifornimentos[i].GetCostoComplessivo(); //tutti gli incassi delle pompe di benzina
|
|
}
|
|
|
|
for (int i = indiceUltimaPompaBenzina + 1; i < p_rifornimentos.Length; i++) {
|
|
ritorno[2] += p_rifornimentos[i].GetLitriErogatiComplessivi(); //tutti i litri delle pompe di gasolio
|
|
ritorno[3] += p_rifornimentos[i].GetCostoComplessivo(); //tutti gli incassi delle pompe di gasolio
|
|
}
|
|
|
|
ritorno[4] = ritorno[1] + ritorno[3];
|
|
|
|
return ritorno;
|
|
}
|
|
}
|