Advertisement
Jvsierra

filmes cpp bin

Feb 27th, 2019
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.56 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include <conio.h>
  5.  
  6. #define LIM_TITULO 101
  7. #define LIM_CLASSIFICACAO 11
  8.  
  9. struct TpFilme
  10. {
  11.     int Ano, Duracao;
  12.     float Gasto, Renda, TaxaEspec;
  13.     char Titulo[LIM_TITULO], Classificacao[LIM_CLASSIFICACAO];
  14. };
  15.  
  16. void OrdenaProducao(char NomeArq[100])
  17. {
  18.     int a, b, NumR;
  19.     TpFilme RegA, RegB, Aux;
  20.    
  21.     FILE *PtrArq = fopen(NomeArq, "rb+");
  22.    
  23.     if(PtrArq != NULL)
  24.     {
  25.         fseek(PtrArq, 0, 2);
  26.         NumR = ftell(PtrArq) / sizeof(TpFilme);
  27.        
  28.         for(a = 0; a < NumR - 1; a++)
  29.         {
  30.             fseek(PtrArq, a * sizeof(TpFilme), 0);
  31.             fread(&RegA, sizeof(TpFilme), 1, PtrArq);
  32.            
  33.             for(b = a + 1; b < NumR; b++)
  34.             {
  35.                 fseek(PtrArq, b * sizeof(TpFilme), 0);
  36.                 fread(&RegB, sizeof(TpFilme), 1, PtrArq);
  37.                
  38.                 if(RegA.Ano > RegB.Ano)
  39.                 {
  40.                     fseek(PtrArq, a * sizeof(TpFilme), 0);
  41.                     fwrite(&RegB, sizeof(TpFilme), 1, PtrArq);
  42.                     fseek(PtrArq, b * sizeof(TpFilme), 0);
  43.                     fwrite(&RegA, sizeof(TpFilme), 1, PtrArq);
  44.                 }
  45.             }
  46.         }
  47.        
  48.         fclose(PtrArq);
  49.     }
  50. }
  51.  
  52. int AnoMaior(char NomeArq[100])
  53. {
  54.     int NumR, MaiorAno, Maior, Cont, a, b;
  55.     TpFilme RegA, RegB;
  56.     FILE *PtrArq = fopen(NomeArq, "rb+");
  57.    
  58.     if(PtrArq != NULL)
  59.     {
  60.         fseek(PtrArq, 0, 2);
  61.         NumR = ftell(PtrArq) / sizeof(TpFilme);
  62.        
  63.         Maior = 0;
  64.        
  65.         for(a = 0; a < NumR - 1; a++)
  66.         {
  67.             fseek(PtrArq, a * sizeof(TpFilme), 0);
  68.             fread(&RegA, sizeof(TpFilme), 1, PtrArq);
  69.            
  70.             Cont = 1;
  71.            
  72.             for(b = a + 1; b < NumR; b++)
  73.             {
  74.                 fseek(PtrArq, b * sizeof(TpFilme), 0);
  75.                 fread(&RegB, sizeof(TpFilme), 1, PtrArq);
  76.                
  77.                 if(RegB.Ano == RegA.Ano)
  78.                     Cont++;
  79.             }
  80.            
  81.             if(Cont > Maior)
  82.             {
  83.                 Maior = Cont;
  84.                 MaiorAno = RegA.Ano;
  85.             }
  86.         }
  87.     }
  88.     else
  89.         MaiorAno = -1;
  90.    
  91.     return MaiorAno;
  92. }
  93.  
  94. void OrganizaClassificacao(char NomeArq[100])
  95. {
  96.     int a, b, NumR;
  97.     TpFilme RegA, RegB, Aux;
  98.    
  99.     FILE *PtrArq = fopen(NomeArq, "rb+");
  100.    
  101.     if(PtrArq != NULL)
  102.     {
  103.         fseek(PtrArq, 0, 2);
  104.         NumR = ftell(PtrArq) / sizeof(TpFilme);
  105.        
  106.         for(a = 0; a < NumR - 1; a++)
  107.         {
  108.             fseek(PtrArq, a * sizeof(TpFilme), 0);
  109.             fread(&RegA, sizeof(TpFilme), 1, PtrArq);
  110.            
  111.             for(b = a + 1; b < NumR; b++)
  112.             {
  113.                 fseek(PtrArq, b * sizeof(TpFilme), 0);
  114.                 fread(&RegB, sizeof(TpFilme), 1, PtrArq);
  115.                
  116.                 if(strcmp(RegA.Classificacao, RegB.Classificacao) > 0)
  117.                 {
  118.                     fseek(PtrArq, a * sizeof(TpFilme), 0);
  119.                     fwrite(&RegB, sizeof(TpFilme), 1, PtrArq);
  120.                     fseek(PtrArq, b * sizeof(TpFilme), 0);
  121.                     fwrite(&RegA, sizeof(TpFilme), 1, PtrArq);
  122.                 }
  123.             }
  124.         }
  125.        
  126.         fclose(PtrArq);
  127.     }
  128. }
  129.  
  130. void OrdenaTaxaEspec(char NomeArq[100])
  131. {
  132.     int a, b, NumR;
  133.     TpFilme RegA, RegB, Aux;
  134.    
  135.     FILE *PtrArq = fopen(NomeArq, "rb+");
  136.    
  137.     if(PtrArq != NULL)
  138.     {
  139.         fseek(PtrArq, 0, 2);
  140.         NumR = ftell(PtrArq) / sizeof(TpFilme);
  141.        
  142.         for(a = 0; a < NumR - 1; a++)
  143.         {
  144.             fseek(PtrArq, a * sizeof(TpFilme), 0);
  145.             fread(&RegA, sizeof(TpFilme), 1, PtrArq);
  146.            
  147.             for(b = a + 1; b < NumR; b++)
  148.             {
  149.                 fseek(PtrArq, b * sizeof(TpFilme), 0);
  150.                 fread(&RegB, sizeof(TpFilme), 1, PtrArq);
  151.                
  152.                 if(RegA.TaxaEspec > RegB.TaxaEspec)
  153.                 {
  154.                     fseek(PtrArq, a * sizeof(TpFilme), 0);
  155.                     fwrite(&RegB, sizeof(TpFilme), 1, PtrArq);
  156.                     fseek(PtrArq, b * sizeof(TpFilme), 0);
  157.                     fwrite(&RegA, sizeof(TpFilme), 1, PtrArq);
  158.                 }
  159.             }
  160.         }
  161.        
  162.         fclose(PtrArq);
  163.     }
  164. }
  165.  
  166. void GeraRelatoriosFilmes(char NomeArq[100])
  167. {
  168.     TpFilme  Aux;
  169.     int TL, i, ContDuracao;
  170.     char NomeMaiorLucro[LIM_TITULO], NomeMaiorTaxa[LIM_TITULO];
  171.     float MaiorLucro, MaiorTaxa, DuracaoMedia, Mediana;
  172.     FILE *PtrTxt;
  173.    
  174.     system("cls");
  175.    
  176.     printf("Relatorio do arquivo de filmes\n\n");
  177.    
  178.     PtrTxt = fopen(NomeArq, "r");
  179.    
  180.     if(PtrTxt == NULL)
  181.         printf("Arquivo %s inexistente\n\n", NomeArq);
  182.     else
  183.     {
  184.         TL = 0;
  185.         MaiorLucro = 0;
  186.         MaiorTaxa = 0;
  187.         ContDuracao = 0;
  188.        
  189.         fscanf(PtrTxt, "%[^;];%d;%[^;];%f;%f;%d;%f\n", Aux.Titulo, &Aux.Ano, Aux.Classificacao,
  190.               &Aux.Gasto, &Aux.Renda, &Aux.Duracao, &Aux.TaxaEspec);
  191.              
  192.         FILE *PtrBin = fopen("Dados.dat", "ab");     
  193.              
  194.         while(!feof(PtrTxt))
  195.         {
  196.             if(Aux.Renda - Aux.Gasto > MaiorLucro)
  197.             {
  198.                 MaiorLucro = Aux.Renda - Aux.Gasto;
  199.                 strcpy(NomeMaiorLucro, Aux.Titulo);
  200.             }  
  201.            
  202.             if(Aux.TaxaEspec > MaiorTaxa)
  203.             {
  204.                 MaiorTaxa = Aux.TaxaEspec;
  205.                 strcpy(NomeMaiorTaxa, Aux.Titulo);
  206.             }
  207.            
  208.             ContDuracao += Aux.Duracao;
  209.             fwrite(&Aux, sizeof(TpFilme), 1, PtrBin);
  210.            
  211.             fscanf(PtrTxt, "%[^;];%d;%[^;];%f;%f;%d;%f\n", Aux.Titulo, &Aux.Ano, Aux.Classificacao,
  212.               &Aux.Gasto, &Aux.Renda, &Aux.Duracao, &Aux.TaxaEspec);
  213.         }
  214.        
  215.         fclose(PtrTxt);
  216.         fclose(PtrBin);
  217.        
  218.         if(TL == 0)
  219.             printf("Nenhum filme cadastrado\n\n");
  220.         else
  221.         {
  222.             printf("Filme com maior lucro: %s (%.3f milhoes)\n", NomeMaiorLucro, MaiorLucro);
  223.            
  224.             printf("Filme com a maior taxa de espectadores: %s - %.2f\n", NomeMaiorTaxa, MaiorTaxa);
  225.            
  226.             DuracaoMedia = ContDuracao / (float)TL;
  227.            
  228.             printf("Duracao media: %.2f minutos\n", DuracaoMedia);
  229.            
  230.             printf("Ano com o maior numero de filmes: %d\n", AnoMaior("Dados.dat"));
  231.            
  232.             OrganizaClassificacao("Dados.dat");
  233.            
  234.             FILE *PtrAux = fopen("OrdClassificacao.txt", "a");
  235.            
  236.             PtrBin = fopen("Dados.dat", "rb");
  237.            
  238.             fread(&Aux, sizeof(TpFilme), 1, PtrBin);
  239.            
  240.             while(!feof(PtrBin))
  241.             {  
  242.                 fprintf(PtrAux, "%s;%d;%s;%.3f;%.3f;%d;%.1f\n", Aux.Titulo, Aux.Ano,
  243.                         Aux.Classificacao, Aux.Gasto, Aux.Renda, Aux.Duracao, Aux.TaxaEspec);
  244.                        
  245.                 fread(&Aux, sizeof(TpFilme), 1, PtrBin);
  246.             }
  247.            
  248.             fclose(PtrAux);
  249.        
  250.             OrdenaProducao("Dados.dat");
  251.            
  252.             PtrAux = fopen("OrdAno.txt", "a");
  253.            
  254.             rewind(PtrBin);
  255.            
  256.             fread(&Aux, sizeof(TpFilme), 1, PtrBin);
  257.            
  258.             while(!feof(PtrBin))
  259.             {  
  260.                 fprintf(PtrAux, "%s;%d;%s;%.3f;%.3f;%d;%.1f\n", Aux.Titulo, Aux.Ano,
  261.                         Aux.Classificacao, Aux.Gasto, Aux.Renda, Aux.Duracao, Aux.TaxaEspec);
  262.                        
  263.                 fread(&Aux, sizeof(TpFilme), 1, PtrBin);
  264.             }
  265.            
  266.             fclose(PtrAux);
  267.            
  268.             OrdenaTaxaEspec("Dados.dat");
  269.            
  270.             PtrAux = fopen("OrdTaxaEspec.txt", "a");
  271.            
  272.             rewind(PtrBin);
  273.            
  274.             fread(&Aux, sizeof(TpFilme), 1, PtrBin);
  275.            
  276.             while(!feof(PtrBin))
  277.             {  
  278.                 fprintf(PtrAux, "%s;%d;%s;%.3f;%.3f;%d;%.1f\n", Aux.Titulo, Aux.Ano,
  279.                         Aux.Classificacao, Aux.Gasto, Aux.Renda, Aux.Duracao, Aux.TaxaEspec);
  280.                        
  281.                 fread(&Aux, sizeof(TpFilme), 1, PtrBin);
  282.             }
  283.            
  284.             fclose(PtrAux);
  285.            
  286.             OrdenaProducao("Dados.dat");
  287.            
  288.             if(TL % 2 != 0)
  289.             {
  290.                
  291.             }
  292.             else
  293.             {
  294.                
  295.             }
  296.                
  297.             printf("Mediana: %.1f anos\n", Mediana);
  298.         }
  299.     }
  300.    
  301.     getch();
  302. }
  303.  
  304. int main(void)
  305. {
  306.     GeraRelatoriosFilmes("Filmes.txt");
  307.    
  308.     return 0;
  309. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement