Skip to content

frankleitelemoscosta/Orientacao-a-objeto

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PROJETO-DO-CONSULTÓRIO-AUTOMATIZADO

INTRODUÇÃO

Esse projeto tem por objetivo apresentar o gerenciamento de um consultório médico. Nossa atual realidade apresenta um auto nível de desenvolvimento técnico e tecnologico, e a tecnologia nos trouxe comodidade, e praticidade, um microondas permite ao individuo ter seu alimento rapidamente aquecido, o computador permite o armazenamento de uma grande quantidade de informações no mesmo lugar, alem disso ainda permite o processamento de varias ações ao mesmo tempo, muitos e muitos dados em pouquissimo tempo, é uma realidade inevitável atualmente, esse projeto traz um pouco dessa realidade ao mundo da medicina, com o intuito de trazer agilidade nos processos rotineiros, demonstrarei nos demais paragrafos como modelei o processo de gerenciamento de um consultório médico, detalhando minhas decisões de implementação, baseadas no diagrama de classe que meu orientador Eduardo Habib forneceu para que esse projeto fosse desenvolvido.

DECISÕES DE IMPLEMENTAÇÃO E ATUALIZAÇÃO DO DIAGRAMA DE CLASSES

A primeira decisão de implementação foi a de criar um menu, onde o usuário pudesse acessar todas as funcionalidades do programa, e desde já tambem fiz uma primeira modelagem do software para que pudesse ser um norte para criação do programa, tal primeira versão é esta que se segue:

PRIMEIRA VERÇÃO DO DIAGRAMA DE CLASSE

No meu menu, implementado em C++, alem das opções para o usuário usar alguma funcionalidade foi adicionado uma opção para limpar a tela do programa com o intuito de não poluir visualmente a interface para o usuário.

Após a implementação do menu decidi que era necessário iniciar o desenvolvimento das funcionalidades do mesmo, com isso em mente criei a classe consultório no meu projeto, essa classe dá partida para todas as listas e demais classes consti- tuintes do projeto, ou seja antes de acessar qualquer outra classe o programa vai passar por esta classe, sendo assim ela teria de ser a primeira a ser implementada após o menu.

Depois da implementação da classe consultório decidi implementar a classe médico para que fosse possível o cadastro de um médico no sistema, possibilitando ao usuário do sistema inserir, listar e remover um médico do programa, e com isso em mente decidi adicionar ao diagrama essa nova lista, como mostra o print:

diagrama com lista medico

Com a implementação da lista de médicos decidi implementar uma classe que iden- ficasse melhor o médico do que apenas a sua especialidade e CRM, e que posteriormente seria usada em outras listas como a de pacientes por exemplo, isso foi feito utilizando herança.

Neste ponto de desenvolvimento do projeto me deparei com a primera inserção com- pleta realizada, isto é: se faz até aqui possível cadastrar um médico de maneira integra, porem ainda me deparei com um possível problema quando em dialogo com meus companheiros de faculdade, e se tivesse apenas um medico na lista?, se não fosse tratado de maneira particular na parte do código onde seria efetuado a remoção me traria potenciais problemas, no caso de falha de segmentação, tornando meu software potencialmente mal elaborado, com isso decidi colocar um caso a parte no momento da remoção, o qual possibilitou ao meu programa lidar com essa situação de maneira adequa.

Com esse potencial problema resolvido tomei a decisão de permiti o cadastro de uma consulta no sistema, e com isso o uso de mais uma funcionalidade do sistema, em primeira mão apenas foi implementado a classe consulta com sua lista a hora da cosulta, cpf e CRM do médico, outra característica importante de uma consulta seria a data a qual a mesma acontecerá, por exemplo. Com isso tomei a decisão de implementar a classe data trazendo a funcionalidade de datar uma consulta, como mostra o diagrama:

Diagrama com lista consulta

Será mostrado nos casos de teste que mesmo com lixo de memoria na impressão da data da consulta decidi seguir em diante com o projeto por hora, e tratar desse problema com o projeto um pouco mais a frente, para que eu consiguisse ganhar tempo acelerando o processo de desenvolvimento do software. Então decidi partir para implementação da classe paciente, para que possibilitasse ao usuário inserir pacientes no sistema, resolvi que deviria modelar mais uma vez o diagrama que ficou desta forma:

Diagrama com listapaciente

Com todas as listas que deveriam ser incluidas ao código ja prontas decidi que deveria corrigir erros que ja vinha em versões anteriores, mas não me prejudicaram, como o erro do lixo apos a impressão da data, que apesar de se tratar de lixo de memoria não significava um problema pois a data era impressa sem lixo, esse erro aparecia sem sobreescrever dado algum,simples- mente aparecia.

Apesar de ja estar implementado no diagrama de classe ainda não havia cido adicionado a função de remover um paciente ao programa, então resolvi tomar esse atitude e inserir essa funcionalidade ao sistema, logo após comecei a tratar casos de cadastro duplicado como quando se inseri duas pessoas com o mesmo nome, ou ainda com o mesmo cpf.

Após isso ter cido feito, em conversa com a monitora da materia de programação percebi que havia me passado despercebido que usei a composição invertida, sabendo disso atualizei novamente o diagrama e adicionei o que ainda restava adicionar até esta fase de desenvolvimento do projeto, como mostro a seguir:

diagrama atualizado

diagrama atualizado composicao

diagrama uml composicao

Em conversa com colegas de faculdade cheguei a conclusão que seria necessario fazer com que o software procurasse o cpf na lista de pacientes, para que não ocorresse de o programa pegar um cpf que não existe ou de uma pessoa que não se trata de um paciente verdadeiro, e com isso tive de adicionar um novo método tanto a lista de medicos quanto a lista de pacientes que permitisse que fosse feito essa busca, com isso tive de atualizar o diagrama de classe, e apresento a seguir as mudanças:

Para que se tornasse um pouco mais proximo de um real consultório médico tomei a decisão de fazer com que o programa cadastrasse a ultima data da consulta de um paciente de maneira automatica, ou seja o que isso significa: antes de trazer isso ao software se fosse ser realizado um cadastro de paciente era pedido que fosse inserido manualmente, ou seja o sistema não era capaz de realizar tal tarefa sozinho, mas agora ele acaba de se tornar capaz. E aqui mostro o que foi alterado tambem no diagrama com essa implementação:

Automatizacao no processo de cadastrar ultima data de consulta

Como pedido por meu orientador tambem era necessário adicionar uma funcionalidade ao menu que fosse capaz de encontrar um paciente e uma consulta especifica de tal, alem de que segundo ele era necessário tambem contar o numero de pacientes que estavam no consultorio, e que não havia cido implementado ainda.

Por ultimo corrigi um erro que não prejudicou o desenvolvimento do projeto, porem o compilador ficou apontando durante todo o projeto dizendo que não condizia o retorno que era feito com o tipo das funções onde estes estavam, assim decide mudar as funções remover de todas as listas de booleano para void, para que fosse resolvido o problema.

Chego ao fim atualizando o restante do diagrama de classe que terá sua versão final disponizado aqui em meio aos repositórios.

CASOS DE TESTE

O primeiro teste realizado foi o teste do menu, esse teste foi realizado para que comprovasse se o menu estava funcionando sem nenhum erro, porem observe que nesse caso as funcionalidade do menu ainda não estavam implementadas, porem era possível escolher uma opção mesmo que ela não proporcionace algum resultado definitivo.

RESULTADOS DO PRIMEIRO CASO

primeiroteste

Os primeiros resultados foram positivos, como mostrado nas imagens o menu não apresentou nenhum erro, e apresoutou as informações ao usuário como esperado.

O segundo teste foi o de cadastro de um medico no sistema, porem de primeira mão o que foi implementado apenas foi a inserção do crm do médico e sua especialidade, pois a classe onde estaria informações pessoais como nome, cpf, endereço seria uma classe compar- tilhada com outras como a classe paciente, que tambem pode ter as mesmas catacterísticas.

RESULTADO DO SEGUNDO CASO DE TESTE E SUA ANÁLISE

Em uma primeira tentativa ocorreu um pequeno erro, devido a introdução de um construtor vazio em uma classe e a não declaração do mesmo no arquivo hpp dessa classe, o print a seguir evidencia o erro.

segundoteste

Após a correção desse erro foi realizado um segundo teste, com os seguintes resultados:

correçãodoerrodosegundoteste

como mostra a imagem o cadastro do médico ainda se tratava de apenas de inserir o CRM e sua especialização.

correcaodosegundoteste

Essa segunda imagem mostra o resultado da impressão das informações dos médicos cadastrados, afirmando o sucesso na implementação da classe medico e sua lista.

Após estes testes foi implementado por mim a remoção de um médico do sistema a lista que salva as informações de um médico é duplamente encadeada, assim a remoção de um nó é uma simples questão de redirecionar ponteiros internos de um nó corretamente.

RESULTADO DO TERCEIRO CASO DE TESTE E SUA ANÁLISE

Em uma primeira tentativa houve um erro, visto que não tinha cido tratado o caso para remoção de apenas um elemento na lista de medicos, o video a seguir mostra isso:

Primeiro.erro.Feito.com.o.Clipchamp.mp4

Em uma segunda tentativa após alterações no código da lista onde se localizava a função de remo- ção, foi obtido exito como mostra o curto video a seguir:

SEGUNDO.VIDEO.mp4

RESULTADO DO QUARTO CASO DE TESTE E SUA ANÁLISE

Foi feito a implementação de uma classe para dar nome e pegar outras informações do médico, foi feito uma primeira tentativa, e foi encontrado um erro de inserção de dados, como mostrar a imagem a seguir:

aprimoramento da coleta de informações do medico

Como mostra a imagem o programa não permitia ao usuário inserir, foi adicionado a função cin.ingnore(), que obriga o computador retirar o que estava no buffer, e o resultado foi:

correção de erro

È evidente que nesta tentativa foi possivel cadastrar um endereço para o médico o que não era possível antes da devida correção.

RESULTADO DO QUINTO CASO DE TESTE E SUA ANÁLISE

Esse caso de teste se trata da correção de um erro que não havia acontecido porem em dialogo com colegas de faculdade percebi que se tratava de um caso a ser tratado, quando se tem apenas um elemento na lista, para que não desse erro seria necessário fazer um tratamento diferente do apenas remover convencional implementei no projeto, em uma primeira tentativa obtive os seguintes resultados:

correcao.do.erro.de.remocao.de.um.unico.elemento.mp4

É facil notar que no inicio deste video havia um médico cadastrado na lista acessando a opção 8 de removo o medico e após entro novamente na opção 4, mostrando a lista de médicos vazia, confirmando o exito da tentativa de remover um elemento da lista quanto existe apenas um elemento.

RESULTADO DO SEXTO CASO DE TESTE E SUA ANÁLISE

Esse caso de teste se trata da implementação da classe consulta e de sua lista, visto que podemos ter diversas consultas em um mesmo consultorio, os resultado seguem no video a seguir:

TESTE.DA.IMPLEMENTACAO.DA.CLASSE.CONSULTA.mp4

Como mostra o curto video a implementação foi bem sucedida, sem casos de erro porem observe que tal classe ainda não estava armazenando a data da consulta.

RESULTADO DO SETIMO CASO DE TESTE E SUA ANÁLISE

Como já foi dito por mim por aqui, que em primeira mão foi criado a classe consulta sem suas características principais adicionadas, por isso neste caso de teste será mostrado a implementação de uma classe de codinome data para realizar esse função tão importante no processo de registro de uma consulta de maneira automatizada, na primeira tentativa obtive estes resultados:

implementação da classe data

introdução da classe data

È facil perceber que esta fase do projeto teve bons resultados de primeira mão, porem como o segundo print mostra junto com as informações da consulta veio um lixo de memória, logo após a impressão da data da consulta.

RESULTADO DO OITAVO CASO DE TESTE E SUA ANÁLISE

Agora implementei mais uma lista que se tratava da inserção de um paciente no sistema, porem em uma primeira tentativa obtive um erro, que se tratava da não implementação de um dos métodos, como mostra os prints do terminal:

ERRO da implementação da listapaciente

Na implementação da classe paciente, me passou despercebido o desenvolvimento do método que retornava um ponteiro que apontava para o nó anterior da lista, visto que usei uma lista duplamente encadeada.

RESULTADO DO NONO CASO DE TESTE E SUA ANÁLISE

Este teste foi realizado para comprovar se o lixo de memoria tinha cido removido, e o erro da não implementação do método que resgatava o ponteiro que aponta para um nó antecessor na lista do paciente tinha cido resolvido, a imagem a seguir mostra o sucesso neste teste:

correção do erro de impressao da data

O erro do lixo de memoria acontecia pois no método onde era impresso a data que tinha cido coloca para retornar um valor e não se estava sendo retornando nada, so- lucionei esse problema colocando o método para retornar o ano da data.

RESULTADO DO DECIMO CASO DE TESTE E SUA ANÁLISE

Aqui demonstro os resultados da implementação do remover na lista do paciente, em primeiro teste obtive os seguintes resultados:

Adicionando.o.remover.a.lista.de.pacientes.mp4

O que demonstro aqui é o cadastro de um paciente pela segunda opção do menu, logo após mostro os componentes da lista de pacientes com a opção 6 do menu, e por fim com a opção 9 removo o paciente cadastrado da lista, antes de encerrar imprimo novamente os dados da lista para mostrar o exito na tentativa de remoção de um paciente.

RESULTADO DO DECIMO PRIMEIRO CASO DE TESTE E SUA ANÁLISE

Aqui altero o código que para quando ocorresse o cadastro de um paciente com o nome identico a outro cadastrado isso fosse identificado e pedido para o usuario colocar um sobrenome para diferenciar, como mostra o curto video:

tratando.cadastro.duplo.Feito.com.o.Clipchamp.mp4

È fácil perceber no video que quando se cadastra uma pessoa com nome identico a uma ja cadastrada o software pede ao usuario para digitar um sobrenome, para que seja possível diferenciar desta pessoa já cadastrada, com isso confirmando o exito na implementação.

RESULTADO DO DECIMO SEGUNDO CASO DE TESTE E SUA ANÁLISE

Neste caso foi implentado um tratamento de cadastro, que se refere a duplicação de cpf o que em nosso mundo real não é permitido, para que não houvesse problema no cadastro tratei esse caso, em primeira tentativa obtive os seguintes resultados:

tratando.cadastro.duplo.erro.Feito.com.o.Clipchamp.mp4

O video mostra que quando ocorre o cadastro com dois cpfs iguais o software acaba por cadastrar em vez de impedir, esse erro ocorreu devido que deixei me passar despercebido que no momento de verificar era necessario fazer o software buscar os endereços seguintes nos nós na lista, foi feita a correção e os resultados foram:

Cadastro.duplicado.Feito.com.o.Clipchamp.mp4

RESULTADO DO DECIMO TERCEIRO CASO DE TESTE E SUA ANÁLISE

Esse caso se trata do teste para averiguar se quando cadastrado uma consulta vai ser cadastrado com um cpf de um paciente real e um medico que realmente trabalhe naquele hospital, os resultado são mostrados a seguir:

Tratamento do caso de não existir paciente ou medico no sistema

Como é possível ver se acaso não existir o paciente ou o médico no sistema ele mostrará ao usuário uma mensagem avisando que ou o médico não trabalha ali ou o paciente não está cadastrado.

RESULTADO DO DECIMO QUARTO CASO DE TESTE E SUA ANÁLISE

Desta vez fiz a implementação do cadastro da ultima consulta de um paciente de maneira automática alterarado o código da classe da lista do paciente, de primeira tentativa obtive os seguintes resultados:

tratando.erro.de.impressao.Feito.com.o.Clipchamp.mp4

È possível notar que apesar de ter ocorrido o cadastro de um paciente, medico e não foi necessário cadastrar uma consulta para perceber que era impossível o usuario vizualizar a data da ultima consulta de um paciente qualquer, alterando novamente o código com uma segunda tentativa obtive os seguintes resultados:

correção do erro de impressão

RESULTADO DO DECIMO QUINTO CASO DE TESTE E SUA ANÁLISE

Neste caso adicionei a impressão detalhada para os médicos e pacientes, ou seja, quando fosse imprimir seria necessário colocar o crm do médico ou no caso do paciente o cpf do mesmo, os resultado seguem a seguir:

impressão detalhada

correcaçao

Como é possível notar quando é chamado a função de impressão seja do paciente ou do médico é pedido o crm e o cpf, a impressão precisa mostra o sucesso na implementação.

RESULTADO DO DESCIMO SEXTO CASO DE TESTE E SUA ANÁLISE

Desta vez implementei mais uma funcionalidade ao menu do usuário para que fosse possivel encontrar um medico, e a consulta com um paciente especifico, uma primeira tentativa obtive estes resultados:

Captura de tela de 2022-10-30 01-50-25

Como é possivel notar neste print foi adicionado uma nova funcionalidade ainda não implementada e com ela foi encontrado um paciente especifico, confirmando o exito na implementação.

RESULTADO DO DESCIMO SETIMO CASO DE TESTE E SUA ANÁLISE

Este caso se trata da mudança na maneira de contar o número de pacientes presentes no consultório passa a ser bem simples e menos custioso, pois se trata agora apenas de incrementar e decrementar uma variável quando inserido, ou removido um paciente da lista. Em uma primeira tentativa obtive os seguintes resultados:

contagem

È fácil perceber que houve um erro, que se trata nesse caso da não impressão do número de pacientes visto que de acordo com o que implementei o software deveria ser mostrado assim que fosse cadastrado um paciente novo, o erro ocorreu pois no momento de incrementar e decrementar a variavel eu não estava armazenando em lugar algum, fiz a correção deste erro e obtive os seguintes resultados:

Correçao da contagem de pacientes

Como havia dito ao fim do cadastro deveria mostrar o numero de pacientes como ocorreu desta vez, demonstrando sucesso em minha correção.

RESULTADO DO DECIMO OITAVO CASO DE TESTE E SUA ANÁLISE

Estava ocorrendo desde a criação das listas no projeto uma notificação de warning feita pelo compilador visto que em uma função do tipo boolena estava sendo retornado como um em uma função void, ou seja, não era retornado nada, neste teste reestruturei as partes do código que aconteciam esse problema, e obtive os seguintes resultados:

ERRO DOS WARNINGS

CORREÇÃO DOS WARNINGS

Como é mostrado na segunda imagem o compilador parou de advertir que havia um retorno vazio nas funções de remoção de elementos das listas do projeto.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published