diaz85
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору #include <alloc.h> #include <stdio.h> #include <string.h> #include <process.h> #include <mem.h> typedef struct { int uid; char author[100]; char genre[50]; char date[11]; char cover[20]; } book; typedef struct { char fio[100]; char date[11]; } indication; void add_new_book(book* b, indication* i, int cur_n) { b[cur_n].uid=cur_n; printf("\nVvedite imya avtora:\n"); scanf("%s", &(*(b+cur_n)->author)); printf("Vvedite janr:\n"); scanf("%s", &(*(b+cur_n)->genre)); printf("Vvedite datu (naprimer 01.01.01):\n"); scanf("%s", &(*(b+cur_n)->date)); printf("Vvedite pereplet:\n"); scanf("%s", &(*(b+cur_n)->cover)); printf("\nZapolnite kartochku vidachi! Esli kniga vidana to zapolnite vse polya, esli ne vidana, to v pole FIO postavte *\n"); printf("Vvedite FIO:\n"); scanf("%s", &(*(i+cur_n)->fio)); if (!strstr(&(*(i+cur_n)->fio), "*")) { printf("Vvedite datu:\n"); scanf("%s", &(*(i+cur_n)->date)); } }; void print_all(book* b, indication* i, int cur_n) { int j=0; while(j<=cur_n) { printf("\n*****Kniga nomer %d*****", b[j].uid); printf("\nAvtor - %s\n", b[j].author); printf("Janr - %s\n", b[j].genre); printf("Data - %s\n", b[j].date); printf("Pereplet - %s\n", b[j].cover); printf("*****Kartochka vidachi*****"); if (!strstr(&(*(i+j)->fio), "*")) { printf("\nNahoditsya u - %s\n", i[j].fio); printf("Data - %s\n", i[j].date); printf("###############\n\n"); } else printf("\nDannaya kniga ne vidana.\n"); j++; } }; void give_book(book* b, indication* i, int cur_n) { char fl; int j=0, u_num; printf("\nVvedite unikalniy nomer knigi\n"); scanf("%d", &u_num); while (u_num!=b[j].uid) { j++; if (j>cur_n) { printf("\nKniga s takim nomerom ne naidena!!"); j=-1; break; } } if(j!=-1) { printf("\nAvtor - %s\n", b[j].author); printf("Janr - %s\n", b[j].genre); printf("Data - %s\n", b[j].date); printf("Pereplet - %s\n", b[j].cover); printf("******************"); if (!strstr(&(*(i+j)->fio), "*")) printf("\nKniga uje vidana.\n\n"); else { fflush(stdin); printf("\nVidat knigu? (y/n) "); scanf("%c", &fl); switch (fl) { case 'y': printf("Vvedite FIO:\n"); scanf("%s", &(*(i+j)->fio)); printf("Vvedite datu (naprimer 01.01.01):\n"); scanf("%s", &(*(i+j)->date)); printf("Vidacha proizvedena!\n"); break; case 'n': break; default: break; } } } }; void get_back_book(book* b, indication* i, int cur_n) { char fl; int j=0, u_num; printf("\nVvedite unikalniy nomer knigi\n"); scanf("%d", &u_num); while (u_num!=b[j].uid) { j++; if (j>cur_n) { printf("\nKniga s takim nomerom ne naidena!!"); j=-1; break; } } if(j!=-1) { printf("\nAvtor - %s\n", b[j].author); printf("Janr - %s\n", b[j].genre); printf("Data - %s\n", b[j].date); printf("Pereplet - %s\n", b[j].cover); printf("******************"); if (strstr(&(*(i+j)->fio), "*")) printf("\nKniga ne vidana. Dlya vozvrata snachala neobhodimo vidat\n\n"); else { fflush(stdin); printf("\nVernut knigu? (y/n) "); scanf("%c", &fl); switch (fl) { case 'y': memset(&(*(i+j)->fio), '*', strlen(&(*(i+j)->fio))-1); printf("Kniga vozvrashena!\n"); break; case 'n': break; default: break; } } } }; void main() { char option; int num=1, current_num=0; book *book_ptr=(book*) calloc (num, sizeof(book)); indication *ind_ptr=(indication*) calloc (num, sizeof(indication)); while (1) { printf("\nViberite deystvie:\n1 - Dobavit knigu\n2 - Vidat knigu\n3 - Vernut knigu\n4 - Prosmotr vseh knig\n0 - Zavershenie raboti\n"); scanf("%c", &option); switch (option) { case '1': if ((current_num+1) <= num) { add_new_book(book_ptr, ind_ptr, current_num); current_num++; } else { book_ptr=(book*) realloc(book_ptr, (num+1)*sizeof(book)); ind_ptr=(indication*) realloc (ind_ptr, (num+1)*sizeof(indication)); add_new_book(book_ptr, ind_ptr, current_num); current_num++; num++; } break; case '2': give_book(book_ptr, ind_ptr, (current_num-1)); break; case '3': get_back_book(book_ptr, ind_ptr, (current_num-1)); break; case '4': print_all(book_ptr, ind_ptr, (current_num-1)); break; case '0': exit(1); default: printf("\nViberite verniy punkt menu!!\n"); break; } fflush(stdin); } } |