Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Kairo Gabriel

Emplementar duas dunçoes aki

Recommended Posts

BOM DIA CAROS AMIGOS ENTÃO TO COM UM PROBLEMA AKI ESTÃO TENTANDO IMPLEMENTAR DUAS FUNÇÕES AKI MAIS NAO TO CONSEGUINDO ALGUÉM PODERIA ME DAR UMA DICA

 

 

SERIAM AS FUNÇÕES DE PESQUISA POR NOME E DE APAGA REGISTRO

 

 

MUITO OBRIGADO A TODOS !!!!!

 

 


#include <stdio.h>
#include <stdlib.h>

FILE *arquivo;
char *nomearq="Dados.dat";

struct pessoa{
char nome[40];
char peso[20];
char cidade[80];
int idade;
};

int Escolhe() {
int opcao;

do {
printf ("\nDADOS\n\n");
printf ("1 - Mostrar um registro\n");
printf ("2 - Mostrar todos os registros\n"); 
printf ("3 - Incluir um registro\n");
printf ("4 - Apagar o ultimo registro\n");
 printf ("5 - Pesquisa nome\n");             
printf ("6 - Apagar um registro qualquer\n");
printf ("0 - Sair\n\n");
printf ("Opcao:");
scanf("%d",&opcao);
} while(opcao<0||opcao>6);
return opcao;
}

void MostraRegistro() {
int reg;
struct pessoa umapessoa;

printf ("Digite o numero do registro: ");
scanf ("%d", ®);

// posiciona o arquivo no registro desejado
fseek(arquivo,reg*sizeof(struct pessoa),SEEK_SET);

// le o registro
fread(&umapessoa, sizeof(struct pessoa), 1, arquivo);

// se o registro realmente existe, ao executar uma leitura
// no arquivo, o indicador de fim de arquivo nao devera
// estar setado. Se nao existir, teremos EOF
if (feof(arquivo)) {
printf("Registro nao existente!\n");
return;
}

// mostra dados
printf ("Nome: %s\n",umapessoa.nome);
printf ("Peso: %s\n",umapessoa.peso);
printf ("Cidade: %s\n",umapessoa.cidade);
printf ("Idade: %d\n\n",umapessoa.idade);
}

void MostraTodos() {
int reg;
struct pessoa umapessoa;

// posiciona o arquivo no inicio
fseek(arquivo,0,SEEK_SET);

reg=0;
do {
// le registro
fread(&umapessoa, sizeof(struct pessoa), 1, arquivo);

// se chegou ao fim, para
if (feof(arquivo)) break;

// mostra dados
printf ("\nRegistro numero: %d\n",reg);
printf ("Nome: %s\n",umapessoa.nome);
printf ("Peso: %s\n",umapessoa.peso);
printf ("Cidade: %s\n",umapessoa.cidade);
printf ("Idade: %d\n\n",umapessoa.idade);
printf ("--------------------------------\n");

reg++;
} while(!feof(arquivo)); // repete enquanto nao chegar ao fim
}

void IncluiRegistro() {
char lixo[255];
struct pessoa umapessoa;

// limpa o buffer do teclado -> veja programa editor.c
gets(lixo);

// posiciona o arquivo no final
fseek(arquivo,0,SEEK_END);

// coloca os dados da pessoa no registro umapessoa
printf ("\nDigite os dados da pessoa nos campos abaixo:\n");
printf ("Nome:");
gets(umapessoa.nome);
printf ("Peso:");
gets(umapessoa.peso);
printf ("Cidade:");
gets(umapessoa.cidade);
printf ("Idade:");
scanf("%d",&umapessoa.idade); // note que idade e um inteiro!

// grava o registro no final do arquivo
fwrite(&umapessoa, sizeof(struct pessoa), 1, arquivo);

printf ("Registro gravado!\n");
}

// a funcao ApagaUlt copia o arquivo agenda.dat para um arquivo
// temporario. Depois, copia todos os registros menos o ultimo
// do arquivo temporario para o arquivo agenda.dat

void ApagaUlt() {
FILE *temporario;
int nregs,reg;
struct pessoa umapessoa;

temporario=fopen("_temp.xxx","ab+");

// posiciona o arquivo no inicio
fseek(arquivo,0,SEEK_SET);

nregs=0;
do{
// le de dados.dat
fread(&umapessoa, sizeof(struct pessoa), 1, arquivo);
// salva no temporario
fwrite(&umapessoa, sizeof(struct pessoa), 1, temporario);
nregs++;
} while(!feof(arquivo));

fclose(temporario);


// apago o arquivo dados.dat, fechando o arquivo e chamando
// a funcao remove
fclose(arquivo);
remove(nomearq);
arquivo=fopen(nomearq,"ab+");
// grava todos os registros, menos o último
temporario=fopen("_temp.xxx","rb");
for (reg=0;reg<nregs-2;reg++) {
fread(&umapessoa, sizeof(struct pessoa), 1, temporario); 
fwrite(&umapessoa, sizeof(struct pessoa), 1, arquivo); 
}

fclose(temporario);

// deleta o arquivo temporario
remove("_temp.xxx");
} 

void Pesquisanome() {
printf ("\nImplemente esta funcao!\n");
} 


void ApagaRegistro() {
printf ("\nImplemente esta funcao!\n");
}

main () {
int opcao;

arquivo = fopen(nomearq,"ab+");

do {
opcao = Escolhe();
if (opcao == 1) MostraRegistro();
if (opcao == 2) MostraTodos();
if (opcao == 3) IncluiRegistro();
if (opcao == 4) ApagaUlt();
if (opcao == 5) Pesquisanome();
if (opcao == 6) ApagaRegistro();
} while (opcao!=0);

printf ("Ate logo!\n");
}


Compartilhar este post


Link para o post
Compartilhar em outros sites

Kairo Gabriel,

 

Você praticamente já tem as duas funções implementadas.

 

A função de pesquisa, já esta parcialmente implementada no método MostraRegistro. Só precisa mudar o retorno do dado, ao invés de imprimir o registro no console, retorne um poteiro de estrutura do que foi encontrado.

 

A lógica da função de apagar um registro, pode ser semelhante com o método ApagaUlt. Onde ao invés de você copiar todo o conteúdo do arquivo, procure pelo registro que será apagado. Copie para o arquivo temporário apartir do ponto onde está este registro e regrave no arquivo principal os dados sem o registro que será pagado.

 

OBS.: Preze pelo bom uso do português em seus posts. "AKI" e "Emplementar", são palavras que não existem em nossa língua.

 

Espero ter ajudado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.