#include #include #include #include using namespace std; typedef double TCash; struct bank { string name; TCash money; }; typedef unsigned long Uint; typedef signed long Sint; /* #define DEBUG(str) cout << str /*/ #define DEBUG(str) (void(0)) //*/ int main() { double load; while(true) { vector banks; Sint num; cin >> num; if(!num) break; for(Sint i = 0; i < num; i++) { bank new_bank; cin >> new_bank.name; //cin >> new_bank.money; cin >> load; new_bank.money = (TCash) (load*1024); banks.push_back(new_bank); } string str; while(true) { cin >> str; if(str == "end") { cout << "end" << endl << endl; break; } else if(str == "withdraw") { istringstream iss; cout << "withdraw "; string bank_name; string s_money; TCash d_money; cin >> bank_name; //cin >> s_money; cin >> s_money; //s_money = (TCash) (load * 1024); cout << s_money << ": "; iss.str(s_money); //iss >> d_money; iss >> load; d_money = (TCash) (load * 1024); DEBUG("<" << d_money << ">"); bool founded = false; for(Uint i = 0; i < banks.size(); i++) { bank &w_bank = banks.at(i); if(w_bank.name == bank_name) { founded = true; if(d_money > w_bank.money) { cout << "insufficient funds"; } else { w_bank.money -= d_money; cout << "ok"; DEBUG(" " << w_bank.money); } break; } } if(!founded) cout << "no such account"; } else if(str == "deposit") { istringstream iss; string bank_name; string str_money; TCash money; cin >> bank_name; cin >> str_money; cout << "deposit " << str_money << ": "; iss.str(str_money); //iss >> money; iss >> load; money = (TCash) (load * 1024); bool founded = false; for(Uint i = 0; i < banks.size(); i++) { bank &w_bank = banks.at(i); if(w_bank.name == bank_name) { founded = true; w_bank.money += money; cout << "ok"; DEBUG(" " << w_bank.money); break; } } if(!founded) cout << "no such account"; } else if(str == "transfer") { istringstream iss; string bank_name_1, bank_name_2; string str_money; TCash money; bank *bank1 = NULL; bank *bank2 = NULL; cin >> bank_name_1 >> bank_name_2 >> str_money; cout << "transfer " << str_money << ": "; iss.str(str_money); //iss >> money; iss >> load; money = (TCash) (load * 1024); if(bank_name_1 == bank_name_2) { cout << "same account"; } else { bool founded1 = false; bool founded2 = false; for(Uint i = 0; (i < banks.size()); i++) { bank &work_bank = banks.at(i); if(work_bank.name == bank_name_1) { bank1 = &work_bank; founded1 = true; } if(work_bank.name == bank_name_2) { bank2 = &work_bank; founded2 = true; } if(founded1 && founded2) break; } if(founded1 && founded2) { if(bank1->money < money) { cout << "insufficient funds"; } else { bank1->money -= money; bank2->money += money; DEBUG(" " << bank1->money); DEBUG(" " << bank2->money); if(bank_name_1[5] == bank_name_2[5]) cout << "ok"; else cout << "interbank"; } } else { cout << "no such account"; } } } else if(str == "create") { string new_bank_name; cin >> new_bank_name; cout << "create: "; bool founded = false; for(Uint i = 0; i < banks.size(); i++) { if(banks.at(i).name == new_bank_name) { founded = true; cout << "already exists"; break; } } if(!founded) { bank new_bank; new_bank.name = new_bank_name; new_bank.money = 0; banks.push_back(new_bank); cout << "ok"; } } cout << endl; } banks.clear(); } cout << "goodbye" << endl; return 0; }