Здравствуйте!
Вот зада4ка на несложную базу данных:
Написать программу с использование структуры, содержащую следующие функции: основная, создания записи (клавиша 1), вывод записей на экран монитора в виде таблицы (клавиша 2), сортировка по заданному полю (клавиша 3), поиск по ключу (клавиша 4) Количество записей – 10. Выход из программы осуществляется нажатием клавиши ESC.
Поля: номер по списку, название музея, продолжительность экскурсии (в часах), начало экскурсии (в часах), цена билета (в рублях), количество человек в группе. Сортировка записей по количеству человек в группе (поле - количество человек в группе). Ключ поиска – заданное количество человек в группе.
Написала прогу, НО есть глюк с поиском(после поиска зна4ения искомого элемента изменяются на ваще непонятные, а если поискать и вывести другой элемент они опять восстанавливаются......4удеса в решете=)))))
и нет сортировки.................
Помогите пожалуйста!!!!!!
О4ень прошу.......
Вот прога:
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <stdlib.h>
struct Excursion
{
char MuseumName[30];
int TimeForExcursion;
int Beginning;
int Price;
int Koli4tstvoLudei;
struct Excursion *prior; //ykazatel na predidywiy element spiska
struct Excursion *next; //ykazatel na sled. element spiska
} st[10];
const int M=10;
struct control
{
int nb; //4islo zaniatix elementov
int nf; //4islo svobiodnix elementov
struct Excursion *bbeg; //na4alo spiska zaniatix elementov
struct Excursion *bend; //konec spiska zaniatix
struct Excursion *fbeg; //na4alo spiska svobodnix elementov
struct Excursion *fend; //konec spiska svobodnix elementov
} ctrl;
int init(void);
int input(void);
int poisk(void);
//int sortirovka(void);
int print(void);
struct Excursion *find(int PCount);
void main(void)
{
clrscr();
printf("Baza dannix EKSKYRSII\n");
printf("Najmite lubyiu klaviwy\n");
getch();
clrscr();
init();
char command;
while(1)
{
printf("1.Vvod svedeniy o ekskyrsii\n");
printf("2.Vivod soderjimogo\n");
printf("3.sortirovka po kol-vy 4elovek v gryppe\n");
printf("4.Poisk po zadannomy 4isly 4elovek v gryppe\n");
printf("\nVvedite nomer pynkta menu\n");
char command;
command=getch();
switch (command)
{
case '1':
input();
clrscr();
break;
case '2':
clrscr();
print();
break;
case '3':
//sortirovka();
break;
case '4':
poisk();
break;
case 27:
return;
default: printf("\n\nNeverniy pynkt menu\n\n");
}
}
}
int init(void)
{
struct Excursion *point=st;
int i;
ctrl.nb=0;
ctrl.nf=0;
ctrl.bbeg=NULL;
ctrl.bend=NULL;
ctrl.fbeg=st;
ctrl.fend=st;
point=st;
for (i=0;i<M-1;i++)
{
if (ctrl.nf!=0)
{
point -> prior=point-1;
point -> next =point+1;
}
else
{
point -> prior=NULL;
point -> next=point+1;
}
point++;
ctrl.nf++;
ctrl.fend++;
}
ctrl.nf++;
point -> prior=point-1;
point -> next=NULL;
return 0;
}
int input(void)
{
struct Excursion *ptr;
printf("\n\n \n");
if (ctrl.nf==0)
{
printf("Svobodnix elementov net\n");
return -1;
}
ptr=ctrl.fbeg;
printf("Vvedite Imia Myzeja \n");
scanf("%s",ctrl.fbeg->MuseumName);
printf("Vvedite vremia ekskyrsii \n");
scanf("%d",&ptr->TimeForExcursion);
printf("Vvedite vremia na4ala ekskyrsii \n");
scanf("%d",&ptr->Beginning);
printf("Vvedite ceny v rybliax\n");
scanf("%d",&ptr->Price);
printf("Vvedite kol-vo lydei \n");
scanf("%d",&ptr->Koli4tstvoLudei);
if (ctrl.nf==1)
{
ctrl.fbeg=NULL;
ptr->next=NULL;
ptr->prior=ctrl.bend;
ctrl.bend->next=ptr;
ctrl.bend=ptr;
ctrl.fend=NULL;
}
else
{
if (ctrl.nb==0)
ctrl.bbeg=ptr;
ctrl.fbeg=ptr->next;
ptr->next=NULL;
ptr->prior=ctrl.bend;
ctrl.bend->next=ptr;
ctrl.bend=ptr;
ctrl.fbeg->prior=NULL;
}
ctrl.nb++;
ctrl.nf--;
return 0;
}
int print(void)
{
int i;
struct Excursion *ptr;
ptr=ctrl.bbeg;
printf("Baza:\n\n");
if (ctrl.nb==0)
{
printf("V baze net zapisei\n\n");
return -1;
}
for (i=0;i<ctrl.nb;i++)
{
printf("%d MuseumName: %s\n",(i+1),ptr->MuseumName);
printf(" vremia ekskyrsii: %d\n",ptr->TimeForExcursion);
printf(" vremia na4ala: %d\n",ptr->Beginning);
printf(" Cena: %d\n",ptr->Price);
printf(" Kol-vo lydei %d\n",ptr->Koli4tstvoLudei);
ptr=ptr->next;
}
printf("\n\n Vsego zapisei=%d\n\n",i);
return 0;
}
struct Excursion *find(int PCount)
{
int i;
struct Excursion *ptf;
ptf=ctrl.bbeg;
for (i=0;i<ctrl.nb;i++) //nb - 4islo zaniatix elementov
{
if( PCount==ptf->Koli4tstvoLudei)
return ptf;
else ptf=ptf->next;
}
return NULL;
}
int poisk(void)
{
int PCount;
int i;
struct Excursion *ptr;
if (ctrl.nb==0)
{
printf("\nV baze net zapisei\n\n");
return -1;
}
printf("Vvedite 4islo ludei dlia poiska: \n");
scanf("%d", &PCount);
if ((ptr=find(PCount))==0)
{
printf("Ni4ego ne naideno\n");
return -1;
}
if (ptr==ctrl.bbeg)
{
if (ctrl.nb==1)
{
printf(" MuseumName: %s\n",ptr->MuseumName);
printf(" vremia ekskyrsii: %d\n",ptr->TimeForExcursion);
printf(" vremia na4ala: %d\n",ptr->Beginning);
printf(" Cena: %d\n",ptr->Price);
printf(" Kol-vo lydei %d\n",ptr->Koli4tstvoLudei);
return 0;
}
else
{
ctrl.bbeg=ptr->next;
printf(" MuseumName: %s\n",ptr->MuseumName);
printf(" vremia ekskyrsii: %d\n",ptr->TimeForExcursion);
printf(" vremia na4ala: %d\n",ptr->Beginning);
printf(" Cena: %d\n",ptr->Price);
printf(" Kol-vo lydei %d\n",ptr->Koli4tstvoLudei);
return 0;
}}
else
{if (ptr==ctrl.bend)
{printf(" MuseumName: %s\n",ptr->MuseumName);
printf(" vremia ekskyrsii: %d\n",ptr->TimeForExcursion);
printf(" vremia na4ala: %d\n",ptr->Beginning);
printf(" Cena: %d\n",ptr->Price);
printf(" Kol-vo lydei %d\n",ptr->Koli4tstvoLudei);
ctrl.bend=ptr->prior;
return 0;
}
else
{
ptr->prior->next=ptr->next;
ptr->next->prior=ptr->prior;
return 0;
}}}