Salva saldo aggiornato

This commit is contained in:
La Programmatrice Verde
2026-01-15 22:12:22 +01:00
parent c1c74e3805
commit 3013655cb4
3 changed files with 94 additions and 93 deletions

View File

@@ -27,7 +27,7 @@ public class ContoCorrente {
this.saldo = saldo; this.saldo = saldo;
this.numeroContoCorrente = totaleNumeriCorrenti++; this.numeroContoCorrente = totaleNumeriCorrenti++;
numeriContiCorrenti.add(numeroContoCorrente); numeriContiCorrenti.add(numeroContoCorrente);
MyBank.log("Apertura del conto con saldo iniziale di " + this.saldo, numeroContoCorrente); ScriviLeggiFile.log("Apertura del conto con saldo iniziale di " + this.saldo, numeroContoCorrente);
} }
public static List<Integer> getNumeriContiCorrenti() { public static List<Integer> getNumeriContiCorrenti() {
@@ -52,24 +52,26 @@ 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.", this.numeroContoCorrente); ScriviLeggiFile.log("Versamento di " + quantita + " effettuato con successo.", this.numeroContoCorrente);
ScriviLeggiFile.salvaContoCorrente(this);
logSaldoCorrente(); 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.", this.numeroContoCorrente); ScriviLeggiFile.log("Tentato prelievo di " + quantita + " fallito per superamento saldo.", this.numeroContoCorrente);
logSaldoCorrente(); 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.", this.numeroContoCorrente); ScriviLeggiFile.log("Prelievo di " + quantita + " effettuato con successo.", this.numeroContoCorrente);
ScriviLeggiFile.salvaContoCorrente(this);
logSaldoCorrente(); logSaldoCorrente();
} }
} }
private void logSaldoCorrente() { private void logSaldoCorrente() {
MyBank.log("Saldo corrente: " + this.saldo + "\n", this.numeroContoCorrente); ScriviLeggiFile.log("Saldo corrente: " + this.saldo + "\n", this.numeroContoCorrente);
} }
@Override @Override

View File

@@ -4,11 +4,6 @@
*/ */
package mybank; package mybank;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException; import java.io.IOException;
import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
@@ -20,9 +15,6 @@ 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 com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectWriter;
/** /**
* *
* @author Verde * @author Verde
@@ -36,11 +28,10 @@ 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/";
public static void main(String[] args) { public static void main(String[] args) {
int scelta = -1; int scelta = -1;
ArrayList<ContoCorrente> conti = importaConti(); ArrayList<ContoCorrente> conti = (ArrayList<ContoCorrente>) ScriviLeggiFile.importaConti();
do { do {
System.out.println("Scegliere un'opzione:"); System.out.println("Scegliere un'opzione:");
@@ -95,7 +86,7 @@ public class MyBank {
if (conti.isEmpty()) { if (conti.isEmpty()) {
System.out.println(ERRORE_CONTI_VUOTO); System.out.println(ERRORE_CONTI_VUOTO);
} else { } else {
stampaLog(conti); ScriviLeggiFile.stampaLog(selezionaConto(conti));
} }
pausa(); pausa();
break; break;
@@ -116,41 +107,6 @@ public class MyBank {
sc.nextLine(); sc.nextLine();
} }
static ArrayList<ContoCorrente> importaConti() {
ArrayList<ContoCorrente> conti = new ArrayList<>();
File percorsoConti = new File(PATH_CONTI);
ObjectMapper mapper = new ObjectMapper();
mapper.setDateFormat(new SimpleDateFormat("dd/MM/yyyy"));
StringBuilder sb;
String riga;
if (percorsoConti.exists() && percorsoConti.listFiles().length != 0) {
for (File conto : percorsoConti.listFiles()) {
if (conto.getName().substring(conto.getName().lastIndexOf(".")).equals(".json")) {
try (BufferedReader bf = new BufferedReader(new FileReader(conto))) {
sb = new StringBuilder();
riga = bf.readLine();
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();
numeriContiCorrenti.add(conti.getLast().getNumeroContoCorrente());
ContoCorrente.setNumeriContiCorrenti(numeriContiCorrenti);
} catch (Exception _) {
System.out.println("Errore nella lettura del file di conto corrente.");
}
}
}
}
return conti;
}
static void aggiungiConto(ArrayList<ContoCorrente> conti) { static void aggiungiConto(ArrayList<ContoCorrente> conti) {
Persona persona; Persona persona;
boolean error; boolean error;
@@ -170,13 +126,9 @@ public class MyBank {
error = true; error = true;
} else { } else {
ScriviLeggiFile.salvaCodiceFiscale(persona.getCodiceFiscale()); ScriviLeggiFile.salvaCodiceFiscale(persona.getCodiceFiscale());
File percorsoConti = new File(PATH_CONTI);
if (!percorsoConti.exists()) {
percorsoConti.mkdir();
}
contoCorrente = new ContoCorrente(persona, quantita("del saldo iniziale")); contoCorrente = new ContoCorrente(persona, quantita("del saldo iniziale"));
conti.add(contoCorrente); conti.add(contoCorrente);
salvaContoCorrente(contoCorrente); ScriviLeggiFile.salvaContoCorrente(contoCorrente);
} }
} catch (IOException e) { } catch (IOException e) {
System.out.println(e.getMessage()); System.out.println(e.getMessage());
@@ -271,16 +223,6 @@ public class MyBank {
return quantita; return quantita;
} }
static void salvaContoCorrente(ContoCorrente conto) {
try (BufferedWriter bw = new BufferedWriter(
new FileWriter(PATH_CONTI + "conto_" + conto.getNumeroContoCorrente() + ".json"))) {
ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter();
bw.write(ow.writeValueAsString(conto));
} catch (IOException _) {
System.out.println("Errore: impossibile salvare il conto corrente.");
}
}
static void versa(ArrayList<ContoCorrente> conti) { static void versa(ArrayList<ContoCorrente> conti) {
selezionaConto(conti).versa(quantita("da versare")); selezionaConto(conti).versa(quantita("da versare"));
} }
@@ -302,7 +244,7 @@ public class MyBank {
} }
static ContoCorrente selezionaConto(ArrayList<ContoCorrente> conti) { static ContoCorrente selezionaConto(ArrayList<ContoCorrente> conti) {
ContoCorrente contoCorrente = null; ContoCorrente contoCorrente = new ContoCorrente();
int numeroContoCorrente; int numeroContoCorrente;
boolean error; boolean error;
@@ -327,30 +269,4 @@ public class MyBank {
} while (error); } while (error);
return contoCorrente; return contoCorrente;
} }
static void log(String messaggio, int numeroContoCorrente) {
StringBuilder sb = new StringBuilder();
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss.sss dd/MM/yyyy");
try (BufferedWriter bw = new BufferedWriter(
new FileWriter(PATH_CONTI + "movimenti_" + numeroContoCorrente + ".txt", true))) {
sb.append("[");
sb.append(sdf.format(new Date()));
sb.append("] ");
sb.append(messaggio);
sb.append("\n");
bw.write(sb.toString());
} catch (IOException _) {
System.out.println("Errore nella scrittura del movimento.");
}
}
static void stampaLog(ArrayList<ContoCorrente> conti) {
try (BufferedReader br = new BufferedReader(
new FileReader(PATH_CONTI + "movimenti_" + selezionaConto(conti).getNumeroContoCorrente() + ".txt"))) {
System.out.println(br.readAllAsString());
} catch (IOException _) {
System.out.println("Errore nella lettura dei movimenti.");
}
}
} }

View File

@@ -10,14 +10,21 @@ import java.io.File;
import java.io.FileReader; import java.io.FileReader;
import java.io.FileWriter; import java.io.FileWriter;
import java.io.IOException; import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List; import java.util.List;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectWriter;
/** /**
* *
* @author Verde * @author Verde
*/ */
public class ScriviLeggiFile { public class ScriviLeggiFile {
private static final String PATH_CODICI_FISCALI = "./src/mybank/codiciFiscali.txt"; private static final String PATH_CODICI_FISCALI = "./src/mybank/codiciFiscali.txt";
private static final String PATH_CONTI = "./src/mybank/conti/";
private ScriviLeggiFile() { private ScriviLeggiFile() {
} }
@@ -46,4 +53,80 @@ public class ScriviLeggiFile {
return codiciFiscali; return codiciFiscali;
} }
public static List<ContoCorrente> importaConti() {
ArrayList<ContoCorrente> conti = new ArrayList<>();
File percorsoConti = new File(PATH_CONTI);
ObjectMapper mapper = new ObjectMapper();
mapper.setDateFormat(new SimpleDateFormat("dd/MM/yyyy"));
StringBuilder sb;
String riga;
if (percorsoConti.exists() && percorsoConti.listFiles().length != 0) {
for (File conto : percorsoConti.listFiles()) {
if (conto.getName().substring(conto.getName().lastIndexOf(".")).equals(".json")) {
try (BufferedReader bf = new BufferedReader(new FileReader(conto))) {
sb = new StringBuilder();
riga = bf.readLine();
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();
numeriContiCorrenti.add(conti.getLast().getNumeroContoCorrente());
ContoCorrente.setNumeriContiCorrenti(numeriContiCorrenti);
} catch (IOException _) {
System.out.println("Errore nella lettura del file di conto corrente.");
}
}
}
}
return conti;
}
public static void salvaContoCorrente(ContoCorrente conto) {
File percorsoConti = new File(PATH_CONTI);
if (!percorsoConti.exists()) {
percorsoConti.mkdir();
}
try (BufferedWriter bw = new BufferedWriter(
new FileWriter(PATH_CONTI + "conto_" + conto.getNumeroContoCorrente() + ".json"))) {
ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter();
bw.write(ow.writeValueAsString(conto));
} catch (IOException _) {
System.out.println("Errore: impossibile salvare il conto corrente.");
}
}
public static void log(String messaggio, int numeroContoCorrente) {
StringBuilder sb = new StringBuilder();
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss.sss dd/MM/yyyy");
try (BufferedWriter bw = new BufferedWriter(
new FileWriter(PATH_CONTI + "movimenti_" + numeroContoCorrente + ".txt", true))) {
sb.append("[");
sb.append(sdf.format(new Date()));
sb.append("] ");
sb.append(messaggio);
sb.append("\n");
bw.write(sb.toString());
} catch (IOException _) {
System.out.println("Errore nella scrittura del movimento.");
}
}
public static void stampaLog(ContoCorrente conto) {
try (BufferedReader br = new BufferedReader(
new FileReader(PATH_CONTI + "movimenti_" + conto.getNumeroContoCorrente() + ".txt"))) {
System.out.println(br.readAllAsString());
} catch (IOException _) {
System.out.println("Errore nella lettura dei movimenti.");
}
}
} }