Ir ao conteúdo
  • Cadastre-se

Cadastro de produtos


Posts recomendados

Fala galera! Estou desenvolvendo um sistema pra uma lanchonete (um trabalho da faculdade) e estou com diversos problemas para criar as listas encadeadas. O sistema consiste em cadastrar novos produtos e realizar uma venda somando o preço dos produtos escolhidos naquele instante. A parte de cadastrar os produtos está praticamente pronta, mas ainda estou com alguns problemas. Já a parte da soma dos produtos, eu não faço a mínima ideia do que fazer. Segue código:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <conio.h>  //clrscr
#include <locale.h>

#define BUFFER 64

/* Estrutura da lista declarada para armazenar nossos dados. */
typedef struct lista {
        char *nome;
        float preco;
        char *obs;
        struct lista *proximo;
} Dados;

/* Prototipo das funcoes de manuseio dos dados. */
Dados *inicia_dados(char *nome, float preco, char *obs);
Dados *insere_dados(Dados *dados, char *nome, float preco, char *obs);
void exibe_dados(Dados *dados);
void busca_dados(Dados *dados, char *chave);
Dados *deleta_dados(Dados *dados);
int checa_vazio(Dados *dados);

/* Prototipo das funcoes do menu.*/
void insere(void);
void exibe(void);
void busca(void);
void deleta(void);

/* Inicializa a estrutura de dados principal. */
Dados *principal = NULL;

/* Cria a nova lista apontando o proximo no para NULL. */
Dados *inicia_dados(char *nome, float preco, char *obs) {

        Dados *novo;

        novo = (Dados *)malloc(sizeof(Dados));
        
        novo->nome = (char *)malloc(strlen(nome)+1);
        strncpy(novo->nome, nome, strlen(nome)+1);
        //***************************************
        novo->preco = preco;
        //***************************************
        novo->obs = (char *)malloc(strlen(obs)+1);
        strncpy(novo->obs, obs, strlen(obs)+1);
        //***************************************
        novo->proximo = NULL;

        return novo;
}

/* Como a lista nao esta mais vazia, apontamos o proximo no para lista anterior. */
Dados *insere_dados(Dados *dados, char *nome, float preco, char *obs) {

        Dados *novo;

        novo = (Dados *)malloc(sizeof(Dados));
        
        novo->nome = (char *)malloc(strlen(nome)+1);
        strncpy(novo->nome, nome, strlen(nome)+1);
        
        novo->preco = preco;
        
        novo->obs = (char *)malloc(strlen(obs)+1);
        strncpy(novo->obs, obs, strlen(obs)+1);
        
        novo->proximo = dados;

        return novo;
}

/* Percorre todos os campos da lista e imprime ate o ponteiro proximo chegar em NULL. */
void exibe_dados(Dados *dados) {

        fprintf(stdout, "Cadastro:\n\n");

        fprintf(stdout, "------------------------\n");

        for (; dados != NULL; dados = dados->proximo) {
                fprintf(stdout, "Nome: %s\n", dados->nome);
                fprintf(stdout, "Idade: %d\n", dados->preco);
                fprintf(stdout, "Observações: %s\n", dados->obs);
                
                fprintf(stdout, "------------------------\n ");
        }
        printf("Pressione uma tecla para continuar.");
        getch();
}

/* Percorre cada ponta comparando o nome com a chave. */
void busca_dados(Dados *dados, char *chave) {

        int achou = 0;

        fprintf(stdout, "Cadastro:\n\n");
        for (; dados != NULL; dados = dados->proximo) {
                if (strcmp(chave, dados->nome) == 0) {

                        fprintf(stdout, "------------------------\n");
                        fprintf(stdout, "Nome: %s\n", dados->nome);
                        fprintf(stdout, "Preço: %d\n", dados->preco);
                        fprintf(stdout, "Observações: %s\n", dados->obs);
                        fprintf(stdout, "------------------------\n");
                        achou++;// muda o valor de achou
                }
        }

        if (achou == 0)
                fprintf(stdout, "Nenhum resultado encontrado.\nPressione uma tecla para continuar.\n");
        else
                fprintf(stdout, "Foram encontrados %d registros. \nPressione uma tecla para continuar.\n", achou);

        sleep(1);
        getch();
}

/* Deleta o ultimo registro inserido. */
Dados *deleta_dados(Dados *dados) {

        Dados *novo;

        novo = dados->proximo;

        free(dados->nome);
        free(dados);
        free(dados->obs);
        
        fprintf(stdout, "O ultimo registro inserido foi deletado com sucesso.\\n");
        sleep(1);

        return novo;
}

/* apenas checa se a lista e NULL ou nao. */
int checa_vazio(Dados *dados) {

        if (dados == NULL) {
                fprintf(stdout, "Lista vazia!\\n");
                sleep(1);
                return 1;
        } else
                return 0;
}

/* Obtem os dados necessarios para chamar as funcoes de manuseio de dados. */
void insere(void) {

        char *nome, obs;
        float preco;

        nome = (char *)malloc(BUFFER);
        obs = (char *)malloc(BUFFER);
    
        printf("\n\Nome do produto: \n----> ");
        scanf("%s", nome);
        

        printf("\nPreço do produto: \n----> ");
        scanf("%f", &preco);
        
        
        printf("\nObservações sobre o produto: (Ex: ingredientes, quantidade...)");
        scanf("%s", obs);

        if (principal == NULL)
                principal = inicia_dados(nome, preco, obs);
        else
                principal = insere_dados(principal, nome, preco, obs);
}

void exibe(void) {

        if (!checa_vazio(principal))
                exibe_dados(principal);

}

void busca(void) {

        char *chave;

        if (!checa_vazio(principal)) {

                chave = (char *)malloc(BUFFER);

                fprintf(stdout, "Digite o nome para buscar: \\n--> ");
                scanf("%s", chave);

                busca_dados(principal, chave);
                getch();
        }
}

void deleta(void) {

        if (!checa_vazio(principal))
                principal = deleta_dados(principal);
}

int main(void) {
setlocale(LC_ALL,"portuguese");
        int escolha, volta;

        do {
                system("cls"); 
                printf("\n LANCHONETE\n\n");
                printf(" NOVA VENDA ---------- [1]\n");
                printf(" INSERIR PRODUTO ----- [2]\n");
                printf(" MOSTRAR PRODUTOS ---- [3]\n");
                printf(" BUSCAR PRODUTO ------ [4]\n");
                printf(" EXCLUIR PRODUTO ----- [5]\n");
                printf(" SAIR ---------------- [6]\n\n");
                printf("\n\nEscolha uma opcao: ");

                scanf("%d", &escolha);
                if (escolha == 1)
                                printf("EM CONSTRUÇÃO!");// Não tenho ideia do que fazer aqui
                else if(escolha == 2) 
                                insere();
            	else if (escolha ==2)
                                exibe();
                else if (escolha ==3)
                                busca();
                else if (escolha ==4)
                                deleta();
                else if (escolha ==5)
                                exit(0);
                else {
                                fprintf(stderr," Digite uma opcao valida!\\n");
                                sleep(1);
                }

      printf("\n\n Digite 1 para voltar ao menu, precione outra tecla para sair: ");   
      scanf("%d", &volta);
      
        }while(volta == 1 ); /* Loop Principal. */

        return 0;
}

Estou começando a trabalhar com essa questão de alocamento dinâmico agora e estou muito perdido. Desde já, agradeço.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

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...