Projeto: Sistema de Agendamento de Consultas Médicas
Contextualização
Este projeto tem como objetivo criar um Sistema de Agendamento de Consultas Médicas, onde será possível gerir médicos, pacientes e consultas de forma eficiente. O sistema deve suportar diferentes tipos de especialidades médicas, permitindo ao utilizador agendar, listar, cancelar consultas, bem como registar novos médicos e pacientes.
Este projeto será desenvolvido de forma progressiva, permitindo a introdução e consolidação de conceitos como Encapsulamento, Herança, Polimorfismo, e o uso de Ficheiros para persistência de dados. A aplicação será baseada num menu simples de linha de comando, e deverá implementar métodos de classe, métodos de instância, getters e setters, com a correta validação de dados.
Funcionalidades Esperadas
O sistema deverá incluir as seguintes funcionalidades principais:
1. Gestão de Médicos
- Registar novos médicos com nome, especialidade e número de registo médico.
- Listar todos os médicos registados.
- Consultar detalhes de um médico específico (nome, especialidade, consultas realizadas).
2. Gestão de Pacientes
- Registar novos pacientes com nome, idade e número de contacto.
- Listar todos os pacientes registados.
- Consultar detalhes de um paciente específico (nome, idade, consultas realizadas).
3. Agendamento de Consultas
- Agendar uma nova consulta, associando um médico e um paciente, bem como a data e a hora da consulta.
- Cancelar uma consulta existente.
- Listar todas as consultas agendadas, permitindo filtrar por médico ou por paciente.
4. Armazenamento e Persistência de Dados
- Os dados de médicos, pacientes e consultas devem ser guardados em ficheiros de texto, permitindo que o sistema mantenha a informação entre execuções.
- Os ficheiros devem ser organizados de forma clara, e as operações de leitura e escrita devem ser eficientes.
Estrutura do Sistema
O sistema será dividido em várias classes:
-
Pessoa (classe base)
- Atributos: nome, idade.
- Métodos: getters e setters para nome e idade.
-
Médico (herda de Pessoa)
- Atributos: especialidade, número de registo médico.
- Métodos: getters e setters para especialidade e número de registo médico.
-
Paciente (herda de Pessoa)
- Atributos: número de contacto.
- Métodos: getters e setters para o número de contacto.
-
Consulta
- Atributos: médico, paciente, data e hora.
- Métodos: getters e setters para data e hora, e para aceder aos detalhes do médico e paciente associados.
-
GestorConsultas (classe de gestão)
- Atributos: lista de médicos, lista de pacientes, lista de consultas.
- Métodos: adicionar médico, adicionar paciente, agendar consulta, cancelar consulta, listar consultas, etc.
- Esta classe será responsável por gerir toda a interação com os ficheiros, assegurando que os dados são guardados e lidos corretamente.
Funcionalidades de Menu
O sistema deve apresentar um menu de opções, como o seguinte:
=== Sistema de Agendamento de Consultas Médicas ===
1. Registar Médico
2. Registar Paciente
3. Agendar Consulta
4. Cancelar Consulta
5. Listar Consultas
6. Listar Médicos
7. Listar Pacientes
8. Sair
Escolha uma opção:
=== Registar Novo Médico ===
Nome: Dr. João Silva
Especialidade: Cardiologia
Número de Registo Médico: 12345
Médico registado com sucesso!
=== Registar Novo Paciente ===
Nome: Maria Costa
Idade: 34
Número de Contacto: 912345678
Paciente registado com sucesso!
=== Agendar Consulta ===
Insira o nome do médico: Dr. João Silva
Insira o nome do paciente: Maria Costa
Data (dd-mm-aaaa): 15-10-2024
Hora (hh:mm): 14:30
Consulta agendada com sucesso!
=== Consultas Agendadas ===
1. Médico: Dr. João Silva, Paciente: Maria Costa, Data: 15-10-2024, Hora: 14:30
Tarefas Progressivas
O projeto será desenvolvido em várias etapas, começando pelas funcionalidades mais simples e progredindo para as mais complexas:
Etapa 1: Implementar o registo de médicos e pacientes
- Cria as classes Médico e Paciente, ambas herdeiras da classe Pessoa.
- Define atributos e métodos de classe e de instância, utilizando getters e setters para encapsular os atributos.
- Implementa a funcionalidade para registar médicos e pacientes através de entradas do utilizador no menu de opções.
Etapa 2: Implementar o agendamento de consultas
- Cria a classe Consulta, com atributos para o médico, paciente, data e hora.
- Implementa métodos para agendar consultas, associando um médico e um paciente à consulta.
- Acrescenta uma opção no menu para permitir ao utilizador agendar novas consultas, com a devida validação de médicos e pacientes existentes.
Etapa 3: Implementar a funcionalidade de cancelamento de consultas
- Implementa um método que permita ao utilizador procurar uma consulta existente e cancelá-la, removendo-a da lista de consultas.
- Adiciona a funcionalidade de cancelar consultas no menu, onde o utilizador poderá selecionar uma consulta para cancelamento, baseada no médico e paciente.
Etapa 4: Implementar a leitura e escrita de dados em ficheiros
- Introduz a leitura e escrita de dados num ficheiro de texto para garantir a persistência de médicos, pacientes e consultas entre execuções do programa.
- Implementa métodos que gravem novos médicos, pacientes e consultas no ficheiro e que carreguem estes dados ao iniciar o programa.
- Assegura que todas as alterações (adição ou cancelamento de consultas, registo de novos médicos ou pacientes) são refletidas no ficheiro.
Etapa 5: Melhorar o sistema com validação de dados e ordenação de consultas por data/hora
- Implementa mecanismos de validação de entradas de dados, como verificar se os campos de nome, especialidade ou número de contacto são válidos.
- Melhora o sistema com a capacidade de ordenar consultas por data e hora, facilitando a gestão do calendário de consultas.
- Adiciona opções no menu para listar as consultas por ordem cronológica, tanto para um médico específico como para um paciente.