Gestione Bancomat problema array per i movimenti conto

Corso Live Part-time Su Fondamenti Di Java Forum Java Gestione Bancomat problema array per i movimenti conto

  • Questo topic ha 4 risposte, 1 partecipante ed è stato aggiornato l'ultima volta 2 anni, 10 mesi fa da Alex.
Stai visualizzando 5 post - dal 1 a 5 (di 5 totali)
  • Autore
    Post
  • #5622
    Alex
    Partecipante
    Up
    0
    Down
    ::

    Ho un problema, secondo me mi sto perdendo in un bicchiere d’acqua ma non riesco ad uscirne.

    La traccia è questa:
    Scrivere una classe per la gestione di un bancomat.

    Deve essere possibile:
    Prelevare, se c’è disponibilità sul conto, e poter scegliere il taglio di banconote da consegnare
    Versare
    Ottenere la lista degli ultimi 20 movimenti

    Il mio output quando voglio visualizzare l’array mi da:
    ELENCO MOVIMENTI
    19 //questo sarebbe il numero del movimento
    00001514 //questo il numero del conto
    5000.0 // questo il saldo disponibile alla fine di quel movimento versamento/prelievo

    19
    00001514
    5000.0

    19
    00001514
    5000.0

    stampa sempre questo per 20 volte, mi sono perso e non riesco a capire perchè non riesco a salvare nell’array movimento per movimento.

    IL CODICE DELLA CLASSE GestioneBancomat E’ QUESTO:

    public class GestioneBancomat {

    protected String numeroConto;
    protected float SaldoTotale = 0;
    protected int numMov = 0;
    private GestioneBancomat[] movimenti = new GestioneBancomat[20];

    public void inserisciMovimento (GestioneBancomat m) {
    for (int i = 0; i < 20; i++) {
    movimenti[i] = m;
    numMov = i;
    }
    }

    public void stampaMovimenti() {
    System.out.println(“ELENCO MOVIMENTI”);
    for (int s = 0; s < movimenti.length; s++) {
    System.out.println(movimenti[s].getNumMov());
    System.out.println(movimenti[s].getNumeroConto());
    System.out.println(movimenti[s].getSaldoTotale());
    System.out.println();
    }
    }

    public void prelievo(float sommaDaPrelevare, int taglioBanconote) {

    if (this.SaldoTotale == 0) {
    System.out.println(“Sul conto non sono presenti soldi da prelevare!”);
    return;
    }

    if (this.SaldoTotale < sommaDaPrelevare) {
    System.out.println(“La somma richiesta è maggiore del saldo disponibile sul conto corrente”);
    return;
    }

    if (taglioBanconote == 20 || taglioBanconote == 50 || taglioBanconote == 100) {
    System.out.println(“Hai scelto di prelevare ” + sommaDaPrelevare + ” in banconote da ” + taglioBanconote);
    this.SaldoTotale = SaldoTotale – sommaDaPrelevare;
    System.out.println(“Il nuovo saldo è: ” + this.SaldoTotale + “€”);
    } else {
    System.out.println(“Ci dispiace ma questo ATM può erogare soltanto banconote nei sequesti tagli 20€, 50€, 100€”);
    }

    }

    public void deposito (float sommaDaDepositare) {
    this.SaldoTotale = this.SaldoTotale + sommaDaDepositare;
    }

    public int getNumMov() {
    return numMov;
    }
    public void setNumMov(int numMov) {
    this.numMov = numMov;
    }
    public String getNumeroConto() {
    return numeroConto;
    }
    public void setNumeroConto(String numeroConto) {
    this.numeroConto = numeroConto;
    }
    public float getSaldoTotale() {
    return SaldoTotale;
    }
    public void setSaldoTotale(float saldoTotale) {
    SaldoTotale = saldoTotale;
    }

    }

    IL CODICE DEL main E’:

    import java.util.Scanner;

    public class testGestioneBancomat {

    public static void main(String[] args) {

    int sceltaMenu;
    boolean cicloContinuoMenu = true;
    String contoCorrente;
    float saldoIniziale;
    int taglioBanconote;
    float sommaDaPrelevare;
    float sommaDaDepositare;

    Scanner tas = new Scanner(System.in);

    GestioneBancomat c1 = new GestioneBancomat();

    System.out.print(“Inserisci il numero di conto corrente: “);
    contoCorrente = tas.nextLine();
    c1.setNumeroConto(contoCorrente);
    System.out.print(“Inserisci il saldo iniziale del tuo conto corrente: “);
    saldoIniziale = tas.nextFloat();
    c1.setSaldoTotale(saldoIniziale);

    System.out.println();
    System.out.println(“Stai operando sul conto: ” + c1.getNumeroConto());
    System.out.println();

    do {
    System.out.println(“Benvenuto, fai una scelta tra le seguenti:”);
    System.out.println(“Digita 1 per visualizzare il saldo del tuo conto”);
    System.out.println(“Digita 2 per prelevare saldo dal tuo conto”);
    System.out.println(“Digita 3 per depositare saldo nel tuo conto”);
    System.out.println(“Digita un numero negativo (ES. -1) per terminare il programma”);
    System.out.println();

    sceltaMenu = tas.nextInt();

    switch (sceltaMenu) {
    case 1:
    //System.out.println(“test1”);
    System.out.print(“Il tuo saldo è: ” + c1.getSaldoTotale() + “€”);
    System.out.println();
    System.out.println();
    break;

    case 2:
    //System.out.println(“test2”);
    System.out.print(“Inserisci la somma da prelevare (saldo disponibile): ” + c1.getSaldoTotale() + “: “);
    sommaDaPrelevare = tas.nextFloat();
    System.out.print(“Inserisci il taglio delle banconote tra 20€ – 50€ – 100€: “);
    taglioBanconote = tas.nextInt();
    c1.prelievo(sommaDaPrelevare, taglioBanconote);
    c1.inserisciMovimento(c1);
    System.out.println();
    break;

    case 3:
    //System.out.println(“test3”);
    System.out.print(“Inserisci la somma da depositare: “);
    sommaDaDepositare = tas.nextFloat();
    c1.deposito(sommaDaDepositare);
    System.out.println(“Il nuovo saldo è: ” + c1.getSaldoTotale() + “€”);
    c1.inserisciMovimento(c1);
    System.out.println();
    break;

    case 4:
    c1.stampaMovimenti();
    break;

    case -1 :
    System.out.println(“******* PROGRAMMA TERMINATO *******”);
    System.exit(1);
    default:
    System.out.println(“Nessuna scelta corretta”);
    System.out.println();
    break;
    }

    } while (cicloContinuoMenu); //il programma continua fin quando questa condizione è vera

    }

    }

    Una dritta per tornare sulla strada giusta?
    Grazie.

    #5623
    ANTONIO PAGANO
    Ospite
    Up
    0
    Down
    ::

    Il problema principale è il metodo inseriscimovimento, non hai messo la logica per memorizzare gli ultimi 20 movimenti. Potresti ad esempio mantenere nella prima posizione l’ultimo movimento, nella seconda il penultimo e cosi vai. Questo comporta che devi traslare verso destra il contenuto dell’array.
    Altra cosa, l’array deve essere di float per memorizzare i movimenti.
    Di seguito una possibile soluzione:

    package com;

    public class GestioneBancomat {

    protected String numeroConto;
    protected float SaldoTotale = 0;
    private float[] movimenti = new float[20];

    public void inserisciMovimento(float m) {
    for (int i = movimenti.length – 1; i > 0; i–) {

    movimenti[i] = movimenti[i – 1];

    }
    movimenti[0] = m;
    }

    public void stampaMovimenti() {
    System.out.println(“ELENCO MOVIMENTI”);
    for (int s = 0; s < movimenti.length; s++) {
    if (movimenti[s] != 0)
    System.out.println(“movimento numero:” + s + ” con importo ” + movimenti[s]);
    }
    System.out.println();
    }

    public void prelievo(float sommaDaPrelevare, int taglioBanconote) {

    if (this.SaldoTotale == 0) {
    System.out.println(“Sul conto non sono presenti soldi da prelevare!”);
    return;
    }

    if (this.SaldoTotale < sommaDaPrelevare) {
    System.out.println(“La somma richiesta è maggiore del saldo disponibile sul conto corrente”);
    return;
    }

    if (taglioBanconote == 20 || taglioBanconote == 50 || taglioBanconote == 100) {
    System.out.println(“Hai scelto di prelevare ” + sommaDaPrelevare + ” in banconote da ” + taglioBanconote);
    this.SaldoTotale = SaldoTotale – sommaDaPrelevare;
    this.inserisciMovimento(-sommaDaPrelevare);
    System.out.println(“Il nuovo saldo è: ” + this.SaldoTotale + “€”);
    } else {
    System.out.println(
    “Ci dispiace ma questo ATM può erogare soltanto banconote nei sequesti tagli 20€, 50€, 100€”);
    }

    }

    public void deposito(float sommaDaDepositare) {
    this.SaldoTotale = this.SaldoTotale + sommaDaDepositare;
    inserisciMovimento(sommaDaDepositare);
    }

    public String getNumeroConto() {
    return numeroConto;
    }

    public void setNumeroConto(String numeroConto) {
    this.numeroConto = numeroConto;
    }

    public float getSaldoTotale() {
    return SaldoTotale;
    }

    public void setSaldoTotale(float saldoTotale) {
    SaldoTotale = saldoTotale;
    }
    }

    Nel main abbiamo:
    public static void main(String[] args) {

    int sceltaMenu;
    boolean cicloContinuoMenu = true;
    String contoCorrente;
    float saldoIniziale;
    int taglioBanconote;
    float sommaDaPrelevare;
    float sommaDaDepositare;

    Scanner tas = new Scanner(System.in);

    GestioneBancomat c1 = new GestioneBancomat();

    System.out.print(“Inserisci il numero di conto corrente: “);
    contoCorrente = tas.nextLine();
    c1.setNumeroConto(contoCorrente);
    System.out.print(“Inserisci il saldo iniziale del tuo conto corrente: “);
    saldoIniziale = tas.nextFloat();
    c1.setSaldoTotale(saldoIniziale);

    System.out.println();
    System.out.println(“Stai operando sul conto: ” + c1.getNumeroConto());
    System.out.println();

    do {
    System.out.println(“Benvenuto, fai una scelta tra le seguenti:”);
    System.out.println(“Digita 1 per visualizzare il saldo del tuo conto”);
    System.out.println(“Digita 2 per prelevare saldo dal tuo conto”);
    System.out.println(“Digita 3 per depositare saldo nel tuo conto”);
    System.out.println(“Digita 4 per visualizzare la lista movimenti”);
    System.out.println(“Digita -1 per terminare il programma”);
    System.out.println();

    sceltaMenu = tas.nextInt();

    switch (sceltaMenu) {
    case 1:
    // System.out.println(“test1”);
    System.out.print(“Il tuo saldo è: ” + c1.getSaldoTotale() + “€”);
    System.out.println();
    System.out.println();
    break;

    case 2:
    // System.out.println(“test2”);
    System.out.print(“Inserisci la somma da prelevare (saldo disponibile): ” + c1.getSaldoTotale() + “: “);
    sommaDaPrelevare = tas.nextFloat();
    System.out.print(“Inserisci il taglio delle banconote tra 20€ – 50€ – 100€: “);
    taglioBanconote = tas.nextInt();
    c1.prelievo(sommaDaPrelevare, taglioBanconote);
    System.out.println();
    break;

    case 3:
    // System.out.println(“test3”);
    System.out.print(“Inserisci la somma da depositare: “);
    sommaDaDepositare = tas.nextFloat();
    c1.deposito(sommaDaDepositare);
    System.out.println(“Il nuovo saldo è: ” + c1.getSaldoTotale() + “€”);
    System.out.println();
    break;

    case 4:
    c1.stampaMovimenti();
    break;

    case -1:
    System.out.println(“******* PROGRAMMA TERMINATO *******”);
    System.exit(1);
    default:
    System.out.println(“Nessuna scelta corretta”);
    System.out.println();
    break;
    }

    } while (cicloContinuoMenu); // il programma continua fin quando questa condizione è vera

    }

    #5624
    ANTONIO PAGANO
    Ospite
    Up
    0
    Down
    ::

    dimenticavo, nella soluzione proposta abbiamo ignorato il fatto che se prelevi 60 euro e mi chiedi banconote da 100 dovrebbe segnalare l’incoerenza.

    #5625
    Alex
    Ospite
    Up
    0
    Down
    ::

    Perfetto grazie ho capito il problema.

    #5626
    Alex
    Ospite
    Up
    0
    Down
    ::

    Sisi lo so ci sono diverse ottimizzazioni da fare ma stavo pensando ancora ai problemi più grossi, in questo caso l’array

Stai visualizzando 5 post - dal 1 a 5 (di 5 totali)
  • Devi essere connesso per rispondere a questo topic.