Ir para conteúdo
Fórum Script Brasil
  • 0

Por Favor Me Ajudem A Arrumar, Iniciante Na Area


polly krika

Pergunta

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

  • 0

Assim fica dificil de entender esse codigo.

Codigo sem identação é muito ilegivel.

Coloca isso aqui entre as tags

 que fica melhor.
Link para o comentário
Compartilhar em outros sites

  • 0

OLHE O que A FUNCAO stdin (); faz, num to com tempo de explicar, mas resolvi seu problema, seu codigo ta pegando!!!!!

#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();

int 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
while (resp!=3) // continuidade de programa
{
    printf("\n1 - Cadastrar"); //menu
    printf("\n2 - Consultar");
    printf("\n3 - Sair");
    printf("\n4 - Alterar");
    printf("\n5 - Exclusao Logica");
    printf("\n6 - Exclusao Fisica");
    printf("\n\nOpcao: ");
    fflush (stdin); // semrpe use essa funcaod antes de ler algo
    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();

     }
     system("cls"); //só funciona no windows
}
}

//---------------------------------------------------------------------------
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: ");
fflush (stdin); // semrpe use essa funcaod antes de ler algo
scanf("%s",f.nome);
/*Esse "%s" não existia.....*/
printf("\n Codigo: ");
fflush (stdin); // semrpe use essa funcaod antes de ler algo
gets(aux);
f.codigo = atoi(aux);
fflush (stdin); // semrpe use essa funcaod antes de ler algo
printf("\n Salario: ");
fflush (stdin); // semrpe use essa funcaod antes de ler algo
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");
fflush (stdin); // semrpe use essa funcaod antes de ler algo
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);
fflush (stdin); // semrpe use essa funcaod antes de ler algo
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: ");
fflush (stdin); // semrpe use essa funcaod antes de ler algo
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");
fflush (stdin); // semrpe use essa funcaod antes de ler algo
gets(aux);
f.salario = atof(aux);
fwrite(&f, sizeof (f), 1, fptr);
fseek(fptr, 0, 2);
}
}
fclose(fptr);
fflush (stdin); // semrpe use essa funcaod antes de ler algo
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: ");
fflush(stdin);
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( );*/
}

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...