Ir ao conteúdo
  • Cadastre-se

Quebrando a cabeça com esse programa em c


ramonxp

Posts recomendados

Amigos, estou batendo a cabeça com esse programa em C, o objetivo dele é:

1- Cadastrar produtos(Nome, Marca, Valor, Quantidade...)

2- Excluir um produto (escrevendo o nome dele).

3- Acusar a existência de um produto caso tente cadastrar um produto com o mesmo nome.

4- Exibir um produto (Ao digitar o nome do produto, exibir os dados sobre o mesmo (Valor, quantidade...) caso não seja especificado um nome de produto, ele deve exbir a lista com todos os produtos já cadastrados).

Qual tipo de estrutura seria utilizado? É uma lista né?

 

O programa já cadastra os produtos, e também consegue exibir os produtos cadastrados, mas não faço ideia de como criar uma regra para não permitir que seja cadastrado produto com o mesmo nome, para excluir um produto da lista, e para caso eu não escreva um nome de produto na busca, ele mostre todos os produtos.

 

 

Até agora esse é o meu "progresso" e preciso de um norte:

 

 

 

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
 
 typedef struct produto
 {
  char nome[10];
  char marca[10];
  int qtd;
  float vlr; 
 }produto;
 
produto estoque[5]; 
 
 int i=0;
 
void incluir(){
 

 printf("\nDigite o nome do produto:");
 scanf ("%s", &estoque.nome);
 fflush(stdin);
 printf("\nDigite a marca do produto:");
 scanf ("%s", &estoque.marca);
 fflush(stdin);
 printf("\nDigite a quantidade:");
 scanf ("%d", &estoque.qtd);
 fflush(stdin);
 printf("\nDigite o valor:");
 scanf ("%f", &estoque.vlr);
 fflush(stdin);
 i++;
 
 printf("\nProduto incluido com sucesso!!!\n\n\n\n");
}
 
void exibir(){
 
 for (i=0 ; i <5; i++){
  
  printf ("\n Produto %d\n", i+1);
  printf ("\n Nome: %s\n", estoque.nome);
  printf ("\n Marca: %s\n", estoque.marca);
  printf ("\n Quantidade: %d\n", estoque.qtd);
  printf ("\n Valor: %f\n", estoque.vlr);
  
  
 }
 
}
 
 
 
 
 

int main (void) {
  
  printf ("||||CONTROLE DE ESTOQUE||||\n\n\n");
  
  
  
  
 int op;
 
 do
 {
  
  printf ("ESCOLHA UMA DAS ALTERNATIVAS ABAIXO:\n"); 
  
  printf ("\n1 - Incluir Produto\n");
  printf ("2 - Excluir Produto\n");
  printf ("3 - Exibir Produtos\n");
  printf ("4 - Sair\n\n");
  scanf("%d", &op);
  
  if (op==1)
  { 
   incluir();
  }
  else if (op==2)
  {
  
  }
  
  else if (op==3)
  {
   exibir();
  }
  else if (op==4)
  {
  printf ("Finalizando o programa...\n\n");
  }
  } while (op !=4);
  
  
 

system ("Pause");
return 0;
}
 
Valeu!!
Link para o comentário
Compartilhar em outros sites

@ramonxp Você pode criar uma struct para organizar os dados, e depois criar um vetor dessa struct para percorrer, pesquisar, inserir e deletar seus produtos, veja um exemplo simples que produzi a partir do seu código:

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

#define QTD_MAX 1000

void cadastrar();
void listar();

//estrutura para armazenar os produtos
typedef struct {
   char nome[50];
   char marca[50];
   float valor;
   int quantidade;
} Produto;

Produto P[QTD_MAX]; //vetor de Produtos com limite de QTD_MAX produtos

int qtd_produtos = 0; // variável utilizada para saber qual a última posição do vetor foi preencida
// pode ser utilizada para percorrer o vetor de structs com um for para listar os produtos
// ou pesquisar dentre os produtos (busca linear).

int main( void ) {

   printf( "||||CONTROLE DE ESTOQUE||||\n\n\n" );

   int op;

   do {
      printf( "\n\nESCOLHA UMA DAS ALTERNATIVAS ABAIXO:\n" );
      printf( "\n1 - Incluir Produto" );
      printf( "\n2 - Exibir Produtos" );
      printf( "\n0 - Sair\n\n" );
      scanf( "%d", &op );

      if ( op == 1 )
      {
         cadastrar();
      }
      else if ( op == 2 )
      {
         listar();
      }

   } while ( op != 0 );

   //system( "Pause" );
   return 0;
}

void cadastrar() {

   printf( "NOME: " );
   scanf( "%s", P[qtd_produtos].nome );
// .
// .
   qtd_produtos++;

}

void listar() {
   int i;

   for ( i = 0; i < qtd_produtos; i++ ) {
      printf( "\n\n---------PRODUTO %d----------- ", i );
      printf( "\nNOME: %s", P[i].nome );
   }


}

 

Link para o comentário
Compartilhar em outros sites

 

refazendo o código, eu cheguei a esta lógica:

Só que não consegui excluir um produto da lista, nem fazer a busca escrevendo o nome do produto, e caso não escreva nada na busca do produto, ele deveria listar os produtos cadastrados, apenas listar osnprodutos cadastrados está funcionando.

/*
 
AUTOR: RAMON FERREIRA
DATA: 01/03/2016
DESCRIÇÃO: CADASTRAR, EXCLUIR, E EXIBIR PRODUTOS USANDO ESTRUTURA
 
*/
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define T 50
#define S 30
 
//ESTRUTURA TIPO PRODUTO
 typedef struct produto
  {
   char nome[10];
   char marca[10];
   int qtd;
   float vlr;
  }produto;
 

//------------------------------------------------------
 
//FUNÇÃO PARA INCLUIR PRODUTO
void inclui (produto *cad, int *ta){
 
     int i, q, tf;
   
  printf("Quantos produtos serao cadastrados ? ");
     scanf("%i",&q);
     fflush(stdin);
   
  tf = *ta + q;
   
  for (i=*ta; i<tf; i++){
         printf("\nDigite o nome do produto %i: ",i+1);
         scanf("%s",&cad.nome);
   fflush(stdin);
         printf("Digite a marca do produto: ");
         scanf("%s",&cad.marca);
         fflush(stdin);
         printf("Digite a quantidade do produto: ");
         scanf("%d",&cad.qtd);
         fflush(stdin);
         printf("Digite o valor do produto: R$");
         scanf("%f",&cad.vlr);
         fflush(stdin);
     }
   
  *ta = tf;
}
 
//----------------------------------------------------
 
//FUNÇÃO "JÁ EXISTE"?
void existe(produto *cad, int ta){
 int i, cont = 0;
 char consulta [10];
 
printf ("Digite o nome do produto a ser consultado:\n");
scanf ("%s", &consulta);
fflush(stdin);
 
 for(i=0; i<ta; i++){
  if(strcmp (cad.nome, consulta) == 0){
   cont++;
   printf("\n<<< Produto existente!! >>>:\n\a", cont);   
  }
  else
  {
  printf ("\n<<< Produto não existente >>>\n\a");
  }
 }
}
//-----------------------------------------------------
 
//FUNÇÃO PARA EXIBIÇÃO DOS PRODUTOS CADASTRADOS
void exibir(produto *cad, int ta){
 int i;
 
 if (i==0)
 
  printf("não  produtos cadastrados!!");
 
 
 else {
 for (i=0 ; i <ta; i++){
  printf ("---------------------------------\n");
  printf ("\n Produto %d\n", i+1);
  printf ("\n Nome: %s\n", cad.nome);
  printf ("\n Marca: %s\n", cad.marca);
  printf ("\n Quantidade: %d\n", cad.qtd);
  printf ("\n Valor: R$%.2f\n\n", cad.vlr);
  }
 }
 
}
 
int main (){
 
 
    system("color F9");
    produto cf[T];
    int tf = 0;
    int op;
   
    printf ("\nEstrutura de dados\n");
   printf ("\nRamon Ferreira\n");
    printf ("\n\n||||CONTROLE DE ESTOQUE||||\n\n\n");
   
     
 
//MENU PRINCIPAL
 
 do
 {
  printf ("\n---------------------------------\n");
  printf ("ESCOLHA UMA DAS ALTERNATIVAS ABAIXO:\n"); 
  
  printf ("\n1 - Incluir Produto\n");
  printf ("2 - Excluir Produto - (Ainda nãoimplementado)\n");
  printf ("3 - Consulta de Produto Existente\n");
  printf ("4 - Exibir Produtos - (não busca produto pelo nome, apenas exibe os produtos cadastrados)\n");
  printf ("5 - Sair\n\n");
  scanf("%d", &op);
  
  if (op==1)
  { 
   inclui(cf, &tf);
  }
  else if (op==2)
  {
  
  }
  
  else if (op==3)
  {
  existe(cf, tf);
  }
  else if (op==4)
  {
   exibir(cf, tf);
  }
  else if (op==5)
  {
  printf ("Finalizando o programa...\n\n");
  }
  } while (op !=5);
 
 system("pause");
   
}
  
  
VALEU!!!!
  
Link para o comentário
Compartilhar em outros sites

@ramonxp Um conselho que dou, é que você esfrie a cabeça, va tomar uma água, dormir um sono bom e amanhã você lê o resto da minha resposta e tenta refazer o exercício...



Bem, tente não fazer tudo pra só depois ir compilar. Primeiro faça a função de cadastrar. Depois que compilar e tiver tudo OK. faça a função de listar, e assim por diante.

Um detalhe é que fica mais fácil se você declarar o vetor de struct como uma variável global, deixando ela fora da função main(), assim como fiz no exemplo que te mostrei.

 

A variável que controla o numero de produtos e que vai servir pra listar os produtos, também pode ser global, pois assim facilita o acesso pelas funções cadastrar, listar e pesquisar.

Também vi que você teve uma dificuldade em utilizar struct, eis aqui um exemplo de como passar uma struct por parâmetro:

 

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

#define TAM 10

typedef struct { /*estrutura a ser gravada no arquivo */
  int n;
} numeros;


int main() {
  numeros v[TAM];

  preenche_vetor_struct(v, TAM);
  imprime_vetor_struct(v, TAM);

  system("pause");
  return 0;
}

void preenche_vetor_struct(numeros *v, int tam) {
  int i;

  for (i = 0; i < tam; i++)
    v[i].n = i;

}

void imprime_vetor_struct(numeros *v, int tam) {
  int i;

  for (i = 0; i < tam; i++)
    printf("%d ", v[i].n);

}


E a última dica que te dou é uma dica que funciona comigo. Tente refazer o código todo do zero, busque fazer o programa por partes. Não tente fazer o programa todo de uma vez, ou até mesmo uma parte grande, pois quando der essa montanha de erros que o seu código deu, você vai ficar desestimulado.






 

Link para o comentário
Compartilhar em outros sites

Mas minha struct está fora do main ué.

 

O programa cadastra produto, exibe os produtos cadastrados, e a função de mostrar se um produto que digitei o nome já existe estão funcionando, só falta eu criar uma função para excluir e uma pra buscar apenas um produto específico pelo nome.

Link para o comentário
Compartilhar em outros sites

@CiroboyBR Compilei, e está funcionando, o que não consigo fazer é excluir um produto cadastrado, e a opção de busca tem que ser o seguinte: Digitar o nome do produto a ser consultado, caso não seja digitado nada, exibir uma lista com os produtos já cadastrados. (exibir a lista com produtos cadastrados ele também já faz).

Link para o comentário
Compartilhar em outros sites

DEV C ++, vou colar o código novamente, que acabei de compilar de novo, e só fiz copiar e colar aqui agora:

/*
 
AUTOR: RAMON FERREIRA
DATA: 01/03/2016
DESCRIÇÃO: CADASTRAR, EXCLUIR, E EXIBIR PRODUTOS USANDO ESTRUTURA
 
*/
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define T 50
//#define S 30
 
//ESTRUTURA TIPO PRODUTO
 typedef struct produto
  {
   char nome[10];
   char marca[10];
   int qtd;
   float vlr;
  }produto;
 

//------------------------------------------------------
 
//FUNÇÃO PARA INCLUIR PRODUTO
void inclui (produto *cad, int *ta){
 
     int i, q, tf;
   
  printf("Quantos produtos serao cadastrados ? ");
     scanf("%i",&q);
     fflush(stdin);
   
  tf = *ta + q;
   
  for (i=*ta; i<tf; i++){
         printf("\nDigite o nome do produto %i: ",i+1);
         scanf("%s",&cad.nome);
   fflush(stdin);
         printf("Digite a marca do produto: ");
         scanf("%s",&cad.marca);
         fflush(stdin);
         printf("Digite a quantidade do produto: ");
         scanf("%d",&cad.qtd);
         fflush(stdin);
         printf("Digite o valor do produto: R$");
         scanf("%f",&cad.vlr);
         fflush(stdin);
     }
   
  *ta = tf;
}
 
//----------------------------------------------------
 
//FUNÇÃO "JÁ EXISTE"?
void existe(produto *cad, int ta){
 int i, cont = 0;
 char consulta [10];
 
printf ("Digite o nome do produto a ser consultado:\n");
scanf ("%s", &consulta);
fflush(stdin);
 
 for(i=0; i<ta; i++){
  if(strcmp (cad.nome, consulta) == 0){
   cont++;
   printf("\n<<< Produto existente!! >>>:\n\a", cont);   
  }
  else
  {
  printf ("\n<<< Produto nao existente >>>\n\a");
  }
 }
}
//-----------------------------------------------------
 
//FUNÇÃO PARA EXIBIÇÃO DOS PRODUTOS CADASTRADOS
void exibir(produto *cad, int ta){
 int i;
 
 if (i==0)
 
  printf("Nao ha produtos cadastrados!!");
 
 
 else {
 for (i=0 ; i <ta; i++){
  printf ("---------------------------------\n");
  printf ("\n Produto %d\n", i+1);
  printf ("\n Nome: %s\n", cad.nome);
  printf ("\n Marca: %s\n", cad.marca);
  printf ("\n Quantidade: %d\n", cad.qtd);
  printf ("\n Valor: R$%.2f\n\n", cad.vlr);
  }
 }
 
}
 
int main (){
 
 
    system("color F9");
 
    produto pr[T];
    int tf = 0;
    int op;
   
    printf ("\nEstrutura de dados\n");
    printf ("\nRamon Ferreira\n");
    printf ("\n\n||||CONTROLE DE ESTOQUE||||\n\n\n");
   
     
 
//MENU PRINCIPAL
 
 do
 {
  printf ("\n---------------------------------\n");
  printf ("ESCOLHA UMA DAS ALTERNATIVAS ABAIXO:\n"); 
  
  printf ("\n1 - Incluir Produto\n");
  printf ("2 - Excluir Produto - (Ainda nao implementado)\n");
  printf ("3 - Consulta de Produto Existente\n");
  printf ("4 - Exibir Produtos - (Nao busca produto pelo nome, apenas exibe os produtos cadastrados)\n");
  printf ("5 - Sair\n\n");
  scanf("%d", &op);
  
  if (op==1)
  { 
   inclui(pr, &tf);
  }
  else if (op==2)
  {
  
  }
  
  else if (op==3)
  {
  existe(pr, tf);
  }
  else if (op==4)
  {
   exibir(pr, tf);
  }
  else if (op==5)
  {
  printf ("Finalizando o programa...\n\n");
  }
  } while (op !=5);
 
 system("pause");
   
}
 
 
Link para o comentário
Compartilhar em outros sites

@ramonxp Cara, seu compilador é milagroso, porque o meu não compila... Bem, eu fiz umas modificações para que seu código compilasse, aconselho você a implementar a função excluir em cima desse código:

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define T 50
#define S 30

//ESTRUTURA TIPO PRODUTO
typedef struct produto
{
   char nome[10];
   char marca[10];
   int qtd;
   float vlr;
} produto;

int ta = 0; //Isso é uma variável GLOBAL!!! Se mexer nela Deus manda degolar...

//------------------------------------------------------

void exibir( produto *cad );
void inclui( produto *cad );

int main() {
   system( "color F9" );
   produto cf[T];  // <<-- Isso é vetor de estrutura, e ela é uma variável local,
                   //pra ser global tem que estar fora da main
   int op;

   printf( "\nEstrutura de dados\n" );
   printf( "\nRamon Ferreira\n" );
   printf( "\n\n||||CONTROLE DE ESTOQUE||||\n\n\n" );

//MENU PRINCIPAL
   do {
      printf( "\n---------------------------------\n" );
      printf( "ESCOLHA UMA DAS ALTERNATIVAS ABAIXO:\n" );
      printf( "\n1 - Incluir Produto\n" );
      printf( "2 - Excluir Produto - (Ainda nãoimplementado)\n" );
      printf( "3 - Consulta de Produto Existente\n" );
      printf( "4 - Exibir Produtos - (não busca produto pelo nome, apenas exibe os produtos cadastrados)\n" );
      printf( "5 - Sair\n\n" );
      scanf( "%d", &op );

      if ( op == 1 ) {
         inclui( cf );
      }
      else if ( op == 2 ) {
      }
      else if ( op == 3 ){
      }
      else if ( op == 4 )
      {
         exibir( cf );
      }
      else if ( op == 5 )
      {
         printf( "Finalizando o programa...\n\n" );
      }
   } while ( op != 5 );
   system( "pause" );
}

//FUNÇÃO PARA INCLUIR PRODUTO
void inclui( produto *cad ) {

   int i, q, tf;

   printf( "Quantos produtos serao cadastrados? " );
   scanf( "%d", &q );
   fflush( stdin );

   tf = ta + q;

   for ( i = ta; i < tf; i++ ) {
      printf( "\nDigite o nome do produto %i: ", i + 1 );
      scanf( "%s", cad[i].nome );
      fflush( stdin );
      printf( "Digite a marca do produto: " );
      scanf( "%s", cad[i].marca );
      fflush( stdin );
      printf( "Digite a quantidade do produto: " );
      scanf( "%d", &cad[i].qtd );
      fflush( stdin );
      printf( "Digite o valor do produto: R$" );
      scanf( "%f", &cad[i].vlr );
      fflush( stdin );
   }
   ta = tf;
}

//-----------------------------------------------------

//FUNÇÃO PARA EXIBIÇÃO DOS PRODUTOS CADASTRADOS
void exibir( produto *cad ) {
   int i;

   if ( i == 0 )
      printf( "não há produtos cadastrados!!" );
   else {
      for ( i = 0 ; i < ta; i++ ) {
         printf( "---------------------------------\n" );
         printf( "\n Produto %d\n", i + 1 );
         printf( "\n Nome: %s\n", cad[i].nome );
         printf( "\n Marca: %s\n", cad[i].marca );
         printf( "\n Quantidade: %d\n", cad[i].qtd );
         printf( "\n Valor: R$%.2f\n\n", cad[i].vlr );
      }
   }
}

 

 

Link para o comentário
Compartilhar em outros sites

@ramonxp Se a variável produto pr[T] for global, você não vai ter necessidade de ficar passando a struct por parâmetro nas funções.

Você pode implementar a função excluir mesmo que a variável "pr[|T]", seja local! Se seu professor não exige que a struct seja passada por parâmetro nas funções, fica mais simples usar o vetor "pr[|T]", como sendo uma variável global.

Link para o comentário
Compartilhar em outros sites

Bom, se no exercício não tem falando que tem q ser passada por parâmetro nas funções, então não é exigido kkkk mas foi o jeito que consegui fazer as outras coisas, talvez, não seja a logica correta, agora, quanto a remover um elemento do vetor struct, o bicho pega aí, nem sei como começar.

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