Advertisement
vasylmartyniv

C2S1-Nadin-1

Dec 17th, 2019
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.56 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. #include <fstream>
  5. #include <cstring>
  6.  
  7. using namespace std;
  8.  
  9. struct Poshta { //Створюю шаблон для видання
  10.     string index;
  11.     string name;
  12.     int price;
  13.     int amount;
  14.  
  15.     friend istream &operator>>(istream &input, Poshta &address); //Заміняю звичайний спосіб заповнення структури своїм
  16. };
  17.  
  18. istream &operator>>(istream &input, Poshta &x) //Створюю свій спосіб наповнення структури для спрощення вводу з файлу
  19. {
  20.     input >> x.index;
  21.     input >> x.name;
  22.     input >> x.price;
  23.     input >> x.amount;
  24.     return input;
  25. }
  26.  
  27. vector<Poshta> arr; //Роблю масив структур для видань
  28.  
  29. void printeach(int mode) {                            //Функція виводу списку видань
  30.     vector<Poshta> bigamount; //Роблю окремий масив видань з великою кількістю студентів
  31.     for (Poshta x : arr) { //Проходжусь по загальному списку видань
  32.         if (x.amount >= 50) { //Якщо в видання кількість більше ніж 50 то засовую його в масив великих видань
  33.             bigamount.push_back(x);
  34.         }
  35.         cout << "----------------------------" << endl; //Виводжу дані видань
  36.         cout << "Index: " << x.index << endl;
  37.         cout << "Nazva vidannya: " << x.name << endl;
  38.         cout << "Cina vidannya: " << x.price << endl;
  39.         cout << "Kilkist`: " << x.amount << endl;
  40.     }
  41.     if(mode == 1){
  42.     string name;
  43.     int choice;
  44.     cout << "Vi hochete shukaty po imeni? (1=tak/0=ni): ";
  45.     cin >> choice;
  46.     if (choice==1) {
  47.         cout << "Vvedit imya:";
  48.         cin >> name;
  49.         bool flag=false;
  50.         for (int i = 0; i < arr.size(); i++) {
  51.             if (arr[i].name==name) {
  52.                 if(arr[i].amount>50){
  53.                     cout << "----------------------------" << endl; //Виводжу дані видань
  54.                     cout << "Index: " << arr[i].index << endl;
  55.                     cout << "Nazva vidannya: " << arr[i].name << endl;
  56.                     cout << "Cina vidannya: " << arr[i].price << endl;
  57.                     cout << "Kilkist`: " << arr[i].amount << endl;
  58.                     flag=true;
  59.                 }
  60.             }
  61.         }
  62.         if (!flag) cout << "Takykh nemae!" << endl;
  63.     }
  64. }
  65. }
  66.  
  67. void add_vidannya(){                    //Функція додавання видання
  68.     Poshta newbie; //Створюєм змінну видання в яку записуєм його дані
  69.     cout << "-----Nove Vidannya-----" << endl;
  70.     cout << "Index viddilenya:";
  71.     cin >> newbie.index;
  72.     cout << "Nazva vidannya:";
  73.     cin >> newbie.name;
  74.     cout << "Cina vidannya:";
  75.     cin >> newbie.price;
  76.     cout << "Kilkist`:";
  77.     cin >> newbie.amount;
  78.     arr.push_back(newbie); //Запихаємо видання в загальний список
  79. }
  80.  
  81. bool sortbyname(const Poshta &a, const Poshta &b) //Функція сортування видань за Іменем
  82. {
  83.     bool flag;
  84.     vector<string> c = {a.name, b.name}; //Для простоти запихаю в новий масив імена двох видань
  85.     sort(c.begin(), c.end());             //Сортую цей масив
  86.     flag = c[0] !=
  87.            b.name;                 //В залежності від того який елемент на першому місці визначаю чи міняти їх місцями
  88.     return flag;
  89. }
  90.  
  91. bool sortbykilk(const Poshta &a, const Poshta &b) //Функція сортування за кількістю
  92. {
  93.     bool flag;
  94.     flag = a.amount > b.amount; //Порівнюю кількість в двох видань і визначаю чи міняти їх місцями
  95.     return flag;
  96. }
  97.  
  98.  
  99.  
  100. void add_from_file() //Функція загрузки з файла
  101. {
  102.     Poshta record;                    //Роблю тимчасову змінну для видання
  103.     ifstream data_file("file.txt"); //Відкриваю файл з якого зчитувати
  104.     while (data_file >> record) {                           //Кожну стрічку в файлі переводжу в тимчасову змінну видання
  105.         arr.push_back(record); //Засовую тимчасову змінну в загальний список видань
  106.     }
  107.     data_file.close(); //Закриваю файл
  108. }
  109.  
  110. void save_to_file() {                              //Функція збереження в файл
  111.     ofstream out("file.txt"); //Відкриваю файл в який записувати
  112.     for (Poshta x : arr) { //Виводжу в файл кожен елемент зі списку видань
  113.         out << x.index << " " << x.name << " " << x.price << " " << x.amount << endl;
  114.     }
  115.     out.close(); //Закриваю файл
  116. }
  117.  
  118. int main() {
  119.     int cycle = 1;
  120.     while (cycle == 1) { //Роблю безкінечний цикл який виводить меню
  121.         int choice = 0;
  122.         cout << "----------------------" << endl;
  123.         cout << "1) Dodaty vidannya" << endl;
  124.         cout << "2) Sortuvaty po imeni" << endl;
  125.         cout << "3) Sortuvaty po kilkosti" << endl;
  126.         cout << "4) Nadrukuvaty vidannya" << endl;
  127.         cout << "5) Dodaty z failu" << endl;
  128.         cout << "6) Zberegty v fail" << endl;
  129.         cout << "0) Exit" << endl;
  130.         cout << "Vash vybir:";
  131.         cin >> choice; //Зчитую вибір пункту меню
  132.         switch (choice) { //В залежності від вибору викликаю відповідну функцію
  133.             case 0:
  134.                 cycle = 0;
  135.                 break;
  136.             case 1:
  137.                 add_vidannya();
  138.                 break;
  139.             case 2:
  140.                 sort(arr.begin(), arr.end(), sortbyname);
  141.                 printeach(0);
  142.                 break;
  143.             case 3:
  144.                 sort(arr.begin(), arr.end(), sortbykilk);
  145.                 printeach(0);
  146.                 break;
  147.             case 4:
  148.                 printeach(1);
  149.                 break;
  150.             case 5:
  151.                 add_from_file();
  152.                 break;
  153.             case 6:
  154.                 save_to_file();
  155.                 break;
  156.             default:
  157.                 cycle = 0;
  158.                 break;
  159.         }
  160.     }
  161.     return 0;
  162. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement