Neste arquivo você verá:
- Introdução
- Problemática
- Descrição
- Organização do repositório
- Listas encadeadas
- Funções em Consulta
- Funções em Paciente
- Funções em tratativas
- Funções em main
- Pré-requisitos
- Execução do projeto
O gerenciamento de ótica é fundamental para garantir o bom funcionamento e a eficiência de uma ótica, abrangendo gestão de pacintes e suas consultas. Um sistema de gerenciamento específico para óticas é desenvolvido com o intuito de facilitar todas as operações necessárias para o funcionamento do negócio.
O sistema de gerenciamento de ótica, implementado em Linguagem C, visa facilitar as operações essenciais para o funcionamento eficiente de uma ótica. Ele oferece funcionalidades como adicionar, excluir, buscar e editar pacientes e consultas, bem como listar e pacientes e seu histórico de consultas. Essas operações são fundamentais para garantir uma gestão eficaz e organizada das atividades da ótica.
O sistema de gerenciamento conta com duas TADs e um módulo. Sendo estas para pacientes e consultas. Já no módulo, estão contidos as tratativas, que são funções gerais utilizadas pelas duas TAD.
O sistema foi criado para ser capaz de adicionar/remover clientes e consultas, fornecer listagens de clientes e seu histórica de consultas, buscar paciente por nome e editar dados existentes, particularmente no menu de clientes.
A organização desse repositório está disposta da seguinte forma:
📁 - GerenciamentoOtica
│
└─── bin
│
└─── include
│
├──consultas.h
├──paciente.h
├──tratrativas.h
│
└─── resources
│
├──dados.txt
│
└─── src
│
├──consultas.c
├──main.c
├──paciente.c
├──tratrativas.c
│
└───test
│
└───README.md
Nesse projeto, o sistema de gerenciamento de ótica foi estruturado a partir do uso de listas encadeadas, que permitem percorrer a lista apenas em uma direção, do início para o fim.
As listas encadeadas são compostas por nós que contêm dados e um ponteiro para o próximo nó na sequência. Essa estrutura oferece uma abordagem eficiente para lidar com coleções de dados dinâmicas.
Apesar de permitir apenas o percurso sequencial da lista, as listas encadeadas simples oferecem uma solução eficaz para diversas aplicações de gerenciamento de dados, especialmente quando a ordem dos elementos é importante e as operações de inserção e remoção são frequentes.
As principais vantagens apresentadas pelo uso de Listas encadeadas são:
-
Flexibilidade: Oferecem flexibilidade na inserção e remoção de elementos, uma vez que não requerem uma alocação contígua de memória.
-
Inserção e remoção eficiente: Em comparação com estruturas de dados como vetores, as listas encadeadas oferecem operações eficientes de inserção e remoção de elementos, especialmente quando se trata de operações no meio da lista.
-
Baixo custo de realocação: A inserção e remoção de elementos em uma lista encadeada não requerem realocação de memória, o que pode ser vantajoso em situações onde a quantidade de elementos na lista é desconhecida ou variável.
As principais desvantagens apresentadas pelo uso de Listas encadeadas são:
-
Acesso sequencial e menor desempenho: O acesso aos elementos de uma lista encadeada é sequencial, o que pode resultar em desempenho inferior em comparação com estruturas de dados que oferecem acesso aleatório, como arrays.
-
Consumo de memória: As listas encadeadas podem consumir mais memória do que outras estruturas de dados, devido à necessidade de armazenar ponteiros adicionais para cada elemento.
- Descrição: Esta função cria um novo nó de consulta e o adiciona à lista encadeada de consultas. Se a lista estiver vazia, o novo nó será o primeiro da lista.
Consulta *adiciona_consulta(Consulta * lista_consultas, Consulta nova_consulta);
- Descrição: Esta função solicita ao usuário as informações necessárias para criar uma nova consulta: data, preço e descrição. Em seguida, cria e retorna uma estrutura de consulta preenchida com essas informações.
Consulta nova_consulta(int *qnt);
- Descrição: Esta função imprime os detalhes de todas as consultas presentes na lista encadeada. Se a lista estiver vazia, uma mensagem indicando que não há consultas é exibida.
void imprimir_consultas(Consulta *lista_consultas);
- Descrição: Esta função busca um nó na lista de consultas com o ID fornecido e remove-o da lista. Se o nó com o ID especificado não for encontrado, a função exibe uma mensagem indicando isso.
Consulta *remove_consulta(Consulta *lista_consultas, int id_digitado);
- Descrição: Esta função busca um paciente na lista de pacientes com o CPF fornecido.Se o paciente com o CPF especificado for encontrado, ele é retornado. Caso contrário, NULL é retornado, indicando que o paciente não foi encontrado.
Paciente *encontra_paciente(Paciente *lista_pacientes, char cpf[20]);
- Descrição: Esta função solicita ao usuário as informações necessárias para criar uma nova consulta, como data, preço e descrição. Em seguida, solicita o CPF do paciente ao qual deseja adicionar a consulta. Se o paciente com o CPF especificado existir na lista de pacientes, a nova consulta é adicionada ao seu histórico de consultas. Caso contrário, uma mensagem indicando que o paciente não existe é exibida.
Paciente *insere_consulta(Paciente *lista_pacientes, int *qnt);
- Descrição: Esta função solicita ao usuário o CPF do paciente do qual deseja remover a consulta. Se o paciente com o CPF especificado existir na lista de pacientes, a consulta com o ID fornecido é removida do seu histórico de consultas. Caso contrário, uma mensagem indicando que o paciente não existe é exibida.
Paciente *remover_consulta_lista_pacientes(Paciente *lista_pacientes, int id_digitado);
- Descrição: Esta função solicita ao usuário o CPF do paciente que deseja remover. Se o paciente com o CPF especificado existir na lista de pacientes, ele é removido da lista. Caso contrário, uma mensagem indicando que o paciente não existe é exibida.
Paciente *remover_paciente_lista_pacientes(Paciente * lista_pacientes);
- Descrição: Esta função percorre a lista de pacientes e remove o paciente com o CPF fornecido. Se o paciente com o CPF especificado for encontrado, ele é removido da lista. Caso contrário, uma mensagem indicando que o paciente não foi encontrado é exibida.
Paciente *remove_paciente(Paciente * lista_pacientes, char cpf[20]);
- Descrição: Esta função verifica se um CPF já está presente na lista de pacientes.
int verifica_cpf_paciente(Paciente *lista_pacientes, char cpf[20]);
- Descrição: Esta função verifica se o CPF editado de um paciente já existe na lista de pacientes, considerando o CPF antigo. Se o CPF editado for igual ao CPF antigo, significa que o CPF não foi alterado e retorna 1. Se o CPF editado for diferente do CPF antigo e já existir na lista de pacientes, retorna 0. Caso contrário, retorna 1.
int verifica_cpf_paciente_edicao(Paciente *lista_pacientes, char cpf_editado[20], char cpf_antigo[20]);
- Descrição: Esta função solicita ao usuário o CPF do paciente que deseja editar. Se o paciente com o CPF especificado existir na lista de pacientes, ele é editado. Caso contrário, uma mensagem indicando que o paciente não existe é exibida.
Paciente *editar_paciente_lista_pacientes(Paciente *lista_pacientes);
- Descrição: Esta função busca um paciente na lista de pacientes com o CPF antigo fornecido e edita suas informações. Se o paciente com o CPF antigo especificado for encontrado, o usuário pode editar o CPF, nome e idade do paciente. Caso contrário, uma mensagem indicando que o paciente não foi encontrado é exibida.
Paciente *edita_paciente(Paciente * lista_pacientes, char cpf_antigo[20]);
- Descrição: Esta função cria um novo nó para armazenar as informações do paciente fornecido e o adiciona à lista de pacientes de forma ordenada pelo nome do paciente.
Paciente *adiciona_paciente(Paciente *lista_pacientes, Paciente paciente);
- Descrição: Esta função solicita ao usuário as informações necessárias para criar um novo paciente, como CPF, nome e idade. Em seguida, cria e retorna uma estrutura de paciente com essas informações.
Paciente novo_paciente(Paciente * lista_pacientes);
- Descrição: Esta função busca na lista de pacientes por um paciente cujo nome contenha a sequência de caracteres especificada. Se um paciente com o nome especificado for encontrado, suas informações são exibidas, incluindo o histórico de consultas, se houver.
void buscar_paciente_por_nome(Paciente *lista_pacientes, char *nome);
- Descrição: Esta função percorre a lista de pacientes e exibe as informações de cada paciente, incluindo seu nome, CPF, idade e seu histórico de consultas, se houver. Caso não haja pacientes cadastrados, uma mensagem indicando isso é exibida.
void lista_paciente(Paciente *lista_pacientes);
- Descrição: Esta função cria ou abre um arquivo de texto especificado e escreve nele as informações dos pacientes presentes na lista de pacientes fornecida, juntamente com seus respectivos históricos de consultas.
void escreve_no_arquivo(Paciente *lista_para_pacientes, char *local_do_arquivo);
- Descrição: Esta função verifica se a lista de pacientes está vazia.
Paciente lista_vazia(Paciente *lista_pacientes);
- Descrição: Esta função abre um arquivo de texto especificado, lê as informações dos pacientes e suas consultas e os carrega na lista de pacientes fornecida. Ela retorna a lista de pacientes atualizada.
Paciente *ler_do_arquivo(char *local_do_arquivo, Paciente *lista_para_pacientes, int *qnt);
- Descrição: Esta função verifica se todos os caracteres da string são dígitos (0-9).
int numero_inteiroc(char *str);
- Descrição: Esta função verifica se todos os caracteres da string são letras (alfabéticas) ou espaços em branco.
int contem_apenas_letras(char *str);
- Descrição: Esta função verifica se uma data fornecida está em um formato válido e representa uma data válida do calendário.
int data_valida(char *data);
- Descrição: Esta função formata um número de CPF para o formato XXX.XXX.XXX-XX.
char *formata_cpf(char *cpf);
- Descrição: Esta função imprime um cabeçalho formatado com o tipo de linha e um título.
void cabecalho(char* linha, char* titulo);
- Descrição: Esta função imprime uma mensagem para o usuário solicitando que ele pressione a tecla ENTER para continuar a execução. Após isso, aguarda até que a tecla ENTER seja pressionada.
void pressiona_enter();
- Descrição: Esta função formata uma string para que a primeira letra de cada palavra seja maiúscula e as demais minúsculas.
void formata_string(char *str);
- Descrição: Esta função converte todos os caracteres de uma string para letras maiúsculas.
void upper_string(char *str);
- Descrição: Esta função apresenta um menu interativo para o usuário, permitindo-lhe executar várias operações relacionadas à manipulação de uma lista de pacientes e consultas. As operações incluem adicionar,remover, editar, buscar e listar pacientes e consultas.
void menu(Paciente *lista_para_pacientes, char *local_do_arquivo);
- Descrição: inicializa o local do arquivo onde os dados serão armazenados e a lista de pacientes como vazia. Em seguida, chama a função menu para iniciar a interação com o usuário e manipular os dados dos pacientes e consultas de acordo com as opções do menu
void menu(Paciente *lista_para_pacientes, char *local_do_arquivo);
Certifique-se de que você possui um compilador C instalado. Recomendamos o uso do GCC para compilar o código.
Aqui, é válido salientar que as funções implementadas na pasta "consultas" e "paciente" serão chamadas no arquivo main.c, que está fora da pasta.
Para compilar o código, certifique-se que está no caminho correto para a pasta scr e digite o seguinte comando no terminal:
gcc -o main main.c
Em seguida, para executar, digite:
./main