Ayuda con menu de programa

Iniciado por DarkJack, 25 Agosto 2011, 05:56 AM

0 Miembros y 1 Visitante están viendo este tema.

DarkJack

bueno pues me han encargado un menu de conversiones de divisas, he hecho el programa en c, pero debido a que aun no conozco mucho del lenguje siento que hay muchas cosas que se pueden simplificar en mi programa, espero me puedan ayudar, y explicar como puedo mejorarlo :D, muchas gracias
Esta hecho en C, con el compilador Dev C++.



#include <stdio.h>
#include <windows.h>
#define dolar 12.47
#define yen 0.16
#define euro 17.98

int menuPrincipal(void){//muestra el menu
    int retorno, i;
    system("cls");
    printf("\n\n\n\t\t%c", 201);
    for(i = 0; i < 30; i++) {
       printf("%c", 205);
    }
    printf("%c\n", 187);
    printf("\t\t%c", 186);
    printf("    Conversor de divisas      %c\n", 186);
    printf("\t\t%c ============================ %c\n", 186, 186);
    printf("\t\t%c 1.- De dolares a pesos       %c\n", 186, 186);
    printf("\t\t%c 2.- De yens a pesos          %c\n", 186, 186);
    printf("\t\t%c 3.- De Euro a pesos          %c\n", 186, 186);
    printf("\t\t%c 4.- Salir                    %c\n", 186, 186);
    printf("\t\t%c", 200);
    for(i = 0; i < 30; i++) {
       printf("%c", 205);
    }
    printf("%c\n", 188);
    printf("\n\n\t\t  Opcion ---------> ");
    scanf("%d", &retorno);
    return(retorno);
}


int main(int argi, char** argc) {
    float pesos, cant; // definicion de variable flotante
    int i = 0;
    while(i < 4) {
      i = menuPrincipal(); // ejecuta la funcion menu
      switch(i) {
               case 1: { //de dolares a pesos
                    printf("\n\n\t\tCual es la cantidad de pesos a cambiar? -> ");
                    scanf("%f", &pesos);
                    cant = pesos / dolar;
                    printf("\t\tLa cantidad de dolares es: -> %f\n\n\t", cant);   
                    system("PAUSE");
               break;
               }
               case 2: { //de yens a pesos
                    printf("\n\n\t\tCual es la cantidad de pesos a cambiar? -> ");
                    scanf("%f", &pesos);
                    cant = pesos/yen;
                    printf("\t\tLa cantidad de yens es: -> %f\n\n\t", cant); 
                    system("PAUSE");
               break;
               }
               case 3: { //de euro a pesos
                    printf("\n\n\t\tCual es la cantidad de pesos a cambiar? -> ");
                    scanf("%f", &pesos);
                    cant = pesos/euro;
                    printf("\t\tLa cantidad de euros es: -> %.2f\n\n\t", cant);
                    system("pause");
               break;
               }
               default: {
                        printf("Este numero no esta dentro del menu, porfavor elige otro\n\n\t\t");
                        system("pause");
                        break;
                        }
           }
    }
return 0;
}

Alien-Z

Aunque yo programo en C++ lo veo bastante bien para no usar clases o estructuras, lo que si creo es que hay demasiados "printf", puedes usar el mismo para imprimir en pantalla varias cosas en renglones diferentes usando: "\n", asi se simplificaría el programa.

Saludos.

тαптяα


rir3760

El programa se puede reducir bastante.

* Para empezar seria mejor eliminar las llamadas a 'system("pause")' ya que, siendo estrictos, no son parte del programa. Bien se utiliza la característica de "pausa automática" soportada por la mayoría de los IDEs (con excepción de Dev-C++) o bien se ejecuta mediante el interprete de comandos.

* No es necesario colocar llaves después de cada etiqueta y todos los casos, salvo el ultimo, inician con la impresión de la misma cadena (Se puede sacar del "switch").

Con esos mas otros cambios la función principal se puede reducir a:
int main(void)
{
   char *moneda[] = {"dolares", "yens", "euros"};
   float cambio[] = {dolar, yen, euro};
   float pesos;
   int i;
   
   do {
      i = menuPrincipal();
     
      if (i >= 1 && i <= 3){
         printf ("\n\n\t\tCual es la cantidad de pesos a cambiar? -> ");
         scanf ("%f", &pesos);
         printf ("\t\tLa cantidad de %s es: -> %.2f\n\n\t", moneda[i - 1], pesos / cambio[i - 1]);
      }else
         printf ("Este numero no esta dentro del menu, porfavor elige otro\n\n\t\t");
   }while (i < 4);
   
   return 0;
}


También debes decidir donde se debe validar la opción elegida por el usuario (función principal o en el menú).

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language