Во-первых, зачем вы приводите целый исходник сюда. Люди куда быстрее поймут суть, если вы сократите иерархию классов до демонстративного минимума.
Во-вторых, во всех ваших 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