08_PTNR: Weiter am Grundgerüst

This commit is contained in:
Johannes Theiner 2018-12-03 21:10:27 +01:00
parent d0cd6d6a10
commit 534006088d
10 changed files with 173 additions and 45 deletions

View File

@ -1,2 +1,2 @@
add_executable(08_PTRN_MP MP/VehicleFactory.cpp MP/VehicleFactory.hpp MP/Vehicle.cpp MP/Vehicle.hpp MP/Car.cpp MP/Car.hpp MP/Truck.cpp MP/Truck.hpp MP/Logger.cpp MP/Logger.hpp MP/main.cpp) add_executable(08_PTRN_MP MP/VehicleFactory.cpp MP/VehicleFactory.hpp MP/Vehicle.cpp MP/Vehicle.hpp MP/Car.cpp MP/Car.hpp MP/Truck.cpp MP/Truck.hpp MP/Logger.cpp MP/Logger.hpp MP/main.cpp)
add_executable(08_PTRN_Testat Testat/main.cpp Testat/Money.cpp Testat/Money.h Testat/Logger.cpp Testat/Logger.hpp Testat/Currency.h Testat/BankAccount.cpp Testat/BankAccount.h) add_executable(08_PTRN_Testat Testat/main.cpp Testat/Money.cpp Testat/Money.h Testat/Logger.cpp Testat/Logger.hpp Testat/Currency.h Testat/BankAccount.cpp Testat/BankAccount.h Testat/Cash.cpp Testat/Cash.h Testat/Currency.cpp)

View File

@ -1,17 +1,22 @@
//
// Created by JThei on 01.12.2018.
//
#include "BankAccount.h" #include "BankAccount.h"
BankAccount::BankAccount(std::string name) : name(std::move(name)) {} BankAccount::BankAccount(std::string name) : name(std::move(name)) {}
void BankAccount::add(Money _money) { void BankAccount::add(Cash cash) {
money = money + _money; money = Money(money.getValue() + cash.getValue(), cash.getCurrency());
} }
bool BankAccount::operator<(BankAccount a) { bool BankAccount::operator<(BankAccount bankAccount) {
return false; return money.getValue() < bankAccount.money.getValue();
}
std::string BankAccount::getName() {
return name;
}
Money BankAccount::getMoney() {
return money;
} }

View File

@ -1,13 +1,10 @@
//
// Created by JThei on 01.12.2018.
//
#ifndef C_C_BANKACCOUNTS_H #ifndef C_C_BANKACCOUNTS_H
#define C_C_BANKACCOUNTS_H #define C_C_BANKACCOUNTS_H
#include <unordered_map> #include <unordered_map>
#include "Money.h" #include "Money.h"
#include "Cash.h"
class BankAccount { class BankAccount {
private: private:
@ -15,9 +12,11 @@ private:
Money money; Money money;
public: public:
explicit BankAccount(std::string name); explicit BankAccount(std::string name);
void add(Money money); void add(Cash cash);
bool operator<(BankAccount a); bool operator<(BankAccount bankAccount);
std::string getName();
Money getMoney();
}; };
#endif //C_C_BANKACCOUNTS_H #endif

View File

@ -0,0 +1,13 @@
#include <utility>
#include <algorithm>
#include "Cash.h"
Cash::Cash(double value, Currency currency, std::string serial) : Money(value, currency), serial(std::move(serial)) {
}
std::string Cash::getSerial() {
return serial;
}

21
src/08_PTRN/Testat/Cash.h Normal file
View File

@ -0,0 +1,21 @@
//
// Created by JThei on 02.12.2018.
//
#ifndef C_C_CASH_H
#define C_C_CASH_H
#include <string>
#include "Money.h"
class Cash : public Money{
private:
std::string serial;
public:
Cash(double value, Currency currency, std::string serial);
std::string getSerial();
};
#endif //C_C_CASH_H

View File

@ -0,0 +1,19 @@
#include <string>
#include "Currency.h"
Currency::Currency(CurrencyValue value) : value(value) {
}
bool Currency::operator==(Currency &currency) {
return value == currency.value;
}
CurrencyValue Currency::getValue() {
return value;
}
Currency &Currency::operator=(Currency currency) {
value = currency.value;
return *this;
}

View File

@ -1,17 +1,23 @@
//
// Created by JThei on 01.12.2018.
//
#ifndef C_C_CURRENCY_H #ifndef C_C_CURRENCY_H
#define C_C_CURRENCY_H #define C_C_CURRENCY_H
enum class Currency { enum class CurrencyValue {
USD=100, USD=100,
EUR=80, EUR=80,
GPD=75 GPD=75,
};
class Currency {
private:
CurrencyValue value;
public:
Currency(CurrencyValue value);
bool operator==(Currency &currency);
Currency& operator=(Currency currency);
CurrencyValue getValue();
}; };
#endif
#endif //C_C_CURRENCY_H

View File

@ -1,15 +1,19 @@
//
// Created by JThei on 01.12.2018.
//
#include "Money.h" #include "Money.h"
Money::Money(int value, Currency currency) : value(value), currency(currency) { Money::Money(double value, Currency currency) : value(value), currency(currency) {
} }
Money& Money::operator=(Money money) {
value = money.getValue();
currency = money.getCurrency();
return *this;
}
Money Money::operator+(Money &a) { Money Money::operator+(Money &a) {
return Money(); if(currency == a.currency) {
return Money();
}else return Money(-1, Currency(CurrencyValue::USD));
} }
Money Money::operator-(Money &a) { Money Money::operator-(Money &a) {
@ -35,3 +39,7 @@ bool Money::operator!=(Money &a) {
Currency Money::getCurrency() { Currency Money::getCurrency() {
return currency; return currency;
} }
double Money::getValue() {
return value;
}

View File

@ -1,7 +1,3 @@
//
// Created by JThei on 01.12.2018.
//
#ifndef C_C_MONEY_H #ifndef C_C_MONEY_H
#define C_C_MONEY_H #define C_C_MONEY_H
@ -10,10 +6,11 @@
class Money { class Money {
private: private:
int value; double value;
Currency currency; Currency currency;
public: public:
explicit Money(int value = 0, Currency currency = Currency::USD); explicit Money(double value = 0, Currency currency = CurrencyValue::USD);
Money& operator=(Money money);
Money operator+(Money &a); Money operator+(Money &a);
Money operator-(Money &a); Money operator-(Money &a);
const Money operator++(int); const Money operator++(int);
@ -21,8 +18,9 @@ public:
bool operator==(Money &a); bool operator==(Money &a);
bool operator!=(Money &a); bool operator!=(Money &a);
double getValue();
Currency getCurrency(); Currency getCurrency();
}; };
#endif //C_C_MONEY_H #endif

View File

@ -1,15 +1,74 @@
#include <set> #include <set>
#include <algorithm>
#include <iostream>
#include <ctime>
#include <random>
#include "Currency.h" #include "Currency.h"
#include "BankAccount.h" #include "BankAccount.h"
std::default_random_engine generator;
std::uniform_real_distribution<double> distribution(-100, 500);
std::string random_string(size_t length) {
auto randchar = []() -> char {
const char charset[] =
"0123456789"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz";
const size_t max_index = (sizeof(charset) - 1);
return charset[rand() % max_index];
};
std::string str(length, 0);
std::generate_n(str.begin(), length, randchar);
return str;
}
std::string currency_to_string(CurrencyValue value) {
if(value == CurrencyValue::USD) return "US Dollar";
if(value == CurrencyValue::EUR) return "Euro";
if(value == CurrencyValue::GPD) return "British Pound";
return "Say what ?";
}
std::ostream &operator<<(std::ostream &os, Currency currency) {
os << currency_to_string(currency.getValue());
return os;
}
std::ostream &operator<<(std::ostream &os, Cash cash) {
os << cash.getValue() << " " << cash.getCurrency() << ": " << cash.getSerial();
return os;
}
std::ostream &operator<<(std::ostream &os, Money money) {
os << money.getValue() << " " << money.getCurrency();
return os;
}
std::ostream &operator<<(std::ostream &os, BankAccount bankAccount) {
os << bankAccount.getName() << ": " << bankAccount.getMoney();
return os;
}
Cash cashPrinter(double value, Currency currency) {
return Cash(value, currency, random_string(5));
}
int main(int argc, char **argv) { int main(int argc, char **argv) {
// std::set<BankAccount> accounts; std::set<BankAccount*> accounts;
//
// accounts.insert(BankAccount("Max")); accounts.insert(new BankAccount("Max"));
// accounts.insert(BankAccount("Max")); accounts.insert(new BankAccount("Max"));
// accounts.insert(BankAccount("Marius")); accounts.insert(new BankAccount("Marius"));
// accounts.insert(BankAccount("Test")); accounts.insert(new BankAccount("Test"));
std::for_each(accounts.begin(), accounts.end(), [] (BankAccount* bankAccount){
double rnd = distribution(generator);
Cash cash = cashPrinter(rnd, CurrencyValue::USD);
std::cout << cash << std::endl;
bankAccount->add(cash);
std::cout << *bankAccount << std::endl;
});
} }