minha professora me passou esse programa e pediu pra arrumar os erros e colocar as linhas de comentario dque eu mudei..
por favor me ajudem
a unica coisa que eu sei e que qualquer coisa que eu pe;a para o programa fazer ele sai do laco, ele apenas adiciona os nomes e pode velos, porem logo que você pede para ele ler ele abandona o programa , por favr se pudem me ajudar irei ficar imensamente grata
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct funcionario
{
char nome[40];
int codigo;
double salario;
int e;
};
void gravar();
void ler();
void alterar();
void exclui_logic();
void exclui_fisic();
void main()
{
struct funcionario f;
FILE *fptr; //cria um ponteiro que aponta para um arquivo, o ponteiro e o ftpr
Pergunta
polly krika
minha professora me passou esse programa e pediu pra arrumar os erros e colocar as linhas de comentario dque eu mudei..
por favor me ajudem
a unica coisa que eu sei e que qualquer coisa que eu pe;a para o programa fazer ele sai do laco, ele apenas adiciona os nomes e pode velos, porem logo que você pede para ele ler ele abandona o programa , por favr se pudem me ajudar irei ficar imensamente grata
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct funcionario
{
char nome[40];
int codigo;
double salario;
int e;
};
void gravar();
void ler();
void alterar();
void exclui_logic();
void exclui_fisic();
void main()
{
struct funcionario f;
FILE *fptr; //cria um ponteiro que aponta para um arquivo, o ponteiro e o ftpr
char aux[40], op; // variavel
char resp; //variavel
printf("\n1 - Cadastrar"); //menu
printf("\n2 - Consultar");
printf("\n3 - Sair");
printf("\n4 - Alterar");
printf("\n5 - Exclusao Logica");
printf("\n6 - Exclusao Fisica");
printf("\n\nOpcao: ");
resp=getchar();
switch (resp)
{
case '1': gravar();
break;
case '2': ler();
break;
case '3': printf("\nsaindo");
break;
case '4': alterar();
break;
case '5': exclui_logic();
break;
case '6': exclui_fisic();
}
}
//---------------------------------------------------------------------------
void gravar() //funcao gravar
{
struct funcionario f; //variavel local
FILE *fptr;
char aux[40], op;
int resp;
if ((fptr = fopen("funcionario.txt", "rb+")) == NULL) // funcao que abre um arquivo, se o ponteiro for igual arquivo ele abre um arquivo
if ((fptr = fopen("funcionario.txt" , "wb")) == NULL) // senao ele cria um arquivo vazio
{
printf("\n Erro: ");
getchar();
exit(1);
}
do{ printf("\n Nome: ");
scanf("%s",f.nome);
/*Esse "%s" não existia.....*/
printf("\n Codigo: ");
gets(aux);
f.codigo = atoi(aux);
gets(aux);
f.codigo = atoi(aux);
/*Porque so funcionou assim eu não sei.......... mas eu so copiei as linhas a cima duas vezes.....*/
printf("\n Salario: ");
gets(aux);
f.salario = atof(aux);
f.e = 0;
fseek(fptr, 0, 2); //fseek, posiciona o ponterio no local marcado
fwrite(&f, sizeof(f), 1, fptr); //fwrite, escreve
printf("\n Cadastrar outro funcionario? (s/n)\n");
op = getchar();
}while((op == 's') || (op == 'S'));
fclose(fptr); //fechar arquivo
}
//------------------------------------------------------------------------------------------------
void ler() //ler
{
struct funcionario f;
FILE *fptr;
char aux[40], op;
int resp;
if ((fptr = fopen("funcionario.txt" , "rb")) == NULL)
{
printf("\n Erro: ");
getchar();
exit(1);
}
fseek(fptr, 0, 0);
while(fread(&f, sizeof (f), 1, fptr))
{ if (f.e == 0)
{
printf("\n Nome: %s", f.nome);
printf("\n Codigo: %d", f.codigo);
printf("\n Salario: %.2lf\n", f.salario);
}
}
fclose(fptr);
getchar();
}
}
//--------------------------------------------------------------------------------------------
void alterar() //alterar
{ FILE *fptr;
struct funcionario f;
char aux[40], nomeaux[40];
if ((fptr=fopen("funcionario.txt","rb+"))==NULL)
{ printf("\n ERRO!");
exit(1);
}
printf("\n Entre com o nome do Funcionario: ");
gets (nomeaux);
fseek(fptr,0,0);
while (fread(&f, sizeof(f),1,fptr))
{ if(strcmp(f.nome, nomeaux)==0)
if(f.e==0)
{ fseek(fptr, ftell(fptr) - sizeof (f), 0);
printf("\n Novo Salario");
gets(aux);
f.salario = atof(aux);
fwrite(&f, sizeof (f), 1, fptr);
fseek(fptr, 0, 2);
}
}
fclose(fptr);
getchar();
}
//-------------------------------------------------------------------------------------------
void exclui_logic() //exclusao logica
{ FILE *fptr;
struct funcionario f;
char aux[40], nomeaux[40];
if ((fptr=fopen("funcionario.txt","rb+"))==NULL)
{ printf("\n ERRO!");
getchar();
exit(1);
}
printf("\n Entre com o nome do Funcionario: ");
gets (nomeaux);
fseek(fptr,0,0);
while (fread(&f, sizeof (f), 1, fptr))
{ if(strcmp(f.nome, nomeaux)==0)
if(f.e==0)
{ fseek(fptr, ftell(fptr) - sizeof (f), 0);
f.e=1;
fwrite(&f, sizeof (f), 1, fptr);
fseek(fptr, 0, 2);
}
}
fclose(fptr);
getchar();
}
//-----------------------------------------------------------------------------------------
void exclui_fisic() //exclusao fisica
{
FILE *fptr, *fptrnovo, *fptrback;
struct funcionario f;
if ((fptr=fopen("funcionario.txt","rb"))==NULL)
{ printf("\n ERRO!");
exit(1);
}
if ((fptrnovo=fopen("funcionario.txt","wb"))==NULL)
{ printf("\n ERRO!");
exit(1);
}
if ((fptrback=fopen("funcionario.txt","rb+"))==NULL)
{ if((fptrback=fopen("funcionario.txt","wb"))==NULL)
{ printf("\n ERRO!");
exit(1);
}
}
while (fread(&f,sizeof(f),1,fptr))
{ if(f.e==0)
{ fwrite(&f,sizeof(f),1,fptrnovo);
}
else
{
fwrite(&f,sizeof(f),1,fptrback);
}
}
fclose(fptr);
/*fclose(fptrback);
fclose(fptrnovo);
remove("funcionario.txt");
remove("i");
remove("c:/hidalgo/bdhidalgo.bi");
getchar( );*/
}
:unsure:
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.