Ir ao conteúdo
  • Cadastre-se

C++ Programa de encomendas C++


louisecp

Posts recomendados

Olá, sou iniciante na área da programação e gostaria de uma ajuda. A ideia é desenvolver um programa de encomendas, o problema é que não consigo fazer com que os caracteres "P", "M" e "G" apareçam no gráfico, só aparecem números aleatórios.

#include <iostream>
#include <clocale>
#include <cstdio>
#include <windows.h>

/*Pretende-se desenvolver, em C++, um programa que recolha os dados de uma possível encomenda.
A empresa fabrica o produto X na forma de 4 modelos (Pequeno, Médio, Grandee MuitoGrande).
Possível Layout:
Modelo Descrição Quantidade Preço Total
1       Pequeno       10      5     50
2        Médio         5      2     10
-------------------------------------------------------------------------------------------------------
                          Total     60
Notas:
→A encomenda, no detalhe,deve ter no mínimo 1 produto e no máximo 4.
→Não podem existir modelos repetidos.*/

using namespace std;

void menu();
void inserir();
void mostrar();
void pausa();

int validarmdl(int mdl);
char validardescr();
int validarqtd();

int mdl,qtd, total=0,pc;
char escolha;


int encomenda[4][4];

int numProdutos=0;

int main()
{
    setlocale(LC_ALL,"portuguese");
    menu();
    return 0;
}

void menu()
{

    int opcao;

    do
    {
        system("cls");

        cout<<"***Encomenda***"<<endl<<endl;
        cout<<"1- Inserir produtos no carrinho."<<endl;
        cout<<"2- Mostrar carrinho."<<endl;
        cout<<"3- Sair."<<endl;
        cin>>opcao;

        switch(opcao)
        {

        case 1:
            inserir();
            break;
        case 2:
            mostrar();
            break;
        case 3:
            exit(0);
        default:
            cout<<"Opção inválida. Insira um número entre 1 e 3."<<endl;

        }
    }
    while(opcao!=3);
}
void inserir()
{

    system("cls");

    cout<<"Carrinho:"<<endl;

    if(numProdutos >=4){
        cout<<"Carrinho cheio."<<endl;
        pausa();
        return;
    }

    numProdutos++;

    cout<< numProdutos<< "º produtos"<<endl;

    mdl=validarmdl(mdl);
    escolha= validardescr();
    qtd= validarqtd();

    if(mdl== 1){
        pc=10.0;
    }
    else if(mdl==2){
        pc=15.0;
    }
    else if(mdl==3){
        pc=20.0;
    }
    else
    {
        pc=25.0;
    }

    total= qtd * pc;

    encomenda[numProdutos - 1][0] = mdl;
    encomenda[numProdutos - 1][1] = escolha;
    encomenda[numProdutos - 1][2] = qtd;
    encomenda[numProdutos - 1][3] = pc;
    encomenda[numProdutos - 1][4] = total;

    pausa();


}
void mostrar()
{

    system("cls");

    cout<<endl<<"Mostrar carrinho"<<endl<<endl;
    cout<<"Modelo\tDescr\tQtd\tPrc\tTotal"<<endl;

    for(int i=0; i<numProdutos; i++)
    {
        cout<<encomenda[i][0]<<"\t"<<encomenda[i][1]<<"\t"<<encomenda[i][2]<<"\t"<<encomenda[i][3]<<"\t"<<encomenda[i][4]<<endl;


    }
    system("pause");

}

int validarmdl(int mdl)
{
    do
    {
        cout<<"Digite um modelo de 1 a 4:"<<endl;
        cin>>mdl;


    if(mdl<1 || mdl>4){
        cout<<"Modelo inválido."<<endl;
    }
    }while(mdl<1 || mdl>4);


return mdl;
}


char validardescr()
{
    do
    {
        cout << "Escolha o tamanho (P/M/G):" << endl;
        cin >> escolha;

        if (escolha != 'P' && escolha != 'M' && escolha != 'G')
        {
            cout << "Tamanho inválido." << endl;
        }

    } while (escolha != 'P' && escolha != 'M' && escolha != 'G');

    return escolha;
}

int validarqtd()
{
    int qtd;

    do
    {
        cout << "Insira a quantidade desejada:" << endl;
        cin >> qtd;

        if (qtd < 1)
        {
            cout << "Insira uma quantidade válida." << endl;
        }
        else if (qtd > 50)
        {
            cout << "Estoque esgotado." << endl;
        }

    } while (qtd < 1 || qtd > 50);

    return qtd;
}

void pausa()
{
    cout << "Aguarde 1 segundo." << endl;
    Sleep(1000);
}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@louisecp     seu código está funcionando bem , mas é quase todo da linguagem 'C' e não C++, o que tem de C++ nesse seu código são o "cout <<" e o "cin >>" ,  e  P M G são caracteres do tipo "char" , com apenas uma única Letra , e para mais de uma Letra use "string" , e essa matriz é do tipo "int" ,  assim os valores guardados nela são também do tipo 'int' então use :

char matriz[4][4] ;
   
///    ou do modo que está use assim : (char) que é a letra e não o código da Letra
      
for(int i=0; i<numProdutos; i++)
{
  cout  <<        encomenda[i][0] << "\t" << (char)encomenda[i][1]
        << "\t"<< encomenda[i][2] << "\t" <<       encomenda[i][3]
        << "\t"<< encomenda[i][4] <<                         endl;


  }     

ou na linguagem C++ use o tipo "string" para armazenar palavras do modo que está no exemplo da descrição .

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Complementando o @devair1010 para estoque tem-se o modelo que foi omitido no programa. No enunciado se falou no modelo X mas também vai ter o Y, o Z e outros mais. Nos tamanhos são 4 e não 3 (P, M, G e GG). Para manter o char GG pode ser substituido por E de extra.

O C++ cria e modifica arquivos de banco de dados com muita facilidade. Num programa que fiz no passado o estoque era um único banco de dados com os campos modelo, cor, tamanho, quantidade, preço. Ao se inserir um novo modelo se este tivesse 5 cores e 3 tamanhos eram criadas automáticamente 15 linhas no banco de dados, 1 para cada item. Muito mais fácil e prático do que o uso de matrizes pois permite a inserção de quantidade ilimitada de modelos sem ter que alterar o programa, coisa que não ocorre na sua proposta. o programa nasce engessado. Outros recursos como indexação tornam o programa mais interessante ainda. Completinho vai mais de 400 linhas.mas mesmo para pequenos exercícios recomendo o estudo do banco de dados do C++.

Bons estudos.

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Você pode conseguir concluir assim o programa. E pode até sempre programar assim, mas vai ter sempre um trabalho do inferno para concluir cada programa, e vai aprender pouco ou nada a cada um.

Muitos dos problemas no código são tão comuns que eu acho que a gente deve culpar uma legião de instrutores possivelmente medíocres e material de estudo ruim.

Vou listar alguns problemas e tentar mostrar uma maneira comum de fazer essas coisas.

 

Entenda que C++ não é C e C não é C++. São linguagens absolutamente distintas.

 

O problema original:

 

Possível Layout:

Modelo   Descrição  Quantidade Preço Total
  1       Pequeno       10       5     50 
  2       Médio          5       2     10  
  
Total: 60


Isso você já tem. Use. Faça igual. Nada diz sobre estoque, layout, nada. Faça o mínimo mas faça certo.

Use o proprio IDE ou editor para formatar os dados, ANTES de programar.

E escreva em torno dos dados. ANTES de programar.

 

Do seu enunciado:

  •   A empresa fabrica o produto X na forma de 4 modelos: Pequeno, Médio, Grande e MuitoGrande. Que tal P, M, G e GG?

Notas:
  - A encomenda, no detalhe, deve ter no mínimo 1 produto e nomáximo 4. Não podem existir modelos repetidos.


Genial o cara se preocupar em te avisar que uma encomenda não deve ter ZERO produtos! Ou -30 produtos, ou 0,32 produto! E repetir modelos num pedido de no máximo 4 itens seria meio bobinho afinal! Mas é o que temos de enunciado.

 

    #include <cstdio>
    #include <iostream>


Que significa? Ao menos respeitou a convenção de, ao usar um header de C, usar um 'c' na frente e tirar o .h, e usou cstdio ao invés de stdio.h.

 

Mas sabia que stdio.h e iostream tem o mesmo propósito? Tem. Nunca deve usar os dois. E provavelmente nunca deve usar header de C em C++ em um programa para iniciantes. Para que seria?

 

Seu dado é uma encomenda. Onde está a encomenda no programa?  

 

        int encomenda[4][4];

 

Imagino que seria isso. 4 vetores de 4 int. int é um número inteiro, com sinal, tipo -42 ou 17. Que vai fazer com 16 deles?

 

E isso:

      void menu();
      void inserir();
      void mostrar();
      void pausa();

 

Funções que não recebem nada (sem argumentos) e não retornam nada (void)????
Isso quer dizer que vai inserir o que onde, em inserir() por exemplo?

 

Nunca escreva isso. Vai implicar em dados globais e funções que de nada servem porque tratam um único valor.

 

E um menu() que não retorna nada?? Não seria razoável uma função menu() retornar a opção escolhida?

Eis o que acaba acontecendo

 

int main()
{
    setlocale(LC_ALL, "portuguese");
    menu();
    return 0;
}

 

O programa principal passou a ser menu(). Não escreva isso. menu() é um menu. Mostra umas opções e retorna a escolhida. O simples.

 

E

        void inserir();

 

afinal insere o que onde? Muito complicado programar assim. inserir() insere alguma coisa em algum lugar.

Quase todos os programas de exercício envolvem algum tipo de container. E inserir quer dizer o óbvio: inserir um item num carrinho de encomendas, no seu caso.

 

Quanto mais longe seu programa estiver disso, da realidade, mais trabalho você vai ter. E, com instrutores e patrões sérios, menos nota e menos estágio ou emprego.

 

Que seria uma encomenda em C?

 

    typedef struct
    {
        unsigned modelo;
        char     tamanho[4];
        unsigned quantidade;
        double   preco;
    } Encomenda;

 

Não parece melhor? E o carrinho?

 

          typedef struct
          {
              unsigned qtd;
              Encomenda enc[4];
          } Carrinho;

 

Não faz sentido? Antes de começar a programar. É mais fácil.

 

E em C++?

       struct Encomenda
        {
            unsigned modelo;
            string   tamanho;
            unsigned quantidade;
            double   preco;
            int      validar();
            int      mostrar();
        };

        struct Carrinho
        {
            unsigned qtd;
            Encomenda enc[4];

            int inserir(Encomenda* uma);
            int mostrar(Encomenda* uma);
        };

 

Em `C++` é parecido, mas você pode e deve declarar as funções DENTRO da struct, porque é muito mais fácil.


ANTES de começar a programar:

 

        #include <iostream>
        using namespace std;

        struct Encomenda
        {
            unsigned modelo;
            string   tamanho;
            unsigned quantidade;
            double   preco;
            int      validar();
            int      mostrar();
        };

        struct Carrinho
        {
            unsigned qtd;
            Encomenda enc[4];

            int inserir(Encomenda* uma);
            int mostrar(Encomenda* uma);
        };

        int main(void)
        {
            return 0;
        }

 

E isso até compila. E a gente nem programou nada ainda.

 

Considere.

  • Obrigado 1
  • Amei 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!