Advertisement
Lavig

Другий семестр. Лабораторна робота №16 (Завдання 2)

May 1st, 2025
223
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.72 KB | None | 0 0
  1. #include <iostream>
  2. #include <windows.h>
  3. #include <fstream>
  4. #include <sstream>
  5. #include <vector>
  6. #include <format>
  7.  
  8. using namespace std;
  9.  
  10. struct Product {
  11.     string name{};
  12.     double quantity{};
  13.     double price{};
  14.     double total{};
  15.     string code{};
  16.     string location{};
  17. };
  18.  
  19. void updateTotal(Product& p) {
  20.     p.total = p.quantity * p.price;
  21. }
  22. void readProducts(vector<Product>& products, const string& filename) {
  23.     ifstream fin(filename);
  24.     if (!fin.is_open()) {
  25.         cout << "Не вдалося відкрити вихідний файл";
  26.         return;
  27.     }
  28.     string line;
  29.     while (getline(fin, line)) {
  30.         stringstream ss(line);
  31.         string field{};
  32.         Product p{};
  33.         getline(ss, p.name, ';');
  34.         getline(ss, field, ';');
  35.         p.quantity = stod(field);
  36.         getline(ss, field, ';');
  37.         p.price = stod(field);
  38.         getline(ss, field, ';');
  39.         p.total = stod(field);
  40.         getline(ss, p.code, ';');
  41.         getline(ss, p.location, ';');
  42.  
  43.         products.push_back(p);
  44.     }
  45.     fin.close();
  46. }
  47. void printProducts(vector<Product>& products) {
  48.     cout << "Залишки на складі:" << endl;
  49.     cout << format("{:^20}{:^20}{:^20}{:^20}{:^20}{:^20}\n", "Найменування", "Кількість (кг)", "Ціна (грн)", "Сума (грн)", "Артикул", "Місце розташування");
  50.     for (int i = 0; i < products.size(); i++) {
  51.         Product p = products[i];
  52.         cout << format("{:^20}{:^20.2f}{:^20.2f}{:^20.2f}{:^20}{:^20}\n", p.name, p.quantity, p.price, p.total, p.code, p.location);
  53.     }
  54. }
  55. void addProduct(vector<Product>& products) {
  56.     Product p;
  57.     cout << "Введіть найменування товару: ";
  58.     cin.ignore();
  59.     getline(cin, p.name);
  60.     cout << "Введіть кількість товару (кг): ";
  61.     cin >> p.quantity;
  62.     cout << "Введіть ціну товару (грн): ";
  63.     cin >> p.price;
  64.     cout << "Введіть артикул товару: ";
  65.     cin >> p.code;
  66.     cout << "Введіть місце розташування товару: ";
  67.     cin.ignore();
  68.     getline(cin, p.location);
  69.     updateTotal(p);
  70.     products.push_back(p);
  71.     cout << "Товар додано." << endl;
  72. }
  73. void editProduct(vector<Product>& products) {
  74.     string code;
  75.     cout << "Введіть артикул товару для редагування: ";
  76.     cin >> code;
  77.     for (int i = 0; i < products.size(); i++) {
  78.         if (products[i].code == code) {
  79.             cout << "Редагування товару " << products[i].name << ":" << endl;
  80.             cout << "Нове найменування: ";
  81.             cin.ignore();
  82.             getline(cin, products[i].name);
  83.             cout << "Нова кількість (кг): ";
  84.             cin >> products[i].quantity;
  85.             cout << "Нова ціна (грн): ";
  86.             cin >> products[i].price;
  87.             cout << "Нове місце розташування: ";
  88.             cin.ignore();
  89.             getline(cin, products[i].location);
  90.             updateTotal(products[i]);
  91.             cout << "Товар оновлено." << endl;
  92.             return;
  93.         }
  94.     }
  95.     cout << "Товар з таким артикулом не знайдено." << endl;
  96. }
  97. void deleteProduct(vector<Product>& products) {
  98.     string code;
  99.     cout << "Введіть артикул товару для видалення: ";
  100.     cin >> code;
  101.     for (int i = 0; i < products.size(); i++) {
  102.         if (products[i].code == code) {
  103.             products.erase(products.begin() + i);
  104.             cout << "Товар видалено." << endl;
  105.             return;
  106.         }
  107.     }
  108.     cout << "Товар з таким артикулом не знайдено." << endl;
  109. }
  110. void saveProducts(vector<Product>& products, const string& filename) {
  111.     ofstream fout(filename);
  112.     if (!fout.is_open()) {
  113.         cout << "Не вдалося відкрити файл для запису!" << endl;
  114.         return;
  115.     }
  116.     for (int i = 0; i < products.size(); i++) {
  117.         Product p = products[i];
  118.         fout << p.name << ";" << p.quantity << ";"
  119.             << p.price << ";" << p.total << ";"
  120.             << p.code << ";" << p.location << endl;
  121.     }
  122.     fout.close();
  123.     cout << "\nДані успішно збережено!" << endl;
  124. }
  125. void Menu() {
  126.     cout << "Меню складу" << endl;
  127.     cout << "1. Перегляд товарів" << endl;
  128.     cout << "2. Додати товар" << endl;
  129.     cout << "3. Редагувати товар" << endl;
  130.     cout << "4. Видалити товар" << endl;
  131.     cout << "5. Зберегти у файл" << endl;
  132.     cout << "6. Вийти" << endl;
  133. }
  134. int main() {
  135.     SetConsoleOutputCP(1251);
  136.     SetConsoleCP(1251);
  137.     vector<Product> products;
  138.     readProducts(products, "D:/files/products.txt");
  139.     int choice{};
  140.     do {
  141.         Menu();
  142.         cout << "Оберіть номер опції: " << endl;
  143.         cin >> choice;
  144.         switch (choice) {
  145.         case 1:
  146.             printProducts(products);
  147.             break;
  148.         case 2:
  149.             addProduct(products);
  150.             break;
  151.         case 3:
  152.             editProduct(products);
  153.             break;
  154.         case 4:
  155.             deleteProduct(products);
  156.             break;
  157.         case 5:
  158.             saveProducts(products, "D:/files/products.txt");
  159.             break;
  160.         case 6:
  161.             cout << "Вихід з програми." << endl;
  162.             break;
  163.         default: cout << "Номер опції обрано неправильно. Спробуйте ще раз!" << endl;
  164.         }
  165.     } while (choice != 6);
  166. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement