Как создать программу на C++, которая будет моделировать работу книжного магазина?

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

В компьютерной системе контроля ассортимента фиксируется информация о наличии и количестве экземпляров книг, а также о таких характеристиках, как автор, название, издательство, год выпуска, количество страниц, тематика, категория, цена, наценка и рейтинг спроса. Для новых книг установлена повышенная наценка на определенный период.

Каждый рабочий день система регистрирует заказы на книги, принимаемые как в магазине, так и по телефону или электронной почте. Заказ содержит информацию о покупателе (фамилия, телефон и/или электронный адрес) и перечень запрашиваемых книг с указанием их количества. Возможна ситуация, когда заказчик указывает только имя автора с пометкой «новая», что подразумевает последнюю изданную книгу этого автора. Если запрашиваемая книга есть в наличии, она откладывается для покупателя, и фиксируется продажа. В противном случае информация о книге сохраняется в специальном списке для последующих заказов, включая данные о заказчике. Рейтинг спроса рассчитывается по количеству заказов на каждую книгу.

Система также отслеживает фактическое количество книг в магазине. Если запасы уменьшаются до определенного порога (3-5 экземпляров), формируется заявка в издательство на дополнительную поставку.
  • 14 декабря 2024 г. 11:33
Ответы на вопрос 1
Создание программы для моделирования работы книжного магазина на C++ можно разбить на несколько шагов. Мы создадим классы для книг, заказов и магазина, а также реализуем методы для управления ними. Вот пример реализации:

```cpp
#include <iostream>
#include <vector>
#include <string>
#include <unordered_map>
#include <algorithm>

class Book {
public:
    std::string author;
    std::string title;
    std::string publisher;
    int year;
    int pages;
    std::string genre;
    std::string category;
    double price;
    double markup;
    int demandRating;
    int stock;

    Book(std::string a, std::string t, std::string p, int y, int pg, 
         std::string g, std::string c, double pr, double m, int st)
        : author(a), title(t), publisher(p), year(y), pages(pg), 
          genre(g), category(c), price(pr), markup(m), stock(st), demandRating(0) {}

    void sell(int quantity) {
        stock -= quantity;
        demandRating++;
    }

    void restock(int quantity) {
        stock += quantity;
    }
};

class Order {
public:
    std::string customerName;
    std::string customerContact;
    std::vector<std::pair<Book*, int>> bookOrders;

    Order(std::string name, std::string contact) : customerName(name), customerContact(contact) {}
};

class Bookstore {
private:
    std::vector<Book> inventory;
    std::unordered_map<std::string, std::vector<Order>> pendingOrders;

public:
    void addBook(Book book) {
        inventory.push_back(book);
    }

    void placeOrder(Order order) {
        for (auto &bookOrder : order.bookOrders) {
            Book* book = bookOrder.first;
            int quantity = bookOrder.second;

            if (book->stock >= quantity) {
                book->sell(quantity);
                std::cout << "Sold " << quantity << " copies of '" << book->title << "' to " << order.customerName << ".\n";
            } else {
                pendingOrders[order.customerName].push_back(order);
                std::cout << "Not enough stock for '" << book->title << "'. Order placed for customer: " << order.customerName << ".\n";
            }
        }
    }

    void checkStock() {
        for (auto &book : inventory) {
            if (book.stock <= 5) {
                std::cout << "Need to restock '" << book.title << "'. Current stock: " << book.stock << ".\n";
            }
        }
    }

    void printInventory() {
        for (const auto& book : inventory) {
            std::cout << book.title << " by " << book.author 
                      << " - Stock: " << book.stock << ", Price: " 
                      << book.price << " + markup: " << book.markup << "\n";
        }
    }
};

int main() {
    Bookstore bookstore;

    // Adding some books to the inventory
    bookstore.addBook(Book("Author A", "Book A1", "Publisher A", 2020, 300, "Fiction", "Adult", 10.0, 1.5, 10));
    bookstore.addBook(Book("Author B", "Book B1", "Publisher B", 2021, 250, "Non-Fiction", "Adult", 15.0, 2.0, 5));
    bookstore.addBook(Book("Author A", "Book A2", "Publisher A", 2022, 350, "Fiction", "Adult", 12.0, 1.7, 2));

    // Print initial inventory
    std::cout << "Initial Inventory:\n";
    bookstore.printInventory();

    // Create an order
    Order order("Customer 1", "customer1@example.com");
    order.bookOrders.push_back({&bookstore.inventory[0], 2}); // Order 2 copies of Book A1
    order.bookOrders.push_back({&bookstore.inventory[2], 3}); // Order 3 copies of Book A2 (not enough stock)

    // Place the order
    bookstore.placeOrder(order);

    // Check inventory after the order
    std::cout << "\nInventory after Order:\n";
    bookstore.printInventory();

    // Check stock levels
    bookstore.checkStock();

    return 0;
}
```

### Описание кода:
1. **Класс `Book`:** Содержит информацию о книге, включая автора, название, издательство и другие характеристики. Методы `sell` и `restock` управляют количеством книг в наличии.

2. **Класс `Order`:** Хранит
Похожие вопросы