47 lines
1.7 KiB
C++
47 lines
1.7 KiB
C++
#include "Drone.h"
|
|
#include <cmath>
|
|
#include <iostream>
|
|
|
|
// #define DEBUG
|
|
|
|
float Drone::calculateChange(float total, float paid) { return paid - total; }
|
|
|
|
void Drone::returnChange(float change) {
|
|
float restChange = change;
|
|
std::cout << "Restbetrag: " << restChange << std::endl;
|
|
std::sort(availableCashInstances, availableCashInstances + CashInstanceSize,
|
|
std::greater<>());
|
|
for (int i = 0; i < CashInstanceSize; i++) {
|
|
if (availableCashInstances[i].value >= restChange) {
|
|
}
|
|
while (restChange >= availableCashInstances[i].value &&
|
|
availableCashInstances[i].availableAmount > 0) {
|
|
#ifdef DEBUG
|
|
std::cout << "restChange: " << restChange
|
|
<< " Current Coin: " << availableCashInstances[i].value
|
|
<< std::flush << std::endl;
|
|
#endif
|
|
availableCashInstances[i].availableAmount--;
|
|
restChange =
|
|
std::round((restChange - availableCashInstances[i].value) * 100) /
|
|
100;
|
|
}
|
|
}
|
|
if (restChange > 0.009) {
|
|
for (int i = CashInstanceSize - 1; i >= 0; i--) {
|
|
if (availableCashInstances[i].value >= restChange &&
|
|
availableCashInstances[i].availableAmount > 0) {
|
|
availableCashInstances[i].availableAmount--;
|
|
restChange =
|
|
std::round((restChange - availableCashInstances[i].value) * 100) /
|
|
100;
|
|
std::cout << "Warnung: Rückgeld kann nicht genau herausgegeben werden! "
|
|
"Ausbezahlter Betrag überschreitet den genauen Wert um "
|
|
<< restChange * (-1) << std::endl;
|
|
return;
|
|
}
|
|
}
|
|
std::cout << "Nicht genügend Restgeld vorhanden! Fehlender Betrag: "
|
|
<< restChange << std::endl;
|
|
}
|
|
} |