Correzioni

This commit is contained in:
La Programmatrice Verde
2026-01-13 23:07:01 +01:00
parent 68a6ba1adb
commit a69ad33539
4 changed files with 75 additions and 21 deletions

Binary file not shown.

Binary file not shown.

View File

@@ -8,6 +8,8 @@ import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import com.fasterxml.jackson.annotation.JsonFormat;
/** /**
* *
* @author Verde * @author Verde
@@ -16,12 +18,18 @@ public class ContoCorrente {
private String nome; private String nome;
private String cognome; private String cognome;
private String codiceFiscale; private String codiceFiscale;
private Date dataDiNascita;
private double saldo; private double saldo;
private int numeroContoCorrente; private int numeroContoCorrente;
private static ArrayList<Integer> numeriContiCorrenti = new ArrayList<>(); private static ArrayList<Integer> numeriContiCorrenti = new ArrayList<>();
@JsonFormat
(shape = JsonFormat.Shape.STRING, pattern = "dd/MM/yyyy")
private Date dataDiNascita;
public ContoCorrente() {
}
public ContoCorrente(String nome, String cognome, String codiceFiscale, Date dataDiNascita, double saldo, public ContoCorrente(String nome, String cognome, String codiceFiscale, Date dataDiNascita, double saldo,
int numeroContoCorrente) { int numeroContoCorrente) {
this.nome = nome; this.nome = nome;
@@ -48,17 +56,43 @@ public class ContoCorrente {
public void versa(double quantita){ public void versa(double quantita){
this.saldo += quantita; this.saldo += quantita;
MyBank.log("Versamento di " + quantita + " effettuato con successo.\nSaldo corrente: " + this.saldo, this.numeroContoCorrente); MyBank.log("Versamento di " + quantita + " effettuato con successo.", this.numeroContoCorrente);
logSaldoCorrente();
} }
public void preleva(double quantita) throws IllegalArgumentException{ public void preleva(double quantita) throws IllegalArgumentException{
if (quantita >= this.saldo) { if (quantita > this.saldo) {
MyBank.log("Tentato prelievo di " + quantita + " fallito per superamento saldo.\nSaldo corrente: " + this.saldo, this.numeroContoCorrente); MyBank.log("Tentato prelievo di " + quantita + " fallito per superamento saldo.", this.numeroContoCorrente);
logSaldoCorrente();
throw new IllegalArgumentException("La quantità desiderata eccede il saldo corrente."); throw new IllegalArgumentException("La quantità desiderata eccede il saldo corrente.");
} }
else { else {
this.saldo -= quantita; this.saldo -= quantita;
MyBank.log("Prelievo di " + quantita + " effettuato con successo.\nSaldo corrente: " + this.saldo, this.numeroContoCorrente); MyBank.log("Prelievo di " + quantita + " effettuato con successo.", this.numeroContoCorrente);
logSaldoCorrente();
} }
} }
private void logSaldoCorrente() {
MyBank.log("Saldo corrente: " + this.saldo + "\n", this.numeroContoCorrente);
}
public String getNome() {
return nome;
}
public String getCognome() {
return cognome;
}
public String getCodiceFiscale() {
return codiceFiscale;
}
public Date getDataDiNascita() {
return dataDiNascita;
}
public double getSaldo() {
return saldo;
}
} }

View File

@@ -19,8 +19,12 @@ import java.util.Scanner;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import org.w3c.dom.events.Event;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectWriter; import com.fasterxml.jackson.databind.ObjectWriter;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
/** /**
* *
@@ -35,7 +39,7 @@ public class MyBank {
static Scanner sc = new Scanner(System.in); static Scanner sc = new Scanner(System.in);
static final String ERRORE_GENERICO = "Errore: opzione non valida."; static final String ERRORE_GENERICO = "Errore: opzione non valida.";
static final String ERRORE_CONTI_VUOTO = "Errore: è necessario aggiungere almeno un conto corrente prima di proseguire."; static final String ERRORE_CONTI_VUOTO = "Errore: è necessario aggiungere almeno un conto corrente prima di proseguire.";
static final String PATH_CONTI = "./src/MyBank/conti/"; static final String PATH_CONTI = "./src/mybank/conti/";
public static void main(String[] args) { public static void main(String[] args) {
int scelta = -1; int scelta = -1;
@@ -46,7 +50,7 @@ public class MyBank {
System.out.println("1. Aprire conto corrente"); System.out.println("1. Aprire conto corrente");
System.out.println("2. Versamento"); System.out.println("2. Versamento");
System.out.println("3. Prelievo"); System.out.println("3. Prelievo");
System.out.println("4. "); System.out.println("4. Mostra movimenti");
System.out.println("0. Esci"); System.out.println("0. Esci");
System.out.print("Opzione: "); System.out.print("Opzione: ");
@@ -59,6 +63,7 @@ public class MyBank {
break; break;
case 1: case 1:
aggiungiConto(conti); aggiungiConto(conti);
System.out.println("Numero conto: " + conti.getLast().getNumeroContoCorrente());
System.out.println("Conto corrente aggiunto con successo."); System.out.println("Conto corrente aggiunto con successo.");
pausa(); pausa();
break; break;
@@ -67,6 +72,7 @@ public class MyBank {
System.out.println(ERRORE_CONTI_VUOTO); System.out.println(ERRORE_CONTI_VUOTO);
} else { } else {
versa(conti); versa(conti);
System.out.println("Versamento effettuato con successo.");
} }
pausa(); pausa();
break; break;
@@ -75,6 +81,7 @@ public class MyBank {
System.out.println(ERRORE_CONTI_VUOTO); System.out.println(ERRORE_CONTI_VUOTO);
} else { } else {
preleva(conti); preleva(conti);
System.out.println("Prelievo effettuato con successo.");
} }
pausa(); pausa();
break; break;
@@ -107,20 +114,32 @@ public class MyBank {
ArrayList<ContoCorrente> conti = new ArrayList<>(); ArrayList<ContoCorrente> conti = new ArrayList<>();
File percorsoConti = new File(PATH_CONTI); File percorsoConti = new File(PATH_CONTI);
ObjectMapper mapper = new ObjectMapper(); ObjectMapper mapper = new ObjectMapper();
mapper.setDateFormat(new SimpleDateFormat("dd/MM/yyyy"));
StringBuilder sb;
String riga;
if (percorsoConti.exists() && percorsoConti.listFiles().length != 0) { if (percorsoConti.exists() && percorsoConti.listFiles().length != 0) {
for (File conto : percorsoConti.listFiles()) { for (File conto : percorsoConti.listFiles()) {
if (conto.getName().substring(conto.getName().lastIndexOf(".")).equals("json")) { if (conto.getName().substring(conto.getName().lastIndexOf(".")).equals(".json")) {
try (BufferedReader bf = new BufferedReader(new FileReader(conto))) { try (BufferedReader bf = new BufferedReader(new FileReader(conto))) {
sb = new StringBuilder();
riga = bf.readLine();
conti.add(mapper.readValue(bf.readAllAsString(), ContoCorrente.class)); while (riga != null) {
sb.append(riga);
riga = bf.readLine();
}
conti.add(mapper.readerFor(ContoCorrente.class).readValue(sb.toString()));
ArrayList<Integer> numeriContiCorrenti = (ArrayList<Integer>) ContoCorrente.getNumeriContiCorrenti(); ArrayList<Integer> numeriContiCorrenti = (ArrayList<Integer>) ContoCorrente
.getNumeriContiCorrenti();
numeriContiCorrenti.add(conti.getLast().getNumeroContoCorrente()); numeriContiCorrenti.add(conti.getLast().getNumeroContoCorrente());
ContoCorrente.setNumeriContiCorrenti(numeriContiCorrenti); ContoCorrente.setNumeriContiCorrenti(numeriContiCorrenti);
} catch (Exception _) { } catch (Exception e) {
System.out.println("Errore nella lettura del file di conto corrente."); System.out.println("Errore nella lettura del file di conto corrente.");
System.out.println(e.getMessage());
System.out.println(e.getStackTrace());
} }
} }
} }
@@ -152,20 +171,20 @@ public class MyBank {
saldoIniziale = quantita("del saldo iniziale"); saldoIniziale = quantita("del saldo iniziale");
numeroContoCorrente = codiceFiscale.hashCode(); numeroContoCorrente = Math.abs(codiceFiscale.hashCode());
if (ContoCorrente.getNumeriContiCorrenti().contains(numeroContoCorrente)) { if (ContoCorrente.getNumeriContiCorrenti().contains(numeroContoCorrente)) {
System.out.println("Errore: esiste già un conto corrente per questo codice fiscale, riprovare."); System.out.println("Errore: esiste già un conto corrente per questo codice fiscale, riprovare.");
pausa(); pausa();
error = true; error = true;
} else { } else {
contoCorrente = new ContoCorrente(nome, cognome, codiceFiscale, dataDiNascita, saldoIniziale,
numeroContoCorrente);
conti.add(contoCorrente);
File percorsoConti = new File(PATH_CONTI); File percorsoConti = new File(PATH_CONTI);
if (!percorsoConti.exists()) { if (!percorsoConti.exists()) {
percorsoConti.mkdir(); percorsoConti.mkdir();
} }
contoCorrente = new ContoCorrente(nome, cognome, codiceFiscale, dataDiNascita, saldoIniziale,
numeroContoCorrente);
conti.add(contoCorrente);
salvaContoCorrente(contoCorrente); salvaContoCorrente(contoCorrente);
} }
} while (error); } while (error);
@@ -179,7 +198,7 @@ public class MyBank {
do { do {
error = false; error = false;
System.out.print("Inserire la propria data di nascita: "); System.out.print("Inserire il proprio codice fiscale: ");
codiceFiscale = sc.nextLine().trim().toUpperCase(); codiceFiscale = sc.nextLine().trim().toUpperCase();
matcher = pattern.matcher(codiceFiscale); matcher = pattern.matcher(codiceFiscale);
if (!matcher.find()) { if (!matcher.find()) {
@@ -194,12 +213,13 @@ public class MyBank {
static Date dataDiNascita() { static Date dataDiNascita() {
Date dataDiNascita = null; Date dataDiNascita = null;
boolean error; boolean error;
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); final String FORMATO_DATA = "dd/MM/yyyy";
SimpleDateFormat sdf = new SimpleDateFormat(FORMATO_DATA);
sdf.setLenient(false); sdf.setLenient(false);
do { do {
error = false; error = false;
System.out.print("Inserire la propria data di nascita: "); System.out.print("Inserire la propria data di nascita nel formato " + FORMATO_DATA + ": ");
try { try {
dataDiNascita = sdf.parse(sc.nextLine()); dataDiNascita = sdf.parse(sc.nextLine());
} catch (ParseException _) { } catch (ParseException _) {
@@ -238,7 +258,6 @@ public class MyBank {
} }
static void salvaContoCorrente(ContoCorrente conto) { static void salvaContoCorrente(ContoCorrente conto) {
try (BufferedWriter bw = new BufferedWriter( try (BufferedWriter bw = new BufferedWriter(
new FileWriter(PATH_CONTI + "conto_" + conto.getNumeroContoCorrente() + ".json"))) { new FileWriter(PATH_CONTI + "conto_" + conto.getNumeroContoCorrente() + ".json"))) {
ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter(); ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter();
@@ -311,9 +330,10 @@ public class MyBank {
System.out.println("Errore nella scrittura del movimento."); System.out.println("Errore nella scrittura del movimento.");
} }
} }
static void stampaLog(ArrayList<ContoCorrente> conti) { static void stampaLog(ArrayList<ContoCorrente> conti) {
try (BufferedReader br = new BufferedReader(new FileReader(PATH_CONTI + "movimenti_" + selezionaConto(conti) + ".txt"))) { try (BufferedReader br = new BufferedReader(
new FileReader(PATH_CONTI + "movimenti_" + selezionaConto(conti).getNumeroContoCorrente() + ".txt"))) {
System.out.println(br.readAllAsString()); System.out.println(br.readAllAsString());
} catch (IOException _) { } catch (IOException _) {
System.out.println("Errore nella lettura dei movimenti."); System.out.println("Errore nella lettura dei movimenti.");