Componentes: Henrique Kruczkievicz e Maria Alice de França
Objetivos: O objetivo geral do projeto é desenvolver um código simples e funcional, orientado a objetos, utilizando a linguagem Python, para simular o cadastro de pacientes do consultório odontológico. Como objetivos específicos para o projeto temos: - Aplicar os conhecimentos adquiridos durante o semestre de Orientação a Objetos para estruturação de classes e subclasses que representem os pacientes e dentistas e, atributos que representem os dados dos mesmos. - Criar métodos que permitam simular o cadastro e alteração do cadastro de pacientes e dentistas, respeitando o encapsulamento. - Colaborar para o aprendizado da comunidade em conceitos e aplicações de POO, através do projeto de extensão que procura solucionar um problema encontrado no consultório odontológico.
Metodologia de desenvolvimento: Coleta de Informações: Para o desenvolvimento do projeto, foi necessário levantar alguns requisitos que a empresa tinha para desenvolver o código. A empresa não possui um sistema de cadastro de pacientes, os dados ficam anotados em fichas que são arquivadas em um armário do consultório após a finalização do tratamento. Em um primeiro momento, verificou-se então, a necessidade de um sistema de cadastro de pacientes, para ter as principais informações e o histórico de consultas salvos e separados em pastas para cada dentista. Além disso, a secretária comentou que atualmente estão passando as receitas odontológicas de físicas para online e que seria necessário solicitar mais alguns dados para poder fazer o cadastro na receita online. Além dos dados já solicitados normalmente como nome completo e convênio, foi implementado telefone, data de nascimento, CPF e CEP. Solução Proposta: Depois que as informações foram coletadas, a ideia foi criar uma simulação de um sistema de cadastro de pacientes, para a empresa entender como funcionaria o sistema. Desenvolvimento do Código: Para desenvolver o código, a equipe utilizou os conceitos da matéria de Introdução à Programação Orientada a Objetos. Criando classes e subclasses, que representam a consulta, paciente, dentista e o sistema clínico. Essas classes recebem atributos que armazenam os dados dos pacientes e dentistas e, métodos que utilizam e modificam os atributos, respeitando o encapsulamento. Permitindo o cadastro de pacientes e dentistas, armazenamento de dados de ambos, registro de consultas e procedimentos realizados, bem como o cancelamento dos mesmos, consulta aos dados dos pacientes e dentistas e acesso ao histórico clínico dos pacientes, entre outras funcionalidades.
# Código de IPO - Henrique Kruczkievicz e Maria Alice de França
#=======================================================================#
class Pessoa:
def __init__(self, nome, cpf, nascimento, telefone, cep, numero):
self.nome = nome
self.cpf = cpf
self.nascimento = nascimento
self.telefone = telefone
self.cep = cep
self.numero = numero
def exibir_dados(self):
print(f"Nome: {self.nome}")
print(f"CPF: {self.cpf}")
print(f"Nascimento: {self.nascimento}")
print(f"Telefone: {self.telefone}")
print(f"CEP: {self.cep}")
print(f"Número: {self.numero}")
def editar_dado(self):
print("\nO que deseja editar?")
print("1 - Nome")
print("2 - CPF")
print("3 - Nascimento")
print("4 - Telefone")
print("5 - CEP")
print("6 - Número")
opcao = input("Escolha uma opção: ")
if opcao == "1":
self.nome = input("Novo nome: ")
elif opcao == "2":
self.cpf = input("Novo CPF: ")
elif opcao == "3":
self.nascimento = input("Nova data de nascimento: ")
elif opcao == "4":
self.telefone = input("Novo telefone: ")
elif opcao == "5":
self.cep = input("Novo CEP: ")
elif opcao == "6":
self.numero = input("Novo número: ")
else:
print("Opção inválida.")
def consultar_dados(self):
print("\nO que deseja consultar?")
print("1 - Nome")
print("2 - CPF")
print("3 - Nascimento")
print("4 - Telefone")
print("5 - CEP")
print("6 - Número")
print("7 - Todos os dados")
opcao = input("Escolha uma opção: ")
if opcao == "1":
print(f"Nome: {self.nome}")
elif opcao == "2":
print(f"CPF: {self.cpf}")
elif opcao == "3":
print(f"Nascimento: {self.nascimento}")
elif opcao == "4":
print(f"Telefone: {self.telefone}")
elif opcao == "5":
print(f"CEP: {self.cep}")
elif opcao == "6":
print(f"Número: {self.numero}")
elif opcao == "7":
self.exibir_dados()
else:
print("Opção inválida.")
#=======================================================================#
#=======================================================================#
class Consulta:
def __init__(self, data, procedimento, observacao=""):
self.data = data
self.procedimento = procedimento
self.observacao = observacao
#=======================================================================#
#=======================================================================#
class Paciente(Pessoa):
def __init__(self, nome, cpf, nascimento, telefone, cep, numero, dentista, convenio):
super().__init__(nome, cpf, nascimento, telefone, cep, numero)
self.dentista = dentista
self.convenio = convenio
self.historico = []
def adicionar_consulta(self, consulta):
self.historico.append(consulta)
def cancelar_consulta(self):
if not self.historico:
print("Nenhuma consulta para cancelar.")
return
print("\nConsultas registradas:")
for i, consulta in enumerate(self.historico, 1):
print(f"{i} - {consulta.data} - {consulta.procedimento}")
escolha = input("Número da consulta para cancelar: ")
if escolha.isdigit() and 1 <= int(escolha) <= len(self.historico):
del self.historico[int(escolha)-1]
print("Consulta cancelada.")
else:
print("Opção inválida.")
def mostrar_historico(self):
if not self.historico:
print("Nenhuma consulta registrada.")
else:
print(f"\nHistórico de consultas de {self.nome}:\n")
for consulta in self.historico:
print(f"Data: {consulta.data}")
print(f"Procedimento: {consulta.procedimento}")
print(f"Observações: {consulta.observacao}")
print("-" * 30)
#=======================================================================#
#=======================================================================#
class Dentista(Pessoa):
def __init__(self, nome, cpf, nascimento, telefone, cep, numero):
super().__init__(nome, cpf, nascimento, telefone, cep, numero)
self.pacientes = []
def adicionar_paciente(self, paciente):
self.pacientes.append(paciente)
def listar_pacientes(self):
if not self.pacientes:
print("Nenhum paciente cadastrado.")
else:
for paciente in self.pacientes:
print("-" * 30)
paciente.exibir_dados()
def buscar_paciente(self, cpf):
for paciente in self.pacientes:
if paciente.cpf == cpf:
return paciente
return None
#=======================================================================#
#=======================================================================#
class SistemaClinico:
def __init__(self):
self.dentistas = []
self.dentistas.append(Dentista("Fernando", "11111111111", "01/01/1980", "47911111111", "12345678", "100"))
self.dentistas.append(Dentista("Fernanda", "22222222222", "02/02/1982", "47922222222", "12345679", "101"))
self.dentistas.append(Dentista("Lucas", "33333333333", "03/03/1984", "47933333333", "12345680", "102"))
def buscar_dentista_por_indice(self):
print("\nDENTISTAS DISPONÍVEIS:")
for i, dentista in enumerate(self.dentistas, 1):
print(f"{i} - Dr(a). {dentista.nome}")
opcao = input("Escolha o número do dentista: ")
if opcao.isdigit() and 1 <= int(opcao) <= len(self.dentistas):
return self.dentistas[int(opcao) - 1]
else:
print("Opção inválida.")
return None
def cadastrar_dentista(self):
print("\nCADASTRAR DENTISTA")
nome = input("Nome: ")
cpf = input("CPF: ")
nascimento = input("Nascimento: ")
telefone = input("Telefone: ")
cep = input("CEP: ")
numero = input("Número: ")
self.dentistas.append(Dentista(nome, cpf, nascimento, telefone, cep, numero))
print("Dentista cadastrado com sucesso.")
def cadastrar_paciente(self):
print("\nCADASTRAR PACIENTE")
dentista = self.buscar_dentista_por_indice()
if not dentista:
return
nome = input("Nome: ")
cpf = input("CPF: ")
nascimento = input("Nascimento: ")
telefone = input("Telefone: ")
cep = input("CEP: ")
numero = input("Número: ")
convenio = input("Tipo de atendimento (convenio/particular): ")
paciente = Paciente(nome, cpf, nascimento, telefone, cep, numero, dentista, convenio)
dentista.adicionar_paciente(paciente)
print("Paciente cadastrado com sucesso.")
def editar_dados_dentista(self):
dentista = self.buscar_dentista_por_indice()
if dentista:
dentista.editar_dado()
def editar_dados_paciente(self):
dentista = self.buscar_dentista_por_indice()
if dentista:
cpf = input("CPF do paciente: ")
paciente = dentista.buscar_paciente(cpf)
if paciente:
paciente.editar_dado()
else:
print("Paciente não encontrado.")
def listar_pacientes(self):
dentista = self.buscar_dentista_por_indice()
if dentista:
dentista.listar_pacientes()
def registrar_consulta(self):
dentista = self.buscar_dentista_por_indice()
if dentista:
cpf = input("CPF do paciente: ")
paciente = dentista.buscar_paciente(cpf)
if paciente:
data = input("Data: ")
procedimento = input("Procedimento: ")
obs = input("Observações: ")
paciente.adicionar_consulta(Consulta(data, procedimento, obs))
print("Consulta registrada.")
else:
print("Paciente não encontrado.")
def cancelar_consulta(self):
dentista = self.buscar_dentista_por_indice()
if dentista:
cpf = input("CPF do paciente: ")
paciente = dentista.buscar_paciente(cpf)
if paciente:
paciente.cancelar_consulta()
else:
print("Paciente não encontrado.")
def ver_historico(self):
dentista = self.buscar_dentista_por_indice()
if dentista:
cpf = input("CPF do paciente: ")
paciente = dentista.buscar_paciente(cpf)
if paciente:
paciente.mostrar_historico()
else:
print("Paciente não encontrado.")
def consultar_dados_paciente(self):
dentista = self.buscar_dentista_por_indice()
if dentista:
cpf = input("CPF do paciente: ")
paciente = dentista.buscar_paciente(cpf)
if paciente:
paciente.consultar_dados()
else:
print("Paciente não encontrado.")
#=======================================================================#
#=======================================================================#
def menu():
sistema = SistemaClinico()
while True:
print("-" * 65)
print("SISTEMA DE CADASTRO - INSTITUTO ODONTOLÓGICO GUESSER")
print("-" * 65)
print("1 - Cadastrar Dentista")
print("2 - Cadastrar Paciente")
print("3 - Editar Dados de Dentista")
print("4 - Editar Dados de Paciente")
print("5 - Listar Pacientes por Dentista")
print("6 - Registrar Consulta")
print("7 - Cancelar Consulta")
print("8 - Ver Histórico de Paciente")
print("9 - Consultar Dados do Paciente")
print("10 - Sair")
print("-" * 40)
opcao = input("Escolha uma opção: ")
if opcao == "1":
sistema.cadastrar_dentista()
elif opcao == "2":
sistema.cadastrar_paciente()
elif opcao == "3":
sistema.editar_dados_dentista()
elif opcao == "4":
sistema.editar_dados_paciente()
elif opcao == "5":
sistema.listar_pacientes()
elif opcao == "6":
sistema.registrar_consulta()
elif opcao == "7":
sistema.cancelar_consulta()
elif opcao == "8":
sistema.ver_historico()
elif opcao == "9":
sistema.consultar_dados_paciente()
elif opcao == "10":
print("Saindo...")
break
else:
print("Opção inválida.")
input("\nPressione Enter para continuar...")
menu()