Lástima que el trabajo sea en C++, porqué sé muy poco de ese lenguaje, pero aquí te enseño un código en C el cuál tienes los datos separados de la lógica, una función menú genérica y un main limpio.
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
/* Estas tablas facilitan los posteriores cambios en las opciones */
/* En las opciones de menú poner siempre al final un NULL, ya que
* es lo que espera la función para trabajar con estos argumentos.
*/
const char *fabricantes[] = {"Microsoft", "Apple", "Linux", NULL};
const char *productos[] = {"Sistema operativo", "Lenguaje de programación", NULL};
const char *dispositivo[] = {"Celulares", "Tablas", "Otros", NULL};
const int precios_microsoft[] = {
/* Sistema operativo */ 1500,
/* Lenguaje de Programación */
/* Celulares */ 1800,
/* Tablas */ 1200,
/* Otros */ 900};
const int precios_apple[] = {
/* Sistema operativo */ 2500,
/* Lenguaje de Programación */
/* Celulares */ 1900,
/* Tablas */ 1800,
/* Otros */ 1600};
const int precios_linux[] = {
/* Sistema operativo */ 1000,
/* Lenguaje de Programación */
/* Celulares */ 100,
/* Tablas */ 150,
/* Otros */ 50};
int menu(const char *titulo, const char *empresa, const char **opciones) {
int i = 0;
int respuesta;
do {
/* Imprimiendo el título del menú */
if(empresa)
/* Imprimiendo opciones del menú */
while(opciones[i] != NULL) {
printf(" %2i. %s\n", i
+ 1, opciones
[i
]); ++i;
}
--i;
/* Adquiriendo la opción deseada */
/* Control de errores de la entrada por teclado */
respuesta -= '0' + 1;
else
respuesta = -1;
if(respuesta > i)
respuesta = -1;
if(respuesta == -1) {
i = 0;
printf("*** OPCION INCORRECTA ***\n"); }
} while(respuesta == -1);
/* Un poco bonito, que también puede formar parte del menú... */
/* Devuelvo la opción elegida */
return respuesta;
}
int main() {
int respuesta;
const char *fabricante;
const int *lista_de_precios;
respuesta = menu("Elija fabricante", NULL, fabricantes);
fabricante = fabricantes[respuesta];
switch(respuesta) {
case 0:
lista_de_precios = precios_microsoft;
break;
case 1:
lista_de_precios = precios_apple;
break;
case 2:
lista_de_precios = precios_linux;
break;
}
respuesta = menu("Elija el producto de", fabricante, productos);
if(respuesta == 1)
respuesta = menu("Elija el dispositivo de", fabricante, dispositivo) + 1;
printf("El precio del producto es: %i", lista_de_precios
[respuesta
]);
return 0;
}