From 20a5ab3db38bbf27509381cf8936c6ce06e42781 Mon Sep 17 00:00:00 2001 From: La Programmatrice Verde Date: Tue, 18 Nov 2025 13:18:52 +0100 Subject: [PATCH] Ordinazione --- src/fatturascontrini/FatturaScontrini.java | 196 ++++++++++++++++++++- src/fatturascontrini/menu.txt | 8 + 2 files changed, 198 insertions(+), 6 deletions(-) create mode 100644 src/fatturascontrini/menu.txt diff --git a/src/fatturascontrini/FatturaScontrini.java b/src/fatturascontrini/FatturaScontrini.java index 469cbdb..ae1884e 100644 --- a/src/fatturascontrini/FatturaScontrini.java +++ b/src/fatturascontrini/FatturaScontrini.java @@ -4,8 +4,13 @@ */ package fatturascontrini; +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.IOException; +import java.util.ArrayList; import java.util.InputMismatchException; import java.util.Scanner; +import java.util.StringTokenizer; /** * @@ -18,15 +23,21 @@ public class FatturaScontrini { */ static Scanner sc = new Scanner(System.in); + static final String PATH_MENU = "./src/fatturascontrini/menu.txt"; + static final String ERRORE_DEFAULT = "Errore: opzione non valida."; public static void main(String[] args) { int scelta = -1; + ArrayList ordinazione; + boolean ordinazioneEffettuata = false; + String sceltaSiNo; + boolean error; do { System.out.println("Scegliere un'opzione:"); - System.out.println("1. "); - System.out.println("2. "); - System.out.println("3. "); + System.out.println("1. Effettuare ordinazione"); + System.out.println("2. Pagare"); + System.out.println("3. Crea fattura"); System.out.println("0. Esci"); System.out.print("Opzione: "); @@ -38,7 +49,30 @@ public class FatturaScontrini { case 0: break; case 1: - + if (ordinazioneEffettuata) { + do { + error = false; + System.out.print( + "Attenzione: verrà sovrascritta la precedente ordinazione. Continuare? [S/N] "); + sceltaSiNo = sc.nextLine().trim().toLowerCase(); + switch (sceltaSiNo) { + case "s": + ordinazione = ordinazione(); + break; + case "n": + System.out.println("L'ordinazione non è stata modificata."); + break; + default: + System.out.println(ERRORE_DEFAULT); + pausa(); + error = true; + break; + } + } while (error); + } else { + ordinazione = ordinazione(); + ordinazioneEffettuata = true; + } pausa(); break; case 2: @@ -54,8 +88,7 @@ public class FatturaScontrini { pausa(); break; } - } - catch (InputMismatchException _) { + } catch (InputMismatchException _) { System.out.println("Errore: scelta non valida."); pausa(); } @@ -66,4 +99,155 @@ public class FatturaScontrini { System.out.println("Premere un tasto per continuare. . ."); sc.nextLine(); } + + static ArrayList ordinazione() { + ArrayList ritorno = new ArrayList<>(); + boolean exit = true; + boolean error; + boolean isDuplicate = false; + String scelta; + do { + if (exit) { + exit = false; + int[] ordine = { selezioneMenu(), quantita() }; + for (int[] ordini : ritorno) { + if (ordini[0] == ordine[0]) { + isDuplicate = true; + do { + error = false; + System.out + .print( + "L'opzione scelta è già presente nell'ordinazione. Aggiornare la quantità? [S/N] "); + scelta = sc.nextLine().trim().toLowerCase(); + switch (scelta) { + case "s": + ritorno.get(ritorno.indexOf(ordini))[1] = ordine[1]; + break; + case "n": + System.out.println("L'ordinazione non è stata modificata."); + break; + default: + System.out.println(ERRORE_DEFAULT); + pausa(); + error = true; + break; + } + } while (error); + } + + } + if (!isDuplicate) { + ritorno.add(ordine); + } + + do { + error = false; + System.out.print("Inserire un altra ordinazione? [S/N] "); + scelta = sc.nextLine().trim().toLowerCase(); + switch (scelta) { + case "s": + exit = true; + break; + case "n": + break; + default: + System.out.println(ERRORE_DEFAULT); + pausa(); + error = true; + break; + } + } while (error); + // controllo se c'è già e aggiorno la quantità + } + } while (exit); + + return ritorno; + } + + static void stampaMenu() { + try (BufferedReader br = new BufferedReader(new FileReader(PATH_MENU))) { + StringTokenizer st; + String riga = br.readLine(); + + for (int i = 0; i < getMenuSize(); i++) { + st = new StringTokenizer(riga, ":"); + System.out.println(i + ". " + st.nextToken() + ": €" + st.nextToken().trim()); + System.out.println("\t" + st.nextToken().trim() + "\n"); + riga = br.readLine(); + } + } catch (IOException e) { + System.out.println("Errore nella lettura del file: " + e.getMessage()); + } + } + + static int getMenuSize() { + int i = 0; + try (BufferedReader br = new BufferedReader(new FileReader(PATH_MENU))) { + String riga = br.readLine(); + + while (riga != null) { + i++; + riga = br.readLine(); + } + } catch (IOException e) { + System.out.println("Errore nella lettura del file: " + e.getMessage()); + } + return i; + } + + static int selezioneMenu() { + boolean error; + int ritorno = -1; + do { + error = false; + + System.out.println("Selezionare un'opzione tra le presenti:"); + stampaMenu(); + System.out.print("Scelta: "); + + try { + ritorno = sc.nextInt(); + sc.nextLine(); + + if (ritorno < 0 || ritorno > getMenuSize()) { + System.out.println(ERRORE_DEFAULT); + pausa(); + error = true; + } + } catch (InputMismatchException _) { + System.out.println(ERRORE_DEFAULT); + pausa(); + error = true; + } + } while (error); + + return ritorno; + } + + static int quantita() { + boolean error; + int ritorno = -1; + do { + error = false; + + System.out.print("Inserire la quantità da acquistare: "); + + try { + ritorno = sc.nextInt(); + sc.nextLine(); + + if (ritorno < 0) { + System.out.println("Errore: non è possibile selezionare una quantità minore di zero."); + pausa(); + error = true; + } + } catch (InputMismatchException _) { + System.out.println(ERRORE_DEFAULT); + pausa(); + error = true; + } + } while (error); + + return ritorno; + } } diff --git a/src/fatturascontrini/menu.txt b/src/fatturascontrini/menu.txt new file mode 100644 index 0000000..4575fa4 --- /dev/null +++ b/src/fatturascontrini/menu.txt @@ -0,0 +1,8 @@ +cappuccino:1,30:lorem ipsum dolor sit +caffè:1,00:lorem ipsum dolor sit +brioche:0,80:lorem ipsum dolor sit +brioche_marmellata:1,00:lorem ipsum dolor sit +cioccolata:1,50:lorem ipsum dolor sit +spremuta:1,40:lorem ipsum dolor sit +toast: 1,70:lorem ipsum dolor sit +panino a scelta con affettato: 3,50:lorem ipsum dolor sit \ No newline at end of file