Advertisement
Ansaid

Курсовая Итоговый Вариант (Работа склада)

Mar 10th, 2019
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 29.15 KB | None | 0 0
  1. /*Программа демонстрирует работу склада, возможности создавать базу и добавлять в неё товар, удалять товар из базы, искать по названию, сортировать по названию, цене, артикулу, кол-ву, вносить изменения в товары, удалять базу, открывать существующую базу и работать с ней*/
  2. #include "pch.h"
  3. #include <iostream>  // библиотека операций ввода / вывода
  4. #include <string>    // библиотека для работы со строками
  5. #include <string.h>  // библиотека для работы со строками
  6. #include <vector>    // библиотека для использования vector'ов
  7. #include <algorithm> // библиотека для использования алгоритма swap
  8. #include <fstream>   // библиотека для использования файловых потоков
  9.  
  10. using namespace std; // пространство имен std
  11.  
  12. int Enter_choice(int diapason); // функция для проверки ввода "выбора"
  13.  
  14. int Enter_number(int diapason); // функция для проверки ввода номера товара
  15.  
  16. string Enter_string(); // функция для проверки ввода названия и артикула товара
  17.  
  18. int Enter_int();       // функция для проверки кол-ва товара
  19.  
  20. float Enter_float();    // функция для проверки цены товара
  21.  
  22. struct product      // структура, описывающая товар
  23. {
  24.     string name;    // название товара
  25.     string artikul; // артикул товара
  26.     float price;    // цена товара
  27.     int volume;     // кол-во товара на складе
  28. };
  29.  
  30. int main()
  31. {
  32.     setlocale(LC_ALL, "Russian"); // дает возможность выводить текст на русском языке
  33.     vector <product> sklad; // "векторный" массив структур(товаров)
  34.     product buffer;    // буфер, через который будем заполнять массив
  35.     string fileName;   // переменная будет хранить названия файлов
  36.     bool flag = false; // индикатор ошибки открытия/записи/чтения файла
  37.     int choice;        // переменная выбора действий интерфейса
  38.  
  39.     cout << "Варианты действий:\n"  // выбор действий
  40.         << "1. Добавить товары заново\n"
  41.         << "2. Хотите открыть существующую базу\n"
  42.         << "Выберете желаемый вариант: ";
  43.     choice = Enter_choice(2);       // ввод варианта через функцию с проверкой
  44.  
  45.     if (choice == 2)  // если хочешь открыть существующую базу
  46.     {
  47.         ifstream fin; // открываем поток считывания с файла
  48.  
  49.         fin.open("Names.txt"); // открываем файл в котором хранятся названия товаров
  50.         if (!fin.is_open())    // если файл не открыт, то его не существует
  51.         {
  52.         emptyFile: // метка от перехода, если файл "Names.txt" пуст
  53.             cout << "\nСуществующей базы данных не найдено!\n" // выводим предупреждение
  54.                 << "1. Добавить товары заново\n"
  55.                 << "2. Закрыть программу\n"
  56.                 << "Выберете желаемый вариант: "; // делаем выбор
  57.             choice = Enter_choice(2); // ввод варианта через функцию с проверкой
  58.  
  59.             if (choice == 1) // если хотим добавить товары заново
  60.                 goto Enter;  // то переходим по метке к "добавлению"
  61.             else             // если хотим закрыть программу
  62.                 return 0;    // то завершаем
  63.         }
  64.         else   // если файл "Names.txt" с названиями товаров открылся
  65.         {    
  66.             while (!fin.eof()) // пока файл имен не закончится
  67.             {
  68.                 getline(fin, buffer.name); // считываем названия товаров/файлов
  69.                 sklad.push_back(buffer);   // добавляем считанное название в новый элемент массива
  70.             }
  71.         }
  72.         fin.close(); // закрываем файл в котором хранятся названия товаров
  73.         // проверка на пустоту файла названий "Names.txt", если файл пуст, то нет базы данных
  74.         if (sklad[0].name == "") // если первое название "пустое", то и файл пуст
  75.         {                                      
  76.             remove("Names.txt"); // удаляем файл названий "Names.txt"
  77.             sklad.erase(sklad.begin()); //удаляем элемент массива который заполнен пустым названием
  78.             goto emptyFile; // переход к части кода "Базы данных не существует"
  79.         }
  80.  
  81.         for (int i = 0; i < sklad.size(); i++) // цикл от первого до последнего товара в массиве товаров
  82.         {
  83.             fin.open(sklad[i].name + ".txt"); // открываем файл с названием считанным из файла
  84.             if (!fin.is_open()) // если файл не открылся
  85.             {
  86.                 flag = true; // установить индикатор "true"
  87.             }
  88.             else // если файл открылся
  89.             {
  90.                 fin >> sklad[i].artikul; // считываем артикул товара
  91.                 fin >> sklad[i].price;   // считываем цену товара
  92.                 fin >> sklad[i].volume;  // считываем кол-во товара
  93.             }
  94.             fin.close(); // закрываем файл с названием считанным из файла
  95.         }
  96.  
  97.         if (flag) // если флаг "true", значит  ошибка
  98.         {
  99.             cout << "\nОшибка считывания данных!\n"; // выводим предупреждение об ошибке
  100.             return 0; // завершить программу
  101.         }
  102.         else // если флаг "false", значит успех
  103.         {
  104.             cout << "\nДанные успешно считались!\n"; // выводим информацию об успехе
  105.  
  106.             /*УДАЛЯЕМ ВСЕ ФАЙЛЫ*/
  107.             if (remove("Names.txt") != 0) // удаляем файл названий "Names.txt"
  108.                 flag = true;              // если файл не удален делаем флаг "true"
  109.  
  110.             for (int i = 0; i < sklad.size(); i++) // цикл по всему массиву товаров
  111.             {
  112.                 fileName = sklad[i].name + ".txt"; // записываем название файла исходя из названия товара
  113.                 char fileName_char[101];                       // преобразование из string в char
  114.                 strcpy_s(fileName_char, fileName.c_str());     // тк remove не работает со string
  115.                 if (remove(fileName_char) != 0)                // удаляем файлы товаров
  116.                     flag = true; // если файл не удален делаем флаг "true"
  117.             }
  118.  
  119.             if (flag) // если флаг "true"
  120.             {
  121.                 cout << "Ошибка!"; // выводим ошибку
  122.                 return 0;          // завершаем программу
  123.             }
  124.         }
  125.     }
  126.  
  127.     if (choice == 1) // если добавляем товары заново
  128.     {
  129.         ifstream fin; // открываем поток считывания
  130.  
  131.         fin.open("Names.txt"); // открываем файл имен
  132.         if (!fin.is_open()) // если файл не открыт, значит его нет
  133.         {
  134.             goto Enter; // тогда переходим к добавлению
  135.         }
  136.         else // если файл открыт
  137.         {
  138.             while (!fin.eof()) // пока файл названий "Names.txt" не закончился
  139.             {
  140.                 getline(fin, buffer.name); // считываем названия в буфер
  141.                 sklad.push_back(buffer);   // добавляем буфер в элемент массива
  142.             }
  143.  
  144.             for (int i = 0; i < sklad.size(); i++) // в цикле по всем товарам удаляем их
  145.             {
  146.                 fileName = sklad[i].name + ".txt";              // записываем название файла исходя из названия товара
  147.                 char fileName_char[101];                        //преобразование из string в char
  148.                 strcpy_s(fileName_char, fileName.c_str());      // тк remove не работает со string
  149.                 remove(fileName_char);                          // удаляем файл
  150.             }
  151.         }
  152.         fin.close(); // закрываем файл имен "Names.txt"
  153.  
  154.         remove("Names.txt");                        // удаляем файл имен "Names.txt"
  155.         for (int i = sklad.size() - 1; i >= 0; i--) // в цикле от последнего до первого товара в массиве
  156.             sklad.erase(sklad.begin() + i);         // удаляем элементы из массива(товары)
  157.     }
  158.  
  159.     /*ВВОД СПИСКА ТОВАРОВ*/
  160.     while (choice == 1) // пока хотим добавить новые товары
  161.     {
  162.     Enter: // метка на ввод данных
  163.         /*Вводим информацию о товаре в буфер*/
  164.         cout << "\nВведите название товара: ";
  165.         cin.ignore(32767, '\n');    // игнорим "Enter" для getline
  166.         buffer.name = Enter_string();
  167.         cout << "Введите артикул товара: ";
  168.         buffer.artikul = Enter_string();
  169.         cout << "Введите цену товара: ";
  170.         buffer.price = Enter_float();
  171.         cout << "Введите количество товара на складе (в шт.): ";
  172.         buffer.volume = Enter_int();
  173.         sklad.push_back(buffer); // добавляем новый элемент массива и записываем в него буфер
  174.  
  175.         cout << "\nХотите добавить новый товар на склад?\n" // добавлять ли товар?
  176.             << "1. Да\n"
  177.             << "2. Нет\n"
  178.             << "Выберете желаемый вариант: ";
  179.         choice = Enter_choice(2); // вводим вариант через функцию с проверкой
  180.     }
  181.  
  182.     /*После ввода*/
  183.     if (choice == 2) // если товары больше не добавляем
  184.     {
  185.         /*ПЕРВИЧНЫЙ ВЫВОД*/
  186.         cout << "\nСписок товаров:" << endl;
  187.         for (int i = 0; i < sklad.size(); i++)
  188.         {
  189.             cout << i + 1 << " товар: " << endl;
  190.             cout << "Название товара: " << sklad[i].name << endl;
  191.             cout << "Артикул товара: " << sklad[i].artikul << endl;
  192.             cout << "Цена товара: " << sklad[i].price << endl;
  193.             cout << "Количество товара на складе (в шт.): " << sklad[i].volume << endl;
  194.             cout << endl;
  195.         }
  196.  
  197.         /*ОПЦИИ*/
  198.     options: // метка на выбор опций
  199.         cout << "\nСписок дальнейших действий:\n" //вывод возможных опций
  200.             << "1. Внести изменения\n"
  201.             << "2. Сортировать товары\n"
  202.             << "3. Добавить товар\n"
  203.             << "4. Удалить товар\n"
  204.             << "5. Поиск товара по названию\n"
  205.             << "6. Cохранить данные и выйти\n"
  206.             << "Выберете желаемый вариант: ";
  207.         choice = Enter_choice(6); // вводим вариант через функцию с проверкой
  208.  
  209.         switch (choice) // выбор опции в зависимости от выбранной
  210.         {
  211.         case 1:
  212.         {
  213.             int *number = new int; // номер товара
  214.             cout << "\nВведите номер товара, в котором хотите произвести изменение: "; // номер товара
  215.             *number = Enter_number(sklad.size()); // вводим номер через функцию с проверкой
  216.  
  217.             cout << "\nВ какой графе хотите сделать изменение?\n" // где делать изменение?
  218.                 << "1. Название товара\n"
  219.                 << "2. Артикул товара\n"
  220.                 << "3. Цена товара\n"
  221.                 << "4. Количество товара на складе (в шт.)\n"
  222.                 << "Введите номер выбранного варианта: ";
  223.             choice = Enter_choice(4); //// вводим вариант через функцию с проверкой
  224.             /*РЕАЛИЗАЦИЯ ИЗМЕНЕНИЯ*/
  225.             switch (choice) // выбор изменения в зависимости от выбранного
  226.             {
  227.             case 1:
  228.             {
  229.                 cout << "\nВведите новое название товара: ";
  230.                 cin.ignore(32767, '\n');    // игнорим "Enter" для getline
  231.                 sklad[*number - 1].name = Enter_string(); // вводим новое название с помощью функции с проверкой
  232.             }
  233.             break;
  234.  
  235.             case 2:
  236.             {
  237.                 cout << "\nВведите новое значение артикула товара: ";
  238.                 cin.ignore(32767, '\n');  // игнорим "Enter" для getline
  239.                 sklad[*number - 1].artikul = Enter_string(); // вводим новый артикул с помощью функции с проверкой
  240.             }
  241.             break;
  242.  
  243.             case 3:
  244.             {
  245.                 cout << "\nВведите новую цену товара: ";
  246.                 sklad[*number - 1].price = Enter_float(); // вводим новую цену с помощью функции с проверкой
  247.             }
  248.             break;
  249.  
  250.             case 4:
  251.             {
  252.                 cout << "\nВведите новое значения кол-ва товара на складе (в шт.): ";
  253.                 sklad[*number - 1].volume = Enter_int(); // вводим новое кол-во товара с помощью функции с проверкой
  254.             }
  255.             break;
  256.  
  257.             default:
  258.                 break;
  259.             }
  260.             delete number;
  261.             /*ВЫВОД ИЗМЕНЕННЫХ ТОВАРОВ*/
  262.             cout << "\nСписок измененных товаров товаров:" << endl;
  263.             for (int i = 0; i < sklad.size(); i++)
  264.             {
  265.                 cout << i + 1 << " товар: " << endl;
  266.                 cout << "Название товара: " << sklad[i].name << endl;
  267.                 cout << "Артикул товара: " << sklad[i].artikul << endl;
  268.                 cout << "Цена товара: " << sklad[i].price << endl;
  269.                 cout << "Количество товара на складе (в шт.): " << sklad[i].volume << endl;
  270.                 cout << endl;
  271.             }
  272.             /*ПРОВЕРКА (продолжить/завершить)*/
  273.             cout << "\nВыберете дальнейшее действие:\n"
  274.                 << "1. Продолжить работу\n"
  275.                 << "2. Cохранить данные и выйти\n"
  276.                 << "Введите номер выбранного варианта: ";
  277.             choice = Enter_choice(2); // вводим вариант через функцию с проверкой
  278.  
  279.             if (choice == 1)  // если продолжить работу
  280.                 goto options; // то переходим к выбору опций
  281.             else              // если выход из программы
  282.                 goto escape;  // то переход к сохранению
  283.         }
  284.         break;
  285.  
  286.         case 2:
  287.         {
  288.             cout << "\nХотите сортировать товар по:\n" // выбор метода сортировки
  289.                 << "1. Названию\n"
  290.                 << "2. Артикулу\n"
  291.                 << "3. Цене\n"
  292.                 << "4. Количеству\n"
  293.                 << "Выберете желаемый вариант: ";
  294.             choice = Enter_choice(4); // вводим вариант через функцию с проверкой
  295.  
  296.             /*РЕАЛИЗАЦИЯ СОРТИРОВКИ (в зависимости от метода)*/
  297.             switch (choice)
  298.             {
  299.             case 1: //сортировка по алфавиту
  300.             {
  301.                 for (int i = 0; i < sklad.size(); i++) {
  302.                     for (int j = 0; j < sklad.size() - i - 1; j++) {
  303.                         if (sklad[j].name.compare(sklad[j + 1].name) > 0) {
  304.                             swap(sklad[j], sklad[j + 1]);
  305.                         }
  306.                     }
  307.                 }
  308.             }
  309.             break;
  310.  
  311.             case 2: //сортировка по артикулу (возрастание)
  312.             {
  313.                 for (int i = 0; i < sklad.size(); i++) {
  314.                     for (int j = 0; j < sklad.size() - i - 1; j++) {
  315.                         if (sklad[j].artikul.compare(sklad[j + 1].artikul) > 0) {
  316.                             swap(sklad[j], sklad[j + 1]);
  317.                         }
  318.                     }
  319.                 }
  320.             }
  321.             break;
  322.  
  323.             case 3: //сортировка по цене (возрастание)
  324.             {
  325.                 for (int i = 0; i < sklad.size(); i++) {
  326.                     for (int j = 0; j < sklad.size() - i - 1; j++) {
  327.                         if (sklad[j].price > sklad[j + 1].price) {
  328.                             swap(sklad[j], sklad[j + 1]);
  329.                         }
  330.                     }
  331.                 }
  332.             }
  333.             break;
  334.  
  335.             case 4: //сортировка по количеству (возрастание)
  336.             {
  337.                 for (int i = 0; i < sklad.size(); i++) {
  338.                     for (int j = 0; j < sklad.size() - i - 1; j++) {
  339.                         if (sklad[j].volume > sklad[j + 1].volume) {
  340.                             swap(sklad[j], sklad[j + 1]);
  341.                         }
  342.                     }
  343.                 }
  344.             }
  345.  
  346.             default:
  347.                 break;
  348.             }
  349.  
  350.             /*ВЫВОД ОТСОРТИРОВАННЫХ ТОВАРОВ*/
  351.             cout << "\nСписок отсортированных товаров:" << endl;
  352.             for (int i = 0; i < sklad.size(); i++)
  353.             {
  354.                 cout << i + 1 << " товар: " << endl;
  355.                 cout << "Название товара: " << sklad[i].name << endl;
  356.                 cout << "Артикул товара: " << sklad[i].artikul << endl;
  357.                 cout << "Цена товара: " << sklad[i].price << endl;
  358.                 cout << "Количество товара на складе (в шт.): " << sklad[i].volume << endl;
  359.                 cout << endl;
  360.             }
  361.             /*ПРОВЕРКА (продолжить/завершить)*/
  362.             cout << "\nВыберете дальнейшее действие:\n"
  363.                 << "1. Продолжить работу\n"
  364.                 << "2. Cохранить данные и выйти\n"
  365.                 << "Введите номер выбранного варианта: ";
  366.             choice = Enter_choice(2); // вводим вариант через функцию с проверкой
  367.  
  368.             if (choice == 1)  // если продолжить работу
  369.                 goto options; // то переходим к выбору опций
  370.             else              // если выход из программы
  371.                 goto escape;  // то переход к сохранению
  372.         }
  373.         break;
  374.  
  375.         case 3: /*ДОБАВЛЕНИЕ ТОВАРА*/
  376.         {
  377.             goto Enter; // переход по метке для добавления товара (в начало)
  378.         }
  379.         break;
  380.  
  381.         case 4: /*УДАЛЕНИЕ ЭЛЕМЕНТА*/
  382.         {
  383.             int *number = new int; // номер товара
  384.             cout << "\nВведите номер товара, который хотите удалить: ";
  385.             *number = Enter_number(sklad.size());     // ввод номера товара через функцию с проверкой
  386.             sklad.erase(sklad.begin() + *number - 1); // удаляем элемент массива с данным номером(номер - 1)
  387.  
  388.             /*ВЫВОД ТОВАРОВ С УЧЕТОМ УДАЛЕНИЯ*/
  389.             cout << "\nНовый список товаров:" << endl;
  390.             for (int i = 0; i < sklad.size(); i++)
  391.             {
  392.                 cout << i + 1 << " товар: " << endl;
  393.                 cout << "Название товара: " << sklad[i].name << endl;
  394.                 cout << "Артикул товара: " << sklad[i].artikul << endl;
  395.                 cout << "Цена товара: " << sklad[i].price << endl;
  396.                 cout << "Количество товара на складе (в шт.): " << sklad[i].volume << endl;
  397.                 cout << endl;
  398.             }
  399.             delete number;
  400.  
  401.             /*ПРОВЕРКА (продолжить/завершить)*/
  402.             cout << "\nВыберете дальнейшее действие:\n"
  403.                 << "1. Продолжить работу\n"
  404.                 << "2. Cохранить данные и выйти\n"
  405.                 << "Введите номер выбранного варианта: ";
  406.             choice = Enter_choice(2); // вводим вариант через функцию с проверкой
  407.  
  408.             if (choice == 1)  // если продолжить работу
  409.                 goto options; // то переходим к выбору опций
  410.             else              // если выход из программы
  411.                 goto escape;  // то переход к сохранению
  412.         }
  413.         break;
  414.  
  415.         case 5:
  416.         {
  417.             /*ПОИСК ПО ИМЕНИ*/
  418.             string search; // будет хранить название искомого товара
  419.             int k = 0;     //счетчик
  420.  
  421.             cout << "\nВведите название товара: ";
  422.             cin.ignore(32767, '\n');    // игнорим "Enter" для getline
  423.             getline(cin, search);       // вводим название искомого товара
  424.             cout << endl;
  425.             for (int i = 0; i < sklad.size(); i++) // в цикле сравниваем введенное название с названиями товаров
  426.             {
  427.                 if (search == sklad[i].name) // если введенное название = названию товара, то выводим его
  428.                 {
  429.                     cout << i + 1 << " товар: " << endl;
  430.                     cout << "Название товара: " << sklad[i].name << endl;
  431.                     cout << "Артикул товара: " << sklad[i].artikul << endl;
  432.                     cout << "Цена товара: " << sklad[i].price << endl;
  433.                     cout << "Количество товара на складе (в шт.): " << sklad[i].volume << endl;
  434.                     cout << endl;
  435.                     k++; // увеличиваем счетчик
  436.                 }
  437.             }
  438.  
  439.             if (k == 0) // если счетчик остался 0, то выводим предупреждение
  440.                 cout << "Товар с данным названием не найден!" << endl;
  441.  
  442.             /*ПРОВЕРКА (продолжить/завершить)*/
  443.             cout << "\nВыберете дальнейшее действие:\n"
  444.                 << "1. Продолжить работу\n"
  445.                 << "2. Cохранить данные и выйти\n"
  446.                 << "Введите номер выбранного варианта: ";
  447.             choice = Enter_choice(2); // вводим вариант через функцию с проверкой
  448.  
  449.             if (choice == 1)  // если продолжить работу
  450.                 goto options; // то переходим к выбору опций
  451.             else              // если выход из программы
  452.                 goto escape;  // то переход к сохранению
  453.  
  454.         }
  455.         break;
  456.  
  457.         case 6:
  458.         {
  459.             /*ВЫХОД ИЗ ПРОГРАММЫ*/ /*ЗАПИСЬ В ФАЙЛ*/
  460.         escape: // метка на сохранение
  461.             ofstream fout; // открываем поток записи в файл
  462.  
  463.             fout.open("Names.txt"); // открываем файл с названиями товаров "Names.txt"
  464.             if (!fout.is_open()) // если файл не открылся
  465.             {
  466.                 flag = true;     // делаем флаг "true"
  467.             }
  468.             else // если файл открылся
  469.             {
  470.                 for (int i = 0; i < sklad.size(); i++) // записываем все названия товаров в него
  471.                 {
  472.                     if (i != sklad.size() - 1) // последний товар записываем без перехода на новую строку
  473.                         fout << sklad[i].name << "\n";
  474.                     else
  475.                         fout << sklad[i].name;
  476.                 }
  477.             }
  478.             fout.close(); // закрываем файл с названиями товаров "Names.txt"
  479.  
  480.             for (int i = 0; i < sklad.size(); i++) // для всех товаров
  481.             {
  482.                 fileName = sklad[i].name + ".txt"; // устанавливаем название файла относительно названию товаров
  483.                 fout.open(fileName); // открываем файл товара
  484.                 if (!fout.is_open()) // если не открылся
  485.                 {
  486.                     flag = true;     // делаем флаг "true"
  487.                 }
  488.                 else // если файл открылся записываем в него
  489.                 {
  490.                     fout << sklad[i].artikul << "\n"; // артикул товара
  491.                     fout << sklad[i].price << "\n";   // цену товара
  492.                     fout << sklad[i].volume << "\n";  // кол-во товара на складе
  493.                 }
  494.                 fout.close(); // закрываем файл товара
  495.             }
  496.  
  497.             if (flag) // если флаг "true" выводим ошибку
  498.             {
  499.                 cout << "\nОшибка сохранения данных!\n";
  500.             }
  501.             else // если флаг "false" выводим успех
  502.             {
  503.                 cout << "\nДанные успешно сохранились!\n";
  504.             }
  505.         }
  506.         break;
  507.  
  508.         default:
  509.             break;
  510.         }
  511.     }
  512. }
  513.  
  514.  
  515. int Enter_choice(int diapason) //функция для проверки ввода "выбора" (передаем кол-во вариантов)
  516. {
  517.     string str;
  518.     diapason += 48; // код значения символа верхней границы диапазона
  519. again:              // метка на повторный ввод
  520.     cin >> str;     // вводим строку
  521.     if ((str[0] < '1' || str[0] > diapason) || str[1] != '\0') // если число не в нужном диапазоне
  522.     {
  523.         cout << "Ошибка ввода!\nВведите число заново: "; // выводим ошибку
  524.         goto again; // метка к повторному вводу
  525.     }
  526.     return stoi(str); // конвертируем Int
  527. }
  528.  
  529. int Enter_number(int diapason) // функция для проверки ввода номера числа (передаем кол-во товаров)
  530. {
  531.     string str;
  532.     int number;
  533. again:          // метка на повторный ввод
  534.     cin >> str; // вводим строку
  535.     for (int i = 0; i < str.length(); i++) // проходим по всей строке
  536.     {
  537.         if (str[i] < '0' || str[i] > '9') // если есть символы не цифр
  538.         {
  539.             cout << "Ошибка ввода!\nВведите число заново: "; // выводим ошибку
  540.             goto again; // метка к повторному вводу
  541.         }
  542.     }
  543.     number = stoi(str); // конвертируем и присваиваем номер в переменную
  544.     if (number < 1 || number > diapason) // если номер не в диапазоне существующих товаров
  545.     {
  546.         cout << "Товара с таким номером нет на складе!\nВведите число заново: "; // выводим ошибку
  547.         goto again; // метка к повторному вводу
  548.     }
  549.     return number;  // возвращаем номер товара
  550. }
  551.  
  552. string Enter_string() // функция для проверки ввода названия и артикула товара
  553. {
  554.     string str;
  555. again: // метка на повторный ввод
  556.     getline(cin, str); // вводим строку
  557.     if (str.length() > 100) // если длина строки больше 100
  558.     {
  559.         cout << "Длина превышает 100 символов, введите заново: "; // выводим ошибку
  560.         goto again; // метка к повторному вводу
  561.     }
  562.     return str; // возвращаем строку
  563. }
  564.  
  565. int Enter_int() // функция для проверки ввода кол-ва товаров на складе
  566. {
  567.     string str;
  568. again: // метка на повторный ввод
  569.     cin >> str; // вводим строку
  570.     for (int i = 0; i < str.length(); i++) // проходим по всей строке
  571.     {
  572.         if (str[i] < '0' || str[i] > '9') // есть символы не цифр
  573.         {
  574.             cout << "Ошибка ввода!\nВведите число заново: "; // выводим ошибку
  575.             goto again; // метка к повторному вводу
  576.         }
  577.     }
  578.     return stoi(str); // конвертируем Int
  579. }
  580.  
  581. float Enter_float() // функция для проверки ввода цены товара
  582. {
  583.     string str;
  584.  
  585. again:              // метка на повторный ввод
  586.     int tochka = 0; // счетчик запятых
  587.     cin >> str;     // вводим строку
  588.  
  589.     if (str[0] == ',') // проверка на 1 символ, если он ','
  590.     {
  591.         cout << "Ошибка ввода!\nВведите число заново: "; // то выводим ошибку
  592.         goto again;    // метка к повторному вводу
  593.     }
  594.  
  595.     for (int i = 0; i < str.length(); i++) // проходим по всей строке
  596.     {
  597.         if ((str[i] < '0' || str[i] > '9') && str[i] != ',') // если число не цифра и не запятая
  598.         {
  599.             cout << "Ошибка ввода!\nВведите число заново: "; // выводим ошибку
  600.             goto again; // метка к повторному вводу
  601.         }
  602.  
  603.         if (str[i] == ',') // счетчик ','(если встретилась ',')
  604.             tochka++;      // увеличиваем счетчик
  605.  
  606.         if (tochka == 2)   // если кол-во запятых = 2
  607.         {
  608.             cout << "Ошибка ввода!\nВведите число заново: "; // выводим ошибку
  609.             goto again;    // метка к повторному вводу
  610.         }
  611.     }
  612.     return stof(str); // конвертируем в float  
  613. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement