Jump to content
array

Ler e eliminar ficheiros em linguagem c

Recommended Posts

array

Boas alguém me pode ajudar.

realizei o seguinte codigo que permite gravar um ficheiro e ler, mas gostaria de completar realizando tipo uma base de dados para um video clube em que incidiria nos seguintes topicos.

- inserir o filme quanto colocado pela 1ªvez na loja.

-inserir a pessoa que alugou o mesmo com data de inicio de aluguer e data de entrega.

// Programa para guardar filmes.
// Menu iniciar que pergunta ao utilizador se deseja ler ou gravar


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

//definir nome do arquivo

#define arquivo  "c:\\Filmes\\filmes.txt"

// funções utilizadas

int	menu		   ();
void   ler			(FILE*);
int	gravar		 (FILE*);
int	escrever_dados (FILE*);

int main(void)
{
//reservar espaço na memoria;
FILE *file = (FILE*)malloc(sizeof(file));

int select = 0;

while (select==0)
{
	//Escolha das funções do menu;
	//Aqui a função menu retorna o dado selecionado e executa a respectiva função;
	//Vai executar enquanto o menu não retornar o valor 3;
	switch(select = menu())
	{
	case 1:
		ler(file);
		break;

	case 2:
		gravar(file);
		break;

	case 3:
		   return 0;
	default:
		break;

	}
}
return 0;
}
int menu()
{
printf("\n Digite uma das opcoes:\n   ler, gravar ou fim:");

char palavra [50];

//Espera pela palavra inserida pelo teclado e guarda a mesma na variavel "palavra"
scanf("%s",palavra);
//limpa o buffer do teclado;
fflush (stdin);
//converter todas as letras da variavel para maiusculas;
strupr(palavra);

//Ira aparecer entao a palavra digitada;
//Caso não seja a que se pretende ira retornar '0';
//Ira voltar ao menu para que o utilizador volte a inserir nova opção;
if		(!strcmp(palavra, "LER")	 ==1)  return 1;
else if   (!strcmp(palavra, "GRAVAR")  ==1)  return 2;
else if   (!strcmp(palavra, "FIM")	 ==1)  return 3;
else										 return 0;

}

void ler (FILE*file)
{
  system	("cls");
  printf	("\n\n");

  file	 = fopen (arquivo,"r");

  // Se o arquivo não abrir ira retornar 0, entao o negado(!) e para inverter e entrar na condição para mostrar a mensagem de erro.
  if (!file)
  {
   printf("\n\n Arquivo não encontrado!\n\n");
  }
  else
  {
   char c;

   //Verifica se o primeiro arquivo e igual a EOF(-1), o que indica o final do arquivo;
   if((c = getc (file))==EOF)
   {
	   printf("Arquivo esta vazio!");
   }

   //Faz a leitura do arquivo carater a carater e mostra no ecra ate ao fim;
   while((c = getc(file))!= EOF)
   {
	   printf("%c",c);
   }
  }
  //pausa
  getchar();
}

int gravar (FILE *file)
{
// "a": insere no fim; se não existir arquivo ele criara com "w";
if( (file = fopen(arquivo, "a") )||(file = fopen(arquivo,"w")))

{
	while(escrever_dados(file)){}
	return 0;
}
}

int escrever_dados(FILE *file)
{
char	   codigo[20];
char	   filme [20];
char	   genero[20];
char	   sair  [20];

printf	 ("\n\nCodigo:");
//limpa buffer do teclado;
fflush	  (stdin);
//captura a string;
gets		(codigo);
//copia a string para a variavel sair;
strcpy	  (sair, codigo);
//comparar valor da string com a palavra FIM, caso seja = sai e retorna o valor '0';
// caso sejam diferentes então continua;
if(!strcmp(strupr(sair),"FIM")) return 0;

printf	("Filme:");
fflush	(stdin);
gets	  (filme);
strcpy	(sair, filme);

if(!strcmp(strupr(sair),"FIM")) return 0;

printf	("Genero:");
fflush	(stdin);
gets	  (genero);
strcpy	(sair, genero);

if(!strcmp(strupr(sair),"FIM")) return 0;

fprintf	(file,"\nCodigo:%s",codigo);
fprintf	(file,"	Filme:%s",filme);
fprintf	(file,"		Genero:%s",genero);

return 1;


}

Edited by pmg
Tags code e GeSHi

Share this post


Link to post
Share on other sites
pmg

Nao queres pensar em usar uma base de dados a serio?

Se queres fazer tudo por ti (eu apoio esta decisao com motivos de aprendizagem), responde a esta pergunta: como gravas a informacao de um filme ter sido levado duas vezes pela mesma pessoa?

ou ter sido levado diversas vezes por pessoas diferentes?

Uma maneira usual de tratar com ficheiros em C, é, ao iniciar o program, ler o ficheiro completo para estruturas de dados apropriadas; alterar os dados em memoria de acordo com os requisitos do utilizador; e, ao finalizar o programa, escrever tudo para ficheiro (possivelmente com gestao de backups).

A minha sugestao é que penses na estrutura do(s) ficheiro(s) antes de escreveres codigo C.


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
array

Pois eu nao sou la muito bom a C e tenho um trabalho para entregar que tem que envolver manipulação de ficheiros queria assim uma coisa tipo um jogo que guarda-se recordes uma coisa n muito complexa pois nao percebo muito de c

Share this post


Link to post
Share on other sites
xtrm0

Boas, se quiseres apenas os recordes de um jogo, então é só guardares para o ficheiro segundo uma forma lógica que tu definas, e depois criares uma funcao que abra o ficheiro e carregue os recordes para um array ou outra estrutura de dados que seja pratica de usar em C, por exemplo podes criar um ficheiro que siga a seguinte regra:

"recorde1\n

nomedojogador1\n

recorde2\n

nomedojogador2\n

(...)"

Carregar os dados nao sera muito dificil. Basta no teu while primeiro leres uma cadeia de caracteres ate encontrares um \n e depois transformares-lo para int/double e de seguida leres uma cadeia de caracteres ate encontrares um \n e guardares os valores numa array. Podes posterioremente ordená-los por ordem de pontuacao.

Escrever para o ficheiro e basicamente a mesma coisa. Percorres a array, e escreves cada valor conforme aparece nesta, sempre separada por um \n

Se quiseres criar a tal base de dados, podes seguir o mesmo principio, com uma pequena alteracao, salientada pelo pmg:

Se queres fazer tudo por ti (eu apoio esta decisao com motivos de aprendizagem), responde a esta pergunta: como gravas a informacao de um filme ter sido levado duas vezes pela mesma pessoa?

ou ter sido levado diversas vezes por pessoas diferentes?


<Signature goes here>

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.