bushin Posted November 13, 2007 at 03:29 PM Report Share #147115 Posted November 13, 2007 at 03:29 PM Não esta a funcionar ... e nao encontro o problema!! void limpar_fichas(void) /* Função que, através da pesquisa sequencial do nome, limpa uma ficha do ficheiro. Para isso, vai passando cada uma das fichas para um novo ficheiro, até à altura em que encontra o nome procurado. Nessa altura, apenas gravará essa ficha no novo ficheiro, se o utilizador não confirmar o apagar da ficha. No final, apaga o analise.dat e troca os nomes dos ficheiros de forma a que o novo ficheiro fique novamente com o nome de analise.dat. */ { char opcao2; int encontrou=0; char nome_proc[40]; FILE *pf,*fich_aux; EMPRESA aux; go2xy(3,27);printf("APAGA FICHA ");SetColor(WHITE); //titulo go2xy(10, 2); printf(" NOME A PROCURAR: ");gets(nome_proc); fflush(stdin); pf=fopen("analise.dat","rb"); if(!pf) { printf("Erro na abertura do ficheiro %s ! \n\n","pessoas.dat"); exit(1); } fich_aux=fopen("analise_1.dat","wb"); if(!fich_aux) { printf("Erro na abertura do ficheiro %s ! \n\n","analise_1.dat"); exit(1); } while (fread(&aux,sizeof(EMPRESA),1,pf)!=0) { if (strcmp(aux.nome_empresa,nome_proc)==0) { encontrou=1; printf(" Encontrou a ficha procurada !\n\n"); apresenta_dados(aux); printf("\n Tem a certeza que quer apagar esta ficha (S/N) ? "); opcao2=getch(); if ((opcao2=='N')||(opcao2=='n')) fwrite(&aux,sizeof(EMPRESA),1,fich_aux); else { printf("\n\n\n => A FICHA FOI APAGADA ! "); --numero_est; // O número de registos usado é decrementado de um } } else fwrite(&aux,sizeof(EMPRESA),1,fich_aux); } if (!encontrou) printf(" Nao encontrou a ficha procurada !\n\n"); printf("\n\n Carregue numa tecla para continuar ... "); getch(); fclose(pf); fclose(fich_aux); remove("analise.dat"); // Apaga o ficheiro "analise.dat" e … rename("analise.dat","analise_1.dat"); // troca o nome de "analise_1.dat" por "analise.dat" printf("\n\n\t\tcarregue numa tecla para continuar ... \n\n"); getch(); system("cls"); menu_1(); } Link to comment Share on other sites More sharing options...
TheDark Posted November 13, 2007 at 05:54 PM Report Share #147150 Posted November 13, 2007 at 05:54 PM Exactamente o que é que não está a funcionar? Mostra aí a struct EMPRESA. Desaparecido. Link to comment Share on other sites More sharing options...
bushin Posted November 13, 2007 at 06:05 PM Author Report Share #147157 Posted November 13, 2007 at 06:05 PM Esta é a estrutura e a funçao para apresentar os dados... typedef struct struct_empresa{ char nome_empresa[40]; int estado; int nif; unsigned int processo; data registo; float liq_g; float liq_r; float liq_i; float autonomia_f; float endividamento; float divida_liq; float divida_rend; }EMPRESA; void apresenta_dados(EMPRESA proc_aux){ printf("\t------------------------------------------------------\n"); printf("\t %d =>NIF:%d Empresa: %s Data: %d /%d / %d \n",proc_aux.processo,proc_aux.nif,proc_aux.nome_empresa,proc_aux.registo.dia,proc_aux.registo.mes,proc_aux.registo.ano); printf("\t------------------------------------------------------\n\n\n"); printf("\t> Racios de Liquidez \n"); printf("\t\t%c Liquidez Geral %.1f\n",254,proc_aux.liq_g); printf("\t\t%c Liquidez Reduzida: %.1f\n",254,proc_aux.liq_r); printf("\t\t%c Liquidez Imediata: %.1f\n\n",254,proc_aux.liq_i); printf("\t> Autonomia Finaceira \n"); printf("\t\tAutonomia Finaceira: %.1f\n\n",proc_aux.autonomia_f); printf("\t> Estrutura de Endividamento \n"); printf("\t\tEndividamento: %.1f\n",proc_aux.endividamento); printf("\t\tDivida Liquida: %.1f\n",proc_aux.divida_liq); printf("\t\tDivida do Rendimento:%.1f\n\n",proc_aux.divida_rend); } Link to comment Share on other sites More sharing options...
TheDark Posted November 13, 2007 at 06:13 PM Report Share #147166 Posted November 13, 2007 at 06:13 PM Mesmo assim não disseste o que é que não funciona bem... Desaparecido. Link to comment Share on other sites More sharing options...
bushin Posted November 13, 2007 at 09:19 PM Author Report Share #147229 Posted November 13, 2007 at 09:19 PM o problema do programa é que ele copia a informação do ficheiro analise.dat para o novo ficheiro analise_1.dat menos a ficha que eu queria apagar, mas qdo eu faço uma consulta de uma outra ficha quaisquer nao aparece nada pois a função que utilizo para pesquisar esta a utilizar o ficheiro analise.dat; tioricamente deveria funcionar pois utilizo rename("analise.dat","analise_1.dat");. Link to comment Share on other sites More sharing options...
TheDark Posted November 14, 2007 at 01:26 AM Report Share #147266 Posted November 14, 2007 at 01:26 AM Tens os nomes dos ficheiros ao contrário. Tens que fazer rename("analise_1.dat","analise.dat");, que é como quem diz, rename(from, to); Desaparecido. Link to comment Share on other sites More sharing options...
bushin Posted November 14, 2007 at 10:25 AM Author Report Share #147285 Posted November 14, 2007 at 10:25 AM 😞 tks cumprimentos, Bushin Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now