Stock and Sales Control

0

Hello, this program is a stock control, which it asks for in the first% program%, an inventory and sale controller with struct. Cases 3 and 4 are in trouble because I do not know how to get the information from the registered items. Case 2 also has a problem but I can not explain why. If anyone wants to run the program I would be grateful. The IDE I use (most recent C ++ falcon) 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 question is the second one, when I register a product and then I will sell or check stock, regardless of the code I am going to type, it 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;
}
    
asked by anonymous 03.09.2014 / 06:15

1 answer

3

The problem with your code is that you repeatedly call the function main . Besides being a bit weird, what do you end up doing and redeclarando everything, including your% vector%.

One possible solution is to set the option reading to produto and at the end of it read a new option.

Just a few other comments:

  • Do not use the function while(opc != 0) . The compiler itself issues a warning (funny in my opnion): "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 gets :

    fgets (stdin, str, 128);

    or something like that.

  • To use fgets and read a character, such as its scanf , the syntax e:

    scanf ("% c", & variable);

    and not cod , how are you doing, what le strings. Also, when using %s to read strings you should not put scanf :

    scanf ("% s", string);

  • 03.09.2014 / 07:16