Смекни!
smekni.com

Электронная картотека планет солнечной системы (стр. 1 из 3)

Текст программы:

#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("&bsol;n&bsol;t╓────────────────────────────────────────────────────────────╖&bsol;n");

printf( "&bsol;t║ ║ ");

puts( "&bsol;n&bsol;t║ К А Р Т О Т Е К А П Л А Н Е Т ║&bsol;n");

" &bsol;t ║&bsol;t&bsol;t С О Л Н Е Ч Н О Й С И С Т Е М Ы ║ ");

puts( "&bsol;t╙────────────────────────────────────────────────────────────╜ ");

puts("&bsol;n&bsol;t&bsol;t Главное меню :&bsol;n");

puts("&bsol;t&bsol;t 1- Рекомендации пользователю.");

puts("&bsol;t&bsol;t 2- Ввод данных.");

puts("&bsol;t&bsol;t 3- Вывод всех данных.");

puts("&bsol;t&bsol;t 4- Просмотр, удаление, добавление.");

puts("&bsol;t&bsol;t 5- Вывод данных по определенному признаку.");

puts("&bsol;t&bsol;t 6- Сортировка.");

puts("&bsol;t&bsol;t 7- Выход.");

}

void menu2() //Меню поиска элементов

{

puts("&bsol;n&bsol;n&bsol;n&bsol;n&bsol;t&bsol;t&bsol;t Меню поиска:&bsol;n");

puts("&bsol;t&bsol;t&bsol;t 1- Вывод по названию планеты.");

puts("&bsol;t&bsol;t&bsol;t 2- Вывод по году открытия.");

puts("&bsol;n&bsol;n&bsol;n&bsol;n&bsol;n&bsol;n&bsol;n&bsol;n&bsol;n&bsol;n&bsol;n&bsol;n&bsol;n&bsol;n&bsol;n&bsol;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("&bsol;n&bsol;t&bsol;t&bsol;t В С Я К А Р Т О Т Е К А&bsol;n");

printf("┌──────┬─────────────────┬────────────┬───────────────┬───────────┐&bsol;n");

printf("│ Номер│ Название │ Когда │ Кто открыл │ Кол-во │&bsol;n");

printf("│ стр. | планеты │ открыли │ планету │ спутников │&bsol;n");

printf("└──────┴─────────────────┴────────────┴───────────────┴───────────┘&bsol;n");

printf("┌──────┬─────────────────┬────────────┬───────────────┬───────────┐&bsol;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("&bsol;n");

cprintf("%30s","ПАРАМЕТРЫ ПЛАНЕТ&bsol;n&bsol;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("&bsol;n&bsol;n Планеты с названием %s :&bsol;n",s);

printf("┌──────┬─────────────────┬────────────┬───────────────┬───────────┐&bsol;n");

printf("│НомерНазваниеКогдаКто открылКол-во │&bsol;n");

printf("│ стр. │ планетыоткрылипланетуспутников │&bsol;n");

printf("└──────┴─────────────────┴────────────┴───────────────┴───────────┘&bsol;n");

printf("┌──────┬─────────────────┬────────────┬───────────────┬───────────┐&bsol;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("&bsol;n Найдено %d планет.&bsol;n",l);

puts(" Поиск по названиям планет завершен. Продолжить?(y- да)");

fflush(stdin);

ch=getch();

}

while(ch=='y');

}

void poisk2(PL *pla) //Функция поиска по годам открытия

{

char ch;

do