Cleber Griff Postado Setembro 30, 2012 Denunciar Share Postado Setembro 30, 2012 Galera, to com um probleminha aqui em um trabalho da facul. Aqui está a descrição do que estou com problema.2- Considere os seguintes arquivos binários:• “contas.bin”: contém registros de contas bancárias de umadeterminada agência. Cada registro armazena as seguintesinformações sobre uma conta bancária: número da conta(cadeia de 5 caracteres), nome do cliente (cadeia de 40caracteres) e saldo (valor real);• “moviment.bin”: contém registros de movimentações feitas(depósitos ou saques) em contas bancárias. Cada registroarmazena as seguintes informações sobre uma movimentação:número da conta movimentada (cadeia de 5 caracteres), tipoda movimentação (um caractere, podendo ser ‘S’ para saque e‘D’ para depósito) e valor da movimentação (valor real).Faça um programa que atualize o saldo das contas bancáriascontidas no arquivo “contas.bin” de acordo com asmovimentações contidas no arquivo “moviment.bin”.Como eu atualizo os dados de um arquivo binário? Não faço ideia :~(Eu posto o código mais tarde, se for necessário. Ele ficou meio confuso. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 PedroCunha Postado Setembro 30, 2012 Denunciar Share Postado Setembro 30, 2012 Para atualizar arquivos binários você precisa gravar de forma diferente, utilizando parâmetros como sizeof.Vou te indicar um link que ensina como fazer isso:C++ Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Cleber Griff Postado Outubro 1, 2012 Autor Denunciar Share Postado Outubro 1, 2012 (editado) Valeu, PedroCunha.Mas só posso usar C :~~Consegui fazer o programa, fica aí pra quem precisar#include<stdio.h> #include<stdlib.h> typedef struct contas{ //Tipo de dado que caracteriza a criação de uma conta char num_conta[5], nome[40]; float saldo; }contas; typedef struct transacoes{ //Tipo de dado referente a uma transação float valor; char tipo_trans, num_conta[5]; }transacoes; void cria_conta(){ //Função para criar uma nova conta FILE *fp; contas nova_conta; fp = fopen("contas.bin", "ab+"); //Abre ou cria o arquivo contas.bin para adicionar dados if(fp == NULL){ printf("Erro ao abrir arquivo"); exit(1); } else{ system("cls"); //A seguir, captura os dados referentes à nova conta printf("=== NOVA CONTA ==="); printf("\nNome do cliente: "); gets(nova_conta.nome); printf("\nNo. da conta (5 digitos): "); gets(nova_conta.num_conta); printf("\nSaldo: "); scanf("%f", &nova_conta.saldo); fflush(stdin); fwrite(&nova_conta, sizeof(contas), 1, fp); //Grava os dados em contas.bin fclose(fp); printf("\n\nDados salvos com sucesso!\n\n"); system("pause"); } } void verifica_saldo(){ //Função para verificar o saldo de determinada conta FILE *fp; contas conta; int busca_conta, encontrou=0; //Encontrou é usado para verificar se a conta existe fp = fopen("contas.bin", "rb"); //Abre contas.bin para leitura if(fp == NULL){ printf("Erro na abertura do arquivo"); exit(2); } else{ system("cls"); printf("Informe os 5 digitos do No. da conta: "); scanf("%d", &busca_conta); //Captura os dígitos da conta que o usuário deseja fflush(stdin); while(!feof(fp)){ //Varre o arquivo contas.bin até encontrar o fim do arquivo fread(&conta, sizeof(contas), 1, fp); //Armazena a informação na variável conta if(atoi(conta.num_conta)== busca_conta){ //Converte a string conta.num_conta para inteiro e compara com busca_conta printf("\n\nConta %s\nSaldo: %.2f\n\n", conta.num_conta, conta.saldo); //Exibe os dados da conta encontrou=1; //Altera o estado de encontrou para 1 break; } } if(encontrou==0) printf("\nNada encontrado!\n\n"); //Case encontrou esteja em 0, nenhum arquivo foi encontrado. Isso é exibido ao usuário system("pause"); } } void faz_transacao(){ //Função para realizar uma transação FILE *contasbin; //Vai abrir o arquivo contas.bin FILE *movimentbin; //Vai abrir o arquivo moviment.bin transacoes trans; //Variável para armazenar a transação contas id; //Variável para armazenar a conta int encontrou=0; contasbin = fopen("contas.bin", "rb+"); //Abre contas.bin para leitura e gravação (atualizar os dados) if(contasbin==NULL){ printf("\nErro ao abrir o arquivo contas.bin"); exit(1); } else{ movimentbin = fopen("moviment.bin", "ab+"); //Só tenta abrir moviment.bin se existir contas.bin if(movimentbin==NULL){ printf("\nErro ao abrir o arquivo moviment.bin"); exit(2); } else{ system("cls"); //Se os arquivos contas.bin e moviment.bin estiverem criados e abertos, então recolhe os dados da transação printf("==== NOVA TRANSACAO ===="); printf("\n\nNo. da conta: "); gets(trans.num_conta); while(!feof(contasbin)){ //Varre o arquivo até o final fread(&id, sizeof(contas), 1, contasbin); //Lê os dados de contas.bin e armazena em id if(atoi(id.num_conta)==atoi(trans.num_conta)){ //Converte as string para inteiro e compara-as encontrou=1; //Muda o estado de encontrou para 1 printf("\nConta %s\nSaldo atual: %.2f", id.num_conta, id.saldo); printf("\n\nTipo de transacao \n(S - Saque / D- Deposito)\n >>> "); scanf("%c", &trans.tipo_trans); //Captura o tipo de transação (Saque ou Depósito) fflush(stdin); //Limpa o buffer do teclado trans.tipo_trans=toupper(trans.tipo_trans); //Transforma o caractere para maiúsculo printf("\n\nValor da transacao: "); scanf("%f", &trans.valor); fflush(stdin); if(trans.tipo_trans=='S'){ //Se a opção escolhida foi saque id.saldo=id.saldo-trans.valor; fseek(contasbin, (-1)*sizeof(contas), SEEK_CUR); //Leva o cursor para o início da conta atualmente em id fwrite(&id, sizeof(contas), 1, contasbin); //Grava os novos dados da conta printf("Novo saldo da conta %s\n%.2f\n\n", id.num_conta, id.saldo); break; } if(trans.tipo_trans=='D'){ //Se a opção foi depósito id.saldo=id.saldo+trans.valor; fseek(contasbin, (-1)*sizeof(contas), SEEK_CUR); //Leva o cursor para o início da conta atualmente em id fwrite(&id, sizeof(contas), 1, contasbin); //Grava os novos dados da conta printf("Novo saldo da conta %s\n%.2f\n\n", id.num_conta, id.saldo); break; } } } if(encontrou==0) printf("\nConta não encontrada\n\n"); //Caso a variável encontrou armazenar 0, a conta não foi encontrada if(encontrou==1) fwrite(&trans, sizeof(transacoes), 1, movimentbin); //Caso contenha 1, a transação foi realizada e é então salva em moviment.bin //Fecha os arquivos fclose(contasbin); fclose(movimentbin); system("pause"); } } } int main(int argc, char *argv[]){ int opt; do{ //Exibe um menu com as opções até a opção de SAIR ser selecionada system("cls"); printf("Escolha uma opcao:\n1- Criar conta\n2- Verificar saldo\n3- Realizar transacao\n4- Sair\n\t\t>>> "); scanf("%d", &opt); fflush(stdin); if(opt==1) cria_conta(); if(opt==2) verifica_saldo(); if(opt==3) faz_transacao(); }while(opt!=4); return 0; } Editado Outubro 1, 2012 por Cleber Griff Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 PedroCunha Postado Outubro 2, 2012 Denunciar Share Postado Outubro 2, 2012 :D. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Cleber Griff
Galera, to com um probleminha aqui em um trabalho da facul. Aqui está a descrição do que estou com problema.
2- Considere os seguintes arquivos binários:
• “contas.bin”: contém registros de contas bancárias de uma
determinada agência. Cada registro armazena as seguintes
informações sobre uma conta bancária: número da conta
(cadeia de 5 caracteres), nome do cliente (cadeia de 40
caracteres) e saldo (valor real);
• “moviment.bin”: contém registros de movimentações feitas
(depósitos ou saques) em contas bancárias. Cada registro
armazena as seguintes informações sobre uma movimentação:
número da conta movimentada (cadeia de 5 caracteres), tipo
da movimentação (um caractere, podendo ser ‘S’ para saque e
‘D’ para depósito) e valor da movimentação (valor real).
Faça um programa que atualize o saldo das contas bancárias
contidas no arquivo “contas.bin” de acordo com as
movimentações contidas no arquivo “moviment.bin”.
Como eu atualizo os dados de um arquivo binário? Não faço ideia :~(
Eu posto o código mais tarde, se for necessário. Ele ficou meio confuso.
Link para o comentário
Compartilhar em outros sites
3 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.