Ajuda para a funcionalidade de importação de dados

Autor

Diogo Silva

Data de Publicação

5 de junho de 2024

Em todos os projectos, existe uma componente que é semelhante: a importação de dados. Esta funcionalidade é essencial para a maioria dos projectos, pois permite a importação de dados de um ficheiro para a base de dados. A ideia é que a vossa base de dados (em formato binário para ser fácil de aceder com fread e fwrite) seja persistente e que possa ser facilmente carregada no início do programa. Contudo, uma base de dados não é preenchida com dados magicamente. É necessário haver introdução de dados na base de dados. Uma das formas de introduzir dados é como já fizeram em vários exercícios, nomeadamente, ao pedir ao utilizador para introduzir os dados (e.g. com scanf, fgets, etc.). Contudo, esta não é a única forma de introduzir dados. Outra forma é através da importação de dados de um ficheiro.

No caso dos projectos, a origem dos dados devem ser ficheiros de texto. Depois de importados para a base de dados, estes ficheiros de texto podem ser eliminados, pois a base de dados é persistente e já contém os dados relevantes. Considerem o seguinte cenário. O vosso programa é um sistema para centralizar a gestão de todas as frotas. Semanalmente, recebem um ficheiro de texto com os dados dos novos voos. O gestor de frota recebe esse ficheiro de alguma forma, e solicita ao vosso programa que os novos dados recebidos sejam incorporados na base de dados. O gestor de frota não quer saber como é que vocês fazem isso, ele só quer que os dados sejam importados, para depois os poder trabalhar no programa (estatísticas, listas, filtros, etc.). Estas funcionalidades operam todas sobre a base de dados, mas a origem inicial dos dados são estes ficheiros de texto.

Considerem outro cenário: desenvolver um programa que permita ter uma lista atualizada dos novos alunos que vão chegando à Academia. Cada vez que o programa é executado, ele carrega os dados dos alunos da base de dados binária, e mostra esta lista na consola. Posteriormente, o programa questiona o utilizador se pretende importar novos alunos. Se o utilizador responder afirmativamente, o programa solicita o nome do ficheiro de texto que contém os dados dos novos alunos. O programa lê o ficheiro de texto, e importa os novos alunos para a base de dados. No final, o programa guarda a base de dados atualizada num ficheiro binário para que os dados estejam disponíveis na próxima execução do programa. Exemplo de execução:

  1. O programa é executado pela primeira vez, e o utilizador responde afirmativamente à questão de importação de dados. Neste exemplo o s e o nome do ficheiro import1.txt foram escritos pelo utilizador. O programa mostra a seguinte mensagem:

  2. Base de dados vazia.
    Lista actual:
    
    
    Pretende importar dados? (s/n):s
    Caminho do ficheiro para importar:import1.txt
    A importar dados...
            João - 1743
            Maria - 973
  3. Na segunda vez que o programa é executado, a base de dados já contém os alunos importados anteriormente. O programa mostra a seguinte mensagem:

    Carregados 2 alunos da base de dados.
    Lista actual:
            0: João - 1743
            1: Maria - 973
    
    
    Pretende importar dados? (s/n):s
    Caminho do ficheiro para importar:import2.txt
    A importar dados...
            Ana - 567
            Pedro - 472
  4. Na terceira vez que o programa é executado, a base de dados já contém os alunos importados anteriormente. O utilizador escolhe não importar mais dados. O programa mostra a seguinte mensagem:

    Carregados 4 alunos da base de dados.
    Lista actual:
            0: João - 1743
            1: Maria - 973
            2: Ana - 567
            3: Pedro - 472
    
    
    Pretende importar dados? (s/n):n

Uma implementação do programa mencionado acima está disponível nos seguintes ficheiros: