G2A Many GEOs
SHARE
TWEET

basic

Gleb01 Mar 28th, 2020 59 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include<string>
  3. #include<cctype>
  4. #include<fstream>
  5. #include "List.cpp"
  6. using namespace std;
  7. //D:\list.txt
  8. void showInterfaceReadData() {
  9.     cout << "Выберите откуда считывать данные.\n" <<
  10.         "Если хотите считать данные с файла введите 0, если с консоли - 1." << endl;
  11. }
  12.  
  13. string userInput(string message) {
  14.     cout << message << endl;
  15.     string input;
  16.     getline(cin >> ws, input);
  17.     return input;
  18. }
  19.  
  20. bool isChoiceCorrect(string choice) {
  21.     bool flag = true;
  22.     if (choice.length() != 1)
  23.     {
  24.         flag = false;
  25.     }
  26.     if (flag && !isdigit(choice.at(0)))
  27.     {
  28.         flag = false;
  29.     }
  30.     if (flag && choice.at(0) != '0' && choice.at(0) != '1')
  31.     {
  32.         flag = false;
  33.     }
  34.     return flag;
  35. }
  36.  
  37. string requestCorrectInput(string input, string errorMessage, bool(*func)(string data)) {
  38.     while (!func(input))
  39.     {
  40.         cout << errorMessage << endl;
  41.         cin >> input;
  42.     }
  43.     return input;
  44. }
  45.  
  46. void showInterfaceFillList() {
  47.     cout << "Чтобы добавить элемент в список введите add\n" <<
  48.         "Чтобы удалить элемент списка введите remove\n" <<
  49.         "Чтобы узнать колличество всех вхождений элемента введите quantity\n" <<
  50.         "Чтобы увидить список введите print\n" <<
  51.         "Когда закончите работу с редактированием списка введите exit\n";
  52. }
  53.  
  54. bool isIntegerDataCorrect(string data) {
  55.     bool flag = true;
  56.     if (data.length() == 0 || data.length() > 5)
  57.         flag = false;
  58.     int i = 0;
  59.     while (flag && i < data.length()) {
  60.         if (!isdigit(data.at(i)))
  61.             flag = false;
  62.         i++;
  63.     }
  64.     return flag;
  65. }
  66.  
  67. void addItemToList(List<int>& list) {
  68.     string data = userInput("Введите данные которые хотите ввести");
  69.     data = requestCorrectInput(data, "Строка должна содеражть только числа и не превышать длину в 5 символов", isIntegerDataCorrect);
  70.     list.add(stoi(data));
  71. }
  72.  
  73.  
  74. void removeItemToList(List<int>& list) {
  75.     if (!list.isEmpty())
  76.     {
  77.         cout << "Список пуст" << endl;
  78.     }
  79.     else
  80.     {
  81.         string data = userInput("Введите данные которые хотите удалить");
  82.         data = requestCorrectInput(data, "Строка должна содеражть только числа и не превышать длину в 5 символов", isIntegerDataCorrect);
  83.         list.remove(stoi(data));
  84.     }
  85. }
  86.  
  87. bool isCommandCorrect(string command) {
  88.     bool flag = true;
  89.     if (command.length() == 0)
  90.         flag = false;
  91.     if (!(command == "add") && !(command == "remove") && !(command == "quantity") &&
  92.         !(command == "print") && !(command == "exit"))
  93.         flag = false;
  94.     return flag;
  95. }
  96.  
  97. void showNumberOfElementEntries(List<int>& list) {
  98.     string data = userInput("Введите данные колличество которых хотите подсчитать в списке");
  99.     data = requestCorrectInput(data, "Строка должна содеражть только числа и не превышать длину в 5 символов", isIntegerDataCorrect);
  100.     cout << "Колличество данных " << data << " в списке: " << list.countRepeats(stoi(data)) << endl;
  101. }
  102.  
  103. void functional(List<int>& list) {
  104.     bool flag = true;
  105.     while (flag) {
  106.         string command;
  107.         cin >> command;
  108.         command = requestCorrectInput(command,"Такой команды нет", isCommandCorrect);
  109.         if (command == "add")
  110.         {
  111.             addItemToList(list);
  112.         }
  113.         else if (command == "remove")
  114.         {
  115.             removeItemToList(list);
  116.         }
  117.         else if (command == "quantity")
  118.         {
  119.             showNumberOfElementEntries(list);
  120.         }
  121.         else if (command == "print")
  122.         {
  123.             list.printList();
  124.         }
  125.  
  126.         if (command == "exit")
  127.         {
  128.             flag = false;
  129.         }
  130.         else
  131.         {
  132.             showInterfaceFillList();
  133.         }
  134.     }
  135. }
  136.  
  137. void showInterfaceSaveDataToFile() {
  138.     cout << "Хотите сохранить данные в файл?\n" <<
  139.         "Введите 0, если хотите сохранить данные.\n" <<
  140.         "Если не хотите, то введите 1\n";
  141. }
  142.  
  143. ofstream checkPathOfFile(string path) {
  144.     ofstream file;
  145.     file.exceptions(ofstream::badbit | ofstream::failbit);
  146.     try {
  147.         file.open(path);
  148.     }
  149.     catch (exception) {
  150.         path = userInput("Введите путь к файлу");
  151.         file = checkPathOfFile(path);
  152.     }
  153.     return file;
  154. }
  155.  
  156. ifstream openFile(string path) {
  157.     ifstream file;
  158.     file.exceptions(ifstream::badbit | ifstream::failbit);
  159.     try {
  160.         file.open(path);
  161.     }
  162.     catch (exception) {
  163.         path = userInput("Неверный путь, поторите попытку");
  164.         file = openFile(path);
  165.     }
  166.     return file;
  167. }
  168.  
  169. string readFile(ifstream file) {
  170.     string data;
  171.     getline(file, data);
  172.     file.close();
  173.     return data;
  174. }
  175.  
  176. void showListReadFromFile(List<int>& list) {
  177.     cout << "Данные прочитанные с файла" << endl;
  178.     list.printList();
  179. }
  180.  
  181. void fillList(List<int>& list, string data) {
  182.     int count = 0;
  183.     string temp = "";
  184.     for (int i = 0; i < data.length(); i++)
  185.     {
  186.         if (data.at(i) != ' ')
  187.         {
  188.             temp += data.at(i);
  189.         }
  190.         else
  191.         {
  192.             list.add(stoi(temp));
  193.             temp = "";
  194.         }
  195.     }
  196. }
  197.  
  198. List<int> performOnChoice(string choice) {
  199.     if (choice == "1") {
  200.         List<int> list;
  201.         return list;
  202.     }
  203.     else
  204.     {
  205.         string path = userInput("Введите путь к файлу");
  206.         string dataFromFile = readFile(openFile(path));
  207.         List<int> list;
  208.         fillList(list, dataFromFile);
  209.         showListReadFromFile(list);
  210.         return list;
  211.     }
  212. }
  213.  
  214. void saveDataToFileOperation(string choice, List<int>& list) {
  215.     if (choice == "0") {
  216.         string path = userInput("Введите путь к файлу");
  217.         list.writeToFile(checkPathOfFile(path));
  218.     }
  219. }
  220.  
  221. int main()
  222. {
  223.     setlocale(LC_ALL, "ru");
  224.     showInterfaceReadData();
  225.     string choice;
  226.     cin >> choice;
  227.     choice = requestCorrectInput(choice, "Неверный выбор повторите попытку", isChoiceCorrect);
  228.     List<int> list = performOnChoice(choice);
  229.     showInterfaceFillList();
  230.     functional(list);
  231.     showInterfaceSaveDataToFile();
  232.     cin >> choice;
  233.     choice = requestCorrectInput(choice, "Неверный выбор повторите попытку", isChoiceCorrect);
  234.     saveDataToFileOperation(choice, list);
  235.     return 0;
  236. }
RAW Paste Data
Ledger Nano X - The secure hardware wallet
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top