Created
May 12, 2025 10:06
-
-
Save Makc082/3fef1bb63d21684f02cccb68300e621d to your computer and use it in GitHub Desktop.
Marketplace
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
#include <windows.h> | |
#include <string> | |
using namespace std; | |
// структура товарів | |
struct Product { | |
int id; | |
char name[50]; | |
float price; | |
int sellerId; | |
}; | |
// структура кошика | |
struct BasketItem { | |
int productId; | |
char name[50]; | |
float price; | |
int sellerId; | |
}; | |
// структура користувача | |
struct User { | |
int id; | |
char username[50]; | |
char password[50]; | |
BasketItem basket[50]; | |
int basketCount; | |
}; | |
// структура зберігання стану системи | |
struct SystemState { | |
User* users; | |
int userCount; | |
Product* products; | |
int productCount; | |
}; | |
// виділення пам’яті під масив користувачів | |
void AllocateUserArray(User*& users, int& size) { | |
if (size > 0 && size < 1000000) { | |
users = new User[size]; | |
} | |
else { | |
users = nullptr; | |
} | |
} | |
// подвоюємо масив користувачив | |
void ExpandUserArray(User*& users, int& oldSize, int& size) { | |
int newSize = size * 2; | |
User* newUsers = new User[newSize]; | |
for (int i = 0; i < oldSize; i++) { | |
newUsers[i] = users[i]; | |
} | |
delete[] users; | |
users = newUsers; | |
size = newSize; | |
} | |
// виділення пам’яті під масив продуктів | |
void AllocateProductArray(Product*& products, int& size) { | |
if (size > 0 && size < 1000000) { | |
products = new Product[size]; | |
} | |
else { | |
products = nullptr; | |
} | |
} | |
// подвоюємо масив продуктів | |
void ExpandProductArray(Product*& products, int& oldSize, int& size) { | |
int newSize = size * 2; | |
Product* newProducts = new Product[newSize]; | |
for (int i = 0; i < oldSize; i++) { | |
newProducts[i] = products[i]; | |
} | |
delete[] products; | |
products = newProducts; | |
size = newSize; | |
} | |
// перевірка на зайнятий логін | |
bool IsUsernameTaken(User*& users, int& userCount, const char* username) { | |
for (int i = 0; i < userCount; i++) { | |
if (strcmp(users[i].username, username) == 0) { | |
return true; | |
} | |
} | |
return false; | |
} | |
// реєстрація користувача | |
void RegisterUser(User*& users, int& userCount, int& size) { | |
if (userCount >= size) { | |
ExpandUserArray(users, userCount, size); | |
} | |
User newUser; | |
newUser.id = userCount; | |
cout << "Введіть логін: "; | |
cin >> newUser.username; | |
if (IsUsernameTaken(users, userCount, newUser.username)) { | |
cout << "Цей логін вже зайнятий.\n"; | |
return; | |
} | |
cout << "Введіть пароль: "; | |
cin >> newUser.password; | |
users[userCount++] = newUser; | |
cout << "Реєстрація успішна! Ваш ID: " << newUser.id << "\n"; | |
} | |
// авторизація користувача | |
int LoginUser(User*& users, int& userCount) { | |
char username[50]; | |
char password[50]; | |
cout << "Введіть логін: "; | |
cin >> username; | |
cout << "Введіть пароль: "; | |
cin >> password; | |
for (int i = 0; i < userCount; i++) { | |
if (strcmp(users[i].username, username) == 0 && strcmp(users[i].password, password) == 0) { | |
cout << "Авторизація успішна! Ваш ID: " << users[i].id << "\n"; | |
return users[i].id; | |
} | |
} | |
cout << "Неправильний логін або пароль.\n"; | |
return -1; | |
} | |
// показ товару | |
void ShowCatalog(Product* products, int count) { | |
cout << "\nКаталог товарів:\n"; | |
for (int i = 0; i < count; i++) { | |
cout << i + 1 << ". [ID: " << products[i].id << "] " | |
<< products[i].name << " — " << products[i].price << " грн" | |
<< " (Продавець ID: " << products[i].sellerId << ")\n"; | |
} | |
} | |
// Додавання товару в кошик | |
void AddToBasket(User& user, SystemState& state) { | |
if (user.basketCount >= 5) { | |
cout << "Кошик повний!\n"; | |
return; | |
} | |
ShowCatalog(state.products, state.productCount); | |
int choice; | |
cout << "Оберіть товар за номером: "; | |
cin >> choice; | |
if (choice < 1 || choice > state.productCount) { | |
cout << "Невірний вибір!\n"; | |
return; | |
} | |
const Product& selected = state.products[choice - 1]; | |
BasketItem& item = user.basket[user.basketCount]; | |
item.productId = selected.id; | |
strcpy_s(item.name, sizeof(item.name), selected.name); | |
item.price = selected.price; | |
item.sellerId = selected.sellerId; | |
user.basketCount++; | |
cout << "Додано в кошик: " << selected.name << "\n"; | |
} | |
// Перегляд кошика | |
void ShowBasket(const User& user) { | |
cout << "\nВаш кошик:\n"; | |
if (user.basketCount == 0) { | |
cout << "(порожній)\n"; | |
return; | |
} | |
for (int i = 0; i < user.basketCount; i++) { | |
cout << "- " << user.basket[i].name | |
<< " — " << user.basket[i].price << " грн" | |
<< " (ID товару: " << user.basket[i].productId | |
<< ", продавець: " << user.basket[i].sellerId << ")\n"; | |
} | |
} | |
// Меню після входу в акаунт | |
void UserSession(User& user, SystemState& state) { | |
int Choice; | |
do { | |
cout << "\n1. Додати товар у кошик\n" | |
<< "2. Переглянути кошик\n" | |
<< "3. Вийти з акаунту\n" | |
<< "Ваш вибір: "; | |
cin >> Choice; | |
switch (Choice) { | |
case 1: | |
AddToBasket(user,state); | |
break; | |
case 2: | |
ShowBasket(user); | |
break; | |
case 3: | |
cout << "Вихід з акаунту...\n"; | |
break; | |
default: | |
cout << "Невірний вибір.\n"; | |
} | |
} while (Choice != 3); | |
} | |
// головне меню | |
void MainMenu(SystemState& state, int& size) { | |
int currentUserId = -1; | |
int choice; | |
do { | |
cout << "\n--- Маркетплейс ---\n"; | |
cout << "1. Зареєструватися\n"; | |
cout << "2. Увійти\n"; | |
cout << "3. Вийти\n"; | |
cout << "Ваш вибір: "; | |
cin >> choice; | |
switch (choice) { | |
case 1: | |
RegisterUser(state.users, state.userCount, size); | |
break; | |
case 2: | |
currentUserId = LoginUser(state.users, state.userCount); | |
if (currentUserId != -1) { | |
UserSession(state.users[currentUserId], state); | |
} | |
break; | |
case 3: | |
cout << "До побачення!\n"; | |
break; | |
default: | |
cout << "Невірний вибір.\n"; | |
} | |
} while (choice != 3); | |
} | |
int main() { | |
SetConsoleOutputCP(1251); // консоль одразу україномовна | |
User* users = nullptr; | |
int userCount = 0; | |
int sizeAr = 100; | |
AllocateUserArray(users, sizeAr); | |
Product* products = nullptr; | |
int productCount = 5; | |
AllocateProductArray(products, productCount); | |
products[0] = { 0, "Акумуляторний дриль-шурупокрут Makita", 10455.0, 1 }; | |
products[1] = { 1, "Акумуляторна кутова шліфмашина MAKITA", 6399.0, 2 }; | |
products[2] = { 2, "Акумуляторний лобзик MAKITA", 10590.5, 1 }; | |
products[3] = { 3, "Акумуляторний перфоратор Makita", 5952.0, 3 }; | |
products[4] = { 4, "Штроборіз MAKITA", 22733.0, 2 }; | |
SystemState state{ users, userCount, products, productCount }; | |
MainMenu(state, sizeAr); // передати всю структуру | |
delete[] state.users; | |
delete[] state.products; | |
return 0; | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment