Menú de opciones con submenús en C y C++

Menú de opciones con submenús en C y C++

En esta publicación te voy a mostrar un programa que cuenta con un menú de opciones principal con dos opciones, cada una de las cuales te lleva a un submenú. Este programa está escrito en C y C++ y te será muy útil para estudiarlo y poder utilizarlo en tus proyectos de programación.

Se ha dividido todo el programa en varias funciones. Esto nos da muchos beneficios ya que permite partir el programa en subprogramas o módulos, organiza el código y lo hace mucho más reutilizable acortando el tiempo de programación cuando éste se hace cada vez más grande.

En este programa puedes entrar a cada una de las opciones y luego retroceder de tal forma que es fácilmente navegable.

Si necesitas ejemplos de menús sin submenús puedes pasarte por esta entrada: https://algoritmosyalgomas.com/plantilla-de-un-menu-de-opciones-en-lenguaje-ansi-c/

Código fuente en lenguaje C

Código fuente en lenguaje C++

4 plantillas de menú de opciones en lenguaje C

En esta publicación te voy a mostrar algunas plantillas básicas de menús de opciones en lenguaje C los cuales podrás estudiarlos o utilizarlos en tus proyectos de programación. Si deseas ver la publicación sobre menú de opciones en lenguaje C++ lo encuentras en este enlace: https://algoritmosyalgomas.com/plantilla-de-un-menu-de-opciones-en-c/ y en Pseint aquí: 

1. Menú de opciones simple

Comenzamos con la plantilla inicial para el menú de opciones más simple de todos. Este menú consta de un título descriptivo, un conjunto de opciones entre las que no debe faltar la opción para SALIR y por último, la línea en donde se le pide al usuario que ingrese una opción. 

Ejemplo:

Título: Menu de opciones

Opciones:

  • Opcion 1
  • Opcion 2
  • Opcion 3
  • Opcion 4
  • SALIR

Texto: “Ingrese una opcion”. Inmediatamente después de imprimir este texto, se realiza la lectura de lo que el usuario introduzca.

menú de opciones
				
					// Plantilla de un Menú de Opciones

#include <stdio.h>
#include <stdlib.h>

#define TRUE 1
#define FALSE 0

int main()
{
    int opcion;
    char repetir = TRUE;
    
    do {
        system("cls");
        
        // Texto del menú
        printf("\n\nMenu de Opciones\n");
        printf("1. Opcion 1\n");
        printf("2. Opcion 2\n");
        printf("3. Opcion 3\n");
        printf("4. Opcion 4\n");
        printf("0. SALIR\n");
        
        printf("\nIngrese una opcion: ");
        scanf("%d", &opcion);
        
        switch (opcion) {
            case 1:
                printf("Instrucciones de la opcion 1\n");
                system("pause>nul"); // Pausa
                break;
                
            case 2:
                printf("Instrucciones de la opcion 2\n");
                system("pause>nul"); // Pausa
                break;
                
            case 3:
                printf("Instrucciones de la opcion 3\n");
                system("pause>nul"); // Pausa            
                break;
                
            case 4:
                printf("Instrucciones de la opcion 4\n");
                system("pause>nul"); // Pausa                
                break;
            
            case 0:
            	repetir = FALSE;
            	break;
        }        
    } while (repetir);
	 
    return 0;
}
				
			

2. Menú de opciones con operaciones matemáticas

En esta ocasión vamos a poner en práctica la realización de un menú de opciones en donde para cada opción se realice una operación matemática básica (opción 1: sumar, opción 2: restar, opción 3: multiplicar, opción 4: dividir y opción 5: salir).

Para ello contamos con la siguiente estructura:

Título: Menu de opciones

Opciones:

    • Sumar dos números
    • Restart dos números
    • Multiplicar dos números
    • Dividir dos números
    • SALIR

Texto para pedir ingreso por teclado de la opción deseada: “Ingrese una opcion”.

Inmediatamente después de pedir al usuario que ingrese la opción deseada, se realiza la lectura de la opción y se almacena en una variable entera.

En esta plantilla se están usando algunos caracteres especiales para darle una mejor presentación al menú de opciones. Estos caracteres especiales se llaman secuencias de escape y son una combinación del caracter back slash “\” con alguna letra:

\t: Tabulador horizontal

\n: Salto de línea

				
					// Plantilla de un Menú de Opciones

#include <stdio.h>
#include <stdlib.h>

#define TRUE 1
#define FALSE 0

int main()
{
    int opcion;
    char repetir = TRUE;
    
    do {
        system("cls");
        
        // Texto del menú
        printf("\n\n\t\t\tMenu de Opciones\n");
        printf("\t\t\t----------------\n");
        printf("\n\t1. Sumar dos numeros\n");
        printf("\t2. Restar dos numeros\n");
        printf("\t3. Multiplicar dos numeros\n");
        printf("\t4. Dividir dos numeros\n");
        printf("\t0. SALIR\n");
        
        printf("\n\tIngrese una opcion: ");
        scanf("%d", &opcion);
        
        int numero1, numero2;
		float resultado;
        switch (opcion) {
            case 1:
                // Instrucciones para sumar dos números
                printf("\n\tIngrese primer numero: ");
                scanf("%d", &numero1);
                
                printf("\tIngrese segundo numero: ");
                scanf("%d", &numero2);
                
                printf("\t---------------------------\n");
                resultado = numero1 + numero2;
                printf("\tResultado: %f\n", resultado);
                
                system("pause>nul");
                break;
                
            case 2:
                // Instrucciones para restar dos números
                printf("\n\tIngrese primer numero: ");
                scanf("%d", &numero1);
                
                printf("\tIngrese segundo numero: ");
                scanf("%d", &numero2);
                
                printf("\t---------------------------\n");
                resultado = numero1 - numero2;
                printf("\tResultado: %f\n", resultado);
                
                system("pause>nul");
                break;
                
            case 3:
                // Instrucciones para multiplicar dos números
                printf("\n\tIngrese primer numero: ");
                scanf("%d", &numero1);
                
                printf("\tIngrese segundo numero: ");
                scanf("%d", &numero2);
                
                printf("\t---------------------------\n");
                resultado = numero1 * numero2;
                printf("\tResultado: %f\n", resultado);
                
                system("pause>nul");
                break;
                
			case 4:
                // Instrucciones para dividir dos números
                printf("\n\tIngrese primer numero: ");
                scanf("%d", &numero1);
                
                printf("\tIngrese segundo numero: ");
                scanf("%d", &numero2);
                
                printf("\t---------------------------\n");
                
				if (numero2 == 0) {
                	printf("\tResultado: No se puede dividir por cero.\n"); 
				} else {
					resultado = numero1 / (numero2 * 1.0);
					printf("\tResultado: %f\n", resultado);
				}
                
                system("pause>nul");     
                break;
            
            case 0:
            	repetir = FALSE;
            	break;
        }        
    } while (repetir);
	 
    return 0;
}
				
			

3. Menú de opciones con llamadas a funciones

Este ejemplo es un poco más elaborado ya que se empieza a dividir el código total en otros módulos o funciones. La separación en módulos permite separar la lógica entera del programa en subprogramas más pequeños.

				
					// Plantilla de un Menú de Opciones

#include <stdio.h>
#include <stdlib.h>

#define TRUE 1
#define FALSE 0

// Prototipos de las funciones
void sumar();
void restar();
void multiplicar();
void dividir();

int main()
{
    int opcion;
    char repetir = TRUE;

    do
    {
        system("cls");

        // Texto del menú que se verá cada vez
        printf("\n\n\t\t\tMenu de Opciones\n");
        printf("\t\t\t----------------\n");
        printf("\n\t1. Sumar dos numeros\n");
        printf("\t2. Restar dos numeros\n");
        printf("\t3. Multiplicar dos numeros\n");
        printf("\t4. Dividir dos numeros\n");
        printf("\t0. SALIR\n");

        printf("\n\tIngrese una opcion: ");
        scanf("%d", &opcion);

        int numero1, numero2;
        float resultado;
        switch (opcion)
        {
            case 1:
                sumar();
                break;

            case 2:
                restar();
                break;

            case 3:
                multiplicar();
                break;

            case 4:
                dividir();
                break;

            case 0:
                repetir = FALSE;
                break;
        }
    } while (repetir);

    return 0;
}

// Definiciones de las funciones
void sumar()
{
    int numero1, numero2;
    float resultado;

    printf("\n\tIngrese primer numero: ");
    scanf("%d", &numero1);

    printf("\tIngrese segundo numero: ");
    scanf("%d", &numero2);

    printf("\t---------------------------\n");
    resultado = numero1 + numero2;
    printf("\tResultado: %f\n", resultado);

    system("pause>nul");
}

void restar()
{
    int numero1, numero2;
    float resultado;

    printf("\n\tIngrese primer numero: ");
    scanf("%d", &numero1);

    printf("\tIngrese segundo numero: ");
    scanf("%d", &numero2);

    printf("\t---------------------------\n");
    resultado = numero1 - numero2;
    printf("\tResultado: %f\n", resultado);

    system("pause>nul");
}

void multiplicar()
{
    int numero1, numero2;
    float resultado;

    printf("\n\tIngrese primer numero: ");
    scanf("%d", &numero1);

    printf("\tIngrese segundo numero: ");
    scanf("%d", &numero2);

    printf("\t---------------------------\n");
    resultado = numero1 * numero2;
    printf("\tResultado: %f\n", resultado);

    system("pause>nul");
}

void dividir()
{
    int numero1, numero2;
    float resultado;

    printf("\n\tIngrese primer numero: ");
    scanf("%d", &numero1);

    printf("\tIngrese segundo numero: ");
    scanf("%d", &numero2);

    printf("\t---------------------------\n");

    if (numero2 == 0)
    {
        printf("\tResultado: No se puede dividir por cero.\n");
    }
    else
    {
        resultado = numero1 / (numero2 * 1.0);
        printf("\tResultado: %f\n", resultado);
    }

    system("pause>nul");
}
				
			

4. Menú de opciones con submenús usando funciones

Para este ejemplo se utilizan funciones para: el menú principal, los submenus y las operaciones de cada una de las opciones de los menús. Además, se puede ir navegando avanzando y retrocediendo por todas las opciones.

				
					// Plantilla de un Menú de Opciones

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define TRUE 1
#define FALSE 0

// Prototipos de las funciones
void menuPrincipal();
void menuOperacionesBasicas();
void menuOperacionesVariadas();

// Funciones del submenú Operaciones básicas
void sumar();
void restar();
void multiplicar();
void dividir();

// Funciones del submenú Operaciones variadas
void numeroDia();
void sumaPrimerosNumeros();
void factorial();
void invertirNumero4Cifras();

int main()
{
    menuPrincipal();
    return 0;
}

void menuPrincipal()
{
    int opcion;
    char repetir = TRUE;

    do
    {
        system("cls");

        printf("\n\n\t\t\tMENU PRINCIPAL\n");
        printf("\t\t\t--------------\n");
        printf("\n\t1. Operaciones basicas\n");
        printf("\t2. Operaciones variadas\n");
        printf("\t0. SALIR\n");

        printf("\n\tIngrese una opcion: ");
        scanf("%d", &opcion);

        switch (opcion)
        {
        case 1:
            menuOperacionesBasicas();
            break;

        case 2:
            menuOperacionesVariadas();
            break;

        case 0:
            repetir = FALSE;
            break;
        }
    } while (repetir);
}

// Definiciones de las funciones

void menuOperacionesBasicas()
{
    int opcion;
    char repetir = TRUE;

    do
    {
        system("cls");

        printf("\n\n\t\t\tMENU OPERACIONES BASICAS\n");
        printf("\t\t\t------------------------\n");
        printf("\n\t1. Sumar\n");
        printf("\t2. Restar\n");
        printf("\t3. Multiplicar\n");
        printf("\t4. Dividir\n");
        printf("\t0. REGRESAR\n");

        printf("\n\tIngrese una opcion: ");
        scanf("%d", &opcion);

        switch (opcion)
        {
        case 1:
            sumar();
            break;

        case 2:
            restar();
            break;

        case 3:
            multiplicar();
            break;

        case 4:
            dividir();
            break;

        case 0:
            repetir = FALSE;
            break;
        }
    } while (repetir);
}

void menuOperacionesVariadas()
{
    int opcion;
    char repetir = TRUE;

    do
    {
        system("cls");

        printf("\n\n\t\t\tMENU OPERACIONES VARIADAS\n");
        printf("\t\t\t-------------------------\n");
        printf("\n\t1. Numero y dia\n");
        printf("\t2. Suma de los primeros n numeros naturales\n");
        printf("\t3. Factorial de un numero\n");
        printf("\t4. Invertir un numero de 4 cifras\n");
        printf("\t0. REGRESAR\n");

        printf("\n\tIngrese una opcion: ");
        scanf("%d", &opcion);

        switch (opcion)
        {
        case 1:
            numeroDia();
            break;

        case 2:
            sumaPrimerosNumeros();
            break;

        case 3:
            factorial();
            break;

        case 4:
            invertirNumero4Cifras();
            break;

        case 0:
            repetir = FALSE;
            break;
        }
    } while (repetir);
}

void sumar()
{
    system("cls");
    
    int numero1, numero2;
    float resultado;

	printf("\n\tSUMA DE DOS NUMEROS");
    printf("\n\t===================\n");

    printf("\n\tIngrese primer numero: ");
    scanf("%d", &numero1);

    printf("\tIngrese segundo numero: ");
    scanf("%d", &numero2);

    printf("\t---------------------------\n");
    resultado = numero1 + numero2;
    printf("\tResultado: %f\n", resultado);

    system("pause>nul");
}

void restar()
{
    system("cls");
    
    int numero1, numero2;
    float resultado;

    printf("\n\tRESTA DE DOS NUMEROS");
    printf("\n\t====================\n");

    printf("\n\tIngrese primer numero: ");
    scanf("%d", &numero1);

    printf("\tIngrese segundo numero: ");
    scanf("%d", &numero2);

    printf("\t---------------------------\n");
    resultado = numero1 - numero2;
    printf("\tResultado: %f\n", resultado);

    system("pause>nul");
}

void multiplicar()
{
    system("cls");
    
    int numero1, numero2;
    float resultado;

    printf("\n\tPRODUCTO DE DOS NUMEROS");
    printf("\n\t=======================\n");

    printf("\n\tIngrese primer numero: ");
    scanf("%d", &numero1);

    printf("\tIngrese segundo numero: ");
    scanf("%d", &numero2);

    printf("\t---------------------------\n");
    resultado = numero1 * numero2;
    printf("\tResultado: %f\n", resultado);

    system("pause>nul");
}

void dividir()
{
    system("cls");
    
    int numero1, numero2;
    float resultado;

    printf("\n\tCOCIENTE DE DOS NUMEROS");
    printf("\n\t========================\n");

    printf("\n\tIngrese primer numero: ");
    scanf("%d", &numero1);

    printf("\tIngrese segundo numero: ");
    scanf("%d", &numero2);

    printf("\t---------------------------\n");

    if (numero2 == 0)
    {
        printf("\tResultado: No se puede dividir por cero.\n");
    }
    else
    {
        resultado = numero1 / (numero2 * 1.0);
        printf("\tResultado: %f\n", resultado);
    }

    system("pause>nul");
}

void numeroDia()
{
    system("cls");

    printf("\n\tCONVIERTE NUMERO A DIA");
    printf("\n\t======================\n");

    int dia;
    printf("\tIngrese el numero de dia: ");
    scanf("%d", &dia); // 1, 2, 3, 5, 6, 7

    switch (dia) // En caso de que la variable DIA tome el valor:
    {
        case 1:
            printf("\tLunes\n");
            break;

        case 2:
            printf("\tMartes\n");
            break;

        case 3:
            printf("\tMiercoles\n");
            break;

        case 4:
            printf("\tJueves\n");
            break;

        case 5:
            printf("\tViernes\n");
            break;

        case 6:
            printf("\tSabado\n");
            break;

        case 7:
            printf("\tDomingo\n");
            break;
    }

    system("pause>nul");
}

void sumaPrimerosNumeros()
{
    system("cls");

    int n;
    int suma;

    printf("\n\tSUMA DE LOS PRIMEROS N NUMEROS");
    printf("\n\t==============================\n");

    printf("\tIngrese numero n: ");
    scanf("%d", &n);

    suma = n * (n + 1) / 2;

    printf("\tLa suma de los primeros n numeros es = %d\n", suma);

    system("pause>nul");
}

void factorial()
{
    system("cls");

    int numero, i;
    float factorial;

    printf("\n\tFACTORIAL DE UN NUMERO");
    printf("\n\t======================\n");

    printf("\tIngrese el numero: ");
    scanf("%d", &numero);

    factorial = 1;
    for (i = 1; i <= numero; i++)
    {
        factorial = factorial * i;
    }

    printf("\t%d! = %f\n", numero, factorial);

    system("pause>nul");
}

void invertirNumero4Cifras()
{
    system("cls");

    int numero;
    int u, d, c, um;
    int a, b;
    int resultado;

    printf("\n\tINVERTIR NUMERO DE 4 CIFRAS");
    printf("\n\t===========================\n");

    printf("\n\tIngrese un numero de cuatro cifras: ");
    scanf("%d", &numero); // 1234

    um = numero / 1000; // 1
    a = numero / 100;   // 12
    c = a % 10;       // 2
    b = numero / 10;    // 123
    d = b % 10;       // 3
    u = numero % 10;    // 4
    resultado = u * 1000 + d * 100 + c * 10 + um;

    printf("\t%d %d %d %d", u, d, c, um);
    printf("\tEl numero invertido es %d\n", resultado);

    system("pause>nul");
}
				
			

Pueden encontrar las plantillas de menú de opciones en lenguaje C++ en la siguiente entrada: https://algoritmosyalgomas.com/plantilla-de-un-menu-de-opciones-en-c/