Ir ao conteúdo
  • Cadastre-se

tvk0101

Membro Júnior
  • Posts

    1
  • Cadastrado em

  • Última visita

Reputação

0
  1. Boa noite, estou com duvida quanto a busca binaria e recuperação por backup. Alguém poderia me ajudar na implementação do código? Meu código é esse abaixo... #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <string.h> #include<locale.h> #include<windows.h> struct funcionario{ char nome[30]; int codigo; float salario; int e; }; int main(void){ setlocale(LC_ALL,""); struct funcionario f,fi,fj; FILE *fptr,*fpraux,*fprback; int i,j,n,low,high,mid; char nomeaux[30],op,opcao; do{ system("cls"); printf("1=[Cadastro]\n"); printf("2=[Consulta]\n"); printf("3=[Alteração]\n"); printf("4=[Exclusão Lógica]\n"); printf("5=[Exclusão Física]\n"); printf("6=[Ordenação]\n"); printf("7=[Busca Binária]\n"); printf("8=[Recuperar Backup]\n"); printf("9=[Sair]\n"); op=getche(); switch(op){ case'1':if((fptr=fopen("funciona.bi","rb+"))==NULL) { if((fptr=fopen("funciona.bi","wb"))==NULL) { printf("\n erro"); exit(1); } } system("cls"); printf(" Entre Com o Nome : "); fflush(stdin); fgets(f.nome,40,stdin); fflush(stdin); printf(" Codigo: "); scanf("%d",&f.codigo); printf(" Salario: "); scanf("%f",&f.salario); f.e=0; fseek(fptr,0,2); fwrite(&f,sizeof(f),1,fptr); fclose(fptr); break;/*Cadastro*/ case '2':if((fptr=fopen("funciona.bi","rb"))==NULL) { printf("\n erro"); getch(); exit(1); } system("cls"); fseek(fptr,0,0); while(fread(&f,sizeof(f),1,fptr)) { if(f.e==0){ printf("\n---------------------------"); printf("\n Nome: %s",f.nome); printf("\n Código: %.2d",f.codigo); printf("\n Salário: %.2f",f.salario); } } getch(); fflush(stdin); fclose(fptr); break;/*Consulta*/ case '3':if((fptr=fopen("funciona.bi","rb+"))==NULL) { printf("\n erro"); exit(1); } printf("\nEntre com o nome do funcionario para alocar salario: "); fflush(stdin); fgets(nomeaux,40,stdin); fflush(stdin); fseek(fptr,0,0); while(fread(&f,sizeof(f),1,fptr)){ if(strcmp(f.nome,nomeaux)==0) if(f.e==0){ printf("entre com o novo salario"); scanf("%f",&f.salario); fseek(fptr,ftell(fptr)-sizeof(f),0); fwrite(&f,sizeof(f),1,fptr); fseek(fptr,0,2); } } fclose(fptr); break; case '4':if((fptr=fopen("funciona.bi","rb+"))==NULL) { printf("\n erro"); exit(1); } printf("\nEntre com o nome do funcionário para excluir logicamente: "); fflush(stdin); fgets(nomeaux,40,stdin); fflush(stdin); fseek(fptr,0,0); while(fread(&f,sizeof(f),1,fptr)){ if(strcmp(f.nome,nomeaux)==0) if(f.e==0){ f.e=1; fseek(fptr,ftell(fptr)-sizeof(f),0); fwrite(&f,sizeof(f),1,fptr); fseek(fptr,0,2); } } fclose(fptr); break; case '5': if((fptr=fopen("funciona.bi","rb+"))==NULL){ printf("\n erro"); exit(1); } if((fpraux=fopen("auxili.bi","wb"))==NULL){ printf("\n erro"); exit(1); } if((fprback=fopen("back.bi","rb+"))==NULL){ if((fprback=fopen("back.bi","wb"))==NULL){ printf("\n erro"); exit(1); } } while(fread(&f,sizeof(f),1,fptr)){ if(f.e==0){ fseek(fpraux,0,2); fwrite(&f,sizeof(f),1,fpraux); } else{fseek(fprback,0,2); fwrite(&f,sizeof(f),1,fprback); } } fclose(fptr); fclose(fpraux); fclose(fprback); remove("funciona.bi"); rename("auxili.bi", "funciona.bi"); break; case '6': if((fptr=fopen("funciona.bi","rb+"))==NULL){ printf("\n erro"); exit(1); } fseek(fptr,0,2); n=ftell(fptr)/sizeof(f); for(i=0 ; i<n-1; i++) for(j=0; j<n; j++){ fseek(fptr, i*sizeof(f),0); fread(&fi,sizeof(f),1,fptr); fseek(fptr,j*sizeof(f),0); fread(&fj,sizeof(f),1,fptr); if(strcmp(fi.nome, fj.nome) > 0){ fseek(fptr, i*sizeof(f),0); fwrite(&fj,sizeof(f),1,fptr); fseek(fptr,j*sizeof(f),0); fwrite(&fj,sizeof(f),1,fptr); } } fclose(fptr); break; case '7': //busca binaria if((fptr=fopen("funciona.bi","rb+"))==NULL){ printf("\n erro"); exit(1); } int x,e,pos, binario, elem; printf("\nEntre com o nome do funcionario: "); fflush(stdin); fgets(nomeaux,40,stdin); fflush(stdin); fseek(fptr,0,0); while(fread(&f, sizeof(f),1,fptr)){ if(strcmp(f.nome,nomeaux)== 0) if(f.e==0){ low= 0; high= n-1; while(low <= high){ mid = (low + high)/2; if (nomeaux[mid] > elem){ high= mid - 1; }else if (nomeaux[mid] < elem){ low= mid + 1; }else{ return mid; } } return -1; } while(fread(&f, sizeof(f),1,fptr)){ if(strcmp(f.nome,nomeaux)== 0) if(f.e==0){ printf("\n---------------------------"); printf("\n Nome: %s",f.nome); printf("\n Código: %.2d",f.codigo); printf("\n Salário: %.2f",f.salario); } } } getch(); fflush(stdin); fclose(fptr); break; case '8': //recuperação backup if((fprback=fopen("back.bi","rb"))==NULL){ printf("\n erro"); exit(1); } system("cls"); fseek(fprback,0,2); while(fread(&f,sizeof(f),1,fprback)){ if(f.e==0){ printf("\n---------------------------"); printf("\n Nome: %s",f.nome); printf("\n Código: %.2d",f.codigo); printf("\n Salário: %.2f",f.salario); } } getch(); fflush(stdin); fclose(fprback); break; defaut: printf("\nOpção %c Invalida",op); break; } }while(op!='9');/*Sair*/ system("cls"); printf("Saindo."); Sleep(400); system("cls"); }

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