From 8b792b8006f4b58a4f13ba8ac483a76d9b7bd2bc Mon Sep 17 00:00:00 2001 From: La Programmatrice Verde Date: Tue, 21 Oct 2025 20:21:17 +0200 Subject: [PATCH] inserisciDatiScontrino --- src/listaspesa/Prodotto.java | 33 ++++++- src/listaspesa/listaSpesa.java | 169 ++++++++++++++++++++++++++++++++- 2 files changed, 194 insertions(+), 8 deletions(-) diff --git a/src/listaspesa/Prodotto.java b/src/listaspesa/Prodotto.java index 3b0caa7..37227f7 100644 --- a/src/listaspesa/Prodotto.java +++ b/src/listaspesa/Prodotto.java @@ -23,20 +23,43 @@ public class Prodotto { this.scontoFidelityCard = p_scontoFidelityCard; this.descrizione = p_descrizione; } - - public void stampaDati(){ + + public void stampaDati() { } - public float checkQtaDisponibile(String nome, float qtaDaComprare){ + public float checkQtaDisponibile(String nome, float qtaDaComprare) { + float ritorno; + if (!this.nome.equals(nome)) { + ritorno = 0; // oppure potresti lanciare un'eccezione + } + if (this.qta >= qtaDaComprare) { + ritorno = qtaDaComprare; + } else { + ritorno = this.qta; + } + + return ritorno; } - public void updQtaMagazzino(String nome, float qtaFinale){ + public void updQtaMagazzino(String nome, float qtaFinale) { } public void applicaSconto() { - + + } + + public float getQta() { + return this.qta; + } + + public void decreaseQuantity(float p_qta) { + this.qta -= p_qta; + } + + public String getNome() { + return this.nome; } } \ No newline at end of file diff --git a/src/listaspesa/listaSpesa.java b/src/listaspesa/listaSpesa.java index ec5bd58..90f9997 100644 --- a/src/listaspesa/listaSpesa.java +++ b/src/listaspesa/listaSpesa.java @@ -23,7 +23,7 @@ public class listaSpesa { static Scanner sc = new Scanner(System.in); static Prodotto magazzino[]; static Prodotto scontrino[]; - static int dimensioneMagazzino = 0, dimensioneScontrino = 0, indiceMagazzino = 0; + static int dimensioneMagazzino = 0, dimensioneScontrino = 0, indiceMagazzino = 0, indiceScontrino = 0; static String datePattern = "dd/MM/yyyy"; static SimpleDateFormat sdf = new SimpleDateFormat(datePattern); @@ -181,20 +181,183 @@ public class listaSpesa { System.out.println("Errore: numero non valido."); } - magazzino[indiceMagazzino] = isAlimentare ? new Alimentare(nome, prezzo, qta, scontoFidelityCard, dataScadenza, descrizione) + magazzino[indiceMagazzino] = isAlimentare + ? new Alimentare(nome, prezzo, qta, scontoFidelityCard, dataScadenza, descrizione) : new NonAlimentare(nome, prezzo, qta, scontoFidelityCard, tipoMateriale, descrizione); } public static void inserisciDatiScontrino() { + boolean error, isAlimentare = false, useNomeProdotto = false, exit = false; + String scelta, nomeODescrizione; + float qta = 0; + do { + do { + error = false; + System.out.print("Il prodotto è un genere alimentare? [S/n]"); + scelta = sc.nextLine().toLowerCase(); + + if (scelta.equals("y") || scelta.equals("s")) { + isAlimentare = true; + } else if (scelta.equals("n")) { + isAlimentare = false; + } else { + System.out.println("Errore: opzione non valida."); + pausa(); + error = true; + } + } while (error); + + do { + error = false; + System.out.println("Opzioni ammesse: prodotto, descrizione."); + System.out.println("Inserire il nome del prodotto o la sua descrizione? "); + scelta = sc.nextLine().toLowerCase(); + + if (scelta.equals("prodotto")) { + useNomeProdotto = true; + } else if (scelta.equals("descrizione")) { + useNomeProdotto = false; + } else { + System.out.println("Opzioni ammesse: prodotto, descrizione."); + System.out.println("Errore: opzione non valida."); + pausa(); + error = true; + } + } while (error); + + System.out.print("Inserire " + (useNomeProdotto ? "il nome" : "la descrizione") + " del prodotto:" + + (useNomeProdotto ? " " : "\n")); + nomeODescrizione = sc.nextLine(); + + if (ricercaProdotto(nomeODescrizione, isAlimentare)) { + System.out.println("Prodotto trovato: "); + + Prodotto prodottoTrovato = isAlimentare ? (Alimentare) ricercaProdotto(nomeODescrizione) + : (NonAlimentare) ricercaProdotto(nomeODescrizione); + prodottoTrovato.stampaDati(); + + do { + error = false; + System.out.print("È corretto? [S/n]"); + scelta = sc.nextLine().toLowerCase(); + + if (scelta.equals("y") || scelta.equals("s")) { + do { + error = false; + do { + try { + error = false; + System.out.print("Inserire la quantità: "); + qta = isAlimentare ? sc.nextFloat() : (float) sc.nextInt(); + sc.nextLine(); + if (qta <= 0) { + System.out.println("Errore: non è possibile inserire meno di un prodotto."); + pausa(); + error = true; + } + } catch (InputMismatchException e) { + System.out.println("Errore: numero non valido."); + pausa(); + error = true; + } + + } while (error); + + if (prodottoTrovato.checkQtaDisponibile(nomeODescrizione, qta) != 0) { + if (qta <= prodottoTrovato.checkQtaDisponibile(nomeODescrizione, qta)) { + if (prodottoTrovato.getQta() - qta == 0) { + System.out.println("Il prodotto è stato finito."); + scontrino[trovaPosizioneLibera(scontrino)] = prodottoTrovato; + magazzino[trovaProdottoInMagazzino(prodottoTrovato)] = null; + } else { + prodottoTrovato.decreaseQuantity(qta); + } + exit = true; + + } else { + System.out.println("Errore: la quantità inserita supera quella disponibile, ovvero " + + prodottoTrovato.getQta()); + pausa(); + error = true; + } + } else { + System.out.println("Errore: il nome non è corretto."); + pausa(); + error = true; + } + } while (error); + + } else if (scelta.equals("n")) { + break; + } else { + System.out.println("Errore: opzione non valida."); + pausa(); + error = true; + } + } while (error); + } else { + System.out.println("Errore: prodotto non trovato."); + pausa(); + } + } while (scelta.equals("n") || !exit); } public static void stampaScontrino() { } - public static boolean ricercaProdotto(String nome, boolean isAlimentare) { + public static boolean ricercaProdotto(String nome, boolean isAlimentare) { // prodottoExists + boolean ritorno = false; + for (int i = 0; i < magazzino.length && !ritorno; i++) { + if (isAlimentare) { + if (magazzino[i].getClass().getSimpleName().equals("Alimentare")) { + ritorno = magazzino[i].getNome().equals(nome); + } + } else { + if (magazzino[i].getClass().getSimpleName().equals("NonAlimentare")) { + ritorno = magazzino[i].getNome().equals(nome); + } + } + } + return ritorno; + } + static Prodotto ricercaProdotto(String p_nomeODescrizione) { + Prodotto ritorno = null; + boolean exit = false; + for (int i = 0; i < magazzino.length && !exit; i++) { + if (magazzino[i].getNome().equals(p_nomeODescrizione)) { + ritorno = magazzino[i]; + exit = true; + } + } + return ritorno; + } + + static int trovaProdottoInMagazzino(Prodotto p_prodotto) { + int ritorno = -1; + boolean exit = false; + for (int i = 0; i < magazzino.length && !exit; i++) { + if (magazzino[i].hashCode() == p_prodotto.hashCode()) { + ritorno = i; + exit = true; + } + } + return ritorno; + } + + static int trovaPosizioneLibera(Prodotto[] p_prodotti) { + int ritorno = -1; + boolean exit = false; + + for (int i = 0; i < p_prodotti.length && !exit; i++) { + if (p_prodotti[i] == null) { + ritorno = i; + exit = true; + } + } + return ritorno; } }