08_PTRN: Münzen können gedruckt werden
+ Bank Konten haben jetzt Besitzer
This commit is contained in:
parent
ca86c2e3ca
commit
35406afa44
|
@ -8,55 +8,6 @@ SET(CMAKE_BUILD_TYPE Debug)
|
||||||
set (EXECUTABLE_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/bin)
|
set (EXECUTABLE_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/bin)
|
||||||
set (LIBRARY_OUTPUT_PATH ${EXECUTABLE_OUTPUT_PATH})
|
set (LIBRARY_OUTPUT_PATH ${EXECUTABLE_OUTPUT_PATH})
|
||||||
|
|
||||||
# add a target to generate API documentation with Doxygen
|
|
||||||
find_package(Doxygen)
|
|
||||||
if(DOXYGEN_FOUND)
|
|
||||||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY)
|
|
||||||
add_custom_target(doc
|
|
||||||
${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
|
|
||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
|
||||||
COMMENT "Generating API documentation with Doxygen" VERBATIM
|
|
||||||
)
|
|
||||||
endif(DOXYGEN_FOUND)
|
|
||||||
|
|
||||||
|
|
||||||
# Download and unpack googletest at configure time
|
|
||||||
configure_file(CMakeLists.txt.in googletest-download/CMakeLists.txt)
|
|
||||||
execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" .
|
|
||||||
RESULT_VARIABLE result
|
|
||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/googletest-download )
|
|
||||||
if(result)
|
|
||||||
message(FATAL_ERROR "CMake step for googletest failed: ${result}")
|
|
||||||
endif()
|
|
||||||
execute_process(COMMAND ${CMAKE_COMMAND} --build .
|
|
||||||
RESULT_VARIABLE result
|
|
||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/googletest-download )
|
|
||||||
if(result)
|
|
||||||
message(FATAL_ERROR "Build step for googletest failed: ${result}")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Prevent overriding the parent project's compiler/linker
|
|
||||||
# settings on Windows
|
|
||||||
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
|
|
||||||
|
|
||||||
# Add googletest directly to our build. This defines
|
|
||||||
# the gtest and gtest_main targets.
|
|
||||||
add_subdirectory(${CMAKE_CURRENT_BINARY_DIR}/googletest-src
|
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/googletest-build
|
|
||||||
EXCLUDE_FROM_ALL)
|
|
||||||
|
|
||||||
# The gtest/gtest_main targets carry header search path
|
|
||||||
# dependencies automatically when using CMake 2.8.11 or
|
|
||||||
# later. Otherwise we have to add them here ourselves.
|
|
||||||
if (CMAKE_VERSION VERSION_LESS 2.8.11)
|
|
||||||
include_directories("${gtest_SOURCE_DIR}/include")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Now simply link against gtest or gtest_main as needed. Eg
|
|
||||||
#add_executable(example example.cpp)
|
|
||||||
#target_link_libraries(example gtest_main)
|
|
||||||
#add_test(NAME example_test COMMAND example)
|
|
||||||
|
|
||||||
add_subdirectory(src)
|
add_subdirectory(src)
|
||||||
|
|
||||||
set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES "bin" "doc" "CMakeFiles" "C" "googletest-build" "googletest-download" "googletest-src" "lib")
|
set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES "bin" "doc" "CMakeFiles" "C" "lib")
|
||||||
|
|
|
@ -1,15 +0,0 @@
|
||||||
cmake_minimum_required(VERSION 2.8.2)
|
|
||||||
|
|
||||||
project(googletest-download NONE)
|
|
||||||
|
|
||||||
include(ExternalProject)
|
|
||||||
ExternalProject_Add(googletest
|
|
||||||
GIT_REPOSITORY https://github.com/google/googletest.git
|
|
||||||
GIT_TAG master
|
|
||||||
SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/googletest-src"
|
|
||||||
BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/googletest-build"
|
|
||||||
CONFIGURE_COMMAND ""
|
|
||||||
BUILD_COMMAND ""
|
|
||||||
INSTALL_COMMAND ""
|
|
||||||
TEST_COMMAND ""
|
|
||||||
)
|
|
42
Doxyfile
42
Doxyfile
|
@ -1,42 +0,0 @@
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
# Project related configuration options
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
PROJECT_NAME = C/C++
|
|
||||||
PROJECT_NUMBER =
|
|
||||||
OUTPUT_DIRECTORY = @CMAKE_CURRENT_SOURCE_DIR@/doc
|
|
||||||
CREATE_SUBDIRS = NO
|
|
||||||
OUTPUT_LANGUAGE = English
|
|
||||||
...
|
|
||||||
JAVADOC_AUTOBRIEF = YES
|
|
||||||
...
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
# Build related configuration options
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
EXTRACT_ALL = NO
|
|
||||||
...
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
# configuration options related to the input files
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
INPUT = @CMAKE_CURRENT_SOURCE_DIR@/src/
|
|
||||||
FILE_PATTERNS =
|
|
||||||
RECURSIVE = YES
|
|
||||||
EXCLUDE =
|
|
||||||
...
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
# configuration options related to the HTML output
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
GENERATE_HTML = YES
|
|
||||||
HTML_OUTPUT = html
|
|
||||||
HTML_FILE_EXTENSION = .html
|
|
||||||
HTML_HEADER =
|
|
||||||
HTML_FOOTER =
|
|
||||||
...
|
|
||||||
...
|
|
||||||
|
|
||||||
GENERATE_LATEX = NO
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
# Configuration::additions related to the search engine
|
|
||||||
#---------------------------------------------------------------------------
|
|
||||||
SEARCHENGINE = YES
|
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,2 @@
|
||||||
add_executable(07_STD_MP MP/grundgeruest.cpp MP/BinaryOctet.cpp MP/BinaryOctet.h)
|
add_executable(07_STD_MP MP/grundgeruest.cpp MP/BinaryOctet.cpp MP/BinaryOctet.h)
|
||||||
add_executable(07_STD_Testat Testat/grundgeruest.cpp Testat/BinaryOctet.h Testat/BinaryOctet.cpp)
|
add_executable(07_STD_Testat Testat/grundgeruest.cpp Testat/BinaryOctet.h Testat/BinaryOctet.cpp)
|
||||||
target_link_libraries(07_STD_Testat gtest_main)
|
|
||||||
add_test(NAME 07_STD_Testat COMMAND InsertBinaryOctet)
|
|
|
@ -5,7 +5,6 @@
|
||||||
#include <random>
|
#include <random>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <gtest/gtest.h>
|
|
||||||
#include "BinaryOctet.h"
|
#include "BinaryOctet.h"
|
||||||
|
|
||||||
// for println();
|
// for println();
|
||||||
|
@ -61,7 +60,3 @@ int main() {
|
||||||
std::cout << binaryOctet << std::endl;
|
std::cout << binaryOctet << std::endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(STD_Testat, InsertBinaryOctet) {
|
|
||||||
ASSERT_EQ(42, 42);
|
|
||||||
}
|
|
||||||
|
|
|
@ -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 Testat/Cash.cpp Testat/Cash.h Testat/Currency.cpp Testat/Coin.cpp Testat/Coin.h Testat/Bill.cpp Testat/Bill.h Testat/CashFactory.cpp Testat/CashFactory.h)
|
add_executable(08_PTRN_Testat Testat/main.cpp Testat/Money.cpp Testat/Money.h Testat/Currency.h Testat/BankAccount.cpp Testat/BankAccount.h Testat/Cash.cpp Testat/Cash.h Testat/Currency.cpp Testat/Coin.cpp Testat/Coin.h Testat/Bill.cpp Testat/Bill.h Testat/CashFactory.cpp Testat/CashFactory.h Testat/Person.cpp Testat/Person.h)
|
|
@ -1,14 +1,16 @@
|
||||||
#include "BankAccount.h"
|
#include "BankAccount.h"
|
||||||
|
|
||||||
BankAccount::BankAccount(std::string name) : name(std::move(name)) {}
|
BankAccount::BankAccount(Person *owner, std::string name) : name(std::move(name)) {
|
||||||
|
this->owner = owner;
|
||||||
|
}
|
||||||
|
|
||||||
BankAccount * BankAccount::operator+(Money* money) {
|
BankAccount * BankAccount::operator+(Money* money) {
|
||||||
BankAccount::money = new Money(money->getValue() + getMoney().getValue());
|
BankAccount::money = new Money(money->getValue() + getMoney().getValue());
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool BankAccount::operator<(BankAccount bankAccount) {
|
bool BankAccount::operator<(BankAccount * bankAccount) {
|
||||||
return money.getValue() < bankAccount.money.getValue();
|
return money.getValue() < bankAccount->money.getValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string BankAccount::getName() {
|
std::string BankAccount::getName() {
|
||||||
|
@ -19,5 +21,9 @@ Money BankAccount::getMoney() {
|
||||||
return money;
|
return money;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Person *BankAccount::getOwner() {
|
||||||
|
return owner;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -5,16 +5,19 @@
|
||||||
|
|
||||||
#include "Money.h"
|
#include "Money.h"
|
||||||
#include "Cash.h"
|
#include "Cash.h"
|
||||||
|
#include "Person.h"
|
||||||
|
|
||||||
class BankAccount {
|
class BankAccount {
|
||||||
private:
|
private:
|
||||||
std::string name;
|
std::string name;
|
||||||
|
Person * owner;
|
||||||
Money money;
|
Money money;
|
||||||
public:
|
public:
|
||||||
explicit BankAccount(std::string name);
|
explicit BankAccount(Person * owner, std::string name);
|
||||||
BankAccount* operator+(Money* money);
|
BankAccount* operator+(Money * money);
|
||||||
bool operator<(BankAccount bankAccount);
|
bool operator<(BankAccount * bankAccount);
|
||||||
std::string getName();
|
std::string getName();
|
||||||
|
Person * getOwner();
|
||||||
Money getMoney();
|
Money getMoney();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -13,4 +13,4 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
|
@ -8,7 +8,7 @@ int allowedCoins[8] = {1, 2, 5, 10, 20, 50, 100, 200};
|
||||||
Bill * CashFactory::printBill(int value, Currency currency) {
|
Bill * CashFactory::printBill(int value, Currency currency) {
|
||||||
auto * iter = std::find(std::begin(allowedBills), std::end(allowedBills), value);
|
auto * iter = std::find(std::begin(allowedBills), std::end(allowedBills), value);
|
||||||
if(iter == std::end(allowedBills)) {
|
if(iter == std::end(allowedBills)) {
|
||||||
std::cout << "Ungültiger Schein" << std::endl;
|
return nullptr;
|
||||||
}else {
|
}else {
|
||||||
std::string serial = randomString(15);
|
std::string serial = randomString(15);
|
||||||
while(std::find(usedSerials.begin(), usedSerials.end(), serial) != usedSerials.end()) {
|
while(std::find(usedSerials.begin(), usedSerials.end(), serial) != usedSerials.end()) {
|
||||||
|
@ -19,6 +19,13 @@ Bill * CashFactory::printBill(int value, Currency currency) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Coin * CashFactory::printCoin(int value, Currency currency) {
|
||||||
|
auto * iter = std::find(std::begin(allowedCoins), std::end(allowedCoins), value);
|
||||||
|
if(iter == std::end(allowedCoins)) {
|
||||||
|
return nullptr;
|
||||||
|
}else return new Coin(value, currency);
|
||||||
|
}
|
||||||
|
|
||||||
std::string CashFactory::randomString(size_t length) {
|
std::string CashFactory::randomString(size_t length) {
|
||||||
auto randchar = []() -> char {
|
auto randchar = []() -> char {
|
||||||
const char charset[] =
|
const char charset[] =
|
||||||
|
|
|
@ -4,13 +4,15 @@
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include "Bill.h"
|
#include "Bill.h"
|
||||||
|
#include "Coin.h"
|
||||||
|
|
||||||
class CashFactory {
|
class CashFactory {
|
||||||
private:
|
private:
|
||||||
std::vector<std::string> usedSerials;
|
std::vector<std::string> usedSerials;
|
||||||
std::string randomString(size_t length);
|
std::string randomString(size_t length);
|
||||||
public:
|
public:
|
||||||
Bill* printBill(int value, Currency currency);
|
Bill * printBill(int value, Currency currency);
|
||||||
|
Coin * printCoin(int value, Currency currency);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -2,4 +2,4 @@
|
||||||
|
|
||||||
Coin::Coin(int value, Currency currency) : Cash(value, currency) {
|
Coin::Coin(int value, Currency currency) : Cash(value, currency) {
|
||||||
|
|
||||||
}
|
}
|
|
@ -10,5 +10,4 @@ public:
|
||||||
Coin(int value, Currency currency);
|
Coin(int value, Currency currency);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1,15 +0,0 @@
|
||||||
// file Logger.cpp
|
|
||||||
#include "Logger.hpp"
|
|
||||||
|
|
||||||
Logger* Logger::_theInstance = nullptr;
|
|
||||||
|
|
||||||
Logger* Logger::getInstance(){
|
|
||||||
if (!_theInstance){
|
|
||||||
_theInstance = new StdoutLogger();
|
|
||||||
}
|
|
||||||
return _theInstance;
|
|
||||||
}
|
|
||||||
|
|
||||||
void StdoutLogger::log(std::string message, std::string file, int line){
|
|
||||||
std::cerr << message << " in " << file << " line " << line << std::endl;
|
|
||||||
}
|
|
|
@ -1,19 +0,0 @@
|
||||||
// file Logger.hpp
|
|
||||||
#ifndef Logger_hpp
|
|
||||||
#define Logger_hpp
|
|
||||||
|
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
class Logger {
|
|
||||||
static Logger* _theInstance;
|
|
||||||
public:
|
|
||||||
virtual void log(std::string message, std::string file="", int line=0) = 0;
|
|
||||||
static Logger* getInstance();
|
|
||||||
};
|
|
||||||
|
|
||||||
class StdoutLogger: public Logger {
|
|
||||||
public:
|
|
||||||
void log(std::string message, std::string file="", int line=0);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -18,28 +18,22 @@ Money &Money::operator=(Money *money) {
|
||||||
|
|
||||||
Money Money::operator+(Money &a) {
|
Money Money::operator+(Money &a) {
|
||||||
if(currency == a.currency) {
|
if(currency == a.currency) {
|
||||||
return Money();
|
return Money(value + a.value);
|
||||||
}else return Money(-1, Currency(CurrencyValue::USD));
|
}else return Money(-1, Currency(CurrencyValue::USD));
|
||||||
}
|
}
|
||||||
|
|
||||||
Money Money::operator-(Money &a) {
|
Money Money::operator-(Money &a) {
|
||||||
return Money();
|
if(currency == a.currency) {
|
||||||
|
return Money(value - a.value);
|
||||||
|
}else return Money(-1, Currency(CurrencyValue::USD));
|
||||||
}
|
}
|
||||||
|
|
||||||
const Money Money::operator++(int) {
|
const Money Money::operator++(int) {
|
||||||
return Money();
|
return Money(value++);
|
||||||
}
|
}
|
||||||
|
|
||||||
const Money Money::operator--(int) {
|
const Money Money::operator--(int) {
|
||||||
return Money();
|
return Money(value--);
|
||||||
}
|
|
||||||
|
|
||||||
bool Money::operator==(Money &a) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool Money::operator!=(Money &a) {
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Currency Money::getCurrency() {
|
Currency Money::getCurrency() {
|
||||||
|
|
|
@ -15,8 +15,6 @@ public:
|
||||||
Money operator-(Money &a);
|
Money operator-(Money &a);
|
||||||
const Money operator++(int);
|
const Money operator++(int);
|
||||||
const Money operator--(int);
|
const Money operator--(int);
|
||||||
bool operator==(Money &a);
|
|
||||||
bool operator!=(Money &a);
|
|
||||||
|
|
||||||
int getValue();
|
int getValue();
|
||||||
Currency getCurrency();
|
Currency getCurrency();
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
#include <utility>
|
||||||
|
|
||||||
|
#include "Person.h"
|
||||||
|
|
||||||
|
Person::Person(std::string name) : name(std::move(name)){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string Person::getName() {
|
||||||
|
return name;
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
#ifndef C_C_PERSON_H
|
||||||
|
#define C_C_PERSON_H
|
||||||
|
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
class Person {
|
||||||
|
private:
|
||||||
|
std::string name;
|
||||||
|
public:
|
||||||
|
Person(std::string name);
|
||||||
|
std::string getName();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
|
@ -38,8 +38,13 @@ std::ostream &operator<<(std::ostream &os, Money money) {
|
||||||
return os;
|
return os;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::ostream &operator<<(std::ostream &os, Person * person) {
|
||||||
|
os << person->getName();
|
||||||
|
return os;
|
||||||
|
}
|
||||||
|
|
||||||
std::ostream &operator<<(std::ostream &os, BankAccount bankAccount) {
|
std::ostream &operator<<(std::ostream &os, BankAccount bankAccount) {
|
||||||
os << bankAccount.getName() << ": " << bankAccount.getMoney();
|
os << bankAccount.getOwner() << " " << bankAccount.getName() << ": " << bankAccount.getMoney();
|
||||||
return os;
|
return os;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -48,10 +53,13 @@ std::ostream &operator<<(std::ostream &os, BankAccount bankAccount) {
|
||||||
int main(int argc, char **argv) {
|
int main(int argc, char **argv) {
|
||||||
std::set<BankAccount*> accounts;
|
std::set<BankAccount*> accounts;
|
||||||
|
|
||||||
accounts.insert(new BankAccount("Max Müller"));
|
Person * max = new Person("Max Müller");
|
||||||
accounts.insert(new BankAccount("Max Maier"));
|
Person * marius = new Person("Marius Müller");
|
||||||
accounts.insert(new BankAccount("Marius Muller"));
|
|
||||||
accounts.insert(new BankAccount("Test 123"));
|
accounts.insert(new BankAccount(max, "Konto 1"));
|
||||||
|
accounts.insert(new BankAccount(max, "Konto 2"));
|
||||||
|
accounts.insert(new BankAccount(marius, "Konto 1"));
|
||||||
|
accounts.insert(new BankAccount(marius, "Konto 2"));
|
||||||
|
|
||||||
auto * cashFactory = new CashFactory();
|
auto * cashFactory = new CashFactory();
|
||||||
|
|
||||||
|
@ -60,8 +68,13 @@ int main(int argc, char **argv) {
|
||||||
for (int i = 0; i < 1000; ++i) {
|
for (int i = 0; i < 1000; ++i) {
|
||||||
int rnd = distribution(generator);
|
int rnd = distribution(generator);
|
||||||
Bill * bill = cashFactory->printBill(rnd, CurrencyValue::USD);
|
Bill * bill = cashFactory->printBill(rnd, CurrencyValue::USD);
|
||||||
//std::cout << *bill << std::endl;
|
Coin * coin = cashFactory->printCoin(rnd, CurrencyValue::USD);
|
||||||
BankAccount* res = *bankAccount + bill;
|
if(bill != nullptr) {
|
||||||
|
*bankAccount + bill;
|
||||||
|
}
|
||||||
|
if(coin != nullptr) {
|
||||||
|
*bankAccount + coin;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
std::cout << *bankAccount << std::endl;
|
std::cout << *bankAccount << std::endl;
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue