Текст программы:
#include<alloc.h>
#include<conio.h>
#include<dos.h>
#include <stdio.h>
#include <string.h>
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( "\t╙────────────────────────────────────────────────────────────╜ ");
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)<-30000 || (pla->year)>30000);
do
{
puts("Кто открыл планету :");
fflush(stdin);
gets(pla->people);
}
while(strlen(pla->people)>15);
do
{
puts("Сколько спутников ?");
scanf("%d",&(pla->sputnik));
}
while(((pla->sputnik)<0) || ((pla->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("┌──────┬─────────────────┬────────────┬───────────────┬───────────┐\n");
printf("│ Номер│ Название │ Когда │ Кто открыл │ Кол-во │\n");
printf("│ стр. | планеты │ открыли │ планету │ спутников │\n");
printf("└──────┴─────────────────┴────────────┴───────────────┴───────────┘\n");
printf("┌──────┬─────────────────┬────────────┬───────────────┬───────────┐\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("└──────┴─────────────────┴────────────┴───────────────┴───────────┘");
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("┌──────┬─────────────────┬────────────┬───────────────┬───────────┐\n");
printf("│Номер │ Название │ Когда │ Кто открыл │ Кол-во │\n");
printf("│ стр. │ планеты │ открыли │ планету │ спутников │\n");
printf("└──────┴─────────────────┴────────────┴───────────────┴───────────┘\n");
printf("┌──────┬─────────────────┬────────────┬───────────────┬───────────┐\n");
while (pla->prev)
{
if(strcmpi(pla->namepl,s)==0)
{
printf("│ %5d │ %18s │ %12u │ %15s │ %11u │ ",i,pla->namepl,
pla->year,pla->people,pla->sputnik);
l++;i++;
}
pla=pla->prev;
}
if (strcmpi(pla->namepl,s)==0)
{
printf("│ %5d │ %18s │ %12u │ %15s │ %11u │ ",i,pla->namepl,
pla->year,pla->people,pla->sputnik);
l++;i++; }
puts("└──────┴─────────────────┴────────────┴─────────────────┴─────────────┘");
printf("\n Найдено %d планет.\n",l);
puts(" Поиск по названиям планет завершен. Продолжить?(y- да)");
fflush(stdin);
ch=getch();
}
while(ch=='y');
}
void poisk2(PL *pla) //Функция поиска по годам открытия
{
char ch;
do