271 lines
10 KiB
C#
271 lines
10 KiB
C#
namespace ordini_ristorante;
|
|
|
|
class Program {
|
|
static void Main(string[] args) {
|
|
Console.Clear();
|
|
Ristorante ristorante = new();
|
|
int scelta = -1;
|
|
do {
|
|
Console.WriteLine("Inserire un'opzione:");
|
|
Console.WriteLine("1. Crea piatto");
|
|
Console.WriteLine("2. Visualizza menù");
|
|
Console.WriteLine("3. Crea ordine");
|
|
Console.WriteLine("4. Annulla ordine");
|
|
Console.WriteLine("5. Paga ordine");
|
|
Console.WriteLine("6. Visualizza ordine");
|
|
Console.WriteLine("0. Esci");
|
|
Console.Write("Scelta: ");
|
|
try {
|
|
scelta = Convert.ToInt32(Console.ReadLine());
|
|
switch (scelta) {
|
|
case 0:
|
|
break;
|
|
case 1:
|
|
ristorante.AggiungiPiatto(CreaPiatto());
|
|
Console.WriteLine("Piatto aggiunto con successo");
|
|
Pausa();
|
|
break;
|
|
case 2:
|
|
if (ristorante.GetMenu().Length == 0) {
|
|
Console.WriteLine("Creare almeno un piatto prima di mostrare il menù");
|
|
}
|
|
else {
|
|
StampaMenu(ristorante);
|
|
}
|
|
Pausa();
|
|
break;
|
|
case 3:
|
|
if (ristorante.GetMenu().Length == 0) {
|
|
Console.WriteLine("Creare almeno un piatto prima di creare un ordine");
|
|
}
|
|
else {
|
|
AggiungiOrdine(ristorante);
|
|
Console.WriteLine("Ordine aggiunto con successo");
|
|
}
|
|
Pausa();
|
|
break;
|
|
case 4:
|
|
if (ristorante.GetOrdini().Length == 0) {
|
|
Console.WriteLine("Creare almeno un ordine prima di annullarlo");
|
|
}
|
|
else {
|
|
AnnullaOrdine(ristorante);
|
|
Console.WriteLine("Ordine annullato con successo.");
|
|
}
|
|
Pausa();
|
|
break;
|
|
case 5:
|
|
if (ristorante.GetOrdini().Length == 0) {
|
|
Console.WriteLine("Creare almeno un ordine prima di pagarlo");
|
|
}
|
|
else {
|
|
PagaOrdine(ristorante);
|
|
Console.WriteLine("Ordine pagato con successo");
|
|
}
|
|
Pausa();
|
|
break;
|
|
case 6:
|
|
if (ristorante.GetOrdini().Length == 0) {
|
|
Console.WriteLine("Creare almeno un ordine prima di mostrarli tutti");
|
|
}
|
|
else {
|
|
StampaOrdini(ristorante);
|
|
}
|
|
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 Piatto CreaPiatto() {
|
|
string nome;
|
|
string descrizione;
|
|
float prezzo = -1;
|
|
|
|
Console.Write("Nome del piatto: ");
|
|
nome = Console.ReadLine();
|
|
|
|
Console.Write("Descrizione del piatto: ");
|
|
descrizione = Console.ReadLine();
|
|
|
|
do {
|
|
try {
|
|
Console.Write("Inserire il prezzo: ");
|
|
prezzo = (float)Convert.ToDouble(Console.ReadLine());
|
|
if (prezzo < 0) {
|
|
Console.WriteLine("Prezzo non valido.");
|
|
Pausa();
|
|
}
|
|
}
|
|
catch (FormatException) {
|
|
Console.WriteLine("Prezzo non valido.");
|
|
Pausa();
|
|
}
|
|
}
|
|
while (prezzo < 0);
|
|
|
|
return new Piatto(nome, descrizione, prezzo);
|
|
}
|
|
static void StampaMenu(Ristorante p_ristorante) {
|
|
int i = 0;
|
|
foreach (Piatto p in p_ristorante.GetMenu()) {
|
|
Console.WriteLine($"Piatto {i + 1}:");
|
|
p.StampaPiatto();
|
|
Console.WriteLine();
|
|
i++;
|
|
}
|
|
}
|
|
|
|
static void AggiungiOrdine(Ristorante p_ristorante) {
|
|
int codiceOrdine;
|
|
string cliente;
|
|
Piatto[] piatti;
|
|
int numeroPiatti = -1, scelta = -1;
|
|
|
|
Console.Write("Nome del cliente: ");
|
|
cliente = Console.ReadLine();
|
|
|
|
//Console.Write("Descrizione del piatto: ");
|
|
//descrizione = Console.ReadLine();
|
|
|
|
do {
|
|
try {
|
|
Console.Write("Quanti piatti ordinare? ");
|
|
numeroPiatti = Convert.ToInt32(Console.ReadLine());
|
|
if (numeroPiatti < 0) {
|
|
Console.WriteLine("Numero di piatti non valido.");
|
|
Pausa();
|
|
}
|
|
}
|
|
catch (FormatException) {
|
|
Console.WriteLine("Numero di piatti non valido.");
|
|
Pausa();
|
|
}
|
|
}
|
|
while (numeroPiatti < 0);
|
|
|
|
piatti = new Piatto[numeroPiatti];
|
|
|
|
for (int i = 0; i < numeroPiatti; i++) {
|
|
Console.WriteLine($"Scelta del piatto n. {i + 1}\n");
|
|
Console.WriteLine("Quale piatto scegliere?");
|
|
StampaMenu(p_ristorante);
|
|
|
|
do {
|
|
try {
|
|
Console.Write("Scelta: ");
|
|
scelta = Convert.ToInt32(Console.ReadLine());
|
|
if (scelta <= 0 || scelta > p_ristorante.GetMenu().Length) {
|
|
Console.WriteLine("Scelta non valida.");
|
|
Pausa();
|
|
}
|
|
}
|
|
catch (FormatException) {
|
|
Console.WriteLine("Scelta non valida.");
|
|
Pausa();
|
|
}
|
|
}
|
|
while (scelta <= 0 || scelta > p_ristorante.GetMenu().Length);
|
|
|
|
piatti[i] = p_ristorante.GetMenu()[scelta - 1];
|
|
}
|
|
codiceOrdine = Ordine.codiceOrdineProgressivo + 1;
|
|
Ordine.codiceOrdineProgressivo = codiceOrdine;
|
|
p_ristorante.AggiungiOrdine(new Ordine(codiceOrdine, DateTime.Now, cliente, piatti, "in preparazione"));
|
|
}
|
|
|
|
static void StampaOrdini(Ristorante p_ristorante) {
|
|
int i = 0;
|
|
foreach (Ordine o in p_ristorante.GetOrdini()) {
|
|
Console.WriteLine($"Ordine n. {i + 1}:");
|
|
o.StampaOrdine();
|
|
Console.WriteLine();
|
|
i++;
|
|
}
|
|
}
|
|
|
|
static void AnnullaOrdine(Ristorante p_ristorante) {
|
|
int scelta = -1;
|
|
bool exit = true;
|
|
Console.Write("Codici identificativi degli ordini: ");
|
|
for (int i = 0; i < p_ristorante.GetOrdini().Length; i++) {
|
|
Console.WriteLine(p_ristorante.GetOrdini()[i].GetCodiceOrdine());
|
|
}
|
|
|
|
do {
|
|
try {
|
|
Console.Write("Inserire il codice identificativo dell'ordine: ");
|
|
scelta = Convert.ToInt32(Console.ReadLine());
|
|
if (p_ristorante.GetOrdini()[p_ristorante.GetOrdinePerCodice(scelta)].GetStato() != "in preparazione") {
|
|
Console.WriteLine("È possibile annullare solo ordini in preparazione.");
|
|
Console.WriteLine($"Stato corrente dell'ordine selezionato: {p_ristorante.GetOrdini()[p_ristorante.GetOrdinePerCodice(scelta)].GetStato()}");
|
|
exit = false;
|
|
Pausa();
|
|
}
|
|
else {
|
|
p_ristorante.GetOrdini()[p_ristorante.GetOrdinePerCodice(scelta)].AnnullaOrdine();
|
|
exit = true;
|
|
}
|
|
}
|
|
catch (FormatException) {
|
|
Console.WriteLine("Scelta non valida.");
|
|
Pausa();
|
|
}
|
|
catch (NullReferenceException e) {
|
|
Console.WriteLine(e.Message);
|
|
Pausa();
|
|
}
|
|
}
|
|
while (scelta < 0 || scelta > Ordine.codiceOrdineProgressivo || !exit);
|
|
}
|
|
|
|
static void PagaOrdine(Ristorante p_ristorante) {
|
|
int scelta = -1;
|
|
bool exit = true;
|
|
Console.Write("Codici identificativi degli ordini: ");
|
|
for (int i = 0; i < p_ristorante.GetOrdini().Length; i++) {
|
|
Console.WriteLine(p_ristorante.GetOrdini()[i].GetCodiceOrdine());
|
|
}
|
|
|
|
do {
|
|
try {
|
|
Console.Write("Inserire il codice identificativo dell'ordine: ");
|
|
scelta = Convert.ToInt32(Console.ReadLine());
|
|
if (p_ristorante.GetOrdini()[p_ristorante.GetOrdinePerCodice(scelta)].GetStato() != "in preparazione") {
|
|
Console.WriteLine("È possibile annullare solo ordini in preparazione.");
|
|
Console.WriteLine($"Stato corrente dell'ordine selezionato: {p_ristorante.GetOrdini()[p_ristorante.GetOrdinePerCodice(scelta)].GetStato()}");
|
|
exit = false;
|
|
Pausa();
|
|
}
|
|
else {
|
|
p_ristorante.GetOrdini()[p_ristorante.GetOrdinePerCodice(scelta)].Pagamento();
|
|
exit = true;
|
|
}
|
|
}
|
|
catch (FormatException) {
|
|
Console.WriteLine("Scelta non valida.");
|
|
Pausa();
|
|
}
|
|
catch (NullReferenceException e) {
|
|
Console.WriteLine(e.Message);
|
|
Pausa();
|
|
}
|
|
}
|
|
while (scelta < 0 || scelta > Ordine.codiceOrdineProgressivo || !exit);
|
|
}
|
|
}
|