Advertisement
vasylmartyniv

C2S1-Nazar-2

Nov 7th, 2019
276
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.27 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. #include <fstream>
  5.  
  6. using namespace std;
  7.  
  8. struct Teacher
  9. { //Створюю шаблон для викладача
  10.     string name;
  11.     string subject;
  12.     string group;
  13.     int students;
  14.     friend istream &operator>>(istream &input, Teacher &address); //Заміняю звичайний спосіб заповнення структури своїм
  15. };
  16.  
  17. istream &operator>>(istream &input, Teacher &x) //Створюю свій спосіб наповнення структури для спрощення ввиду з файлу
  18. {
  19.     input >> x.name;
  20.     input >> x.subject;
  21.     input >> x.group;
  22.     input >> x.students;
  23.     return input;
  24. }
  25.  
  26. vector<Teacher> arr; //Роблю масив шаблонів для викладачів
  27.  
  28. void add_teacher()
  29. {                   //Функція додавання викладача
  30.     Teacher newbie; //Створюєм змінну викладача в яку записуєм його дані
  31.     cout << "-----New Teacher-----" << endl;
  32.     cout << "Name:";
  33.     cin >> newbie.name;
  34.     cout << "Subject:";
  35.     cin >> newbie.subject;
  36.     cout << "Group:";
  37.     cin >> newbie.group;
  38.     cout << "Students:";
  39.     cin >> newbie.students;
  40.     arr.push_back(newbie); //Запихаємо викладача в загальний список
  41. }
  42. bool sortbyname(const Teacher &a, const Teacher &b) //Функція сортування викладачів за Іменем
  43. {
  44.     bool flag;
  45.     vector<string> c = {a.name, b.name}; //Для простоти запихаю в новий масив імена двох викладачів
  46.     sort(c.begin(), c.end());            //Сортую цей масив
  47.     flag = c[0] != b.name;               //В залежності від того який елемент на першому місці визначаю чи міняти їх місцями
  48.     return flag;
  49. }
  50. bool sortbystud(const Teacher &a, const Teacher &b) //Функція сортування за кількістю студентів
  51. {
  52.     bool flag;
  53.     flag = a.students > b.students; //Порівнюю кількість студентів в двох викладачів і визначаю чи міняти їх місцями
  54.     return flag;
  55. }
  56. void printteach()
  57. {                           //Функція виводу списку викладачів
  58.     vector<Teacher> failed; //Роблю окремий масив викладачів з великою кількістю студентів
  59.     vector<Teacher> notfailed;
  60.     for (Teacher x : arr)
  61.     { //Проходжусь по загальному списку викладачів
  62.         if (x.students >= 5)
  63.         { //Якщо в викладача більше ніж 5 студентів то засовую його в список в 48 рядку
  64.             failed.push_back(x);
  65.         }
  66.         else
  67.         {
  68.             notfailed.push_back(x);
  69.         }
  70.         cout << "----------------------------" << endl; //Виводжу дані викладачів
  71.         cout << "Name: " << x.name << endl;
  72.         cout << "Subject: " << x.subject << endl;
  73.         cout << "Group: " << x.group << endl;
  74.         cout << "Students: " << x.students << endl;
  75.     }
  76.     if (!failed.empty())
  77.     {
  78.         cout << "------------------------These teachers have many failed students-------------------------" << endl;
  79.         for (Teacher x : failed)
  80.         { //Проходжу по списку викладачів в яких більше 5 студентів і виводжу їх
  81.             cout << "Name: " << x.name << endl;
  82.             cout << "Subject: " << x.subject << endl;
  83.             cout << "Group: " << x.group << endl;
  84.             cout << "Students: " << x.students << endl;
  85.             cout << "-----------------" << endl;
  86.         }
  87.     }else{
  88.         cout << "------------------------No teachers that have >5 failed students-------------------------" << endl;
  89.     }
  90.  
  91.     if (!notfailed.empty())
  92.     {
  93.         cout << "------------------------These teachers have <5 failed students-------------------------" << endl;
  94.         for (Teacher x : notfailed)
  95.         { //Проходжу по списку викладачів в яких більше 5 студентів і виводжу їх
  96.             cout << "Name: " << x.name << endl;
  97.             cout << "Subject: " << x.subject << endl;
  98.             cout << "Group: " << x.group << endl;
  99.             cout << "Students: " << x.students << endl;
  100.             cout << "-----------------" << endl;
  101.         }
  102.     }
  103. }
  104.  
  105. void add_from_file() //Функція загрузки з файла
  106. {
  107.     Teacher record;                 //Роблю тимчасову змінну для викладача
  108.     ifstream data_file("file.txt"); //Відкриваю файл з якого зчитувати
  109.     while (data_file >> record)
  110.     {                          //Кожну стрічку в файлі переводжу в тимчасову змінну викладача
  111.         arr.push_back(record); //Засовую тимчасову змінну в загальний список викладачів
  112.     }
  113.     data_file.close(); //Закриваю файл
  114. }
  115.  
  116. void save_to_file()
  117. {                             //Функція збереження в файл
  118.     ofstream out("file.txt"); //Відкриваю файл в який записувати
  119.     for (Teacher x : arr)
  120.     { //Виводжу в файл кожен елемент зі списку викладачів
  121.         out << x.name << " " << x.subject << " " << x.group << " " << x.students << endl;
  122.     }
  123.     out.close(); //Закриваю файл
  124. }
  125.  
  126. int main()
  127. {
  128.     int cycle = 1;
  129.     while (cycle == 1)
  130.     { //Роблю безкінечний цикл який виводить меню
  131.         int choice = 0;
  132.         cout << "----------------------" << endl;
  133.         cout << "1) Add Teacher" << endl;
  134.         cout << "2) Sort by name" << endl;
  135.         cout << "3) Sort by students" << endl;
  136.         cout << "4) Show Teachers" << endl;
  137.         cout << "5) Add from file" << endl;
  138.         cout << "6) Save to file" << endl;
  139.         cout << "0) Exit" << endl;
  140.         cout << "Enter your choice:";
  141.         cin >> choice; //Зчитую вибір пункту меню
  142.         switch (choice)
  143.         { //В залежності від вибору викликаю відповідну функцію
  144.         case 0:
  145.             cycle = 0;
  146.             break;
  147.         case 1:
  148.             add_teacher();
  149.             break;
  150.         case 2:
  151.             sort(arr.begin(), arr.end(), sortbyname);
  152.             break;
  153.         case 3:
  154.             sort(arr.begin(), arr.end(), sortbystud);
  155.             break;
  156.         case 4:
  157.             printteach();
  158.             break;
  159.         case 5:
  160.             add_from_file();
  161.             break;
  162.         case 6:
  163.             save_to_file();
  164.             break;
  165.         default:
  166.             cycle = 0;
  167.             break;
  168.         }
  169.     }
  170.     return 0;
  171. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement