Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #pragma pack (1)
- typedef struct {
- int sexo;
- char nome[30];
- char corDosOlhos[30];
- float peso;
- char dataDeNascimento[30];
- } bd;
- typedef struct {
- char nome[30];
- char corDosOlhos[30];
- float peso;
- char dataDeNascimento[30];
- } bd2;
- int main (void)
- {
- int escolha;
- for (;;){
- printf("\nDigite a opcao desejada:\n\n");
- printf("[1] Cadastrar usuarios\n");
- printf("[2] Separar listas\n");
- printf("[3] Ver lista MASCULINA\n");
- printf("[4] Ver lista FEMININA\n");
- printf("[5] Ver lista COMPLETA\n");
- printf("[9] Sair\n\n");
- printf("Opcao escolhida: ");
- scanf("%d", &escolha);
- switch(escolha){
- case 1:
- cadastrar();
- break;
- case 2:
- separar_listas();
- break;
- case 3:
- ver_masculino();
- break;
- case 4:
- ver_feminino();
- break;
- case 5:
- ver_tudo();
- break;
- case 9:
- exit(1);
- default :
- system("cls");
- printf("Digite uma opcao valida.\n\n");
- system("pause");
- system("cls");
- break;
- }
- }
- }
- int cadastrar(void)
- {
- FILE *arquivo; //ponteiro para arquivo
- bd cadastro; // declarando a estrutura
- system("cls");
- //recebendo as variáveis e guardando na estrutura
- printf("Digite o sexo [ 1 - Masculino | 2 - Feminino ] : ");
- scanf("%d" , &cadastro.sexo);
- fflush(stdin);
- printf("Digite o nome da pessoa: ");
- gets(cadastro.nome);
- fflush(stdin);
- printf("Digite a cor dos olhos: ");
- gets(cadastro.corDosOlhos);
- printf("Digite o peso : ");
- scanf("%f" , &cadastro.peso);
- fflush(stdin);
- printf("Digite a data de nascimento: ");
- gets(cadastro.dataDeNascimento);
- //aqui estamos gravando toda a struct no arquivo
- //abrindo o arquivo
- if((arquivo=fopen("cadastro.data", "a+b")) == NULL) {
- printf("Erro ao abrir o arquivo.\n");
- system("PAUSE");
- exit(1);
- }
- //escrevendo a estrutura no arquivo
- fwrite(&cadastro,sizeof(cadastro),1,arquivo);
- //fechando o arquivo
- fclose(arquivo);
- system("cls");
- printf("\nCadastrado com sucesso! \n");
- _sleep(1500);
- system("cls");
- return 0;
- }
- int separar_listas(void)
- {
- //declarando os ponteiros, variáveis e a estrutura
- FILE *arquivo , *masculino, *feminino;
- long tamanho;
- int n , i;
- bd registro;
- bd2 registro2;
- // abrindo os arquivos
- system("cls");
- //abrindo o arquivo 'cadastro.data' somente como leitura binária
- if((arquivo=fopen("cadastro.data", "r+b")) == NULL) {
- printf("AVISO! Erro ao abrir o arquivo.\nO Programa sera abortado.\n\n");
- system("pause");
- exit(1);
- }
- //criando os arquivos 'masculino.data' e 'feminino.data' , para escrita binaria
- // modo "w" , destruindo os registros anteriores.
- if((masculino=fopen("masculino.data", "w+b")) == NULL) {
- printf("Erro ao abrir o arquivo.\n");
- }
- if((feminino=fopen("feminino.data", "w+b")) == NULL) {
- printf("Erro ao abrir o arquivo.\n");
- }
- //captando o tamanho do carquivo
- n = quantidade_de_registros(arquivo);
- //ler cada registro
- for(i=0 ; i<n;i++) {
- fread(®istro, sizeof(bd), 1, arquivo);
- if (feof(arquivo))break;
- //analisa se o registro é masculino ou feminino e grava no ponteiro
- //para arquivo correspondente
- else if(registro.sexo==1){
- copia_registros(®istro ,®istro2);
- fwrite(®istro2,sizeof(registro2),1,masculino);
- }
- else if(registro.sexo==2){
- copia_registros(®istro ,®istro2);
- fwrite(®istro2,sizeof(registro2),1,feminino);
- }
- }
- // fecha os tres arquivos
- fclose(arquivo);
- fclose(masculino);
- fclose(feminino);
- printf("\nArquivos gerados com sucesso!\n");
- system("pause");
- system("cls");
- return 0;
- }
- int ver_masculino(void)
- {
- //declarando os ponteiros, variáveis e a estrutura
- FILE *masculino;
- long tamanho;
- int n, i;
- bd2 registro;
- // abrindo os arquivos
- system("cls");
- //abrindo o arquivo 'masculino.data' somente como leitura binária
- if((masculino=fopen("masculino.data", "r+b")) == NULL) {
- printf("AVISO! Arquivo nao encontrado.\n\n");
- system("pause");
- system("cls");
- return 0;
- }
- //captando o tamanho do carquivo
- n = quantidade_de_registros2(masculino);
- printf("Quantidades de registros MASCULINOS: %d \n", n );
- //ler cada registro
- for(i=0 ; i<n;i++) {
- if (feof(masculino))break;
- fread(®istro, sizeof(bd2), 1, masculino);
- printf("\nRegistro: %d",i+1);
- printf("\nNome: %s" , registro.nome);
- printf("\nCor dos olhos: %s" , registro.corDosOlhos);
- printf("\nPeso: %.2f KG" , registro.peso);
- printf("\nData de Nascimento: %s\n\n" , registro.dataDeNascimento);
- }
- system("pause");
- system("cls");
- }
- int ver_feminino(void)
- {
- //declarando os ponteiros, variáveis e a estrutura
- FILE *feminino;
- long tamanho;
- int n, i;
- bd2 registro;
- // abrindo os arquivos
- system("cls");
- //abrindo o arquivo 'feminino.data' somente como leitura binária
- if((feminino=fopen("feminino.data", "r+b")) == NULL) {
- printf("AVISO! Arquivo nao encontrado.\n\n");
- system("pause");
- system("cls");
- return 0;
- }
- //captando o tamanho do carquivo
- n = quantidade_de_registros2(feminino);
- printf("Quantidades de registros FEMININOS: %d \n", n );
- //ler cada registro
- for(i=0 ; i<n;i++) {
- if (feof(feminino))break;
- fread(®istro, sizeof(bd2), 1, feminino);
- printf("\nRegistro: %d",i+1);
- printf("\nNome: %s" , registro.nome);
- printf("\nCor dos olhos: %s" , registro.corDosOlhos);
- printf("\nPeso: %.2f KG" , registro.peso);
- printf("\nData de Nascimento: %s\n\n" , registro.dataDeNascimento);
- }
- system("pause");
- system("cls");
- }
- int ver_tudo(void)
- {
- //declarando os ponteiros, variáveis e a estrutura
- FILE *arquivo;
- long tamanho;
- int n, i;
- bd registro;
- // abrindo os arquivos
- system("cls");
- //abrindo o arquivo 'cadastro.data' somente como leitura binária
- if((arquivo=fopen("cadastro.data", "r+b")) == NULL) {
- printf("AVISO! Arquivo nao encontrado.\n\n");
- system("pause");
- system("cls");
- return 0;
- }
- //captando o tamanho do carquivo
- n = quantidade_de_registros(arquivo);
- printf("Quantidades de registros: %d \n", n );
- //ler cada registro
- for(i=0 ; i<n;i++) {
- if (feof(arquivo))break;
- fread(®istro, sizeof(bd), 1, arquivo);
- printf("\nRegistro: %d",i+1);
- if(registro.sexo==1)printf("\nSexo: Masculino");
- else if(registro.sexo==2)printf("\nSexo: Feminino");
- //printf("\nSexo: %d" , registro.sexo);
- printf("\nNome: %s" , registro.nome);
- printf("\nCor dos olhos: %s" , registro.corDosOlhos);
- printf("\nPeso: %.2f KG" , registro.peso);
- printf("\nData de Nascimento: %s\n\n" , registro.dataDeNascimento);
- }
- system("pause");
- system("cls");
- }
- int quantidade_de_registros(FILE *arquivo)
- {
- long tamanho;
- int registros;
- if (arquivo != NULL) {
- // movimenta a posição corrente de leitura no arquivo
- // para o seu fim
- fseek(arquivo, 0, SEEK_END);
- // pega a posição corrente de leitura no arquivo
- tamanho = ftell(arquivo);
- //dividinde a quantidade de bytes encontrados por 98 (tamanho de cada registro)
- registros=tamanho/98;
- fseek(arquivo,0,SEEK_SET); //volta pro começo do arquivo
- }
- else {
- printf("Deu erro!");
- }
- return registros;
- }
- int quantidade_de_registros2(FILE *arquivo)
- {
- long tamanho;
- int registros;
- if (arquivo != NULL) {
- // movimenta a posição corrente de leitura no arquivo
- // para o seu fim
- fseek(arquivo, 0, SEEK_END);
- // pega a posição corrente de leitura no arquivo
- tamanho = ftell(arquivo);
- //dividinde a quantidade de bytes encontrados por 94 (tamanho de cada registro)
- registros=tamanho/sizeof(bd2);
- fseek(arquivo,0,SEEK_SET); //volta pro começo do arquivo
- }
- else {
- printf("Deu erro!");
- }
- return registros;
- }
- void copia_registros(bd *registro , bd2 *registro2)
- {
- strcpy(registro2->nome,registro->nome);
- strcpy(registro2->corDosOlhos,registro->corDosOlhos);
- registro2->peso=registro->peso;
- strcpy(registro2->dataDeNascimento,registro->dataDeNascimento);
- }
Advertisement
Add Comment
Please, Sign In to add comment