/
gsb_example.cpp
84 lines (71 loc) · 3.17 KB
/
gsb_example.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include <iostream>
#include "gsb.h"
int main(int argc, const char * argv[]) {
// rejestracja obywateli na poszczególnych planetach
auto& captain = earth().registerCitizen("Jean-Luc Picard");
auto& officer = qonos().registerCitizen("Worf");
auto& b0 = bynaus().registerCitizen("00000000");
auto& b1 = bynaus().registerCitizen("11111111");
auto& binarius = bynaus().registerCitizen(b0, b1);
// możemy odszukać obywatela, o ile znamy jego identyfikator...
auto& found = earth().findCitizen(captain.id());
try {
auto& spock = earth().findCitizen("SPOCK-ID");
} catch (...) {
// ...jeśli nie istnieje, to zgłaszany jest wyjątek
::std::cout << "Spock not found" << ::std::endl;
}
/*
// nowe banki otwieramy poprzez wniosek do Gwiezdnej Komisji Bankowej
// hint: wzorzec Builder oraz fluent interface
// opłaty zawsze w ENC
auto& enterpriseBank = gkb().bankApplication()
.name("Enterprise Bank")
.checkingAccount()
.savingAccount().monthlyCharge(2.00).transferCharge(1.00).interestRate(5)
.currencyAccount().transferCharge(2.00).interestRate(1.5)
.createBank();
// domyślnie brak opłat oraz 0 oprocentowanie
auto& raisaBank = gkb().bankApplication()
.name("Raisa Bank")
.createBank();
// możemy otwierać różne rodzaje kont dla obywateli Zjednoczonej Federacji Planet
auto& picardsChecking = enterpriseBank.openCheckingAccount(captain);
auto& picardsSaving = enterpriseBank.openSavingAccount(captain);
auto& binariusCurrency = raisaBank.openCurrencyAccount(binarius, Currency::DIL);
// operacje na koncie rozliczeniowym
picardsChecking.deposit(101.5);
picardsChecking.withdraw({1.5, Currency::ENC});
picardsChecking.transfer(100, picardsSaving.id());
// operacje na koncie oszczędnościowym
picardsSaving.transfer(49.99, binariusCurrency.id(), "for binarius");
// przesuwamy kalendarz
// odsetki są kapitalizowane miesięcznie pierwszego dnia miesiąca o g. 0
// opłaty miesięczne za prowadzenie konta są pobierane pierwszego dnia miesiąca o g. 0
interstellarClock().nextMonth().nextDay();
// operacje na koncie walutowym
// domyślnie kurs jest 1 do 1
binariusCurrency.withdraw(1);
binariusCurrency.withdraw({1, Currency::ENC});
// zmiana kursu waluty i wypłata
raisaBank.exchangeTable()
.exchangeRate(Currency::DIL).buyingRate(2.0).sellingRate(3.0);
binariusCurrency.withdraw({1, Currency::ENC});
binariusCurrency.withdraw({1.0, Currency::DIL});
// stan konta rozliczeniowego Picarda
::std::cout << picardsChecking.balance() << ::std::endl;
::std::cout << picardsChecking.history() << ::std::endl;
// stan konta oszczędnościowego Picarda
::std::cout << picardsSaving << ::std::endl;
// stan konta walutowego Binariusa
::std::cout << binariusCurrency << ::std::endl;
// próba przelewu na nieistniejące konto...
try {
binariusCurrency.transfer(1, "Far Far In a Galaxy");
} catch (...) {
// ...powinna zakończyć się wyjątkiem
::std::cout << "Account not found" << ::std::endl;
}
*/
return 0;
}