Текст програми:  p>
 # include 
# include 
# include 
# include 
# include  p>
 struct PL// Завдання структурних змінних  p>
 (char namepl [18]; int year; char people [15]; unsigned int sputnik;  p>
 PL * prev;  p>
 PL * next;  p>
);  p>
 void menu1 ()// Функція головного меню 
(Clrscr (); printf ( "nt ?---------------------------------------- --------------------< br>
? n "); printf (" t | | 
"); Puts (" nt | К А Р Т О Т Е К А П Л А Н Е Т 
| n "); p>
 "t | tt З О Л Н Е Л Н О Й С И С Т Е М И | 
"); Puts (" t ?------------------------------------------ ------------------?< br>
"); Puts (" ntt Головне меню: n "); puts (" tt 1 - Рекомендації користувачеві. "); Puts (" tt 2 - Введення даних. "); Puts (" tt 3 - Виведення всіх даних. ") ; puts ( "tt 4 - Перегляд, видалення, додавання."); puts ( "tt 5 - Виведення даних за певною ознакою."); puts ( "tt 6 - Сортування."); puts ( "tt 7 - Вихід. "); 
)  p>
 void menu2 ()// Меню пошуку елементів 
(Puts ( "nnnnttt Меню пошуку: n"); puts ( "ttt 1 - Висновок за назвою планети."); Puts ( "ttt 2 - Висновок по року відкриття."); Puts ( "nnnnnnnnnnnnnnnt Для виходу в головне меню, натисніть будь-яку клавішу .");< br>
)  p>
 void sovet (char * s)// Функція підказки 
(Window (1,25,79,25); textcolor (GREEN + BLUE); textbackground (WHITE + YELLOW);  p>
 clrscr (); cprintf ( "% s", s); textcolor (10); window (1,1,79,25); textbackground (0); 
)  p>
 void vvod (PL * pla)// Функція введення структури 
(Do  p>
 (clrscr (); puts ( "Введіть ім'я планети:"); fflush (stdin); gets (pla-> namepl);  p>
) while (strlen (pla-> namepl)> 18); do  p>
 (puts ( "Рік відкриття планети:"); scanf ( "% d", & (pla-> year )); p>
) while ((pla-> year) year)> 30000); do  p>
 (puts ( "Хто відкрив планету:"); fflush (stdin); gets (pla-> people);  p>
) while (strlen (pla-> people)> 15); do  p>
 (puts ( "Скільки супутників?"); scanf ( "% d", & (pla-> sputnik )); p>
) while (((pla-> sputnik) sputnik)> 999)); 
)  p>
 PL * vvodall ()// Функція введення структур 
(
PL * playn, * pla; clrscr (); sovet ( "Введіть параметри планети"); pla = (PL *) malloc (sizeof (PL)); vvod (pla); playn = pla; pla-> next = NULL; sovet ( "Для дальнейщего введення натисни y, інакше будь-яку клавішу ."); p>
 while (getch ()==' y ')  p>
 (clrscr (); sovet ( "Введіть параметри планети"); pla = (PL *) malloc (sizeof (PL)); vvod (pla); playn-> prev = pla; pla-> next = playn; playn = pla; sovet ( "Для дальнейщего введення натисни y, інакше будь-яку клавішу ."); p>
) pla-> prev = NULL; while (pla-> next) pla = pla-> next; return (pla); 
)  p>
 void vivodall (PL * pla)// Функція виведення на екран всіх структур 
(Int i = 1; puts ( "nttt У С Я К А Р Т О Т Е К Аn"); printf ("+------+-------------- ---+------------+---------------+-----------< br>
+ n "); printf (" | Номер | Назва | Коли | Хто відкрив | Кількість 
| n "); printf (" | стр. | планети | відкрили | планету | супутників 
| n "); printf ("+------+-----------------+------------+--- ------------+-----------< br>
+ n "); printf ("+------+-----------------+------------+--- ------------+-----------< br>
+ n "); while (pla-> prev)  p>
 (printf ( "|% 5d |% 18s |% 12u |% 15s |% 11u |", i, pla-> namepl, pla-> year, pla-> people, pla-> sputnik); pla = pla-> prev; i ++; p>
) printf ( "|% 5d |% 18s |% 12u |% 15s |% 11u |", i, pla-> namepl, pla-> year, pla-> people, pla-> sputnik); printf ( "+------+-----------------+------------+---------- -----+-----------< br>
+ "); Gotoxy (22,24); puts (" Висновок закінчено, натисніть будь-яку клавішу. "); Getch (); 
)  p>
 void spisok (PL * pla)// Функція для роботи зі списком 
(Clrscr (); window (17,2,62,15); textbackground (4); textcolor (15); clrscr (); if (pla! = NULL)  p>
 (cprintf ( "n"); cprintf ( "% 30s", "ПАРАМЕТРИ ПЛАНЕТnn"); 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);  p>
) textbackground (2); sovet ( "Наступний/Попередня планета (PgDn/PgUp)"  p>
 "Видалення (Del)" "Додавання (Ins)" "Вихід (Esc )");< br>
)  p>
 PL * vvodspisok (PL * pla)// Функція введення елементів списку 
(
PL * plr = pla; char c; sovet ( "Додати елемент до/після поточного (Home/End)"  p>
 "Скасувати (Esc)"); do  p>
 (c = getch (); 
/ * Esc */if (c == 27) return (pla); if (c == 71 | | c == 79)  p>
 (clrscr (); sovet ( "Введіть параметри планети"); plr = (PL *) malloc (sizeof (PL)); vvod (plr); if (pla == NULL)  p>
 (plr-> next = NULL; plr-> prev = NULL; return (plr);  p>
) 
/ * End */if (c == 79)  p>
 (plr-> next = pla-> next; plr-> prev = pla; pla-> next = plr;  p>
 (plr-> next) -> prev = plr;  p>
) 
/ * Home */if (c == 71)  p>
 (plr-> next = pla; plr-> prev = pla-> prev; pla-> prev = plr;  p>
 (plr-> prev) -> next = plr;  p>
) return (plr);  p>
)  p>
) while (1); 
)  p>
 PL * vozvr (PL * pla)// Повертає вказівник 
(//На початок списку pla if (pla == NULL) return (pla); while (pla-> next! = NULL) pla = pla-> next; return (pla); 
)  p>
 PL * korrekt (PL * pla)// Керуючі клавіші при роботі зі списком 
(Spisok (pla); 
PL * delit (PL *); do  p>
 (switch (getch ()) p>
 (
/ * PgUp */case 73: if (pla! = NULL)  p>
 (if (pla-> prev! = NULL) pla = pla-> prev; spisok (pla);  p>
) break; 
/ * PgDn */case 81: if (pla! = NULL)  p>
 (if (pla-> next! = NULL) pla = pla-> next; spisok (pla);  p>
) break; 
/ * Del */case 83: if (pla! = NULL)  p>
 (pla = delit (pla); spisok (pla);  p>
) break; 
/ * Ins */case 82: pla = vvodspisok (pla); spisok (pla); break; 
/ * Esc */case 27: pla = vozvr (pla); return (pla);  p>
)  p>
)  p>
 while (1); 
)  p>
 PL * delit (PL * pla)// Функція видалення елементів зі списку 
(
PL * plr = NULL; if (pla-> prev! = NULL)  p>
 ( p>
 (pla-> prev) -> next = pla-> next; plr = pla-> prev;  p>
) if (pla-> next! = NULL)  p>
 ( p>
 (pla-> next) -> prev = pla-> prev; plr = pla-> next;  p>
) free (pla); return (plr); 
)  p>
 void poisk1 (PL * pla)// Функція пошуку по назвах планет 
(Char s [15], ch; do  p>
 (int i = 1, l = 0; clrscr (); fflush (stdin); puts ( "Введіть інтерессующее вас назва планети:"); gets (s); printf ( "nn Планети з назвою% s: n ", s); printf ("+------+-----------------+------------+--- ------------+---------< br>
- + n "); printf (" | Номер | Назва | Коли | Хто відкрив | Кількість 
| n "); printf (" | стр. | планети | відкрили | планету | супутників 
| n "); printf ("+------+-----------------+------------+--- ------------+-----------< br>
+ n "); printf ("+------+-----------------+------------+--- ------------+-----------< br>
+ n "); while (pla-> prev)  p>
 (if (strcmpi (pla-> namepl, s) == 0)  p>
 (printf ( "|% 5d |% 18s |% 12u |% 15s |% 11u |", i, pla-> namepl, pla-> year, pla-> people, pla-> sputnik); l + +; i ++; p>
) pla = pla-> prev;  p>
) if (strcmpi (pla-> namepl, s) == 0)  p>
 (printf ( "|% 5d |% 18s |% 12u |% 15s |% 11u |", i, pla-> namepl, pla-> year, pla-> people, pla-> sputnik); l + +; i + +;) puts ("+------+-----------------+------------+----- ------------+-------------< br>
+ "); Printf (" n Знайдено% d планет.n ", l); puts (" Пошук за назвами планет завершено. Продовжити? (Y-да) "); fflush (stdin); ch = getch (); 
) while (ch == 'y'); 
)  p>
 void poisk2 (PL * pla)// Функція пошуку по роках відкриття 
(Char ch; do  p>
 (int i = 1, l = 0, a, b; clrscr (); fflush (stdin); puts ( "Введіть інтерессующее вас кордону пошуку (від чого-то до чого-то):"); while ( scanf ( "% d% d", & a, & b)! = 2)  p>
 (while (getchar ()!=' n '); printf ( "Все-таки варто тут що-небудь ввестіn (від a до b) n "); p>
)  p>
 printf ( "nn Планети відкриті в такому діапозоні (з% d до% d року): n", a, b); printf ("+------+--------- --------+------------+---------------+-----------< br>
+ n "); printf (" | Номер | Назва | Коли | Хто відкрив | Кількість 
| n "); printf (" | стр. | планети | відкрили | планету | супутників 
| n "); printf ("+------+-----------------+------------+--- ------------+-----------< br>
+ n "); printf ("+------+-----------------+------------+--- ------------+-----------< br>
+ n "); while (pla-> prev)  p>
 (if ((ayear) & & (b> = pla-> year))  p>
 (printf ( "|% 5d |% 18s |% 12u |% 15s |% 11u |", i, pla-> namepl, pla-> year, pla-> people, pla-> sputnik); l + +; i ++; p>
) pla = pla-> prev;  p>
) if ((ayear) & & (b> = pla-> year))  p>
 (printf ( "|% 5d |% 18s |% 12u |% 15s |% 11u |", i, pla-> namepl, pla-> year, pla-> people, pla-> sputnik); l + +; i ++; p>
) puts ("+------+-----------------+------------+---- -----------+-----------< br>
+ "); Printf (" n Знайдено% d планет.n ", l); puts (" Пошук по роках відкриття планет завершено. Продовжити? (Y-да) "); fflush (stdin); ch = getch ();  p>
) while (ch == 'y'); 
)  p>
 void klear (PL * pla)// Функція очищення пам'яті 
(
PL * plr; if (pla)  p>
 (if (pla-> prev)  p>
 (plr = pla-> prev; while (plr-> prev)  p>
 (free (plr-> next); plr = plr-> prev;  p>
)  p>
) else plr = pla; free (plr);  p>
) 
)  p>
 char * fname ()// Функція введення імені файлу 
(Char * t; t = (char *) malloc (80 * sizeof (char)); cprintf ( "Введіть ім'я файлу: n"); fflush (stdin); scanf ( "% 79s", t); return t; 
)  p>
 int save1 (PL * pla, char * filename)// Функція, яка зберігає дані 
(
FILE * fp; if ((fp = fopen (filename, "w "))== NULL) return 0; while (pla)  p>
 (fprintf (fp, "% s% d% s% d |", pla-> namepl, pla-> year, pla-> people, pla-> sputnik); pla = pla-> prev;  p>
) fclose (fp); return 1; 
)  p>
 int save (PL * pla)// Функція для збереження даних 
(Char * name; window (1,1,79,25); clrscr (); name = fname (); if (save1 (pla, name) == 1) return 1; cprintf ( "nНевозможно провести запис! "); sovet (" Помилка! Натисніть будь-яку кнопку "); getch (); return 0; 
)  p>
 PL * load (PL * pla)// Функція завантаження даних з файлу 
(Char c, * name; int i;  p>
 PL * plan = NULL, * plane = NULL; 
FILE * fp; window (1,1,79,25); clrscr (); name = fname (); cprintf ( "Здійснювати читання? (Y-Так, n-Ні) n"); do c = getch () ; while ((c! = 'y')&&( c! =' n ')); if (c ==' n ') return (pla); if ((fp = fopen (name, "rt")) == NULL)  p>
 (klear (pla); cprintf ( "nОшібка при відкритті файлу !!!"); sovet (" Помилка! Натисніть будь-яку кнопку "); getch (); return (NULL);  p>
) plane = (PL *) malloc (sizeof (PL)); while (fscanf (fp, "% s% d% s% d |", plane-> namepl, & (plane-> year), plane -> people, & (plane-> sputnik)) == 4)  p>
 (plane-> prev = NULL; plane-> next = plan; if (plan! = NULL) plan-> prev = plane; plan = plane; plane = (PL *) malloc (sizeof (PL));  p>
) free (plane); if (plan! = NULL)  p>
 (while (plan-> next) plan = plan-> next;  p>
) fclose (fp); klear (pla); return (plan); 
)  p>
/* Функція сортування за алфавітом */
PL * sort (PL * pla)  p>
 ( p>
 PL * point, * tmp = NULL, * f, * s; int i, j, srav;  p>
// Покажчик на початок f = pla; point = pla;  p>
 while (f! = NULL)  p>
 (s = f-> next; while (s! = NULL)  p>
 (if ((strcmp (f-> namepl, s-> namepl)> 0))  p>
 (tmp = (PL *) malloc (sizeof (PL)); strcpy (tmp-> namepl, f-> namepl); tmp-> year = f-> year; strcpy (tmp-> people, f - > people); tmp-> sputnik, f-> sputnik;  p>
// strcpy (f-> namepl, s-> namepl); f-> year = s-> year; strcpy (f-> people, s-> people); f-> sputnik = s-> sputnik ;  p>
// strcpy (s-> namepl, tmp-> namepl); s-> year = tmp-> year; strcpy (s-> people, tmp-> people); s-> sputnik = tmp-> sputnik ; free (tmp);  p>
) s = s-> next;  p>
) strcpy (point-> namepl, f-> namepl); point-> year = f-> year; strcpy (point-> people, f-> people); point-> sputnik = f-> sputnik; point = point-> next; f = f-> next;  p>
) point = pla; return (point); 
)  p>
 void main () 
(Char ccc, hhh, ch; int i; 
PL * planet = NULL; planet-> prev = planet-> next = NULL; 
_setcursortype (_NOCURSOR); textcolor (10); menu1 (); do  p>
 (do  p>
 (fflush (stdin); switch (ccc = getch ()) p>
 (case '1 ':  p>
 (clrscr (); printf ( "ttt Рекомендації користувачеві: nn"  p>
 "Ця програма-це подібність електронної бази даних. Програма працює,"  p>
 "nіспользуя масиви в пам'яті ЕОМ для зберігання інформації введеної користувачем."  p>
 "nДанние може вводитися з клавіатури або завантажити з файлу."  p>
 "Також можна вивестіна екран всю картотеку або ж переглядати картотеку по картках,"  p>
 "з можли-ністю додавання або видалення деяких карток з вибору."  p>
 "Програма має гарний інтерфейс і показує стійку роботу."  p>
 "У програмі є пошук елементів за заданими умовами, а також сортування планет за назвами."  p>
 "У програмі є головне меню і підменю для пошуку планет за деякими ознаками."  p>
 "Бажано, щоб дані були точні, коректно записані і що стосуються"  p>
 "n безпосередньо теми даної лабораторної роботи."); puts ( "nnnnnttДля переходу до головного меню, натисніть будь-яку клавішу ..."); getch (); p>
 menu1 (); break;  p>
) case '2 ':  p>
 (free (planet); planet = NULL; planet-> prev = planet-> next = NULL; clrscr (); puts ( "Це нова база даних? (так-y/ні-n)"); do  p>
 (fflush (stdin); scanf ( "% c", & ch);  p>
 printf ( "tВведіте символ (так-y/ні-n) "); p>
) while (ch! = 'n' & & ch! = 'y' & & ch! = 'Y' & & ch! = 'N'); if (ch == 'y' | | ch == 'Y ')  p>
 (clrscr (); planet = vvodall (); clrscr (); puts ( "nnЗапісать в файл (да-y/нет-n )?"); do  p>
 (fflush (stdin); scanf ( "% c", & ch); printf ( "Введіть символ (так-y/ні-n) n "); p>
) while (ch! = 'n' & & ch! = 'y' & & ch! = 'Y' & & ch! = 'N'); if (ch == 'Y' | | ch == 'y ')  p>
 (save (planet); puts ( "nnnnntt Запис даних закінчена! Натисніть будь-яку клавішу."); getch (); p>
)  p>
) else planet = load (planet); menu1 (); continue;  p>
) case '3 ':  p>
 (if (planet! = NULL)  p>
 (clrscr (); vivodall (planet); menu1 (); continue;  p>
) break;  p>
) case '4 ':  p>
 (free (planet); planet = korrekt (planet); menu1 (); break;  p>
) case '5 ':  p>
 (if (planet! = NULL)  p>
 (clrscr (); menu2 (); switch (hhh = getch ()) p>
 (case '1 ':  p>
 (poisk1 (planet); menu1 (); continue;  p>
) case '2 ':  p>
 (poisk2 (planet); menu1 (); continue;  p>
) default: menu1 (); p>
) menu1 (); continue;  p>
) break;  p>
) case '6 ':  p>
 (if (planet! = NULL)  p>
 (clrscr (); i = 5; puts ( "Йде nnnntt сортування за назвою планети."); while (i  p>