#include #include #include #include #include #include #include #include using namespace std; #define SIZE(s) int((s).size()) #define REP(i,n) for (int i=0; i<(n); i++) map A; int N; char buf[1000], b2[1000], b3[1000]; string line; int main() { while (1) { A.clear(); getline(cin,line); sscanf(line.c_str(),"%d",&N); if (N==0) break; REP(i,N) { string S; int x,y; getline(cin,S); sscanf(S.c_str(),"%s %d.%d",buf,&x,&y); A[buf]=100*x+y; } while (1) { getline(cin,line); if (line=="end") break; if (line[0]=='c') { sscanf(line.c_str(),"%s %s",buf,b2); string cmd(buf), acc(b2); if (A.count(acc)) { cout << "create: already exists" << endl; } else { A[acc]=0; cout << "create: ok" << endl; } } if (line[0]=='d') { int x,y; sscanf(line.c_str(),"%s %s %d.%d",buf,b2,&x,&y); string acc(b2); if (A.count(acc)) { A[acc] += 100*x+y; printf("deposit %d.%02d: ok\n",x,y); } else { printf("deposit %d.%02d: no such account\n",x,y); } } if (line[0]=='w') { int x,y; sscanf(line.c_str(),"%s %s %d.%d",buf,b2,&x,&y); string acc(b2); if (A.count(acc)) { if (A[acc] < 100*x+y) { printf("withdraw %d.%02d: insufficient funds\n",x,y); } else { A[acc] -= 100*x+y; printf("withdraw %d.%02d: ok\n",x,y); } } else { printf("withdraw %d.%02d: no such account\n",x,y); } } if (line[0]=='t') { int x,y; sscanf(line.c_str(),"%s %s %s %d.%d",buf,b2,b3,&x,&y); string acc1(b2), acc2(b3); if (A.count(acc1) && A.count(acc2)) { if (acc1 == acc2) { printf("transfer %d.%02d: same account\n",x,y); } else { if (A[acc1] < 100*x+y) { printf("transfer %d.%02d: insufficient funds\n",x,y); } else { A[acc1] -= 100*x+y; A[acc2] += 100*x+y; if (acc1[ SIZE(acc1)-1 ] == acc2[ SIZE(acc2)-1 ]) { printf("transfer %d.%02d: ok\n",x,y); } else { printf("transfer %d.%02d: interbank\n",x,y); } } } } else { printf("transfer %d.%02d: no such account\n",x,y); } } } cout << "end" << endl << endl; getline(cin,line); } cout << "goodbye" << endl; }