Ir ao conteúdo
  • Cadastre-se

Rafael.Amorim

Membro Júnior
  • Posts

    9
  • Cadastrado em

  • Última visita

Reputação

0
  1. Olá pessoas, Sou um estudante de análise e desenvolvimento de sistemas e estou desenvolvendo um 'sistema de um banco para uma cooperativa fictícia' para avaliação de final de semestre. Para isso estou utilizando arquivos, e estou tendo problemas para compreender a função fread(), conforme o código abaixo. A ideia é que o fread() leia cada estrutura de um arquivo uma por uma, dentro de um loop, e compare os campos de nome de usuário e senha para login com o que for digitado. Tentei seguir a sintaxe "fread (void *buffer, int numero_de_bytes, int count, FILE *fp)" encontrada em [link]http://mtm.ufsc.br/~azeredo/cursoC/aulas/c970.html[/link] Fiz umas contas e calculei que faltam 35 dias para o fim do meu semestre, e que tenho 11 atividades dentre 9 matérias para entregar, sem contar as provas, então tenho aproximadamente 3.18 dias/projeto para concluir tudo, então se alguém puder me der uma luz eu agradeço #include <iostream>#include <stdio.h>#include <stdlib.h>#include <locale.h>#include <string.h>#include <conio.h>using namespace std; int janela();int menuCliente();//int menuPublico();int escondeSenha();int verifSenha();int cadastraCliente();int login(); //int statusLogin = 1; typedef struct cliente { char nome[50];char endereco[150];char telefone[20];char email[50];char login[100];char senha[50];char tipoCliente[2];char cpf[11];char cnpj[15]; }client; typedef struct conta { //client.nome; int status; /*conta ativa ou inativa*/ int tipoConta; /* conta comum, especial, poupança*/ float saldo; float limite; }acc; int janela(){ printf("\n\t\t==========================================="); printf("\n\t\t New COOP Bank of Claudete"); printf("\n\t\t===========================================\n\n\n"); return 1;} int menuCliente(){ system ("cls"); int option; janela(); printf("\n1-) Criar Conta\n"); printf("\n2-) Consulta de Saldo\n"); printf("\n3-) Saques e Depósitos\n"); printf("\n4-) Encerrar Conta\n"); printf("\nESC-) Voltar ao menu principal\n\n"); printf("\nOpção: "); option = getch(); printf("\n\n%d\n", option); switch (option) { case '1': printf("\n\nErro! Função Não-Implementada\n\n\n"); system ("pause"); menuCliente(); break; case '2': printf("\n\nErro! Função Não-Implementada!!!\n\n\n"); system ("pause"); menuCliente(); break; case '3': printf("\n\nErro! Função Não-Implementada!!!\n"); system ("pause"); menuCliente(); break; case '4': printf("\n\nErro! Função Não-Implementada!!!\n"); system ("pause"); menuCliente(); break; case 27: break; default: printf("\n\nErro! Opção Inválida!!!\n"); system ("pause"); menuCliente(); break; } return 1;} char global[50];//wtf is this? int escondeSenha(char senhatemporaria[50]){ char c={0}; int a=0; do { c=getch(); if(isprint(c)) { //Analisa se o valor da variável c é imprimivel senhatemporaria[a]=c; //Se for, armazena o caractere a++; printf("*"); //imprime o * Anterisco } else if(c==8&&a) { //8 é o caractere BackSpace na tabela ASCII, && a analisa se a é diferente de 0 senhatemporaria[a]='\0'; a--; printf("\b \b"); //Apagando o caractere digitado } //return c; } while(c!=13); strcpy(global,senhatemporaria); return 0;} int cadastraCliente() // função para cadastro de novos clientes{ system("cls"); janela(); printf("\t\t===== Sistema de Cadastro de Clientes =====\n\n"); client *dados; dados=(client*)malloc(sizeof(client)); int option; // variavel para switch de seleção de pessoa fisica ou juridica printf("\nDigite o Nome do cliente: "); fflush(stdin); scanf("%[^\n]",(*dados).nome); //scanf("%s", client.nome); printf("\n\nDigite o E-mail do cliente: "); fflush(stdin); scanf("%[^\n]",(*dados).email); //scanf("%s", client.email); printf("\n\nDigite o Endereço do cliente: "); fflush(stdin); scanf("%[^\n]",(*dados).endereco); //scanf("%s", client.endereco); system("cls"); janela(); printf("\t\t===== Sistema de Cadastro de Clientes =====\n"); printf("\n\nDigite o Telefone do cliente: "); fflush(stdin); scanf("%[^\n]",(*dados).telefone); //scanf("%s", client.telefone); printf("\n\nDigite um Nome de Usuário para Login: "); fflush(stdin); scanf("%[^\n]",(*dados).login); //scanf("%s", client.login); char tempSenha[16]={}; //variavel para armazenar temporariamente a senha digitada no cadastro do //loop para cadastrar a senha corretamente, caso o usuario digite algo errado { system("cls"); janela(); printf("\t\t===== Sistema de Cadastro de Clientes =====\n\n"); printf("\n\nDigite sua senha: "); fflush(stdin); escondeSenha((*dados).senha); printf("\n\nDigite novamente sua senha: "); fflush(stdin); escondeSenha(tempSenha); if (strcmp((*dados).senha,tempSenha)!=0) { printf("\n\n Erro! Senhas não conferem. Tente novamente.\n\n"); system("pause"); } } while (strcmp((*dados).senha,tempSenha)!=0); system("cls"); janela(); printf("\t\t===== Sistema de Cadastro de Clientes =====\n"); do { //loop para escolha de tipo de cliente printf("\n\nTipo de cliente:"); printf("\n 1-) Pessoa Física"); printf("\n 2-) Pessoa Jurídica"); fflush(stdin); option = getch(); switch (option) { case '1': printf("\nDigite o CPF do cliente: "); scanf("%s",(*dados).cpf); *dados->tipoCliente = '1'; break; case '2': printf("\nDigite o CNPJ do cliente: "); scanf("%s",(*dados).cnpj); *dados->tipoCliente = '2'; break; default: printf("\nOpção Inválida"); break; } } while (option != '1' && option != '2'); FILE *arqClientes; //abertura do banco de dados de clientes char url [] = "clientes.txt"; arqClientes = fopen(url,"ab"); if (arqClientes == NULL) // verificação de abertura; aparentemente inútil em uma abertura append... { printf("Erro!"); } else { printf("\nBanco de Dados Aberto com sucesso.\n\n"); } fprintf(arqClientes,"%s\n",(*dados).login); //gravação da estrutura, aceito sugestões de melhora... fprintf(arqClientes,"%s\n",(*dados).senha); fprintf(arqClientes,"%s\n",(*dados).nome); fprintf(arqClientes,"%s\n",(*dados).email); fprintf(arqClientes,"%s\n",(*dados).endereco); fprintf(arqClientes,"%s\n",(*dados).telefone); fprintf(arqClientes,"%s\n",(*dados).tipoCliente); if (option == '1') //gravação de somente um tipo de documento { fprintf(arqClientes,"%s\n",(*dados).cpf); } else { fprintf(arqClientes,"%s\n",(*dados).cnpj); } fclose(arqClientes); printf("\nCadastro efetuado com Sucesso!!!\n\n"); system("pause"); //chama menu inicial return 1; //retorno para a ide não encher o saco com warning.. } int login(/*int statusLogin*/){ char loginTemp[100]; //char loginFile[100]; char passTemp [50]; int compare; FILE *arqClientes; char url [] = "clientes.txt"; arqClientes = fopen(url,"a+"); if (arqClientes == NULL) { printf("Erro!"); } else { printf("\nBanco de Dados Aberto com sucesso.\n\n"); } system("cls"); janela(); printf("\t\t============ Login de Usuário =============\n\n"); fflush(stdin); printf("\n\n\tLogin:"); scanf("%s", &loginTemp); do { fread( &cliente, sizeof (client), 1, arqClientes); //linha onde se encontra o erro compare = strcmp(client.login,loginTemp); //outro erro --' } while (!feof(arqClientes) || compare != 0 ); if (compare ==0) { printf("\n\nOlá, %s",loginTemp); getch(); fflush(stdin); printf("\n\n\tSenha:"); escondeSenha(passTemp); printf("\n\n\tSenha digitada: %s", passTemp); getch(); } else { printf("\n\nErro! Login não encontrado! "); system("pause"); } //falta completar a função fclose(arqClientes); return 0;} int main(){ setlocale(LC_ALL,"Portuguese"); int optionPublico; do{ system ("cls"); janela(); printf("\n\t\t==============Menu Principal===============\n\n"); printf("\n1-) Login\n"); printf("\n2-) Cadastrar Cliente\n"); printf("\nESC-) Sair\n"); printf("\nOpção: "); optionPublico = getch(); printf("%d",optionPublico); switch (optionPublico) { case '1': login(); break; case '2': cadastraCliente(); break; case 27: system("cls"); janela(); printf("\n\n\nLogout Efetuado com Sucesso...\n\n\n"); break; default: printf("\n\nErro! Opção Inválida!!!\n\n\n"); system ("pause"); break; } } while (optionPublico != 27); return 0;}

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...