fpontesmorales

Prática 11 - TPE2011 - Noturno

Sep 12th, 2011
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.12 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.     int escolha;
  16.     for (;;){
  17.  
  18.     printf("\nDigite a opcao desejada:\n\n");
  19.     printf("[1]Cadastrar usuarios\n");
  20.     printf("[2]Separar listas\n");
  21.     printf("[9]Sair\n\n");
  22.     printf("Opcao escolhida: ");
  23.     scanf("%d", &escolha);
  24.  
  25.     switch(escolha){
  26.  
  27.         case 1:
  28.             system("cls");
  29.             cadastrar();
  30.             system("cls");
  31.         break;
  32.  
  33.         case 2:
  34.             system("cls");
  35.             separar_listas();
  36.             system("cls");
  37.         break;
  38.  
  39.         case 9:
  40.             exit(1);
  41.  
  42.         default :
  43.             system("cls");
  44.             printf("Digite uma opcao valida.\n\n");
  45.             system("pause");
  46.             system("cls");
  47.             break;
  48.         }
  49.     }
  50. }
  51.  
  52. int cadastrar(void)
  53. {
  54.  
  55.     FILE *arquivo; //ponteiro para arquivo
  56.     bd cadastro; // declarando a estrutura
  57.  
  58.     //recebendo as variáveis e guardando na estrutura
  59.     printf("Digite o sexo [ 1 - Masculino | 2 - Feminino ] : ");
  60.     scanf("%d" , &cadastro.sexo);
  61.     fflush(stdin);
  62.     printf("Digite o nome da pessoa: ");
  63.     gets(cadastro.nome);
  64.     fflush(stdin);
  65.     printf("Digite a cor dos olhos: ");
  66.     gets(cadastro.corDosOlhos);
  67.     printf("Digite o peso : ");
  68.     scanf("%f" , &cadastro.peso);
  69.     fflush(stdin);
  70.     printf("Digite a data de nascimento: ");
  71.     gets(cadastro.dataDeNascimento);
  72.  
  73.     //aqui estamos gravando toda a struct no arquivo
  74.  
  75.     //abrindo o arquivo
  76.     if((arquivo=fopen("cadastro.data", "a+b")) == NULL) {
  77.         printf("Erro ao abrir o arquivo.\n");
  78.         exit(1);
  79.     }
  80.     //escrevendo a estrutura no arquivo
  81.     fwrite(&cadastro,sizeof(cadastro),1,arquivo);
  82.     //fechando o arquivo
  83.     fclose(arquivo);
  84.     return 0;
  85. }
  86.  
  87. int separar_listas(void)
  88. {
  89.  
  90.     //declarando os ponteiros, variáveis e a estrutura
  91.     FILE *arquivo , *masculino, *feminino;
  92.     long tamanho;
  93.     int n, i;
  94.     bd registro;
  95.  
  96.     // abrindo os arquivos
  97.  
  98.     //abrindo o arquivo 'cadastro.data' somente como leitura binária
  99.     if((arquivo=fopen("cadastro.data", "r+b")) == NULL) {
  100.         printf("AVISO! Erro ao abrir o arquivo.\nO Programa sera abortado.\n\n");
  101.         system("pause");
  102.         exit(1);
  103.         }
  104.  
  105.     //criando os arquivos 'masculino.data' e 'feminino.data' , para escrita binaria
  106.     // modo "w" , destruindo os registros anteriores.
  107.     if((masculino=fopen("masculino.data", "w+b")) == NULL) {
  108.             printf("Erro ao abrir o arquivo.\n");
  109.             }
  110.     if((feminino=fopen("feminino.data", "w+b")) == NULL) {
  111.             printf("Erro ao abrir o arquivo.\n");
  112.             }
  113.     //captando o tamanho do carquivo
  114.     n = quantidade_de_registros(arquivo);
  115.  
  116.     //ler cada registro
  117.     for(i=0 ; i<n;i++) {
  118.         fread(&registro, sizeof(bd), 1, arquivo);
  119.         if (feof(arquivo))break;
  120.  
  121.     //analisa se o registro é masculino ou feminino e grava no ponteiro
  122.     //para arquivo correspondente
  123.         else if(registro.sexo==1){
  124.             fwrite(&registro,sizeof(registro),1,masculino);
  125.             }
  126.         else if(registro.sexo==2){
  127.             fwrite(&registro,sizeof(registro),1,feminino);
  128.             }
  129.     }
  130.     // fecha os tres arquivos
  131.     fclose(arquivo);
  132.     fclose(masculino);
  133.     fclose(feminino);
  134.     printf("\nArquivos gerados com sucesso!\n");
  135.     system("pause");
  136.     return 0;
  137.  
  138. }
  139.  
  140. quantidade_de_registros(FILE *arquivo)
  141. {
  142.  
  143.     long tamanho;
  144.     int registros;
  145.     if (arquivo != NULL) {
  146.         // movimenta a posição corrente de leitura no arquivo
  147.         // para o seu fim
  148.         fseek(arquivo, 0, SEEK_END);
  149.         // pega a posição corrente de leitura no arquivo
  150.         tamanho = ftell(arquivo);
  151.     //dividinde a quantidade de bytes encontrados por 98 (tamanho de cada registro)
  152.         registros=tamanho/98;
  153.         fseek(arquivo,0,SEEK_SET); //volta pro começo do arquivo
  154.         }
  155.  
  156.         else {
  157.         printf("Deu erro!");
  158.     }
  159.     return registros;
  160.  
  161. }
Advertisement
Add Comment
Please, Sign In to add comment