C, exercício de análise

assunto: um vetor dinâmico de estruturas
pergunta: lidar com um vetor (vector) dinâmico de estruturas, e ficheiro binário

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct cliente pessoa;

struct cliente {
    char nome[200]; // Nome do cliente
    char morada[200]; // Morada do cliente
    int nConta; // Número de conta
    int montante; // Saldo da conta
};

void guarda_dados_binario(pessoa * exame, int totalC) {
    FILE *f;

    f = fopen("bancoBinario.bin", "wb");
    if (f == NULL) {
        printf("\n erro no acesso ao ficheiro \n");
        return;
    } else {
        fwrite(&totalC, sizeof (int), 1, f);
        fwrite(exame, sizeof (pessoa), totalC, f);
        fclose(f);
    }
}

pessoa * ler_dados_binario(int totalC) {
    FILE *f;
    pessoa * auxc;

    f = fopen("bancoBinario.bin", "rb");
    if (f == NULL) {
        printf("\n erro no acesso ao ficheiro \n");
        return 0;
    } else {
        fread(&totalC, sizeof (int), 1, f);
        auxc = malloc(sizeof (pessoa) * totalC);
        fread(auxc, sizeof (pessoa), totalC, f);
    }
    fclose(f);
    return auxc;
}

void mostra_todos(pessoa * exame, int totalC) {
    if (totalC == 0) {
        printf("nao existem clientes\n");
    } else {
        printf("\ntotal: %d", totalC);
        for (int i = 0; i < totalC; i++) {
            printf("\n%s", exame[i].nome);
        }
    }
}

pessoa * adiciona_pessoa(int * auxtotalC) {
    int auxTotal = 0, totalC = 0;

    pessoa * auxc;

    printf("\nquantas pessoas quer adicionar?");
    scanf("%d", &totalC);
    * auxtotalC = totalC;

    auxc = malloc(sizeof (pessoa) * totalC);
    do {
        printf("Qual o nome?");
        scanf(" %99[^\n]", auxc[auxTotal].nome);
        printf("Qual a morada?");
        scanf(" %99[^\n]", auxc[auxTotal].morada);
        printf("Qual o numero da conta?");
        scanf("%d", &(auxc[auxTotal].nConta));
        printf("Qual o montante?");
        scanf("%d", &(auxc[auxTotal].montante));
        auxTotal++;
    } while (auxTotal < totalC);
    return auxc;
}
int main(int argc, char** argv) {
    pessoa * listaPessoas = NULL; // um vetor dinâmico de estruturas 
    pessoa * listaPessoas2 = NULL; // um vetor dinâmico de estruturas, para testes
    int total = 0;

    listaPessoas = adiciona_pessoa(&total);
    mostra_todos(listaPessoas, total);
    guarda_dados_binario(listaPessoas, total);

    //auxliar/verificar/para testes
    listaPessoas2 = ler_dados_binario(total);
    mostra_todos(listaPessoas2, total);

    return (EXIT_SUCCESS);
}
Tags : , ,

0 thoughts on “C, exercício de análise”

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.