Classe conto corrente

di il
16 risposte

Classe conto corrente

Salve, ho progettato una classe conto corrente, a richiesta del mio professore, con la particolarità che la classe doveva salvare la parte in
euro e in centesimi separatamente. Io lo progettata ed è funzionante tranne in casi particolari come, il prelievo nel caso in cui i centesimi superino
i centesimi precedenti oppure nel caso di deposito che invece di darmi ad esempio 10.10 + 10.90= 21 mi genera 20.100 nonostante gli if.
ho cercato altrove pensando che si dovesse fare uso di eventuali this-> , ma nulla.
questo è il mio lavoro: (file contocorrente.hpp che contiene la classe con i metodi pubblici ma i campi tasso, unità, centesimi privati)
(file driver che contiene il main con la creazione del oggetto e lavorazione)
file contocorrente.cpp

#include <iostream>
#include "contocorrenti.hpp"

ContoCorrente::ContoCorrente()
{
unita = 0;
centesimi = 0;
tasso = 0.0;

}


ContoCorrente::ContoCorrente(float t)
{
unita = 0;
centesimi = 0;
tasso = t;
}

float ContoCorrente::TassoInteresse()
{ return tasso; }

int ContoCorrente::SaldoInEuro()
{ return unita; }

int ContoCorrente::SaldoCentesimi()
{ return centesimi; }



void ContoCorrente::FissaTassoInteresse(float t)
{
tasso = t;

}

void ContoCorrente::DepositaEuro(int u, int c)
{
int cent;
int eur;
cent = centesimi + c;
eur = unita + u;
if (cent >= 100)
{
centesimi = cent - 100;
unita += 1;
}
else
{
unita = eur;
centesimi = cent;
}
}



void ContoCorrente::PrelevaEuro(int u, int c)
{
if (u > unita && c > centesimi)
cerr << "importo non disponibile";
unita = unita - u;
if (centesimi < c)
{
centesimi = centesimi + 100 - c;
unita = unita - 1;
}
else
{
centesimi -= c;
unita -= u;
}
}

#include <iostream>
#include <iomanip>
#include "contocorrenti.hpp"

using namespace std;

void InputEuro(int& e, int& c);

int main()
{
int euro, cent;
int scelta;
float t;
ContoCorrente cc;

do
{ cout << "Saldo corrente: " << cc.SaldoInEuro() << "."
<< setw(2) << setfill('0') // istruzioni di formato: per vedere i cent
// sempre con due cifre: 13.05 e non 13.5
<< cc.SaldoCentesimi() << " (lire: "
<< cc.SaldoInLire() << ")" << endl
<< "Quale operazione vuoi effettuare?\n"
<< "1: Fissa Tasso\n"
<< "2: Deposita Euro\n"
<< "3: Preleva Euro\n"
<< "4: Aggiorna Saldo\n"
<< "0: Esci\n\n"
<< "Scelta: ";
cin >> scelta;
cout << endl;
switch (scelta)
{
case 1:
cout << "Nuovo tasso : ";
cin >> t;
cc.FissaTassoInteresse(t);
break;
case 2:
InputEuro(euro,cent);
cc.DepositaEuro(euro,cent);
break;
case 3:
InputEuro(euro,cent);
cc.PrelevaEuro(euro,cent);
break;
case 4:
cc.AggiornaSaldo();
break;
}
}
while (scelta != 0);
}

void InputEuro(int& e, int& c)
{
cout << "Euro: ";
cin >> e;
cout << "Centesimi: ";
cin >> c;
}


Non capisco dove stia l'errore. Grazie per la disponibiltà.

16 Risposte

  • Re: Classe conto corrente

    Un consiglio ... Scrivi un paio di funzioni private che trasformino tutto in centesimi e da centesimi. In questo modo tutte le operazioni saranno più semplici.
  • Re: Classe conto corrente

    Mi sembra già abbastanza semplice cosi, sarebbero funzioni in più :/ evitabili da semplici 2 if nelle rispettive funzioni deposità e preleva.
  • Re: Classe conto corrente

    Fai come vuoi ...
  • Re: Classe conto corrente

    Funziona tutto, solo che nel momento ad esempio in cui ho 10.70 e faccio un prelievo di 5.90 mi da come saldo corrente: 5.4294967286.
    non capisco da dove derivi quel numero che dovrebbe essere salvato nel campo centesimi.
  • Re: Classe conto corrente

    Dove sta il codice per visualizzare il saldo?
  • Re: Classe conto corrente

    Nel file driver messo all inizio sotto il file contocorrente.cpp nel ciclo while ad ogni operazione scelta ti dice in automatico la situazione, da cui le prime funzioni nel file contocorrente.cpp dopo il costruttore saldoineuro e saldoincentesimi.
  • Re: Classe conto corrente

    Lo ricopio che sopra sembra un tutt'uno.
    driver.cpp


    #include <iostream>
    #include <iomanip>
    #include "contocorrenti.hpp"

    using namespace std;

    void InputEuro(int& e, int& c);

    int main()
    {
    int euro, cent;
    int scelta;
    float t;
    ContoCorrente cc;

    do
    { cout << "Saldo corrente: " << cc.SaldoInEuro() << "."
    << setw(2) << setfill('0') // istruzioni di formato: per vedere i cent
    // sempre con due cifre: 13.05 e non 13.5
    << cc.SaldoCentesimi() << " (lire: "
    << cc.SaldoInLire() << ")" << endl
    << "Quale operazione vuoi effettuare?\n"
    << "1: Fissa Tasso\n"
    << "2: Deposita Euro\n"
    << "3: Preleva Euro\n"
    << "4: Aggiorna Saldo\n"
    << "0: Esci\n\n"
    << "Scelta: ";
    cin >> scelta;
    cout << endl;
    switch (scelta)
    {
    case 1:
    cout << "Nuovo tasso : ";
    cin >> t;
    cc.FissaTassoInteresse(t);
    break;
    case 2:
    InputEuro(euro,cent);
    cc.DepositaEuro(euro,cent);
    break;
    case 3:
    InputEuro(euro,cent);
    cc.PrelevaEuro(euro,cent);
    break;
    case 4:
    cc.AggiornaSaldo();
    break;
    }
    }
    while (scelta != 0);
    }

    void InputEuro(int& e, int& c)
    {
    cout << "Euro: ";
    cin >> e;
    cout << "Centesimi: ";
    cin >> c;
    }
  • Re: Classe conto corrente

    Questo è il file contocorrenti.hpp



    #ifndef CONTOCORRENTI_HPP
    #define CONTOCORRENTI_HPP

    #include <iostream>

    using namespace std;

    class ContoCorrente
    {
    public:

    ContoCorrente();
    ContoCorrente(float t);
    float TassoInteresse();
    int SaldoInEuro();
    int SaldoCentesimi();
    int SaldoInLire();
    void FissaTassoInteresse(float t);
    void DepositaEuro(int u, int c);
    void PrelevaEuro(int u, int c);
    void AggiornaSaldo();

    private:
    int unita;
    int centesimi;
    float tasso;
    };



    #endif
  • Re: Classe conto corrente

    File driver? Ma che intendi con "file driver"?

    Comunque, manca il codice di un paio di metodi ... AggiornaSaldo e SaldoInLire
  • Re: Classe conto corrente

    Per file driver intendo il file.cpp che contiene sostanzialmente il main che poi con un include includerà le librerie, il prof insiste nella divisione in 3 file: il file hpp con la classe , il file cpp con la definizione dei metodi, il file driver che contiene il main.
    per quanto riguarda i metodi rimanenti non li ho fatti perchè è inutile che le faccia se non risolvo questo problema
  • Re: Classe conto corrente

    Ma se non li fai NON è possibile compilare il programma e lo stesso non può essere provato. Che senso ha quello che dici?
  • Re: Classe conto corrente

    Si ma basta metterli come commenti, oppure non chiamarle mai perchè nel switch non scieglierò mai quell'opzione! :/
  • Re: Classe conto corrente

    Comunque le ho fatte, non le ho messe perchè non son sicuro nemmeno di quelle, anche perchè non è possibile provarle finche non mi funzionano le due funzioni indicate nel problema, per averle fatte le ho fatte
  • Re: Classe conto corrente

    Sapresti invece darmi un aiuto con il deposita/preleva, che è li se non nel main il problema
Devi accedere o registrarti per scrivere nel forum
16 risposte