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;
- int main (void){
- int escolha;
- for (;;){
- printf("\nDigite a opcao desejada:\n\n");
- printf("[1]Cadastrar usuarios\n");
- printf("[2]Separar listas\n");
- printf("[9]Sair\n\n");
- printf("Opcao escolhida: ");
- scanf("%d", &escolha);
- switch(escolha){
- case 1:
- system("cls");
- cadastrar();
- system("cls");
- break;
- case 2:
- system("cls");
- separar_listas();
- system("cls");
- 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
- //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");
- exit(1);
- }
- //escrevendo a estrutura no arquivo
- fwrite(&cadastro,sizeof(cadastro),1,arquivo);
- //fechando o arquivo
- fclose(arquivo);
- 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;
- // abrindo os arquivos
- //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){
- fwrite(®istro,sizeof(registro),1,masculino);
- }
- else if(registro.sexo==2){
- fwrite(®istro,sizeof(registro),1,feminino);
- }
- }
- // fecha os tres arquivos
- fclose(arquivo);
- fclose(masculino);
- fclose(feminino);
- printf("\nArquivos gerados com sucesso!\n");
- system("pause");
- return 0;
- }
- 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;
- }
Advertisement
Add Comment
Please, Sign In to add comment