Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: База данных  (Прочитано 5183 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Lenysik89
Гость
« : 13-05-2007 20:10 » 

Здравствуйте!
Вот зада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;
}}}
 
« Последнее редактирование: 03-06-2007 17:28 от Алексей1153++ » Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #1 : 13-05-2007 21:01 » 

Я немного просмотрел код, слишком много лишних телодвижений. Например:
Код:
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;
Ты определись, что у тебя будет, или связанный список или массив структуры.

Завтра днем просмотрю до конца. Пока что один совет, форматируй текст программы. Самой потом будет намного легче разбираться. Как пример:
Код:
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;
}
У меня кстати на этой функции вылетела ошибка.
« Последнее редактирование: 13-05-2007 21:04 от Finch » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Lenysik89
Гость
« Ответ #2 : 13-05-2007 21:19 » 

Буду о4ень признательна!
На самом деле уже порядком запуталась.............=(((((((
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #3 : 14-05-2007 22:28 » 

По тому, что у тебя было уже, я код оптимизировал. Я закоментировал clrscr();, так как эта команда у меня не срабатывала.
Код:
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <stdlib.h>

#define MAXRECORD 10


struct Excursion
{
   char Name[30];                        //Name of Museum
   int Time;                             //Time of excursion
   int BeginTime;                        //Begin time of excursion
   int Price;
   int Amount;                           //Count of People
   struct Excursion *prev;  //ykazatel na predidywiy element spiska
   struct Excursion *next;   //ykazatel na sled. element spiska
};

struct control
{
   int nb;   //4islo zaniatix elementov
   int nf;   //4islo svobiodnix elementov
   struct Excursion *fbegin;  //na4alo spiska zaniatix elementov
   struct Excursion *fend;  //konec spiska zaniatix
   struct Excursion *ffree;  //na4alo spiska svobodnix elementov
};

control ctrl;

int init(void);
void  Destroy();
int input(void);
int poisk(void);
//int sortirovka(void);
int print(void);
//struct Excursion *find(int PCount);

void main(void)
{
   char command;
   //clrscr();
   printf("Baza dannix EKSKYRSII\n");
   printf("Najmite lubyiu klaviwy\n");
   getch();
   //clrscr();
   
   
   if (init())
   {
   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");
   
   command=getch();
   switch (command)
   {
   case '1':
   input();
   //clrscr();
   break;
   case '2':
   //clrscr();
   print();
   break;
   case '3':
   //sortirovka();
   break;
   case '4':
   
   poisk();
   break;
   
   case 27:
   Destroy();
   return;
   default: printf("\n\nNeverniy pynkt menu\n\n");
   }
   }
   }
   Destroy();
}

void  Destroy()
{
while (ctrl.fbegin != NULL)
{
ctrl.fend=ctrl.fbegin;
ctrl.fbegin=ctrl.fbegin->next;
delete ctrl.fend;
}
ctrl.fbegin=NULL;
ctrl.fend=NULL;
ctrl.ffree=NULL;
ctrl.nb=0;
ctrl.nf=0;
}

Excursion *NewItem()
{
Excursion *res=new Excursion;
if (res!=NULL)
{
res->Name[0]=0;
res->Time=0;
res->BeginTime=0;
res->Amount=0;
res->Price=0;
res->next=NULL;
res->prev=NULL;
}
return res;
}

int init(void)
{
int res=0;
Excursion *temp;
Excursion *Oldtemp;
ctrl.nb=0;
ctrl.nf=0;
ctrl.fbegin=NewItem();
if (ctrl.fbegin==NULL) return res;
Oldtemp = ctrl.ffree = ctrl.fend = ctrl.fbegin;
ctrl.nb++;
while (ctrl.nb<MAXRECORD)
{
temp=NewItem();
if (temp == NULL) return res;
Oldtemp->next=temp;
temp->prev=Oldtemp;
ctrl.fend=Oldtemp=temp;
ctrl.nb++;
}
res=1;
return res;
}

int input(void)
{
printf("\n\n  \n");
if (ctrl.ffree==NULL)
{
printf("Svobodnix elementov net\n");
return -1;
}
printf("Vvedite Imia Myzeja \n");
scanf("%s",ctrl.ffree->Name);
printf("Vvedite vremia ekskyrsii \n");
scanf("%d",&ctrl.ffree->Time);
printf("Vvedite vremia na4ala ekskyrsii \n");
scanf("%d",&ctrl.ffree->BeginTime);
printf("Vvedite ceny v rybliax\n");
scanf("%d",&ctrl.ffree->Price);
printf("Vvedite kol-vo lydei \n");
scanf("%d",&ctrl.ffree->Amount);
ctrl.ffree=ctrl.ffree->next;
ctrl.nb++;
ctrl.nf--;
return 0;
}

int print(void)
{
   struct Excursion *ptr=ctrl.fbegin;
   int i=0;
   printf("Baza:\n\n");
   if (ctrl.fbegin==ctrl.ffree)
   {
      printf("V baze net zapisei\n\n");
      return -1;
   }
   while(ptr != ctrl.ffree)
   {
   i++;
      printf("%d MuseumName:  %s\n",i,ptr->Name);
      printf("  vremia ekskyrsii: %d\n",ptr->Time);
      printf("  vremia na4ala:  %d\n",ptr->BeginTime);
      printf("  Cena: %d\n",ptr->Price);
      printf("  Kol-vo lydei %d\n",ptr->Amount);
  printf("----------------------------------------------------------\n");
      ptr=ptr->next;
   }
   printf("\n Vsego zapisei=%d\n\n",i);
   printf("----------------------------------------------------------\n");
   return 0;
}

int poisk()
{
   if (ctrl.fbegin==ctrl.ffree)
   {
      printf("V baze net zapisei\n\n");
      return -1;
   }
   int PCount;
   printf("Vvedite 4islo ludei dlia poiska:    \n");
   scanf("%d", &PCount);
   struct Excursion *ptr=ctrl.fbegin;
   int i=0;
   printf("Baza:\n\n");
   while(ptr != ctrl.ffree)
   {
   if (ptr->Amount==PCount)
   {
i++;
printf("%d MuseumName:  %s\n",i,ptr->Name);
printf("  vremia ekskyrsii: %d\n",ptr->Time);
printf("  vremia na4ala:  %d\n",ptr->BeginTime);
printf("  Cena: %d\n",ptr->Price);
printf("  Kol-vo lydei %d\n",ptr->Amount);
printf("----------------------------------------------------------\n");

   }
   ptr=ptr->next;
   }
   printf("----------------------------------------------------------\n");
   printf("\n Vsego naidenih zapisei=%d\n\n",i);
   printf("----------------------------------------------------------\n");
   return 0;

}
Сортировку я не писал, чуть попозже посмотрю. Или накидай хотя бы на основе моего кода свои мвсли.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines