# Projeto 4: Sistema de Agendamento de Consultas Médicas

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:

  1. Pessoa (classe base)

    • Atributos: nome, idade.
    • Métodos: getters e setters para nome e idade.
  2. 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.
  3. Paciente (herda de Pessoa)

    • Atributos: número de contacto.
    • Métodos: getters e setters para o número de contacto.
  4. 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.
  5. 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.
<< Encapsulamento, Herança e... Índice