#include #include #define MOD 20001 typedef struct ucet { char name[11]; float value; } ucet; typedef struct h_item { int index; h_item * next; } h_item; ucet * ucty[11000]; int uctu = 0; float penez = 0; h_item * lookup[MOD]; int hash(char * name) { int hash = 0; while(*name) hash = 1001*hash + *name++; return hash % MOD; } void cleanup() { int i; for(i=0; i<11000; i++) { ucty[i] = NULL; } for(i=0; iindex]; if(u == NULL) { printf("corruption!!!\n"); return NULL; } if( !strcmp(name, u->name) ) return u; act = act->next; } } ucet * createUcet(char * name) { //printf("createUcet(%s)\n", name); int h = hash(name); ucet * newUcet = (ucet *) malloc(sizeof(ucet)); newUcet->value = 0; strcpy(newUcet->name, name); h_item * newItem = (h_item *) malloc(sizeof(h_item)); newItem->index = uctu; newItem->next = lookup[h]; ucty[uctu++] = newUcet; lookup[h] = newItem; return newUcet; } int main() { char oper[20]; char name[12], name2[12]; float val1; int i,j; struct ucet * act, * from, * to; cleanup(); for(;;) { i = scanf("%s", oper); //printf("got command %s, i=%d\n", oper,i); if(i < 1) break; switch(oper[0]) { case 'Z': scanf("%s\n", name); if(getUcet(name)) { printf("Ucet %s uz existuje.\n\n", name); } else { createUcet(name); printf("Ucet %s vytvoren.\n\n", name); } break; case 'U': scanf("%s %f\n", name, &val1); act = getUcet(name); if(!act) { printf("Ucet %s neexistuje.\n\n", name); } else { printf("Ulozeno %.2f na ucet %s.\n\n", val1, name); act->value += val1; penez += val1; } break; case 'V': scanf("%s %f\n", name, &val1); act = getUcet(name); if(!act) { printf("Ucet %s neexistuje.\n\n", name); } else if (act->value < val1) { printf("Nedostatek penez.\n\n"); } else { printf("Vybrano %.2f z uctu %s.\n\n", val1, name); act->value -= val1; penez -= val1; } break; case 'P': scanf("%s %s %f\n", name, name2, &val1); from = getUcet(name); to = getUcet(name2); if(!from) { printf("Ucet %s neexistuje.\n", name); } if(from && from->value < val1) { printf("Nedostatek penez.\n"); } if(!to) { printf("Ucet %s neexistuje.\n", name2); } if(from && to && from->value >= val1) { printf("Prevedeno %.2f z uctu %s na ucet %s.\n", val1, name, name2); from->value -= val1; to->value += val1; } printf("\n"); break; case 'S': printf("Pocet uctu: %d\nCelkem %10.2f\n\n", uctu, penez); break; case 'L': printf("Pocet uctu: %d\n", uctu); for(j=0;jname, act->value); } printf("Celkem %10.2f\n\n", penez); break; case 'R': printf("Reset systemu.\n\n"); } } printf("Konec.\n"); return 0; }