Создание программы для моделирования работы книжного магазина на 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`:** Хранит