1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Menus em c++

Discussão em 'Programação' iniciada por jakejus1, 24 de Agosto de 2007. (Respostas: 21; Visualizações: 9193)

  1. jakejus1

    jakejus1 Power Member

    Gostaria de criar um menu em c++ numa calculadora em DOS.

    Quero que ao iniciar-se o programa apareça:

    Clique 1 para Somar.
    Clique 2 para subtrair.
    .....
    Clique S para Sair.

    Nao tenho a certeza de como fazer este tipo de menus.

    Agredeço toda a ajuda. Obrigado!
     
  2. arkannis

    arkannis Power Member

    Eu faria isso através de um switch.

    Como ainda tás a começar a aprender, é melhor seres tu a procurares e a fazer a coisa... portanto, dei-te a keyword :P
     
  3. metRo_

    metRo_ Power Member

    Podes fazer como o arkannis disse mas se calhar a tua duvida é antes...
    Se calhar era melhor explicar o que ja sabes...
     
  4. snis

    snis Power Member

    sim.. switch()
    {
    case '1': somar(); break;
    case '2': .....

    }


    algo dest genero.. pesquisa..qq duvida..volta aqui heh

    abraço
     
  5. snis

    snis Power Member

    printf("\n\t\t =================================================");
    printf("\n\n\t\t\t 1 - Editar Cela\n\n");
    printf("\t\t\t 2 - Editar Nome\n\n");
    printf("\t\t\t Esc - Voltar ao Menu Principal\n\n");
    printf("\n\n\t\t Introduza opçao:");
    scanf("%c", &op);
    switch(op)
    {
    case '1': {
    printf("\n\t\t Introduza O Novo Codigo Da Cela: ");
    fflush(stdin);
    gets(FichReclusos[Existe].cela_rec);
    printf("\n\t\t O Codigo Da Cela Foi Alterado\n"); break;
    }
    case '2': {
    printf("\n\t\t Introduza O Novo Nome: ");
    fflush(stdin);
    gets(FichReclusos[Existe].nome_rec);
    printf("\n\t\t O Nome Foi Alterado\n"); break;
    }
    case 27: break;


    iss e um exemplo..em c

    abraço
     
  6. jakejus1

    jakejus1 Power Member

    pelo que um amigo meu me disse posso utilizar os ifs etc..

    Vou experimentar usar a dos switch.

    Obrigado pela ajuda
     
  7. snis

    snis Power Member

    tb da.. mas o switch e mesmo pa iss q queres.. heeh

    no caso do if podes fazer

    printf("introduza opçao");
    scanf("%d",&op);
    if(op==1)
    {
    ......
    }else
    if(op==2)
    ....
     
  8. metRo_

    metRo_ Power Member

    Depois poe tudo dentro de um "while(1){...........}" isto vai fazer com que o programa esteja sempre a correr.
     
  9. snis

    snis Power Member

    eu preferia um do..while

    do
    {
    system("cls");
    printf("\a\n\n\t\t ================ MENU ================\n\n\n\t\t\t");
    printf("1 - Gestao de Reclusos\n\n\t\t\t");
    printf("2 - Gestao de Medicamentos\n\n\t\t\t");
    printf("3 - Gestao de Medicacao\n\n\t\t\t");
    printf("4 - Gestao de Extras\n\n\t\t\t");
    printf("5 - Ficheiros\n\n\t\t\t");
    printf("Esc - Sair\n\n");
    op=sel_op();
    switch (op)
    {
    case '1': MenuGesReclusos(); break;
    case '2': MenuGesMedicamentos(); break;
    case '3': MenuGesMedicacao(); break;
    case '4': MenuGesExtras(); break;
    case '5': MenuFicheiros(); break;
    case 27: Sair(); break;
    }
    }while(op!=27);
     
  10. metRo_

    metRo_ Power Member

    Aqui vai o que queres, esperando eu que já tenhas pesquisado e não tenhas ficado à espera que alguém fizesse:

    Código:
    #include <iostream>
    
    using namespace std;
    
        int soma(){
            int a,b;
            cout << "Introduza os numeros a somar: " << endl;
            cout << "a: " << endl;
            cin >> a;
            cout << "b: " << endl;
            cin >> b;
            cout << "Resultado: " << a+b << endl;
        }
        
        int subtrair(){
            int c,d;
            cout << "Introduza os numeros a subtrair: " << endl;
            cout << "a: " << endl;
            cin >> c;
            cout << "b: " << endl;
            cin >> d;
            cout << "Resultado: " << c-d << endl;
        }
    
    
    int main(){
        
        while(1){
            cout << "===========MENU==========" << endl;
            cout << "1 - Somar" << endl;
            cout << "2 - Subtrair" << endl;
            cout << "3 - SAIR" << endl;
            cout << "Introduza a opção: " << endl;
            int op;
            cin >> op;
            switch(op){
            case 1:
            {
                soma();
                break;
            }
            
            case 2:
            {
                
                subtrair();
                break;
            }
            
            case 3:
            {
             exit(1);    
            }
            
            default:
                {
                  break;
                }
            }
        }
        return 0;
    }
    
    mais explicito que isto é impossivel... claro que agora podes simplificar isto e até podes usar outros metodos como o snis deu nos exemplos dele...
     
  11. OubeLa

    OubeLa Power Member

    E porque não fazeres uma calculadora que recebe 3 inputs: numero1, operador, numero2. Fácil.

    if (op == "+")
    {res = num1 + num2;
    continue;}

    else if (op == "-")
    {res = num1 - num2;
    continue;}


    ..............


    Sendo op do tipo string. num1 e num2 podem ser double, mas também podem ser string se quiseres atribuir mais funções à calculadora, como memorias e coisas assim. Depois tens é de converter string para double.
     
  12. jakejus1

    jakejus1 Power Member

    Agradeço todas as sugestoes mas a que eu percebi foi so a do MetRo_ ! xDD Nao consegui perceber mais nenhuma..lol

    E por acaso nao tinha pesquisado nada..Só tinha ficado com os if!
    É que tou a seguir um livro e para ver se nao me despistava xD

    EDIT: Se tiverem curiosidade a ver o que fiz ( com algumas asneiras) vejam!! :P

    Código:
    #include <iostream.h>
    #include <stdlib.h>
    int soma (int x, int y)
    {
        cout << "Voce esta a somar:" << x << " + " << y << "\n" ;
        return (x+y) ;
    }
    int subtraccao (int x, int y)
    {
        cout << "Voce esta a subtrair:" << x << " - " << y << endl ;
        return (x-y) ;
    }
    int multiplicacao (int x, int y)
    {
        cout << "Voce esta a multiplicar:" << x << " * " << y << endl ;
        return (x*y) ;
    }
    int divisao (int x, int y)
    {
        cout << "Voce esta a dividir:" << x << " / " << y << endl ;
        return (x/y) ;
    }
    int sair (int x, int y)
    {
        cout << "Deseja sair?" "sim" << x << "ou nao" << y << endl;
        return 0;
    }
    int main()
    {
        int x;
        int y;
        int e; // e = escolha
        int c; // c = total
        {
            cout << "Pressione \n 1 para Soma \n 2 para Subtraccao \n 3 para Multiplicacao \n 4 para Divisao \n 5 para Sair \n";
            cin >> e ;
            {
            if (e==1)
            {
                   cout << "Pretende Somar:" ; cin >> x  ; cout << " com " ; cin >> y  ; 
                   c= soma (x,y);
                   cout << "O total e: " << c ; "\n";
     
    system ("PAUSE");    
           }
           if (e==2)
           {
                   cout << "Pretende Subtrair:" ; cin >> x ; cout << " com " ; cin >> y; 
                   c= subtraccao(x,y);
                   cout << "O total e: " << c ; "\n";
     
    system ("PAUSE");
           }
           if (e==3)
           { 
                    cout << "Pretende multiplicar:"; cin >> x ; cout << " com " ; cin >> y;
                    c= multiplicacao (x,y);
                    cout << "O total e:" << c ; "\n";
     
    system ("PAUSE");
           }
           if (e==4)
           {
                    cout << "Pretende dividir:"; cin >> x ; cout << " com " ; cin >> y;
                    c= divisao (x,y);
                    cout << "O total e:" << c; "\n";
     
    system ("PAUSE");
           }
           if (e==5)
           {
                    cout << " Se deseja mesmo sair escreva sim! \n";
                    c= sair (x,y);
                    cout << c; "\n";
    system ("PAUSE");
           }
           if (e==0)
           {
                    cout << " Esta opccao nao existe. \n Por favor escolha outra!" ;
     
    system ("PAUSE");
           }
    }      }} 
    
    O que tava a fazer agora era a parte do sair só que nao me estava a desenrascar nem tou ainda..Vou ver no source code que o metro_ mandou-me! :D
     
    Última edição: 27 de Agosto de 2007
  13. jakejus1

    jakejus1 Power Member

    Ah ja agora que nao disse no 1º post eu quando perguntei aquilo so tinha 2 dias de aprendizagem de um livro xD. Agora tenho 3 ( nao e muito mais mas..) ;)

    Essa parte dos switch e while e só uns capitulos a frente xD

    Obrigado a mesma por tudo :D ( Vou fazer a minha pesquisa daqui a uns capitulos :P)
     
  14. OubeLa

    OubeLa Power Member

    Eu queria dizer fazer qualquer coisa deste tipo

    Código:
    #include <iostream>
    #include <string>
    #include <sstream> // necessário para stringstream
    
    using namespace std;
    
    int main()
    {           
         while (1)
         {
               string num1, num2, op;
               double res, num1int, num2int;
               
               cout << "> ";
               cin >> num1;
               
               stringstream n1(num1);
              n1 >> num1int;
              //neste caso permite usar a string num1 como double num1int
              
              if (num1 == "SAIR")
                   break;
                        
              cin >> op >> num2;
              
              stringstream n2(num2);
              n2 >> num2int;
              
              if (op == "+")
                 res = num1int + num2int;
              
              else if (op == "-")
                      res = num1int - num2int;
    
              else if (op == "*")
                      res = num1int * num2int;
    
              else if (op == "/")
                      res = num1int / num2int;
              
              else
              {
                     cout << "Operador desconhecido" << endl;
                     continue;
               
              }
              
              cout << res << endl;
              
        }
        
        return 0;
    }
    Claro que isto foi feito em cima do joelho, mas acho que da para perceber. Não tem aqueles menus, mas é uma calculadora normal. Poes os operandos e o operador. Só não implementei a parte dos operandos errados, já nao tinha paciencia.

    Nota que eu usei strings. Aproveito para te deixar a ideia de fazeres uma calculadora com memoria, o R para recuperar o valor da memoria, C para limpar o acumulador. Se so quisesses assim podias muito bem usar op como sendo char, num2 como sendo double, etc.

    Aproveito também para perguntar porque é que quando tento colocar isto

    transform (num1.begin(), num1.end(), num1.begin(), toupper);

    ele da um erro "no maching function to call transform". O que eu queria era fazer com que ele internamente substituisse as minusculas por maisculas, de forma a que ao fazer SAIR tanto fizesse escrever "sair" como "SAIR", como "SaIr", etc.
     
    Última edição: 28 de Agosto de 2007
  15. metRo_

    metRo_ Power Member

    Já vi que foi um erro ter feito o programa, mas vou tentar explicar melhor algumas coisas.

    Como criar uma função?
    Primeiro indicas que tipo de dado queres que a função retorne.
    Neste caso é int, depois o nome da função, neste caso soma e depois dentro de () os argumentos,
    neste caso ela vai receber 2 int, o int x e y. Uma função não é obrigada a receber argumentos como vais reparar na função sair.

    Código:
    int soma (int x, int y)//tipo de dados: int;Noma de função: soma;tipo de dados a receber: int x e y;
    {
        cout << "Voce esta a somar:" << x << " + " << y << "\n" ;
        return (x+y) ;
    }
    Código:
    int sair (int x, int y) //Explica-me para quê este (int x, int y)?!
    {
        cout << "Deseja sair?" "sim" << x << "ou nao" << y << endl; // Para quê este x e y aqui no meio?!
        return 0;
    }
    
    Pensa melhor neste bocado de codigo dis-me o que está mal e depois dou-te mais umas pistas para pores isto direito.
    Código:
    if (e==5)
           {
                    cout << " Se deseja mesmo sair escreva sim! \n";
                    c= sair (x,y);
                    cout << c; "\n";
    system ("PAUSE");
           }
    
     
  16. snis

    snis Power Member

    lol, eu agradeço-te por ele :P
     
  17. mj2p

    mj2p I'm Cool Cuz I Fold

    Olha, faz include do ficheiro ctype e usa a função toupper(). Por exemplo:

     
  18. snis

    snis Power Member

    podes fazer

    Código:
    char op
    
    gets(op);
    if(op=='sair' || op=='SAIR')
    {
       sair();
    }
    
    
    
     
  19. OubeLa

    OubeLa Power Member

    Mas se for uma palavra com 10 letras não vou estar a fazer condições para as 10 letras com maisculas e minusculas, nunca mais saio de la. Eu já usei a função transform da maneira que eu disse, mas infelizmente nao consigo usar naquele caso. Mas também não olhei mais para aquilo, nao tive tempo.
     
  20. Está errado. char op não é uma string nem as mesmas se delimitam com plicas(') mas sim com aspas("). Nem sei se o teu código compila!

    Não tenho compilador aqui, mas algo assim deve funcionar:

    char op[10] = {0};

    gets(op);
    if(stricmp(op, "SAIR") ==0)
    {
    sair();
    }

    Atenção ao i no meio de stricmp, faz toda a diferença, cuja consequência é não ligar ao Case (Maiúsculas / Minúsculas). E a comparação com Zero também. A função devolve a diferença entre as strings, ou seja se uma string é superior, inferior ou igual a outra por ordem aproximadamente alfabética. Se forem iguais a diferença é Zero.
     

Partilhar esta Página