Классы и список С++

идея программы следующая : поучать скидки по товару, либо же от статуса покупателя , либо же от дня покупки. Так вот, получается, что объект в список добавляется определенный. (после того, как пользователь ввел свои данные) и выводится полностью. Подскажите, пожалуйста, как мне сделать так, чтобы если пользователь уже есть в списке (чтобы это проверялось по номеру телефона), то достать его фио, номер, список покупок, возраст и скидку и записать заново? Только чтобы это было в классе. Если можно, то как-нибудь с помощью переопределения операций.

#include <string>
#include <iostream>
#include <clocale>
#include <windows.h>
 
 
using namespace std;
 
 
 
 
class Magazine {
    private:
        string name = "";
        string buy_tovars = "";
    public:
        Magazine(string name) {
            this->name = name;
        }
        string GetNameMagazine() {
            return name;
        }
        string GetSpisokTovarov() {
            return tovars.GetTovars();
        }
        void GetSpisokSale() {
            cout << "Скидки разпростанены на следующие товары:" << endl
                << sale1.GetTovars() << " = " << sale1.GetSale() << "%" << endl
                << sale2.GetTovars() << " = " << sale2.GetSale() << "%" << endl;
        }
        int SkidkaForTovar(string tovar){
            tovar = tovar.substr(0, tovar.size() - 1);
            if ((sale1.GetTovars()).find(tovar) != string::npos)
                return sale1.GetSale();
            else if ((sale2.GetTovars()).find(tovar) != string::npos)
                return sale2.GetSale();
            else return 0;
        }
        string TovarAndSkidka(int skidka, string tovar) {
            string s = to_string(skidka);
            if (tovar != ".") {
                buy_tovars += tovar + " = " + s +"%"+ ",";
            }
            if (tovar == ".") {
                return buy_tovars.substr(0, buy_tovars.size() - 1);
            }
            return "";
        }
        private:
            class Tovar {
                
                float sale = 0;
                string spisok_tovarov = "";
                public:
                    Tovar(float sale, string spisok_tovarov) {
                        this->sale = sale;
                        this->spisok_tovarov = spisok_tovarov;
                    }
                    Tovar(string spisok_tovarov) {
                        this->spisok_tovarov = spisok_tovarov;
                    }
                    string GetTovars() {
                        return spisok_tovarov;
                    }
                    float GetSale() {
                        return sale;
                    }
            };
            Tovar tovars = {"шоколад, хлеб, молоко, сыр, масло"};
            Tovar sale1 = { 10, "сыр, масло" };
            Tovar sale2 = { 5, "шоколад, молоко"};
 
};
 
 
 
class Person {
    private:
        string fio;
        string number;
        string day_buy;
        int year_birth;
        int sale;
    public:
        Person(string fio, string number, string day_buy, int year_birth, int sale) {
            this->fio = fio;
            this->number = number;
            this->day_buy = day_buy;
            this->year_birth = year_birth;
            this->sale = sale;
        };
        Person(string fio, string number, int year_birth) {
            this->fio = fio;
            this->number = number;
            this->day_buy = day_buy;
            this->year_birth = year_birth;
            this->sale = sale;
        };
        Person(string fio, string number, string day_buy) {
            this->fio = fio;
            this->number = number;
            this->day_buy = day_buy;
            this->year_birth = year_birth;
            this->sale = sale;
        };
        virtual void print() = 0;
 
};
 
class Pensioner:public Person {
private:
    string fio;
    string number;
    int year_birth;
    int sale;
    string buy_tovars;
public:
    Pensioner(string fio, string number, int year_birth, string buy_tovars): Person(fio, number, year_birth) {
        this->fio = fio;
        this->number = number;
        this->year_birth = year_birth;
        this->sale = 10;
        this->buy_tovars = buy_tovars;
    }
 
    bool isPensioner() {
        if (year_birth >= 65)
            return true;
        return false;
    }
 
    int Sale() {
        return this->sale;
    }
    void print() {
        cout << "Пенсионер | " <<Sale() <<"%"<< endl;
        cout << fio << "| #: " << number << "| Возраст: " << year_birth << endl;
        cout << "Купленные товары со следующими скидками: " << buy_tovars << endl;
    }
 
 
};
 
class Holyday :public Person {
private:
    string fio;
    string number;
    string day_buy;
    int sale;
    string buy_tovars;
public:
    Holyday(string fio, string number, string day_buy, string buy_tovars) : Person(fio, number, day_buy) {
        this->fio = fio;
        this->number = number;
        this->day_buy = day_buy;
        this->sale = 5;
        this->buy_tovars = buy_tovars;
 
    }
 
    bool isHolyday() {
        const int N = 4;
        string arr[N] = { "23.02", "09.05", "01.01", "08.03" };
        for (int i = 0; i < N; i++)
        {
            if (arr[i] == day_buy) {
                return true;
                break;
            }
            else return false;
        }
    }
    int Sale() {
        return this->sale;
    }
 
    void print() {
        cout << "В праздничный день | " << Sale() << "%" << endl;
        cout << fio << "| #: " << number << "| День покупки: " << day_buy << endl;
        cout << "Купленные товары со следующими скидками: " << buy_tovars << endl;
    }
 
};
 
template <class Data> class List {
    class Node {
    public:
        Data d;
        Node* next, * prev;
        Node(Data dat) { d = dat; next = 0; prev = 0; }
    };
    Node* pbeg, * pend;
public:
       List() { pbeg = 0; pend = 0; }
      ~List();
      void add(Data d);
      void print();
};
 
 
template <class Data> List <Data>::~List() {
    if (pbeg != 0) {
        Node* pv = pbeg;
        while (pv) { pv = pv->next; delete pbeg; pbeg = pv; }
    }
};
 
template <class Data> void List <Data>::add(Data d) {
    Node* pv = new Node(d);
    if (pbeg == 0)pbeg = pend = pv;
    else { pv->prev = pend; pend->next = pv; pend = pv; }
}
 
void visual(Person* p)
{
    p->print();
    
}
 
 
template <class Data> void List<Data>::print() {
    Node* pv = pbeg;
    cout << endl << "------------Список покупателей: -----------------"<< endl;
    while (pv) {
        visual(pv->d);
        pv = pv->next;
    }
};
 
 
int main() {
    setlocale(0, "");
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    List <Person*> p1;
    cout << "Здравствуйте, введите название магазина:" << endl;
    string day_m;
    string name;
    int year;
    cin >> name;
    Magazine m(name);
    cout << "Введите сегодняшний день и месяц (например, '05.06')" << endl;
    cin >> day_m;
    cout << "Введите сегодняшний год (например, '2020')" << endl;
    cin >> year;
    //общая скидка:
    int ALLSALE = 0;
    cout << "---------------- Добро пожаловать в магазин: '" << m.GetNameMagazine() << "'----------------" << endl;
    cout << "В наличии имеются следующие товары: " << m.GetSpisokTovarov() << "." << endl;
    m.GetSpisokSale();
    cout << "Выбирайте товар из списка наличия "<<endl;
    string tovar;
    int skidka = 0;
    while (tovar != ".") {
        cout << "Для окончания ввода товара нажмите '.'" << endl;
        cin >> tovar;
                skidka = m.SkidkaForTovar(tovar);
                cout<<m.TovarAndSkidka(skidka, tovar)<<endl;
    }
 
    cout << "Заполните данные чтобы получить скидки:" << endl;
    //---------------------------------
    string fio;
    string number_phone;
    int age;
    getchar();
    cout << "ВВЕДИТЕ ВАШЕ ФИО:" << endl;
    getline(cin, fio);
    cout << "ВВЕДИТЕ ВАШ НОМЕР ТЕЛЕФОНА:" << endl;
    cin>> number_phone;
    cout << "ВВЕДИТЕ ГОД РОЖДЕНИЯ:" << endl;
    cin >> age;
    int vozrast = year - age;
    //---------------------------------
    Holyday* holy = new Holyday(fio, number_phone, day_m, m.TovarAndSkidka(skidka, tovar));
    Pensioner* pens = new Pensioner(fio, number_phone, vozrast, m.TovarAndSkidka(skidka, tovar));
    if (pens->isPensioner()) {
        cout << "Вы пенсионер и ваша скидка составляет: " << pens->Sale() << endl;
        ALLSALE += pens->Sale();
        p1.add(pens);
    }
    if (holy->isHolyday()) {
        cout << "Сегодня праздничный день и ваша скидка составляет: " << holy->Sale() << endl;
        ALLSALE += holy->Sale();
        p1.add(holy);
    }
    p1.print();
    return 0;
}

Ответы (0 шт):