constk

MapPractice_Task2

Dec 15th, 2020
714
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4. #include <map>
  5. #include <ctime>
  6. #include <iterator>
  7. #include <algorithm>
  8. #include <windows.h>
  9.  
  10. // Вывод меню на экран
  11. void showHint()
  12. {
  13.     std::cout << "What do you want to do?" << std::endl;
  14.     std::cout << "Press 1 to find someone's number" << std::endl;
  15.     std::cout << "Press 2 to show numbers for peoples in diapason" << std::endl;
  16.     std::cout << "Press 3 to add note" << std::endl;
  17.     std::cout << "Press 4 to delete note" << std::endl;
  18.     std::cout << "Press 5 to output the phone book" << std::endl;
  19.     std::cout << "Press 0 to exit" << std::endl << std::endl;
  20. }
  21.  
  22. // Поиск номера телефона по фио
  23. void find(std::map<std::string, std::string> phoneBook)
  24. {
  25.     std::cout << "Input fio of person, whose number you want to find: " << std::endl;
  26.     std::string fio;
  27.     std::cin.ignore(32767, '\n');
  28.     getline(std::cin, fio);
  29.  
  30.     try
  31.     {
  32.         std::cout << "Number found: " << phoneBook.at(fio) << std::endl << std::endl;
  33.     }
  34.     catch (std::out_of_range & e)
  35.     {
  36.         std::cout << "There is no such person in the book" << std::endl << std::endl;
  37.     }
  38. }
  39.  
  40. // Вывод информации из диапазона имён
  41. void diapason(std::map<std::string, std::string> phoneBook)
  42. {
  43.     std::string fio1, fio2;
  44.     std::cout << "Input fio of first person in diapason: " << std::endl;
  45.     std::cin.ignore(32767, '\n');
  46.     getline(std::cin, fio1);
  47.     std::cout << "Input fio of second person in diapason: " << std::endl;
  48.     getline(std::cin, fio2);
  49.  
  50.     if (fio1 > fio2)
  51.     {
  52.         std::cout << "First fio should be less than second! Try again" << std::endl << std::endl;
  53.         return;
  54.     }
  55.  
  56.     std::map<std::string, std::string>::iterator first, second;
  57.     first = phoneBook.lower_bound(fio1);
  58.     second = phoneBook.upper_bound(fio2);
  59.  
  60.     for (auto i = first; i != second; ++i)
  61.         std::cout << i->first << " - " << i->second << std::endl;
  62.     std::cout << std::endl;
  63. }
  64.  
  65. // Добавление нового элемента
  66. void add(std::map<std::string, std::string> & phoneBook)
  67. {
  68.     std::cout << "Input element you want to add" << std::endl;
  69.     std::string fio, number;
  70.     std::cout << "fio: " << std::endl;
  71.     std::cin.ignore(32767, '\n');
  72.     getline(std::cin, fio);
  73.     std::cout << "number: " << std::endl;
  74.     std::cin >> number;
  75.     phoneBook.insert(phoneBook.end(), std::pair<std::string, std::string>(fio, number));
  76.     std::cout << std::endl;
  77. }
  78.  
  79. // Удалить элемент
  80. void remove(std::map<std::string, std::string> & phoneBook)
  81. {
  82.     std::cout << "Input fio of person, who you want to remove from phone book: " << std::endl;
  83.     std::string fio;
  84.     std::cin.ignore(32767, '\n');
  85.     getline(std::cin, fio);
  86.  
  87.     auto toDelete = phoneBook.find(fio);
  88.     if (toDelete == phoneBook.end())
  89.     {
  90.         std::cout << "Where is no " << fio << " in the phone book" << std::endl << std::endl;
  91.         return;
  92.     }
  93.        
  94.     phoneBook.erase(toDelete);
  95.     std::cout << std::endl;
  96. }
  97.  
  98. // Вывод телефонной книги на экран
  99. void show(std::map<std::string, std::string> phoneBook)
  100. {
  101.     std::cout << "Phone book: " << std::endl;
  102.     for (auto i : phoneBook)
  103.         std::cout << i.first << " - " << i.second << std::endl;
  104.     std::cout << std::endl;
  105. }
  106.  
  107. int main()
  108. {
  109.     using namespace std;
  110.     srand(time(NULL));
  111.  
  112.     // Телефонная книга. ФИО - ключ, номер - элемент.
  113.     map<string, string> phoneBook;
  114.  
  115.     // Открываем файл для чтения
  116.     fstream file("data.txt");
  117.     if (!file)
  118.         throw runtime_error("Can't open file");
  119.  
  120.     // Считываем из файла телефонную книгу
  121.     string number;
  122.     string fio;
  123.     while (file)
  124.     {
  125.         file >> number;
  126.         getline(file, fio);
  127.         if (fio.at(0) == ' ') fio.erase(fio.begin());
  128.         phoneBook.insert(phoneBook.end(), pair<string, string>(fio, number));
  129.     }
  130.    
  131.     // Меню для работы с телефонной книгой
  132.     showHint();
  133.     int choose = -1;
  134.     while (choose)
  135.     {
  136.         cin >> choose;
  137.         cout << endl;
  138.         switch (choose)
  139.         {
  140.         case 1: find(phoneBook); break;
  141.         case 2: diapason(phoneBook); break;
  142.         case 3: add(phoneBook); break;
  143.         case 4: remove(phoneBook); break;
  144.         case 5: show(phoneBook); break;
  145.         }
  146.     }
  147.  
  148.     // Очищаем файл
  149.     file.close();
  150.     file.open("data.txt", std::ios::out);
  151.  
  152.     // Перезаписываем изменения
  153.     for (auto i : phoneBook)
  154.         file << i.second + " " + i.first << endl;
  155.  
  156.     system("pause>nul");
  157.     return 0;
  158. }
RAW Paste Data