Stock and sales control

Asked

Viewed 4,146 times

0

Hello, this progrgrama is a stock control, what he asks this in the first printf of the program, a stock and sale controller only with struct. Cases 3 and 4 are in trouble, because I can’t get information from registered items. Case 2 also has a problem but I don’t know why. In case someone wants to test run the program I would be grateful. The most recent (Falcon C++ IDE I use) does not identify any errors,

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

struct produto
{
    char cod;
    float compra;
    float venda;
    float preco;
    int qdt;
    float lucro;
    char descricao[100];
    char nome[50];

};

int main()
{
    int opc;
    int i;
    int per;
    float lucro;
    int ven;

    struct produto cadastrar[40];

    setlocale(LC_ALL, "Portuguese");

    printf("1-Cadatrar produto\n2-Lucro total\n3-Conferir estoque\n4-Venda\n0-Sair\n");
    scanf("%d", &opc);

    fflush(stdin);

    switch(opc)
    {
    case 1:
        puts("Olá, cadastre um item");

        for(i=0; i<40; i++)
        {
            puts("Nome:");
            gets(cadastrar[i].nome);
            fflush(stdin);
            puts("Código:");
            scanf("%s", &cadastrar[i].cod);
            fflush(stdin);
            puts("Descrição:");
            gets(cadastrar[i].descricao);
            fflush(stdin);
            puts("Quantidade:");
            scanf("%d", &cadastrar[i].qdt);
            fflush(stdin);
            puts("Valor da compra:");
            scanf("%f", &cadastrar[i].compra);
            fflush(stdin);
            puts("Preço:");
            scanf("%f", &cadastrar[i].preco);
            fflush(stdin);

            puts("gostaria de cadastrar outro produto?");
            puts("1-sim\t2-nao");
            scanf("%d", &per);

            if(per!=1)
            {
                system("cls");
                printf("finalização de cadastramento de produto\n");
                return main();
            }

            else if(per==1)
            {
                system("cls");
            }

            fflush(stdin);

        }

        return main();

    case 2:
        for(i=0; i<40; i++)
        {
            if(cadastrar[i].venda==0)
            {
                fflush(stdin);
                system("cls");
                printf("Não foi feito nenhuma venda:\n");
                return main();
            }   

        else if(cadastrar[i].venda>0)
        {
            fflush(stdin);

            printf("%.2f", cadastrar[i].venda);
        }   

        }

    case 3:
        for(i=0;i<40;i++)
        {
            fflush(stdin);

            puts("Código do produto:");
            scanf("%s", &cadastrar[i].cod);//toda vez que é digitado substitui o codigo do item, e zera o resto das variaveis na possição
            fflush(stdin);

            if(cadastrar[i].qdt<12)
            {
                printf("%s", cadastrar[i].nome);
                fflush(stdin);
                printf("Produto no fim:\t\t%d\n\n", cadastrar[i].qdt);
                system("pause");
            }

            else if(cadastrar[i].qdt>11)
            {
                puts(cadastrar[i].nome);
                fflush(stdin);
                printf("Qtd:t\t%d\n\n", cadastrar[i].qdt);
                system("pause");

            }

            if(cadastrar[i].qdt==0)
            {
                puts(cadastrar[i].nome);
                fflush(stdin);
                printf("Item em falta");
            }

            fflush(stdin);

            puts("gostaria de cadastrar outro produto?");
            puts("1-sim\t2-nao");
            scanf("%d", &per);

            if(per!=1)
            {
                system("cls");
                printf("finalização de cadastramento de produto\n");
                return main();
            }

            else if(per==1)
            {
                system("cls");
            }

            fflush(stdin);
        }

        return main();


    case 4:

        for(i=0; i<40; i++)
        {
            puts("Código do produto:");//toda vez que é digitado substitui o codigo do         item, e zera o resto das variaveis na possição
            scanf("%s", &cadastrar[i].cod);
            fflush(stdin);
            printf("Preço:\t\t%.2f", cadastrar[i].preco);
            printf("Qtd:\t\t%d", cadastrar[i].qdt);

            fflush(stdin);
            ven=0;

            printf("Vender?/n1-sim 2-não:\n");
            scanf("%d", &ven);

            fflush(stdin);

            if(ven==1)
            {
                cadastrar[i].qdt--;
                cadastrar[i].venda=cadastrar[i].preco;
                lucro=cadastrar[i].venda;
            }

            else if(ven==2)
            {
                return main();
            }


            fflush(stdin);

            per=0;

            puts("gostaria de cadastrar outro produto?");
            puts("1-sim\t2-nao");
            scanf("%d", &per);

            if(per!=1)
            {
                system("cls");
                printf("finalização de cadastramento de produto\n");
                return main();
            }

            else if(per==1)
            {
                system("cls");
            }

            fflush(stdin);

            fflush(stdin);
        }

    case 0:
        fflush(stdin);

        system("cls");
        break;

    default:
        fflush(stdin);
        printf("opção invalida, digite outra opção\n");w

        return main();
    }

    return 0;
}

my doubt is the second, when I register a product and then I will sell or check stock, regardless of the code I will type is not the same

Editable code:

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <conio.h>
#include <string.h>

struct produto
{
    char cod;
    float compra;
    float venda;
    float preco;
    int qdt;
    float lucro;
    char descricao[100];
    char nome[50];

};

int main()
{
    int opc;
    int i;
    int per;
    float lucro;
    int ven;

    struct produto cadastrar[40];

    setlocale(LC_ALL, "Portuguese");

    while(opc!=0)
    {
        printf("1-Cadatrar produto\n2-Lucro total\n3-Conferir estoque\n4-Venda\n0-Sair\n");
        scanf("%d", &opc);
        fflush(stdin);

        switch(opc)
        {
        case 1:
            puts("Olá, cadastre um item");

            for(i=0; i<40; i++)
            {
                puts("Nome:");
                gets(cadastrar[i].nome);
                fflush(stdin);
                puts("Código:");
                scanf("%s", &cadastrar[i].cod);
                fflush(stdin);
                puts("Descrição:");
                gets(cadastrar[i].descricao);
                fflush(stdin);
                puts("Quantidade:");
                scanf("%d", &cadastrar[i].qdt);
                fflush(stdin);
                puts("Valor da compra:");
                scanf("%f", &cadastrar[i].compra);
                fflush(stdin);
                puts("Preço:");
                scanf("%f", &cadastrar[i].preco);
                fflush(stdin);

                puts("gostaria de cadastrar outro produto?");
                puts("1-sim\t2-nao");
                scanf("%d", &per);

                if(per!=1)
                {
                    system("cls");
                    printf("finalização de cadastramento de produto\n");
                    break;
                }

                else if(per==1)
                {
                    system("cls");
                }

                fflush(stdin);
            }
            break;

        case 2:
            for(i=0; i<40; i++)
            {
                if(cadastrar[i].venda==0)
                {
                    fflush(stdin);
                    system("cls");
                    printf("Não foi feito nenhuma venda:\n");
                    break;
                  } 

                else if(cadastrar[i].venda>0)
                {
                    fflush(stdin);

                    printf("%.2f", cadastrar[i].venda);
                }   
            }
            break;

        case 3:

            for(i=0;i<40;i++)
            {
                fflush(stdin);

                puts("Código do produto:");
                scanf("%s", &cadastrar[i].cod);
                fflush(stdin);

                if(cadastrar[i].qdt<12)
                {
                    printf("%s", cadastrar[i].nome);
                    fflush(stdin);
                    printf("Produto no fim:\t\t%d\n\n", cadastrar[i].qdt);
                    system("pause");
                }

                else if(cadastrar[i].qdt>11)
                {
                    puts(cadastrar[i].nome);
                    fflush(stdin);
                    printf("Qtd:t\t%d\n\n", cadastrar[i].qdt);
                    system("pause");

                }

                if(cadastrar[i].qdt==0)
                {
                    puts(cadastrar[i].nome);
                    fflush(stdin);
                    printf("Item em falta");
                    system("pause");
                }

                fflush(stdin);

                puts("gostaria de pesquisar outro produto?");
                puts("1-sim\t2-nao");
                scanf("%d", &per);

                if(per!=1)
                {
                    system("cls");
                    printf("finalização de cadastramento de produto\n");
                    break;
                }

                else if(per==1)
                {
                    system("cls");
                }

                fflush(stdin);
            }

            break;

        case 4:

            for(i=0; i<40; i++)
            {
                puts("Código do produto:");
                scanf("%s", &cadastrar[i].cod);
                fflush(stdin);
                printf("Preço:\t\t%.2f", cadastrar[i].preco);
                printf("Qtd:\t\t%d", cadastrar[i].qdt);

                fflush(stdin);
                ven=0;

                printf("Vender?/n1-sim 2-não:\n");
                scanf("%d", &ven);

                fflush(stdin);

                if(ven==1)
                {
                    cadastrar[i].qdt--;
                    cadastrar[i].venda=cadastrar[i].preco;
                    lucro=cadastrar[i].venda;
                }

                else if(ven==2)
                {
                    break;
                }


                fflush(stdin);

                per=0;

                puts("gostaria de cadastrar outro produto?");
                puts("1-sim\t2-nao");
                scanf("%d", &per);

                if(per!=1)
                {
                    system("cls");
                    printf("finalização de cadastramento de produto\n");
                    break;
                }

                else if(per==1)
                {
                    system("cls");
                }

                fflush(stdin);
            }
            break;

        case 0:
            fflush(stdin);

            system("cls");
            break;

        default:
            fflush(stdin);
            printf("opção invalida, digite outra opção\n");

            break;
        }
    }

    return 0;
}

1 answer

3


The problem with your code is that you call the function several times main. Besides being a little weird, what Voce ends up doing and redeclareting everything, including its vector of produto.

A possible solution is to put the option reading in a while(opc != 0) and at the end of it read a new option.

Just a few other comments:

  1. Don’t use the function gets. The compiler itself issues a Warning (engracado na minha opniao): "the gets Function is Dangerous and should not be used". This is because it does not have a maximum size for the string it will read. Use the fgets:

    fgets(stdin, str, 128);

    or something like that.

  2. To use the scanf and read a character, like your cod, the syntax and:

    scanf("%c", &variable);

    and not %s, as Voce is doing, que le strings. Moreover, when using the scanf to read Voce strings should not put the &:

    scanf("%s", string);

  • I put an editable code area

  • 1

    Only boot opc for something other than 0.

  • but opc is already different from 0

  • Not when the program starts. You use the value of opc no while giving value to it.

  • I think now I intendi was barely dyslexic so in case I press enter will come out?

  • 1

    no, it depends on the value you have in the memory location that it gains when it is declared. as this is kind of random, it is always good you put a value.

  • OK thank you very much

Show 2 more comments

Browser other questions tagged

You are not signed in. Login or sign up in order to post.