Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #include <conio.h>
- #define LIM_TITULO 101
- #define LIM_CLASSIFICACAO 11
- struct TpFilme
- {
- int Ano, Duracao;
- float Gasto, Renda, TaxaEspec;
- char Titulo[LIM_TITULO], Classificacao[LIM_CLASSIFICACAO];
- };
- void OrdenaProducao(char NomeArq[100])
- {
- int a, b, NumR;
- TpFilme RegA, RegB, Aux;
- FILE *PtrArq = fopen(NomeArq, "rb+");
- if(PtrArq != NULL)
- {
- fseek(PtrArq, 0, 2);
- NumR = ftell(PtrArq) / sizeof(TpFilme);
- for(a = 0; a < NumR - 1; a++)
- {
- fseek(PtrArq, a * sizeof(TpFilme), 0);
- fread(&RegA, sizeof(TpFilme), 1, PtrArq);
- for(b = a + 1; b < NumR; b++)
- {
- fseek(PtrArq, b * sizeof(TpFilme), 0);
- fread(&RegB, sizeof(TpFilme), 1, PtrArq);
- if(RegA.Ano > RegB.Ano)
- {
- fseek(PtrArq, a * sizeof(TpFilme), 0);
- fwrite(&RegB, sizeof(TpFilme), 1, PtrArq);
- fseek(PtrArq, b * sizeof(TpFilme), 0);
- fwrite(&RegA, sizeof(TpFilme), 1, PtrArq);
- }
- }
- }
- fclose(PtrArq);
- }
- }
- int AnoMaior(char NomeArq[100])
- {
- int NumR, MaiorAno, Maior, Cont, a, b;
- TpFilme RegA, RegB;
- FILE *PtrArq = fopen(NomeArq, "rb+");
- if(PtrArq != NULL)
- {
- fseek(PtrArq, 0, 2);
- NumR = ftell(PtrArq) / sizeof(TpFilme);
- Maior = 0;
- for(a = 0; a < NumR - 1; a++)
- {
- fseek(PtrArq, a * sizeof(TpFilme), 0);
- fread(&RegA, sizeof(TpFilme), 1, PtrArq);
- Cont = 1;
- for(b = a + 1; b < NumR; b++)
- {
- fseek(PtrArq, b * sizeof(TpFilme), 0);
- fread(&RegB, sizeof(TpFilme), 1, PtrArq);
- if(RegB.Ano == RegA.Ano)
- Cont++;
- }
- if(Cont > Maior)
- {
- Maior = Cont;
- MaiorAno = RegA.Ano;
- }
- }
- }
- else
- MaiorAno = -1;
- return MaiorAno;
- }
- void OrganizaClassificacao(char NomeArq[100])
- {
- int a, b, NumR;
- TpFilme RegA, RegB, Aux;
- FILE *PtrArq = fopen(NomeArq, "rb+");
- if(PtrArq != NULL)
- {
- fseek(PtrArq, 0, 2);
- NumR = ftell(PtrArq) / sizeof(TpFilme);
- for(a = 0; a < NumR - 1; a++)
- {
- fseek(PtrArq, a * sizeof(TpFilme), 0);
- fread(&RegA, sizeof(TpFilme), 1, PtrArq);
- for(b = a + 1; b < NumR; b++)
- {
- fseek(PtrArq, b * sizeof(TpFilme), 0);
- fread(&RegB, sizeof(TpFilme), 1, PtrArq);
- if(strcmp(RegA.Classificacao, RegB.Classificacao) > 0)
- {
- fseek(PtrArq, a * sizeof(TpFilme), 0);
- fwrite(&RegB, sizeof(TpFilme), 1, PtrArq);
- fseek(PtrArq, b * sizeof(TpFilme), 0);
- fwrite(&RegA, sizeof(TpFilme), 1, PtrArq);
- }
- }
- }
- fclose(PtrArq);
- }
- }
- void OrdenaTaxaEspec(char NomeArq[100])
- {
- int a, b, NumR;
- TpFilme RegA, RegB, Aux;
- FILE *PtrArq = fopen(NomeArq, "rb+");
- if(PtrArq != NULL)
- {
- fseek(PtrArq, 0, 2);
- NumR = ftell(PtrArq) / sizeof(TpFilme);
- for(a = 0; a < NumR - 1; a++)
- {
- fseek(PtrArq, a * sizeof(TpFilme), 0);
- fread(&RegA, sizeof(TpFilme), 1, PtrArq);
- for(b = a + 1; b < NumR; b++)
- {
- fseek(PtrArq, b * sizeof(TpFilme), 0);
- fread(&RegB, sizeof(TpFilme), 1, PtrArq);
- if(RegA.TaxaEspec > RegB.TaxaEspec)
- {
- fseek(PtrArq, a * sizeof(TpFilme), 0);
- fwrite(&RegB, sizeof(TpFilme), 1, PtrArq);
- fseek(PtrArq, b * sizeof(TpFilme), 0);
- fwrite(&RegA, sizeof(TpFilme), 1, PtrArq);
- }
- }
- }
- fclose(PtrArq);
- }
- }
- void GeraRelatoriosFilmes(char NomeArq[100])
- {
- TpFilme Aux;
- int TL, i, ContDuracao;
- char NomeMaiorLucro[LIM_TITULO], NomeMaiorTaxa[LIM_TITULO];
- float MaiorLucro, MaiorTaxa, DuracaoMedia, Mediana;
- FILE *PtrTxt;
- system("cls");
- printf("Relatorio do arquivo de filmes\n\n");
- PtrTxt = fopen(NomeArq, "r");
- if(PtrTxt == NULL)
- printf("Arquivo %s inexistente\n\n", NomeArq);
- else
- {
- TL = 0;
- MaiorLucro = 0;
- MaiorTaxa = 0;
- ContDuracao = 0;
- fscanf(PtrTxt, "%[^;];%d;%[^;];%f;%f;%d;%f\n", Aux.Titulo, &Aux.Ano, Aux.Classificacao,
- &Aux.Gasto, &Aux.Renda, &Aux.Duracao, &Aux.TaxaEspec);
- FILE *PtrBin = fopen("Dados.dat", "ab");
- while(!feof(PtrTxt))
- {
- if(Aux.Renda - Aux.Gasto > MaiorLucro)
- {
- MaiorLucro = Aux.Renda - Aux.Gasto;
- strcpy(NomeMaiorLucro, Aux.Titulo);
- }
- if(Aux.TaxaEspec > MaiorTaxa)
- {
- MaiorTaxa = Aux.TaxaEspec;
- strcpy(NomeMaiorTaxa, Aux.Titulo);
- }
- ContDuracao += Aux.Duracao;
- fwrite(&Aux, sizeof(TpFilme), 1, PtrBin);
- fscanf(PtrTxt, "%[^;];%d;%[^;];%f;%f;%d;%f\n", Aux.Titulo, &Aux.Ano, Aux.Classificacao,
- &Aux.Gasto, &Aux.Renda, &Aux.Duracao, &Aux.TaxaEspec);
- }
- fclose(PtrTxt);
- fclose(PtrBin);
- if(TL == 0)
- printf("Nenhum filme cadastrado\n\n");
- else
- {
- printf("Filme com maior lucro: %s (%.3f milhoes)\n", NomeMaiorLucro, MaiorLucro);
- printf("Filme com a maior taxa de espectadores: %s - %.2f\n", NomeMaiorTaxa, MaiorTaxa);
- DuracaoMedia = ContDuracao / (float)TL;
- printf("Duracao media: %.2f minutos\n", DuracaoMedia);
- printf("Ano com o maior numero de filmes: %d\n", AnoMaior("Dados.dat"));
- OrganizaClassificacao("Dados.dat");
- FILE *PtrAux = fopen("OrdClassificacao.txt", "a");
- PtrBin = fopen("Dados.dat", "rb");
- fread(&Aux, sizeof(TpFilme), 1, PtrBin);
- while(!feof(PtrBin))
- {
- fprintf(PtrAux, "%s;%d;%s;%.3f;%.3f;%d;%.1f\n", Aux.Titulo, Aux.Ano,
- Aux.Classificacao, Aux.Gasto, Aux.Renda, Aux.Duracao, Aux.TaxaEspec);
- fread(&Aux, sizeof(TpFilme), 1, PtrBin);
- }
- fclose(PtrAux);
- OrdenaProducao("Dados.dat");
- PtrAux = fopen("OrdAno.txt", "a");
- rewind(PtrBin);
- fread(&Aux, sizeof(TpFilme), 1, PtrBin);
- while(!feof(PtrBin))
- {
- fprintf(PtrAux, "%s;%d;%s;%.3f;%.3f;%d;%.1f\n", Aux.Titulo, Aux.Ano,
- Aux.Classificacao, Aux.Gasto, Aux.Renda, Aux.Duracao, Aux.TaxaEspec);
- fread(&Aux, sizeof(TpFilme), 1, PtrBin);
- }
- fclose(PtrAux);
- OrdenaTaxaEspec("Dados.dat");
- PtrAux = fopen("OrdTaxaEspec.txt", "a");
- rewind(PtrBin);
- fread(&Aux, sizeof(TpFilme), 1, PtrBin);
- while(!feof(PtrBin))
- {
- fprintf(PtrAux, "%s;%d;%s;%.3f;%.3f;%d;%.1f\n", Aux.Titulo, Aux.Ano,
- Aux.Classificacao, Aux.Gasto, Aux.Renda, Aux.Duracao, Aux.TaxaEspec);
- fread(&Aux, sizeof(TpFilme), 1, PtrBin);
- }
- fclose(PtrAux);
- OrdenaProducao("Dados.dat");
- if(TL % 2 != 0)
- {
- }
- else
- {
- }
- printf("Mediana: %.1f anos\n", Mediana);
- }
- }
- getch();
- }
- int main(void)
- {
- GeraRelatoriosFilmes("Filmes.txt");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement