Смекни!
smekni.com

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

{

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("\n\n Планеты открытые в таком диапозоне(с %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("&bsol;n Найдено %d планет.&bsol;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("Введите имя файла: &bsol;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("&bsol;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-Нет)&bsol;n");

do

c=getch();

while((c!='y')&&(c!='n'));

if (c=='n') return (pla);

if((fp=fopen(name,"rt"))==NULL)

{

klear(pla);

cprintf("&bsol;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("&bsol;t&bsol;t&bsol;t Рекомендации пользователю :&bsol;n&bsol;n"

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

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

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

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

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

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

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

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

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

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

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

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 ("&bsol;tВведите символ(да- y / нет- n) ");

}

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

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

{

clrscr();

planet=vvodall();

clrscr();

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

do

{

fflush(stdin);

scanf ("%c", &ch);

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

}

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

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

{

save(planet);

puts("&bsol;n&bsol;n&bsol;n&bsol;n&bsol;n&bsol;t&bsol;t Запись данных закончена! Нажмите любую клавишу.");

getch();

}

}

else

planet=load(planet);

menu1();

continue;

}

case '3':

{

if(planet!=NULL)

{

clrscr();

vivodall(planet);

menu1();

continue;

}

break;

}

case '4':

{

free(planet);

planet=korrekt(planet);

menu1();

break;

}

case '5':

{

if(planet!=NULL)

{

clrscr();

menu2();

switch(hhh=getch())

{

case '1':

{

poisk1(planet);

menu1();

continue;

}

case '2':

{

poisk2(planet);

menu1();

continue;

}

default : menu1();

}

menu1();

continue;

}

break;

}

case '6':

{

if(planet!=NULL)

{

clrscr();

i=5;

puts("&bsol;n&bsol;n&bsol;n&bsol;n&bsol;t&bsol;t Идет сортировка по названию планеты.");

while(i<70)

{

gotoxy(i,10);

puts("*");

delay(60);

i++;

}

planet=sort(planet);

puts("Сортировка по названиям планет прошла успешно! ");

delay(2000);

clrscr();

vivodall(planet);

menu1();

continue;

}

break;

}

case '7':

{

free(planet);

break;

}

default : ccc=0;

}

}

while(!ccc);

}

while(ccc!='7');}

Министерство образования РФ

Санкт- Петербургский государственный электротехнический университет

Кафедра ВТ

Пояснительная записка

К курсовой работе по дисциплине

«Основы алгоритмизации и программирование»

II семестр

Тема : «Электронная картотека»

Выполнил : Урывский Ю.В.

Факультет : КТИ

Группа :9371

Проверила :Сискович Т.И.

Санкт- Петербург

2000

Задание :

Создание электронной картотеки, хранящейся на диске, и программы, обеспечивающей взаимодействие с ней.

Программа должна выполнять следующие действия:

- занесение данных в электронную картотеку;

- внесение изменений (добавление, исключение);

- поиск данных по признаку, вывод их на экран.

Выбор подлежащих выполнению действий должен быть реализован с помощью меню и подменю.

Задача должна быть структурирована и отдельные части должны быть оформлены как функции.

Исходные данные должны вводиться с клавиатуры.

В процессе обработки картотека должна храниться в памяти ЭВМ в виде связанного списка.