sopik Опубликовано 4 мая, 2010 Жалоба Поделиться Опубликовано 4 мая, 2010 разработать программу для создания и работы с двусвязным списком, состоящим из структур. для работы со списком создать меню со следующими пунктами: 1. Создание списка. 2. Просмотр списка. 3. Добавление в конец списка новой структуры. 4. Корректировка списка. 5. Выход. Структура содержит название книги, автора, год издания. п4.- Удалить издания с годом меньше заданного. //============================/////////============================ #include <stdio.h> #include <conio.h> #include <malloc.h> #include <io.h> //=============================//////=============================== struct Book { char nazv[10]; char avtor[20]; int godizd; Book* next; Book* prev; }; struct list { Book* first; Book* last; }; void menu(); void addBook(list&); void delBook(list&); void printlist(list*); void createlist(list*&); list* thelist=0; int main() { Book* first=0; Book* last=0; menu(); getche(); return 0; } void menu() { char quit; enum{false,true}; quit = false; while(true) { int choice; printf("\n -----MENU-----\n"); printf("(1) vvedite spisok \n"); printf("(2) prosmotr \n"); printf("(3) dobavlenie \n"); printf("(4) ydalenie \n"); printf("(5) exit \n"); scanf("%d", &choice); switch (choice) { case(1): if (!thelist) { createlist(thelist ); printf(" the list has been created succesfully... \n"); } else printf(" the list is already created...\n" ); break; case(2): if (thelist) printlist(thelist); else printf(" the list is not created...\n"); break; case(3): if (thelist) addBook(*thelist); else printf(" the list is not created...\n"); break; case 4: if (thelist) delBook(*thelist); else printf(" the list is not created... \n"); break; case(5): quit = true; } if (quit == true) break; } } //==============================/////////=================================== void addBook(list& thelist) { printf("\n *** dobavit' novuy knigy *** \n"); printf(" vvedite nazvanie: "); Book* newBook = new Book; scanf("%s",&newBook->nazv); printf(" vvedite avtora: "); scanf("%s",&newBook->avtor); printf(" vvedite god izdania: "); scanf("%d",&newBook->godizd); if (thelist.last) { thelist.last->next = newBook; newBook->prev = thelist.last; } else { thelist.first = newBook; newBook->prev = 0; } thelist.last = newBook; newBook->next = 0; printf("*** book was added successfully *** \n"); } //=======================================///////////////========================== void createlist (list*& thelist) { thelist = new list; thelist->first = NULL; thelist->last = NULL; Book *p,*k=NULL; do { p = new Book; printf( "*** vvedite knigy *** \n"); printf(" vvedite nazv: "); scanf("%s", &p->nazv); printf( " vvedite avtora: " ); scanf("%s", &p->avtor); printf(" vvedite god izdania: "); scanf( "%d",&p->godizd); if(thelist->first==NULL) thelist->first = p; p->next = NULL; if(k) { p->prev = k; k->next = p; } else { p->prev = NULL; } k = p; puts(" Zakonchit' - <esc>"); } while (getch()!=27); thelist->last=p; } //=======================================================///////////============================ void printlist(list* thelist) { printf("\n *** prosmotr knig *** \n"); Book* curBook = thelist->first; while (curBook) { // printf("%s\n",curBook->nazv); // printf("%s\n",&curBook->avtor); // printf("%d\n",&curBook->godizd); // curBook = curBook->next; printf("\n %s %s %d ",curBook->nazv,curBook->avtor,curBook->godizd); curBook = curBook->next; } printf("\n *** end *** \n" ); } //=================//======================//=======================// void delBook(list& thelist) { Book* curBook = thelist.first; int Pos; printf( " Enter the godizdania for deleted Book: \n"); scanf("%d",&Pos); printf("%d",Pos); for (int i=0; i<Pos ; i++) { if (curBook) curBook = curBook->next; } if (curBook && (Pos >= 0)) { if (curBook->prev) { curBook->prev->next = curBook->next; } else { thelist.first = curBook->next; } if (curBook->next) { curBook->next->prev = curBook->prev; } else { thelist.last = curBook->prev; } delete curBook; printf("Book ? ", Pos ," has been deleted successfully..." ); } else printf("Book ? ", Pos , " not found..." ); } помогите подправить и исправить ошибки, пункт удаление не работает вообще Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Diongo Опубликовано 4 мая, 2010 Жалоба Поделиться Опубликовано 4 мая, 2010 Оформите код тегом [сode] знак на панели - # И расставьте отступы, в блоках, иначе код нечитаем :) Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Diongo Опубликовано 4 мая, 2010 Жалоба Поделиться Опубликовано 4 мая, 2010 Мне ненравится эта часть. Символьная переменная quit, а значение ей присваивается как булевой ... char quit; enum{false, true}; quit = false;... Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
sopik Опубликовано 4 мая, 2010 Автор Жалоба Поделиться Опубликовано 4 мая, 2010 разработать программу для создания и работы с двусвязным списком, состоящим из структур. для работы со списком создать меню со следующими пунктами: 1. Создание списка. 2. Просмотр списка. 3. Добавление в конец списка новой структуры. 4. Корректировка списка. 5. Выход. Структура содержит название книги, автора, год издания. п4.- Удалить издания с годом меньше заданного. [/code]//============================/////////============================ #include <stdio.h> #include <conio.h> #include <malloc.h> #include <io.h> //=============================//////=============================== struct Book { char nazv[10]; char avtor[20]; int godizd; Book* next; Book* prev; }; struct list { Book* first; Book* last; }; void menu(); void addBook(list&); void delBook(list&); void printlist(list*); void createlist(list*&); list* thelist=0; int main() { Book* first=0; Book* last=0; menu(); getche(); return 0; } void menu() { char quit; enum{false,true}; quit = false; while(true) { int choice; printf("\n -----MENU-----\n"); printf("(1) vvedite spisok \n"); printf("(2) prosmotr \n"); printf("(3) dobavlenie \n"); printf("(4) ydalenie \n"); printf("(5) exit \n"); scanf("%d", &choice); switch (choice) { case(1): if (!thelist) { createlist(thelist ); printf(" the list has been created succesfully... \n"); } else printf(" the list is already created...\n" ); break; case(2): if (thelist) printlist(thelist); else printf(" the list is not created...\n"); break; case(3): if (thelist) addBook(*thelist); else printf(" the list is not created...\n"); break; case 4: if (thelist) delBook(*thelist); else printf(" the list is not created... \n"); break; case(5): quit = true; } if (quit == true) break; } } //==============================/////////=================================== void addBook(list& thelist) { printf("\n *** dobavit' novuy knigy *** \n"); printf(" vvedite nazvanie: "); Book* newBook = new Book; scanf("%s",&newBook->nazv); printf(" vvedite avtora: "); scanf("%s",&newBook->avtor); printf(" vvedite god izdania: "); scanf("%d",&newBook->godizd); if (thelist.last) { thelist.last->next = newBook; newBook->prev = thelist.last; } else { thelist.first = newBook; newBook->prev = 0; } thelist.last = newBook; newBook->next = 0; printf("*** book was added successfully *** \n"); } //=======================================///////////////========================== void createlist (list*& thelist) { thelist = new list; thelist->first = NULL; thelist->last = NULL; Book *p,*k=NULL; do { p = new Book; printf( "*** vvedite knigy *** \n"); printf(" vvedite nazv: "); scanf("%s", &p->nazv); printf( " vvedite avtora: " ); scanf("%s", &p->avtor); printf(" vvedite god izdania: "); scanf( "%d",&p->godizd); if(thelist->first==NULL) thelist->first = p; p->next = NULL; if(k) { p->prev = k; k->next = p; } else { p->prev = NULL; } k = p; puts(" Zakonchit' - <esc>"); } while (getch()!=27); thelist->last=p; } //=======================================================///////////============================ void printlist(list* thelist) { printf("\n *** prosmotr knig *** \n"); Book* curBook = thelist->first; while (curBook) { // printf("%s\n",curBook->nazv); // printf("%s\n",&curBook->avtor); // printf("%d\n",&curBook->godizd); // curBook = curBook->next; printf("\n %s %s %d ",curBook->nazv,curBook->avtor,curBook->godizd); curBook = curBook->next; } printf("\n *** end *** \n" ); } //=================//======================//=======================// void delBook(list& thelist) { Book* curBook = thelist.first; int Pos; printf( " Enter the godizdania for deleted Book: \n"); scanf("%d",&Pos); printf("%d",Pos); for (int i=0; i<Pos ; i++) { if (curBook) curBook = curBook->next; } if (curBook && (Pos >= 0)) { if (curBook->prev) { curBook->prev->next = curBook->next; } else { thelist.first = curBook->next; } if (curBook->next) { curBook->next->prev = curBook->prev; } else { thelist.last = curBook->prev; } delete curBook; printf("Book ? ", Pos ," has been deleted successfully..." ); } else printf("Book ? ", Pos , " not found..." ); } [/ помогите подправить и исправить ошибки, пункт удаление не работает вообще [/quote Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.