Классы и список С++
идея программы следующая : поучать скидки по товару, либо же от статуса покупателя , либо же от дня покупки. Так вот, получается, что объект в список добавляется определенный. (после того, как пользователь ввел свои данные) и выводится полностью. Подскажите, пожалуйста, как мне сделать так, чтобы если пользователь уже есть в списке (чтобы это проверялось по номеру телефона), то достать его фио, номер, список покупок, возраст и скидку и записать заново? Только чтобы это было в классе. Если можно, то как-нибудь с помощью переопределения операций.
#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;
}