EDCare é um trabalho da disciplina de Estrutura de Dados I da Universidade Federal do Espírito Santo. Todas as especificações do trabalho estão presentes no pdf, mas em resumo, seu objetivo é de construir um sistema de monitoramento de idosos, através de TADs e listas encadeadas. Desenvolvido por: João Victor Morais e Talles Weiler
O programa consiste em três pastas principais:
- include/ -> possui os headers de todas as bibliotecas implementadas
- src/ -> possui os arquivos-fonte de todas as bibliotecas implementadas e o arquivo principal (main.c)
- Entrada/ -> possui os arquivos fornecidos pelo cliente
Toda a utilização do programa é feita através de um makefile, onde seus principais comandos são:
- "make start r=x" -> O valor 'x' representa o número de leituras que o programa irá realizar nos arquivos de entrada (ex: "make start r=15" efetua 15 leituras). Este comando considera que a pasta Entrada/ já existe e possui todos os arquivos necessários, então cria as pastas temporárias obj/ (onde ficam os arquivos-objeto), bin/ (onde fica o arquivo executável) e Saida/ (onde ficam os arquivos-saida). Após isso, compila o programa, roda e gera os arquivos-saida.
- "make clean" -> exclui todas os arquivos temporários, inclusive os arquivos-saida
Na construção do programa foram utilizados cinco TADs: Todos os tipos possuem funções de alocar e liberar memória.
-
Os tipos "Idoso" e "Cuidador" representam as estruturas mais básicas do programa. Suas funções se limitam a obter ou modificar suas variáveis.
-
Os tipos "Lista_idoso" e "Lista_cuidador" representam estruturas de agrupamento dos tipos anteriores. Foram implementadas utilizando o conceito de lista duplamente encadeada e suas principais funções são de inserção, retirada e busca.
-
O tipo "Apoio" é o único no qual o cliente tem acesso, ele é composto por duas listas (uma de cada tipo) que representam toda a equipe de apoio. Suas funções efetuam a leitura dos arquivos de entrada e a escrita dos arquivos de saída.
Primeiramente o programa preenche as duas listas através dos arquivos "apoio.txt" e "cuidadores.txt", depois são preenchidas as listas de amigos e de cuidadores de cada idoso. Após isso, são criados instantes que vão de zero até o número de leituras passado pelo cliente, cada instante atualiza as variáveis internas de cada idoso e cuidador e efetua uma verificação, além de escrever na saída de cada idoso o resultado desta verificação (os resultados possíveis estão detalhados no arquivo em pdf), o único resultado que afeta o restante da lista é o "falecimento", que remove o idoso da lista de amigo de cada idoso e por fim da lista do apoio. Por fim o programa libera toda a memória alocada.
Cada idoso e cuidador são alocados apenas uma vez (quando o programa preenche as duas listas), para preencher as listas de amigos e de cuidadores o programa realiza uma busca nessas duas listas e insere somente o ponteiro. Por isso as funções de retirada não liberam a memória alocada pelo tipo.
Como forma de deixar mais claro o entendimento do programa, as variáveis e as funções possuem nomes significativos, mas mesmo assim cada função possui uma pequena explicação nos headers e ao longo de seu arquivo-fonte.
A maior dificuldade do projeto foi trabalhar com alocação dinâmica, e praticamente todos os problemas que surgiram foram provenientes disso. Porém, a utilização do comando valgrind auxiliou muito o desenvolvimento do trabalho.
Para o desenvolvimento do projeto foram utilizados principalmente os materiais fornecidos pela professora Patricia Dockhorn, o livro "Introdução a Estrutura de Dados" de Waldermar Celes e o site "stackoverflow.com".