#include #include #include #include using namespace std; struct account { int accountNumber; int bankNumber; int cash; account(int accountNumber, int bankNumber, int cash) {this->accountNumber = accountNumber; this->bankNumber = bankNumber; this->cash = cash;}; }; #define EPSILON 0 vector accounts; /* bool exists(int accountNumber, int bankNumber) { for (unsigned int i = 0; i < accounts.size(); i++) { if ((accounts[i].accountNumber == accountNumber) && (accounts[i].bankNumber == bankNumber)) { return true; } } return false; } */ account* getAccount(int accountNumber, int bankNumber) { for (unsigned int i = 0; i < accounts.size(); i++) { if ((accounts[i].accountNumber == accountNumber) && (accounts[i].bankNumber == bankNumber)) { return &accounts[i]; } } return NULL; } int main(int, char**) { int accountCount; do { int accountNumber; int bankNumber; int accountNumber2; int bankNumber2; char dummy; int cash; float floatcash; cin >> accountCount; if (accountCount > 0) { accounts.clear(); for (int i = 0; i < accountCount; i++) { cin >> accountNumber; cin >> dummy; cin >> bankNumber; cin >> floatcash; cash = int(floatcash * 100); accounts.push_back(account(accountNumber, bankNumber, cash)); } // nacitat instrukce string command; do { cin >> command; if (command == "create") { cout << "create: "; cin >> accountNumber; cin >> dummy; cin >> bankNumber; if (getAccount(accountNumber, bankNumber) != NULL) { cout << "already exists" << endl; } else { accounts.push_back(account(accountNumber, bankNumber, 0)); cout << "ok" << endl; } } else if (command == "deposit") { cin >> accountNumber; cin >> dummy; cin >> bankNumber; cin >> floatcash; cash = int(floatcash * 100); cout << "deposit " << fixed << setprecision(2) << floatcash << ": "; account *a = getAccount(accountNumber, bankNumber); if (a == NULL) { cout << "no such account" << endl; } else { a->cash += cash; cout << "ok" << endl; } } else if (command == "withdraw") { cin >> accountNumber; cin >> dummy; cin >> bankNumber; cin >> floatcash; cash = int(floatcash * 100); cout << "withdraw " << fixed << setprecision(2) << floatcash << ": "; account *a = getAccount(accountNumber, bankNumber); if (a == NULL) { cout << "no such account" << endl; } else if (a->cash + EPSILON < cash) { cout << "insufficient funds" << endl; } else { a->cash -= cash; cout << "ok" << endl; } } else if (command == "transfer") { cin >> accountNumber; cin >> dummy; cin >> bankNumber; cin >> accountNumber2; cin >> dummy; cin >> bankNumber2; cin >> floatcash; cash = int(floatcash * 100); cout << "transfer " << fixed << setprecision(2) << floatcash << ": "; account *a = getAccount(accountNumber, bankNumber); account *b = getAccount(accountNumber2, bankNumber2); if ((a == NULL) || (b == NULL)) { cout << "no such account" << endl; } else if ((a->accountNumber == b->accountNumber) && (a->bankNumber == b->bankNumber)) { cout << "same account" << endl; } else if (a->cash + EPSILON < cash) { cout << "insufficient funds" << endl; } else { a->cash -= cash; b->cash += cash; if (a->bankNumber != b->bankNumber) { cout << "interbank" << endl; } else { cout << "ok" << endl; } } } } while (command != "end"); cout << "end" << endl << endl; } else { cout << "goodbye" << endl; } } while (accountCount > 0); return 0; }