fpontesmorales

Prática 11 - TPE1 - Final

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