Во-первых, зачем вы приводите целый исходник сюда. Люди куда быстрее поймут суть, если вы сократите иерархию классов до демонстративного минимума.
Во-вторых, во всех ваших case'ах
Создается временный объект, затем вы зачем-то создаете ещё и временную переменную-указатель и сохраняете его адрес (зачем?). А после запихиваете все это в лист. Объект создается на стеке и при выходе за границы фигурных скобок вызывается деструктор и он перестает существовать, а все его содержимое будет перезаписано любой следующей переменной, размешенной на стеке. Вот код, о котором я говорю:
case 1: {
cout << endl << "Введите модель:";
cin >> model;
cout << endl << "Введите прозводителя:";
cin >> producer;
cout << endl << "Введите цену:";
cin >> price;
cout << endl << "Введите год выхода:";
cin >> year;
Appliances appliances{ model,producer,price,year };
Appliances* pb = &appliances;
catalog.push_back(pb);
break;
}
Вот наглядный пример того что у вас получается.
https://godbolt.org/z/bx5Wbo1bG
Как исправить? Создавайте элемент в куче (new OhMyClass()). А лучше храните в std::list, например, std::unque_ptr