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

×