Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <algorithm>
- #include <fstream>
- using namespace std;
- struct Teacher
- { //Створюю шаблон для викладача
- string name;
- string subject;
- string group;
- int students;
- friend istream &operator>>(istream &input, Teacher &address); //Заміняю звичайний спосіб заповнення структури своїм
- };
- istream &operator>>(istream &input, Teacher &x) //Створюю свій спосіб наповнення структури для спрощення ввиду з файлу
- {
- input >> x.name;
- input >> x.subject;
- input >> x.group;
- input >> x.students;
- return input;
- }
- vector<Teacher> arr; //Роблю масив шаблонів для викладачів
- void add_teacher()
- { //Функція додавання викладача
- Teacher newbie; //Створюєм змінну викладача в яку записуєм його дані
- cout << "-----New Teacher-----" << endl;
- cout << "Name:";
- cin >> newbie.name;
- cout << "Subject:";
- cin >> newbie.subject;
- cout << "Group:";
- cin >> newbie.group;
- cout << "Students:";
- cin >> newbie.students;
- arr.push_back(newbie); //Запихаємо викладача в загальний список
- }
- bool sortbyname(const Teacher &a, const Teacher &b) //Функція сортування викладачів за Іменем
- {
- bool flag;
- vector<string> c = {a.name, b.name}; //Для простоти запихаю в новий масив імена двох викладачів
- sort(c.begin(), c.end()); //Сортую цей масив
- flag = c[0] != b.name; //В залежності від того який елемент на першому місці визначаю чи міняти їх місцями
- return flag;
- }
- bool sortbystud(const Teacher &a, const Teacher &b) //Функція сортування за кількістю студентів
- {
- bool flag;
- flag = a.students > b.students; //Порівнюю кількість студентів в двох викладачів і визначаю чи міняти їх місцями
- return flag;
- }
- void printteach()
- { //Функція виводу списку викладачів
- vector<Teacher> failed; //Роблю окремий масив викладачів з великою кількістю студентів
- vector<Teacher> notfailed;
- for (Teacher x : arr)
- { //Проходжусь по загальному списку викладачів
- if (x.students >= 5)
- { //Якщо в викладача більше ніж 5 студентів то засовую його в список в 48 рядку
- failed.push_back(x);
- }
- else
- {
- notfailed.push_back(x);
- }
- cout << "----------------------------" << endl; //Виводжу дані викладачів
- cout << "Name: " << x.name << endl;
- cout << "Subject: " << x.subject << endl;
- cout << "Group: " << x.group << endl;
- cout << "Students: " << x.students << endl;
- }
- if (!failed.empty())
- {
- cout << "------------------------These teachers have many failed students-------------------------" << endl;
- for (Teacher x : failed)
- { //Проходжу по списку викладачів в яких більше 5 студентів і виводжу їх
- cout << "Name: " << x.name << endl;
- cout << "Subject: " << x.subject << endl;
- cout << "Group: " << x.group << endl;
- cout << "Students: " << x.students << endl;
- cout << "-----------------" << endl;
- }
- }else{
- cout << "------------------------No teachers that have >5 failed students-------------------------" << endl;
- }
- if (!notfailed.empty())
- {
- cout << "------------------------These teachers have <5 failed students-------------------------" << endl;
- for (Teacher x : notfailed)
- { //Проходжу по списку викладачів в яких більше 5 студентів і виводжу їх
- cout << "Name: " << x.name << endl;
- cout << "Subject: " << x.subject << endl;
- cout << "Group: " << x.group << endl;
- cout << "Students: " << x.students << endl;
- cout << "-----------------" << endl;
- }
- }
- }
- void add_from_file() //Функція загрузки з файла
- {
- Teacher record; //Роблю тимчасову змінну для викладача
- ifstream data_file("file.txt"); //Відкриваю файл з якого зчитувати
- while (data_file >> record)
- { //Кожну стрічку в файлі переводжу в тимчасову змінну викладача
- arr.push_back(record); //Засовую тимчасову змінну в загальний список викладачів
- }
- data_file.close(); //Закриваю файл
- }
- void save_to_file()
- { //Функція збереження в файл
- ofstream out("file.txt"); //Відкриваю файл в який записувати
- for (Teacher x : arr)
- { //Виводжу в файл кожен елемент зі списку викладачів
- out << x.name << " " << x.subject << " " << x.group << " " << x.students << endl;
- }
- out.close(); //Закриваю файл
- }
- int main()
- {
- int cycle = 1;
- while (cycle == 1)
- { //Роблю безкінечний цикл який виводить меню
- int choice = 0;
- cout << "----------------------" << endl;
- cout << "1) Add Teacher" << endl;
- cout << "2) Sort by name" << endl;
- cout << "3) Sort by students" << endl;
- cout << "4) Show Teachers" << endl;
- cout << "5) Add from file" << endl;
- cout << "6) Save to file" << endl;
- cout << "0) Exit" << endl;
- cout << "Enter your choice:";
- cin >> choice; //Зчитую вибір пункту меню
- switch (choice)
- { //В залежності від вибору викликаю відповідну функцію
- case 0:
- cycle = 0;
- break;
- case 1:
- add_teacher();
- break;
- case 2:
- sort(arr.begin(), arr.end(), sortbyname);
- break;
- case 3:
- sort(arr.begin(), arr.end(), sortbystud);
- break;
- case 4:
- printteach();
- break;
- case 5:
- add_from_file();
- break;
- case 6:
- save_to_file();
- break;
- default:
- cycle = 0;
- break;
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement