Поиск в структуре, которая содержит информацию о книгах в библиотеке - 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();
}
Объяснение кода листинга программы
- struct book - структура, которая содержит информацию о книгах в библиотеке.
- books[] - массив структур типа book, заполненный данными о книгах.
- const int count = 5 - количество книг в библиотеке.
- book search(char fname) - метод поиска книги по её названию. Возвращает указатель на найденную книгу или NULL, если книга не найдена.
- *void writeinfo(book key)** - метод вывода информации о книге. Если книга не найдена, выводит сообщение об этом.
- int main() - точка входа в программу. Считывает название книги с помощью функции scanf_s, вызывает метод search для поиска книги, а затем метод writeinfo для вывода информации о найденной книге.
- _getch() - блокирует программу до нажатия клавиши.