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 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти