Ir ao conteúdo
  • Cadastre-se
Mayycon0707

C arquivos em c m

Recommended Posts

fiz esse programa que simula um banco.

Mas agora preciso fazer  a parte de saque e deposito e qual comando usar para modificar um arquivo especifico?

#include <stdio.h>
#include<stdlib.h>
#include <string.h>
#include <conio.h>
#include <locale.h>
 
struct Cliente{
	int cpf,senha;
	char nome[50];
	float saldo; 
};
main(){
	setlocale(LC_ALL,"Portuguese");
	FILE *arq;
	Cliente cli;
	system("color 1f");
	int consa,e=0,sd,op;
	float valor;
	arq = fopen("cliente.txt","a+b");
	if (arq==NULL)printf("\nEr01Erro ao tentar abrir arquivo");
	  else{
	  	do{
	  		printf("\n\n\n\n\t\t\t\t\t\t\t\t================MENU================");     
	  		printf("\n\t\t\t\t\t\t\t\t\t1-Criar conta");
	  		printf("\n\t\t\t\t\t\t\t\t\t2-Consultar saldo");
	  		printf("\n\t\t\t\t\t\t\t\t\t3-Entre em contato");
	  		printf("\n\t\t\t\t\t\t\t\t\t4-Sair");
	  		printf("\n\t\t\t\t\t\t\t\t====================================\n");
	  		scanf("%d",&op);
	  		system("cls");
	  		switch(op){
	  		case 1:{
	  			e=0;
	  			consa=0;
	  			rewind(arq);
			printf("\n\t\t\t\t\t\t\t\tInforme seu cpf\n");
	  		scanf("%d",&consa);	
			  system("cls");
			while(!feof(arq)){
			fread(&cli,sizeof(cli),1,arq);
			 if (ferror(arq)){
	  		     system("color 74");;printf("\nConta nao encontrada\n");system("pause");system("cls");system("color 1f");}
	  		    				else{
			if(e==0){	
			if(consa==cli.cpf){
	  		e=1;
	  			}
			}}}
	  		if(e!=1){	 
			printf("\n\n\n\n\t\t\t\t\t\t\t\t=====================Cadastro================\n");	
			valor=0;
			cli.saldo=0;  			
	  		cli.cpf=consa;
	  		fflush(stdin);
	  		printf("\n\t\t\t\t\t\t\t\t\tDigite o nome do cliente\n");
	  		gets(cli.nome);
	  		fflush(stdin);
	  		printf("\n\t\t\t\t\t\t\t\tDigite o saldo que deseja adicionar a conta\n");
	  			scanf("%f",&cli.saldo);
	  		printf("\n\t\t\t\t\t\t\t\tDigite uma senha pra conta de numeros 0-9\n");
	  			scanf("%d",&cli.senha);
	  		fwrite(&cli,sizeof(cli),1,arq);
	  		printf("\n\t\t\t\t\t\t\t\t=============================================\n\n\n");
			system("cls");
	  		system("color 74");
	  		printf("\n\n\n\n\n\n\n\n\t\t\t\t\t\t\t\tConta criada!\n");
	  		getch();
			system("cls");
			system("color 1f");
			
			}
	  		  
	  		   if(e==1){system("cls");system("color 74");printf("\n\n\n\n\n\n\n\n\t\t\t\t\t\t\t\tConta já existe\n");getch();system("cls");system("color 1f");}
			break;
				}
	  		case 2: {
	  		e=0;
			rewind(arq);
			printf("\n\t\t\t\t\t\t\t\tInforme seu cpf\n");
	  		scanf("%d",&consa);	
			while(!feof(arq)){
	  		    fread(&cli,sizeof(cli),1,arq);
	  		    if (ferror(arq)){system("color 74");
	  		    printf("\n\n\n\n\n\n\n\n\t\t\t\t\t\t\t\tConta nao encontrada\n");system("pause");system("cls");system("color 1f");}
	  		    				else{
			
			if(e==0){
	  		if (!feof(arq)){
	  		if(consa==cli.cpf){
	  		e=1;
	  		printf("\n\t\t\t\t\t\t\t\tInforme a Senha da conta\n");
	  		scanf("%d",&sd);
	  		getch();
			system("cls");
	  		if(sd==cli.senha)
	  		{
	  			printf("\n\t\t\t\t\t\t\t\t================Consulta===============");
	  		    	 printf("\n\t\t\t\t\t\t\t\t\tnome %s\n",cli.nome);
	  		         printf("\n\t\t\t\t\t\t\t\t\tsaldo %0.2f\n",cli.saldo);
	  		        printf("\n\t\t\t\t\t\t\t\t=======================================\n");
	  		        system("pause");
	  		        system("cls");
			  }
			  					else {system("color 74");printf("\nsenha invalida\n");getch();system("cls");system("color 1f");}
			  }				
		}							
	}	
							
	}
}
if(e==0){system("cls");system("color 74");printf("\n\n\n\n\n\n\n\n\n\n\t\t\t\t\t\t\t\t\t\t\t\t\tConta não encontrada\n");getch();system("cls");system("color 1f");}
	break;
}
case 3:{
	printf("\n\n\n\n\t\t\t\t\t\t\t\t======================Contatos================================\n");
	printf("\n\t\t\t\t\t\t\t\t\tGerente Geral.........................(35) 9829-7083\n");
    printf("\n\t\t\t\t\t\t\t\t\tGerente de Contas.....................(35) 9865-8931\n");
    printf("\n\t\t\t\t\t\t\t\t\tGerente Financeiro....................(35) 9884-7549\n");
    printf("\n\t\t\t\t\t\t\t\t\tCentral de atendimento................(35) 3441-7019\n");
    printf("\n\t\t\t\t\t\t\t\t==============================================================\n");
	getch();
    system("cls");
	break;
}
case 4:{
	printf("\n\n\n\n\n\n\n\n\t\t\t\t\t\t\t\tSaindo...\n");
	getch();
    system("cls");
	break;
}
    default :{
    system("color 74");
    printf ("\n\n\n\n\n\n\n\n\t\t\t\t\t\t\t\tValor invalido!\n");
    getch();
    system("cls");
	system("color 1f");}
}

								  }while (op!=4);

}
fclose(arq);
}

 

  • Curtir 1
  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Mayycon0707 para modificar um arquivo você precisa abri-lo usando o comando fread pois você gravou com o comando fwrite  são arquivo binário , se fosse  arquivo txt seria fprintf e fscanf  ,  então depois de abrir o arquivo você modifica o que está na variável usada para pegar os dados no arquivo , nesse caso aí embaixo a variável é uma struct ,

assim :

FILE* f;
	f = fopen("fornecedores.txt", "rb");
	while (fread(&fornecedores, sizeof(struct Fornecedor), 1, f)==1){
		printf("---------------------------------------------");
		quebra_linha();
		printf("Codigo de registro -: %s\n",fornecedores.cod  );
		printf("Cnpj ---------------: %s\n",fornecedores.cnpj );
		printf("Empresa ------------: %s\n",fornecedores.cia  );
		printf("---------------------------------------------");
		quebra_linha();
	}
	fclose(f);

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

tipo como eu modificaria um arquivo especifico ex: a pessoa quer adicionar na conta 500 reais ai esse valor teria que ser adicionado no seu cpf como adicionaria no cpf informado pelo usuário? 

  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Mayycon0707    para trabalhar com arquivos é difícil  gravar e ler ao mesmo tempo , então melhor ler tudo que está no arquivo e colocar na struct no início e depois no fim quando for sair gravar tudo no arquivo novamente ,  e os arquivos binários são complicados de usar então coloquei como txt , e seu código poderia ser assim  :

#include <stdio.h>
#include<stdlib.h>
#include <string.h>
#include <conio.h>
#include <locale.h>
#include <windows.h>
/*             0     1    2     3   4      5      6      7         8  */
typedef enum{BLACK,BLUE,GREEN,CYAN,RED,MAGENTA,BROWN,LIGHTGRAY,DARKGRAY,   /* nome das cores */
LIGHTBLUE,LIGHTGREEN,LIGHTCYAN,LIGHTRED,LIGHTMAGENTA,YELLOW,WHITE} COLORS;
/*  9         10         11        12        13         14    15 */

static int __BACKGROUND = 1/*BLACK*/;/*pode ser o numero ou o nome da cor*/
static int __FOREGROUND = LIGHTGRAY;

void textcolor (int letras, int fundo){/*para mudar a cor de fundo mude o background*/
    __FOREGROUND = letras;
    __BACKGROUND = fundo;
    SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),
    letras + (__BACKGROUND << 4));
}
                  /* y = linha de 0 a 24 , x = coluna de 0 a 80 */
void gotoxy(int x, int y){/*imprimir na linha e coluna desejada */
  COORD c;
  c.X = x;
  c.Y = y;
  SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c);
}
int som(int f){
    Beep(f,150);/* primeiro a frquência depois o tempo de duração do som */
    return 0;
}
void pausar(int r){
    int carac[8]={179,47,196,92,179,47,196,92};
    int j,w,x,y,x2;                              /* variáveis simples                       */
    HANDLE hOut;                              /* controle dos dispositivos do pc         */
    hOut= GetStdHandle(STD_OUTPUT_HANDLE);    /* pega a saída padrão                     */
    CONSOLE_SCREEN_BUFFER_INFO SBInfo;        /* informações sobre a buffer da tela      */
    GetConsoleScreenBufferInfo(hOut, &SBInfo);/* pega a posição do cursor do console     */
    x = SBInfo.dwCursorPosition.X;            /* X será a posição x do cursor no console */
    y = SBInfo.dwCursorPosition.Y;            /* Y será a posição y do cursor no console */
    for(j=0;j<10;j++){
        textcolor(12,15);
        gotoxy(x+3,y);
        printf(" %d",9-j);
        textcolor(10,0);
        for(w=0;w<8;w++){
            if(kbhit()){
                j=10;
                break;
            }
            gotoxy(x,y);
            printf("%c",carac[w]);/* gira o caractere na tela */
            Sleep(r/25);          /* dorme um tempinho        */
        }
    }
    gotoxy(x,y);
    textcolor(7,0);
    printf("      \n\n");
}

struct Cliente{
	int   cpf,senha;
	char  nome[50];
	float saldo;
};
struct Cliente cli[100];/* serão 100 até contas */
int cont;
int main(){
	setlocale(LC_ALL,"Portuguese");
	FILE *arq;
	struct Cliente cli[100];/* serão 100 até contas */
	system("color 1f");
	int consa,e=0,sd,op,j;
	float valor;
	arq=fopen("cliente.txt","r");
	if(arq==NULL){
        printf("\nEr01Erro ao tentar abrir arquivo");
	    arq = fopen("cliente.txt","w");
	    fclose(arq);
	}
    else{
        textcolor(14,0);
        printf("Lista com todos os clientes cadstrados !\n\n");
        while( fscanf(arq, "%d" , &cli[cont].cpf      )!= EOF  &&  /* aqui pega do arquivo e coloca na struct    */
               fscanf(arq, "%s" , &cli[cont].nome     )!= EOF  &&  /* seguindo nessa ordem  */
               fscanf(arq, "%d" , &cli[cont].senha    )!= EOF  &&  /* no arquivo precisa estar nessa mesma ordem */
               fscanf(arq, "%f" , &cli[cont].saldo    )!= EOF  ){
               printf("cpf ---: %d\n",cli[cont].cpf   );
               printf("nome --: %s\n",cli[cont].nome  );
               printf("senha -: %d\n",cli[cont].senha );
               printf("saldo -: %.2f\n\n",cli[cont].saldo);
               cont++;
        }
        fclose(arq);                                                /* fecha o arquivo */
        pausar(1200);
	  	do{
	  	    textcolor(7,0);
            system("cls");
	  		gotoxy(28, 4);printf("================MENU================");
            gotoxy(28, 5);printf("1-Criar conta");
	  		gotoxy(28, 6);printf("2-Consultar saldo");
	  		gotoxy(28, 7);printf("3-Entre em contato");
	  		gotoxy(28, 8);printf("4-fazer deposito");
	  		gotoxy(28, 9);printf("5-Listar contas");
	  		gotoxy(28,10);printf("6-Sair");
	  		gotoxy(28,11);printf("====================================\n");
	  		scanf("%d",&op);
	  		system("cls");
	  		switch(op){
	  		case 1:
                e=0;
	  			consa=0;
	  			gotoxy(28,1);printf("Informe seu cpf\n");
	  		    scanf("%d",&consa);
                system("cls");
                for(j=0;j<cont;j++){
                    if(consa==cli[j].cpf){
                        e=1;/* conta com esse cpf ja existe , nao pode outra */
                        break;
                    }
                }
	  		    if(e==0){
			        printf("\n\n\n\n=====================Cadastro================\n");
			        valor=0;
                    cli[cont].cpf=consa;
                    fflush(stdin);
                    printf("\nDigite o nome do cliente ");
                    gets(cli[cont].nome);
                    fflush(stdin);
                    printf("\nDigite o saldo que deseja adicionar a conta ");
                    scanf("%f",&cli[cont].saldo);
                    printf("\nDigite uma senha pra conta de numeros 0-9 ");
                    scanf("%d",&cli[cont].senha);
                    cont++;
                    printf("\n=============================================\n\n\n");
                    system("cls");
                    system("color 74");
                    printf("\n\n\n\n\n\n\n\nConta criada!\n");
                    getch();
                    system("cls");
                    system("color 1f");
			    }
	  		    if(e==1){system("cls");
	  		        system("color 74");
	  		        printf("\n\n\n\n\n\n\n\nConta já existe ");
	  		        pausar(1200);
	  		        system("cls");
	  		        system("color 1f");
                }
                break;
	  		case 2 :
	  		    e=0;
			    printf("\nInforme seu cpf\n");
	  		    scanf("%d",&consa);
                for(j=0;j<cont;j++){
                    if(consa==cli[j].cpf){
                        e=1;
                        printf("\nInforme a Senha da conta\n");
                        scanf("%d",&sd);
                        system("cls");
                        if(sd==cli[j].senha){
                            printf("\n================Consulta===============\n");
                            printf("nome --: %s\n"   ,cli[j].nome );
                            printf("saldo -: %0.2f\n",cli[j].saldo);
                            printf("\n=======================================\n");
                            system("pause");
                            system("cls");
                        }
                        else{
                            system("color 74");
                            printf("\nsenha invalida\n");
                            getch();
                            system("cls");
                            system("color 1f");
                        }
                    }
                }
                if(e==0){
                    system("cls");
                    system("color 74");
                    printf("\n\n\n\n\n\n\n\n\n\nConta não encontrada\n");
                    getch();
                    system("cls");
                    system("color 1f");
                }
	            break;
            case 3 :
                printf("\n\n\n\n\t\t\t\t\t\t\t\t======================Contatos================================\n");
                printf("\n\t\t\t\t\t\t\t\t\tGerente Geral.........................(35) 9829-7083\n");
                printf("\n\t\t\t\t\t\t\t\t\tGerente de Contas.....................(35) 9865-8931\n");
                printf("\n\t\t\t\t\t\t\t\t\tGerente Financeiro....................(35) 9884-7549\n");
                printf("\n\t\t\t\t\t\t\t\t\tCentral de atendimento................(35) 3441-7019\n");
                printf("\n\t\t\t\t\t\t\t\t==============================================================\n");
                getch();
                system("cls");
                break;
            case 4 :
                printf("fazendo um deposito !\n");
                printf("O numero do seu cpf ");
                scanf("%d",&sd);
                for(j=0;j<cont;j++){
                    if(cli[j].cpf == sd){
                        printf("Quanto vai depositar ");
                        scanf("%d",&sd);
                        cli[j].saldo+=sd;
                    }
                }
                pausar(1200);
                break;
            case 5 :
                textcolor(14,0);
                printf("Listando todas as contas\n");
                for(j=0;j<cont;j++){
                    printf("Nome --: %s\n"  ,cli[j].nome );
                    printf("Cpf ---: %d\n"  ,cli[j].cpf  );
                    printf("Saldo -: %.2f\n",cli[j].saldo);
                    printf("Senha -: %d\n\n",cli[j].senha);
                }
                pausar(1200);
                textcolor(7,0);
                break;
            case 6 :
                printf("\n\n\n\n\n\n\n\nSaindo...    Tecle ");
                pausar(1200);
                system("cls");
	            break;
            default :
                system("color 74");
                printf ("\n\n\n\n\n\n\n\nValor invalido!\n");
                getch();
                system("cls");
                system("color 1f");
            }
        }while (op!=6);
    }
    arq=fopen("cliente.txt","w");
    for(j=0;j<cont;j++){
        fprintf(arq, "%d " , cli[j].cpf   );  /* grava no arquivo txt */
        fprintf(arq, "%s " , cli[j].nome  );  /* grava no arquivo txt */
        fprintf(arq, "%d " , cli[j].senha );  /* grava no arquivo txt */
        fprintf(arq, "%f " , cli[j].saldo );  /* grava no arquivo txt */
    }
    fclose(arq);
    return 0;
}

 

  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas ai você nao esta salvando os dados ?

porque apos q fecha o programa e volta n esta mais la a conta ou seja o valor depositado é temporario

 

 

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Mayycon0707     está salvando sim , você já testou ?  aqui testei e funciona bem , no codeblocks 16.01  ,   por que sim as variáveis são temporárias ,  mas elas duram enquanto o programa está rodando e antes de fechar o programa todas elas são gravadas no arquivo com o valor de cada uma lá no disco rígido  do seu pc na pasta onde você salvou o seu programa .

  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

é que seu programa esta "complexo" pra mim q ainda estou aprendendo, mas valeu pela ajuda me ajudou bastante.

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Mayycon0707 Se eu, coloco cada conta em um arquivo *.Conta. Assim, quando quero um conta, abro a leitura com uma chamada fopen; se a função não retorna o stream do arquivo é porque a conta não existe. Por exemplo:

/* É só um exemplo */
unsigned char	us_cpf[ 12 ]= {""};
		/*: Salvar o CPF da conta */

unsigned char	us_link[]= {"Banco\\Contas\\00000000000.Conta"}; 
		/*: String para estabelecer a ligação com a base de contas */

FILE *		pf_banco__conta;
		/*: guardar o ponteiro do stream de arquivo da base de contas */



puts( "Bem vindo! Digite o CPF da conta" );
/*: Instrução do procedimento a seguir */

gets( us_cpf );
/*: Pegar um string que é o cpf da conta */

sprintf( us_link, "Banco\\Contas\\%s.Conta", us_cpf );
/*: Criar a string que é o atalho para o arquivo *.conta, se existir */

pf_banco__conta= fopen( us_link, "rb" );
/*: Solicitar abertura do aquivo */

if( NULL == pf_banco__conta )
/*: Testar, para o CPF, se a conta existe e fechar se não. */
{	printf( "Titulo de n. %s inexistente", us_link );
 	exit(1);
}

 

  • Curtir 2

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

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

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

×