fpontesmorales

Prática 11 - TPE1 - Final.v2

Sep 14th, 2011
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 9.00 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #pragma pack (1)
  4.  
  5. typedef struct {
  6.   int sexo;
  7.   char nome[30];
  8.   char corDosOlhos[30];
  9.   float peso;
  10.   char dataDeNascimento[30];
  11. } bd;
  12.  
  13. typedef struct {
  14.   char nome[30];
  15.   char corDosOlhos[30];
  16.   float peso;
  17.   char dataDeNascimento[30];
  18. } bd2;
  19.  
  20. int main (void)
  21. {
  22.  
  23.     int escolha;
  24.     for (;;){
  25.  
  26.     printf("\nDigite a opcao desejada:\n\n");
  27.     printf("[1] Cadastrar usuarios\n");
  28.     printf("[2] Separar listas\n");
  29.     printf("[3] Ver lista MASCULINA\n");
  30.     printf("[4] Ver lista FEMININA\n");
  31.     printf("[5] Ver lista COMPLETA\n");
  32.     printf("[9] Sair\n\n");
  33.     printf("Opcao escolhida: ");
  34.     scanf("%d", &escolha);
  35.  
  36.     switch(escolha){
  37.  
  38.         case 1:
  39.             cadastrar();
  40.         break;
  41.  
  42.         case 2:
  43.             separar_listas();
  44.         break;
  45.  
  46.         case 3:
  47.             ver_masculino();
  48.         break;
  49.  
  50.         case 4:
  51.             ver_feminino();
  52.         break;
  53.  
  54.         case 5:
  55.             ver_tudo();
  56.         break;
  57.  
  58.         case 9:
  59.             exit(1);
  60.  
  61.         default :
  62.             system("cls");
  63.             printf("Digite uma opcao valida.\n\n");
  64.             system("pause");
  65.             system("cls");
  66.             break;
  67.         }
  68.     }
  69. }
  70.  
  71. int cadastrar(void)
  72. {
  73.  
  74.     FILE *arquivo; //ponteiro para arquivo
  75.     bd cadastro; // declarando a estrutura
  76.  
  77.     system("cls");
  78.     //recebendo as variáveis e guardando na estrutura
  79.     printf("Digite o sexo [ 1 - Masculino | 2 - Feminino ] : ");
  80.     scanf("%d" , &cadastro.sexo);
  81.     fflush(stdin);
  82.     printf("Digite o nome da pessoa: ");
  83.     gets(cadastro.nome);
  84.     fflush(stdin);
  85.     printf("Digite a cor dos olhos: ");
  86.     gets(cadastro.corDosOlhos);
  87.     printf("Digite o peso : ");
  88.     scanf("%f" , &cadastro.peso);
  89.     fflush(stdin);
  90.     printf("Digite a data de nascimento: ");
  91.     gets(cadastro.dataDeNascimento);
  92.  
  93.     //aqui estamos gravando toda a struct no arquivo
  94.  
  95.     //abrindo o arquivo
  96.     if((arquivo=fopen("cadastro.data", "a+b")) == NULL) {
  97.         printf("Erro ao abrir o arquivo.\n");
  98.         system("PAUSE");
  99.         exit(1);
  100.     }
  101.     //escrevendo a estrutura no arquivo
  102.     fwrite(&cadastro,sizeof(cadastro),1,arquivo);
  103.     //fechando o arquivo
  104.     fclose(arquivo);
  105.     system("cls");
  106.     printf("\nCadastrado com sucesso! \n");
  107.     _sleep(1500);
  108.     system("cls");
  109.  
  110.     return 0;
  111. }
  112.  
  113. int separar_listas(void)
  114. {
  115.  
  116.     //declarando os ponteiros, variáveis e a estrutura
  117.     FILE *arquivo , *masculino, *feminino;
  118.     long tamanho;
  119.     int n , i;
  120.     bd registro;
  121.     bd2 registro2;
  122.  
  123.     // abrindo os arquivos
  124.     system("cls");
  125.     //abrindo o arquivo 'cadastro.data' somente como leitura binária
  126.     if((arquivo=fopen("cadastro.data", "r+b")) == NULL) {
  127.         printf("AVISO! Erro ao abrir o arquivo.\nO Programa sera abortado.\n\n");
  128.         system("pause");
  129.         exit(1);
  130.         }
  131.  
  132.     //criando os arquivos 'masculino.data' e 'feminino.data' , para escrita binaria
  133.     // modo "w" , destruindo os registros anteriores.
  134.     if((masculino=fopen("masculino.data", "w+b")) == NULL) {
  135.             printf("Erro ao abrir o arquivo.\n");
  136.             }
  137.     if((feminino=fopen("feminino.data", "w+b")) == NULL) {
  138.             printf("Erro ao abrir o arquivo.\n");
  139.             }
  140.     //captando o tamanho do carquivo
  141.     n = quantidade_de_registros(arquivo);
  142.  
  143.     //ler cada registro
  144.     for(i=0 ; i<n;i++) {
  145.         fread(&registro, sizeof(bd), 1, arquivo);
  146.         if (feof(arquivo))break;
  147.     //analisa se o registro é masculino ou feminino e grava no ponteiro
  148.     //para arquivo correspondente
  149.         else if(registro.sexo==1){
  150.             copia_registros(&registro ,&registro2);
  151.             fwrite(&registro2,sizeof(registro2),1,masculino);
  152.             }
  153.         else if(registro.sexo==2){
  154.             copia_registros(&registro ,&registro2);
  155.             fwrite(&registro2,sizeof(registro2),1,feminino);
  156.             }
  157.     }
  158.     // fecha os tres arquivos
  159.     fclose(arquivo);
  160.     fclose(masculino);
  161.     fclose(feminino);
  162.     printf("\nArquivos gerados com sucesso!\n");
  163.     system("pause");
  164.     system("cls");
  165.     return 0;
  166.  
  167. }
  168.  
  169. int ver_masculino(void)
  170. {
  171.     //declarando os ponteiros, variáveis e a estrutura
  172.     FILE *masculino;
  173.     long tamanho;
  174.     int n, i;
  175.     bd2 registro;
  176.  
  177.     // abrindo os arquivos
  178.     system("cls");
  179.     //abrindo o arquivo 'masculino.data' somente como leitura binária
  180.     if((masculino=fopen("masculino.data", "r+b")) == NULL) {
  181.         printf("AVISO! Arquivo nao encontrado.\n\n");
  182.         system("pause");
  183.         system("cls");
  184.  
  185.         return 0;
  186.         }
  187.  
  188.     //captando o tamanho do carquivo
  189.     n = quantidade_de_registros2(masculino);
  190.     printf("Quantidades de registros MASCULINOS: %d \n", n );
  191.  
  192.     //ler cada registro
  193.     for(i=0 ; i<n;i++) {
  194.  
  195.         if (feof(masculino))break;
  196.         fread(&registro, sizeof(bd2), 1, masculino);
  197.         printf("\nRegistro: %d",i+1);
  198.         printf("\nNome: %s" , registro.nome);
  199.         printf("\nCor dos olhos: %s" , registro.corDosOlhos);
  200.         printf("\nPeso: %.2f KG" , registro.peso);
  201.         printf("\nData de Nascimento: %s\n\n" , registro.dataDeNascimento);
  202.  
  203.     }
  204.     system("pause");
  205.     system("cls");
  206.  
  207. }
  208.  
  209. int ver_feminino(void)
  210. {
  211.     //declarando os ponteiros, variáveis e a estrutura
  212.     FILE *feminino;
  213.     long tamanho;
  214.     int n, i;
  215.     bd2 registro;
  216.  
  217.     // abrindo os arquivos
  218.     system("cls");
  219.     //abrindo o arquivo 'feminino.data' somente como leitura binária
  220.     if((feminino=fopen("feminino.data", "r+b")) == NULL) {
  221.         printf("AVISO! Arquivo nao encontrado.\n\n");
  222.         system("pause");
  223.         system("cls");
  224.  
  225.         return 0;
  226.         }
  227.  
  228.     //captando o tamanho do carquivo
  229.     n = quantidade_de_registros2(feminino);
  230.     printf("Quantidades de registros FEMININOS: %d \n", n );
  231.  
  232.     //ler cada registro
  233.     for(i=0 ; i<n;i++) {
  234.  
  235.         if (feof(feminino))break;
  236.         fread(&registro, sizeof(bd2), 1, feminino);
  237.         printf("\nRegistro: %d",i+1);
  238.         printf("\nNome: %s" , registro.nome);
  239.         printf("\nCor dos olhos: %s" , registro.corDosOlhos);
  240.         printf("\nPeso: %.2f KG" , registro.peso);
  241.         printf("\nData de Nascimento: %s\n\n" , registro.dataDeNascimento);
  242.  
  243.     }
  244.     system("pause");
  245.     system("cls");
  246. }
  247.  
  248. int ver_tudo(void)
  249. {
  250.     //declarando os ponteiros, variáveis e a estrutura
  251.     FILE *arquivo;
  252.     long tamanho;
  253.     int n, i;
  254.     bd registro;
  255.  
  256.     // abrindo os arquivos
  257.     system("cls");
  258.     //abrindo o arquivo 'cadastro.data' somente como leitura binária
  259.     if((arquivo=fopen("cadastro.data", "r+b")) == NULL) {
  260.         printf("AVISO! Arquivo nao encontrado.\n\n");
  261.         system("pause");
  262.         system("cls");
  263.  
  264.         return 0;
  265.         }
  266.  
  267.     //captando o tamanho do carquivo
  268.     n = quantidade_de_registros(arquivo);
  269.     printf("Quantidades de registros: %d \n", n );
  270.  
  271.     //ler cada registro
  272.     for(i=0 ; i<n;i++) {
  273.  
  274.         if (feof(arquivo))break;
  275.         fread(&registro, sizeof(bd), 1, arquivo);
  276.         printf("\nRegistro: %d",i+1);
  277.         if(registro.sexo==1)printf("\nSexo: Masculino");
  278.         else if(registro.sexo==2)printf("\nSexo: Feminino");
  279.         //printf("\nSexo: %d" , registro.sexo);
  280.         printf("\nNome: %s" , registro.nome);
  281.         printf("\nCor dos olhos: %s" , registro.corDosOlhos);
  282.         printf("\nPeso: %.2f KG" , registro.peso);
  283.         printf("\nData de Nascimento: %s\n\n" , registro.dataDeNascimento);
  284.  
  285.     }
  286.     system("pause");
  287.     system("cls");
  288. }
  289.  
  290. int quantidade_de_registros(FILE *arquivo)
  291. {
  292.  
  293.     long tamanho;
  294.     int registros;
  295.     if (arquivo != NULL) {
  296.         // movimenta a posição corrente de leitura no arquivo
  297.         // para o seu fim
  298.         fseek(arquivo, 0, SEEK_END);
  299.         // pega a posição corrente de leitura no arquivo
  300.         tamanho = ftell(arquivo);
  301.     //dividinde a quantidade de bytes encontrados por 98 (tamanho de cada registro)
  302.         registros=tamanho/98;
  303.         fseek(arquivo,0,SEEK_SET); //volta pro começo do arquivo
  304.         }
  305.  
  306.         else {
  307.         printf("Deu erro!");
  308.     }
  309.     return registros;
  310.  
  311. }
  312.  
  313. int quantidade_de_registros2(FILE *arquivo)
  314. {
  315.  
  316.     long tamanho;
  317.     int registros;
  318.     if (arquivo != NULL) {
  319.         // movimenta a posição corrente de leitura no arquivo
  320.         // para o seu fim
  321.         fseek(arquivo, 0, SEEK_END);
  322.         // pega a posição corrente de leitura no arquivo
  323.         tamanho = ftell(arquivo);
  324.     //dividinde a quantidade de bytes encontrados por 94 (tamanho de cada registro)
  325.         registros=tamanho/sizeof(bd2);
  326.         fseek(arquivo,0,SEEK_SET); //volta pro começo do arquivo
  327.         }
  328.  
  329.         else {
  330.         printf("Deu erro!");
  331.     }
  332.     return registros;
  333.  
  334. }
  335.  
  336. void copia_registros(bd *registro , bd2 *registro2)
  337. {
  338.     strcpy(registro2->nome,registro->nome);
  339.     strcpy(registro2->corDosOlhos,registro->corDosOlhos);
  340.     registro2->peso=registro->peso;
  341.     strcpy(registro2->dataDeNascimento,registro->dataDeNascimento);
  342.  
  343. }
Advertisement
Add Comment
Please, Sign In to add comment