Recording in C information file

Asked

Viewed 78 times

0

So, guys, I’m doing a job that consists essentially of recording information relating to films and series in two files (one for each one).

In the code section films. c i have all the functions used to manipulate the information relating to the movies (which is a vector that is allocated and reallocated dynamically), having the functions of ADD, REMOVE and MODIFY movies (the same exists in the section series. c for the same transactions for the series).

Follows the code of films. c down below:

 void adicionarFilme(Filmes *filmes, int *posF, int *nFilmes)
 {
      *nFilmes = *nFilmes + 1;

       filmes = (Filmes *) realloc(filmes, *nFilmes * sizeof(Filmes));

       if(!filmes)
       {
          exit(1);
       }

       printf("\n\n\tNome: ");
       scanf(" %[^\n]s", filmes[*posF].nome);
       printf("\n\n\tDiretor: ");
       scanf(" %[^\n]s", filmes[*posF].diretor);
       printf("\n\n\tElenco: ");
       scanf(" %[^\n]s", filmes[*posF].elenco);
       printf("\n\n\tAno: ");
       scanf("%d", &filmes[*posF].ano);
       printf("\n\n\tGenero: ");
       scanf(" %[^\n]s", filmes[*posF].genero);

       *posF = *posF + 1; //incrementa posição do vetor
 }

 void modificarFilme(Filmes *filmes, int *nFilmes)
 {
      char nomeMod[50];
      int i, j, k;
      int tamString;
      int op;
      int segue = 1;

      printf("\n\n\t Insira o nome do filme a ser modificado: ");
      scanf(" %[^\n]s", nomeMod);

      tamString = strlen(nomeMod);

      for(i = 0; i < *nFilmes; i++)
      {
          k = 0;
          for(j = 0; j < tamString; j++)
          {
              if(filmes[i].nome[j] != nomeMod[k])
              {
                  segue = -1;
                  printf("\n\n\tFILME NAO ENCONTRADO!\n\n");
                  return;
              }
              k++;
          }
          if(segue == 1)
          {
              printf("\n\t1 - Modificar nome\n\t2 - Modificar diretor\n\t3 - Modificar elenco\n\t4 - Modificar ano\n\t5 - Modificar genero\n\n\t");
              scanf("%d", &op);

              switch(op)
              {
                  case 1: printf("\n\tInforme o novo nome: \n\n\t");
                          scanf(" %[^\n]s", filmes[i].nome);
                          break;
                  case 2: printf("\n\tInforme o novo diretor: \n\n\t");
                          scanf(" %[^\n]s", filmes[i].diretor);
                          break;
                  case 3: printf("\n\tInforme o novo elenco: \n\n\t");
                          scanf(" %[^\n]s", filmes[i].elenco);
                          break;
                  case 4: printf("\n\tInforme o novo ano: \n\n\t");
                          scanf(" %d", &filmes[i].ano);
                          break;
                  case 5: printf("\n\tInforme o novo genero: \n\n\t");
                          scanf(" %[^\n]s", filmes[i].genero);
                          break;                
            }
            return;
         } 
     }
 }

 void removerFilme(Filmes *filmes, int *nFilmes)
 {
     char nomeDel[50];
     int i, j, k;
     int tamString;
     int op;
     int segue = 1;
     Filmes aux;

     printf("\n\n\t Insira o nome do filme a ser removido do catalogo: ");
     scanf(" %[^\n]s", nomeDel);

     tamString = strlen(nomeDel);

     for(i = 0; i < *nFilmes; i++)
     {
         k = 0;
         for(j = 0; j < tamString; j++)
         {
             if(filmes[i].nome[j] != nomeDel[k])
             {
                segue = -1;
                printf("\n\n\tFILME NAO ENCONTRADO!\n\n");
                return;
             }
             k++;
         }      
         if(segue == 1)
         {
             filmes[i].ano = -1; //para verificar. Se ano for -1, filme será removido

             for(j = 0; j < *nFilmes; j++)
             {
                 if(filmes[j].ano == -1)
                 {
                    aux = filmes[j];
                    filmes[j] = filmes[j+1];
                    filmes[j+1] = aux;
                 }
             }
         }
      }

      *nFilmes = *nFilmes - 1; //decrementa numero de filmes

      if(*nFilmes == 0)
      {
         return;
      }

      filmes = (Filmes *) realloc(filmes, *nFilmes * sizeof(Filmes));

      if(!filmes)
      {
         exit(1);
      }
 }

 void imprimeFilmes(Filmes *filmes, int *nFilmes)
 {
     int i;
     int x = 1;

     printf("\n\tFILMES\n");
     for(i = 0; i < *nFilmes ; i++)
     {
         printf("\n\tNOME:\t%s", filmes[i].nome);
         printf("\n\tDIRETOR:\t%s", filmes[i].diretor);
         printf("\n\tELENCO:\t%s", filmes[i].elenco);
         printf("\n\tANO:\t%d", filmes[i].ano);
         printf("\n\tGENERO:\t%s", filmes[i].genero);

         printf("\n\n");
         x++;
     }
 }

 void managementFilmes(int codigo, Filmes *filmes, int *posF, int *nFilmes)
 {
     if(codigo == 1)
     {
         adicionarFilme(filmes, posF, nFilmes);
     }
     if(codigo == 2)
     { 
         removerFilme(filmes, nFilmes);
     }
     if(codigo == 3)
     {
         modificarFilme(filmes, nFilmes);
     }
     if(codigo == 4)
     {
         imprimeFilmes(filmes, nFilmes);
     } 
     if(codigo == 0)
     {
         exit(1);
     }
}

The code for series. c is basically the same, so I guess there’s no need to link.

> Well what I would like a help from you is the following:

- I need all the movies that are inserted to be recorded in a file (preferably .txt), one below the other (as a short list). - Each time the program runs I need the movies that will be added to be added right after the last copy of the list.

I imagine that the solution of this problem is not la very complicated, but I’m really kind of at a loss as to how to do this.

A help with the code itself to manipulate the file information would be immensely appreciated.

Finally, for reference purposes, follow the main program code (main. c).

int main()
{
Filmes *filmes;
Series *series;

int posF = 0;
int posS = 0;

int numeroFilmes = 0;
int numeroSeries = 0;

int isFirstTimeF = 0;
int isFirstTimeS = 0;
char codA;
int codB;

do{
    /**********************************
        Código A:

        F - Filmes
        S - Series
        X - Encerra
    ***********************************/
    printf("\n\tCOMANDOS: ");
    printf("\n\n\tF - Filmes\n\n\tS - Series\n\n\tX - Encerra\n\n\t");
    scanf("%c", &codA);

    if(codA == 'F' || codA == 'f')
    {
        /**********************************
            Código B:

            1 - Adicionar filme
            2 - Remover filme
            3 - Modificar informações de um filme
            4 - Imprime registro de filmes
            0 - Sair
        ***********************************/
        printf("\n\tCOMANDOS: ");
        printf("\n\n\t1 - Adicionar filme\n\n\t2 - Remover filme\n\n\t3 - Modificar informacoes de um filme\n\n\t4 - Imprime registro de filmes\n\n\t0 - Sair\n\n\t");
        scanf("%d", &codB);


        if(codB == 1 && isFirstTimeF == 0)
        {
            filmes = (Filmes *) malloc(sizeof(Filmes));
            isFirstTimeF = 1;
        }

        managementFilmes(codB, filmes, &posF, &numeroFilmes);
    }


    if(codA == 'S' || codA == 's')
    {
        /**********************************
            Código B:

            1 - Adicionar série
            2 - Remover série
            3 - Modificar informações de uma série
            4 - Imprime registro de séries
            0 - Sair
        ***********************************/
        printf("\n\tCOMANDOS: ");
        printf("\n\n\t1 - Adicionar serie\n\n\t2 - Remover serie\n\n\t3 - Modificar informacoes de uma serie\n\n\t4 - Imprime registro de series\n\n\t0 - Sair\n\n\t");
        scanf("%d", &codB);


        if(codB == 1 && isFirstTimeS == 0)
        {
            series = (Series *) malloc(sizeof(Series));
            isFirstTimeS = 1;
        }

        managementSeries(codB, series, &posS, &numeroSeries);
    }

}while(codA != 'X');

free(filmes);
free(series);

return 0;
} 

---------------------------------------------------------------------------------------------------------------------------------- I appreciate any help beforehand!

Edit: Definition of film and series structures:

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

    //Estruturas principais

    typedef struct filmes
    {
        char nome[50];
        char diretor[30];
        char elenco[80];
        int ano;
        char genero[20];

    }Filmes;

    typedef struct series
    {
        char nome[50];
        char criador[30];
        char elenco[80];
        int ano;
        int numeroTemporadas;
        char genero[20];

    }Series;

    //Cabeçalho das funções de funções.h

    //FILMES
    void adicionarFilme(Filmes *filmes, int *posF, int *nFilmes, FILE *arq);
    void modificarFilme(Filmes *filmes, int *nFilmes);
    void removerFilme(Filmes *filmes, int *nFilmes);
    void imprimeFilmes(Filmes *filmes, int *nFilmes);
    void managementFilmes(int codigo, Filmes *filmes, int *posF, int *nFilmes, FILE *arq);

    //SÉRIES
    void adicionarSerie(Series *series, int *posS, int *nSeries);
    void modificarSerie(Series *series, int *nSeries);
    void removerSerie(Series *series, int *nSeries);
    void imprimeSeries(Series *series, int *nSeries);
    void managementSeries(int codigo, Series *series, int *posS, int *nSeries);
  • Where is the definition of Movies and Series?

  • Filmes is an array of struct Filme? And Filmes is a typedef of which struct? Edit the question puts the definition of Filmes and Series.

  • Edited with the settings!

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.