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à.