Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Создание базы данных на диске 
:(
    Опции темы
Bondleha
Дата 22.4.2009, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 15.4.2009

Репутация: нет
Всего: нет



Код

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <iostream.h>
#define K 20
FILE *ust,*fname;
struct strrab {
       char nazv[K];
       char gs[K];
       char ks[K];
       char cena[K];
       char dv[K];
       char dvoz[K];
       char ik[K];
       char ak[K];};
//прототипы функций
void Inf(void);
int Zapbd(int*,int*);
int Korbd(int*,int*);
int Prosm(int*,int*,int p=1);
int Delbd(int*,int*);
int Rasbd(int*,int*,int*,int*,int*);
int Poisk(int*,int*); 
int Dopbd(int*,int*);
int Sort(int*,int*);
int error(int,int);
int error1(int);
void Vvod(int*,int j=11);
struct strrab my_rab[K],buf;

int main(void)
{
 char pr[2],otv;
 int menu,*t,z=0,cena=0,dv=0,dvoz=0;
 textcolor(WHITE);
 do{
  do{
    clrscr();
    printf("\n\t   Меню Базы Данных         "
       "\n\t Информация о базе.........1"
       "\n\t Заполнение базы...........2"
       "\n\t Корректировка данных......3"
       "\n\t Просмотр базы данных......4"
       "\n\t Удаление из базы данных...5"
       "\n\t Расчет базы данных........6"
       "\n\t Поиск данных..............7"
       "\n\t Добавление данных.........8"
       "\n\t Сортировка данных.........9"
       "\n\t Выход из программы.......10");
    printf("\n\n Введите выбранный пункт меню:");
    fflush(stdin);
    gets(pr);
    menu=atoi(pr);
    switch(menu)
    {
     case 1: Inf();break;
     case 2: Zapbd(&z,t);break;
     case 3: Korbd(&z,t);break;
     case 4: Prosm(&z,t);break;
     case 5: Delbd(&z,t);break;
     case 6: Rasbd(&z,t,&cena,&dv,&dvoz);break;
     case 7: Poisk(&z,t);break;
     case 8: Dopbd(&z,t);break;
     case 9: Sort(&z,t);break;
     case 10: goto end;
     default: ;
    }
  }while(menu);
   end: ;
   printf("\n Продолжить работу с базой данных(Y/N):");
   fflush(stdin);
   otv=getch();
  }while(otv=='y'||otv=='Y'||otv=='Н'||otv=='н');
   return 1;
}

void Inf(void)
{
 clrscr();
 puts("\n\t\t--------Информация о базе данных---------------"
      "\n\t\t База данных содержит информацию о работе"
      "\n\t\tпункта проката фильмов."
      "\n\t\tПозволяет вывести список имеющихся фильмов;"
      "\n\t\tдобавить, удалить, найти и рассчитать прибыль"
      "\n\t\tот проката всех имеющихся в наличии фильмов."
      "\n\t\t Для удобства работы база данных сопровож-"
      "\n\t\tдается пояснениями (если вы будете следовать"
      "\n\t\tим,то нестандартных ситуаций не возникнет)."
      "\n\t\t Элемент некоторых фраз при запросе \"Y/N\""
      "\n\t\tозначает, что при нажатии \"Y\" программа "
      "\n\t\tрасценит ответ, как положительный; при на-"
      "\n\t\tжатии любой другой клавиши ответ будет отри-"
      "\n\t\tцательный. "
      "\n\t\t    Удачи, вам!"
      "\n\t\t\t\t\t   Бондаренко А.А.
      "\n\n\n\t\tДля выхода нажмите любую клавишу...");
 getch();
}

int Zapbd(int*z,int*t)
{
 int i;
 if(*z==1)
 {
  clrscr();
  printf("\n\t База данных уже заполнялась.");
  printf("\n\t Для Работы с БД выберите пункт 4 в главном меню.");
  getch();
  return 1;
 }
 do{
  clrscr();
  printf("\n\t ***** Заполнение базы данных *****");
  printf("\n\tВведите кол-во фильмов(не более %d) : ",K);
  fflush(stdin);
  scanf("%d",t);
  if(*t<1||*t>K)
  {
   printf("\n\t Будте внимательнее!!!"
      "\n\t Число должно лежать в диапазоне[1..%d]."
      "\n\t Нажмите любую клавишу и повторите ввод:",K);
   getch();
  }
 }while(*t<=0||*t>K);
 for(i=0;i<*t;i++)
  Vvod(&i);
 printf("Нажмите любую клавишу:");
 getch();
 *z=1;
 return 0;
}

int Korbd(int*z,int*t)
{
 char q,h3[3];
 int h,h1,h2,g;
 if(error1(*z)==1) return 1;
 do{
  do{
   g=0;
   clrscr();
   printf("\n Корректировка базы данных. \n");
   Prosm(z,t,2);
   printf("\n\t Номер фильма(0-отказ):");
   scanf("%d",&h1);
   if(h1==0) return 1;
   if(h1<0||h1>*t)
   {
   printf("\n\n\t Такого фильма нет!"
           "\n\t Нажмите любую клавишу:");
    g=1;
    getch();
    fflush(stdin);
   }
  }while(g!=0);
  h2=h1-1;
  do{
   clrscr();
   printf("Какие именно данные желаете корректировать?"
      "\n 1. Название фильма."
      "\n 2. Год создания."
      "\n 3. Киностудия."
      "\n 4. Цена."
      "\n 5. Дата выдачи."
      "\n 6. Дата возврата."
      "\n 7. Ф.И.О клиента."
      "\n 8. Адрес клиента."
      "\n 9. Прибыль с проката."
      "\n 10. Все."
      "\n 11. Отказ от корректировки."
      "\n\n\t Введите номер пункта:");
  for(int i=0;i<3;i++)   h3[i]=getchar();
     h=atoi(h3);
  }while(h<1||h>11);
  switch(h)
  {
   case 11: break;
   default: Vvod(&h2,h);break;
  }
  if(h!=11)
  {
   clrscr();
   printf("\n Продолжить корректировку (Y/N)?");
   q=getch();
   }
  else q=' ';
 }while(q=='y'|| q=='Y'|| q=='Н'|| q=='н');
 return 1;
}

int Prosm(int*z,int*t,int p)
{
 if(error1(*z)==1) return 1;
 ust=stdout;
 char q=' ';
do{
  clrscr();
fprintf(ust,
"\n+-------------+-----+----------+----+-------------+----------------------------+"
"\n|   Название  | Год |   Кино-  |Цена|    Дата     |         Клиента            |"
"\n|    фильма   |созд.|  студия  |    |выдачи|возвр.|    Ф.И.О.   |    адреc     |"
"\n+-------------+-----+----------+----+------+------+-------------+--------------+"
       );
  for(int j=0;j<*t;j++)
  {
   fprintf(ust,"|%13s|%5s|%10s|%4s|%6s|%6s|%13s|%14s|",
   my_rab[j].nazv,my_rab[j].gs,my_rab[j].ks,my_rab[j].cena,
   my_rab[j].dv,my_rab[j].dvoz,my_rab[j].ik,my_rab[j].ak);
fprintf(ust,
"+-------------+-----+----------+----+------+------+-------------+--------------+"
     );}
  if(p==1) {printf("\n\n\t Распечатать (Y/N)?");
  q=getchar();}
  if(q=='y'||q=='Y'||q=='н'||q=='Н') q='y';
 }while(q=='y'||q=='Y'||q=='н'||q=='Н');
}

int Delbd(int*z,int*t)
{ int r,g;
 char q=' ';
 do{
  if(error1(*z)==1) return 1;
  do{
   g=0; clrscr();
   Prosm(z,t,2);
   printf("\n\n Название фильма удалить(0-отказ):");
   scanf("%d",&r);
   if(r==0) return 1;
   if(r<0||r>*t)
   {
   printf("\n\n\t Такого фильма нет!!!"
      "\n\t Нажмите любую клавишу:");
    g=1;  getch();
    fflush(stdin);
   }
  }while(g!=0);
  for(int i=r;i<*t;i++) my_rab[i-1]=my_rab[i];
  *t=*t-1;
  clrscr();
  printf("\n\n\t Удаление произведено!!!"
     "\n\t Нажмите любую клавишу:");
  if(*t==0) *z=0;
  getch(); clrscr();
  printf("\n\n\t Продолжить удаление (Y/N)?");
  q=getch();
 }while(q=='y'|| q=='Y'|| q=='Н'|| q=='н');
                                                                                                                                                                                                                                                                                                                 }                                                                                                                                                                                                                                                                                                                                                                                                             



//подпрограмма расчета базы данных

int Rasbd(int*z,int*t,int*cena,int*dvoz,int*dv)
{
 if(error1(*z)==1) return 1;
 int i,d,k,c;
 int sy=5,god,mes,data,god1,mes1,data1,god2,mes2,data2,prib,DP;
 char q=' '; clrscr();

 printf("Введите начало периода");
 
 printf("\n год:");
 cin>> god1;

 printf("месяц:");
 cin>> mes1;

 printf(" дата:");
 cin>> data1;

 printf("Введите конец периода:");
 
 printf("\n год:");
 cin>>god2;

 printf("месяц:");
 cin>> mes2;

 printf(" дата:");
 cin>>data2;

 do{
     DP=0;
    for(i=0;i<*t;i++)
     {
      d=atoi(my_rab[i].dv);
      k=atoi(my_rab[i].dvoz);
      c=atoi(my_rab[i].cena);

       if(data1<=*dvoz && *dvoz<=data2)
        {
         prib=abs(c*(k-d)) ;
         DP=DP+prib;
        }
     }
   printf("\n Доход пункта проката  с%2d %2d %4d по %2d %2d %4d ,руб: %6d",data1,mes1,god1,data2,mes2,god2,DP);
   printf("\n\n\t Распечатать(Y/N)?");
   q=getch();
  }
while(q=='y'||q=='Y'||q=='Н'||q=='н');
}








//подпрограмма поиска в базе данных


int Poisk(int*z,int*t)
{char film[K]="",q=' ',q1=' ';
 int i;
 ust=stdout;
 do{
  do{
   if(error1(*z)==1) return 1;
   int s=0;
   do{
    clrscr();
    printf("\n\n Введите название фильма:");
    fflush(stdin);
    gets(film);
    for(i=0;i<*t;i++)
     if(strcmp(my_rab[i].nazv,film)==0)
     {s=1;printf("Год выпуска: %s",my_rab[i].gs);
     getch();}
    if(s!=1)
    {
     printf("\n\n\n\t Такого фильма в базе данных нет!!!");
     getch();
     clrscr();
     goto m;
    }
   }while(s!=1);
   clrscr();
   for(i=0;i<*t;i++)
   {
    if(strcmp(my_rab[i].gs,film)==0)
       printf("\n >%s",my_rab[i].gs);
   }
   printf("\n\n\t Распечатать(Y/N)?");
   q=getchar();
  }while(q=='y'||q=='Y'||q=='н'||q=='Н');
  clrscr();
  m:printf("\n\n\n\t\t Хотите продолжить поиск (Y/N):");
  q1=getch();
 }while(q1=='y'||q1=='Y'||q1=='Н'||q1=='н');
}








//подпрограмма дополнения базы данных


int Dopbd(int*z,int*t)
{
 char q=' ';

do{
  




if(error1(*z)==1) return 1;
  clrscr();
  if(*t+1>K)
  {
   printf("\n База полностью заполнена!!!!!!"
      "\n Выберите другой пункт меню!!!!!");
   getch();
   return 1;
  }
  Vvod(t);
  *t=*t+1;
  clrscr();
  printf("\n\n\n\n\t\t Хотите продолжить дополнение(Y/N)?");
  q=getch();
 }while(q=='y'|| q=='Y'|| q=='н'|| q=='Н');
}

int Sort(int*z,int*t)
{
 char q=' ',q1[2]="";
 do{
  if(error1(*z)==1) return 1;
  do{
   clrscr();
   printf("\n Сортировать по:"
           "\n 1.Названию фильма."
           "\n 2.Году создания."
           "\n Ваш выбор:");
   gets(q1);
   if(atoi(q1)<1||atoi(q1)>2)
   {
    printf("\n\n\n\t Такого пункта в базе данных нет!");
    getch();
   }
  }while(atoi(q1)<1||atoi(q1)>2);
  switch(atoi(q1))
  {
   case 1:
   {
    for(int i=0;i<*t-1;i++)
     for(int j=i+1;j<*t;j++)
     {
      if(strcmp(my_rab[i].nazv,my_rab[j].nazv)>0)
      {
       buf=my_rab[i];
       my_rab[i]=my_rab[j]; 
       my_rab[j]=buf;
      }
     }
    };break;
   case 2:
   {
    for(int i=0;i<*t-1;i++)
     for(int j=i+1;j<*t;j++)
     {
      if(strcmp(my_rab[i].gs,my_rab[j].gs)>0)
      {
       buf=my_rab[i];
       my_rab[i]=my_rab[j];
       my_rab[j]=buf;
      }
     }
    };break;
  }
  clrscr();
  printf("\n\n\n\n\t\t Хотите продолжить сортировку (Y/N)?");
  q=getch();
 }while(q=='y'|| q=='Y'|| q=='Н'|| q=='н');
}

void Vvod(int*i,int j)
{
 clrscr();
 fflush(stdin);
 printf("\n Заполнение базы данных для %d фильма",*i+1);
 int f,g=*i,g1=4,k,p;
 if(j==1||j==11)
 {
  do{
   f=0;
   printf("\n Введите название фильма:");
   gets(my_rab[*i].nazv);
   if(strlen(my_rab[*i].nazv)>g1+9) f=error(g1,g);
  }while(f!=0);
 }
 if(j==2||j==11)
 {
  do{
   f=0;
   printf("\n Введите год создания фильма:");
   gets(my_rab[*i].gs);
   if(strlen(my_rab[*i].gs)>g1+1) f=error(g1,g);
  }while(f!=0);
 }
 if(j==3||j==11)
 {
  do{
   f=0;
   printf("\n Введите киностудию:");
   gets(my_rab[*i].ks);
   if(strlen(my_rab[*i].ks)>g1+6) f=error(g1,g);
  }while(f!=0);
 }
 if(j==4||j==11)
 {
  do{
   f=0;
   printf("\n Введите цену :");
   gets(my_rab[*i].cena);
   if(strlen(my_rab[*i].cena)>g1) f=error(g1,g);
  }while(f!=0);
 }
 if(j==5||j==11)
 {
  do{
   f=0;
   printf("\n Введите дату выдачи фильма:");
   gets(my_rab[*i].dv);
   if(strlen(my_rab[*i].dv)>g1+2) f=error(g1,g);
  }while(f!=0);
 }
 if(j==6||j==11)
 {
  do{
   f=0;
   printf("\n Введите дату возврата фильма:");
   gets(my_rab[*i].dvoz);
   if(strlen(my_rab[*i].dvoz)>g1+2) f=error(g1,g);
  }while(f!=0);
 }
  if(j==7||j==11)
 {
  do{
   f=0;
   printf("\n Введите Ф.И.О клиента:");
   gets(my_rab[*i].ik);
   if(strlen(my_rab[*i].ik)>g1+9) f=error(g1,g);
  }while(f!=0);
 }
 if(j==8||j==11)
 {
  do{
   f=0;
   printf("\n Введите адрес клиента:");
   gets(my_rab[*i].ak);
   if(strlen(my_rab[*i].ak)>g1+10) f=error(g1,g);
  }while(f!=0);
 }
 }

int error(int i,int j)
{
 printf("\n\n\n\t\t  Длина вводимого значения более %d"
    "\n\t\t    Будте внимательнее!!!",i);
 getch();
 clrscr();
 printf("\n Заполнение БД для фильма %d\n",j+1);
 return 1;
}

int error1(int z)
{
 if(z==0)
 {
  clrscr();
  printf("\n\n\n\t\t База данных пуста."
     "\n\t\t Выбери пункт 2 в главном меню.");
  getch();
  return 1;
 }
}



Вот код базы данных в электронном виде нужно, чтобы можно было с ней работать с диска. То есть чтобы сохранялось в файл и с него можно было ее редактировать
PM MAIL   Вверх
zim22
Дата 22.4.2009, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 16
Всего: 69



 smile 
Цитата(Bondleha @  22.4.2009,  14:19 Найти цитируемый пост)
 нужно, чтобы можно было с ней работать с диска. 

есть сэр! слушаюсь и повинуюсь! отряд обученных обезьян приступит к выполнению вашей задачи сразу же после получения порции бананов.


--------------------
PM MAIL   Вверх
Dov
Дата 22.4.2009, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 50
Всего: 88



Цитата(zim22 @  22.4.2009,  15:59 Найти цитируемый пост)
есть сэр! слушаюсь и повинуюсь! отряд обученных обезьян приступит к выполнению вашей задачи сразу же после получения порции бананов.

  smile   smile 


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Anikmar
Дата 23.4.2009, 00:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Bondleha, по-моему здесь на столько альтруистов нет. Либо переписывайте сами либо объявляйте предел вашей благодарности  smile 
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0580 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.