C++
Розробіть програму «Бібліотека». Створіть структуру «Книга» (назва, автор, видавництво, жанр). Створіть масив з 10 книг. Реалізуйте для нього такі мож ливості:
■ Редагувати книгу;
■ Друк усіх книг;
■ Пошук книг за автором;
■ Пошук книги за назвою;
■ Сортування масиву за назвою книг;
■ Сортування масиву за автором;
■ Сортування масиву за видавництвом.
■ Видалення книги за певним критерієм.
■ Додавання нової книги у масив
Answers & Comments
Ответ:
Объяснение:
#include <iostream>
#include <string>
#include <algorithm>
struct Book {
std::string title;
std::string author;
std::string publisher;
std::string genre;
};
void printBook(const Book& book) {
std::cout << "Назва: " << book.title << std::endl;
std::cout << "Автор: " << book.author << std::endl;
std::cout << "Видавництво: " << book.publisher << std::endl;
std::cout << "Жанр: " << book.genre << std::endl;
std::cout << std::endl;
}
void editBook(Book& book) {
std::cout << "Введіть нову назву: ";
std::getline(std::cin >> std::ws, book.title);
std::cout << "Введіть нового автора: ";
std::getline(std::cin >> std::ws, book.author);
std::cout << "Введіть нове видавництво: ";
std::getline(std::cin >> std::ws, book.publisher);
std::cout << "Введіть новий жанр: ";
std::getline(std::cin >> std::ws, book.genre);
}
void printAllBooks(const Book library[], int size) {
std::cout << "Книги в бібліотеці:" << std::endl;
for (int i = 0; i < size; i++) {
std::cout << "Книга " << i + 1 << ":" << std::endl;
printBook(library[i]);
}
}
void searchByAuthor(const Book library[], int size, const std::string& author) {
std::cout << "Книги автора " << author << ":" << std::endl;
bool found = false;
for (int i = 0; i < size; i++) {
if (library[i].author == author) {
printBook(library[i]);
found = true;
}
}
if (!found) {
std::cout << "Книги даного автора відсутні." << std::endl;
}
}
void searchByTitle(const Book library[], int size, const std::string& title) {
std::cout << "Книги з назвою \"" << title << "\":" << std::endl;
bool found = false;
for (int i = 0; i < size; i++) {
if (library[i].title == title) {
printBook(library[i]);
found = true;
}
}
if (!found) {
std::cout << "Книги з такою назвою відсутні." << std::endl;
}
}
bool compareByTitle(const Book& book1, const Book& book2) {
return book1.title < book2.title;
}
bool compareByAuthor(const Book& book1, const Book& book2) {
return book1.author < book2.author;
}
bool compareByPublisher(const Book& book1, const Book& book2) {
return book1.publisher < book2.publisher;
}
void sortBooksByTitle(Book library[], int size) {
std::sort(library, library + size, compareByTitle);
}
void sortBooksByAuthor(Book library[], int size) {
std::sort(library, library + size, compareByAuthor);
}
void sortBooksByPublisher(Book library[], int size) {
std::sort(library, library + size, compareByPublisher);
}
void removeBookByCriteria(Book library[], int& size, const std::string& criteria) {
int removedCount = 0;
for (int i = 0; i < size; i++) {
if (library[i].title == criteria || library[i].author == criteria ||
library[i].publisher == criteria || library[i].genre == criteria) {
removedCount++;
} else {
library[i - removedCount] = library[i];
}
}
size -= removedCount;
std::cout << "Видалено " << removedCount << " книг(и) за вказаним критерієм." << std::endl;
}
void addNewBook(Book library[], int& size) {
if (size >= 10) {
std::cout << "Бібліотека заповнена. Неможливо додати нову книгу." << std::endl;
return;
}
Book newBook;
std::cout << "Введіть назву нової книги: ";
std::getline(std::cin >> std::ws, newBook.title);
std::cout << "Введіть автора нової книги: ";
std::getline(std::cin >> std::ws, newBook.author);
std::cout << "Введіть видавництво нової книги: ";
std::getline(std::cin >> std::ws, newBook.publisher);
std::cout << "Введіть жанр нової книги: ";
std::getline(std::cin >> std::ws, newBook.genre);
library[size] = newBook;
size++;
std::cout << "Нова книга успішно додана до бібліотеки." << std::endl;
}
int main() {
Book library[10];
int size = 0;
// Додавання початкових книг до бібліотеки (для прикладу)
Book book1 = {"Книга 1", "Автор 1", "Видавництво 1", "Жанр 1"};
Book book2 = {"Книга 2", "Автор 2", "Видавництво 2", "Жанр 2"};
library[size++] = book1;
library[size++] = book2;
// Взаємодія з бібліотекою
addNewBook(library, size);
editBook(library[0]);
printAllBooks(library, size);
searchByAuthor(library, size, "Автор 1");
searchByTitle(library, size, "Книга 2");
sortBooksByTitle(library, size);
sortBooksByAuthor(library, size);
sortBooksByPublisher(library, size);
removeBookByCriteria(library, size, "Жанр 2");
printAllBooks(library, size);
return 0;
}