Работа с итераторами, с++

318
14 мая 2018, 15:00

Написать программу учета заявок на обмен квартир и поиска вариантов обмена. Каждая заявка содержит сведения о двух квартирах: требуемой (искомой) и имеющейся. Сведения о каждой квартире содержат: количество комнат, площадь, этаж, район. Программа должна обеспечивать выбор с помощью меню и выполнение одной из следующих функций:

• ввод заявки на обмен;

• поиск в картотеке подходящего варианта: при совпадении требований и предложений по количеству комнат и этажности и различии по показателю «пло-щадь» в пределах 10% выводится соответствующая карточка и удаляется из списка, в противном случае поступившая заявка включается в картотеку;

• вывод всей картотеки.

Для хранения данных картотеки реализовать и использовать контейнерный класс list.

СРАВНЕНИЕ ДАННЫХ ОБ ИМЕЮЩЕЙСЯ КВАРТИРЕ С ДАННЫМИ ОБ ИСКОМОЙ КВАРТИРЕ РАБОТАЕТ НЕ ПРАВИЛЬНО, НЕ ЗНАЮ КАК ИСПРАВИТЬ

for(ConstIterKvartiraList iKvartira = List.begin();iKvartira != List.end();++iKvartira)
{ 
    for(ConstIterKvartiraListI iKvartira=ListI.begin();iKvartira!=ListI.end();++iKvartira)
    { 
        if(kvartira.raion==kvartiraI.raion2 && kvartira.itash== kvartiraI.itash2 && kvartira.kolvokom==kvartiraI.kolvokom2 && kvartira.plosh>(kvartiraI.plosh2)*1.1||kvartira.plosh<(kvartiraI.plosh2)*1.1||kvartira.plosh==kvartiraI.plosh2)
        { 
            cout<<"вариант найден";
        }
    }
} 

на этом участке я пытаюсь сравнить данные из листа с имеющимися квартирами с искомыми, сейчас программа, работает, записывает, выводит информацию, но сравнение не работает, даже если искомая квартира по всем данным похожа на имеющуюся:::::::::::

вроде более менее разобрался с циклом,но все элементы, которые я сравниваю пустые.

for(ConstIterKvartiraList iKvartira = kvartiraList.begin(); iKvartira != kvartiraList.end();++iKvartira){
for(ConstIterKvartiraListI
iKvartiraI=kvartiraListI.begin();iKvartiraI!=kvartiraListI.end();++iKvartiraI){if(kvartira.raion==kvartiraI.raion2 && kvartira.itash==kvartiraI.itash2 && kvartira.kolvokom==kvartiraI.kolvokom2 &&
            kvartira.plosh>(kvartiraI.plosh2)*1.1||kvartira.plosh<(kvartiraI.plosh2)*1.1||kvartira.plosh==kvartiraI.plosh2){
                cout<<"322";
            }}} 
    #include <iostream>
    #include <string>
    #include <list>
    #include <fstream>
    #include<clocale>
    #include<iterator>
    #include <algorithm>
    using namespace std;
    struct Kvartira
    {
         string raion;
         int kolvokom;
         int plosh;
         int itash;
    };
    struct KvartiraI
    {
         string raion2;
         int kolvokom2;
         int plosh2;
         int itash2;
    };
    template<class T> bool operator==( list<Kvartira>& List, list<KvartiraI>& 
    ListI ); template<class T> bool operator!=( list<Kvartira>& List, 
    list<KvartiraI>& ListI );
    typedef list<Kvartira> KvartiraList;
    typedef list<KvartiraI> KvartiraListI;
    typedef list<Kvartira>::const_iterator ConstIterKvartiraList;
    typedef list<KvartiraI>::const_iterator ConstIterKvartiraListI;


    void Print(const KvartiraList& List)
    {
        ifstream file("isk.txt");
        cout<<file.rdbuf();
        cout<<endl;
    }
    char MainMenu()
    {
        system("cls");  
        cout << "меню:" <<endl;
        cout << "\t 1. добавить заявку" << endl;
        cout << "\t 2. напечатать весь list" << endl;
        char item = 0;
        cin >> item;
        return item;
    }
     KvartiraI DataInputI(const KvartiraListI& ListI)
     {
         std::ofstream
        fout("isk.txt",std::ios::app);
        KvartiraI kvartiraI;
        getline(std::cin, kvartiraI.raion2);
        cout << "этаж : ";
        cin >> kvartiraI.itash2;
        cout << "площадь: ";
        cin >> kvartiraI.plosh2;
        cout << "кол-во комнат: ";
        cin >> kvartiraI.kolvokom2;
        fout<<"район ";
        fout<<kvartiraI.raion2;
        fout<<" этаж ";
        fout<<kvartiraI.itash2;
        fout<<" площадь ";
        fout<<kvartiraI.plosh2;
        fout<<" количество комнат ";
        fout<<kvartiraI.kolvokom2;
        fout<<std::endl;
        fout.close();
        return kvartiraI;
     }
    Kvartira DataInput(const KvartiraList& List)// Ввод данных
    {
        std::ofstream
        fout("isk.txt",std::ios::app);
        Kvartira kvartira;
        cout << "район: ";
        cin.ignore();
        getline(std::cin, kvartira.raion);
        cout << "этаж : ";
        cin >> kvartira.itash;
        cout << "площадь: ";
        cin >> kvartira.plosh;
        cout << "кол-во комнат: ";
        cin >> kvartira.kolvokom;
        cout << "район: ";
        cin.ignore();
        fout<<"район ";
        fout<<kvartira.raion;
        fout<<" этаж ";
        fout<<kvartira.itash;
        fout<<" площадь ";
        fout<<kvartira.plosh;
        fout<<" количество комнат ";
        fout<<kvartira.kolvokom<< '\n';
        fout<<std::endl;
        fout.close();
        return kvartira;
    }

void poisk(KvartiraList& List,KvartiraListI& 
             ListI,KvartiraList& 
               kvartiraList,KvartiraListI& kvartiraListI,Kvartira& 
            kvartira,KvartiraI 
             kvartiraI){
                  for(ConstIterKvartiraList iKvartira = List.begin(); 
              iKvartira != 
               List.end();++iKvartira){
             for(ConstIterKvartiraListI 
              iKvartira=ListI.begin();iKvartira!=ListI.end();++iKvartira){
            if(kvartira.raion==kvartiraI.raion2 && kvartira.itash==
            kvartiraI.itash2 && kvartira.kolvokom==kvartiraI.kolvokom2 &&
            kvartira.plosh>(kvartiraI.plosh2)*1.1||kvartira.plosh<
             (kvartiraI.plosh2)*1.1||kvartira.plosh==kvartiraI.plosh2){
                cout<<"вариант найден";
            }
        }}
    fout<<std::endl;
    fout.close();
 };
    int main()
    {
    KvartiraList List;
    KvartiraListI ListI; 
    KvartiraList kvartiraList;
    KvartiraListI kvartiraListI;
    Kvartira kvartira;
    KvartiraI kvartiraI;
        setlocale(LC_ALL, "Russian");
        size_t n = 0;
        char answer = 'y';
        while (answer == 'y')
        {
            switch (MainMenu())
            {
            case '1':
               kvartiraList.push_front(DataInput(kvartiraList));
               kvartiraListI.push_front(DataInputI(kvartiraListI));
                break;
            case '2':
                poisk(List,ListI,kvartiraList,kvartiraListI,kvartira,kvartiraI);
                break;
            case '3':
                Print(kvartiraList);
            default:
                cout << "такого пункта не существует." << endl;
                break;
            }
            cout << "нажмите'y'для возврата в меню\nнажмите другую клавишу,чтобы выйти ";
            cin >> answer;
        }
        return 0;
    }
READ ALSO
fgets c++ подставить значение

fgets c++ подставить значение

исходники firebirdстрока ввода fgets

223
Как вызвать функцию C в программе на C++?

Как вызвать функцию C в программе на C++?

Как вызвать функцию C в программе на C++?

239
как из stack удалить сразу два элемента?

как из stack удалить сразу два элемента?

В данной реализации имеется только функция pop()

234
Как узнать размер двумерного указателя?

Как узнать размер двумерного указателя?

Не могу найти как узнать размер двумерного указателяЯ передаю указатель arrKeyRate

212