Часть полного текста документа:Текст программы: #include #include #include #include #include struct PL //Задание структурных переменных { char namepl[18]; int year; char people[15]; unsigned int sputnik; PL *prev; PL *next; }; void menu1() //Функция главного меню { clrscr(); printf("\n\tг------------------------------------------------------------¬\n"); printf( "\t¦ ¦ "); puts( "\n\t¦ К А Р Т О Т Е К А П Л А Н Е Т ¦\n"); " \t ¦\t\t С О Л Н Е Ч Н О Й С И С Т Е М Ы ¦ "); puts( "\tL------------------------------------------------------------- "); puts("\n\t\t Главное меню :\n"); puts("\t\t 1- Рекомендации пользователю."); puts("\t\t 2- Ввод данных."); puts("\t\t 3- Вывод всех данных."); puts("\t\t 4- Просмотр, удаление, добавление."); puts("\t\t 5- Вывод данных по определенному признаку."); puts("\t\t 6- Сортировка."); puts("\t\t 7- Выход."); } void menu2() //Меню поиска элементов { puts("\n\n\n\n\t\t\t Меню поиска:\n"); puts("\t\t\t 1- Вывод по названию планеты."); puts("\t\t\t 2- Вывод по году открытия."); puts("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\t Для выхода в главное меню нажмите любую клавишу."); } void sovet(char *s) //Функция подсказки { window(1,25,79,25); textcolor(GREEN+BLUE); textbackground(WHITE+YELLOW); clrscr(); cprintf(" %s",s); textcolor(10); window(1,1,79,25); textbackground(0); } void vvod(PL *pla) //Функция ввода структуры { do { clrscr(); puts("Введите имя планеты :"); fflush(stdin); gets(pla->namepl); } while(strlen(pla->namepl)>18); do { puts("Год открытия планеты :"); scanf("%d",&(pla->year)); } while((pla->year)year)>30000); do { puts("Кто открыл планету :"); fflush(stdin); gets(pla->people); } while(strlen(pla->people)>15); do { puts("Сколько спутников ?"); scanf("%d",&(pla->sputnik)); } while(((pla->sputnik)sputnik)>999)); } PL* vvodall() //Функция ввода структур { PL *playn, *pla; clrscr(); sovet("Введите параметры планеты"); pla=(PL*)malloc(sizeof(PL)); vvod(pla); playn=pla; pla->next=NULL; sovet("Для дальнейщего ввода нажми y, иначе любую клавишу."); while (getch()=='y') { clrscr(); sovet("Введите параметры планеты"); pla=(PL*)malloc(sizeof(PL)); vvod(pla); playn->prev=pla; pla->next=playn; playn=pla; sovet("Для дальнейщего ввода нажми y, иначе любую клавишу."); } pla->prev=NULL; while (pla->next) pla=pla->next; return(pla); } void vivodall(PL *pla) //Функция вывода на экран всех структур { int i=1; puts("\n\t\t\t В С Я К А Р Т О Т Е К А\n"); printf("-------T-----------------T------------T---------------T-----------¬\n"); printf("¦ Номер¦ Название ¦ Когда ¦ Кто открыл ¦ Кол-во ¦\n"); printf("¦ стр. | планеты ¦ открыли ¦ планету ¦ спутников ¦\n"); printf("L------+-----------------+------------+---------------+------------\n"); printf("-------T-----------------T------------T---------------T-----------¬\n"); while (pla->prev) { printf("¦ %5d ¦ %18s ¦ %12u ¦ %15s ¦ %11u ¦ ",i,pla->namepl, pla->year,pla->people,pla->sputnik); pla=pla->prev; i++; } printf("¦ %5d ¦ %18s ¦ %12u ¦ %15s ¦ %11u ¦ ",i,pla->namepl, pla->year,pla->people,pla->sputnik); printf("L------+-----------------+------------+---------------+------------"); gotoxy(22,24); puts("Вывод закончен, нажмите любую клавишу."); getch(); } void spisok(PL* pla) //Функция для работы со списком { clrscr(); window(17,2,62,15); textbackground(4); textcolor(15); clrscr(); if (pla!=NULL) { cprintf("\n"); cprintf("%30s","ПАРАМЕТРЫ ПЛАНЕТ\n\n"); gotoxy(1,wherey()+2); cprintf(" Название: %s",pla->namepl); gotoxy(1,wherey()+2); cprintf(" Год открытия: %d",pla->year); gotoxy(1,wherey()+2); cprintf(" Кто открыл: %s",pla->people); gotoxy(1,wherey()+2); cprintf(" Сколько спутников: %d",pla->sputnik); } textbackground(2); sovet("Cледующая/Предыдущая планета(PgDn/PgUp)" "Удаление(Del)""Добавление(Ins)""Выход(Esc)"); } PL* vvodspisok(PL* pla) //Функция ввода элементов списка { PL* plr=pla; char c; sovet("Добавить элемент до / после текущего(Home/End)" "Отмена(Esc)"); do { c=getch(); /*Esc*/ if (c==27) return(pla); if (c==71||c==79) { clrscr(); sovet("Введите параметры планеты"); plr=(PL*)malloc(sizeof(PL)); vvod(plr); if (pla==NULL) { plr->next=NULL; plr->prev=NULL; return(plr); } /*End*/ if (c==79) { plr->next=pla->next; plr->prev=pla; pla->next=plr; (plr->next)->prev=plr; } /*Home*/if (c==71) { plr->next=pla; plr->prev=pla->prev; pla->prev=plr; (plr->prev)->next=plr; } return(plr); } } while(1); } PL* vozvr(PL* pla) //Возвращает указатель { //на начало списка pla if (pla==NULL) return(pla); while(pla->next!=NULL) pla=pla->next; return(pla); } PL* korrekt(PL *pla) //Управляющие клавиши при работе со списком { spisok(pla); PL* delit(PL*); do { switch(getch()) { /*PgUp*/ case 73:if(pla!=NULL) { if(pla->prev!=NULL)pla=pla->prev;spisok(pla); } break; /*PgDn*/ case 81:if(pla!=NULL) { if(pla->next!=NULL)pla=pla->next;spisok(pla); } break; /*Del*/ case 83:if(pla!=NULL) { pla=delit(pla); spisok(pla); } break; /*Ins*/ case 82:pla=vvodspisok(pla); spisok(pla); break; /*Esc*/ case 27:pla=vozvr(pla); return(pla); } } while(1); } PL* delit(PL* pla) //Функция удаления элементов из списка { PL* plr=NULL; if(pla->prev!=NULL) { (pla->prev)->next=pla->next; plr=pla->prev; } if(pla->next!=NULL) { (pla->next)->prev=pla->prev; plr=pla->next; } free(pla); return(plr); } void poisk1(PL *pla) //Функция поиска по названиям планет { char s[15],ch; do { int i=1,l=0; clrscr(); fflush(stdin); puts("Введите интерессующее вас название планеты :"); gets(s); printf("\n\n Планеты с названием %s :\n",s); printf("-------T-----------------T------------T---------------T-----------¬\n"); printf("¦Номер ¦ Название ¦ Когда ¦ Кто открыл ¦ Кол-во ¦\n"); printf("¦ стр. ............ |