Xreferat.com » Рефераты по информатике и программированию » Электронная картотека планет солнечной системы

Электронная картотека планет солнечной системы

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


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

printf( "t║ ║ ");

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

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

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

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

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

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

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

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

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

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

puts("tt 7- Выход.");

}


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

{

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

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

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

puts("nnnnnnnnnnnnnnnt Для выхода в главное меню нажмите любую клавишу.");

}


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("nttt В С Я К А Р Т О Т Е К А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","ПАРАМЕТРЫ ПЛАНЕТ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);

}

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("nn Планеты с названием %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

{

int i=1,l=0,a,b;

clrscr();

fflush(stdin);

puts("Введите интерессующее вас границы поиска (от чего- то до чего- то) :");

while(scanf("%d%d",&a,&b)!=2)

{

while (getchar()!='n');

printf("Все- таки стоит здесь что- нибудь ввестиn(от a до b)n");

}


printf("nn Планеты открытые в таком диапозоне(с %d до %d года):n",a,b);

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

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

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

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

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

while(pla->prev)


{

if((a<=pla->year)&&(b>=pla->year))

{

printf("│ %5d │ %18s │ %12u │ %15s │ %11u │ ",i,pla->namepl,

pla->year,pla->people,pla->sputnik);

l++;i++;

}

pla=pla->prev;

}

if((a<=pla->year)&&(b>=pla->year))

{

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 klear(PL* pla) //Функция очистки памяти

{

PL *plr;

if (pla)

{

if (pla->prev)

{

plr=pla->prev;

while (plr->prev)

{

free(plr->next);

plr=plr->prev;

}

}

else

plr=pla;

free(plr);

}

}


char * fname() //Функция ввода имени файла

{

char *t;

t=(char *)malloc(80*sizeof(char));

cprintf("Введите имя файла: n");

fflush(stdin);

scanf("%79s",t);

return t;

}


int save1(PL *pla,char *filename) //Функция, сохраняющая данные

{

FILE *fp;

if((fp=fopen(filename,"w"))==NULL) return 0;

while(pla)


{

fprintf(fp,"%s %d %s %d |",

pla->namepl,pla->year,pla->people,pla->sputnik);

pla=pla->prev;

}

fclose(fp);

return 1;

}


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;

}


PL *load(PL *pla) //Функция загрузки данных из файла

{

char c,*name;

int i;


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)

{

klear(pla);

cprintf("nОшибка при открытии файла!!!");

sovet("Ошибка!!! Нажмите любую кнопку");

getch();

return (NULL);

}

plane=(PL*)malloc(sizeof(PL));

while (fscanf(fp,"%s %d %s %d |",

plane->namepl,&(plane->year),plane->people,&(plane->sputnik))==4)

{

plane->prev=NULL;

plane->next=plan;

if (plan!=NULL) plan->prev=plane;

plan=plane;

plane=(PL*)malloc(sizeof(PL));

}

free(plane);

if (plan!=NULL)

{

while(plan->next)

plan=plan->next;

}

fclose(fp);

klear(pla);

return (plan);

}


/*Функция сортировки по алфавиту*/

PL *sort(PL *pla)

{

PL *point,*tmp=NULL,*f,*s;

int i,j,srav;


//Указатель на начало

f=pla;

point=pla;


while(f!=NULL)

{

s=f->next;

while(s!=NULL)

{

if((strcmp(f->namepl,s->namepl)>0))

{ tmp=(PL*)malloc(sizeof(PL));

strcpy(tmp->namepl,f->namepl);

tmp->year=f->year;

strcpy(tmp->people,f->people);

tmp->sputnik,f->sputnik;

//

strcpy(f->namepl,s->namepl);

f->year=s->year;

strcpy(f->people,s->people);

f->sputnik=s->sputnik;

//

strcpy(s->namepl,tmp->namepl);

s->year=tmp->year;

strcpy(s->people,tmp->people);

s->sputnik=tmp->sputnik;

free(tmp);

}

s=s->next;

}

strcpy(point->namepl,f->namepl);

point->year=f->year;

strcpy(point->people,f->people);

point->sputnik=f->sputnik;

point=point->next;

f=f->next;

}

point=pla;

return(point);

}


void main()

{

char ccc,hhh,ch;

int i;

PL* planet=NULL;

planet->prev=planet->next=NULL;

_setcursortype(_NOCURSOR);

textcolor(10);

menu1();

do

{

do

{

fflush(stdin);

switch(ccc=getch())

{

case '1':

{

clrscr();

printf("ttt Рекомендации пользователю :nn"

"Эта программа- это подобие электронной базы данных. Программа работает, "

"nиспользуя массивы в памяти ЭВМ для хранения информации введенной пользователем."

"nДанные могут вводиться с клавиатуры или загружаться из файла."

"Также можно вывестина экран всю картотеку или же просматривать картотеку по карточкам,"

" с возмож- ностью добавления или удаления некоторых карточек по выбору."

" Программа имеет хороший интерфейс и показывает устойчивую работу."

" В программе имеется поиск элементов по заданным условиям, а также сортировка планет по названиям."

" В программе есть главное меню и подменю для поиска планет по некоторым признакам."

" Желательно, чтобы данные были точные, корректно записанные и касающиеся"

"n непосредственно темы данной лабораторной работы.");

puts("nnnnnttДля перехода в главное меню нажмите любую клавишу...");

getch();


menu1();

break;

}

case '2':

{

free(planet);

planet=NULL;

planet->prev=planet->next=NULL;

clrscr();

puts("Это новая база данных?(да-y/ нет-n) ");

do

{

fflush(stdin);scanf ("%c", &ch);


printf ("tВведите символ(да- y / нет- n) ");

}

while (ch!='n' && ch!='y'&& ch!='Y'&& ch!='N');

if (ch=='y'|| ch=='Y')

{

clrscr();

planet=vvodall();

clrscr();

puts("nnЗаписать в файл (да-y/нет-n)?");

do

{

fflush(stdin);

scanf ("%c", &ch);

printf ("Введите символ(да- y / нет- n)n ");

}

while (ch!='n' && ch!='y'&& ch!='Y'&& ch!='N');

if (ch=='Y'||

Если Вам нужна помощь с академической работой (курсовая, контрольная, диплом, реферат и т.д.), обратитесь к нашим специалистам. Более 90000 специалистов готовы Вам помочь.
Бесплатные корректировки и доработки. Бесплатная оценка стоимости работы.

Поможем написать работу на аналогичную тему

Получить выполненную работу или консультацию специалиста по вашему учебному проекту
Нужна помощь в написании работы?
Мы - биржа профессиональных авторов (преподавателей и доцентов вузов). Пишем статьи РИНЦ, ВАК, Scopus. Помогаем в публикации. Правки вносим бесплатно.

Похожие рефераты: