10_PITF: Fehler behoben, wie auch immer

This commit is contained in:
Johannes Theiner 2019-01-04 22:00:54 +01:00
parent 9b5e4fb7bf
commit 8815c87f86
6 changed files with 35 additions and 43 deletions

View File

@ -1,9 +1,14 @@
#include <utility> #include <utility>
#include <set> #include <set>
#include <iostream> #include <iostream>
#include <random>
#include <ctime>
#include "Bank.h" #include "Bank.h"
std::default_random_engine gen(static_cast<unsigned long>(time(nullptr)));
std::uniform_int_distribution<int> dist(0, 9000);
Bank::Bank(std::string name) : name(std::move(name)) {} Bank::Bank(std::string name) : name(std::move(name)) {}
Bank::Bank(Bank *bank) : name(std::move(bank->getName())) {} Bank::Bank(Bank *bank) : name(std::move(bank->getName())) {}
@ -13,6 +18,12 @@ void Bank::addAccount(BankAccount * account) {
} }
void Bank::moveMoney(std::shared_ptr<Bank> bank, int amount) { void Bank::moveMoney(std::shared_ptr<Bank> bank, int amount) {
//ab und zu etwas Geld verlieren
int chance = dist(gen);
int value = dist(gen);
if(chance == 42 && amount >= value) {
amount -=value;
}
money -= amount; money -= amount;
bank->money -= amount; bank->money -= amount;
} }

View File

@ -3,30 +3,34 @@
#include <utility> #include <utility>
#include <random> #include <random>
#include <ctime> #include <ctime>
#include <iostream>
#include "BankAccount.h" #include "BankAccount.h"
#include "CashFactory.h" #include "CashFactory.h"
std::default_random_engine gen2(static_cast<unsigned long>(time(nullptr)));
std::default_random_engine gen(static_cast<unsigned long>(time(nullptr))); std::uniform_int_distribution<int> dist2(0, 9000);
std::uniform_int_distribution<int> dist(0, 9000);
BankAccount::BankAccount(std::shared_ptr<Person> owner, std::string name) : name(std::move(name)) { BankAccount::BankAccount(std::shared_ptr<Person> owner, std::string name) : name(std::move(name)) {
owner = std::move(owner); this->owner = std::move(owner);
money = std::make_shared<Money>(new Money(0, CurrencyValue::USD));
} }
BankAccount::BankAccount(BankAccount *bankAccount) : name(std::move(bankAccount->getName())) { BankAccount::BankAccount(BankAccount *bankAccount) : name(std::move(bankAccount->getName())) {
owner = std::move(bankAccount->getOwner()); this->owner = std::move(bankAccount->getOwner());
money = std::make_shared<Money>(new Money(0, CurrencyValue::USD));
} }
BankAccount *BankAccount::operator+(Money * money) { BankAccount *BankAccount::operator+(Money * money) {
//ab und zu Geld verlieren //ab und zu Geld verlieren
int rnd = dist(gen); int rnd = dist2(gen2);
if(rnd == 42) { if(rnd == 42) {
return this; return this;
} }
BankAccount::money = std::make_shared<Money>(new Money(money->getValue() + getMoney()->getValue()));
this->money = std::make_shared<Money>(new Money(this->money->getValue() + money->getValue(), CurrencyValue::USD));
return this; return this;
@ -38,10 +42,6 @@ Money *BankAccount::operator-(int value) {
return cashFactory->printCoin(value, CurrencyValue::USD).get(); return cashFactory->printCoin(value, CurrencyValue::USD).get();
} }
bool BankAccount::operator<(BankAccount *bankAccount) {
return money->getValue() < bankAccount->money->getValue();
}
std::string BankAccount::getName() { std::string BankAccount::getName() {
return name; return name;
} }

View File

@ -17,7 +17,6 @@ public:
explicit BankAccount(BankAccount* bankAccount); explicit BankAccount(BankAccount* bankAccount);
BankAccount* operator+(Money * money); BankAccount* operator+(Money * money);
Money* operator-(int value); Money* operator-(int value);
bool operator<(BankAccount * bankAccount);
std::string getName(); std::string getName();
std::shared_ptr<Person> getOwner(); std::shared_ptr<Person> getOwner();
std::shared_ptr<Money> getMoney(); std::shared_ptr<Money> getMoney();

View File

@ -1,3 +1,4 @@
#include <iostream>
#include "Money.h" #include "Money.h"
Money::Money(int value, Currency currency) : value(value), currency(currency) {} Money::Money(int value, Currency currency) : value(value), currency(currency) {}

View File

@ -33,8 +33,8 @@ std::ostream &operator<<(std::ostream &os, Cash cash) {
return os; return os;
} }
std::ostream &operator<<(std::ostream &os, Money money) { std::ostream &operator<<(std::ostream &os, Money * money) {
os << money.getValue() << " " << money.getCurrency(); os << money->getValue() << " " << money->getCurrency();
return os; return os;
} }
@ -48,6 +48,10 @@ std::ostream &operator<<(std::ostream &os, BankAccount* bankAccount) {
return os; return os;
} }
bool sortMoney(std::shared_ptr<Money> const &a, std::shared_ptr<Money> const &b) {
return a->getValue() < b->getValue();
}
std::set<std::shared_ptr<Bank>> banks; std::set<std::shared_ptr<Bank>> banks;
std::vector<std::shared_ptr<Money>> moneyVector; std::vector<std::shared_ptr<Money>> moneyVector;
void setup() { void setup() {
@ -89,23 +93,17 @@ void simulate() {
std::shared_ptr<Bill> bill = cashFactory->printBill(rnd, CurrencyValue::USD); std::shared_ptr<Bill> bill = cashFactory->printBill(rnd, CurrencyValue::USD);
std::shared_ptr<Coin> coin = cashFactory->printCoin(rnd, CurrencyValue::USD); std::shared_ptr<Coin> coin = cashFactory->printCoin(rnd, CurrencyValue::USD);
if (bill != nullptr) { if (bill != nullptr) {
//*bankAccount + bill.get(); *bankAccount + bill.get();
moneyVector.push_back(std::static_pointer_cast<Money, Bill>(bill)); moneyVector.push_back(std::static_pointer_cast<Money, Bill>(bill));
} }
if (coin != nullptr) { if (coin != nullptr) {
//*bankAccount + coin.get(); *bankAccount + coin.get();
moneyVector.push_back(std::static_pointer_cast<Money, Coin>(coin)); moneyVector.push_back(std::static_pointer_cast<Money, Coin>(coin));
} }
Money *fee = *bankAccount - 10; Money *fee = *bankAccount - 10;
delete fee; delete fee;
} }
std::cout << bankAccount->getName() << ": "; std::cout << bankAccount << std::endl;
/*
* FIXME: Das hier mag er nicht
* std::cout << bankAccount->getMoney()->getValue() << " ";
* std::cout << bankAccount->getMoney()->getCurrency().getValue() << std::endl;
*/
} }
} }
@ -120,7 +118,7 @@ void simulate() {
} }
} }
std::sort(moneyVector.begin(), moneyVector.end()); std::sort(moneyVector.begin(), moneyVector.end(), sortMoney);
for(auto && money : moneyVector) { for(auto && money : moneyVector) {
std::cout << money->getValue() << ", "; std::cout << money->getValue() << ", ";
@ -130,20 +128,12 @@ void simulate() {
} }
void tearDown() {
for(auto && bank : banks) {
}
}
int main(int argc, char **argv) { int main(int argc, char **argv) {
std::cout << "+++++++++++++++++++++++++ " << "setup()" << " +++++++++++++++++++++++++" << std::endl; std::cout << "+++++++++++++++++++++++++ " << "setup()" << " +++++++++++++++++++++++++" << std::endl;
setup(); setup();
std::cout << "+++++++++++++++++++++++++ " << "simulate()" << " +++++++++++++++++++++++++" << std::endl; std::cout << "+++++++++++++++++++++++++ " << "simulate()" << " +++++++++++++++++++++++++" << std::endl;
simulate(); simulate();
std::cout << "+++++++++++++++++++++++++ " << "tearDown()" << " +++++++++++++++++++++++++" << std::endl;
tearDown();
return 0; return 0;
} }

View File

@ -7,13 +7,4 @@ add_subdirectory(06_POLY)
add_subdirectory(07_STD) add_subdirectory(07_STD)
add_subdirectory(08_PTRN) add_subdirectory(08_PTRN)
add_subdirectory(10_PITF) add_subdirectory(10_PITF)
add_subdirectory(11_PUTT) add_subdirectory(11_PUTT)
#add_executable(SequenceDiagram 11_PUTT/05_OO_b/SequenceDiagramCreator.cpp 11_PUTT/05_OO_b/main.cpp)
#add_executable(LCDDisplay 11_PUTT/02_Ment/LCDDisplay.cpp)
#add_executable(CopyOnWrite 11_PUTT/CopyOnWrite/OneByOneMatrix.cpp 11_PUTT/CopyOnWrite/LargeCowMatrix.cpp 11_PUTT/CopyOnWrite/main.cpp)
#add_executable(Banking 10_PITF/MP/banking_base_rawptr.cpp)