Ir ao conteúdo

Posts recomendados

Postado

Ola gente, estou cursando sistemas de informações e tenho uma atividade que preciso fazer um sistema em linguagem c utilizando struct onde nesse sistema eu cadastro: o dono do sistema, funcionario e produtos...depois também tem uma opção para venda dos produtos cadastrados fazendo um login com o funcionario e por fim um relatorio das vendas fazendo um login com o dono do sistema. A tela inicial fica assim:

1 - CADASTRAR PRODUTO
2 - CADASTRAR DONO
3 - CADASTRAR FUNCIONARIO
4 - VENDER PRODUTO

      (Aqui tem login do funcionario)
5 - RELATORIO DE VENDAS

      (Aqui tem login do dono)
6 - SAIR

 

O meu problema é que na parte das vendas do produto onde aparecem listados com nome do produto, valor e quantidade, se eu tiver mais de um produto cadastrado e digitar como escolha o segundo produto aparece uma mensagem de produto não cadastrado que eu coloquei no else...por exemplo eu tenho produto 1 - oleo cadastrado e produto 2- sabao cadastrado, quando aparece a opção de escolha(que no caso é a escolha do cliente para compra) se eu digitar a opção sabao aparece produto não cadastrado, porém se eu digitar o primeiro produto aparece a continuação do programa normalmente, e eu n sei porque isso de só o primeiro valor aparecer acontece...eu fiz essa parte de cadastro dos produtos usando vetores.

 

E o outro problema é a parte do relatorio onde nele eu preciso exibir a quantidade vendida dos produtos, porém como eu usei vetores sempre aparece nessa parte todos os produtos cadastrados ao invés de somente os que foram vendidos e eu não sei como fazer aparecer apenas os vendidos...Gostaria de pedir ajuda de vcs se souberem como ajudar. Abaixo o codigo que eu fiz:

 

edit: Esqueci de mencionar mas ainda estou no 4º Periodo e todos os comandos que eu aprendi ate agora foram esses usados no codigo...ainda não aprendi a usar void e outros comandos então se puderem me ajudar usando esses comandos que tem no codigo ficaria grato.

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

typedef struct Produto{
    char nome[15];
    int qtd;
    float valor;
}Produto;

Produto produto[3];

typedef struct Funcionarios{
    char nome[20];
    int matricula;
    char senha[20];
}Funcionarios;

Funcionarios func;

typedef struct Dono{
    char nome[20];
    char login[20];
    char senha[20];
}Dono;

Dono dono;

main(){
    int sd=1, loginfunc, qtdcliente, quant;
    char senhafunc[20], logindono[20], senhadono[20], prodcliente[20];
    float pagamentocliente, calc, total;
    
    do{
        printf("-----------SISTEMA MERCADO-----------\n");
        printf("\n1 - CADASTRAR PRODUTO");
        printf("\n2 - CADASTRAR DONO");
        printf("\n3 - CADASTRAR FUNCIONARIO");
        printf("\n4 - VENDER PRODUTO");
        printf("\n5 - RELATORIO DE VENDAS");
        printf("\n6 - SAIR");
        printf("\nESCOLHA UMA OPCAO: ");
        scanf("%d",&sd);
        system("cls");
        switch(sd){
            case 1:
                printf("-----------CADASTRO DE PRODUTOS-----------");
                printf("\nQUANTOS PRODUTOS DESEJA CADASTRAR: ");
                scanf("%d",&quant);
                for(int i=0;i<quant;i++){
                    printf("\nNOME DO %d PRODUTO: ",i+1);
                    fflush(stdin);
                    gets(produto.nome);
                    printf("\nQUANTIDADE DO PRODUTO: ");
                    scanf("%d",&produto.qtd);
                    printf("\nVALOR DO PRODUTO: R$");
                    scanf("%f",&produto.valor);
                    if(produto.valor<=0){
                        printf("\nVALOR INVALIDO");
                    }else{
                        printf("\nPRODUTO CADASTRADO COM SUCESSO\n");
                    }
                }
                system("pause");
                system("cls");
                break;
                
            case 2:
                printf("-----------CADASTRO DO DONO-----------");
                printf("\nNOME DO DONO: ");
                fflush(stdin);
                gets(dono.nome);
                printf("\nLOGIN DO DONO: ");
                fflush(stdin);
                gets(dono.login);
                printf("\nSENHA DO DONO: ");
                fflush(stdin);
                gets(dono.senha);
                printf("\nCADASTRO REALIZADO COM SUCESSO\n");
                system("pause");
                system("cls");
                break;    
            
            case 3:
                printf("-----------CADASTRO DO FUNCIONARIO-----------");
                printf("\nNOME DO FUNCIONARIO: ");
                fflush(stdin);
                gets(func.nome);
                printf("\nMATRICULA DO FUNCIONARIO: ");
                scanf("%d",&func.matricula);
                printf("\nSENHA DO FUNCIONARIO: ");
                fflush(stdin);
                gets(func.senha);
                printf("\nCADASTRO REALIZADO COM SUCESSO\n");
                system("pause");
                system("cls");
                break;
                
            case 4:
                printf("----------VENDA DE PRODUTOS------------");
                printf("\nMATRICULA FUNCIONARIO: ");
                scanf("%d",&loginfunc);
                printf("\nSENHA FUNCIONARIO: ");
                fflush(stdin);
                gets(senhafunc);
                system("cls");
                if((loginfunc == func.matricula)&&(strcmp(senhafunc,func.senha)==0)){
                    strupr(func.nome);
                    printf("BEM VINDO %s",func.nome);
                    for(int i=0;i<quant;i++){
                        printf("\n\nPRODUTO DISPONIVEL: %s",produto.nome);
                        printf("\nQUANTIDADE DISPONIVEL: %d",produto.qtd);
                        printf("\nPRECO DO PRODUTO: R$%.2f",produto.valor);
                    }
                    printf("\n\nPRODUTO A SER COMPRADO: ");
                    fflush(stdin);
                    gets(prodcliente);
                    for(int i=0;i<quant;i++){
                        if(strcmp(prodcliente,produto.nome)==0){
                            printf("\nQUANTIDADE DO PRODUTO: ");
                            scanf("%d",&qtdcliente);
                            if(qtdcliente<=produto.qtd){
                            calc=produto.valor*qtdcliente;
                            printf("\nVALOR A SER PAGO: R$%.2f",calc);
                            printf("\nTOTAL PAGO PELO CLIENTE: R$");
                            scanf("%f",&pagamentocliente);
                            if(calc>pagamentocliente){
                                printf("\nVALOR INSUFICIENTE!!!\n");
                                system("pause");
                                system("cls");
                                break;
                            }else{
                                total=pagamentocliente-calc;
                                printf("\nCOMPRA REALIZADA COM SUCESSO!!!");
                                printf("\nTROCO: R$%.2f\n",total);
                                produto.qtd-=qtdcliente;
                                system("pause");
                                system("cls");
                                break;
                            }
                        }else{
                            printf("\nQUANTIDADE INVALIDA!!!\n");
                            system("pause");
                            system("cls");
                            break;
                        }
                        }else{
                            printf("\nPRODUTO NAO CADASTRADO\n");
                            system("pause");
                            system("cls");
                            break;
                        }
                    }
                }else{
                    printf("DADOS INCORRETOS\n");
                    system("pause");
                    system("cls");
                    break;
                }
                break;
                
                case 5:
                    printf("----------RELATORIO DE VENDAS----------");
                    printf("\nLOGIN DONO: ");
                    fflush(stdin);
                    gets(logindono);
                    printf("\nSENHA DONO: ");
                    fflush(stdin);
                    gets(senhadono);
                    system("cls");
                    if((strcmp(logindono,dono.login)==0)&&(strcmp(senhadono,dono.senha)==0)){
                        strupr(dono.nome);
                        printf("BEM VINDO %s\n",dono.nome);
                        printf("\n\n----------RELATORIO----------\n\n");
                        printf("\nPRODUTOS VENDIDOS");
                        for(int i=0;i<quant;i++){
                            printf("\n\nPRODUTO: %s",produto.nome);
                            printf("\nQUANTIDADE: %d\n\n",produto.qtd+qtdcliente);
                        }
                        system("pause");
                        system("cls");
                    }else{
                        printf("LOGIN INVALIDO");
                        system("pause");
                        system("cls");
                    }
                    break;
                
                default:
                printf("-----------FIM-----------");
                exit(0);
            }
    }while(sd!=0);
}

 

  • Curtir 1
Postado

Bom Dia,

 


plxyubnIHmQTAibC8fv0RCTvMe5KDAq28pts3ONi 

Só observei que a main está carregada

Tem conhecimento de comandos suficiente para estruturar seu código, ainda sim não organiza com base em funções. Imagine o GTA  V no 'paradigma main' … quantas linhas …Nãoo dá né!

 

Em casos assim o depurador (GDB) é a ferramenta certa que ajuda encontra rapidamente o problema. Mas, talvez você ainda não teve sua apresentação de como usar o GDB 🤷‍♀️.

Postado
7 horas atrás, NLDDHades disse:

Esqueci de mencionar mas ainda estou no 4º Periodo e todos os comandos que eu aprendi ate agora foram esses usados no codigo...ainda não aprendi a usar void e outros comandos

 

Essa não é uma boa aproximação para aprender a programar, ou mesmo para aprender qualquer técnica.

Deve imaginar que se não irá progredir muito se mantiver essa política na sua carreira,, seja qual for.

 

Se você está com dificuldade para concluir algo pode ser que falte um conceito que está na página seguinte do livro que você não quer ler a menos que o instrutor te apresente a página na aula. Ninguém vai te culpar por ler o manual antes do instrutor ler para você. Seu professor pode nem ser suficientemente bom afinal. E você pode progredir por sua conta, o que muitas vezes é bem estimulante.

 

"não aprendi isso ainda" é uma coisa que já li e ouvi muitas vezes. Não me leve a mal por insistir nisso, mas o "ainda" pode ser afora mesmo.

 

De volta ao seu programa

 

  • Escreva sempre em torno dos dados. E procure não escrever um programa grande com todas as funções desde o início. Só vai te atrasar. E muito
  • Não use menus e entrada do usuário enquanto estiver desenvolvendo. Isso também  vai te atrasar muito

Não use variáveis globais. É um problema enorme e vai cair na sua cabeça. Sempre. Por isso são proibidas em empresas e escolas e condenadas por autores e mestres. Fora de main() declare apenas as estruturas. Logo seu professor vai te ensinar a usar isso em arquivos separados. Porque? Pense bem: se tiver 30 programas nesse sistema de cadastro TODOS vão usar as mesmas estruturas e não vai ser prático ficar copiando as definições de Produto e Funcionario para 30 programas. Vai descobrir isso no minuto em que um dos programas fizer uma alteração numa dessas struct
Ao invés de

typedef struct Produto {
    char nome[15];
    int qtd;
    float valor;
}Produto;

Produto produto[3];

typedef struct Funcionarios {
    char nome[20];
    int matricula;
    char senha[20];
}Funcionarios;

Funcionarios func;

typedef struct Dono {
    char nome[20];
    char login[20];
    char senha[20];
}Dono;

Dono dono;

main() {
...

Prefira algo como


typedef struct
{
    char nome[15];
    int qtd;
    float valor;

}   Produto;

typedef struct
{
    char nome[20];
    int matricula;
    char senha[20];

}   Funcionarios;

typedef struct 
{
    char nome[20];
    char login[20];
    char senha[20];

}   Dono;


main() {
    Produto produto[3];
    Funcionarios func;
    Dono dono;
  • Muito bom você ter usado uma convenção para identificar as struct, usando uma inicial maiúscula. Isso é importante para a manutenção e leitura do programa
     
  • Entenda que Dono e Funcionarios são a mesma coisa então se usa algo como
    
    typedef struct
    {
        char    departamento[30];
        char    admissao[10];
        Pessoa  info;
    
    }   Funcionario;
    
    typedef struct 
    {
        char    participacao[10];
        char    coisas[20];
        Pessoa  info;
    
    }   Dono;

    Fornecedores e Clientes por exemplo podem também referenciar Pessoa. Acho que entendeu. E se um campo tem o nome no singular use todos como singular. Vai acabar errando qual é plural.. Se vai usar um vetor use todos no singular, porque faz mais sentido ler Dono[posicao] que Donos[posicao] já que cada ocorrência do vetor é UM Dono. Essa noção de conjunto é essencial em sistemas. Em java são collections, em C++ são containers, em C são vetores de estruturas, mas o conceito é o mesmo: agrupar informação

  • Você tem um relatório de vendas mas não tem uma struct para Venda. Quase certo que vai se arrepender

  • A primeira função que você deve escrever é a que lista os cadastros, de venda, produto e pessoas. Sim, essa que nem está no menu. Porque você precisa saber se as coisas estão andando como você espera

    Depois vou ler seu programa melhor

 

Postado
5 horas atrás, arfneto disse:

Essa não é uma boa aproximação para aprender a programar, ou mesmo para aprender qualquer técnica.

Deve imaginar que se não irá progredir muito se mantiver essa política na sua carreira,, seja qual for.

 

Se você está com dificuldade para concluir algo pode ser que falte um conceito que está na página seguinte do livro que você não quer ler a menos que o instrutor te apresente a página na aula. Ninguém vai te culpar por ler o manual antes do instrutor ler para você. Seu professor pode nem ser suficientemente bom afinal. E você pode progredir por sua conta, o que muitas vezes é bem estimulante.

 

"não aprendi isso ainda" é uma coisa que já li e ouvi muitas vezes. Não me leve a mal por insistir nisso, mas o "ainda" pode ser afora mesmo.

 

Sobre isso é mais por que eu sou cabeça dura e quero resolver esse problema so com o que eu sei mesmo...porque eu sei q da pra resolver com o que eu sei, mas n sei como...mas claro que se tiver outro metodo mais fácil eu adoraria aprender.

 

5 horas atrás, arfneto disse:

Você tem um relatório de vendas mas não tem uma struct para Venda. Quase certo que vai se arrepender

Essa parte eu não entendi o que voce quis dizer...como eu poderia fazer um relatorio apenas criando uma struct propria para vendas??

 

O  meu principal problema ta sendo na parte de escolher o produto cadastrado no vetor...essa parte ja tentei de varias formas e não aparece o produto cadastrado nos vetores...so aparece o produto cadastrado no primeiro vetor.

A parte do relatorio eu ainda não sei fazer bem mas sendo sinceiro eu ainda nem me esforcei tanto pra tentar fazer porque enquanto não conseguir resolver a parte da venda de produtos não vai adiantar ter ou não o relatorio das vendas...essa parte das vendas que ta me pegando, e eu ja to a um tempinho tentando resolver isso mas n sei como.

 

 

Postado
1 hora atrás, NLDDHades disse:

Essa parte eu não entendi o que voce quis dizer...como eu poderia fazer um relatorio apenas criando uma struct propria para vendas??

 

O  meu principal problema ta sendo na parte de escolher o produto cadastrado no vetor...essa parte ja tentei de varias formas e não aparece o produto cadastrado nos vetores...so aparece o produto cadastrado no primeiro vetor.

 

 

Li o programa. O problema é o mesmo para as vendas  e para o cadastro. O programa não está muito bom. Espero que tenha entendido o que eu expliquei sobre os dados e as estruturas e escrever o programa em torno dos dados. E também sobre não declarar NADA fora de main(). É uma ideia ruim.

 

Veja os produtos como escreveu


typedef struct Produto {
    char nome[15];
    int qtd;
    float valor;
}Produto;

Produto produto[3];

E aqui como você tenta usar

            scanf("%d", &quant);
            for (int i = 0; i < quant; i++) {
                printf("\nNOME DO %d PRODUTO: ", i + 1);
                fflush(stdin);
                gets(produto.nome);
                printf("\nQUANTIDADE DO PRODUTO: ");
                scanf("%d", &produto.qtd);
                printf("\nVALOR DO PRODUTO: R$");
                scanf("%f", &produto.valor);
                if (produto.valor <= 0) {
                    printf("\nVALOR INVALIDO");
                }
                else {
                    printf("\nPRODUTO CADASTRADO COM SUCESSO\n");
                }
            }

São 3 produtos como você declarou. Onde está escolhendo em qual posição das 3 possíveis vai gravar o produto que está tentando ler?

Pois é: não disse. Que tal algo como produto[2].nome, produto[0].qtd, produto.valor?

 

E entenda que você tem cadastros: você precisa saber num dado momento quantos funcionários tem, quantos produtos tem, quantas vendas tem. É a realidade. Você precisa controlar. Para isso é um programa.

 

Provavelmente vai entender que o mais simples é melhorar o modelo e caprichar mais nos dados. Algo  assim

typedef struct
{
    int     n_produtos;
    int     n_vendas;
    int     n_funcionarios;

}   Controle;

Já ajudaria bem, não?

 

1 hora atrás, NLDDHades disse:

A parte do relatorio eu ainda não sei fazer bem mas sendo sinceiro eu ainda nem me esforcei tanto pra tentar fazer porque enquanto não conseguir resolver a parte da venda de produtos não vai adiantar ter ou não o relatorio das vendas...essa parte das vendas que ta me pegando, e eu ja to a um tempinho tentando resolver isso mas n sei como

 

1 hora atrás, NLDDHades disse:

Essa parte eu não entendi o que voce quis dizer...como eu poderia fazer um relatorio apenas criando uma struct propria para vendas??

 

Você já escreveu isso, de certo modo

               for (int i = 0; i < quant; i++) {
                    if (strcmp(prodcliente, produto.nome) == 0) {
                        printf("\nQUANTIDADE DO PRODUTO: ");
                        scanf("%d", &qtdcliente);
                        if (qtdcliente <= produto.qtd) {
                            calc = produto.valor * qtdcliente;
                            printf("\nVALOR A SER PAGO: R$%.2f", calc);
                            printf("\nTOTAL PAGO PELO CLIENTE: R$");
                            scanf("%f", &pagamentocliente);
                            if (calc > pagamentocliente) {
                                printf("\nVALOR INSUFICIENTE!!!\n");
                                system("pause");
                                system("cls");
                                break;
                            }
                            else {
                                total = pagamentocliente - calc;
                                printf("\nCOMPRA REALIZADA COM SUCESSO!!!");

Uma venda é só isso: produto, quantidade e valor, no seu sistema simplificado já que não tem clientes. Como seria uma estrutura de venda?


typedef struct
{
    int     matricula; // quem vendeu
    int     produto;  // o que
    int     quantidade; // quanto
    float   valor; // por qual preco

}   Venda;

Ou não?

 

E um relatório de vendas? Não precisa inventar nada. Já está lá. Use o bloco de notas do Windows:

Vendas:

Vendedor                qtd          produto      valor

XXXXYYYYZZXXXXYYYYZZ  12345  AAAABBBBCC12345  123456,78
XXXXYYYYZZXXXXYYYYZZ  12345  AAAABBBBCC12345  123456,78
XXXXYYYYZZXXXXYYYYZZ  12345  AAAABBBBCC12345  123456,78
XXXXYYYYZZXXXXYYYYZZ  12345  AAAABBBBCC12345  123456,78
XXXXYYYYZZXXXXYYYYZZ  12345  AAAABBBBCC12345  123456,78

Só isso.

 

 

  • Curtir 1

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!