aeroporto_livello2/Program.cs

641 lines
31 KiB
C#

namespace aeroporto_livello2;
class Program
{
//costanti delle partenze e destinazioni
const string partenza1="Milano";
const string partenza2="Bangkok";
const string partenza3="Berlino";
const string destinazione1="Milano";
const string destinazione2="Bangkok";
const string destinazione3="Berlino";
static void Main(string[] args){
//dichiarazione e inizializzazione variabili
const int sconto1=10;
const int sconto2=5;
int prezzoAndata1, totale, prezzoRitorno1, exit, soloAndata1, soloAndata2, prezzoAndata2, prezzoRitorno2;
//---queste variabili hanno dei valori che vengono rigettati dagli switch in modo da non avere una scelta di default valida---
exit=0;
totale=-1;
soloAndata1=1;
soloAndata2=1;
//----------------------------------------------------------------------------------------------------------------------------------------
//---queste variabili hanno valori che permettono di uscire dal programma quando richiesto e di saltare il calcolo dei prezzi del secondo biglietto se l'utente ha scelto di uscire prima di selezionare il secondo biglietto---
prezzoRitorno1=2;
prezzoAndata2=2;
prezzoRitorno2=2;
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
string scelta;
//Acquisto del primo biglietto
prezzoAndata1=AcquistoBiglietti();
if (prezzoAndata1>=0){//se prezzoAndata==-1 allora l'utente ha selezionato di uscire dal programma
Console.Write("Acquistare anche il ritorno? [S/n] ");
scelta=Console.ReadLine();
do{
switch (scelta){
case "S":
prezzoRitorno1=AcquistoBiglietti();
if (prezzoRitorno1>=0){//se prezzoRitorno==-1 allora l'utente ha selezionato di uscire dal programma
soloAndata1=0; //Il biglietto non è di sola andata
}
exit=1;
break;
case "s":
prezzoRitorno1=AcquistoBiglietti();
if (prezzoRitorno1>=0){//se prezzoRitorno==-1 allora l'utente ha selezionato di uscire dal programma
soloAndata1=0;
}
exit=1;
break;
case "Y":
prezzoRitorno1=AcquistoBiglietti();
if (prezzoRitorno1>=0){//se prezzoRitorno==-1 allora l'utente ha selezionato di uscire dal programma
soloAndata1=0;
}
exit=1;
break;
case "y":
prezzoRitorno1=AcquistoBiglietti();
if (prezzoRitorno1>=0){//se prezzoRitorno==-1 allora l'utente ha selezionato di uscire dal programma
soloAndata1=0;
}
exit=1;
break;
case "":
prezzoRitorno1=AcquistoBiglietti();
if (prezzoRitorno1>=0){//se prezzoRitorno==-1 allora l'utente ha selezionato di uscire dal programma
soloAndata1=0;
}
exit=1;
break;
case "N":
totale=prezzoAndata1;
soloAndata1=1; //Il biglietto è di sola andata
exit=1;
break;
case "n":
totale=prezzoAndata1;
soloAndata1=1;
exit=1;
break;
default:
Console.WriteLine("Scelta non valida");
break;
}
}
while(exit==0);
}
if (prezzoAndata1 <= -1 || prezzoRitorno1 <= -1){//se prezzoAndata1 o prezzoRitorno1==-1 l'utente ha selezionato di uscire (if invertita)
}
else{
//Acquisto del secondo biglietto
Console.Write("Acquistare un secondo biglietto? [S/n] ");
scelta = Console.ReadLine();
do{
switch (scelta){
case "S":
//stesse operazioni che ho usato per l'acquisto del primo biglietto, ma in uno switch per venire selezionate dall'utente
prezzoAndata2 = AcquistoBiglietti();//se prezzoAndata==-1 allora l'utente ha selezionato di uscire dal programma
if (prezzoAndata2 >= 0){
Console.Write("Acquistare anche il ritorno? [S/n] ");
scelta = Console.ReadLine();
do{
switch (scelta){
case "S":
prezzoRitorno2 = AcquistoBiglietti();
if (prezzoRitorno2 >= 0){//se prezzoRitorno==-1 allora l'utente ha selezionato di uscire dal programma
soloAndata2 = 0;
}
exit = 1;
break;
case "s":
prezzoRitorno2 = AcquistoBiglietti();
if (prezzoRitorno2 >= 0){//se prezzoRitorno==-1 allora l'utente ha selezionato di uscire dal programma
soloAndata2 = 0;
}
exit = 1;
break;
case "Y":
prezzoRitorno2 = AcquistoBiglietti();
if (prezzoRitorno2 >= 0){//se prezzoRitorno==-1 allora l'utente ha selezionato di uscire dal programma
soloAndata2 = 0;
}
exit = 1;
break;
case "y":
prezzoRitorno2 = AcquistoBiglietti();
if (prezzoRitorno2 >= 0){//se prezzoRitorno==-1 allora l'utente ha selezionato di uscire dal programma
soloAndata2 = 0;
}
exit = 1;
break;
case "":
prezzoRitorno2 = AcquistoBiglietti();
if (prezzoRitorno2 >= 0){//se prezzoRitorno==-1 allora l'utente ha selezionato di uscire dal programma
soloAndata2 = 0;
}
exit = 1;
break;
case "N":
totale=prezzoAndata2;
soloAndata2 = 1;
exit = 1;
break;
case "n":
totale=prezzoAndata2;
soloAndata2 = 1;
exit = 1;
break;
default:
Console.WriteLine("Scelta non valida");
break;
}
}
while (exit == 0);
}
break;
case "s":
//stesse operazioni che ho usato per l'acquisto del primo biglietto, ma in uno switch per venire selezionate dall'utente
prezzoAndata2 = AcquistoBiglietti();//se prezzoAndata==-1 allora l'utente ha selezionato di uscire dal programma
if (prezzoAndata2 >= 0){
Console.Write("Acquistare anche il ritorno? [S/n] ");
scelta = Console.ReadLine();
do{
switch (scelta){
case "S":
prezzoRitorno2 = AcquistoBiglietti();
if (prezzoRitorno2 >= 0){//se prezzoRitorno==-1 allora l'utente ha selezionato di uscire dal programma
soloAndata2 = 0;
}
exit = 1;
break;
case "s":
prezzoRitorno2 = AcquistoBiglietti();
if (prezzoRitorno2 >= 0){//se prezzoRitorno==-1 allora l'utente ha selezionato di uscire dal programma
soloAndata2 = 0;
}
exit = 1;
break;
case "Y":
prezzoRitorno2 = AcquistoBiglietti();
if (prezzoRitorno2 >= 0){//se prezzoRitorno==-1 allora l'utente ha selezionato di uscire dal programma
soloAndata2 = 0;
}
exit = 1;
break;
case "y":
prezzoRitorno2 = AcquistoBiglietti();
if (prezzoRitorno2 >= 0){//se prezzoRitorno==-1 allora l'utente ha selezionato di uscire dal programma
soloAndata2 = 0;
}
exit = 1;
break;
case "":
prezzoRitorno2 = AcquistoBiglietti();
if (prezzoRitorno2 >= 0){//se prezzoRitorno==-1 allora l'utente ha selezionato di uscire dal programma
soloAndata2 = 0;
}
exit = 1;
break;
case "N":
totale=prezzoAndata2;
soloAndata2 = 1;
exit = 1;
break;
case "n":
totale=prezzoAndata2;
soloAndata2 = 1;
exit = 1;
break;
default:
Console.WriteLine("Scelta non valida");
break;
}
}
while (exit == 0);
}
break;
case "Y":
//stesse operazioni che ho usato per l'acquisto del primo biglietto, ma in uno switch per venire selezionate dall'utente
prezzoAndata2 = AcquistoBiglietti();//se prezzoAndata==-1 allora l'utente ha selezionato di uscire dal programma
if (prezzoAndata2 >= 0){
Console.Write("Acquistare anche il ritorno? [S/n] ");
scelta = Console.ReadLine();
do{
switch (scelta){
case "S":
prezzoRitorno2 = AcquistoBiglietti();
if (prezzoRitorno2 >= 0){//se prezzoRitorno==-1 allora l'utente ha selezionato di uscire dal programma
soloAndata2 = 0;
}
exit = 1;
break;
case "s":
prezzoRitorno2 = AcquistoBiglietti();
if (prezzoRitorno2 >= 0){//se prezzoRitorno==-1 allora l'utente ha selezionato di uscire dal programma
soloAndata2 = 0;
}
exit = 1;
break;
case "Y":
prezzoRitorno2 = AcquistoBiglietti();
if (prezzoRitorno2 >= 0){//se prezzoRitorno==-1 allora l'utente ha selezionato di uscire dal programma
soloAndata2 = 0;
}
exit = 1;
break;
case "y":
prezzoRitorno2 = AcquistoBiglietti();
if (prezzoRitorno2 >= 0){//se prezzoRitorno==-1 allora l'utente ha selezionato di uscire dal programma
soloAndata2 = 0;
}
exit = 1;
break;
case "":
prezzoRitorno2 = AcquistoBiglietti();
if (prezzoRitorno2 >= 0){//se prezzoRitorno==-1 allora l'utente ha selezionato di uscire dal programma
soloAndata2 = 0;
}
exit = 1;
break;
case "N":
totale=prezzoAndata2;
soloAndata2 = 1;
exit = 1;
break;
case "n":
totale=prezzoAndata2;
soloAndata2 = 1;
exit = 1;
break;
default:
Console.WriteLine("Scelta non valida");
break;
}
}
while (exit == 0);
}
break;
case "y":
//stesse operazioni che ho usato per l'acquisto del primo biglietto, ma in uno switch per venire selezionate dall'utente
prezzoAndata2 = AcquistoBiglietti();//se prezzoAndata==-1 allora l'utente ha selezionato di uscire dal programma
if (prezzoAndata2 >= 0){
Console.Write("Acquistare anche il ritorno? [S/n] ");
scelta = Console.ReadLine();
do{
switch (scelta){
case "S":
prezzoRitorno2 = AcquistoBiglietti();
if (prezzoRitorno2 >= 0){//se prezzoRitorno==-1 allora l'utente ha selezionato di uscire dal programma
soloAndata2 = 0;
}
exit = 1;
break;
case "s":
prezzoRitorno2 = AcquistoBiglietti();
if (prezzoRitorno2 >= 0){//se prezzoRitorno==-1 allora l'utente ha selezionato di uscire dal programma
soloAndata2 = 0;
}
exit = 1;
break;
case "Y":
prezzoRitorno2 = AcquistoBiglietti();
if (prezzoRitorno2 >= 0){//se prezzoRitorno==-1 allora l'utente ha selezionato di uscire dal programma
soloAndata2 = 0;
}
exit = 1;
break;
case "y":
prezzoRitorno2 = AcquistoBiglietti();
if (prezzoRitorno2 >= 0){//se prezzoRitorno==-1 allora l'utente ha selezionato di uscire dal programma
soloAndata2 = 0;
}
exit = 1;
break;
case "":
prezzoRitorno2 = AcquistoBiglietti();
if (prezzoRitorno2 >= 0){//se prezzoRitorno==-1 allora l'utente ha selezionato di uscire dal programma
soloAndata2 = 0;
}
exit = 1;
break;
case "N":
totale=prezzoAndata2;
soloAndata2 = 1;
exit = 1;
break;
case "n":
totale=prezzoAndata2;
soloAndata2 = 1;
exit = 1;
break;
default:
Console.WriteLine("Scelta non valida");
break;
}
}
while (exit == 0);
}
break;
case "":
//stesse operazioni che ho usato per l'acquisto del primo biglietto, ma in uno switch per venire selezionate dall'utente
prezzoAndata2 = AcquistoBiglietti();//se prezzoAndata==-1 allora l'utente ha selezionato di uscire dal programma
if (prezzoAndata2 >= 0){
Console.Write("Acquistare anche il ritorno? [S/n] ");
scelta = Console.ReadLine();
do{
switch (scelta){
case "S":
prezzoRitorno2 = AcquistoBiglietti();
if (prezzoRitorno2 >= 0){//se prezzoRitorno==-1 allora l'utente ha selezionato di uscire dal programma
soloAndata2 = 0;
}
exit = 1;
break;
case "s":
prezzoRitorno2 = AcquistoBiglietti();
if (prezzoRitorno2 >= 0){//se prezzoRitorno==-1 allora l'utente ha selezionato di uscire dal programma
soloAndata2 = 0;
}
exit = 1;
break;
case "Y":
prezzoRitorno2 = AcquistoBiglietti();
if (prezzoRitorno2 >= 0){//se prezzoRitorno==-1 allora l'utente ha selezionato di uscire dal programma
soloAndata2 = 0;
}
exit = 1;
break;
case "y":
prezzoRitorno2 = AcquistoBiglietti();
if (prezzoRitorno2 >= 0){//se prezzoRitorno==-1 allora l'utente ha selezionato di uscire dal programma
soloAndata2 = 0;
}
exit = 1;
break;
case "":
prezzoRitorno2 = AcquistoBiglietti();
if (prezzoRitorno2 >= 0){//se prezzoRitorno==-1 allora l'utente ha selezionato di uscire dal programma
soloAndata2 = 0;
}
exit = 1;
break;
case "N":
totale=prezzoAndata2;
soloAndata2 = 1;
exit = 1;
break;
case "n":
totale=prezzoAndata2;
soloAndata2 = 1;
exit = 1;
break;
default:
Console.WriteLine("Scelta non valida");
break;
}
}
while (exit == 0);
}
break;
case "N":
//Condizione per seguire la prima traccia se si sta acquistando un solo biglietto
if (soloAndata1 == 0){
totale = (prezzoAndata1 - (prezzoAndata1 * sconto1 / 100)) + (prezzoRitorno1 - (prezzoRitorno1 * sconto1 / 100));
}
else{
totale = prezzoAndata1;
}
exit = 1;
break;
case "n":
//Condizione per seguire la prima traccia se si sta acquistando un solo biglietto
if (soloAndata1 == 0){
totale = (prezzoAndata1 - (prezzoAndata1 * sconto1 / 100)) + (prezzoRitorno1 - (prezzoRitorno1 * sconto1 / 100));
}
else{
totale = prezzoAndata1;
}
exit = 1;
break;
default:
Console.WriteLine("Scelta non valida");
break;
}
}
while (exit == 0);
if (prezzoAndata1 < 0 || prezzoRitorno1 < 0 || prezzoAndata2 < 0 || prezzoRitorno2 < 0){//se prezzoAndata1 o prezzoRitorno1 o prezzoAndata2 o prezzoRitorno2==-1 l'utente ha selezionato di uscire (if invertito);
Console.WriteLine("Totale resettato");
totale=-1; //impedisco di stampare il totale se è stato selezionato il primo biglietto
}
else{
//Condizione per seguire la seconda traccia se si sta acquistando anche un secondo biglietto
if (soloAndata2 != -1){
switch ((soloAndata1, soloAndata2)){
case (0, 0):
totale = prezzoAndata1 + prezzoRitorno1 - ((prezzoAndata1 + prezzoRitorno1) * sconto1 / 100) + prezzoAndata2 + prezzoRitorno2 - ((prezzoAndata2 + prezzoRitorno2) * sconto1 / 100);
break;
case (0, 1):
totale = (prezzoAndata2 - (prezzoAndata2 * sconto1 / 100)) + (prezzoAndata1 - (prezzoAndata1 * sconto1 / 100)) + (prezzoRitorno1 - (prezzoRitorno1 * sconto2 / 100));
break;
case (1, 0):
totale = (prezzoAndata1 - (prezzoAndata1 * sconto1 / 100)) + (prezzoAndata2 - (prezzoAndata2 * sconto1 / 100)) + (prezzoRitorno2 - (prezzoRitorno2 * sconto2 / 100));
break;
case (1, 1):
totale = (prezzoAndata1 - (prezzoAndata1 * sconto2 / 100)) + (prezzoAndata2 - (prezzoAndata2 * sconto2 / 100));
break;
}
}
}
}
if (totale>=0){//scrivi il totale solo se non si vuole uscire prima
Console.WriteLine("Totale: " +totale);
}
}
static int AcquistoBiglietti(){
//dichiarazione e inizializzazione variabili
string partenza, destinazione;
int prezzo;
//---questa variabile ha un valore non valido in modo da non avere una scelta di default valida e permettere di uscire dal programma---
prezzo=-1;
partenza=SceltaPartenza();
if(partenza!="0"){//se partenza==0 allora l'utente ha selezionato di uscire dal programma
destinazione=SceltaDestinazione();
if(destinazione!="0"){//se destinazione==0 allora l'utente ha selezionato di uscire dal programma
prezzo=PrezzoVolo(partenza, destinazione);
}
}
return prezzo;
}
static string SceltaPartenza()
{
//dichiarazione e inizializzazione variabili
string partenza;
partenza=null;
int scelta, exit;
//---questa variabile ha un valore iniziale non valido per permettere al programma di essere compilato (il default non la modifica)---
exit=-1;
//selezione partenza
do{
Console.WriteLine("Da dove si parte?");
Console.WriteLine("1. " +partenza1);
Console.WriteLine("2. " +partenza2);
Console.WriteLine("3. " +partenza3);
Console.WriteLine("0. Esci");
Console.Write("Scelta: ");
scelta=Convert.ToInt32(Console.ReadLine());
switch(scelta){
case 0:
exit=0;
break;
case 1:
partenza=partenza1;
exit=1;
break;
case 2:
partenza=partenza2;
exit=1;
break ;
case 3:
partenza=partenza3;
exit=1;
break;
default:
Console.WriteLine("Scelta non valida");
break;
}
}
while(exit!=1 && exit!=0);
if (exit==0){//se viene scelto di uscire restituisco un valore che non corrisponde a una partenza
return Convert.ToString(exit);
}
else{
return partenza;
}
}
static string SceltaDestinazione()
{
//dichiarazione e inizializzazione variabili
string destinazione;
destinazione=null;
int scelta, exit;
//---questa variabile ha un valore iniziale non valido per permettere al programma di essere compilato (il default non la modifica)---
exit=-1;
//selezione destinazione
do{
Console.WriteLine("Dove si vuole andare?");
Console.WriteLine("1. " +destinazione1);
Console.WriteLine("2. " +destinazione2);
Console.WriteLine("3. " +destinazione3);
Console.WriteLine("0. Esci");
Console.Write("Scelta: ");
scelta=Convert.ToInt32(Console.ReadLine());
switch(scelta){
case 0:
exit=0;
break;
case 1:
destinazione=destinazione1;
exit=1;
break;
case 2:
destinazione=destinazione2;
exit=1;
break ;
case 3:
destinazione=destinazione3;
exit=1;
break;
default:
Console.WriteLine("Scelta non valida");
break;
}
}
while(exit!=1 && exit!=0);
if (exit==0){//se viene scelto di uscire restituisco un valore che non corrisponde a una partenza
return Convert.ToString(exit);
}
else{
return destinazione;
}
}
static int PrezzoVolo(string partenza, string destinazione){
//dichiarazione e inizializzazione variabili per tabella della verità
int prezzo;
const int tariffa1=0;
const int tariffa2=100;
const int tariffa3=150;
const int tariffa4=120;
const int tariffa5=0;
const int tariffa6=110;
const int tariffa7=130;
const int tariffa8=180;
const int tariffa9=0;
//---questa variabile ha un valore iniziale non valido per permettere al programma di essere compilato---
prezzo=-1;
switch((partenza, destinazione)){
case (partenza1, destinazione1):
prezzo=tariffa1;
break;
case (partenza1, destinazione2):
prezzo=tariffa2;
break;
case (partenza1, destinazione3):
prezzo=tariffa3;
break;
case (partenza2, destinazione1):
prezzo=tariffa4;
break;
case (partenza2, destinazione2):
prezzo=tariffa5;
break;
case (partenza2, destinazione3):
prezzo=tariffa6;
break;
case (partenza3, destinazione1):
prezzo=tariffa7;
break;
case (partenza3, destinazione2):
prezzo=tariffa8;
break;
case (partenza3, destinazione3):
prezzo=tariffa9;
break;
}
return prezzo;
}
}