Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Junior Anzolin

C Salvando e lendo structs em binario

Recommended Posts

Olá! Sou novo aqui e estou com um sério problema em meu código.

Bom vamos ao problema.

O caso é que preciso trabalhar com arquivos e salvar os dados gerados com base em struct em um arquivo binário e quando abrir o programa novamente carregar os arquivos no vetor.

O caso é que não esta ocorrendo assim. Fiz diversos teste e me parece que meu sizeof() não esta funcionando.

Se alguém pude me ajudar agradeço muito, segue o código:

 

Código:

Spoiler

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
    typedef struct ficha_vendedores{
        int viCodigo;
        char vcNome[30];
        char vcEndereco[50];
        char vcFone[20];
        int ativo;
    }T_ficha_vendedores;
    typedef struct ficha_produtos{
        int viCodigo;
        int viUniEstoque;
        char vcDescricao[50];
        char vcFornecedor[30];
        char vcDataComp[20];
        float vfPreco;
        int ativo;
    }T_ficha_produtos;
    typedef struct ficha_cliente{
        int viCodigo;
        char vcNome[30];
        char vcEndereco[50];
        char vcFone[20];
        int vbCredito;
        int ativo;
    }T_ficha_cliente;
int lerVendedor(T_ficha_vendedores arr[]){
        FILE * arq = fopen("vendedores.bin", "rb");
    if(arq != NULL){
        int indice = 0;
        while(1){
            T_ficha_vendedores p;
            size_t r = fread(&p, sizeof(T_ficha_vendedores), 1, arq);
            // se retorno for menor que o count, então sai do loop
            if(r < 1)
                break;
            else
                arr[indice++] = p;
        }
        fclose(arq); // fecha o arquivo
        return indice;
    }
    else
    {
        printf("\nErro ao abrir o arquivo para leitura!\n");
        system("pause");
        exit(1);
    }
}
int lerProdutos(T_ficha_produtos arr[]){
        FILE * arq = fopen("produtos.bin", "rb");
    if(arq != NULL){
        int indice = 0;
        while(1){
            T_ficha_produtos p;
            size_t r = fread(&p, sizeof(T_ficha_produtos), 1, arq);
            // se retorno for menor que o count, então sai do loop
            if(r < 1)
                break;
            else
                arr[indice++] = p;
        }
        fclose(arq); // fecha o arquivo
        return indice;
    }
    else
    {
        printf("\nErro ao abrir o arquivo para leitura!\n");
        system("pause");
        exit(1);
    }
}
int lerClientes(T_ficha_cliente arr[]){
    FILE * arq = fopen("clientes.bin", "rb");
    if(arq != NULL){
        int indice = 0;
        while(1){
            T_ficha_cliente p;
            size_t r = fread(&p, sizeof(T_ficha_cliente), 1, arq);
            // se retorno for menor que o count, então sai do loop
            if(r < 1)
                break;
            else
                arr[indice++] = p;
        }
        fclose(arq);
        return indice;
    }
    else
    {
        printf("\nErro ao abrir o arquivo para leitura!\n");
        system("pause");
        exit(1);
    }
}
void CadastraVendedores(T_ficha_vendedores vendedor[], int viCodigo){
    system("cls");
    printf("\n\n<---------- Novo vendedor ---------->\n\n");
    vendedor[viCodigo].ativo = 1;
    vendedor[viCodigo].viCodigo = viCodigo;
    printf("Codigo: %d\n\n", vendedor[viCodigo].viCodigo);
    fflush(stdin); 
    printf("Nome: ");
    fgets(vendedor[viCodigo].vcNome, 30, stdin);
    fflush(stdin); 
    printf("Endereco: ");
    fgets(vendedor[viCodigo].vcEndereco, 50, stdin);
    fflush(stdin); 
    printf("Telefone: ");
    fgets(vendedor[viCodigo].vcFone, 20, stdin);
    printf("\n<---------- Novo vendedor ---------->\n\n");
}
void CadastraProdutos(T_ficha_produtos produto[], int viCodigo){
    system("cls");
    printf("\n\n<---------- Novo produto ---------->\n\n");
    produto[viCodigo].ativo = 1;
    produto[viCodigo].viCodigo = viCodigo;
    printf("Codigo: %d\n\n", produto[viCodigo].viCodigo);
    fflush(stdin); 
    printf("Unidade no estoque: ");
    scanf("%d", &produto[viCodigo].viUniEstoque);
    fflush(stdin); 
    printf("Descricao do produto: ");
    fgets(produto[viCodigo].vcDescricao, 50, stdin);
    fflush(stdin); 
    printf("Fornecedor: ");
    fgets(produto[viCodigo].vcFornecedor, 30, stdin);
    fflush(stdin); 
    printf("Preco final: ");
    scanf("%f", &produto[viCodigo].vfPreco);
    fflush(stdin); 
    printf("Data da compra 00/00/0000: ");
    fgets(produto[viCodigo].vcDataComp, 20, stdin);
    printf("\n<---------- Novo produto ---------->\n\n");
}
void CadastraClientes(T_ficha_cliente cliente[], int viCodigo){
    system("cls");
    printf("\n\n<---------- Novo cliente ---------->\n\n");
    cliente[viCodigo].vbCredito = 1;
    cliente[viCodigo].ativo = 1;
    cliente[viCodigo].viCodigo = viCodigo;
    printf("Codigo: %d\n\n", cliente[viCodigo].viCodigo);
    fflush(stdin); 
    printf("Nome: ");
    fgets(cliente[viCodigo].vcNome, 30, stdin);
    fflush(stdin); 
    printf("Endereco: ");
    fgets(cliente[viCodigo].vcEndereco, 50, stdin);
    fflush(stdin); 
    printf("Telefone: ");
    fgets(cliente[viCodigo].vcFone, 20, stdin);
    printf("\n<---------- Novo cliente ---------->\n\n");
}
void VerifyContinue(char text[50], int *result){
    char out[5];
    *result = 10;
    printf("%s[s/n]\n", text);
    fflush(stdin); 
    fgets(out, 5, stdin);
    if((strncmp(out, "s", 1))){
        *result = 0;
    }
}
void PrintMenu(int *option){
    system("cls");
    printf("<============================>\n");
    printf("<----------- Menu ----------->\n");
    printf("<============================>\n");
    printf("<=      1. Cadastrar        =>\n");
    printf("<=      2. Listar           =>\n");
    printf("<=      3. Emitir venda     =>\n");
    printf("<=      0. Sair             =>\n");
    printf("<============================>\n");
    scanf("%d", &*option);
}
void MenuCadastros(int *option){
    system("cls");
    printf("<============================>\n");
    printf("<------ Menu Cadastro ------->\n");
    printf("<============================>\n");
    printf("<=      1. Novo cliente     =>\n");
    printf("<=      2. Novo produto     =>\n");
    printf("<=      3. Novo vendedor    =>\n");
    printf("<=      0. Voltar ao inicio =>\n");
    printf("<============================>\n");
    scanf("%d", &*option);
}
void MenuProcurar(int *option){
    system("cls");
    printf("<============================>\n");
    printf("<--------- Procurar --------->\n");
    printf("<============================>\n");
    printf("<=      1. Clientes         =>\n");
    printf("<=      2. Produtos         =>\n");
    printf("<=      3. Vendedores       =>\n");
    printf("<=      0. Voltar ao inicio =>\n");
    printf("<============================>\n");
    scanf("%d", &*option);
}
void MenuDetalhes(int *option){
    printf("<============================>\n");
    printf("<--------- Detalhes --------->\n");
    printf("<============================>\n");
    printf("<=      1. Alterar          =>\n");
    printf("<=      2. Excluir          =>\n");
    printf("<=      0. Voltar           =>\n");
    printf("<============================>\n");
    scanf("%d", &*option);
}
void SalvarArqClientes(T_ficha_cliente clientes[], int sizeVet){
    int i;
    FILE * arq;
    arq = fopen("clientes.bin", "w");
    if(arq != NULL){
        for (i = 0; i < sizeVet; i++){
            fwrite(&clientes, sizeof(T_ficha_cliente), 1, arq);
        }
        fclose(arq);
    }else{
        printf("Erro ao salvar o arquivo\n");
        system("pause");
        exit(1);
    }
}
void SalvarArqProdutos(T_ficha_produtos produtos[], int sizeVet){
    int i;
    FILE * arq;
    arq = fopen("produtos.bin", "w");
    if(arq != NULL){
        for (i = 0; i < sizeVet; i++)        {
            fwrite(&produtos, sizeof(produtos), 1, arq);
        }
        fclose(arq);
    }else{
        printf("Erro ao abrir o arquivo\n");
        exit(1);
    }
}
void SalvarArqVendedores(T_ficha_vendedores vendedores[], int sizeVet){
    int i;
    FILE * arq;
    arq = fopen("vendedores.bin", "w");
    if(arq != NULL){
        for (i = 0; i < sizeVet; i++)        {
            fwrite(&vendedores, sizeof(vendedores), 1, arq);
        }
        fclose(arq);
    }else{
        printf("Erro ao abrir o arquivo\n");
        exit(1);
    }
}
void ListarClientes(T_ficha_cliente arr[], int size){
    int i, sizeA = 0;
    for(i = 0; i < size; i++){
        if(arr.ativo == 1){
            sizeA += 1;
        }
    }
    if(sizeA > 0){
        for(i = 0; i < size; i++){
            if(arr.ativo==1){
                printf("\n<===============================>\n\n");
                printf("ID: %d\n", i+1);
                printf("CODIGO: %d\n", arr.viCodigo);
                printf("NOME: %s", arr.vcNome);
                printf("\n<===============================>\n");
            }
        }
    }else{
        printf("Nenhum regstro encontrado.\n");
    }
}
void DetalhesCliente(T_ficha_cliente arr[], int option){
    printf("CLIENTE %d\n", option);
    printf("CODIGO: %d\n", arr[option-1].viCodigo);
    printf("NOME: %s\n", arr[option-1].vcNome);
    printf("ENDERECO: %s\n", arr[option-1].vcEndereco);
    printf("TELEFONE: %s\n", arr[option-1].vcFone);
    printf("STATUS CREDITO: ");
    if(arr[option-1].vbCredito = 1){
        printf("OK!\n");
    }else{
        printf("EM DEBITO\n");
    }
}
void AlteraCliente(T_ficha_cliente cliente[], int option){
    int verify;
    system("cls");
    printf("\n\n<---------- Editar cliente ---------->\n\n");
    printf("Codigo: %d\n\n", cliente[option-1].viCodigo);
    if(cliente[option-1].vbCredito == 0){
        printf("Este cliente tem debitos pendentes.\n");
        VerifyContinue("Foram pagos?", &verify);
        if(verify == 0){
            cliente[option-1].vbCredito = 1;
            printf("Atualizado com sucesso!\n");
        }else{
            printf("OK!\n");
        }
    }
    system("cls");
    printf("\n\n<---------- Editar cliente ---------->\n\n");
    printf("Codigo: %d\n\n", cliente[option-1].viCodigo);
    printf("NOME: %s\n", cliente[option-1].vcNome);
    VerifyContinue("Alterar NOME?", &verify);
    if(verify == 0){
        printf("OK!\n");
    }else{
        fflush(stdin); 
        printf("Nome: ");
        fgets(cliente[option-1].vcNome, 30, stdin);
    }
    system("cls");
    printf("\n\n<---------- Editar cliente ---------->\n\n");
    printf("Codigo: %d\n\n", cliente[option-1].viCodigo);
    printf("ENDERECO: %s\n", cliente[option-1].vcEndereco);
    VerifyContinue("Alterar ENDERECO?", &verify);
    if(verify == 0){
        printf("OK!\n");
    }else{
        fflush(stdin); 
        printf("Endereco: ");
        fgets(cliente[option-1].vcEndereco, 50, stdin);    
    }
    system("cls");
    printf("\n\n<---------- Editar cliente ---------->\n\n");
    printf("Codigo: %d\n\n", cliente[option-1].viCodigo);
    printf("TELEFONE: %s\n", cliente[option-1].vcFone);
    VerifyContinue("Alterar TELEFONE?", &verify);
    if(verify == 0){
        printf("OK!\n");
    }else{
        fflush(stdin); 
        printf("Telefone: ");
        fgets(cliente[option-1].vcFone, 20, stdin);
    }
    printf("\n<---------- Editar cliente ---------->\n\n");
}
void ExcluiCliente(T_ficha_cliente cliente[], int option){
    cliente[option-1].ativo = 0;
    if(cliente[option-1].ativo == 0){
        printf("Produto excluido com sucesso\n");
    }else{
        printf("Ops! Algo deu errado\n");
    }
}
void ListarProdutos(T_ficha_produtos arr[], int size){
    int i, sizeA = 0;
    for(i = 0; i < size; i++){
        if(arr.ativo == 1){
            sizeA += 1;
        }
    }
    if(sizeA > 0){
        for(i = 0; i < size; i++){
            if(arr.ativo==1){
                printf("\n<===============================>\n\n");
                printf("ID: %d\n", i+1);
                printf("CODIGO: %d\n", arr.viCodigo);
                printf("DESCRICAO: %s", arr.vcDescricao);
                printf("QTD. EM ESTOQUE: %d\n", arr.viUniEstoque);
                printf("PRECO UNI.: %.2f\n", arr.vfPreco);
                printf("\n<===============================>\n");
            }
        }
    }else{
        printf("Nenhum regstro encontrado.\n");
    }
}
void DetalhesProduto(T_ficha_produtos arr[], int option){
    printf("PRODUTO %d\n", option);
    printf("CODIGO: %d\n", arr[option-1].viCodigo);
    printf("UNIDADES EM ESTOQUE: %d\n", arr[option-1].viUniEstoque);
    printf("DESCRICAO DO PRODUTO: %s\n", arr[option-1].vcDescricao);
    printf("FORNECEDOR:  %s\n", arr[option-1].vcFornecedor);
    printf("DATA DA COMPRA: %s\n", arr[option-1].vcDataComp);
    printf("PRECO: %.2f\n", arr[option-1].vfPreco);
}
void AlteraProduto(T_ficha_produtos produto[], int option){
    int verify;
    system("cls");
    printf("\n\n<---------- Editar produto ---------->\n\n");
    printf("Codigo: %d\n\n", produto[option-1].viCodigo);
    printf("UNIDADES EM ESTOQUE: %d\n", produto[option-1].viUniEstoque);
    VerifyContinue("Alterar UNIDADES EM ESTOQUE?", &verify);
    if(verify == 0){
        printf("OK!\n");
    }else{
        fflush(stdin); 
        printf("Unidade no estoque: ");
        scanf("%d", &produto[option-1].viUniEstoque);
    }
    system("cls");
    printf("\n\n<---------- Editar produto ---------->\n\n");
    printf("Codigo: %d\n\n", produto[option-1].viCodigo);
    printf("DESCRICAO DO PRODUTO: %s\n", produto[option-1].vcDescricao);
    VerifyContinue("Alterar DESCRICAO DO PRODUTO?", &verify);
    if(verify == 0){
        printf("OK!\n");
    }else{
        fflush(stdin); 
        printf("Descricao do produto: ");
        fgets(produto[option-1].vcDescricao, 50, stdin);
    }
    system("cls");
    printf("\n\n<---------- Editar produto ---------->\n\n");
    printf("Codigo: %d\n\n", produto[option-1].viCodigo);
    printf("FORNECEDOR: %s\n", produto[option-1].vcFornecedor);
    VerifyContinue("Alterar FORNECEDOR?", &verify);
    if(verify == 0){
        printf("OK!\n");
    }else{
        fflush(stdin); 
        printf("Fornecedor: ");
        fgets(produto[option-1].vcFornecedor, 30, stdin);
    }
    system("cls");
    printf("\n\n<---------- Editar produto ---------->\n\n");
    printf("Codigo: %d\n\n", produto[option-1].viCodigo);
    printf("PRECO: %.2f\n", produto[option-1].vfPreco);
    VerifyContinue("Alterar PRECO?", &verify);
    if(verify == 0){
        printf("OK!\n");
    }else{
        fflush(stdin); 
        printf("Preco final: ");
        scanf("%f", &produto[option-1].vfPreco);
    }
    system("cls");
    printf("\n\n<---------- Editar produto ---------->\n\n");
    printf("Codigo: %d\n\n", produto[option-1].viCodigo);
    printf("DATA DA COMPRA: %s\n", produto[option-1].vcDataComp);
    VerifyContinue("Alterar DATA DA COMPRA?", &verify);
    if(verify == 0){
        printf("OK!\n");
    }else{
        fflush(stdin); 
        printf("Data da compra 00/00/0000: ");
        fgets(produto[option-1].vcDataComp, 20, stdin);
    }
    printf("\n<---------- Editar produto ---------->\n\n");
}
void ExcluiProduto(T_ficha_produtos produto[], int option){
    produto[option-1].ativo = 0;
    if(produto[option-1].ativo == 0){
        printf("Produto excluido com sucesso\n");
    }else{
        printf("Ops! Algo deu errado\n");
    }
}
void ListarVendedores(T_ficha_vendedores arr[], int size){
    int i, sizeA = 0;
    for(i = 0; i < size; i++){
        if(arr.ativo == 1){
            sizeA += 1;
        }
    }
    if(sizeA > 0){
        for (i = 0; i < size; i++){
            if(arr.ativo==1){
                printf("\n<===============================>\n\n");
                printf("ID: %d\n", i+1);
                printf("CODIGO: %d\n", arr.viCodigo);
                printf("NOME: %s", arr.vcNome);
                printf("\n<===============================>\n");
            }
        }
    }else{
        printf("Nenhum regstro encontrado.\n");
    }
}
void DetalhesVendedor(T_ficha_vendedores arr[], int option){
    printf("VENDEDOR %d\n", option);
    printf("CODIGO: %d\n", arr[option-1].viCodigo);
    printf("NOME: %s\n", arr[option-1].vcNome);
    printf("ENDERECO: %s\n", arr[option-1].vcEndereco);
    printf("TELEFONE:  %s\n", arr[option-1].vcFone);
}
void AlteraVendedor(T_ficha_vendedores vendedor[], int option){
    int verify;
    system("cls");
    printf("\n\n<---------- Editar vendedor ---------->\n\n");
    printf("Codigo: %d\n\n", vendedor[option-1].viCodigo);
    printf("NOME: %s\n", vendedor[option-1].vcNome);
    VerifyContinue("Alterar NOME?", &verify);
    if(verify == 0){
        printf("OK!\n");
    }else{
        fflush(stdin); 
        printf("Nome: ");
        fgets(vendedor[option-1].vcNome, 30, stdin);
    }
    system("cls");
    printf("\n\n<---------- Editar vendedor ---------->\n\n");
    printf("Codigo: %d\n\n", vendedor[option-1].viCodigo);
    printf("ENDERECO: %s\n", vendedor[option-1].vcNome);
    VerifyContinue("Alterar ENDERECO?", &verify);
    if(verify == 0){
        printf("OK!\n");
    }else{
        fflush(stdin); 
        printf("Endereco: ");
        fgets(vendedor[option-1].vcEndereco, 50, stdin);
    }
    system("cls");
    printf("\n\n<---------- Editar vendedor ---------->\n\n");
    printf("Codigo: %d\n\n", vendedor[option-1].viCodigo);
    printf("TELEFONE: %s\n", vendedor[option-1].vcNome);
    VerifyContinue("Alterar TELEFONE?", &verify);
    if(verify == 0){
        printf("OK!\n");
    }else{
        fflush(stdin); 
        printf("Telefone: ");
        fgets(vendedor[option-1].vcFone, 20, stdin);
    }
    printf("\n<---------- Editar vendedor ---------->\n\n");
}
void ExcluiVendedor(T_ficha_vendedores vendedor[], int option){
    vendedor[option-1].ativo = 0;
    if(vendedor[option-1].ativo == 0){
        printf("Vendedor excluido com sucesso\n");
    }else{
        printf("Ops! Algo deu errado\n");
    }
}
int getVendedor(T_ficha_vendedores arr[], int size){
    int id;
    do{
        system("cls");
        ListarVendedores(arr, size);
        printf("Digite o ID do vendedor que esta vendendo.\n");
        scanf("%d", &id);
        if(id == 0){
            printf("ID invalido!\n");
            system("pause");
        }
    }while(id == 0);
        return id--;
}
int getCliente(T_ficha_cliente arr[], int size){
    int id;
    do{
        system("cls");
        ListarClientes(arr, size);
        printf("Digite o ID do cliente que esta comprando.\n");
        scanf("%d", &id);
        if(id == 0){
            printf("ID invalido!\n");
            system("pause");
        }
        if(arr[id - 1].ativo==1){
            if(arr[id - 1].vbCredito==1){
                arr[id - 1].vbCredito=0;
                return id--;
            }else{
                printf("Desculpe mas este cliente está com debitos pendentes.\n");
                id = 0;
            }
        }else{
                printf("Desculpe mas este cliente está desativado.\n");
                id = 0;
        }
    }while(id == 0);
}
void ListarCarrinho(int itens[], int quant[], T_ficha_produtos produtos[]){
    int i, countItens=sizeof(itens)/sizeof(itens[0]);
    float totalC=0;
    system("cls");
    for (i = 0; i < countItens; ++i){
        printf("\n<===============================>\n\n");
        printf("CODIGO: %d\n", produtos[itens].viCodigo);
        printf("QUANTIDADE: %d\n", quant);
        printf("DESCRICAO: %s", produtos[itens].vcDescricao);
        printf("PRECO UNI.: %.2f\n", produtos[itens].vfPreco);
        float preco = produtos[itens].vfPreco;
        int quantidade = quant;
        totalC += preco * quantidade;
        printf("TOTAL: %2.f\n", preco * quantidade);
        printf("\n<===============================>\n");
    }
    printf("\nTotal da compra = %.2f\n\n", totalC);
}
void NotaFiscal(int itens[], int quant[], T_ficha_produtos produtos[], T_ficha_vendedores vendedor[], T_ficha_cliente cliente[], int codVend, int codClie){
    int i, countItens=sizeof(itens);
    float totalC=0;
    system("cls");
    printf("\n\tNOTA FISCAL\t\n\n");
    printf("\tVendedor\t\n\n");
    printf("CODIGO: %d\n", vendedor[codVend].viCodigo);
    printf("NOME: %s\n\n", vendedor[codVend].vcNome);
    printf("\tCliente\t\n\n");
    printf("CODIGO: %d\n", cliente[codVend].viCodigo);
    printf("NOME: %s\n\n", cliente[codVend].vcNome);
    printf("\tProdutos:\t\n\n");
    printf("CODIGO\t|\tQUANT.\t|\tDESC.\t|\tPRECO UNI.\n");
    for (i = 0; i < countItens; ++i){
        printf("%d", produtos[itens].viCodigo);
        printf("\t|\t");
        printf("%d", quant);
        printf("\t|\t");
        printf("%s\b", produtos[itens].vcDescricao);
        printf("\t|\t");
        printf("%.2f\n", produtos[itens].vfPreco);
        float preco = produtos[itens].vfPreco;
        int quantidade = quant;
        totalC += preco * quantidade;
        printf("TOTAL: %2.f\n", preco * quantidade);
        printf("\n<===============================>\n");
    }
    printf("\nTotal da compra = %.2f\n", totalC);
}
void NovaVenda(T_ficha_cliente clientes[], T_ficha_produtos produtos[], T_ficha_vendedores vendedores[], int sizeC, int sizeP, int sizeV){
    system("cls");
    int codVend, codProdutos[100], codClie, test, count=0, prod, quantTemp, quant[100];
    codVend = getVendedor(vendedores, sizeV);
    codClie = getCliente(clientes, sizeC);
    do{
        system("cls");
        ListarProdutos(produtos, sizeP);
        printf("Digite o ID do produto para adicionar no carrinho.\n");
        scanf("%d", &prod);
        printf("Quantos?\n");
        scanf("%d", &quantTemp);
        if(produtos[prod-1].viUniEstoque >= quantTemp){
            quant[count] = quantTemp;
            codProdutos[count] = prod-1;
            produtos[prod-1].viUniEstoque = produtos[prod-1].viUniEstoque - quantTemp;
            count++;
        }else{
            printf("Ops! Nao temos tanto no estoque.\nProduto nao adicionado ao carrinho!\n");
        }
        VerifyContinue("Cadastrar mais?", &test);
    }while(test != 0);
    ListarCarrinho(codProdutos, quant, produtos);
    
    VerifyContinue("Emitir nota fiscal?", &test);
    if(test != 0){
        NotaFiscal(codProdutos, quant, produtos, vendedores, clientes, codVend, codClie);
        system("pause");
    }else{
        printf("\n\nVenda realizada com sucesso!\n\n\n");
        system("pause");
    }
}
int main(void){
    int viMenu, idC=0, idP=0, idV=0, i, sair, option, optiondt, verify;
    T_ficha_cliente clientes[100];
    T_ficha_produtos produtos[50];
    T_ficha_vendedores vendedores[10];
    int sizeC = lerClientes(clientes);
    int sizeV = lerVendedor(vendedores);
    int sizeP = lerProdutos(produtos);
    int sizeAC, sizeAP, sizeAV;
    do{
        PrintMenu(&viMenu);
        system("cls");
        switch(viMenu){
            case 1:
                do{
                    MenuCadastros(&sair);
                    switch(sair){
                        case 1:
                            if(sizeC < 100){
                                CadastraClientes(clientes, sizeC);
                                sizeC += 1;
                                break;
                            }else{
                                printf("Ops! Nao tenho mais espaco!\n");
                                sair = 0;
                            }
                        case 2:
                            if(sizeV < 50){
                                CadastraProdutos(produtos, sizeP);
                                sizeP += 1;
                                break;
                            }else{
                                printf("Ops! Nao tenho mais espaco!\n");
                                sair = 0;
                            }
                        case 3:
                            if(sizeP < 10){
                                CadastraVendedores(vendedores, sizeV);
                                sizeV += 1;
                                break;
                            }else{
                                printf("Ops! Nao tenho mais espaco!\n");
                                sair = 0;
                            }
                    }
                }while(sair != 0);
                break;
            case 2:
                do{
                    MenuProcurar(&sair);
                    system("cls");
                    switch(sair){
                        case 1:
                            do{
                                system("cls");
                                ListarClientes(clientes, sizeC);
                                sizeAC = 0;
                                for(i = 0; i < sizeC; i++){
                                    if(clientes.ativo == 1){
                                        sizeAC += 1;
                                    }
                                }
                                if(sizeAC > 0){
                                    printf("Digite o ID do cliente para ver detalhes, alterar ou excluir\nOu 0 para voltar ao menu anterior\n");
                                }else{
                                    printf("Digite 0 para voltar ao menu anterior\n");
                                }
                                scanf("%d", &option);
                                if(option == 0){
                                    break;
                                }
                                system("cls");
                                DetalhesCliente(clientes, option);
                                MenuDetalhes(&optiondt);
                                system("cls");
                                switch(optiondt){
                                    case 1:
                                        do{
                                            AlteraCliente(clientes, option);
                                            system("cls");
                                            DetalhesCliente(clientes, option);
                                            VerifyContinue("Tudo certo?", &verify);
                                        }while(verify == 0);
                                        break;
                                    case 2:
                                        ExcluiCliente(clientes, option);
                                        system("pause");
                                        break;
                                }
                            }while((option != 0) || (clientes[option-1].ativo != 0));
                            break;
                        case 2:
                            do{
                                system("cls");
                                ListarProdutos(produtos, sizeP);
                                sizeAP = 0;
                                for(i = 0; i < sizeP; i++){
                                    if(produtos.ativo == 1){
                                        sizeAP += 1;
                                    }
                                }
                                if(sizeAP > 0){
                                    printf("Digite o ID do produto para ver detalhes, alterar ou excluir\nOu 0 para voltar ao menu anterior\n");
                                }else{
                                    printf("Digite 0 para voltar ao menu anterior\n");
                                }
                                scanf("%d", &option);
                                if(option == 0){
                                    break;
                                }
                                system("cls");
                                DetalhesProduto(produtos, option);
                                MenuDetalhes(&optiondt);
                                system("cls");
                                switch(optiondt){
                                    case 1:
                                        do{
                                            AlteraProduto(produtos, option);
                                            system("cls");
                                            DetalhesProduto(produtos, option);
                                            VerifyContinue("Tudo certo?", &verify);
                                        }while(verify == 0);
                                        break;
                                    case 2:
                                        ExcluiProduto(produtos, option);
                                        system("pause");
                                        break;
                                }
                            }while((option != 0) || (produtos[option-1].ativo != 0));
                            break;
                        case 3:
                            do{
                                system("cls");
                                ListarVendedores(vendedores, sizeV);
                                sizeAV = 0;
                                for(i = 0; i < sizeV; i++){
                                    if(vendedores.ativo == 1){
                                        sizeAV += 1;
                                    }
                                }
                                if(sizeAV > 0){
                                    printf("Digite o ID do produto para ver detalhes, alterar ou excluir\nOu 0 para voltar ao menu anterior\n");
                                }else{
                                    printf("Digite 0 para voltar ao menu anterior\n");
                                }
                                scanf("%d", &option);
                                if(option == 0){
                                    break;
                                }
                                system("cls");
                                DetalhesVendedor(vendedores, option);
                                MenuDetalhes(&optiondt);
                                system("cls");
                                switch(optiondt){
                                    case 1:
                                        do{
                                            AlteraVendedor(vendedores, option);
                                            system("cls");
                                            DetalhesVendedor(vendedores, option);
                                            VerifyContinue("Tudo certo?", &verify);
                                        }while(verify == 0);
                                        break;
                                    case 2:
                                        ExcluiVendedor(vendedores, option);
                                        system("pause");
                                        break;
                                }
                            }while((option != 0) || (vendedores[option-1].ativo != 0));
                            break;
                    }
                }while(sair != 0);
                break;
            case 3:
                do{
                    sair = 10;
                    if((sizeC > 0) && (sizeV > 0) && (sizeP > 0)){
                        NovaVenda(clientes, produtos, vendedores, sizeC, sizeP, sizeV);
                        VerifyContinue("Fazer uma nova venda?", &sair);
                    }else{
                        sair = 0;
                        if(sizeC <= 0){
                            printf("Ops! Nao ha clientes, por favor cadastra pelo menos um.\n");
                        }
                        if(sizeP <= 0){
                            printf("Ops! Nao ha produtos, por favor cadastra pelo menos um.\n");
                        }
                        if(sizeV <= 0){
                            printf("Ops! Nao ha vendedores, por favor cadastra pelo menos um.\n");
                        }
                        system("pause");
                    }
                }while(sair != 0);
                break;
        }
        
        SalvarArqClientes(clientes, sizeC);
        SalvarArqProdutos(produtos, sizeP);
        SalvarArqVendedores(vendedores, sizeV);
    }while(viMenu != 0);
    system("cls");
    SalvarArqClientes(clientes, sizeC);
    SalvarArqProdutos(produtos, sizeP);
    SalvarArqVendedores(vendedores, sizeV);
    printf("\n\n\n\t\tEncerrando...\n\n\n");
    system("pause");
    return 0;
}
 

 

Editado por Simon Viegas
Inserir tag SPOILER para melhor visualização do tópico
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por favor, apague esse código e poste usando <>, pois se você usar o código no texto acaba desaparecendo o indice i do vetor.

  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • 46 minutos atrás, TYSQUARE89 disse:

    Por favor, apague esse código e poste usando <>, pois se você usar o código no texto acaba desaparecendo o indice i do vetor.

    Já fiz a edição

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Esse código acima está com vários problemas, sugiro trocar pelo que está no seu arquivo, caso ele seja igual segue o problema ao salvar:

              

    fwrite(&vendedores, sizeof(vendedores), 1, arq);

     

    //deveria ser

    fwrite(vendedores[i], sizeof(T_ficha_vendedores), 1, arq);

     

    Editado por TYSQUARE89
    • Curtir 1
    • Obrigado 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 12 minutos atrás, TYSQUARE89 disse:

    Esse código acima está com vários problemas, sugiro trocar pelo que está no seu arquivo, caso ele seja igual segue o problema ao salvar:

              

    fwrite(&vendedores, sizeof(vendedores), 1, arq);

     

    //deveria ser

    
    fwrite(vendedores[i], sizeof(T_ficha_vendedores), 1, arq);

    Ele da um erro se fizer assim :(

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    27 minutos atrás, Junior Anzolin disse:

    Ele da um erro se fizer assim :(

    Perdão, use: 

    fwrite(&vendedores[i], sizeof(T_ficha_vendedores), 1, arq);

    Faça o mesmo com clientes e produtos.

    Editado por TYSQUARE89
    • Obrigado 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 19 horas atrás, TYSQUARE89 disse:

    Perdão, use: 

    
    fwrite(&vendedores[i], sizeof(T_ficha_vendedores), 1, arq);

    Faça o mesmo com clientes e produtos.

     Fiz assim

     

    void SalvarArqClientes(T_ficha_cliente clientes[], int sizeVet){
    	int i;
    	FILE * arq;
    	T_ficha_cliente p;
    	arq = fopen("clientes.bin", "w");
    
    	if(arq != NULL){
    		for (i = 0; i < sizeVet; i++){
    			p = clientes[i];
    			fwrite(&p, sizeof(T_ficha_cliente), 1, arq);
    		}
    		fclose(arq);
    	}else{
    		printf("Erro ao salvar o arquivo\n");
    		system("pause");
    		exit(1);
    	}
    }
    void SalvarArqProdutos(T_ficha_produtos produtos[], int sizeVet){
    	int i;
    	T_ficha_produtos p;
    	FILE * arq;
    
    	arq = fopen("produtos.bin", "w");
    
    	if(arq != NULL){
    		for (i = 0; i < sizeVet; i++)		{
    			p = produtos[i];
    			fwrite(&p, sizeof(produtos), 1, arq);
    		}
    		fclose(arq);
    	}else{
    		printf("Erro ao abrir o arquivo\n");
    		exit(1);
    	}
    }
    void SalvarArqVendedores(T_ficha_vendedores vendedores[], int sizeVet){
    	int i;
    	T_ficha_vendedores p;
    	FILE * arq;
    
    	arq = fopen("vendedores.bin", "w");
    
    	if(arq != NULL){
    		for (i = 0; i < sizeVet; i++){
    			p = vendedores[i];
    			fwrite(&p, sizeof(vendedores), 1, arq);
    		}
    		fclose(arq);
    
    	}else{
    		printf("Erro ao abrir o arquivo\n");
    		exit(1);
    	}
    }

     

    Mas como faço com a leitura??

     

    int lerVendedor(T_ficha_vendedores arr[]){
    		FILE * arq = fopen("vendedores.bin", "rb");
    
    	if(arq != NULL){
    		int indice = 0;
    		while(1){
    			T_ficha_vendedores p;
    
    			size_t r = fread(&p, sizeof(T_ficha_vendedores), 1, arq);
    
    			// se retorno for menor que o count, então sai do loop
    			if(r < 1)
    				break;
    			else
    				arr[indice++] = p;
    		}
    		fclose(arq); // fecha o arquivo
    		return indice;
    	}
    	else
    	{
    		printf("\nErro ao abrir o arquivo para leitura!\n");
    		system("pause");
    		exit(1);
    	}
    }
    int lerProdutos(T_ficha_produtos arr[]){
    		FILE * arq = fopen("produtos.bin", "rb");
    
    
    	if(arq != NULL){
    		int indice = 0;
    		while(1){
    			T_ficha_produtos p;
    
    			size_t r = fread(&p, sizeof(T_ficha_produtos), 1, arq);
    
    			// se retorno for menor que o count, então sai do loop
    			if(r < 1)
    				break;
    			else
    				arr[indice++] = p;
    		}
    		fclose(arq); // fecha o arquivo
    		return indice;
    	}
    	else
    	{
    		printf("\nErro ao abrir o arquivo para leitura!\n");
    		system("pause");
    		exit(1);
    	}
    }
    int lerClientes(T_ficha_cliente arr[]){
    	FILE * arq = fopen("clientes.bin", "rb");
    
    			char str[999];
    
    if (arq) {
        while (fscanf(arq, "%s", str)!=EOF)
            printf("%s",str);
        system("pause");
        fclose(arq);
    }
    		system("pause");
    
    	if(arq != NULL){
    		int indice = 0;
    		while(1){
    			T_ficha_cliente p;
    			size_t r = fread(&p, sizeof(T_ficha_cliente), 1, arq);
    
    			// se retorno for menor que o count, então sai do loop
    			if(r < 1)
    				break;
    			else
    				arr[indice++] = p;
    		}
    		fclose(arq);
    		return indice;
    	}
    	else
    	{
    		printf("\nErro ao abrir o arquivo para leitura!\n");
    		system("pause");
    		exit(1);
    	}
    }

    Não consegui inserir como C os códigos desculpe

    Editado por Simon Viegas
    Alterado tag CODE para "C Languages"

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    @Junior Anzolin A leitura continua igual, eu testei aqui e ele salvou e carregou normalmente.

    Usar printf não adianta, pois é um arquivo binário.

    
    fwrite(&clientes[i], sizeof(T_ficha_cliente), 1, arq);
    fwrite(&vendedores[i], sizeof(T_ficha_vendedores), 1, arq);
    fwrite(&produtos[i], sizeof(T_ficha_produtos), 1, arq);

     

    Editado por TYSQUARE89
    • Obrigado 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 18 horas atrás, TYSQUARE89 disse:

    @Junior Anzolin A leitura continua igual, eu testei aqui e ele salvou e carregou normalmente.

    Usar printf não adianta, pois é um arquivo binário.

    
    
    fwrite(&clientes[i], sizeof(T_ficha_cliente), 1, arq);
    fwrite(&vendedores[i], sizeof(T_ficha_vendedores), 1, arq);
    fwrite(&produtos[i], sizeof(T_ficha_produtos), 1, arq);

     

    Que compilador esta usando? pois pelo dev c++ nao esta fazendo certo

     

    adicionado 2 minutos depois
    18 horas atrás, TYSQUARE89 disse:

    @Junior Anzolin A leitura continua igual, eu testei aqui e ele salvou e carregou normalmente.

    Usar printf não adianta, pois é um arquivo binário.

    
    
    fwrite(&clientes[i], sizeof(T_ficha_cliente), 1, arq);
    fwrite(&vendedores[i], sizeof(T_ficha_vendedores), 1, arq);
    fwrite(&produtos[i], sizeof(T_ficha_produtos), 1, arq);

     

    E não sei se isso interfere mas estou usando outro tipo alem de char mas não funcionou as minhas structs esta assim

    	typedef struct ficha_vendedores{
    		int viCodigo;
    		char vcNome[30];
    		char vcEndereco[50];
    		char vcFone[20];
    		int ativo;
    	}T_ficha_vendedores;
    	typedef struct ficha_produtos{
    		int viCodigo;
    		int viUniEstoque;
    		char vcDescricao[50];
    		char vcFornecedor[30];
    		char vcDataComp[20];
    		float vfPreco;
    		int ativo;
    	}T_ficha_produtos;
    	typedef struct ficha_cliente{
    		int viCodigo;
    		char vcNome[30];
    		char vcEndereco[50];
    		char vcFone[20];
    		int vbCredito;
    		int ativo;
    	}T_ficha_cliente;

     

    adicionado 40 minutos depois
    18 horas atrás, TYSQUARE89 disse:

    @Junior Anzolin A leitura continua igual, eu testei aqui e ele salvou e carregou normalmente.

    Usar printf não adianta, pois é um arquivo binário.

    
    
    fwrite(&clientes[i], sizeof(T_ficha_cliente), 1, arq);
    fwrite(&vendedores[i], sizeof(T_ficha_vendedores), 1, arq);
    fwrite(&produtos[i], sizeof(T_ficha_produtos), 1, arq);

     

    Se não for incomodo poderia testar com todo o scrypt?

     

    Código:

    Spoiler
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    	typedef struct ficha_vendedores{
    		int viCodigo;
    		char vcNome[30];
    		char vcEndereco[50];
    		char vcFone[20];
    		int ativo;
    	}T_ficha_vendedores;
    	typedef struct ficha_produtos{
    		int viCodigo;
    		int viUniEstoque;
    		char vcDescricao[50];
    		char vcFornecedor[30];
    		char vcDataComp[20];
    		float vfPreco;
    		int ativo;
    	}T_ficha_produtos;
    	typedef struct ficha_cliente{
    		int viCodigo;
    		char vcNome[30];
    		char vcEndereco[50];
    		char vcFone[20];
    		int vbCredito;
    		int ativo;
    	}T_ficha_cliente;
    
    int lerVendedor(T_ficha_vendedores arr[]){
    		FILE * arq = fopen("vendedores.bin", "rb");
    
    	if(arq != NULL){
    		int indice = 0;
    		while(1){
    			T_ficha_vendedores p;
    
    			size_t r = fread(&p, sizeof(T_ficha_vendedores), 1, arq);
    
    			// se retorno for menor que o count, então sai do loop
    			if(r < 1)
    				break;
    			else
    				arr[indice++] = p;
    		}
    		fclose(arq); // fecha o arquivo
    		return indice;
    	}
    	else
    	{
    		printf("\nErro ao abrir o arquivo para leitura!\n");
    		system("pause");
    		exit(1);
    	}
    }
    int lerProdutos(T_ficha_produtos arr[]){
    		FILE * arq = fopen("produtos.bin", "rb");
    
    
    	if(arq != NULL){
    		int indice = 0;
    		while(1){
    			T_ficha_produtos p;
    
    			size_t r = fread(&p, sizeof(T_ficha_produtos), 1, arq);
    
    			// se retorno for menor que o count, então sai do loop
    			if(r < 1)
    				break;
    			else
    				arr[indice++] = p;
    		}
    		fclose(arq); // fecha o arquivo
    		return indice;
    	}
    	else
    	{
    		printf("\nErro ao abrir o arquivo para leitura!\n");
    		system("pause");
    		exit(1);
    	}
    }
    int lerClientes(T_ficha_cliente arr[]){
    	FILE * arq = fopen("clientes.bin", "rb");
    	if(arq != NULL){
    		int indice = 0;
    		while(1){
    			T_ficha_cliente p;
    			size_t r = fread(&p, sizeof(T_ficha_cliente), 1, arq);
    
    			// se retorno for menor que o count, então sai do loop
    			if(r < 1)
    				break;
    			else
    				arr[indice++] = p;
    		}
    		fclose(arq);
    		return indice;
    	}
    	else
    	{
    		printf("\nErro ao abrir o arquivo para leitura!\n");
    		system("pause");
    		exit(1);
    	}
    }
    void CadastraVendedores(T_ficha_vendedores vendedor[], int viCodigo){
    	system("cls");
    	printf("\n\n<---------- Novo vendedor ---------->\n\n");
    
    	vendedor[viCodigo].ativo = 1;
    	vendedor[viCodigo].viCodigo = viCodigo;
    	printf("Codigo: %d\n\n", vendedor[viCodigo].viCodigo);
    
    	fflush(stdin); 
    	printf("Nome: ");
    	fgets(vendedor[viCodigo].vcNome, 30, stdin);
    
    	fflush(stdin); 
    	printf("Endereco: ");
    	fgets(vendedor[viCodigo].vcEndereco, 50, stdin);
    
    	fflush(stdin); 
    	printf("Telefone: ");
    	fgets(vendedor[viCodigo].vcFone, 20, stdin);
    
    	printf("\n<---------- Novo vendedor ---------->\n\n");
    }
    void CadastraProdutos(T_ficha_produtos produto[], int viCodigo){
    	system("cls");
    	printf("\n\n<---------- Novo produto ---------->\n\n");
    
    	produto[viCodigo].ativo = 1;
    	produto[viCodigo].viCodigo = viCodigo;
    	printf("Codigo: %d\n\n", produto[viCodigo].viCodigo);
    
    	fflush(stdin); 
    	printf("Unidade no estoque: ");
    	scanf("%d", &produto[viCodigo].viUniEstoque);
    
    	fflush(stdin); 
    	printf("Descricao do produto: ");
    	fgets(produto[viCodigo].vcDescricao, 50, stdin);
    
    	fflush(stdin); 
    	printf("Fornecedor: ");
    	fgets(produto[viCodigo].vcFornecedor, 30, stdin);
    
    	fflush(stdin); 
    	printf("Preco final: ");
    	scanf("%f", &produto[viCodigo].vfPreco);
    
    	fflush(stdin); 
    	printf("Data da compra 00/00/0000: ");
    	fgets(produto[viCodigo].vcDataComp, 20, stdin);
    
    	printf("\n<---------- Novo produto ---------->\n\n");
    }
    void CadastraClientes(T_ficha_cliente cliente[], int viCodigo){
    	system("cls");
    	printf("\n\n<---------- Novo cliente ---------->\n\n");
    
    	cliente[viCodigo].vbCredito = 1;
    	cliente[viCodigo].ativo = 1;
    	cliente[viCodigo].viCodigo = viCodigo;
    	printf("Codigo: %d\n\n", cliente[viCodigo].viCodigo);
    
    	fflush(stdin); 
    	printf("Nome: ");
    	fgets(cliente[viCodigo].vcNome, 30, stdin);
    
    	fflush(stdin); 
    	printf("Endereco: ");
    	fgets(cliente[viCodigo].vcEndereco, 50, stdin);
    
    	fflush(stdin); 
    	printf("Telefone: ");
    	fgets(cliente[viCodigo].vcFone, 20, stdin);
    
    	printf("\n<---------- Novo cliente ---------->\n\n");
    }
    void VerifyContinue(char text[50], int *result){
    	char out[5];
    	*result = 10;
    	printf("%s[s/n]\n", text);
    	fflush(stdin); 
    	fgets(out, 5, stdin);
    	if((strncmp(out, "s", 1))){
    		*result = 0;
    	}
    }
    void PrintMenu(int *option){
    	system("cls");
    	printf("<============================>\n");
    	printf("<----------- Menu ----------->\n");
    	printf("<============================>\n");
    	printf("<=      1. Cadastrar        =>\n");
    	printf("<=      2. Listar           =>\n");
    	printf("<=      3. Emitir venda     =>\n");
    	printf("<=      0. Sair             =>\n");
    	printf("<============================>\n");
    	scanf("%d", &*option);
    }
    void MenuCadastros(int *option){
    	system("cls");
    	printf("<============================>\n");
    	printf("<------ Menu Cadastro ------->\n");
    	printf("<============================>\n");
    	printf("<=      1. Novo cliente     =>\n");
    	printf("<=      2. Novo produto     =>\n");
    	printf("<=      3. Novo vendedor    =>\n");
    	printf("<=      0. Voltar ao inicio =>\n");
    	printf("<============================>\n");
    	scanf("%d", &*option);
    }
    void MenuProcurar(int *option){
    	system("cls");
    	printf("<============================>\n");
    	printf("<--------- Procurar --------->\n");
    	printf("<============================>\n");
    	printf("<=      1. Clientes         =>\n");
    	printf("<=      2. Produtos         =>\n");
    	printf("<=      3. Vendedores       =>\n");
    	printf("<=      0. Voltar ao inicio =>\n");
    	printf("<============================>\n");
    	scanf("%d", &*option);
    }
    void MenuListar(int *option){
    	system("cls");
    	printf("<============================>\n");
    	printf("<---------- Listar ---------->\n");
    	printf("<============================>\n");
    	printf("<=      1. Clientes         =>\n");
    	printf("<=      2. Produtos         =>\n");
    	printf("<=      3. Vendedores       =>\n");
    	printf("<=      0. Voltar ao inicio =>\n");
    	printf("<============================>\n");
    	scanf("%d", &*option);
    }
    void MenuDetalhes(int *option){
    	printf("<============================>\n");
    	printf("<--------- Detalhes --------->\n");
    	printf("<============================>\n");
    	printf("<=      1. Alterar          =>\n");
    	printf("<=      2. Excluir          =>\n");
    	printf("<=      0. Voltar           =>\n");
    	printf("<============================>\n");
    	scanf("%d", &*option);
    }
    void SalvarArqClientes(T_ficha_cliente clientes[], int sizeVet){
    	int i;
    	FILE * arq;
    	T_ficha_cliente p;
    	arq = fopen("clientes.bin", "w");
    
    	if(arq != NULL){
    		for (i = 0; i < sizeVet; i++){
    			p = clientes[i];
    			fwrite(&p, sizeof(T_ficha_cliente), 1, arq);
    		}
    		fclose(arq);
    	}else{
    		printf("Erro ao salvar o arquivo\n");
    		system("pause");
    		exit(1);
    	}
    }
    void SalvarArqProdutos(T_ficha_produtos produtos[], int sizeVet){
    	int i;
    	FILE * arq;
    	T_ficha_produtos p;
    	arq = fopen("clientes.bin", "w");
    
    	if(arq != NULL){
    		for (i = 0; i < sizeVet; i++){
    			p = produtos[i];
    			fwrite(&p, sizeof(T_ficha_produtos), 1, arq);
    		}
    		fclose(arq);
    	}else{
    		printf("Erro ao salvar o arquivo\n");
    		system("pause");
    		exit(1);
    	}
    }
    void SalvarArqVendedores(T_ficha_vendedores vendedores[], int sizeVet){
    	int i;
    	FILE * arq;
    	T_ficha_vendedores p;
    	arq = fopen("clientes.bin", "w");
    
    	if(arq != NULL){
    		for (i = 0; i < sizeVet; i++){
    			p = vendedores[i];
    			fwrite(&p, sizeof(T_ficha_vendedores), 1, arq);
    		}
    		fclose(arq);
    	}else{
    		printf("Erro ao salvar o arquivo\n");
    		system("pause");
    		exit(1);
    	}
    }
    void ListarClientes(T_ficha_cliente arr[], int size){
    	int i, sizeA = 0;
    	for(i = 0; i < size; i++){
    		if(arr[i].ativo == 1){
    			sizeA += 1;
    		}
    	}
    	if(sizeA > 0){
    		for(i = 0; i < size; i++){
    			if(arr[i].ativo==1){
    				printf("\n<===============================>\n\n");
    				printf("ID: %d\n", i+1);
    				printf("CODIGO: %d\n", arr[i].viCodigo);
    				printf("NOME: %s", arr[i].vcNome);
    				printf("\n<===============================>\n");
    			}
    		}
    	}else{
    		printf("Nenhum regstro encontrado.\n");
    	}
    }
    void DetalhesCliente(T_ficha_cliente arr[], int option){
    	printf("CLIENTE %d\n", option);
    	printf("CODIGO: %d\n", arr[option-1].viCodigo);
    	printf("NOME: %s\b\n", arr[option-1].vcNome);
    	printf("ENDERECO: %s\b\n", arr[option-1].vcEndereco);
    	printf("TELEFONE: %s\b\n", arr[option-1].vcFone);
    	printf("STATUS CREDITO: ");
    	if(arr[option-1].vbCredito = 1){
    		printf("OK!\n");
    	}else{
    		printf("EM DEBITO\n");
    	}
    }
    void AlteraCliente(T_ficha_cliente cliente[], int option){
    	int verify;
    	system("cls");
    	printf("\n\n<---------- Editar cliente ---------->\n\n");
    
    	printf("Codigo: %d\n\n", cliente[option-1].viCodigo);
    
    	if(cliente[option-1].vbCredito == 0){
    		printf("Este cliente tem debitos pendentes.\n");
    		VerifyContinue("Foram pagos?", &verify);
    		if(verify == 0){
    			cliente[option-1].vbCredito = 1;
    			printf("Atualizado com sucesso!\n");
    		}else{
    			printf("OK!\n");
    		}
    	}
    
    	system("cls");
    	printf("\n\n<---------- Editar cliente ---------->\n\n");
    
    	printf("Codigo: %d\n\n", cliente[option-1].viCodigo);
    
    	printf("NOME: %s\n", cliente[option-1].vcNome);
    	VerifyContinue("Alterar NOME?", &verify);
    	if(verify == 0){
    		printf("OK!\n");
    	}else{
    		fflush(stdin); 
    		printf("Nome: ");
    		fgets(cliente[option-1].vcNome, 30, stdin);
    	}
    
    	system("cls");
    	printf("\n\n<---------- Editar cliente ---------->\n\n");
    
    	printf("Codigo: %d\n\n", cliente[option-1].viCodigo);
    
    	printf("ENDERECO: %s\n", cliente[option-1].vcEndereco);
    	VerifyContinue("Alterar ENDERECO?", &verify);
    	if(verify == 0){
    		printf("OK!\n");
    	}else{
    		fflush(stdin); 
    		printf("Endereco: ");
    		fgets(cliente[option-1].vcEndereco, 50, stdin);	
    	}
    
    	system("cls");
    	printf("\n\n<---------- Editar cliente ---------->\n\n");
    
    	printf("Codigo: %d\n\n", cliente[option-1].viCodigo);
    
    	printf("TELEFONE: %s\n", cliente[option-1].vcFone);
    	VerifyContinue("Alterar TELEFONE?", &verify);
    	if(verify == 0){
    		printf("OK!\n");
    	}else{
    		fflush(stdin); 
    		printf("Telefone: ");
    		fgets(cliente[option-1].vcFone, 20, stdin);
    	}
    
    	printf("\n<---------- Editar cliente ---------->\n\n");
    }
    void ExcluiCliente(T_ficha_cliente cliente[], int option){
    	cliente[option-1].ativo = 0;
    	if(cliente[option-1].ativo == 0){
    		printf("Produto excluido com sucesso\n");
    	}else{
    		printf("Ops! Algo deu errado\n");
    	}
    }
    void ListarProdutos(T_ficha_produtos arr[], int size){
    	int i, sizeA = 0;
    	for(i = 0; i < size; i++){
    		if(arr[i].ativo == 1){
    			sizeA += 1;
    		}
    	}
    	if(sizeA > 0){
    		for(i = 0; i < size; i++){
    			if(arr[i].ativo==1){
    				printf("\n<===============================>\n\n");
    				printf("ID: %d\n", i+1);
    				printf("CODIGO: %d\n", arr[i].viCodigo);
    				printf("DESCRICAO: %s", arr[i].vcDescricao);
    				printf("QTD. EM ESTOQUE: %d\n", arr[i].viUniEstoque);
    				printf("PRECO UNI.: %.2f\n", arr[i].vfPreco);
    				printf("\n<===============================>\n");
    			}
    		}
    	}else{
    		printf("Nenhum regstro encontrado.\n");
    	}
    }
    void DetalhesProduto(T_ficha_produtos arr[], int option){
    	printf("PRODUTO %d\n", option);
    	printf("CODIGO: %d\n", arr[option-1].viCodigo);
    	printf("UNIDADES EM ESTOQUE: %d\n", arr[option-1].viUniEstoque);
    	printf("DESCRICAO DO PRODUTO: %s\b\n", arr[option-1].vcDescricao);
    	printf("FORNECEDOR:  %s\b\n", arr[option-1].vcFornecedor);
    	printf("DATA DA COMPRA: %s\b\n", arr[option-1].vcDataComp);
    	printf("PRECO: %.2f\n", arr[option-1].vfPreco);
    }
    void AlteraProduto(T_ficha_produtos produto[], int option){
    	int verify;
    	system("cls");
    	printf("\n\n<---------- Editar produto ---------->\n\n");
    
    	printf("Codigo: %d\n\n", produto[option-1].viCodigo);
    
    	printf("UNIDADES EM ESTOQUE: %d\n", produto[option-1].viUniEstoque);
    	VerifyContinue("Alterar UNIDADES EM ESTOQUE?", &verify);
    	if(verify == 0){
    		printf("OK!\n");
    	}else{
    		fflush(stdin); 
    		printf("Unidade no estoque: ");
    		scanf("%d", &produto[option-1].viUniEstoque);
    	}
    
    	system("cls");
    	printf("\n\n<---------- Editar produto ---------->\n\n");
    
    	printf("Codigo: %d\n\n", produto[option-1].viCodigo);
    
    	printf("DESCRICAO DO PRODUTO: %s\n", produto[option-1].vcDescricao);
    	VerifyContinue("Alterar DESCRICAO DO PRODUTO?", &verify);
    	if(verify == 0){
    		printf("OK!\n");
    	}else{
    		fflush(stdin); 
    		printf("Descricao do produto: ");
    		fgets(produto[option-1].vcDescricao, 50, stdin);
    	}
    
    	system("cls");
    	printf("\n\n<---------- Editar produto ---------->\n\n");
    
    	printf("Codigo: %d\n\n", produto[option-1].viCodigo);
    
    	printf("FORNECEDOR: %s\n", produto[option-1].vcFornecedor);
    	VerifyContinue("Alterar FORNECEDOR?", &verify);
    	if(verify == 0){
    		printf("OK!\n");
    	}else{
    		fflush(stdin); 
    		printf("Fornecedor: ");
    		fgets(produto[option-1].vcFornecedor, 30, stdin);
    	}
    
    	system("cls");
    	printf("\n\n<---------- Editar produto ---------->\n\n");
    
    	printf("Codigo: %d\n\n", produto[option-1].viCodigo);
    
    	printf("PRECO: %.2f\n", produto[option-1].vfPreco);
    	VerifyContinue("Alterar PRECO?", &verify);
    	if(verify == 0){
    		printf("OK!\n");
    	}else{
    		fflush(stdin); 
    		printf("Preco final: ");
    		scanf("%f", &produto[option-1].vfPreco);
    	}
    
    	system("cls");
    	printf("\n\n<---------- Editar produto ---------->\n\n");
    
    	printf("Codigo: %d\n\n", produto[option-1].viCodigo);
    
    	printf("DATA DA COMPRA: %s\n", produto[option-1].vcDataComp);
    	VerifyContinue("Alterar DATA DA COMPRA?", &verify);
    	if(verify == 0){
    		printf("OK!\n");
    	}else{
    		fflush(stdin); 
    		printf("Data da compra 00/00/0000: ");
    		fgets(produto[option-1].vcDataComp, 20, stdin);
    	}
    
    	printf("\n<---------- Editar produto ---------->\n\n");
    }
    void ExcluiProduto(T_ficha_produtos produto[], int option){
    	produto[option-1].ativo = 0;
    	if(produto[option-1].ativo == 0){
    		printf("Produto excluido com sucesso\n");
    	}else{
    		printf("Ops! Algo deu errado\n");
    	}
    }
    void ListarVendedores(T_ficha_vendedores arr[], int size){
    	int i, sizeA = 0;
    	for(i = 0; i < size; i++){
    		if(arr[i].ativo == 1){
    			sizeA += 1;
    		}
    	}
    	if(sizeA > 0){
    		for (i = 0; i < size; i++){
    			if(arr[i].ativo==1){
    				printf("\n<===============================>\n\n");
    				printf("ID: %d\n", i+1);
    				printf("CODIGO: %d\n", arr[i].viCodigo);
    				printf("NOME: %s", arr[i].vcNome);
    				printf("\n<===============================>\n");
    			}
    		}
    	}else{
    		printf("Nenhum regstro encontrado.\n");
    	}
    }
    void DetalhesVendedor(T_ficha_vendedores arr[], int option){
    	printf("VENDEDOR %d\n", option);
    	printf("CODIGO: %d\n", arr[option-1].viCodigo);
    	printf("NOME: %s\b\n", arr[option-1].vcNome);
    	printf("ENDERECO: %s\b\n", arr[option-1].vcEndereco);
    	printf("TELEFONE:  %s\b\n", arr[option-1].vcFone);
    }
    void AlteraVendedor(T_ficha_vendedores vendedor[], int option){
    	int verify;
    	system("cls");
    	printf("\n\n<---------- Editar vendedor ---------->\n\n");
    
    	printf("Codigo: %d\n\n", vendedor[option-1].viCodigo);
    
    	printf("NOME: %s\n", vendedor[option-1].vcNome);
    	VerifyContinue("Alterar NOME?", &verify);
    	if(verify == 0){
    		printf("OK!\n");
    	}else{
    		fflush(stdin); 
    		printf("Nome: ");
    		fgets(vendedor[option-1].vcNome, 30, stdin);
    	}
    
    	system("cls");
    	printf("\n\n<---------- Editar vendedor ---------->\n\n");
    
    	printf("Codigo: %d\n\n", vendedor[option-1].viCodigo);
    
    	printf("ENDERECO: %s\n", vendedor[option-1].vcNome);
    	VerifyContinue("Alterar ENDERECO?", &verify);
    	if(verify == 0){
    		printf("OK!\n");
    	}else{
    		fflush(stdin); 
    		printf("Endereco: ");
    		fgets(vendedor[option-1].vcEndereco, 50, stdin);
    	}
    
    	system("cls");
    	printf("\n\n<---------- Editar vendedor ---------->\n\n");
    
    	printf("Codigo: %d\n\n", vendedor[option-1].viCodigo);
    
    	printf("TELEFONE: %s\n", vendedor[option-1].vcNome);
    	VerifyContinue("Alterar TELEFONE?", &verify);
    	if(verify == 0){
    		printf("OK!\n");
    	}else{
    		fflush(stdin); 
    		printf("Telefone: ");
    		fgets(vendedor[option-1].vcFone, 20, stdin);
    	}
    
    	printf("\n<---------- Editar vendedor ---------->\n\n");
    }
    void ExcluiVendedor(T_ficha_vendedores vendedor[], int option){
    	vendedor[option-1].ativo = 0;
    	if(vendedor[option-1].ativo == 0){
    		printf("Vendedor excluido com sucesso\n");
    	}else{
    		printf("Ops! Algo deu errado\n");
    	}
    }
    int getVendedor(T_ficha_vendedores arr[], int size){
    	int id;
    	do{
    		system("cls");
    		ListarVendedores(arr, size);
    		printf("Digite o ID do vendedor que esta vendendo.\n");
    		scanf("%d", &id);
    		if(id == 0){
    			printf("ID invalido!\n");
    			system("pause");
    		}
    	}while(id == 0);
    		return id--;
    }
    int getCliente(T_ficha_cliente arr[], int size){
    	int id;
    	do{
    		system("cls");
    		ListarClientes(arr, size);
    		printf("Digite o ID do cliente que esta comprando.\n");
    		scanf("%d", &id);
    		if(id == 0){
    			printf("ID invalido!\n");
    			system("pause");
    		}
    		if(arr[id - 1].ativo==1){
    			if(arr[id - 1].vbCredito==1){
    				arr[id - 1].vbCredito=0;
    				return id--;
    			}else{
    				printf("Desculpe mas este cliente está com debitos pendentes.\n");
    				id = 0;
    			}
    		}else{
    				printf("Desculpe mas este cliente está desativado.\n");
    				id = 0;
    		}
    	}while(id == 0);
    }
    void ListarCarrinho(int itens[], int quant[], T_ficha_produtos produtos[]){
    	int i, countItens=sizeof(itens)/sizeof(itens[0]);
    	float totalC=0;
    	system("cls");
    	for (i = 0; i < countItens; ++i){
    		printf("\n<===============================>\n\n");
    		printf("CODIGO: %d\n", produtos[itens[i]].viCodigo);
    		printf("QUANTIDADE: %d\n", quant[i]);
    		printf("DESCRICAO: %s", produtos[itens[i]].vcDescricao);
    		printf("PRECO UNI.: %.2f\n", produtos[itens[i]].vfPreco);
    
    		float preco = produtos[itens[i]].vfPreco;
    		int quantidade = quant[i];
    		totalC += preco * quantidade;
    
    		printf("TOTAL: %2.f\n", preco * quantidade);
    		printf("\n<===============================>\n");
    	}
    	printf("\nTotal da compra = %.2f\n\n", totalC);
    }
    void NotaFiscal(int itens[], int quant[], T_ficha_produtos produtos[], T_ficha_vendedores vendedor[], T_ficha_cliente cliente[], int codVend, int codClie){
    	int i, countItens=sizeof(itens);
    	float totalC=0;
    	system("cls");
    	printf("\n\tNOTA FISCAL\t\n\n");
    	printf("\tVendedor\t\n\n");
    	printf("CODIGO: %d\n", vendedor[codVend-1].viCodigo);
    	printf("NOME: %s\n\n", vendedor[codVend-1].vcNome);
    	printf("\tCliente\t\n\n");
    	printf("CODIGO: %d\n", cliente[codVend-1].viCodigo);
    	printf("NOME: %s\n\n", cliente[codVend-1].vcNome);
    	printf("\tProdutos:\t\n\n");
    	printf("CODIGO\t|\tQUANT.\t|\tDESC.\t|\tPRECO UNI.\n");
    	/*for (i = 0; i < countItens; ++i){
    		printf("%d", produtos[itens[i]].viCodigo);
    		printf("\t|\t");
    		printf("%d", quant[i]);
    		printf("\t|\t");
    		printf("%s\b", produtos[itens[i]].vcDescricao);
    		printf("\t|\t");
    		printf("%.2f\n", produtos[itens[i]].vfPreco);
    
    		float preco = produtos[itens[i]].vfPreco;
    		int quantidade = quant[i];
    		totalC += preco * quantidade;
    
    		printf("TOTAL: %2.f\n", preco * quantidade);
    		printf("\n<===============================>\n");
    	}
    	printf("\nTotal da compra = %.2f\n", totalC);*/
    }
    void NovaVenda(T_ficha_cliente clientes[], T_ficha_produtos produtos[], T_ficha_vendedores vendedores[], int sizeC, int sizeP, int sizeV){
    	system("cls");
    	int codVend, codProdutos[100], codClie, test, count=0, prod, quantTemp, quant[100];
    
    	codVend = getVendedor(vendedores, sizeV);
    	codClie = getCliente(clientes, sizeC);
    
    	do{
    		system("cls");
    		ListarProdutos(produtos, sizeP);
    		printf("Digite o ID do produto para adicionar no carrinho.\n");
    		scanf("%d", &prod);
    		printf("Quantos?\n");
    		scanf("%d", &quantTemp);
    		if(produtos[prod-1].viUniEstoque >= quantTemp){
    			quant[count] = quantTemp;
    			codProdutos[count] = prod-1;
    			produtos[prod-1].viUniEstoque = produtos[prod-1].viUniEstoque - quantTemp;
    			count++;
    		}else{
    			printf("Ops! Nao temos tanto no estoque.\nProduto nao adicionado ao carrinho!\n");
    		}
    		VerifyContinue("Cadastrar mais?", &test);
    	}while(test != 0);
    
    	ListarCarrinho(codProdutos, quant, produtos);
    	
    	VerifyContinue("Emitir nota fiscal?", &test);
    	if(test != 0){
    		NotaFiscal(codProdutos, quant, produtos, vendedores, clientes, codVend, codClie);
    		system("pause");
    	}else{
    		printf("\n\nVenda realizada com sucesso!\n\n\n");
    		system("pause");
    	}
    }
    
    void ProcurarClientes(T_ficha_cliente arr[], int size){
    	char pesquisa[50];
    	int i;
    	printf("Informe o Nome que procura:");
    	fflush(stdin);
    	fgets(pesquisa, 50, stdin);
    	for(i=0; i< size; i++){
    		if(strcmp(pesquisa, arr[i].vcNome) == 0){
    			printf("<---------------------------------------->\n");
    			DetalhesCliente(arr, i+1);
    			printf("<---------------------------------------->\n");
    		}
    	}
    	system("pause");
    }
    void ProcurarProdutos(T_ficha_produtos arr[], int size){
    	char pesquisa[50];
    	int i;
    	printf("Informe a descricao que procura:");
    	fflush(stdin);
    	fgets(pesquisa, 50, stdin);
    	for(i=0; i< size; i++){
    		if(strcmp(pesquisa, arr[i].vcDescricao) == 0){
    			printf("<---------------------------------------->\n");
    			DetalhesProduto(arr, i+1);
    			printf("<---------------------------------------->\n");
    		}
    	}
    	system("pause");
    }
    void ProcurarVendedores(T_ficha_vendedores arr[], int size){
    	char pesquisa[50];
    	int i;
    	printf("Informe o Nome que procura:");
    	fflush(stdin);
    	fgets(pesquisa, 50, stdin);
    	for(i=0; i< size; i++){
    		if(strcmp(pesquisa, arr[i].vcNome) == 0){
    			printf("<---------------------------------------->\n");
    			DetalhesVendedor(arr, i+1);
    			printf("<---------------------------------------->\n");
    		}
    	}
    	system("pause");
    }
    
    int main(void){
    	int viMenu, idC=0, idP=0, idV=0, i, sair, option, optiondt, verify;
    	T_ficha_cliente clientes[100];
    	T_ficha_produtos produtos[50];
    	T_ficha_vendedores vendedores[10];
    	int sizeC = lerClientes(clientes);
    	int sizeV = lerVendedor(vendedores);
    	int sizeP = lerProdutos(produtos);
    	int sizeAC, sizeAP, sizeAV;
    	do{
    		PrintMenu(&viMenu);
    
    		system("cls");
    		switch(viMenu){
    			case 1:
    				do{
    					MenuCadastros(&sair);
    					switch(sair){
    						case 1:
    							if(sizeC < 100){
    								CadastraClientes(clientes, sizeC);
    								sizeC += 1;
    								break;
    							}else{
    								printf("Ops! Nao tenho mais espaco!\n");
    								system("pause");
    								sair = 0;
    							}
    						case 2:
    							if(sizeV < 50){
    								CadastraProdutos(produtos, sizeP);
    								sizeP += 1;
    								break;
    							}else{
    								printf("Ops! Nao tenho mais espaco!\n");
    								system("pause");
    								sair = 0;
    							}
    						case 3:
    							if(sizeP < 10){
    								CadastraVendedores(vendedores, sizeV);
    								sizeV += 1;
    								break;
    							}else{
    								printf("Ops! Nao tenho mais espaco!\n");
    								system("pause");
    								sair = 0;
    							}
    					}
    				}while(sair != 0);
    				break;
    			case 2:
    				do{
    					MenuListar(&sair);
    					system("cls");
    					switch(sair){
    						case 1:
    							do{
    								system("cls");
    								ListarClientes(clientes, sizeC);
    								sizeAC = 0;
    								for(i = 0; i < sizeC; i++){
    									if(clientes[i].ativo == 1){
    										sizeAC += 1;
    									}
    								}
    								if(sizeAC > 0){
    									printf("Digite o ID do cliente para ver detalhes, alterar ou excluir\nOu 0 para voltar ao menu anterior\n");
    								}else{
    									printf("Digite 0 para voltar ao menu anterior\n");
    								}
    								scanf("%d", &option);
    								if(option == 0){
    									break;
    								}
    								system("cls");
    								DetalhesCliente(clientes, option);
    								MenuDetalhes(&optiondt);
    								system("cls");
    								switch(optiondt){
    									case 1:
    										do{
    											AlteraCliente(clientes, option);
    											system("cls");
    											DetalhesCliente(clientes, option);
    											VerifyContinue("Tudo certo?", &verify);
    										}while(verify == 0);
    										break;
    									case 2:
    										ExcluiCliente(clientes, option);
    										system("pause");
    										break;
    								}
    							}while((option != 0) || (clientes[option-1].ativo != 0));
    							break;
    						case 2:
    							do{
    								system("cls");
    								ListarProdutos(produtos, sizeP);
    								sizeAP = 0;
    								for(i = 0; i < sizeP; i++){
    									if(produtos[i].ativo == 1){
    										sizeAP += 1;
    									}
    								}
    								if(sizeAP > 0){
    									printf("Digite o ID do produto para ver detalhes, alterar ou excluir\nOu 0 para voltar ao menu anterior\n");
    								}else{
    									printf("Digite 0 para voltar ao menu anterior\n");
    								}
    								scanf("%d", &option);
    								if(option == 0){
    									break;
    								}
    								system("cls");
    								DetalhesProduto(produtos, option);
    								MenuDetalhes(&optiondt);
    								system("cls");
    								switch(optiondt){
    									case 1:
    										do{
    											AlteraProduto(produtos, option);
    											system("cls");
    											DetalhesProduto(produtos, option);
    											VerifyContinue("Tudo certo?", &verify);
    										}while(verify == 0);
    										break;
    									case 2:
    										ExcluiProduto(produtos, option);
    										system("pause");
    										break;
    								}
    							}while((option != 0) || (produtos[option-1].ativo != 0));
    							break;
    						case 3:
    							do{
    								system("cls");
    								ListarVendedores(vendedores, sizeV);
    								sizeAV = 0;
    								for(i = 0; i < sizeV; i++){
    									if(vendedores[i].ativo == 1){
    										sizeAV += 1;
    									}
    								}
    								if(sizeAV > 0){
    									printf("Digite o ID do produto para ver detalhes, alterar ou excluir\nOu 0 para voltar ao menu anterior\n");
    								}else{
    									printf("Digite 0 para voltar ao menu anterior\n");
    								}
    								scanf("%d", &option);
    								if(option == 0){
    									break;
    								}
    								system("cls");
    								DetalhesVendedor(vendedores, option);
    								MenuDetalhes(&optiondt);
    								system("cls");
    								switch(optiondt){
    									case 1:
    										do{
    											AlteraVendedor(vendedores, option);
    											system("cls");
    											DetalhesVendedor(vendedores, option);
    											VerifyContinue("Tudo certo?", &verify);
    										}while(verify == 0);
    										break;
    									case 2:
    										ExcluiVendedor(vendedores, option);
    										system("pause");
    										break;
    								}
    							}while((option != 0) || (vendedores[option-1].ativo != 0));
    							break;
    					}
    				}while(sair != 0);
    				break;
    			case 3:
    				do{
    					sair = 10;
    					if((sizeC > 0) && (sizeV > 0) && (sizeP > 0)){
    						NovaVenda(clientes, produtos, vendedores, sizeC, sizeP, sizeV);
    						VerifyContinue("Fazer uma nova venda?", &sair);
    					}else{
    						sair = 0;
    						if(sizeC <= 0){
    							printf("Ops! Nao ha clientes, por favor cadastra pelo menos um.\n");
    						}
    						if(sizeP <= 0){
    							printf("Ops! Nao ha produtos, por favor cadastra pelo menos um.\n");
    						}
    						if(sizeV <= 0){
    							printf("Ops! Nao ha vendedores, por favor cadastra pelo menos um.\n");
    						}
    						system("pause");
    					}
    				}while(sair != 0);
    				break;
    			case 4:
    				do{
    					sair = 10;
    					MenuProcurar(&sair);
    					switch(sair){
    						case 1:
    							ProcurarClientes(clientes, sizeC);
    							break;
    						case 2:
    							ProcurarProdutos(produtos, sizeP);
    							break;
    						case 3:
    							ProcurarVendedores(vendedores, sizeV);
    							break;
    					}
    				}while(sair != 0);
    				break;
    		}
    		
    		SalvarArqClientes(clientes, sizeC);
    		SalvarArqProdutos(produtos, sizeP);
    		SalvarArqVendedores(vendedores, sizeV);
    
    	}while(viMenu != 0);
    
    	system("cls");
    	SalvarArqClientes(clientes, sizeC);
    	SalvarArqProdutos(produtos, sizeP);
    	SalvarArqVendedores(vendedores, sizeV);
    	printf("\n\n\n\t\tEncerrando...\n\n\n");
    	system("pause");
    	return 0;
    }

     

    Editado por Simon Viegas
    Inserir tag SPOLER

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Eu tentei e tentei com esse teu código mas esse fgets me ferrou, então tive que fazer uma função para limpar o buffer e ler a string, segue o código:

    Spoiler
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
        typedef struct ficha_vendedores{
            int viCodigo;
            char vcNome[30];
            char vcEndereco[50];
            char vcFone[20];
            int ativo;
        }T_ficha_vendedores;
        typedef struct ficha_produtos{
            int viCodigo;
            int viUniEstoque;
            char vcDescricao[50];
            char vcFornecedor[30];
            char vcDataComp[20];
            float vfPreco;
            int ativo;
        }T_ficha_produtos;
        typedef struct ficha_cliente{
            int viCodigo;
            char vcNome[30];
            char vcEndereco[50];
            char vcFone[20];
            int vbCredito;
            int ativo;
        }T_ficha_cliente;
      void limpaBuffer(){
            char c = '\n';
            while(1){ c = getchar(); if(c == '\n') break; }
    }
    void lerString(char *str, int maxlen){
            //limpa qualquer \n
            fflush(stdin);
    
            int len;
            char buff[200];
            //leitura/verificar tamanho
            scanf(" %[^\n]s", buff);
            len = (strlen(buff) > maxlen) ? (maxlen-1):strlen(buff);
            //copia
            strncpy(str,buff,len);
            //...
            limpaBuffer();
    }
    
    int lerVendedor(T_ficha_vendedores arr[]){
            FILE * arq = fopen("vendedores.bin", "rb");
        if(arq != NULL){
            int indice = 0;
            while(1){
                T_ficha_vendedores p;
                size_t r = fread(&p, sizeof(T_ficha_vendedores), 1, arq);
    
                // se retorno for menor que o count, então sai do loop
                if(r < 1)
                    break;
                else
                    arr[indice++] = p;
            }
            fclose(arq); // fecha o arquivo
            return indice;
        }
        else
        {
            printf("\nErro ao abrir o arquivo para leitura!\n");
            system("pause");
            exit(1);
        }
    }
    int lerProdutos(T_ficha_produtos arr[]){
            FILE * arq = fopen("produtos.bin", "rb");
        if(arq != NULL){
            int indice = 0;
            T_ficha_produtos p;
            while(1){
                size_t r = fread(&p, sizeof(T_ficha_produtos), 1, arq);
                // se retorno for menor que o count, então sai do loop
                if(r < 1)
                    break;
                else
                    arr[indice++] = p;
            }
            fclose(arq); // fecha o arquivo
            return indice;
        }
        else
        {
            printf("\nErro ao abrir o arquivo para leitura!\n");
            system("pause");
            exit(1);
        }
    }
    int lerClientes(T_ficha_cliente arr[]){
        FILE * arq = fopen("clientes.bin", "rb");
        if(arq != NULL){
            int indice = 0;
            T_ficha_cliente p;
            while(1){
                size_t r = fread(&p, sizeof(T_ficha_cliente), 1, arq);
                // se retorno for menor que o count, então sai do loop
                if(r < 1)
                    break;
                else
                    arr[indice++] = p;
            }
            fclose(arq);
            return indice;
        }
        else
        {
            printf("\nErro ao abrir o arquivo para leitura!\n");
            system("pause");
            exit(1);
        }
    }
    void CadastraVendedores(T_ficha_vendedores vendedor[], int viCodigo){
        fflush(stdin);
        system("cls");
    
        printf("\n\n<---------- Novo vendedor ---------->\n\n");
        vendedor[viCodigo].ativo = 1;
        vendedor[viCodigo].viCodigo = viCodigo;
    
        printf("Codigo: %d\n\n", vendedor[viCodigo].viCodigo);
        printf("Nome: ");
        lerString(vendedor[viCodigo].vcNome, 30);
    
        printf("Endereco: ");
        lerString(vendedor[viCodigo].vcEndereco, 50);
    
        printf("Telefone: ");
        lerString(vendedor[viCodigo].vcFone, 20);
    
        printf("\n<---------- Novo vendedor ---------->\n\n");
    }
    void CadastraProdutos(T_ficha_produtos produto[], int viCodigo){
        system("cls");
        printf("\n\n<---------- Novo produto ---------->\n\n");
        produto[viCodigo].ativo = 1;
        produto[viCodigo].viCodigo = viCodigo;
    
        printf("Codigo: %d\n\n", produto[viCodigo].viCodigo);
    
        printf("Unidade no estoque: ");
        scanf(" %d", &produto[viCodigo].viUniEstoque);
    
        printf("Descricao do produto: ");
        lerString(produto[viCodigo].vcDescricao, 50);
    
        printf("Fornecedor: ");
        lerString(produto[viCodigo].vcFornecedor, 30);
    
        printf("Preco final: ");
        scanf(" %f", &produto[viCodigo].vfPreco);
    
        printf("Data da compra 00/00/0000: ");
        lerString(produto[viCodigo].vcDataComp, 20);
    
        printf("\n<---------- Novo produto ---------->\n\n");
    }
    void CadastraClientes(T_ficha_cliente cliente[], int viCodigo){
        system("cls");
        printf("\n\n<---------- Novo cliente ---------->\n\n");
        cliente[viCodigo].vbCredito = 1;
        cliente[viCodigo].ativo = 1;
        cliente[viCodigo].viCodigo = viCodigo;
    
        printf("Codigo: %d\n\n", cliente[viCodigo].viCodigo);
    
        printf("Nome: ");
        lerString(cliente[viCodigo].vcNome, 30);
    
        printf("Endereco: ");
        lerString(cliente[viCodigo].vcEndereco, 50);
    
        printf("Telefone: ");
        lerString(cliente[viCodigo].vcFone, 20);
    
        printf("\n<---------- Novo cliente ---------->\n\n");
    }
    void VerifyContinue(char text[50], int *result){
        char out[5];
        *result = 10;
        printf("%s[s/n]\n", text);
        fflush(stdin);
        fgets(out, 5, stdin);
        if((strncmp(out, "s", 1))){
            *result = 0;
        }
    }
    void PrintMenu(int *option){
        system("cls");
        printf("<============================>\n");
        printf("<----------- Menu ----------->\n");
        printf("<============================>\n");
        printf("<=      1. Cadastrar        =>\n");
        printf("<=      2. Listar           =>\n");
        printf("<=      3. Emitir venda     =>\n");
        printf("<=      0. Sair             =>\n");
        printf("<============================>\n");
        scanf("%d", &*option);
    }
    void MenuCadastros(int *option){
        system("cls");
        printf("<============================>\n");
        printf("<------ Menu Cadastro ------->\n");
        printf("<============================>\n");
        printf("<=      1. Novo cliente     =>\n");
        printf("<=      2. Novo produto     =>\n");
        printf("<=      3. Novo vendedor    =>\n");
        printf("<=      0. Voltar ao inicio =>\n");
        printf("<============================>\n");
        scanf("%d", &*option);
    }
    void MenuProcurar(int *option){
        system("cls");
        printf("<============================>\n");
        printf("<--------- Procurar --------->\n");
        printf("<============================>\n");
        printf("<=      1. Clientes         =>\n");
        printf("<=      2. Produtos         =>\n");
        printf("<=      3. Vendedores       =>\n");
        printf("<=      0. Voltar ao inicio =>\n");
        printf("<============================>\n");
        scanf("%d", &*option);
    }
    void MenuDetalhes(int *option){
        printf("<============================>\n");
        printf("<--------- Detalhes --------->\n");
        printf("<============================>\n");
        printf("<=      1. Alterar          =>\n");
        printf("<=      2. Excluir          =>\n");
        printf("<=      0. Voltar           =>\n");
        printf("<============================>\n");
        scanf("%d", &*option);
    }
    void SalvarArqClientes(T_ficha_cliente clientes[], int sizeVet){
        int i;
        FILE * arq;
        arq = fopen("clientes.bin", "w");
        if(arq != NULL){
            for (i = 0; i < sizeVet; i++){
                fwrite(&clientes[i], sizeof(T_ficha_cliente), 1, arq);
            }
            fclose(arq);
        }else{
            printf("Erro ao salvar o arquivo\n");
            system("pause");
            exit(1);
        }
    }
    void SalvarArqProdutos(T_ficha_produtos produtos[], int sizeVet){
        int i;
        FILE * arq;
        arq = fopen("produtos.bin", "w");
        if(arq != NULL){
            for (i = 0; i < sizeVet; i++)        {
                fwrite(&produtos[i], sizeof(T_ficha_produtos), 1, arq);
            }
            fclose(arq);
        }else{
            printf("Erro ao abrir o arquivo\n");
            exit(1);
        }
    }
    void SalvarArqVendedores(T_ficha_vendedores vendedores[], int sizeVet){
        int i;
        FILE * arq;
        arq = fopen("vendedores.bin", "w");
        if(arq != NULL){
            for (i = 0; i < sizeVet; i++)        {
                fwrite(&vendedores[i], sizeof(T_ficha_vendedores), 1, arq);
            }
            fclose(arq);
        }else{
            printf("Erro ao abrir o arquivo\n");
            exit(1);
        }
    }
    void ListarClientes(T_ficha_cliente arr[], int size){
        int i, sizeA = 0;
        for(i = 0; i < size; i++){
            if(arr[i].ativo == 1){
                sizeA += 1;
            }
        }
        if(sizeA > 0){
            for(i = 0; i < size; i++){
                if(arr[i].ativo==1){
                    printf("\n<===============================>\n\n");
                    printf("ID: %d\n", i+1);
                    printf("CODIGO: %d\n", arr[i].viCodigo);
                    printf("NOME: %s", arr[i].vcNome);
                    printf("\n<===============================>\n");
                }
            }
        }else{
            printf("Nenhum regstro encontrado.\n");
        }
    }
    void DetalhesCliente(T_ficha_cliente arr[], int option){
        printf("CLIENTE %d\n", option);
        printf("CODIGO: %d\n", arr[option-1].viCodigo);
        printf("NOME: %s\n", arr[option-1].vcNome);
        printf("ENDERECO: %s\n", arr[option-1].vcEndereco);
        printf("TELEFONE: %s\n", arr[option-1].vcFone);
        printf("STATUS CREDITO: ");
        if(arr[option-1].vbCredito = 1){
            printf("OK!\n");
        }else{
            printf("EM DEBITO\n");
        }
    }
    void AlteraCliente(T_ficha_cliente cliente[], int option){
        int verify;
        system("cls");
        printf("\n\n<---------- Editar cliente ---------->\n\n");
        printf("Codigo: %d\n\n", cliente[option-1].viCodigo);
        if(cliente[option-1].vbCredito == 0){
            printf("Este cliente tem debitos pendentes.\n");
            VerifyContinue("Foram pagos?", &verify);
            if(verify == 0){
                cliente[option-1].vbCredito = 1;
                printf("Atualizado com sucesso!\n");
            }else{
                printf("OK!\n");
            }
        }
        system("cls");
        printf("\n\n<---------- Editar cliente ---------->\n\n");
        printf("Codigo: %d\n\n", cliente[option-1].viCodigo);
        printf("NOME: %s\n", cliente[option-1].vcNome);
        VerifyContinue("Alterar NOME?", &verify);
        if(verify == 0){
            printf("OK!\n");
        }else{
            printf("Nome: ");
            lerString(cliente[option-1].vcNome, 30);
        }
        system("cls");
        printf("\n\n<---------- Editar cliente ---------->\n\n");
        printf("Codigo: %d\n\n", cliente[option-1].viCodigo);
        printf("ENDERECO: %s\n", cliente[option-1].vcEndereco);
        VerifyContinue("Alterar ENDERECO?", &verify);
        if(verify == 0){
            printf("OK!\n");
        }else{
            printf("Endereco: ");
            lerString(cliente[option-1].vcEndereco, 50);
        }
        system("cls");
        printf("\n\n<---------- Editar cliente ---------->\n\n");
        printf("Codigo: %d\n\n", cliente[option-1].viCodigo);
        printf("TELEFONE: %s\n", cliente[option-1].vcFone);
        VerifyContinue("Alterar TELEFONE?", &verify);
        if(verify == 0){
            printf("OK!\n");
        }else{
            printf("Telefone: ");
            lerString(cliente[option-1].vcFone, 20);
        }
        printf("\n<---------- Editar cliente ---------->\n\n");
    }
    void ExcluiCliente(T_ficha_cliente cliente[], int option){
        cliente[option-1].ativo = 0;
        if(cliente[option-1].ativo == 0){
            printf("Produto excluido com sucesso\n");
        }else{
            printf("Ops! Algo deu errado\n");
        }
    }
    void ListarProdutos(T_ficha_produtos arr[], int size){
        int i, sizeA = 0;
        for(i = 0; i < size; i++){
            if(arr[i].ativo == 1){
                sizeA += 1;
            }
        }
        if(sizeA > 0){
            for(i = 0; i < size; i++){
                if(arr[i].ativo==1){
                    printf("\n<===============================>\n\n");
                    printf("ID: %d\n", i+1);
                    printf("CODIGO: %d\n", arr[i].viCodigo);
                    printf("DESCRICAO: %s\n", arr[i].vcDescricao);
                    printf("QTD. EM ESTOQUE: %d\n", arr[i].viUniEstoque);
                    printf("PRECO UNI.: %.2f\n", arr[i].vfPreco);
                    printf("\n<===============================>\n");
                }
            }
        }else{
            printf("Nenhum regstro encontrado.\n");
        }
    }
    void DetalhesProduto(T_ficha_produtos arr[], int option){
        printf("PRODUTO %d\n", option);
        printf("CODIGO: %d\n", arr[option-1].viCodigo);
        printf("UNIDADES EM ESTOQUE: %d\n", arr[option-1].viUniEstoque);
        printf("DESCRICAO DO PRODUTO: %s\n", arr[option-1].vcDescricao);
        printf("FORNECEDOR:  %s\n", arr[option-1].vcFornecedor);
        printf("DATA DA COMPRA: %s\n", arr[option-1].vcDataComp);
        printf("PRECO: %.2f\n", arr[option-1].vfPreco);
    }
    void AlteraProduto(T_ficha_produtos produto[], int option){
        int verify;
        system("cls");
        printf("\n\n<---------- Editar produto ---------->\n\n");
        printf("Codigo: %d\n\n", produto[option-1].viCodigo);
        printf("UNIDADES EM ESTOQUE: %d\n", produto[option-1].viUniEstoque);
        VerifyContinue("Alterar UNIDADES EM ESTOQUE?", &verify);
        if(verify == 0){
            printf("OK!\n");
        }else{
            fflush(stdin);
            printf("Unidade no estoque: ");
            scanf("%d", &produto[option-1].viUniEstoque);
        }
        system("cls");
        printf("\n\n<---------- Editar produto ---------->\n\n");
        printf("Codigo: %d\n\n", produto[option-1].viCodigo);
        printf("DESCRICAO DO PRODUTO: %s\n", produto[option-1].vcDescricao);
        VerifyContinue("Alterar DESCRICAO DO PRODUTO?", &verify);
        if(verify == 0){
            printf("OK!\n");
        }else{
            fflush(stdin);
            printf("Descricao do produto: ");
            lerString(produto[option-1].vcDescricao, 50);
        }
        system("cls");
        printf("\n\n<---------- Editar produto ---------->\n\n");
        printf("Codigo: %d\n\n", produto[option-1].viCodigo);
        printf("FORNECEDOR: %s\n", produto[option-1].vcFornecedor);
        VerifyContinue("Alterar FORNECEDOR?", &verify);
        if(verify == 0){
            printf("OK!\n");
        }else{
            fflush(stdin);
            printf("Fornecedor: ");
            lerString(produto[option-1].vcFornecedor, 30);
        }
        system("cls");
        printf("\n\n<---------- Editar produto ---------->\n\n");
        printf("Codigo: %d\n\n", produto[option-1].viCodigo);
        printf("PRECO: %.2f\n", produto[option-1].vfPreco);
        VerifyContinue("Alterar PRECO?", &verify);
        if(verify == 0){
            printf("OK!\n");
        }else{
            fflush(stdin);
            printf("Preco final: ");
            scanf("%f", &produto[option-1].vfPreco);
        }
        system("cls");
        printf("\n\n<---------- Editar produto ---------->\n\n");
        printf("Codigo: %d\n\n", produto[option-1].viCodigo);
        printf("DATA DA COMPRA: %s\n", produto[option-1].vcDataComp);
        VerifyContinue("Alterar DATA DA COMPRA?", &verify);
        if(verify == 0){
            printf("OK!\n");
        }else{
            fflush(stdin);
            printf("Data da compra 00/00/0000: ");
            lerString(produto[option-1].vcDataComp, 20);
        }
        printf("\n<---------- Editar produto ---------->\n\n");
    }
                                void ExcluiProduto(T_ficha_produtos produto[], int option){
        produto[option-1].ativo = 0;
        if(produto[option-1].ativo == 0){
            printf("Produto excluido com sucesso\n");
        }else{
            printf("Ops! Algo deu errado\n");
        }
    }
    void ListarVendedores(T_ficha_vendedores arr[], int size){
        int i, sizeA = 0;
        for(i = 0; i < size; i++){
            if(arr[i].ativo == 1){
                sizeA += 1;
            }
        }
        if(sizeA > 0){
            for (i = 0; i < size; i++){
                if(arr[i].ativo==1){
                    printf("\n<===============================>\n\n");
                    printf("ID: %d\n", i+1);
                    printf("CODIGO: %d\n", arr[i].viCodigo);
                    printf("NOME: %s", arr[i].vcNome);
                    printf("\n<===============================>\n");
                }
            }
        }else{
            printf("Nenhum regstro encontrado.\n");
        }
    }
    void DetalhesVendedor(T_ficha_vendedores arr[], int option){
        printf("VENDEDOR %d\n", option);
        printf("CODIGO: %d\n", arr[option-1].viCodigo);
        printf("NOME: %s\n", arr[option-1].vcNome);
        printf("ENDERECO: %s\n", arr[option-1].vcEndereco);
        printf("TELEFONE:  %s\n", arr[option-1].vcFone);
    }
    void AlteraVendedor(T_ficha_vendedores vendedor[], int option){
        int verify;
        system("cls");
        printf("\n\n<---------- Editar vendedor ---------->\n\n");
        printf("Codigo: %d\n\n", vendedor[option-1].viCodigo);
        printf("NOME: %s\n", vendedor[option-1].vcNome);
        VerifyContinue("Alterar NOME?", &verify);
        if(verify == 0){
            printf("OK!\n");
        }else{
            fflush(stdin);
            printf("Nome: ");
            lerString(vendedor[option-1].vcNome, 30);
        }
        system("cls");
        printf("\n\n<---------- Editar vendedor ---------->\n\n");
        printf("Codigo: %d\n\n", vendedor[option-1].viCodigo);
        printf("ENDERECO: %s\n", vendedor[option-1].vcNome);
        VerifyContinue("Alterar ENDERECO?", &verify);
        if(verify == 0){
            printf("OK!\n");
        }else{
            fflush(stdin);
            printf("Endereco: ");
            lerString(vendedor[option-1].vcEndereco, 50);
        }
        system("cls");
        printf("\n\n<---------- Editar vendedor ---------->\n\n");
        printf("Codigo: %d\n\n", vendedor[option-1].viCodigo);
        printf("TELEFONE: %s\n", vendedor[option-1].vcNome);
        VerifyContinue("Alterar TELEFONE?", &verify);
        if(verify == 0){
            printf("OK!\n");
        }else{
            fflush(stdin);
            printf("Telefone: ");
            lerString(vendedor[option-1].vcFone, 20);
        }
        printf("\n<---------- Editar vendedor ---------->\n\n");
    }
    void ExcluiVendedor(T_ficha_vendedores vendedor[], int option){
        vendedor[option-1].ativo = 0;
        if(vendedor[option-1].ativo == 0){
            printf("Vendedor excluido com sucesso\n");
        }else{
            printf("Ops! Algo deu errado\n");
        }
    }
    int getVendedor(T_ficha_vendedores arr[], int size){
        int id;
        do{
            system("cls");
            ListarVendedores(arr, size);
            printf("Digite o ID do vendedor que esta vendendo.\n");
            scanf("%d", &id);
            if(id == 0){
                printf("ID invalido!\n");
                system("pause");
            }
        }while(id == 0);
            return id--;
    }
    int getCliente(T_ficha_cliente arr[], int size){
        int id;
        do{
            system("cls");
            ListarClientes(arr, size);
            printf("Digite o ID do cliente que esta comprando.\n");
            scanf("%d", &id);
            if(id == 0){
                printf("ID invalido!\n");
                system("pause");
            }
            if(arr[id - 1].ativo==1){
                if(arr[id - 1].vbCredito==1){
                    arr[id - 1].vbCredito=0;
                    return id--;
                }else{
                    printf("Desculpe mas este cliente está com debitos pendentes.\n");
                    id = 0;
                }
            }else{
                    printf("Desculpe mas este cliente está desativado.\n");
                    id = 0;
            }
        }while(id == 0);
    }
    void ListarCarrinho(int itens[], int quant[], T_ficha_produtos produtos[]){
        int i, countItens=sizeof(itens)/sizeof(itens[0]);
        float totalC=0;
        system("cls");
        for (i = 0; i < countItens; ++i){
            printf("\n<===============================>\n\n");
            printf("CODIGO: %d\n", produtos[itens[i]].viCodigo);
            printf("QUANTIDADE: %d\n", quant[itens[i]]);
            printf("DESCRICAO: %s", produtos[itens[i]].vcDescricao);
            printf("PRECO UNI.: %.2f\n", produtos[itens[i]].vfPreco);
            float preco = produtos[itens[i]].vfPreco;
            int quantidade = quant[i];
            totalC += preco * quantidade;
            printf("TOTAL: %2.f\n", preco * quantidade);
            printf("\n<===============================>\n");
        }
        printf("\nTotal da compra = %.2f\n\n", totalC);
    }
    void NotaFiscal(int itens[], int quant[], T_ficha_produtos produtos[], T_ficha_vendedores vendedor[], T_ficha_cliente cliente[], int codVend, int codClie){
        int i, countItens=sizeof(itens)/sizeof(itens[0]);
        float totalC=0;
        system("cls");
        printf("\n\tNOTA FISCAL\t\n\n");
        printf("\tVendedor\t\n\n");
        printf("CODIGO: %d\n", vendedor[codVend].viCodigo);
        printf("NOME: %s\n\n", vendedor[codVend].vcNome);
        printf("\tCliente\t\n\n");
        printf("CODIGO: %d\n", cliente[codVend].viCodigo);
        printf("NOME: %s\n\n", cliente[codVend].vcNome);
        printf("\tProdutos:\t\n\n");
        printf("CODIGO\t|\tQUANT.\t|\tDESC.\t|\tPRECO UNI.\n");
        for (i = 0; i < countItens; ++i){
            printf("%d", produtos[itens[i]].viCodigo);
            printf("\t|\t");
            printf("%d", quant);
            printf("\t|\t");
            printf("%s\b", produtos[itens[i]].vcDescricao);
            printf("\t|\t");
            printf("%.2f\n", produtos[itens[i]].vfPreco);
            float preco = produtos[itens[i]].vfPreco;
            int quantidade = quant[i];
            totalC += preco * quantidade;
            printf("TOTAL: %2.f\n", preco * quantidade);
            printf("\n<===============================>\n");
        }
        printf("\nTotal da compra = %.2f\n", totalC);
    }
    void NovaVenda(T_ficha_cliente clientes[], T_ficha_produtos produtos[], T_ficha_vendedores vendedores[], int sizeC, int sizeP, int sizeV){
        system("cls");
        int codVend, codProdutos[100], codClie, test, count=0, prod, quantTemp, quant[100];
        codVend = getVendedor(vendedores, sizeV);
        codClie = getCliente(clientes, sizeC);
        do{
            system("cls");
            ListarProdutos(produtos, sizeP);
            printf("Digite o ID do produto para adicionar no carrinho.\n");
            scanf("%d", &prod);
            printf("Quantos?\n");
            scanf("%d", &quantTemp);
            if(produtos[prod-1].viUniEstoque >= quantTemp){
                quant[count] = quantTemp;
                codProdutos[count] = prod-1;
                produtos[prod-1].viUniEstoque = produtos[prod-1].viUniEstoque - quantTemp;
                count++;
            }else{
                printf("Ops! Nao temos tanto no estoque.\nProduto nao adicionado ao carrinho!\n");
            }
            VerifyContinue("Cadastrar mais?", &test);
        }while(test != 0);
        ListarCarrinho(codProdutos, quant, produtos);
    
        VerifyContinue("Emitir nota fiscal?", &test);
        if(test != 0){
            NotaFiscal(codProdutos, quant, produtos, vendedores, clientes, codVend, codClie);
            system("pause");
        }else{
            printf("\n\nVenda realizada com sucesso!\n\n\n");
            system("pause");
        }
    }
    int main(void){
        int viMenu, idC=0, idP=0, idV=0, i, sair, option, optiondt, verify;
        T_ficha_cliente clientes[100];
        T_ficha_produtos produtos[50];
        T_ficha_vendedores vendedores[10];
        int sizeC = 0;
        int sizeV = 0;
        int sizeP = 0;
    
        sizeC += lerClientes(clientes);
        sizeV += lerVendedor(vendedores);
        sizeP += lerProdutos(produtos);
    
        int sizeAC, sizeAP, sizeAV;
        do{
            PrintMenu(&viMenu);
            system("cls");
            switch(viMenu){
                case 1:
                    do{
                        MenuCadastros(&sair);
                        switch(sair){
                            case 1:
                                if(sizeC < 100){
                                    CadastraClientes(clientes, sizeC);
                                    sizeC += 1;
                                    break;
                                }else{
                                    printf("Ops! Nao tenho mais espaco!\n");
                                    sair = 0;
                                }
                            case 2:
                                if(sizeV < 50){
                                    CadastraProdutos(produtos, sizeP);
                                    sizeP += 1;
                                    break;
                                }else{
                                    printf("Ops! Nao tenho mais espaco!\n");
                                    sair = 0;
                                }
                            case 3:
                                if(sizeP < 10){
                                    CadastraVendedores(vendedores, sizeV);
                                    sizeV += 1;
                                    break;
                                }else{
                                    printf("Ops! Nao tenho mais espaco!\n");
                                    sair = 0;
                                }
                        }
                    }while(sair != 0);
                    break;
                case 2:
                    do{
                        MenuProcurar(&sair);
                        system("cls");
                        switch(sair){
                            case 1:
                                do{system("cls");
                                    ListarClientes(clientes, sizeC);
                                    sizeAC = 0;
                                    for(i = 0; i < sizeC; i++){
                                        if(clientes[i].ativo == 1){
                                            sizeAC += 1;
                                        }
                                    }
                                    if(sizeAC > 0){
                                        printf("Digite o ID do cliente para ver detalhes, alterar ou excluir\nOu 0 para voltar ao menu anterior\n");
                                    }else{
                                        printf("Digite 0 para voltar ao menu anterior\n");
                                    }
                                    scanf("%d", &option);
                                    if(option == 0){
                                        break;
                                    }
                                    system("cls");
                                    DetalhesCliente(clientes, option);
                                    MenuDetalhes(&optiondt);
                                    system("cls");
                                    switch(optiondt){
                                        case 1:
                                            do{
                                                AlteraCliente(clientes, option);
                                                system("cls");
                                                DetalhesCliente(clientes, option);
                                                VerifyContinue("Tudo certo?", &verify);
                                            }while(verify == 0);
                                            break;
                                        case 2:
                                            ExcluiCliente(clientes, option);
                                            system("pause");
                                            break;
                                    }
                                }while((option != 0) || (clientes[option-1].ativo != 0));
                                break;
                            case 2:
                                do{
                                    system("cls");
                                    ListarProdutos(produtos, sizeP);
                                    sizeAP = 0;
                                    for(i = 0; i < sizeP; i++){
                                        if(produtos[i].ativo == 1){
                                            sizeAP += 1;
                                        }
                                    }
                                    if(sizeAP > 0){
                                        printf("Digite o ID do produto para ver detalhes, alterar ou excluir\nOu 0 para voltar ao menu anterior\n");
                                    }else{
                                        printf("Digite 0 para voltar ao menu anterior\n");
                                    }
                                    scanf("%d", &option);
                                    if(option == 0){
                                        break;
                                    }
                                    system("cls");
                                    DetalhesProduto(produtos, option);
                                    MenuDetalhes(&optiondt);
                                    system("cls");
                                    switch(optiondt){
                                        case 1:
                                            do{
                                                AlteraProduto(produtos, option);
                                                system("cls");
                                                DetalhesProduto(produtos, option);
                                                VerifyContinue("Tudo certo?", &verify);
                                            }while(verify == 0);
                                            break;
                                        case 2:
                                            ExcluiProduto(produtos, option);
                                            system("pause");
                                            break;
                                    }
                                }while((option != 0) || (produtos[option-1].ativo != 0));
                                break;
                            case 3:
                                do{
                                    system("cls");
                                    ListarVendedores(vendedores, sizeV);
                                    sizeAV = 0;
                                    for(i = 0; i < sizeV; i++){
                                        if(vendedores[i].ativo == 1){
                                            sizeAV += 1;
                                        }
                                    }
                                    if(sizeAV > 0){
                                        printf("Digite o ID do produto para ver detalhes, alterar ou excluir\nOu 0 para voltar ao menu anterior\n");
                                    }else{
                                        printf("Digite 0 para voltar ao menu anterior\n");
                                    }
                                    scanf("%d", &option);
                                    if(option == 0){
                                        break;
                                    }
                                    system("cls");
                                    DetalhesVendedor(vendedores, option);
                                    MenuDetalhes(&optiondt);
                                    system("cls");
                                    switch(optiondt){
                                        case 1:
                                            do{
                                                AlteraVendedor(vendedores, option);
                                                system("cls");
                                                DetalhesVendedor(vendedores, option);
                                                VerifyContinue("Tudo certo?", &verify);
                                            }while(verify == 0);
                                            break;
                                        case 2:
                                            ExcluiVendedor(vendedores, option);
                                            system("pause");
                                            break;
                                    }
                                }while((option != 0) || (vendedores[option-1].ativo != 0));
                                break;
                        }
                    }while(sair != 0);
                    break;
                case 3:
                    do{
                        sair = 10;
                        if((sizeC > 0) && (sizeV > 0) && (sizeP > 0)){
                            NovaVenda(clientes, produtos, vendedores, sizeC, sizeP, sizeV);
                            VerifyContinue("Fazer uma nova venda?", &sair);
                        }else{
                            sair = 0;
                            if(sizeC <= 0){
                                printf("Ops! Nao ha clientes, por favor cadastra pelo menos um.\n");
                            }
                            if(sizeP <= 0){
                                printf("Ops! Nao ha produtos, por favor cadastra pelo menos um.\n");
                            }
                            if(sizeV <= 0){
                                printf("Ops! Nao ha vendedores, por favor cadastra pelo menos um.\n");
                            }
                            system("pause");
                        }
                    }while(sair != 0);
                    break;
            }
    
            SalvarArqClientes(clientes, sizeC);
            SalvarArqProdutos(produtos, sizeP);
            SalvarArqVendedores(vendedores, sizeV);
        }while(viMenu != 0);
        system("cls");
        SalvarArqClientes(clientes, sizeC);
        SalvarArqProdutos(produtos, sizeP);
        SalvarArqVendedores(vendedores, sizeV);
        printf("\n\n\n\t\tEncerrando...\n\n\n");
        system("pause");
        return 0;
    }

     

    Editado por Simon Viegas
    Inserir tag SPOLER
    • Amei 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 16 horas atrás, TYSQUARE89 disse:

    Eu tentei e tentei com esse teu código mas esse fgets me ferrou, então tive que fazer uma função para limpar o buffer e ler a string, segue o código:

    Spoiler
    
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
        typedef struct ficha_vendedores{
            int viCodigo;
            char vcNome[30];
            char vcEndereco[50];
            char vcFone[20];
            int ativo;
        }T_ficha_vendedores;
        typedef struct ficha_produtos{
            int viCodigo;
            int viUniEstoque;
            char vcDescricao[50];
            char vcFornecedor[30];
            char vcDataComp[20];
            float vfPreco;
            int ativo;
        }T_ficha_produtos;
        typedef struct ficha_cliente{
            int viCodigo;
            char vcNome[30];
            char vcEndereco[50];
            char vcFone[20];
            int vbCredito;
            int ativo;
        }T_ficha_cliente;
      void limpaBuffer(){
            char c = '\n';
            while(1){ c = getchar(); if(c == '\n') break; }
    }
    void lerString(char *str, int maxlen){
            //limpa qualquer \n
            fflush(stdin);
    
            int len;
            char buff[200];
            //leitura/verificar tamanho
            scanf(" %[^\n]s", buff);
            len = (strlen(buff) > maxlen) ? (maxlen-1):strlen(buff);
            //copia
            strncpy(str,buff,len);
            //...
            limpaBuffer();
    }
    
    int lerVendedor(T_ficha_vendedores arr[]){
            FILE * arq = fopen("vendedores.bin", "rb");
        if(arq != NULL){
            int indice = 0;
            while(1){
                T_ficha_vendedores p;
                size_t r = fread(&p, sizeof(T_ficha_vendedores), 1, arq);
    
                // se retorno for menor que o count, então sai do loop
                if(r < 1)
                    break;
                else
                    arr[indice++] = p;
            }
            fclose(arq); // fecha o arquivo
            return indice;
        }
        else
        {
            printf("\nErro ao abrir o arquivo para leitura!\n");
            system("pause");
            exit(1);
        }
    }
    int lerProdutos(T_ficha_produtos arr[]){
            FILE * arq = fopen("produtos.bin", "rb");
        if(arq != NULL){
            int indice = 0;
            T_ficha_produtos p;
            while(1){
                size_t r = fread(&p, sizeof(T_ficha_produtos), 1, arq);
                // se retorno for menor que o count, então sai do loop
                if(r < 1)
                    break;
                else
                    arr[indice++] = p;
            }
            fclose(arq); // fecha o arquivo
            return indice;
        }
        else
        {
            printf("\nErro ao abrir o arquivo para leitura!\n");
            system("pause");
            exit(1);
        }
    }
    int lerClientes(T_ficha_cliente arr[]){
        FILE * arq = fopen("clientes.bin", "rb");
        if(arq != NULL){
            int indice = 0;
            T_ficha_cliente p;
            while(1){
                size_t r = fread(&p, sizeof(T_ficha_cliente), 1, arq);
                // se retorno for menor que o count, então sai do loop
                if(r < 1)
                    break;
                else
                    arr[indice++] = p;
            }
            fclose(arq);
            return indice;
        }
        else
        {
            printf("\nErro ao abrir o arquivo para leitura!\n");
            system("pause");
            exit(1);
        }
    }
    void CadastraVendedores(T_ficha_vendedores vendedor[], int viCodigo){
        fflush(stdin);
        system("cls");
    
        printf("\n\n<---------- Novo vendedor ---------->\n\n");
        vendedor[viCodigo].ativo = 1;
        vendedor[viCodigo].viCodigo = viCodigo;
    
        printf("Codigo: %d\n\n", vendedor[viCodigo].viCodigo);
        printf("Nome: ");
        lerString(vendedor[viCodigo].vcNome, 30);
    
        printf("Endereco: ");
        lerString(vendedor[viCodigo].vcEndereco, 50);
    
        printf("Telefone: ");
        lerString(vendedor[viCodigo].vcFone, 20);
    
        printf("\n<---------- Novo vendedor ---------->\n\n");
    }
    void CadastraProdutos(T_ficha_produtos produto[], int viCodigo){
        system("cls");
        printf("\n\n<---------- Novo produto ---------->\n\n");
        produto[viCodigo].ativo = 1;
        produto[viCodigo].viCodigo = viCodigo;
    
        printf("Codigo: %d\n\n", produto[viCodigo].viCodigo);
    
        printf("Unidade no estoque: ");
        scanf(" %d", &produto[viCodigo].viUniEstoque);
    
        printf("Descricao do produto: ");
        lerString(produto[viCodigo].vcDescricao, 50);
    
        printf("Fornecedor: ");
        lerString(produto[viCodigo].vcFornecedor, 30);
    
        printf("Preco final: ");
        scanf(" %f", &produto[viCodigo].vfPreco);
    
        printf("Data da compra 00/00/0000: ");
        lerString(produto[viCodigo].vcDataComp, 20);
    
        printf("\n<---------- Novo produto ---------->\n\n");
    }
    void CadastraClientes(T_ficha_cliente cliente[], int viCodigo){
        system("cls");
        printf("\n\n<---------- Novo cliente ---------->\n\n");
        cliente[viCodigo].vbCredito = 1;
        cliente[viCodigo].ativo = 1;
        cliente[viCodigo].viCodigo = viCodigo;
    
        printf("Codigo: %d\n\n", cliente[viCodigo].viCodigo);
    
        printf("Nome: ");
        lerString(cliente[viCodigo].vcNome, 30);
    
        printf("Endereco: ");
        lerString(cliente[viCodigo].vcEndereco, 50);
    
        printf("Telefone: ");
        lerString(cliente[viCodigo].vcFone, 20);
    
        printf("\n<---------- Novo cliente ---------->\n\n");
    }
    void VerifyContinue(char text[50], int *result){
        char out[5];
        *result = 10;
        printf("%s[s/n]\n", text);
        fflush(stdin);
        fgets(out, 5, stdin);
        if((strncmp(out, "s", 1))){
            *result = 0;
        }
    }
    void PrintMenu(int *option){
        system("cls");
        printf("<============================>\n");
        printf("<----------- Menu ----------->\n");
        printf("<============================>\n");
        printf("<=      1. Cadastrar        =>\n");
        printf("<=      2. Listar           =>\n");
        printf("<=      3. Emitir venda     =>\n");
        printf("<=      0. Sair             =>\n");
        printf("<============================>\n");
        scanf("%d", &*option);
    }
    void MenuCadastros(int *option){
        system("cls");
        printf("<============================>\n");
        printf("<------ Menu Cadastro ------->\n");
        printf("<============================>\n");
        printf("<=      1. Novo cliente     =>\n");
        printf("<=      2. Novo produto     =>\n");
        printf("<=      3. Novo vendedor    =>\n");
        printf("<=      0. Voltar ao inicio =>\n");
        printf("<============================>\n");
        scanf("%d", &*option);
    }
    void MenuProcurar(int *option){
        system("cls");
        printf("<============================>\n");
        printf("<--------- Procurar --------->\n");
        printf("<============================>\n");
        printf("<=      1. Clientes         =>\n");
        printf("<=      2. Produtos         =>\n");
        printf("<=      3. Vendedores       =>\n");
        printf("<=      0. Voltar ao inicio =>\n");
        printf("<============================>\n");
        scanf("%d", &*option);
    }
    void MenuDetalhes(int *option){
        printf("<============================>\n");
        printf("<--------- Detalhes --------->\n");
        printf("<============================>\n");
        printf("<=      1. Alterar          =>\n");
        printf("<=      2. Excluir          =>\n");
        printf("<=      0. Voltar           =>\n");
        printf("<============================>\n");
        scanf("%d", &*option);
    }
    void SalvarArqClientes(T_ficha_cliente clientes[], int sizeVet){
        int i;
        FILE * arq;
        arq = fopen("clientes.bin", "w");
        if(arq != NULL){
            for (i = 0; i < sizeVet; i++){
                fwrite(&clientes[i], sizeof(T_ficha_cliente), 1, arq);
            }
            fclose(arq);
        }else{
            printf("Erro ao salvar o arquivo\n");
            system("pause");
            exit(1);
        }
    }
    void SalvarArqProdutos(T_ficha_produtos produtos[], int sizeVet){
        int i;
        FILE * arq;
        arq = fopen("produtos.bin", "w");
        if(arq != NULL){
            for (i = 0; i < sizeVet; i++)        {
                fwrite(&produtos[i], sizeof(T_ficha_produtos), 1, arq);
            }
            fclose(arq);
        }else{
            printf("Erro ao abrir o arquivo\n");
            exit(1);
        }
    }
    void SalvarArqVendedores(T_ficha_vendedores vendedores[], int sizeVet){
        int i;
        FILE * arq;
        arq = fopen("vendedores.bin", "w");
        if(arq != NULL){
            for (i = 0; i < sizeVet; i++)        {
                fwrite(&vendedores[i], sizeof(T_ficha_vendedores), 1, arq);
            }
            fclose(arq);
        }else{
            printf("Erro ao abrir o arquivo\n");
            exit(1);
        }
    }
    void ListarClientes(T_ficha_cliente arr[], int size){
        int i, sizeA = 0;
        for(i = 0; i < size; i++){
            if(arr[i].ativo == 1){
                sizeA += 1;
            }
        }
        if(sizeA > 0){
            for(i = 0; i < size; i++){
                if(arr[i].ativo==1){
                    printf("\n<===============================>\n\n");
                    printf("ID: %d\n", i+1);
                    printf("CODIGO: %d\n", arr[i].viCodigo);
                    printf("NOME: %s", arr[i].vcNome);
                    printf("\n<===============================>\n");
                }
            }
        }else{
            printf("Nenhum regstro encontrado.\n");
        }
    }
    void DetalhesCliente(T_ficha_cliente arr[], int option){
        printf("CLIENTE %d\n", option);
        printf("CODIGO: %d\n", arr[option-1].viCodigo);
        printf("NOME: %s\n", arr[option-1].vcNome);
        printf("ENDERECO: %s\n", arr[option-1].vcEndereco);
        printf("TELEFONE: %s\n", arr[option-1].vcFone);
        printf("STATUS CREDITO: ");
        if(arr[option-1].vbCredito = 1){
            printf("OK!\n");
        }else{
            printf("EM DEBITO\n");
        }
    }
    void AlteraCliente(T_ficha_cliente cliente[], int option){
        int verify;
        system("cls");
        printf("\n\n<---------- Editar cliente ---------->\n\n");
        printf("Codigo: %d\n\n", cliente[option-1].viCodigo);
        if(cliente[option-1].vbCredito == 0){
            printf("Este cliente tem debitos pendentes.\n");
            VerifyContinue("Foram pagos?", &verify);
            if(verify == 0){
                cliente[option-1].vbCredito = 1;
                printf("Atualizado com sucesso!\n");
            }else{
                printf("OK!\n");
            }
        }
        system("cls");
        printf("\n\n<---------- Editar cliente ---------->\n\n");
        printf("Codigo: %d\n\n", cliente[option-1].viCodigo);
        printf("NOME: %s\n", cliente[option-1].vcNome);
        VerifyContinue("Alterar NOME?", &verify);
        if(verify == 0){
            printf("OK!\n");
        }else{
            printf("Nome: ");
            lerString(cliente[option-1].vcNome, 30);
        }
        system("cls");
        printf("\n\n<---------- Editar cliente ---------->\n\n");
        printf("Codigo: %d\n\n", cliente[option-1].viCodigo);
        printf("ENDERECO: %s\n", cliente[option-1].vcEndereco);
        VerifyContinue("Alterar ENDERECO?", &verify);
        if(verify == 0){
            printf("OK!\n");
        }else{
            printf("Endereco: ");
            lerString(cliente[option-1].vcEndereco, 50);
        }
        system("cls");
        printf("\n\n<---------- Editar cliente ---------->\n\n");
        printf("Codigo: %d\n\n", cliente[option-1].viCodigo);
        printf("TELEFONE: %s\n", cliente[option-1].vcFone);
        VerifyContinue("Alterar TELEFONE?", &verify);
        if(verify == 0){
            printf("OK!\n");
        }else{
            printf("Telefone: ");
            lerString(cliente[option-1].vcFone, 20);
        }
        printf("\n<---------- Editar cliente ---------->\n\n");
    }
    void ExcluiCliente(T_ficha_cliente cliente[], int option){
        cliente[option-1].ativo = 0;
        if(cliente[option-1].ativo == 0){
            printf("Produto excluido com sucesso\n");
        }else{
            printf("Ops! Algo deu errado\n");
        }
    }
    void ListarProdutos(T_ficha_produtos arr[], int size){
        int i, sizeA = 0;
        for(i = 0; i < size; i++){
            if(arr[i].ativo == 1){
                sizeA += 1;
            }
        }
        if(sizeA > 0){
            for(i = 0; i < size; i++){
                if(arr[i].ativo==1){
                    printf("\n<===============================>\n\n");
                    printf("ID: %d\n", i+1);
                    printf("CODIGO: %d\n", arr[i].viCodigo);
                    printf("DESCRICAO: %s\n", arr[i].vcDescricao);
                    printf("QTD. EM ESTOQUE: %d\n", arr[i].viUniEstoque);
                    printf("PRECO UNI.: %.2f\n", arr[i].vfPreco);
                    printf("\n<===============================>\n");
                }
            }
        }else{
            printf("Nenhum regstro encontrado.\n");
        }
    }
    void DetalhesProduto(T_ficha_produtos arr[], int option){
        printf("PRODUTO %d\n", option);
        printf("CODIGO: %d\n", arr[option-1].viCodigo);
        printf("UNIDADES EM ESTOQUE: %d\n", arr[option-1].viUniEstoque);
        printf("DESCRICAO DO PRODUTO: %s\n", arr[option-1].vcDescricao);
        printf("FORNECEDOR:  %s\n", arr[option-1].vcFornecedor);
        printf("DATA DA COMPRA: %s\n", arr[option-1].vcDataComp);
        printf("PRECO: %.2f\n", arr[option-1].vfPreco);
    }
    void AlteraProduto(T_ficha_produtos produto[], int option){
        int verify;
        system("cls");
        printf("\n\n<---------- Editar produto ---------->\n\n");
        printf("Codigo: %d\n\n", produto[option-1].viCodigo);
        printf("UNIDADES EM ESTOQUE: %d\n", produto[option-1].viUniEstoque);
        VerifyContinue("Alterar UNIDADES EM ESTOQUE?", &verify);
        if(verify == 0){
            printf("OK!\n");
        }else{
            fflush(stdin);
            printf("Unidade no estoque: ");
            scanf("%d", &produto[option-1].viUniEstoque);
        }
        system("cls");
        printf("\n\n<---------- Editar produto ---------->\n\n");
        printf("Codigo: %d\n\n", produto[option-1].viCodigo);
        printf("DESCRICAO DO PRODUTO: %s\n", produto[option-1].vcDescricao);
        VerifyContinue("Alterar DESCRICAO DO PRODUTO?", &verify);
        if(verify == 0){
            printf("OK!\n");
        }else{
            fflush(stdin);
            printf("Descricao do produto: ");
            lerString(produto[option-1].vcDescricao, 50);
        }
        system("cls");
        printf("\n\n<---------- Editar produto ---------->\n\n");
        printf("Codigo: %d\n\n", produto[option-1].viCodigo);
        printf("FORNECEDOR: %s\n", produto[option-1].vcFornecedor);
        VerifyContinue("Alterar FORNECEDOR?", &verify);
        if(verify == 0){
            printf("OK!\n");
        }else{
            fflush(stdin);
            printf("Fornecedor: ");
            lerString(produto[option-1].vcFornecedor, 30);
        }
        system("cls");
        printf("\n\n<---------- Editar produto ---------->\n\n");
        printf("Codigo: %d\n\n", produto[option-1].viCodigo);
        printf("PRECO: %.2f\n", produto[option-1].vfPreco);
        VerifyContinue("Alterar PRECO?", &verify);
        if(verify == 0){
            printf("OK!\n");
        }else{
            fflush(stdin);
            printf("Preco final: ");
            scanf("%f", &produto[option-1].vfPreco);
        }
        system("cls");
        printf("\n\n<---------- Editar produto ---------->\n\n");
        printf("Codigo: %d\n\n", produto[option-1].viCodigo);
        printf("DATA DA COMPRA: %s\n", produto[option-1].vcDataComp);
        VerifyContinue("Alterar DATA DA COMPRA?", &verify);
        if(verify == 0){
            printf("OK!\n");
        }else{
            fflush(stdin);
            printf("Data da compra 00/00/0000: ");
            lerString(produto[option-1].vcDataComp, 20);
        }
        printf("\n<---------- Editar produto ---------->\n\n");
    }
                                void ExcluiProduto(T_ficha_produtos produto[], int option){
        produto[option-1].ativo = 0;
        if(produto[option-1].ativo == 0){
            printf("Produto excluido com sucesso\n");
        }else{
            printf("Ops! Algo deu errado\n");
        }
    }
    void ListarVendedores(T_ficha_vendedores arr[], int size){
        int i, sizeA = 0;
        for(i = 0; i < size; i++){
            if(arr[i].ativo == 1){
                sizeA += 1;
            }
        }
        if(sizeA > 0){
            for (i = 0; i < size; i++){
                if(arr[i].ativo==1){
                    printf("\n<===============================>\n\n");
                    printf("ID: %d\n", i+1);
                    printf("CODIGO: %d\n", arr[i].viCodigo);
                    printf("NOME: %s", arr[i].vcNome);
                    printf("\n<===============================>\n");
                }
            }
        }else{
            printf("Nenhum regstro encontrado.\n");
        }
    }
    void DetalhesVendedor(T_ficha_vendedores arr[], int option){
        printf("VENDEDOR %d\n", option);
        printf("CODIGO: %d\n", arr[option-1].viCodigo);
        printf("NOME: %s\n", arr[option-1].vcNome);
        printf("ENDERECO: %s\n", arr[option-1].vcEndereco);
        printf("TELEFONE:  %s\n", arr[option-1].vcFone);
    }
    void AlteraVendedor(T_ficha_vendedores vendedor[], int option){
        int verify;
        system("cls");
        printf("\n\n<---------- Editar vendedor ---------->\n\n");
        printf("Codigo: %d\n\n", vendedor[option-1].viCodigo);
        printf("NOME: %s\n", vendedor[option-1].vcNome);
        VerifyContinue("Alterar NOME?", &verify);
        if(verify == 0){
            printf("OK!\n");
        }else{
            fflush(stdin);
            printf("Nome: ");
            lerString(vendedor[option-1].vcNome, 30);
        }
        system("cls");
        printf("\n\n<---------- Editar vendedor ---------->\n\n");
        printf("Codigo: %d\n\n", vendedor[option-1].viCodigo);
        printf("ENDERECO: %s\n", vendedor[option-1].vcNome);
        VerifyContinue("Alterar ENDERECO?", &verify);
        if(verify == 0){
            printf("OK!\n");
        }else{
            fflush(stdin);
            printf("Endereco: ");
            lerString(vendedor[option-1].vcEndereco, 50);
        }
        system("cls");
        printf("\n\n<---------- Editar vendedor ---------->\n\n");
        printf("Codigo: %d\n\n", vendedor[option-1].viCodigo);
        printf("TELEFONE: %s\n", vendedor[option-1].vcNome);
        VerifyContinue("Alterar TELEFONE?", &verify);
        if(verify == 0){
            printf("OK!\n");
        }else{
            fflush(stdin);
            printf("Telefone: ");
            lerString(vendedor[option-1].vcFone, 20);
        }
        printf("\n<---------- Editar vendedor ---------->\n\n");
    }
    void ExcluiVendedor(T_ficha_vendedores vendedor[], int option){
        vendedor[option-1].ativo = 0;
        if(vendedor[option-1].ativo == 0){
            printf("Vendedor excluido com sucesso\n");
        }else{
            printf("Ops! Algo deu errado\n");
        }
    }
    int getVendedor(T_ficha_vendedores arr[], int size){
        int id;
        do{
            system("cls");
            ListarVendedores(arr, size);
            printf("Digite o ID do vendedor que esta vendendo.\n");
            scanf("%d", &id);
            if(id == 0){
                printf("ID invalido!\n");
                system("pause");
            }
        }while(id == 0);
            return id--;
    }
    int getCliente(T_ficha_cliente arr[], int size){
        int id;
        do{
            system("cls");
            ListarClientes(arr, size);
            printf("Digite o ID do cliente que esta comprando.\n");
            scanf("%d", &id);
            if(id == 0){
                printf("ID invalido!\n");
                system("pause");
            }
            if(arr[id - 1].ativo==1){
                if(arr[id - 1].vbCredito==1){
                    arr[id - 1].vbCredito=0;
                    return id--;
                }else{
                    printf("Desculpe mas este cliente está com debitos pendentes.\n");
                    id = 0;
                }
            }else{
                    printf("Desculpe mas este cliente está desativado.\n");
                    id = 0;
            }
        }while(id == 0);
    }
    void ListarCarrinho(int itens[], int quant[], T_ficha_produtos produtos[]){
        int i, countItens=sizeof(itens)/sizeof(itens[0]);
        float totalC=0;
        system("cls");
        for (i = 0; i < countItens; ++i){
            printf("\n<===============================>\n\n");
            printf("CODIGO: %d\n", produtos[itens[i]].viCodigo);
            printf("QUANTIDADE: %d\n", quant[itens[i]]);
            printf("DESCRICAO: %s", produtos[itens[i]].vcDescricao);
            printf("PRECO UNI.: %.2f\n", produtos[itens[i]].vfPreco);
            float preco = produtos[itens[i]].vfPreco;
            int quantidade = quant[i];
            totalC += preco * quantidade;
            printf("TOTAL: %2.f\n", preco * quantidade);
            printf("\n<===============================>\n");
        }
        printf("\nTotal da compra = %.2f\n\n", totalC);
    }
    void NotaFiscal(int itens[], int quant[], T_ficha_produtos produtos[], T_ficha_vendedores vendedor[], T_ficha_cliente cliente[], int codVend, int codClie){
        int i, countItens=sizeof(itens)/sizeof(itens[0]);
        float totalC=0;
        system("cls");
        printf("\n\tNOTA FISCAL\t\n\n");
        printf("\tVendedor\t\n\n");
        printf("CODIGO: %d\n", vendedor[codVend].viCodigo);
        printf("NOME: %s\n\n", vendedor[codVend].vcNome);
        printf("\tCliente\t\n\n");
        printf("CODIGO: %d\n", cliente[codVend].viCodigo);
        printf("NOME: %s\n\n", cliente[codVend].vcNome);
        printf("\tProdutos:\t\n\n");
        printf("CODIGO\t|\tQUANT.\t|\tDESC.\t|\tPRECO UNI.\n");
        for (i = 0; i < countItens; ++i){
            printf("%d", produtos[itens[i]].viCodigo);
            printf("\t|\t");
            printf("%d", quant);
            printf("\t|\t");
            printf("%s\b", produtos[itens[i]].vcDescricao);
            printf("\t|\t");
            printf("%.2f\n", produtos[itens[i]].vfPreco);
            float preco = produtos[itens[i]].vfPreco;
            int quantidade = quant[i];
            totalC += preco * quantidade;
            printf("TOTAL: %2.f\n", preco * quantidade);
            printf("\n<===============================>\n");
        }
        printf("\nTotal da compra = %.2f\n", totalC);
    }
    void NovaVenda(T_ficha_cliente clientes[], T_ficha_produtos produtos[], T_ficha_vendedores vendedores[], int sizeC, int sizeP, int sizeV){
        system("cls");
        int codVend, codProdutos[100], codClie, test, count=0, prod, quantTemp, quant[100];
        codVend = getVendedor(vendedores, sizeV);
        codClie = getCliente(clientes, sizeC);
        do{
            system("cls");
            ListarProdutos(produtos, sizeP);
            printf("Digite o ID do produto para adicionar no carrinho.\n");
            scanf("%d", &prod);
            printf("Quantos?\n");
            scanf("%d", &quantTemp);
            if(produtos[prod-1].viUniEstoque >= quantTemp){
                quant[count] = quantTemp;
                codProdutos[count] = prod-1;
                produtos[prod-1].viUniEstoque = produtos[prod-1].viUniEstoque - quantTemp;
                count++;
            }else{
                printf("Ops! Nao temos tanto no estoque.\nProduto nao adicionado ao carrinho!\n");
            }
            VerifyContinue("Cadastrar mais?", &test);
        }while(test != 0);
        ListarCarrinho(codProdutos, quant, produtos);
    
        VerifyContinue("Emitir nota fiscal?", &test);
        if(test != 0){
            NotaFiscal(codProdutos, quant, produtos, vendedores, clientes, codVend, codClie);
            system("pause");
        }else{
            printf("\n\nVenda realizada com sucesso!\n\n\n");
            system("pause");
        }
    }
    int main(void){
        int viMenu, idC=0, idP=0, idV=0, i, sair, option, optiondt, verify;
        T_ficha_cliente clientes[100];
        T_ficha_produtos produtos[50];
        T_ficha_vendedores vendedores[10];
        int sizeC = 0;
        int sizeV = 0;
        int sizeP = 0;
    
        sizeC += lerClientes(clientes);
        sizeV += lerVendedor(vendedores);
        sizeP += lerProdutos(produtos);
    
        int sizeAC, sizeAP, sizeAV;
        do{
            PrintMenu(&viMenu);
            system("cls");
            switch(viMenu){
                case 1:
                    do{
                        MenuCadastros(&sair);
                        switch(sair){
                            case 1:
                                if(sizeC < 100){
                                    CadastraClientes(clientes, sizeC);
                                    sizeC += 1;
                                    break;
                                }else{
                                    printf("Ops! Nao tenho mais espaco!\n");
                                    sair = 0;
                                }
                            case 2:
                                if(sizeV < 50){
                                    CadastraProdutos(produtos, sizeP);
                                    sizeP += 1;
                                    break;
                                }else{
                                    printf("Ops! Nao tenho mais espaco!\n");
                                    sair = 0;
                                }
                            case 3:
                                if(sizeP < 10){
                                    CadastraVendedores(vendedores, sizeV);
                                    sizeV += 1;
                                    break;
                                }else{
                                    printf("Ops! Nao tenho mais espaco!\n");
                                    sair = 0;
                                }
                        }
                    }while(sair != 0);
                    break;
                case 2:
                    do{
                        MenuProcurar(&sair);
                        system("cls");
                        switch(sair){
                            case 1:
                                do{system("cls");
                                    ListarClientes(clientes, sizeC);
                                    sizeAC = 0;
                                    for(i = 0; i < sizeC; i++){
                                        if(clientes[i].ativo == 1){
                                            sizeAC += 1;
                                        }
                                    }
                                    if(sizeAC > 0){
                                        printf("Digite o ID do cliente para ver detalhes, alterar ou excluir\nOu 0 para voltar ao menu anterior\n");
                                    }else{
                                        printf("Digite 0 para voltar ao menu anterior\n");
                                    }
                                    scanf("%d", &option);
                                    if(option == 0){
                                        break;
                                    }
                                    system("cls");
                                    DetalhesCliente(clientes, option);
                                    MenuDetalhes(&optiondt);
                                    system("cls");
                                    switch(optiondt){
                                        case 1:
                                            do{
                                                AlteraCliente(clientes, option);
                                                system("cls");
                                                DetalhesCliente(clientes, option);
                                                VerifyContinue("Tudo certo?", &verify);
                                            }while(verify == 0);
                                            break;
                                        case 2:
                                            ExcluiCliente(clientes, option);
                                            system("pause");
                                            break;
                                    }
                                }while((option != 0) || (clientes[option-1].ativo != 0));
                                break;
                            case 2:
                                do{
                                    system("cls");
                                    ListarProdutos(produtos, sizeP);
                                    sizeAP = 0;
                                    for(i = 0; i < sizeP; i++){
                                        if(produtos[i].ativo == 1){
                                            sizeAP += 1;
                                        }
                                    }
                                    if(sizeAP > 0){
                                        printf("Digite o ID do produto para ver detalhes, alterar ou excluir\nOu 0 para voltar ao menu anterior\n");
                                    }else{
                                        printf("Digite 0 para voltar ao menu anterior\n");
                                    }
                                    scanf("%d", &option);
                                    if(option == 0){
                                        break;
                                    }
                                    system("cls");
                                    DetalhesProduto(produtos, option);
                                    MenuDetalhes(&optiondt);
                                    system("cls");
                                    switch(optiondt){
                                        case 1:
                                            do{
                                                AlteraProduto(produtos, option);
                                                system("cls");
                                                DetalhesProduto(produtos, option);
                                                VerifyContinue("Tudo certo?", &verify);
                                            }while(verify == 0);
                                            break;
                                        case 2:
                                            ExcluiProduto(produtos, option);
                                            system("pause");
                                            break;
                                    }
                                }while((option != 0) || (produtos[option-1].ativo != 0));
                                break;
                            case 3:
                                do{
                                    system("cls");
                                    ListarVendedores(vendedores, sizeV);
                                    sizeAV = 0;
                                    for(i = 0; i < sizeV; i++){
                                        if(vendedores[i].ativo == 1){
                                            sizeAV += 1;
                                        }
                                    }
                                    if(sizeAV > 0){
                                        printf("Digite o ID do produto para ver detalhes, alterar ou excluir\nOu 0 para voltar ao menu anterior\n");
                                    }else{
                                        printf("Digite 0 para voltar ao menu anterior\n");
                                    }
                                    scanf("%d", &option);
                                    if(option == 0){
                                        break;
                                    }
                                    system("cls");
                                    DetalhesVendedor(vendedores, option);
                                    MenuDetalhes(&optiondt);
                                    system("cls");
                                    switch(optiondt){
                                        case 1:
                                            do{
                                                AlteraVendedor(vendedores, option);
                                                system("cls");
                                                DetalhesVendedor(vendedores, option);
                                                VerifyContinue("Tudo certo?", &verify);
                                            }while(verify == 0);
                                            break;
                                        case 2:
                                            ExcluiVendedor(vendedores, option);
                                            system("pause");
                                            break;
                                    }
                                }while((option != 0) || (vendedores[option-1].ativo != 0));
                                break;
                        }
                    }while(sair != 0);
                    break;
                case 3:
                    do{
                        sair = 10;
                        if((sizeC > 0) && (sizeV > 0) && (sizeP > 0)){
                            NovaVenda(clientes, produtos, vendedores, sizeC, sizeP, sizeV);
                            VerifyContinue("Fazer uma nova venda?", &sair);
                        }else{
                            sair = 0;
                            if(sizeC <= 0){
                                printf("Ops! Nao ha clientes, por favor cadastra pelo menos um.\n");
                            }
                            if(sizeP <= 0){
                                printf("Ops! Nao ha produtos, por favor cadastra pelo menos um.\n");
                            }
                            if(sizeV <= 0){
                                printf("Ops! Nao ha vendedores, por favor cadastra pelo menos um.\n");
                            }
                            system("pause");
                        }
                    }while(sair != 0);
                    break;
            }
    
            SalvarArqClientes(clientes, sizeC);
            SalvarArqProdutos(produtos, sizeP);
            SalvarArqVendedores(vendedores, sizeV);
        }while(viMenu != 0);
        system("cls");
        SalvarArqClientes(clientes, sizeC);
        SalvarArqProdutos(produtos, sizeP);
        SalvarArqVendedores(vendedores, sizeV);
        printf("\n\n\n\t\tEncerrando...\n\n\n");
        system("pause");
        return 0;
    }

    Valeu cara funcionou :) me salvou mas agora não estou conseguindo fazer funcionar a pesquisa

     

    void ProcurarClientes(T_ficha_cliente arr[]){
        char pesquisa[50];
        int i;
        printf("Informe o Nome que procura:");
        fflush(stdin);
        lerString(pesquisa, 50);
        for(i=0; i< 100; i++){
            if(strcmp(pesquisa, arr[i].vcNome) == 0){
            	if(arr[i].ativo==1){
    	            printf("<---------------------------------------->\n");
    	            DetalhesCliente(arr, i+1);
    	            printf("<---------------------------------------->\n");
    	        }
            }
        }
        system("pause");
    }

     

    Editado por Simon Viegas
    Inserir tag em citação

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário






    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

    ×