Bienvenido

Bienvenido
Disfruta el contenido

sábado, 7 de marzo de 2015

Desarrollo de menus


Desarrolla menús interactivos para tus proyectos de Programación


Antes de empezar les agradezco a todos sus visitas para este joven pero entusiasta blog(apenas dos meses y medio jaja) y espero que sigamos mucho tiempo mas por aca.

Quick Note

Hello, if you visit us from another country press the language button to read this post in the language of your preference. To see the program code go back and press the spanish option again because the translator scrambles it.
 Enjoy... 


Hola que tal el dia de hoy les comparto este código acerca del desarrollo de menús en lenguaje C. Este programa les puede servir para sus proyectos de programación asi como ordenar entre múltiples opciones para que el usuario pueda elegir a su gusto.

El uso de plantillas promueve la reutilizacion de software al mismo tiempo que hace mas rapido el desarrollo de programas.

El programa se compone de 3 partes 
  • Desarrollo de menú
  • Esta es la primera parte del programa en la cual se despliegan las opciones disponibles y se selecciona entre los diversos casos de las opciones que se tienen para el usuario
  • Selección de opciones
  • Le permite al programa elegir entre las opciones que tiene en base a la entrada del usuario. Esta opción se logra por medio de un switch
  • Funciones por opción
  • Divide cada opcion en una función con su tarea especifica. Esta primera función que manda a llamar main su tarea puede dividirse a su vez en otras funciones siguiendo el esquema de diseño modular. 

EJEMPLO DE UNA FUNCION DIVIDIDA POR MEDIO DE DISEÑO MODULAR


Funcionamiento del menu

Al comienzo del programa podemos ver dos variables importantes: opción y salida. La variable opción de tipo int se usa por el switch para la selección de opciones.



Cada opción se encuentra numerada con una enumeracion. La enumeración esta inicializada en uno y a partir de ahi lleva su conteo por cada OPCION_N declarada. 


enum {OPCION_1 = 1, OPCION_2, OPCION_3, OPCION_4 };

La variable salida de tipo char se usa para confirmar la salida del menu por medio de la letra s ya sea mayuscula o minuscula Una operacion tipo OR nos permite validar la opcion sin importar el tipo de letra.

El programa tiene una serie de comentarios sobre sugerencias de donde colocar nuevas partes de codigo incluyendo nuevas definiciones de funciones o declaración de estructuras y enumeraciones para el programa. Las funciones de cada opcion se encuentran sin regresar tipos de datos y son fácilmente modificables de acuerdo a tus necesidades.


Esta plantilla tiene 4 opciones pero puede extenderse a la cantidad de opciones que requiera tu programa facilmente agregando nuevos casos al switch usado para seleccionar las opciones





A continuacion les muestro el codigo tipo plantilla para el desarrollo de menus.

/*Plantilla de menu dinamico  Febrero-2015

Autor: Juan Lopez    

  DESCRIPCION
  Este menu ofrece una platilla basica de menu para poder utilizarse en todo tipo de proyectos que requieran multiples opciones
  
*/

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

#define MAX 100
#define CADENA 30

/* Definicion de estructuras y enumeraciones */
enum {OPCION_1 = 1, OPCION_2, OPCION_3, OPCION_4 };

/* Definicion de funciones*/
void menu_1(void);
void menu_2(void);
void menu_3(void);
void menu_sal(void);

int main() 
{
int opcion;  //avriables de control de menu
char salida;
system("cls");
system("color F9");
char nombreMenu[CADENA], c;  //agregar un nombre al menu
int i = 0;
printf(" Ingresa el nombre de tu programa: ");  
while( ( c= getchar() ) != '\n')
 nombreMenu[i++] = c;
 
nombreMenu[i] = '\0';   //insertar NULL al final de la cadena 
do{//comienzo de la ejecucion del programa
   system("cls");
         printf("\t--Plantilla de menus basica 1.0--\n\n");
         
printf("Nombre: ");
puts(nombreMenu);
                  
         printf("\n\n[ 1 ]- Opcion 1.\n");
         printf("[ 2 ]- Opcion 2.\n");
         printf("[ 3 ]- Opcion 3.\n");
         printf("[ 4 ]- Opcion 4 SALIDA.\n\n");
         
         printf("*Selecciona la opcion que quieres accesar: ");
         scanf("%d", &opcion);
         
         switch(opcion){
          case OPCION_1:
          menu_1();
         
          break;
         
case OPCION_2:
menu_2();
  break;
  
case OPCION_3:
menu_3();
  break;
  
case OPCION_4:
menu_sal();
  break;  
         
}//fin de switch
 
//reinicilializacion de variables tipo contador
 
printf("\n\n¿Desea una nueva opcion(S/N)?: ");
         
         salida = getch();
         salida = tolower(salida);
}while(salida == 's'  || salida == 'S');
system("cls");
    printf("\t--Plantilla de menus basica 1.0--\n\n");
printf("\n\nFin de la ejecucion.");
return 0;
} //fin de main

/*OPCIONES DE MENU ESTAS OPCIONES PUEDEN LLEGAR A LLAMAR A OTRAS FUNCIONES PARA REALIZAR SUS TAREAS 

*/
void menu_1(void)
{
printf("\n\n\t\aOPCION 1 SELECCIONADA: Ingresa Enter para continuar");
getchar();
}//fin de menu_1

void menu_2(void)
{
printf("\n\n\t\aOPCION 2 SELECCIONADA: Ingresa Enter para continuar");
getchar();
}

void menu_3(void)
{
printf("\n\n\t\aOPCION 3 SELECCIONADA: Ingresa Enter para continuar");
getchar();
}

//funcion de salida del menu
void menu_sal(void)
{
char salir;
printf("\n\n\t\aOPCION 4 SELECCIONADA: ");
printf("\n\nConfirmar para salir(S/N): ");      
    salir = getch();
    salir = tolower(salir);
    
    if(salir == 's' ||  salir == 'S')
 exit(EXIT_SUCCESS);  //esta funcion obliga a que se termine el programa Al ser llamado exit mediante EXIT_SUCCESS el valor definido de la puesta en marcha para una terminacion exitosa se regresa al entorno llamador 
    else{//regresar al menu
    printf("\n*.-Ingresa Enter para regresar al programa.");
    getchar();
}      
      

}//FIN DE PROGRAMA


Conclusiones

Espero les sea de utilidad este código para sus proyectos de programación tipo consola. Este código puede migrarse fácilmente al lenguaje de su preferencia ya sea Java o C++ cambiando las funciones ofrecidas por la biblioteca estandar de entrada y salida de C por sus equivalentes de otros lenguajes. Cualquier cosa dejenme un comentario abajo y suerte con sus proyectos.








No hay comentarios:

Publicar un comentario