Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <vector>
- #include <fstream>
- using namespace std;
- struct Product
- {
- string name;
- int sale;
- int remains;
- int cost;
- };
- //перегрузка на вывод
- ostream& operator << (ostream& os, Product& i)
- {
- os << i.name << ' ';
- os << i.sale << ' ';
- os << i.remains << ' ';
- os << i.cost << ' ';
- return os;
- }
- //печать каждого элемента
- ostream& operator << (ostream& os, vector<Product> v)
- {
- for (auto i : v)
- cout << i;
- }
- //перегрузка на ввод
- istream& operator >> (istream& is, Product& i)
- {
- is >> i.name;
- is >> i.sale;
- is >> i.remains;
- is >> i.cost;
- return is;
- }
- //создаем новую базу с количеством записей N
- void NewStruct(int n)
- {
- ofstream file("out.txt");
- Product objectStruct;
- for (int i = 0; i < n; ++i)
- {
- cout << "Запись " << i+1 << endl;
- cin >> objectStruct;
- if (objectStruct.remains < 0 || objectStruct.sale < 0)
- {
- cout << "Запись не корректна\n";
- n++;
- continue;
- }
- file << objectStruct << endl;
- }
- file.close();
- }
- //запись в файл всего вектора
- void WriteInFile (vector<Product>& product, int size)
- {
- ofstream file("out.txt");
- for (int i = 0; i < size; i++)
- file << product[i] << endl;
- file.close();
- }
- // обновляем всю базу. для необходимости возвращаем размер базы
- int update (vector<Product>& product)
- {
- product.clear(); //чистим весь вектор
- Product objectStruct;
- ifstream file("out.txt");
- while(!file.eof()) // проходимся до конца файла
- {
- file >> objectStruct; // записываем каждую строку в 1 обьекс структуры
- product.push_back(objectStruct); // добавляем этот обьект в вектор структур
- }
- product.erase(product.end()); // удаляем последний элемент т.к он копирует предпоследний элемент
- file.close();
- return product.size();
- }
- int main(int argc, char const *argv[])
- {
- bool mode = true;
- int answer;
- vector<Product> product;
- int size = update(product);
- Product objectStruct; //создаем 1 обьект структуры
- while (mode)
- {
- cout << "\n\n\nМеню:\n";
- cout << "1. Создать файл с заданной структурой записи.\n";
- cout << "2. Выдать на экран содержимое файла.\n";
- cout << "3. Выдать на экран наименования товаров, проданных полностью в виде:\n — наименование товара;\n — количество проданных штук.\n";
- cout << "4. Сформировать файл, содержащий наименование товара и общую стоимость проданного товара.\n";
- cout << "5. Вновь сформированный файл распечатать.\n";
- cout << "6. Добавить запись в исходный файл.\n";
- cout << "7. Удалить все записи товаров, проданных полностью.\n";
- cout << "8. Корректировка файла: для заданного наименования товара изменить количество штук (продано, осталось).\n";
- cout << "9. Выход\n";
- cout << "Выберите вариант: ";
- cin >> answer;
- switch(answer)
- {
- case 1:
- {
- cout << "Количество новых записей - ";
- cin >> answer;
- NewStruct(answer);
- break;
- }
- case 2:
- {
- update(product);
- cout << "Содержимое файла >\n";
- for (auto i : product)
- cout << i << endl;
- break;
- }
- case 3:
- {
- for(auto i : product)
- {
- if (i.remains == 0)
- {
- cout << " Наименование товара - " << i.name;
- cout << " Количество проданных штук - " << i.sale << endl;
- }
- }
- break;
- }
- case 4:
- {
- ofstream file("out2.txt");
- for (auto i : product)
- {
- file << i.name << ' ';
- file << i.cost * i.sale << endl;
- }
- file.close();
- cout << "Готово. Откройте файл out2.txt";
- break;
- }
- case 5:
- {
- cout << "Содержимое файла >\n";
- ifstream file("out2.txt");
- for (int i = 0; i < product.size(); i++)
- {
- file >> objectStruct.name;
- file >> objectStruct.cost;
- cout << objectStruct.name << " " << objectStruct.cost << endl;
- }
- file.close();
- break;
- }
- case 6:
- {
- cin >> objectStruct;
- ofstream file("out.txt", ios_base::app); //открываем файл в режиме добавления
- file << objectStruct << endl;
- file.close();
- break;
- }
- case 7:
- {
- size = update(product);
- for (int i = 0; i < size; ++i)
- {
- if (product[i].remains == 0)
- {
- product.erase(product.begin() + i); // удаление обьекта[0 + i]
- size = product.size(); // обновляем размер
- cout << "Готово";
- }
- }
- WriteInFile(product, product.size());
- break;
- }
- case 8:
- {
- string name_product;
- cout << "Название товара - ";
- cin >> name_product;
- int remains_product;
- cout << "Остаток товара - ";
- cin >> remains_product;
- int sale_product;
- cout << "Проданных товаров - ";
- cin >> sale_product;
- if (remains_product < 0 || sale_product < 0)
- break;
- size = update(product);
- for (int i = 0; i < size; ++i)
- {
- if (product[i].name == name_product)
- {
- product[i].remains = remains_product;
- product[i].sale = sale_product;
- }
- }
- WriteInFile(product, size);
- break;
- }
- case 9:
- {
- mode = false;
- cout << "Выходим.\n";
- break;
- }
- default:
- {
- cout << "Ошибка\n";
- mode = false;
- }
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement