Поиск в структуре, которая содержит информацию о книгах в библиотеке - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Дан массив структур. Каждая структура содержит информацию о книгах в библиотеке (придумать 5 полей структуры). Создать свои пользовательские функции. Первая из них осуществляет поиск информации по введенному запросу. Вторая - выводит результат на экран. Реализовать, используя указатели на массив структур.

Решение задачи: «Поиск в структуре, которая содержит информацию о книгах в библиотеке»

textual
Листинг программы
#include "conio.h"
#include "stdio.h"
#include "iostream"
#include <string.h>
using namespace std;
 
struct book         // Объявление структуры
       {
               char *name;
               char *name_autor;
               char *izdatelstvo;
               int god_vypuska;
               int stranicy;
 
} books[] = {              // Заполнение структуры данными
               {"Demons","Svetlana Golshanskay","ACT",2011,257},
               {"Eva","Kris Karter","ACT",1999,400},
               {"Pilot","Aleksandr Zorich","ACT",2011,200},
               {"Pepelnye","Aleksandr Kontorovich","Samizdat",2011,110},
               {"Ohotnik","Anton Demchenko","Samizdat",2011,614}
};
 
const int count = 5;     
 
book *search(char *fname)   /* Метод поиска по названию книги. В качестве параметра передается указатель на название книги.
              Возвращается: указатель на нужное поле в случае если книга найдена, и NULL если не найдена*/
{
      for (int i = 0; i < count; i++)
       {                
               if (strcmp(fname, books[i].name) == 0)   /* Метод strcmp сравнивает между собой две строки. В качестве аргументов поступают
                    два указателя на начало двух строк и начинается посимвольное сравнивание слева-направо*/
               {                       
                       return &books[i];    // Возвращаем адрес нашего поля
               }                
       }        
       return NULL;     // Книга не найдена, возвращаем NULL
}
 
 
void writeinfo(book *key)         /* Метод для вывода информации по данной книги. В качестве параметра передается ссылка на нужное поле*/
{
   if (key == NULL)
       {
           printf("Book is not found\n");
           return;
       }
       printf("Book info:\n");
       printf("Nazvanie: %s\n",(*key).name);
       printf("Avtor: %s\n",(*key).name_autor);
       printf("Izdatelstvo: %s\n",(*key).izdatelstvo);
       char buffer [33];
       _itoa_s ((*key).god_vypuska,buffer,sizeof(buffer),10);  // Конвертируем int в char. получаем указатель на первый символ в buffer.
       printf("God: %s\n",buffer);
       _itoa_s ((*key).stranicy,buffer,sizeof(buffer),10);
       printf("Stranic: %s\n",buffer);
}
 
int main()
{                
       char fname[64];        
       printf("Poisk po nazvaniu knigi\nVvedite nazvanie...\n");
       scanf_s("%s", fname,64);
       book *key = search(fname);    // вызываем метод search
       writeinfo(key);          // вызываем метод writeinfo
       _getch();
}

Объяснение кода листинга программы

  1. struct book - структура, которая содержит информацию о книгах в библиотеке.
  2. books[] - массив структур типа book, заполненный данными о книгах.
  3. const int count = 5 - количество книг в библиотеке.
  4. book search(char fname) - метод поиска книги по её названию. Возвращает указатель на найденную книгу или NULL, если книга не найдена.
  5. *void writeinfo(book key)** - метод вывода информации о книге. Если книга не найдена, выводит сообщение об этом.
  6. int main() - точка входа в программу. Считывает название книги с помощью функции scanf_s, вызывает метод search для поиска книги, а затем метод writeinfo для вывода информации о найденной книге.
  7. _getch() - блокирует программу до нажатия клавиши.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.444 из 5
Похожие ответы