Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <algorithm>
- #include <fstream>
- #include <cstring>
- using namespace std;
- struct Poshta { //Створюю шаблон для видання
- string index;
- string name;
- int price;
- int amount;
- friend istream &operator>>(istream &input, Poshta &address); //Заміняю звичайний спосіб заповнення структури своїм
- };
- istream &operator>>(istream &input, Poshta &x) //Створюю свій спосіб наповнення структури для спрощення вводу з файлу
- {
- input >> x.index;
- input >> x.name;
- input >> x.price;
- input >> x.amount;
- return input;
- }
- vector<Poshta> arr; //Роблю масив структур для видань
- void printeach(int mode) { //Функція виводу списку видань
- vector<Poshta> bigamount; //Роблю окремий масив видань з великою кількістю студентів
- for (Poshta x : arr) { //Проходжусь по загальному списку видань
- if (x.amount >= 50) { //Якщо в видання кількість більше ніж 50 то засовую його в масив великих видань
- bigamount.push_back(x);
- }
- cout << "----------------------------" << endl; //Виводжу дані видань
- cout << "Index: " << x.index << endl;
- cout << "Nazva vidannya: " << x.name << endl;
- cout << "Cina vidannya: " << x.price << endl;
- cout << "Kilkist`: " << x.amount << endl;
- }
- if(mode == 1){
- string name;
- int choice;
- cout << "Vi hochete shukaty po imeni? (1=tak/0=ni): ";
- cin >> choice;
- if (choice==1) {
- cout << "Vvedit imya:";
- cin >> name;
- bool flag=false;
- for (int i = 0; i < arr.size(); i++) {
- if (arr[i].name==name) {
- if(arr[i].amount>50){
- cout << "----------------------------" << endl; //Виводжу дані видань
- cout << "Index: " << arr[i].index << endl;
- cout << "Nazva vidannya: " << arr[i].name << endl;
- cout << "Cina vidannya: " << arr[i].price << endl;
- cout << "Kilkist`: " << arr[i].amount << endl;
- flag=true;
- }
- }
- }
- if (!flag) cout << "Takykh nemae!" << endl;
- }
- }
- }
- void add_vidannya(){ //Функція додавання видання
- Poshta newbie; //Створюєм змінну видання в яку записуєм його дані
- cout << "-----Nove Vidannya-----" << endl;
- cout << "Index viddilenya:";
- cin >> newbie.index;
- cout << "Nazva vidannya:";
- cin >> newbie.name;
- cout << "Cina vidannya:";
- cin >> newbie.price;
- cout << "Kilkist`:";
- cin >> newbie.amount;
- arr.push_back(newbie); //Запихаємо видання в загальний список
- }
- bool sortbyname(const Poshta &a, const Poshta &b) //Функція сортування видань за Іменем
- {
- bool flag;
- vector<string> c = {a.name, b.name}; //Для простоти запихаю в новий масив імена двох видань
- sort(c.begin(), c.end()); //Сортую цей масив
- flag = c[0] !=
- b.name; //В залежності від того який елемент на першому місці визначаю чи міняти їх місцями
- return flag;
- }
- bool sortbykilk(const Poshta &a, const Poshta &b) //Функція сортування за кількістю
- {
- bool flag;
- flag = a.amount > b.amount; //Порівнюю кількість в двох видань і визначаю чи міняти їх місцями
- return flag;
- }
- void add_from_file() //Функція загрузки з файла
- {
- Poshta 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 (Poshta x : arr) { //Виводжу в файл кожен елемент зі списку видань
- out << x.index << " " << x.name << " " << x.price << " " << x.amount << endl;
- }
- out.close(); //Закриваю файл
- }
- int main() {
- int cycle = 1;
- while (cycle == 1) { //Роблю безкінечний цикл який виводить меню
- int choice = 0;
- cout << "----------------------" << endl;
- cout << "1) Dodaty vidannya" << endl;
- cout << "2) Sortuvaty po imeni" << endl;
- cout << "3) Sortuvaty po kilkosti" << endl;
- cout << "4) Nadrukuvaty vidannya" << endl;
- cout << "5) Dodaty z failu" << endl;
- cout << "6) Zberegty v fail" << endl;
- cout << "0) Exit" << endl;
- cout << "Vash vybir:";
- cin >> choice; //Зчитую вибір пункту меню
- switch (choice) { //В залежності від вибору викликаю відповідну функцію
- case 0:
- cycle = 0;
- break;
- case 1:
- add_vidannya();
- break;
- case 2:
- sort(arr.begin(), arr.end(), sortbyname);
- printeach(0);
- break;
- case 3:
- sort(arr.begin(), arr.end(), sortbykilk);
- printeach(0);
- break;
- case 4:
- printeach(1);
- 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