diff --git a/build/classes/gui/GUIMyBank$1.class b/build/classes/gui/GUIMyBank$1.class index 86c6139..889655e 100644 Binary files a/build/classes/gui/GUIMyBank$1.class and b/build/classes/gui/GUIMyBank$1.class differ diff --git a/build/classes/gui/GUIMyBank$2.class b/build/classes/gui/GUIMyBank$2.class index aebd9b4..f7134ae 100644 Binary files a/build/classes/gui/GUIMyBank$2.class and b/build/classes/gui/GUIMyBank$2.class differ diff --git a/build/classes/gui/GUIMyBank$3.class b/build/classes/gui/GUIMyBank$3.class index e64781e..aec5dd4 100644 Binary files a/build/classes/gui/GUIMyBank$3.class and b/build/classes/gui/GUIMyBank$3.class differ diff --git a/build/classes/gui/GUIMyBank$4.class b/build/classes/gui/GUIMyBank$4.class index da60047..00c0806 100644 Binary files a/build/classes/gui/GUIMyBank$4.class and b/build/classes/gui/GUIMyBank$4.class differ diff --git a/build/classes/gui/GUIMyBank$5.class b/build/classes/gui/GUIMyBank$5.class index 24f571d..d2d0292 100644 Binary files a/build/classes/gui/GUIMyBank$5.class and b/build/classes/gui/GUIMyBank$5.class differ diff --git a/build/classes/gui/GUIMyBank.class b/build/classes/gui/GUIMyBank.class index 1dd922f..48311d1 100644 Binary files a/build/classes/gui/GUIMyBank.class and b/build/classes/gui/GUIMyBank.class differ diff --git a/build/classes/gui/GUIMyBank.form b/build/classes/gui/GUIMyBank.form index 051ed83..e1c7a98 100644 --- a/build/classes/gui/GUIMyBank.form +++ b/build/classes/gui/GUIMyBank.form @@ -25,45 +25,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -75,6 +36,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -84,36 +87,46 @@ + - + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - + - + @@ -221,5 +234,12 @@ + + + + + + + diff --git a/build/classes/logic/MyBank.class b/build/classes/logic/MyBank.class index b5fbd6c..520f37d 100644 Binary files a/build/classes/logic/MyBank.class and b/build/classes/logic/MyBank.class differ diff --git a/nbproject/private/private.xml b/nbproject/private/private.xml index 6807a2b..f974d63 100644 --- a/nbproject/private/private.xml +++ b/nbproject/private/private.xml @@ -2,6 +2,8 @@ - + + file:/home/Verde/git/GUIMyBank/src/gui/GUIMyBank.java + diff --git a/src/gui/GUIMyBank.form b/src/gui/GUIMyBank.form index 051ed83..e1c7a98 100644 --- a/src/gui/GUIMyBank.form +++ b/src/gui/GUIMyBank.form @@ -25,45 +25,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -75,6 +36,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -84,36 +87,46 @@ + - + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - + - + @@ -221,5 +234,12 @@ + + + + + + + diff --git a/src/gui/GUIMyBank.java b/src/gui/GUIMyBank.java index cdf2cb6..c8c9496 100644 --- a/src/gui/GUIMyBank.java +++ b/src/gui/GUIMyBank.java @@ -5,6 +5,8 @@ package gui; import java.awt.Color; +import java.text.ParseException; +import java.util.Date; import java.util.regex.Pattern; import logic.MyBank; import logic.ContoCorrente; @@ -20,7 +22,7 @@ import javax.swing.border.LineBorder; public class GUIMyBank extends javax.swing.JFrame { static Border borderOriginale = UIManager.getBorder("TextField.border"); - static ContoCorrente contoCorrente; + static ContoCorrente contoCorrenteAperto; private static final java.util.logging.Logger logger = java.util.logging.Logger .getLogger(GUIMyBank.class.getName()); @@ -30,6 +32,9 @@ public class GUIMyBank extends javax.swing.JFrame { */ public GUIMyBank() { initComponents(); + lblNumeroContoCorrente.setVisible(false); + txtNumeroContoCorrente.setVisible(false); + txtNumeroContoCorrente.setEditable(false); btnVersamento.setVisible(false); btnPrelievo.setVisible(false); btnListaMovimenti.setVisible(false); @@ -45,6 +50,7 @@ public class GUIMyBank extends javax.swing.JFrame { @SuppressWarnings("unchecked") // //GEN-BEGIN:initComponents private void initComponents() { @@ -65,6 +71,8 @@ public class GUIMyBank extends javax.swing.JFrame { btnListaMovimenti = new javax.swing.JButton(); jScrollPane1 = new javax.swing.JScrollPane(); txtaListaMovimenti = new javax.swing.JTextArea(); + lblNumeroContoCorrente = new javax.swing.JLabel(); + txtNumeroContoCorrente = new javax.swing.JTextField(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); @@ -126,41 +134,14 @@ public class GUIMyBank extends javax.swing.JFrame { txtaListaMovimenti.setRows(5); jScrollPane1.setViewportView(txtaListaMovimenti); + lblNumeroContoCorrente.setText("Numero conto corrente:"); + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addGap(17, 17, 17) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(lblDataDiNascita) - .addComponent(lblSaldoIniziale)) - .addGap(18, 18, 18) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addGroup(layout.createSequentialGroup() - .addComponent(txtDataDiNascita, javax.swing.GroupLayout.PREFERRED_SIZE, 64, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(btnDataDiNascita, javax.swing.GroupLayout.PREFERRED_SIZE, 39, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addComponent(txtSaldoIniziale)) - .addGap(37, 37, 37) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(btnVersamento) - .addComponent(btnPrelievo) - .addComponent(btnListaMovimenti))) - .addGroup(layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(lblNome) - .addComponent(lblCognome) - .addComponent(lblCodiceFiscale)) - .addGap(26, 26, 26) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(txtNome, javax.swing.GroupLayout.PREFERRED_SIZE, 113, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(txtCodiceFiscale, javax.swing.GroupLayout.PREFERRED_SIZE, 115, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(txtCognome, javax.swing.GroupLayout.PREFERRED_SIZE, 113, javax.swing.GroupLayout.PREFERRED_SIZE))))) .addGroup(layout.createSequentialGroup() .addGap(99, 99, 99) .addComponent(btnAprireContoCorrente)) @@ -168,6 +149,38 @@ public class GUIMyBank extends javax.swing.JFrame { .addGap(56, 56, 56) .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 272, javax.swing.GroupLayout.PREFERRED_SIZE))) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addGap(17, 17, 17) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(lblDataDiNascita) + .addComponent(lblSaldoIniziale)) + .addGap(18, 18, 18) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addGroup(layout.createSequentialGroup() + .addComponent(txtDataDiNascita, javax.swing.GroupLayout.PREFERRED_SIZE, 64, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(btnDataDiNascita, javax.swing.GroupLayout.PREFERRED_SIZE, 39, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addComponent(txtSaldoIniziale))) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(lblNome) + .addComponent(lblCognome) + .addComponent(lblCodiceFiscale)) + .addGap(26, 26, 26) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(txtNome, javax.swing.GroupLayout.PREFERRED_SIZE, 113, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(txtCodiceFiscale, javax.swing.GroupLayout.PREFERRED_SIZE, 115, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(txtCognome, javax.swing.GroupLayout.PREFERRED_SIZE, 113, javax.swing.GroupLayout.PREFERRED_SIZE)))) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 39, Short.MAX_VALUE) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addComponent(lblNumeroContoCorrente, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(btnVersamento) + .addComponent(btnPrelievo) + .addComponent(btnListaMovimenti) + .addComponent(txtNumeroContoCorrente)) + .addGap(23, 23, 23)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) @@ -175,41 +188,48 @@ public class GUIMyBank extends javax.swing.JFrame { .addGap(14, 14, 14) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(lblNome) - .addComponent(txtNome, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addComponent(txtNome, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(lblNumeroContoCorrente)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(lblCognome) .addComponent(txtCognome, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(btnVersamento)) + .addComponent(txtNumeroContoCorrente, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(18, 18, 18) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(lblCodiceFiscale) - .addComponent(txtCodiceFiscale, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(btnPrelievo)) - .addGap(18, 18, 18) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(lblDataDiNascita) - .addComponent(txtDataDiNascita, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(btnDataDiNascita) - .addComponent(btnListaMovimenti)) - .addGap(18, 18, 18) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(lblSaldoIniziale) - .addComponent(txtSaldoIniziale, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(lblCodiceFiscale) + .addComponent(txtCodiceFiscale, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(18, 18, 18) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(lblDataDiNascita) + .addComponent(txtDataDiNascita, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(btnDataDiNascita)) + .addGap(18, 18, 18) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(lblSaldoIniziale) + .addComponent(txtSaldoIniziale, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addGroup(layout.createSequentialGroup() + .addComponent(btnVersamento) + .addGap(18, 18, 18) + .addComponent(btnPrelievo) + .addGap(18, 18, 18) + .addComponent(btnListaMovimenti))) .addGap(18, 18, 18) .addComponent(btnAprireContoCorrente) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 37, Short.MAX_VALUE) .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 65, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap(9, Short.MAX_VALUE)) + .addGap(14, 14, 14)) ); pack(); }// //GEN-END:initComponents - private void btnListaMovimentiActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnListaMovimentiActionPerformed + private void btnListaMovimentiActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_btnListaMovimentiActionPerformed txtaListaMovimenti.setText(contoCorrente.getLogOperazioni()); txtaListaMovimenti.setVisible(true); - }//GEN-LAST:event_btnListaMovimentiActionPerformed + }// GEN-LAST:event_btnListaMovimentiActionPerformed private void txtNomeFocusGained(java.awt.event.FocusEvent evt) {// GEN-FIRST:event_txtNomeFocusGained txtNome.setBorder(borderOriginale); @@ -273,18 +293,20 @@ public class GUIMyBank extends javax.swing.JFrame { }// GEN-LAST:event_btnPrelievoActionPerformed private void btnAprireContoCorrenteActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_btnAprireContoCorrenteActionPerformed - String nome = txtNome.getText(); - String cognome = txtCognome.getText(); - String codiceFiscale = txtCodiceFiscale.getText(); - // String dataDiNascita = txtDataDiNascita.getText(); - String saldoIniziale = txtSaldoIniziale.getText(); + String nome = txtNome.getText().trim(); + String cognome = txtCognome.getText().trim(); + String codiceFiscale = txtCodiceFiscale.getText().trim().toUpperCase(); + String dataDiNascitaString = txtDataDiNascita.getText().trim(); + Date dataDiNascita; + String saldoInizialeString = txtSaldoIniziale.getText().trim(); + double saldoIniziale; boolean nomeEmpty = nome.isEmpty(); boolean cognomeEmpty = cognome.isEmpty(); boolean codiceFiscaleEmpty = codiceFiscale.isEmpty(); - // boolean dataDiNascitaEmpty = dataDiNascita.isEmpty(); - boolean saldoInizialeEmpty = saldoIniziale.isEmpty(); + boolean dataDiNascitaEmpty = dataDiNascitaString.isEmpty(); + boolean saldoInizialeEmpty = saldoInizialeString.isEmpty(); - if (nomeEmpty || cognomeEmpty || codiceFiscaleEmpty /* || dataDiNascitaEmpty */ || saldoInizialeEmpty) { + if (nomeEmpty || cognomeEmpty || codiceFiscaleEmpty || dataDiNascitaEmpty || saldoInizialeEmpty) { if (nomeEmpty) { txtNome.setBorder(new LineBorder(Color.red)); } @@ -294,11 +316,9 @@ public class GUIMyBank extends javax.swing.JFrame { if (codiceFiscaleEmpty) { txtCodiceFiscale.setBorder(new LineBorder(Color.red)); } - /* - * if(dataDiNascitaEmpty){ - * txtDataDiNascita.setBorder(new LineBorder(Color.red)); - * } - */ + if (dataDiNascitaEmpty) { + txtDataDiNascita.setBorder(new LineBorder(Color.red)); + } if (saldoInizialeEmpty) { txtSaldoIniziale.setBorder(new LineBorder(Color.red)); } @@ -306,23 +326,33 @@ public class GUIMyBank extends javax.swing.JFrame { return; } - if (isCodiceFiscaleValid(codiceFiscale)) { + if (MyBank.isCodiceFiscaleValid(codiceFiscale)) { JOptionPane.showMessageDialog(null, "Il codice fiscale non è valido."); txtCodiceFiscale.setBorder(new LineBorder(Color.red)); return; } - // TODO: gestione data - // if(dataDiNascita.isEmpty()){ - // dataDiNascitaError = true; - // } - if (!isNumeroValid(saldoIniziale)) { + + try { + dataDiNascita = MyBank.dataDiNascita(dataDiNascitaString); + } catch (ParseException _) { + JOptionPane.showMessageDialog(null, "La data di nascita non è valida."); + txtDataDiNascita.setBorder(new LineBorder(Color.red)); + return; + } + + try { + saldoIniziale = MyBank.valoreDouble(saldoInizialeString); + } catch (NumberFormatException _) { JOptionPane.showMessageDialog(null, "Il saldo iniziale non è valido."); txtSaldoIniziale.setBorder(new LineBorder(Color.red)); return; } - contoCorrente = new ContoCorrente(nome, cognome, codiceFiscale, Double.parseDouble(saldoIniziale)); + this.contoCorrenteAperto = MyBank.aggiungiConto(nome, cognome, codiceFiscale, dataDiNascita, saldoIniziale); + txtNumeroContoCorrente.setText(Integer.toString(MyBank.getConti().getLast().getNumeroContoCorrente())); + lblNumeroContoCorrente.setVisible(true); + txtNumeroContoCorrente.setVisible(true); btnVersamento.setVisible(true); btnPrelievo.setVisible(true); btnListaMovimenti.setVisible(true); @@ -336,29 +366,6 @@ public class GUIMyBank extends javax.swing.JFrame { }// GEN-LAST:event_btnAprireContoCorrenteActionPerformed - boolean isCodiceFiscaleValid(String codiceFiscale) { - Pattern pattern = Pattern.compile("[A-Z]{6}[ABCDEHLMPRST]{3}\\d{2}[A-Z]\\d{3}[A-Z]"); - - return !pattern.matcher(codiceFiscale).find(); - } - - boolean isNumeroValid(String numero) { - boolean isNumeroValid = true; - double valoreNumero; - - try { - valoreNumero = Double.parseDouble(numero); - - if (valoreNumero <= 0) { - isNumeroValid = false; - } - } catch (NumberFormatException _) { - isNumeroValid = false; - } - - return isNumeroValid; - } - /** * @param args the command line arguments */ @@ -399,11 +406,13 @@ public class GUIMyBank extends javax.swing.JFrame { private javax.swing.JLabel lblCognome; private javax.swing.JLabel lblDataDiNascita; private javax.swing.JLabel lblNome; + private javax.swing.JLabel lblNumeroContoCorrente; private javax.swing.JLabel lblSaldoIniziale; private javax.swing.JTextField txtCodiceFiscale; private javax.swing.JTextField txtCognome; private javax.swing.JTextField txtDataDiNascita; private javax.swing.JTextField txtNome; + private javax.swing.JTextField txtNumeroContoCorrente; private javax.swing.JTextField txtSaldoIniziale; private javax.swing.JTextArea txtaListaMovimenti; // End of variables declaration//GEN-END:variables diff --git a/src/logic/MyBank.java b/src/logic/MyBank.java index 6734e13..c08c20c 100644 --- a/src/logic/MyBank.java +++ b/src/logic/MyBank.java @@ -36,10 +36,14 @@ public class MyBank { 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 PATH_CONTI = "./src/logic/conti/"; + private static ArrayList conti = importaConti(); + + public static ArrayList getConti() { + return conti; + } public static void main(String[] args) { int scelta = -1; - ArrayList conti = importaConti(); do { System.out.println("Scegliere un'opzione:"); @@ -58,7 +62,6 @@ public class MyBank { case 0: break; case 1: - aggiungiConto(conti); System.out.println("Numero conto: " + conti.getLast().getNumeroContoCorrente()); System.out.println("Conto corrente aggiunto con successo."); pausa(); @@ -143,114 +146,56 @@ public class MyBank { return conti; } - static void aggiungiConto(ArrayList conti) { - String nome; - String cognome; - String codiceFiscale; - Date dataDiNascita; - double saldoIniziale; + public static ContoCorrente aggiungiConto(String nome, String cognome, String codiceFiscale, Date dataDiNascita, + double saldoIniziale) { int numeroContoCorrente; - boolean error; ContoCorrente contoCorrente; + boolean exit = false; + int i = 0; - do { - error = false; - System.out.print("Inserire il proprio nome: "); - nome = sc.nextLine().trim(); + numeroContoCorrente = Math.abs(codiceFiscale.hashCode()); - System.out.print("Inserire il proprio cognome: "); - cognome = sc.nextLine().trim(); - - codiceFiscale = codiceFiscale(); - - dataDiNascita = dataDiNascita(); - - saldoIniziale = quantita("del saldo iniziale"); - - numeroContoCorrente = Math.abs(codiceFiscale.hashCode()); - - if (ContoCorrente.getNumeriContiCorrenti().contains(numeroContoCorrente)) { - System.out.println("Errore: esiste già un conto corrente per questo codice fiscale, riprovare."); - pausa(); - error = true; - } else { - File percorsoConti = new File(PATH_CONTI); - if (!percorsoConti.exists()) { - percorsoConti.mkdir(); - } - contoCorrente = new ContoCorrente(nome, cognome, codiceFiscale, dataDiNascita, saldoIniziale, - numeroContoCorrente); - conti.add(contoCorrente); - salvaContoCorrente(contoCorrente); + if (ContoCorrente.getNumeriContiCorrenti().contains(numeroContoCorrente)) { + for (; i < conti.size() && exit; i++) { + exit = conti.get(i).getNumeroContoCorrente() == numeroContoCorrente; } - } while (error); + contoCorrente = conti.get(i); + } else { + File percorsoConti = new File(PATH_CONTI); + if (!percorsoConti.exists()) { + percorsoConti.mkdir(); + } + contoCorrente = new ContoCorrente(nome, cognome, codiceFiscale, dataDiNascita, saldoIniziale, + numeroContoCorrente); + conti.add(contoCorrente); + salvaContoCorrente(contoCorrente); + } + + return contoCorrente; } - static String codiceFiscale() { - String codiceFiscale; - boolean error; + public static boolean isCodiceFiscaleValid(String codiceFiscale) { Pattern pattern = Pattern.compile("[A-Z]{6}[ABCDEHLMPRST]{3}\\d{2}[A-Z]\\d{3}[A-Z]"); - Matcher matcher; - - do { - error = false; - System.out.print("Inserire il proprio codice fiscale: "); - codiceFiscale = sc.nextLine().trim().toUpperCase(); - matcher = pattern.matcher(codiceFiscale); - if (!matcher.find()) { - System.out.println(ERRORE_GENERICO); - pausa(); - error = true; - } - } while (error); - return codiceFiscale; + return pattern.matcher(codiceFiscale).find(); } - static Date dataDiNascita() { - Date dataDiNascita = null; - boolean error; + public static Date dataDiNascita(String dataDiNascita) throws ParseException { final String FORMATO_DATA = "dd/MM/yyyy"; SimpleDateFormat sdf = new SimpleDateFormat(FORMATO_DATA); sdf.setLenient(false); - - do { - error = false; - System.out.print("Inserire la propria data di nascita nel formato " + FORMATO_DATA + ": "); - try { - dataDiNascita = sdf.parse(sc.nextLine()); - } catch (ParseException _) { - System.out.println("Errore: la data inserita non è valida."); - pausa(); - error = true; - } - } while (error); - return dataDiNascita; + return sdf.parse(dataDiNascita); } - static double quantita(String diCheCosa) { - double quantita = 0; - boolean error; + public static double valoreDouble(String numeroDouble) throws NumberFormatException { + double valoreDouble; - do { - error = false; - System.out.print("Inserire la quantità " + diCheCosa + ": "); - try { - quantita = sc.nextDouble(); - sc.nextLine(); + valoreDouble = Double.parseDouble(numeroDouble); - if (quantita <= 0) { - System.out.println("Errore: la quantità non può essere minore o uguale a zero."); - pausa(); - error = true; - } - } catch (InputMismatchException _) { - System.out.println(ERRORE_GENERICO); - pausa(); - error = true; - } - } while (error); + if (valoreDouble <= 0) { + throw new NumberFormatException(); + } - return quantita; + return valoreDouble; } static void salvaContoCorrente(ContoCorrente conto) {