Ir ao conteúdo
  • Cadastre-se

C Problemas no meu codigo C (!!erros42!!)


Celsofc

Posts recomendados

/* Incluindo Blibiotecas que  serão necessárias para o programa */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <time.h>



    char op; /* Variável global para capturar no qual gerencia o usuario quer entrar */

    void getch(){
    	system("read b");
    }

    /* Estrutura do tipo de 'Endereço' */
    typedef struct{
 	   char logradouro[10];
	   char complemento[20];
	   char cep[10];
	   char bairro[20];
	   char cidade[20];
	   char estado[3];
    }End;

   /* Estrutura do tipo 'Cliente' junto com a estrutura de 'Endereço' */
    typedef struct{
   	    int  codigo;
  	    char nome[30];
	    char cnpj[20], cpf[20];
	    char telefone[20];
	    End  endereco;
    }Cli;

    /* Estrutura do Tipo Produto */
   typedef struct{
    	int   codigo;
    	char  nome[30];
    	char  fornecedor[30];
    	char  categoria[30];
    	int   quant;
    	float valorUnit;
    }Prod;

    /* Estrutura do tipo 'Pedido' junto com as estruturas 'Cliente' e 'Produto' */
    typedef struct{
    	int      codigo;
    	int      dia;
    	int      mes;
    	int      ano;
    	Cli  clienteQuePediu;
    	Prod *produtoPedido;
    	int     *qdtProdutoPedido;
    	int      qdt;
    }Ped;

    /* Declaração da função 'Menu', que irá gerenciar o funcionamanto do programa */
    void menu();

    /* Declaração das funções que gerencia as ações relacionadas com os 'Clientes' */
    void gerenciaDeClientes(Cli*, int*, FILE*); 
	     Cli cadastrarCliente(Cli, int);
    void listarCliente(Cli*, int);
    void ordenarClientePorOrdemAlfabetica(Cli*, int);
    void buscarCliente(Cli*, int);
    void atualizarCliente(Cli*, int);
    void excluirCliente(Cli*, int*);
    void imprimirCliente(Cli);

    /* Declaração das funções que gerencia as ações relacionamentos aos 'Produtos' */
    void gerenciaDeProdutos(Prod*, int*, FILE*); 
	     Prod cadastrarProduto(Prod, int);
    void listarProdutosCadastrados(Prod*, int);
    void ordenarProdutoPorNome(Prod*, int);
    void filtrarCategoria();
    void atualizarProdutoCadastrado(Prod*, int);
    void atualizarEstoqueProduto(Prod*,int);
    void imprimirProduto(Prod);

    /* Declaração das funções que gerencia as ações relacionamento aos 'Pedidos' */
    void gerenciaDePedidos(Ped*, Cli*, Prod*, int*,int, int);
    void cadastrarPedido(Ped*, Cli*, Prod*, int*,int, int);
    void obterData(Ped*);
    void listarPedidosDeUmCliente(Ped*, int);
    void ordenarPedidosPorData(Ped*, int);
    void listarPedidosDeUmDia(Ped*, int);
    void ordenarPorNomeDoCliente(Ped*, int);
    void imprimirPedido(Ped);

     /*Função Principal*/
    int main(){
	FILE    *arquivo; /* Decçaração de um Arquivo */
	Prod *produto; /* Declaração de um ponteiro para a estrutura 'Produto' */
    Cli *cliente; /* Declaração de um ponteiro para a estrutura 'Cliente' */
    Ped  *pedido;  /* Declaração de um ponteiro para a estrutura 'Pedido'  */
    int contCliente = 0, contProduto = 0, contPedido = 0, /* Inicializando os contadores em '0' */

    /*Alocando na memória para os ponteiros */
    produto = calloc(10, sizeof(Prod));
    cliente = calloc(10, sizeof(Cli));
    pedido  = calloc(10, sizeof(Ped));
    
    /* Chamada da função 'Menu' */
    menu();

    do{ /*ciclo que irá controlar o funcionamaneto do programa */
        switch(op){
        	case 'C':
        	case 'c':
    	    	gerenciaDeClintes(cliente, &contCliente, arquivo);
    	    	break;
    		
        	case 'P':
        	case 'p':
    	    	gerenciaDeProdutos(produto, &contProduto, arquivo);
    	    	break;	
    		
        	case 'E':
        	case 'e':
    		    gerenciaDePedidos(pedido, cliente, produto, &contPedido, contCliente, contProduto);
    	    	break;
			
	    	case 'S':
        	case 's':
    	    	exit(1);
		
		    default:
		        printf(" COMANDO INVADILO!!\n Entre com o comando Novamnte\n");
		        sleep(3);
		        system("clear");
		        menu();
					
    	   }
        }while(1);
   
        return 0;
    }/* Fim da função principal*/

    /* Código da função 'Menu' */
    void menu(){

    	printf("=======Menu de Gerenciamento=======\n");
    	printf("C - Gerenciar Clientes\n");
    	printf("P - Gerenciar Produtos\n");
    	printf("E - Gerenciar Pedidos\n");
    	printf("S - Sair\n");
    	printf("Digite um Comando para Prosseguir: ");
    	scanf(" %c",&op);
    	system("clear");	
    }

    /* Código da função que gerencia os Clientes */
    void gerenciaDeClientes(Cli *cliente, int *contCliente, FILE *arquivo){
    	char opcao;
	
    	do{
	        printf("=======Gerenciar Clientes=======\n");
        	printf("C - Cadastrar Cliente\n");
        	printf("L - Listar Clientes Cadastrados\n");
        	printf("B - Buscar Cliente Cadastrado\n");
        	printf("A - Atualizar Cliente Cadastrado\n");
        	printf("B - Excluir Cliente Cadastrado\n");
        	printf("Digite um Comando para Prosseguir: ");
        	scanf(" %c",&opcao);
        	system("clear");
		
	    	switch(opcao){
	    		case 'C':
	    		case 'c':
				arquivo = fopen("Força de Vendas.txt,","a+");
				if(arquivo == NULL){
					printf("Não foi possivel abrir o arquivo.");
					return;
				}
				
				printf("===== Cadastro de Cliente=====\n");
				cliente[*contCliente] = cadastrarCliente(cliente[*contCliente], 0);
				
				fprinf(arquivo, "  %d; %s; %s; %s; %s; %s; %s; %s; %s; %s; %s\n",
				cliente[*contCliente].codigo, cliente[*contCliente].nome, cliente[*contCliente].cnpj, cliente[*contCliente].cpf,
				cliente[*contCliente].telefone, cliente[*contCliente].endereco.logradouro,
				cliente[*contCliente].endereco.complemento, cliente[*contCliente].endereco.cep,
				cliente[*contCliente].endereco.bairro, cliente[*contCliente].endereco.cidade,
				cliente[*contCliente].endereco.estado);
				fclose(arquivo);
				
				*contCliente+=1;
				if(*contCliente == 10)
				    cliente = realloc(cliente, (*contCliente +1) * sizeof(Cli));
				break;
				
				case 'L':
				case 'l':
					listarCliente(cliente, *contCliente);
					break;
					
				case 'B':
				case 'b':
					buscarCliente(cliente, *contCliente);
					break;
					
				case 'A':
				case 'a':
					atualizarCliente(cliente, *contCliente);
					break;
					
				case 'E':
				case 'e':
					excluirCliente(cliente, *contCliente);
					break;
					
				default:
					printf("   !!OPCAO INVALIDA!!\n Digite novamente outra Opcao\n");
					sleep(3);
					system("clear");
					continue;
					
	    	}
	    	break;
	    }while(1);
    }

    /* Função que Cadastra um Cliente */
    Cli cadastrarCliente(Cli cliente, int identificador){
    	char opcao;
    	char codigoCliente[10];
	
    	do{
	    	printf("Codigo do Clienete: ");
	    	scanf(" %s", codigoCliente);
		
	    	cliente.codigo =atoi(codigoCliente);
    		if(identificador == 0){
    			if(cliente.codigo == 0){
	    	    	printf("\n !!CODIGO INVADIDO!!\n Apenas numeros para o Codigo\n");
	    	    	sleep(3);
	    	    	system("clear");
	    	    	printf("=====Cadastro de Cliente=====\n");
	    	    	continue;
	        	}
	       }
	       else{
	        	if(cliente.codigo == 0 && strlen(codigoCliente) > 0){
	    	    	printf("!!CODIGO INVALIDO!!\n Apenas Numeros para o Codigo\n");
	    	    	sleep(3);
			        system("clear");
		        	continue;
	        	}
     	}
    	break;
    }while(1);
    printf("Nome do Cliente: ");
    scanf(" %[^\n]s", cliente.nome);
    do{
    	printf("Pessoa: Fisica(F), Juridica(J): ");
    	scanf("%c", &opcao);
    	switch(opcao){ /* swith case para determinar qual indentificador do Usuário */	
    		case 'F':
    		case 'f':
    			printf("CPF do Cliente: ");
    			scanf(" %[^\n]", cliente.cpf);
    			break;
    			
    		case 'J':
    		case 'j':
    			printf("CNPJ do Cliente: ");
    			scanf(" %[^\n]", cliente.cnpj);
    			break;
				
			default:
		    	printf("\n                  !!ATENCAO!!\n Digite (F) para pessoa Fisica ou (J) para pessoa Juridica\n\n");
		    	continue;
				
	    	}
	    	break;		
    	}while(1);
    	printf(" Telefone do Cliente: ");
    	scanf(" %[^\n]s",cliente.telefone);
	    printf("\n Endereco do Cliente: ");
	    scanf(" %[^\n]s", cliente.endereco);
	    printf("\n Logradouro: ");
	    scanf(" %[^\n]s", cliente.endereco.logradouro);
	    printf("\n Complemento: ");
	    scanf(" %[^\n]s", cliente.endereco.complemento);
	    printf("\n CEP: ");
	    scanf(" %[^\n]s", cliente.endereco.cep);
	    printf("\n Bairro: ");
	    scanf(" %[^\n]s", cliente.endereco.bairro);
	    printf("\n Cidade: ");
	    scanf(" %[^\n]s", cliente.endereco.cidade);
	    printf("\n Estado: ");
	    scanf(" %[^\n]s", cliente.endereco.estado);
	    
	    if(identificador == 0){
	    	printf("\n Cadastro Realizado Com Sucesso!\n");
	    	sleep(3);
			system("clear");
			menu;	
		}	
	    return cliente;  
    }

    /*Função que lista um cliente selecionado */
    void listarCliente(Cli *cliente, int contCliente){
    	int i;
	
    	if(contCliente == 0){
    		printf("         !!ERRO!!\n Nenhum Cliente Cadastrado\n");
    		sleep(3);
    		system("clear");
    		menu;
	    	return;
	   }
	   
    	/* A função irá ordenar os Clientes em ordem Alfabética */
    	ordenarClientePorOrdemAlfabetica(cliente, contCliente);
	
	
    	printf("Lista de Clientes Cadastrados\n\n ");
    	for(i=0; i<contCliente; i++) /*Ciclo que procura e imprime um Cliente */
            imprimirCliente(cliente[i]);
       
       
        getch();
        system("clear");
    
        menu(); /* Chamando a função 'Menu' ao final da função 'ListaCliente' */
    }
 
    /* Códio da função que ordena os Clientes em Ordem  alfabetica */
    void ordenarClientePorOrdemAlfabetica(Cli *cliente, int contCliente){ /* algoritmo de oedenaçãp foi usado o insertion sort */
    	int i, j, marcador;
    	Cli aux;
			
    	for(i=1; i<contCliente; i++){ 
		    aux = cliente[i];
		    j = i-1;
		    do{
		    	marcador = 0;
		    	if(strcmp(cliente[j].nome, aux.nome) > 0){
		    		cliente[j+1] = cliente[j];
		    		j--;
		    		marcador = 0;
		    	}
		    	if(j < 0)
		    	marcador = 0;
			
	     	}while(marcador);
		
	    	cliente[j+1] = aux;
	    }
    }

    /*Função que imprime os dados do Cliente passando por parâmetros */
    void imprimirCliente(Cli cliente){
    	printf("Codigo: %d\n", cliente.codigo);
    	printf("Nome: %s\n", cliente.nome);
    	if(strlen(cliente.cnpj) == 0);
	        printf("CPF: %s\n", cliente.cpf);
	    
	        printf("CNPJ: %s\n", cliente.cnpj);
	        printf("Telefone: %s\n", cliente.telefone);
	        printf("Endereco: Logradouro %s / Complemento %s\n", cliente.endereco.logradouro, cliente.endereco.complemento);
            printf("CEP: %s\n", cliente.endereco.cep);
            printf("Bairro: %s\n", cliente.endereco.bairro);
            printf("Cidade: %s\n", cliente.endereco.cidade);
            printf("Estado: %s\n", cliente.endereco.estado);
    } 


    /* Função que Busca um Cliente Selecionado */
    void busucarCliente(Cli *cliente, int contCliente){
    	int i, marcador=0;
    	int codigoCliente;
    	char nomeCliente[30];

    	printf(" Digite o Nome ou Codigo do Cliente que deseja Buscar: ");
    	scanf(" %[^\n]s", nomeCliente);
    	printf("\n");
    	codigoCliente = atoi(nomeCliente);
	
    	for(i=0; i<contCliente; i++){
	    	if(cliente[i].codigo == codigoCliente || strcmp(cliente[i].nome, nomeCliente) == 0){
	    		imprimirCliente(cliente[i]);
	    		getch();
	    		marcador = 1;
	    		break;
	    	}
    	}   	
    	if(!marcador){
    		printf("        !!ERRO!!\n Cliente nao Cadastrado\n");
    		sleep(3);
    	}
	
    	sytem("clear");
	
    	menu(); /* Chamando a função 'Menu' depois de ter Buscado um Cliente */
    }
	
    /* Função que busca e atualiza os dados de Cliente */
    void atualizaCliente(Cli *cliente, int contCliente){
    	int codigo, i, marcador = 0;
    	Cli aux;
    	char codigoCliente[10];
	
    	do{
	    	printf("Codigo do Cliente que deseja Atualizar: ");
	    	scanf(" %s", contCliente);
		
		    codigo = atoi(codigoCliente);
	    	if(codigo == 0){
	    		printf("\n !!ERRO!! \n Apenas numeros para o Codigo\n");
	    		sleep(3);
	    		system("clear");
	    		continue;
	    	}
	    	break;
    	}while(1);
	
	    for(i=0; i<contCliente; i++){
	    	if(cliente[i].codigo == codigo){
	    		marcador = 1;
	    		break;
	    	}
    	}
    	
    	if(!marcador)
    	    printf("\n !!ERRO!! \n Cliente nao cadastrador\n");
	    
    	else{
    		printf("\n Entre com os Dados Atualizados\n");
    		aux = cadastrarCliente(aux, -1);
		
	    	if(aux.codigo > 0)
	    	       cliente[i].codigo, aux.codigo;
	    	if(strlen(aux.nome) > 0)
	    	       strpy(cliente[i].nome, aux.nome);
	    	if(strlen(aux.cpf) > 0)
	    	       strpy(cliente[i].cpf, aux.cpf);
	    	if(strlen(aux.cnpj) > 0)
	    	       strpy(cliente[i].cnpj, aux.cnpj);
	    	if(strlen(aux.telefone) > 0)
	    	       strpy(cliente[i].telefone, aux.telefone);
	    	if(strlen(aux.endereco.logradouro) > 0)
	    	       strpy(cliente[i].endereco.logradouro, aux.endereco.logradouro);
	    	if(strlen(aux.endereco.complemento) > 0)
	    	       strpy(cliente[i].endereco.complemento, aux.endereco.complemento);
	    	if(strlen(aux.endereco.cep) > 0)
	    	       strpy(cliente[i].endereco.cep, aux.endereco.cep);
	    	if(strlen(aux.endereco.bairro) > 0)
	    	       strpy(cliente[i].endereco.bairro, aux.endereco.bairro);
	    	if(strlen(aux.endereco.cidade) > 0)
	 	           strpy(cliente[i].endereco.cidade, aux.endereco.cidade);
		    if(strlen(aux.endereco.estado) > 0)
		           strpy(cliente[i].endereco.estado, aux.endereco.estado);
		       
	    	printf("\n Cliente Atualizado Com Sucesso\n");	
    	}
    	
     	sleep(3);
    	system("clear");
	
    	menu(); /* Chama a função 'Menu' ao final da função Atualizada */  
    
	}

    /*Função que exclui um Cliente selecionado*/
    void excluirCliente(Cli *cliente, int *contCliente){
    	int codigo, i, marcador=0;
	
    	printf("Codigo do Cliente que deseja Excluir: ");
    	scanf(" %d", &codigo);
	
    	for(i=0; i<*contCliente; i++){ /* Laço que verifica se o cliente existe */
    	    if(cliente->codigo == codigo){
    	    	marcador = 1;
    	    	break;
    		}
    	}
    	
    	if(!marcador)
    	    printf("\n         !!ERRO!! \n Cliente nao Cadastrado");
	    
    	else{ /* Se existi, o cliente será Sobrescrito e será excluido */
    		for(i; i<*contCliente; i++)
    		    cliente[i] = cliente[i+1];
		    
    		*contCliente -=1;
       	    	printf("\n Cliente Excluido com Sucesso\n");
    	}
	
    	sleep(2);
	    system("clear");
	
    	menu(); /* Chamando a função 'Menu' ao final da função ExcluirCliente */	
   
    }
  
    /* Código da função que gerencia as ações relacionadas aos produtos */
    void gerenciamentoDeProdutos(Prod *produto, int* contProduto, FILE *arquivo){
    	char opcao;
 	
    	do{
     	   printf("============== Gerenciamento de Produtos ==============\n");
    	   printf("C - Cadastrar um Produto\n");
    	   printf("L - Listar todos os Produtos Cadastrados\n");
    	   printf("B - Buscar Produto ja Cadastrados\n");
    	   printf("A - Atualizar um Produto Cadastrado\n");
     	   printf("S - Atualizar estoque de um Produto\n");
     	   printf("\n Digite uma opcao para Prosseguir\n");
    	   scanf(" %c%*c", &opcao);
    	   system("clear");
 	   
 	       switch(opcao){
 	        	case 'C':
 	         	case 'c':
            	   arquivo = fopen("Força de Vendas.txt", "a+");
 	               if(arquivo == NULL) {
 	       	        	printf("Nao foi possivel abrir o arquivo");
 	       	        	return;
			    	}
				
			    	printf("========== Cadastro de Produtos\n");
			    	produto[*contProduto] = cadastrarProduto(produto[*contProduto], 0);
				
				
			    	fprintf(arquivo, "%d; %s; %s; %s; %d; %.2f\n"), produto[*contProduto].codigo,
			    	produto[*contProduto].nome, produto[*contProduto].fornecedor, produto[*contProduto].categoria,
			    	produto[*contProduto].quant, produto[*contProduto].valorUnit;
			    	fclouse(arquivo);
				
			    	*contProduto +=1;
			    	if(*contProduto == 10)
			    	    produto = realloc(produto, (*contProduto+1) * sizeof(Prod));
			    	break;
				
		    	case 'L':
		    	case 'l':
		    	    listarProdutosCadastros(produto, *contProduto);
		    	    break;
				  
		        case 'B':
		    	case 'b':
		    	    buscarProdutoCadastro(produto, *contProduto);
		    	    break;				
				  
		    	case 'A':
		    	case 'a':
		    	    atualizarProdutoCadastro(produto, *contProduto);
		    	    break;
				  
		    	case 'S':
		    	case 's':
		    	    atualizarEstoqueCadastro(produto, *contProduto);
			        break;
				  
		    	default:
			        printf("     !!OPCAO INVALIDA!!\n Digite novamente outra Opcao\n");
				    sleep(3);
				    system("clear");
				    continue;	  
		    }
		        break;
	    }while(1);
    }
  
  
    /* Código da função de Cadastro de um Produto */
    Prod  cadastrarProduto(Prod produto, int identificador){
    	char aux[15];
 	
 	     do{
 	       	printf("Codigo do Produto: ");
 	    	scanf(" %10s", aux);
 	     	produto.codigo = atoi(aux);
 	    	if(identificador == 0){
 	    	    if(produto.codigo == 0){
 		        	printf("\n !!CODIGO INVALIDO!! \n Apenas numeros para Codigo\n");
 		        	sleep(2);
 		        	system("clear");
 		         	printf("============ Cadastro de Produtos ===========\n");
 		        	continue;
                }
            }
            else{
	        	if(produto.codigo == 0 && strlen(aux) > 0){
	            	printf("\n !!CODIGO INVAVIDO \n Apenas numeros para Codigo\n");
	    	    	sleep(3);
	            	system("clear");
	    	    	continue;
	   	       }
	        }
	        break;
        }while(1);
        printf("Nome do Produto: ");
        scanf(" %[^\n]s", produto.nome);
        printf("Fornecedor: ");
        scanf(" %[^\n]s", produto.fornecedor);
        printf("Categoria: ");
        scanf(" %[^\n]s",produto.categoria);
         if(identificador == 0){
        	printf("Quantidade: ");
        	scanf(" %s", &produto.quant);
       }
       do{
        	printf("Valor Unitario: ");
        	scanf(" %s", aux);
        	produto.valorUnit = atof(aux);
            	if(identificador == 0){
                	if(produto.valorUnit == 0){
        	    	printf("\n !!VALOR UNITARIO INVALIDO!! \n Apenas Numeros para  valor  Unitario\n");
        	    	sleep(3);
        	    	system("clear");
 	            	continue;
   	           }
            }
            else{
            	if(produto.valorUnit == 0 && strlen(aux) > 0){
            		printf("\n !!VALOR UNITARIO INVALIDO!! \n Apenas numeros para valor Unitario\n");
            		sleep(3);
            		system("clear");
            		continue;
           	   }
            }
            break;
        }while(1);
    
        if(identificador == 0){
        	printf("\n Porduto cadastrado com Sucesso\n");
        	sleep(3);
        	system("clear");
        	menu();
    	}
    	
    	return produto;
    }

    /* Função que Lista os Produtos que estão Cadastrados */
    void listarProdutosCadastrados(Prod *produto, int contProduto){
    	char filtar;
	
        /* Chamando função para Ordenar Produtos por Nome */
        ordenarProdutoPorNome(produto, contProduto);
    
        printf("Deseja Filtar por Categoria [S/N]: ");
    
        switch(filtar){ /* Switch Case para verificar com o usuário se deseja Listar os Produtos */
        	case 'S':
        	case 's':
        		filtarCategoria(produto, contProduto);
        		break;
    	
	    	case 'N':
        	case 'n':{
    	    	int i;
    	    	printf("\n");
    	    	if(contProduto > 0){
    		    	for(i=0; i<contProduto; i++)
    		        	imprimirProduto(produto[i]);
    		        getch();	
		    	}
		    	else{
		    		printf("\n           !!ERRO!! \n Nenhum Cliente Cadastrado\n");
		    		sleep(3);
		    	}
		    	break;
        	}
        }
    
        system("clear");
    
        menu(); /* Chamando a Função 'Menu' */
    }

    /* Função que Filtra a categoria do Produto para Imprimir-lo */
    void filtarCategoria(Prod *produto, int contProduto){
    	int i, j=0, indiceMesmaCategoria[30];
    	char categoria[30];
	
    	printf("Deseja visualizar os Produtos de qual Categoria: ");
    	scanf(" %s", categoria);
    	printf("\n");
	
    	for(i=0; i<contProduto; i++){
    		if(strcmp(produto[i].categoria, categoria) ==0)
    		    indiceMesmaCategoria[j++] = i;
    	}
    	
    	if(!j){
	    	print("\n      !!ERRO!! \n Categoria nao Cadastrada\n");
	    	sleep(3);
    	}
	
    	else{
	    	for(i=0; i<j; i++)
	    	    imprimirProduto(produto[indiceMesmaCategoria[i]]);
		    
	    	getch();    
    	}
    	
    }

    /*função que Ordena Produtos por Nome */
    void ordenarProdutoPorNome(Prod *produto, int contProduto){
    	int i, j, marcador;
    	Prod aux;
	
    	for(i=1; i<contProduto; i++){
    		aux = produto[i];
    		j = i-1;
    		do{
    			marcador = 0;
		    	if(strcmp(produto[j].nome, aux.nome) > 0){
			    	produto[j+1] = produto[j];
			    	j--;
			    	marcador = 1;
		    	}
		    	if(j < 0)
		    	    marcador = 0;
			    
		    }while(marcador);
		
		    produto[j+1] = aux;
    	}
    }

    /* Função que busca um Produto Cadastrado */
    void buscarProdutoCadastrado(Prod *produto, int contProduto){
    	int codigoProduto;
    	char nomeProduto[30];
    	int i, marcador = 0;
	
    	printf("Digite o Nome do Produto que deseja Buscar: ");
    	scanf(" %[^\n]s", nomeProduto);
    	printf("\n");
	
    	codigoProduto = atoi(nomeProduto);
    	
    	for(i=0; i<contProduto; i++){ /* Laço que Busca e imprime o Produto solicitado pelo usuário */
    	    if(produto[i].codigo == codigoProduto || strcmp(produto[i].nome, nomeProduto) == 0){
	        	imprimirProduto(produto[i]);
	        	marcador=1;
	        	getch();
	        	break;
	    	}
    	}
    	if(!marcador){
    		printf("        !!ERRO!! \n Produto nao Cadastrado!!\n");
    		sleep(3);
    	}
	
    	system("clear");
	
    	menu(); /* Chamando a função 'Menu' */
	
    }

    /* Função que Imprime um Produto */
    void imprimirProduto(Prod produto){
    	printf("Codigo: %d\n", produto.codigo);
    	printf("Nome: %s\n", produto.nome);
    	printf("Categoria: %s\n", produto.categoria);
    	printf("Fornecedor: %s\n", produto.fornecedor);
    	printf("Quantidade: %d\n", produto.quant);
    	printf("Valor Unitario: %.2f\n\n", produto.valorUnit);
	
}

    /* Função que atualiza um Produto já Cadastrado */
    void AtualizarProdutoCadastrado(Prod *produto, int contProduto){
    	Prod aux;
    	int i, marcador=0;
	
    	printf("Digite o Codigo do Produto que deseja Atualizar: ");
    	scanf(" %d", &aux.codigo);
	
    	for(i=0; i<contProduto; i++){
    		if(produto[i].codigo == aux.codigo){
    			marcador=1;
    			break;
    		}
    	}
    	
    	if(!marcador)
    	printf("\n             !!ERRO!! \n Produto nao Cadastrado!!!\n");
	
    	else{
    		printf("\n Entre com os Dados Atualizados\n");
    		aux = cadastrarProduto(aux, -1);
 		
    		if(aux.codigo > 0)
    		    produto[i].codigo = aux.codigo;
    		    
    		if(strlen(aux.nome) > 0)
	    	    strcpy(produto[i].nome, aux.nome);
	    	    
	    	if(strlen(aux.fornecedor) > 0)
	    	    strcpy(produto[i].fornecedor, aux.fornecedor);
	    	    
	    	if(strlen(aux.categoria) > 0)
	    	    strcpy(produto[i].categoria, aux.categoria);
	    	    
	    	if(aux.valorUnit > 0)
	    	    produto[i].valorUnit = aux.valorUnit;
		    
	    	printf("\n Produto Atualizado Com Sucesso\n");		
	    }
	
    	sleep(3);
    	system("clear");
	
     	menu(); /*Chamando a função 'Menu' */
    
	}

    /* Função que atualiza o estoque de um Produto */
    void atualizarEstoqueDeProduto(Prod *produto, int contProduto){
    	int codigo, i, marcador=0;
	
    	printf("Digite o Codigo do Produto que tera seu estoque atualizado: ");
    	scanf(" %d", &codigo);
	
    	for(i=0; i<contProduto; i++){
    		if(produto[i].codigo == codigo){
		    	printf("Digite o estoque a ser atualizado: ");
		    	scanf(" %d", &produto[i].quant);
		    	marcador=1;
		    	printf("\n Estoque Atualizado com Sucesso\n");
		    	break;
	    	}
    	}
    	if(!marcador)
	    printf("\n             !!ERO!! \n Produto nao Cadastrado\n");
	
	
    	sleep(3);
    	system("clear");
	
    	menu(); /* Chamada da função 'Menu' */
	
    } 

    /* Código da função que gerencia as ações relacionadas a Pedidos */
    void gerenciadorDePedidos(Ped *pedido, Cli *cliente, Prod *produto, int *contPedido, int contCliente, int contProduto){
    	char opcao;
	
    	do{
    		printf("=============== Gerenciador de Pedidos ===============\n");
    		printf("C - Cadastrar um Pedido\n");
    		printf("L - Listar todos os Pedidos de um Cliente\n");
    		printf("D - Listar todos os Pedidos de um dia Especifico\n");
    		printf("\n Digite uma opcao para Processeguir: ");
    		scanf(" %c,", &opcao);
	    	system("clear");
		
	    	switch(opcao){
	    		case 'C':
	    		case 'c':
	    			cadastrarPedido(pedido, cliente, produto, contPedido, contCliente, contProduto);
	    			break;
				
	    		case 'L':
	    		case 'l':
	    			listarPedidoDeUmDiaCliente(pedido, *contPedido);
	    			break;	
				
	    		case 'D':
	    		case 'd':
	    			listarPedidoDeUmDia(pedido, *contPedido);
	    			break;
				
	    		default:
	    		    printf("       !!OPCAO INVALIDA!! \n Digite novamente outra Opcao\n");
		    		sleep(3);	
		    		system("clear");
		    		continue;
		    }
	        	break;
        	}while(1);
       
	    }

    /* Código da função que Cadastra um Pedido */
    void cadastrarPedido(Ped *pedido, Cli *cliente, Prod *produto, int *contPedido, int contCliente, int contProduto){
        char nomeCliente[30];
    	int codigoCliente, marcador=0;
    	int codidoProdutoParaCadastro;
    	int qdtProduto;
	    int i, j, auxindice=0;
	    char opcao;
	
    	printf(" ============== Cadastro de Pedidos ===============\n");
    	printf("Digite o Codigo ou Nome do Cliente que esta Fazendo o Pedido: ");
    	scanf(" %[^\n]s", nomeCliente);
	
    	codigoCliente = atoi(nomeCliente); /* Convertendo a string em inteiro */
	
    	for(i=0; i<contCliente; i++){
	    	if(codigoCliente == cliente[i].codigo || strcmp(cliente[i].nome, nomeCliente) == 0){
	    	    pedido[*contPedido].clienteQuePediu = cliente[i];	
				marcador = 1;
	    		break;
	    	}
    	}
     	
		 if(!marcador && strlen(nomeCliente) !=0){
    		printf("\n        !!ERRO!! \n Cliente nao Encontrado\n");
    		sleep(3);
    		system("clear");
	    	menu();
	    	return;
    	}
    
        printf(" Digite a quantidade de Produtos que deseja Pedir: ");
        scanf(" %d", &pedido[*contPedido].qdt);
    
        pedido[*contPedido].produtoPedido = malloc(pedido[*contPedido].qdt * sizeof(Ped));
        pedido[*contPedido].qdtProdutoPedido = malloc(pedido[*contPedido].qdt * sizeof(int));
        
        
        do{ /* Laço que captura o Pedido do Cliente */
            marcador = 0;
            for(i=auxindice; i<pedido[*contPedido].qdt; i++){
            	printf("Digite o Codigo do Produto para Cadastro: ");
            	scanf(" %d", &codidoProdutoParaCadastro);
            	for(j=0; j<contProduto; j++){
                	if(produto[j].codigo == codidoProdutoParaCadastro){
                    	printf("Digite o Codigo do Produto para Cadastro: ");
                    	scanf(" %d", &qdtProduto);
                    	pedido[*contPedido].produtoPedido[i] = produto[j];
                    	pedido[*contPedido].qdtProdutoPedido[i] = qdtProduto;
                    	marcador = 1;
                    	break;
	            	}
	            }
	            if(!marcador){
	            	printf("\n       !!ERRO!! \n Produto nao Encontrado\n");
	            	printf(" O Pedido sera descartado; ou Deseja digitar Novamente outro Codigo de Produto [S/N]");
	            	scanf(" %c", &opcao);
	            	auxindice = 1;
	            	system("clear");
	            	break;
            	}
            }
        	
        }while(opcao == 'S' || opcao == 's');
   
   
        if(opcao == 'N' || opcao == 'n'){
            printf("Pedido nao Cadastrado\n");
            sleep(3);
        }
        else{
          obterData(&pedido[*contPedido]);
   	     *contPedido +=1;
   	     if(*contPedido ==10)
   	         pedido = realloc(pedido, (*contPedido +1) * sizeof(Ped));
   	         
   	     printf("\n Pedido Cadastrado Com Sucesso\n");
		 sleep(2);    
        }
   
        system("clear");
        menu();

    }

    /* Função que usa a Blibioteca 'time.h' para implantar a data */
    void obterData(Ped *pedido){
    	time_t t = time(NULL);
	
    	struct tm data = *localtime(&t);
	
    	pedido->ano =data.tm_year + 1900;
    	pedido->mes =data.tm_mon + 1;
    	pedido->dia =data.tm_mday;	
    }

    /* Função que lista os pedidos de um cliente */
    void listatPedidosDeUmCliente(Ped *pedido, int contPedido){
    	char nomeCliente[30];
    	int codigoCliente;
    	int i, marcador=0;
    	
    	printf("Digite o codigo ou nome do cliente para visualizar seus pedidos: ");
    	scanf(" %[^\n]s", nomeCliente);
    	system("clear");
    	
    	codigoCliente = atoi(nomeCliente);
    	
    	for(i=0; i<contPedido; i++){ /* Ciclo que encontra, ordena e imprime o pedido solicitado */
    	    if(pedido[i].clienteQuePediu == codigoCliente || strcmp(pedido[i].clienteQuePediu, nomeCliente) == 0){
    	    	ordenarPedidosPorData(pedido, contPedido); /* Chamando a função que ordena os pedidos por dia */
			    imprimirPedido(pedido[i]);
			    getch();
			    marcador = 1;
			    break;
	    	}
    	}
    	
    	if(!marcador){ /* Se a variavl marcador não tiver sido incrementado, o pedido não foi encontrado */
    		printf("          !!ERRO!!\n Nenhum pedido cadastrado para esse cliente\n");
    		sleep(3);
		}
		
		system("clear");
		
		menu();

	}
    
    /* Codigo da função que ordena pedidos por data*/
    void ordenaPedidoPorData(Ped *pedido, int contPedido){
    	int i, j, marcador;
    	Ped aux;
    	
    	for(i=1; i<contPedido; i++){ /* laço que ordena por ano */
    	    aux = pedido[i];
    	    j = i-1;
    	    do{
    	    	marcador = 0;
    	    	if(pedido[j].ano > aux.ano);
    	        	pedido[j+1] = pedido[j];
    	    	    j--;
    	    	    marcador = 1;
		    	}
		    	if(j < 0)
			        marcador = 0;
			
    	    }while(marcador);
    	
    	    pedido[j+1] = aux;
        } 
    
    
    
        for(i=1; i<contPedido; i++){ /* laço que ordena por ano */
        	aux = pedido[i];
        	j = i-i;
        	do{
        		marcador = 0;
        		if(pedido[j].mes > aux.mes && pedido[j].ano){ 
        			pedido[j+1] = pedido[j];
        			j--;
        			marcador = 1;
				}
				if(j < 0)
				    marcador = 0;
				    
			}while(marcador);
			
			pedido[j=1] = aux;
		}
		
		
		
		for(i=1; i<contPedido; i++){ /* Laço que ordena por dia */
		aux = pedido[i];
		j = i-i;
        	do{
        		marcador = 0;
        		if(pedido[j].dia > aux.dia && pedido[j].ano){
        			pedido[j+1] = pedido[j];
        			j--;
        			marcador = 1;
				}
				if(j < 0)
				    marcador = 0;
				    
			}while(marcador);
			
			pedido[j=1] = aux;
    	}
    
	}
    
    /* Função que imprime um pedido */
    void imprimirPedido(Ped pedido){
    	int i;
    	
    	printf("Nome do Cliente: %s\nPEDIDOS", pedido.clienteQuePediu.nome);
    	
    	for(i=0; i<contPedido; i++){
    		printff("Produto: %s\n", pedido.produtoPedido[i].nome);
    		printff("Quantidade: %d\n", pedido.qdtProdutoPedido[i]);
			}
			printff("\n=================================\n");
	}
	
	/* Codigo de Função que lista todos os pedidos feitos em um dia */
	void listaPedidoDeUmDia(Ped *pedido, int contPedido){
		int i, dia, mes, ano, marcador = 0;
		char d[3];
		char m[3];
		char a[5];
		
		printf(" Para visualizar todos os pedidos de uma determinado data entre com a data OBS:(apenas numeros)\n");
		printf("Dia: ");
		scanf(" %s", d);
		printf("Mes: ");
		scanf(" %s", m);
		printf("Ano: ");
		scanf(" %s", a);
		
		system("clear");
		
		dia = atoi(d);
		mes = atoi(m);
		ano = atoi(a);
		
		ordenarPorNomeCliente(pedido, contPedido); /* Função que ordena os pedidos por nome dos Clientes */
		
		for(i=0; i<contPedido; i++){
			if(pedido[i].ano == ano && pedido[i].mes && pedido[i].dia){
			imprimirPedido(pedido[i]);
			marcador = i;	
			}
		}
		
		if(!marcador){
			printf("\n       !!Nenhum pedido cadaastrado nesse dia!!\n");
			sleep(3);		
		}
		else
		    getch();
		
		system("clear");
		
		menu();    
	}
	
	/* Codigo da Função que ordena os pedidos pelo nome dos clientes */
	void ordenarPorNomeCliente(Ped *pedido, int contPedido){
		int i, j, marcador;
		Ped aux;
		
		for(i=1; i<contPedido; i++){ /* laço que faz a busca e ordenação */
		aux = pedido[i];
		j = i-i;
        	do{
        		marcador = 0;
        		if(strcmp(pedido[j]).clienteQuePediu.nome, aux.clienteQuePediu.nome) > 0){
        			pedido[j+1] = pedido[j];
        			j--;
        			marcador = 1;
				}
				if(j < 0)
				    marcador = 0;
				    
			}while(marcador);
			
			pedido[j=1] = aux;
    	}
    } /* Fim do Programa */    

 

Link para o comentário
Compartilhar em outros sites

Amigo sou novato na programação  preciso  desse trabalho pra faculdade

na compilação fala que o erro é ( [Erro] tipos conflitantes para 'produto' )

 

3 horas atrás, Celsofc disse:

/*Alocando na memória para os ponteiros */ produto = calloc(10, sizeof(Prod));

Link para o comentário
Compartilhar em outros sites

Cara, seu código tem uma quantidade imensa de problemas. Você está usando uma IDE para programar? Se sua resposta for SIM, então deveria prestar mais atenção aos avisos que ela te dá. Por outro lado se a sua resposta for NÃO, então você é corajoso de fazer um programa desse tamanho sem usar uma IDE.

 

Eu resolvi a maior parte dos problema, muitos deles é erro de escrita (provavelmente você criou os nomes das funções e esqueceu como elas se chamavam, depois tentou chamar elas com nomes errados). Outros erros são de sintaxe (usou de forma errada os comandos da linguagem - isso deveria ser impossível se você ouvisse as reclamações que sua IDE faz). Ainda tem mais erros para corrigir, esses são referentes às umas funções que você declarou os protótipos (antes do main), mas esqueceu de implementar.

 

Enfim o código está enorme, então vou postar o arquivo main.c aqui.

main.c.zip

adicionado 1 minuto depois

Mais uma pergunta: Você conseguiu compilar seu código (o que você fez) aí?

Link para o comentário
Compartilhar em outros sites

Acho que está tentando "importar" um programa que você não fez e não conhece... 🤔 ou editou fortemente o programa sem muito controle...

 

Sobre o primeiro erro:

tre.thumb.png.c6280f1100dc8ad1919a8c3a44fd3ce9.png

 

  • Você ou alguém apagou algo do final das declarações na linha 96 e a linha cabou por vírgula. Assim a linha 99 emendou com essa e produto ficou sendo int
  • troque ',' por ';' na linha 96
  • Seria mais simples e seguro se você tivesse declarado 
     Prod* produto = (Prod*) calloc(10, sizeof(Prod));

    já na linha 93. Em geral se faz assim. E teria defendido você desse tipo de erro.

Algo sobre os outros erros por enquanto

  • Você tem um livro-texto? Qual é? Uma apostila ao menos? Veja com cuidado o que é e como usar um protótipo para uma função. Estão faltando alguns em seu programa e muitos erros são por isso.
  • Não use /* */ para comentários de uma linha. É chato e perigoso. Um */ faltando no lugar errado e pode comer linhs do seu programa e nem dar erro...
  • Funções como menu() em geral retornam a opção. E não se declara como void() para depois ter que declarar uma variável global com a opção ;) pense nisso....

Sobre a estrutura do programa

 

  • Quando um programa cresce para mais que um punhado de funções você começa a ver que tem que ter uma ordem nisso. Algo como --- na falta de um critério e sem gastar muito tempo explicando --- declarar as estruturas de dados e protótipos em um arquivo separado. Sim, para isso são os cabeçalhos, os tais arquivos .h
     
  • Declarar as funcões em ordem alfabética por exemplo facilitaria muito a sua vida para achar esses erros e essas funções. Claro, se usa um IDE moderno pode apenas usar tipo F12 e shift F12 e ir alternando entre uma declaração de função e a implementacão dela. Sem stress.
     
  • Colocar o código das funções que já estão funcionando em outro arquivo. para não ficar compilando TUDO toda hora.
     
  • Deixar main() em um arquivo separado.
     
  • Entendo sua escola não incentivar isso num primeiro momento --- o uso de um IDE ---. Escrevo um e não uma já que é uma abreviatura de ambiente, que é masculino em português. Aconteceu a mesma coisa com BIOS no BRasil: virou feminino por alguma razão histórica :D
    Pelo uso exclusivo de IDE muitos alunos depois de programar por anos não conseguem entender o que é uma biblioteca por exemplo. Um objeto, um linker. Como copiar programas para usar depois. Como enviar programas para outros. Uma pena.
     
  • Se você não tiver um critério, quando seu programa cresce você gasta MUITO mais tempo para achar as coisas.

Tudo bem não ter um roteiro profissional quando se está aprendendo ou começando, mas num programa de 1000 linhas já viu o tamanho do problema. Os caras que criaram isso eram muito melhores que nós...

Sabe o que é um Makefile? É uma salvação.

Link para o comentário
Compartilhar em outros sites

Talvez agora você já saiba, mas veja o tamanho do problema

 

image.png.8e6eacc6cbe12ccd83eed4af934cc7b5.png


Essas são coisas que estão declaradas de um jeito nos protótipos e de outro no programa...

 

adicionado 8 minutos depois

Antes de imprimirPedido() parece ter umas 20 linhas de código perdidas lá. Verifique.

 

Que pretende com o trecho abaixo

void getch() {
    system("read b");
}

Não use acentos em comentários ou qualquer parte do seu código a menos que alguém te obrigue.Ou pague. Não resolve nenhum problema e cria uns.

Link para o comentário
Compartilhar em outros sites

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