Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.06.2009, 13:43   #1
ai\ekcah^p
Форумчанин
 
Аватар для ai\ekcah^p
 
Регистрация: 03.05.2009
Сообщений: 112
По умолчанию Работа с файлами в С++

Oрганизовать меню: Создание файла, Просмотр файла, Поиск, Выход. В файле содержатся структуры со сведениями о книгах: автор, название, издательство, год издания. Вывести сведения о книгах, изданных не ранее 1990 года издательством «Знание».

Написал программу- файл создает и просмотр работает,а вот поиск никак
не хочет.Подскажите пожалуйста где ошибся. Подскажите как написать функцию которая выводит сведения о книгах, изданных не ранее 1990 года издательством "Знание".

Код:
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include "locale.h"
 
struct Book
{
char Nazv[10],Autor[10],Izdatel[10];
int god;

}kniga;
void input();
void print();
void findbook();



 int main()
 { 
 
char c = 'a';
    while (c!='0')
    {
       puts("\n 1-novuy fail");
       puts(" 2-prosmotr faila");
       puts(" 3-poisk ");
       puts(" 0-vyhod");
       c = getch();
       switch(c)
       {
          case '1':input(); break;
          case '2':print();break;
          case '3':findbook();break;
          case '0':break;
          default : puts("nevernuy regim");
       }
      }
  }

  void input()
  {
  char ch;
  int res=0;
      FILE *tf=fopen("file1.dat","wb");
      printf("\n vvedite informaciu o knige \n");
      do
      { 
          printf("\n nazvanie: "); 
          scanf("%s",&kniga.Nazv);
          printf("\n avtor: "); 
          scanf("%s",&kniga.Autor);
          printf("\n izdatelstvo: "); 
          scanf("%s",&kniga.Izdatel);
          printf("\n god izdaniya: ");
          scanf("%d",&kniga.god);
          res = fwrite(&kniga,sizeof(kniga),1,tf);
          printf("\n Zakonchity ? y/n");
          ch=getch();
          
      } while (ch != 'y');
       fclose(tf);
   }
   

   
  
  void print()
  { 
  int i; 
      FILE *tf=fopen("file1.dat","rb");
      i=1;
      fread(&kniga,sizeof(kniga),1,tf);
  printf("\n \tnazvanie     \tavtor    \tizdatelstvo   \tgod");
      while(!feof(tf))
      {
  printf("\n %3d \t%8s  \t%6s  \t%4s \t%15d ",i,kniga.Nazv,kniga.Autor,kniga.Izdatel,kniga.god);
          fread(&kniga,sizeof(kniga),1,tf);
          i++;
       }
      getch();
  printf("\n");
  fclose(tf);
   }
   
  void findbook()
  {
  char  Book[10];
      long int i;
      FILE *tf=fopen("file1.dat","rb+");
      puts(" Izdatelstvo: ");
      scanf("%s",Book);
      gets(Book);
      fread(&kniga,sizeof(kniga),1,tf);
     while (!feof(tf))
     {
  if (strcmp(kniga.Izdatel,Book)==0)
          {
 printf(" nazvanie %10s avtor %10s izdatelstvo %s god %d ",kniga.Nazv,kniga.Autor,kniga.Izdatel,kniga.god);
 getch();               
 fread(&kniga,sizeof(kniga),1,tf);
          }
       fclose(tf);     
             
      }
   }
ai\ekcah^p вне форума Ответить с цитированием
Старый 21.06.2009, 15:28   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Исправьте функцию поиска:
Код:
void findbook()
  {
  char  Book[10];
      long int i;
      FILE *tf=fopen("file1.dat","rb");
      puts(" Izdatelstvo: ");
      gets(Book);
      fread(&kniga,sizeof(kniga),1,tf);
     while (!feof(tf))
     {
     if (strcmp(kniga.Izdatel,Book)==0)
          {
     printf(" nazvanie %10s avtor %10s izdatelstvo %s god %d ",kniga.Nazv,kniga.Autor,kniga.Izdatel,kniga.god);
    getch();

          }
      fread(&kniga,sizeof(kniga),1,tf);

      }
    fclose(tf);
   }
Цитата:
Подскажите как написать функцию которая выводит сведения о книгах, изданных не ранее 1990 года издательством "Знание".
Считываете запись. Если год издания >=1990 и издательство = "Знание", то выводим.
Очень похоже на поиск.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 21.06.2009, 16:16   #3
ai\ekcah^p
Форумчанин
 
Аватар для ai\ekcah^p
 
Регистрация: 03.05.2009
Сообщений: 112
По умолчанию

Спасибо Sazary! Все работает!!!
ai\ekcah^p вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с файлами МартинИ Паскаль, Turbo Pascal, PascalABC.NET 3 23.12.2008 21:36
Работа с файлами Скрунж Паскаль, Turbo Pascal, PascalABC.NET 1 18.10.2008 15:19
Работа с файлами Smith777 Помощь студентам 4 23.02.2008 05:08
Работа с файлами ShVad Общие вопросы Delphi 4 03.02.2007 10:43