array Posted June 17, 2013 at 06:40 PM Report #513460 Posted June 17, 2013 at 06:40 PM (edited) 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 June 17, 2013 at 06:46 PM by pmg Tags code e GeSHi
pmg Posted June 17, 2013 at 06:57 PM Report #513463 Posted June 17, 2013 at 06:57 PM 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!
array Posted June 17, 2013 at 07:01 PM Author Report #513466 Posted June 17, 2013 at 07:01 PM 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
Guest Posted June 19, 2013 at 02:36 PM Report #513817 Posted June 19, 2013 at 02:36 PM Usa uma linked list para guardares as informações dos files.
xtrm0 Posted June 19, 2013 at 09:29 PM Report #513934 Posted June 19, 2013 at 09:29 PM 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>
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