#include #include struct list { list *dalsi[10]; int castka; }; list *koren; int celkem_uctu; int celkem_penez; char *form(int i) { static char buf[100]; char *x=buf+sprintf(buf,"%i",i/100); *x='.';x++; i=i%100; if (i<10) {*x='0';x++;}; sprintf(x,"%i",i); return buf; } int cticastka() { int a,b; scanf("%i.%i",&a,&b); return (a*100+b); } void init(list *l) { for (int i=0;i<10;i++) l->dalsi[i]=0; l->castka=0; } void hledej(char *&c,list *&l) { l=koren; while (l->dalsi[*c-'0']!=0 && *c!=0) { l=l->dalsi[*c-'0']; c++; } // printf("Nalezeno %s\n",c); } void zaloz(char *ucet) { list *l,*n; char *c=ucet; hledej(c,l); if (*c!=0) //nenalezen { while (*c!=0) { n=new list; init(n); l->dalsi[*c-'0']=n; c++; l=n; }; n->castka=0; celkem_uctu++; printf("Ucet %s vytvoren.\n",ucet); } else { printf("Ucet %s uz existuje.\n",ucet); } } void uloz(char *ucet,int n) { char *c=ucet; list *l; hledej(c,l); //printf(*c); if (*c==0) //nalezeno { l->castka+=n; celkem_penez+=n; printf("Ulozeno %s na ucet %s.\n",form(n),ucet); } else { printf("Ucet %s neexistuje.\n",ucet); } } void vyber(char *ucet, int n) { char *c=ucet; list *l; hledej(c,l); if (*c==0) //nalezeno { if (l->castka>=n) { l->castka-=n; celkem_penez-=n; printf("Vybrano %s z uctu %s.\n",form(n),ucet); } else printf("Nedostatek penez.\n"); } else { printf("Ucet %s neexistuje.\n",ucet); } } void preved(char *ucet_a,char *ucet_b,int n) { list *la,*lb; char *a=ucet_a; char *b=ucet_b; hledej(a,la); if (*a!=0) {printf("Ucet %s neexituje.\n",ucet_a);return;}; if (la->castkacastka+=n; la->castka-=n; printf("Prevedeno %s z uctu %s na ucet %s.\n",form(n),ucet_a,ucet_b); } void statistika() { printf("Pocet uctu: %i\n",celkem_uctu); printf("Celkem: %10s\n",form(celkem_penez)); } char cesta[15]; ///PREPSAT void vypis(list *l,int h) { if (h==10) {cesta[10]=0;printf("%s %10s\n",cesta,form(l->castka)); return;}; for (int i=0;i<10;i++) { if (l->dalsi[i]!=0) { cesta[h]=i+'0'; vypis(l->dalsi[i],h+1); } } }; void vypis() { printf("Pocet uctu: %i\n",celkem_uctu); vypis(koren,0); printf("Celkem: %10s\n",form(celkem_penez)); } void reset(struct list *l) { for (int i=0;i<10;i++) { if (l->dalsi[i]!=0) reset(l->dalsi[i]); }; delete l; } void reset(void) { celkem_penez=0; celkem_uctu=0; reset(koren); koren=new struct list; init(koren); printf("Reset systemu.\n"); } int main(int,char **) { char prikaz[100]; char ucet[100]; koren=new struct list; init(koren); while (scanf("%s",prikaz)>0) { switch (prikaz[0]) { case 'Z': scanf("%s",ucet);zaloz(ucet);break; case 'U': {int castka; scanf("%s",ucet);castka=cticastka(); uloz(ucet,castka); break;} case 'V': {int castka; scanf("%s ",ucet);castka=cticastka(); vyber(ucet,castka); break;} case 'P': { int castka;char ucet2[100]; scanf("%s %s ",ucet,ucet2);castka=cticastka(); preved(ucet,ucet2,castka); break; } case 'S': statistika();break; case 'L': vypis();break; case 'R': reset();break; }; scanf("\n"); printf("\n"); }; printf("Konec."); }