Baixe o app para aproveitar ainda mais
Prévia do material em texto
1 UNIVERSIDADE PAULISTA - UNIP EaD Projeto Integrado Multidisciplinar Curso Superior de Tecnologia Gabriel Cardoso Da Silva - 0594517 Sistema em C para cadastrar pacientes diagnosticados com covid-19 Belo Horizonte 2021 2 Gabriel Cardoso Da Silva - 0594517 Sistema em C para cadastrar pacientes diagnosticados com covid-19 Projeto Integrado Multidisciplinar para obtenção do título de graduação em (Análise e Desenvolvimento de Sistemas) apresentado à Universidade Paulista – UNIP EaD. Orientador(a): Marcelo Santos. Belo Horizonte 2021 3 RESUMO A pandemia global estimulou uma demanda por inovação médica e muitas empresas começaram a investir no desenvolvimento de softwares de saúde. Países ao redor do mundo exigem tecnologia e equipamentos para combater o vírus: testes, máscaras respiratórias, equipamentos de proteção, ventiladores, desfibriladores e muito mais. À medida que aprendemos mais sobre a doença, vemos as tecnologias digitais de saúde cada vez mais sendo adotadas neste contexto. Como o novo coronavírus infecta um número exponencial de pessoas, os métodos convencionais de rastreamento para identificar aqueles que foram diagnosticados com o vírus e limitar a transmissão não são suficientes. É por isso que governos em todo o mundo têm recorrido ao uso de tecnologia para esse fim. Ao rastrear os usuários, as autoridades são capazes de identificar os indivíduos que foram contaminados e, posteriormente, alertar aqueles que podem estar próximos de alguém com covid-19. Palavras-chave: Vírus, Corona, Pandemia, Projeto, Cadastro. 4 ABSTRACT A global pandemic stimulates a demand for medical innovation and many companies set out to invest in the development of healthcare software. Countries around the world technology and equipment to fight the virus: testicles, respiratory masks, protective equipment, ventilators, defibrillators and more. As we learn more about the disease, we see digital health technologies increasingly being adopted in this context. The global pandemic has spurred a demand for medical innovation and many companies have started to invest in the development of healthcare software. Countries around the world require technology and equipment to fight the virus: tests, respiratory masks, protective equipment, ventilators, defibrillators and more. As we learn more about the disease, we see digital health technologies increasingly being adopted in this context. Because the new coronavirus infects an exponential number of people, conventional screening methods to identify those who have been diagnosed with the virus and limit transmission are not enough. That is why governments around the world have resorted to using technology for this purpose. By tracking users, authorities are able to identify individuals who have been infected and subsequently alert those who may be close to someone with covid-19. Keywords: Virus, Corona, Pandemic, Project, Registration. 5 SUMÁRIO 1. INTRODUÇÃO .................................................................................................................. 6 2. DESENVOLVIMENTO ................................................................................................... 7 3. MANUAL DO USUÁRIO ............................................................................................. 8 4. COMPILAR O PROGRAMA ...................................................................................... 11 5. CÓDIGO FONTE ............................................................................................................. 14 7. CONCLUSÃO .................................................................................................................... 26 REFERÊNCIAS .............................................................................................................. 27 6 1. INTRODUÇÃO A pandemia global estimulou uma demanda por inovação médica e muitas empresas começaram a investir no desenvolvimento de softwares de saúde. Para atender com excelência os requisitos de escalabilidade e segurança do projeto, vários aspectos deverão ser considerados, os quais são requisitos para a elaboração deste projeto. Um projeto para atender as requisições do cadastramento de pacientes e quais serão os protocolos utilizados visando a segurança da informação. A infraestrutura deverá ser escalável, possibilitando o crescimento do sistema de dados em metas de expansão definidas pela necessidade futura. Sendo a topologia física a ser escolhida a mais adequada a atender futuras demandas do cadastramento. Neste trabalho será abordada a metodologia utilizada para a proposta da implantação deste sistema de dados e o critério para a coleta de informações, atendendo de maneira satisfatória os requisitos funcionais requeridos. O objetivo primário do projeto será desenvolver um sistema em C (utilizando o Code::Blocks) que será utilizado pelos hospitais para cadastrar os pacientes que forem diagnosticados com Covid-19 e carecem de acompanhamento e monitoramento. 7 2. DESENVOLVIMENTO O desenvolvimento foi feito segundo os requerimentos passados pelos hospitais para cadastrar os pacientes que forem diagnosticados com covid-19 e carecem de um acompanhamento e monitoramento. Ao receber o diagnóstico positivo os profissionais da saúde devem realizar o login no sistema (informando o usuário e a senha) e informar os dados pessoais do paciente, como Nome, CPF, Telefone, Endereço (Rua, Número, Bairro, Cidade, Estado e CEP), Data de Nascimento e E mail, data do diagnóstico e informar alguma comorbidade do paciente (diabetes, obesidade, hipertensão, tuberculose, outros) que serão salvos em um Arquivo (a principal vantagem de um arquivo é que as informações armazenadas podem ser consultadas a qualquer momento).Após o cadastro, o sistema deverá calcular a idade e verificar se o paciente possui alguma comorbidade e se pertence ao grupo de risco (maiores de 65 anos). Caso o paciente pertença ao grupo de risco o sistema deverá salvar em um arquivo de texto o CEP e a idade do paciente para que essa informação possa ser enviada para a central da Secretaria da Saúde da cidade. 8 3. MANUAL DO USUÁRIO O programa em seu estado atual não necessita instalação complexa, apenas copie os arquivos para uma pasta de fácil acesso para uso e para mandar o arquivo dos pacientes em risco (risco.txt) com comorbidades para a secretaria de saúde. Caso não exista, crie um novo arquivo de texto vazio com o nome de “pacientes.txt” (sem aspas” na pasta do executável “covid19.exe” ou o programa retornará erro ao iniciar. O programa é bastante auto-explicativo em seu uso, com o cadastro perguntando passo a passo a próxima informação. Quanto à comorbidade, se não houver comorbidade então deve-se deixar em branco e o mesmo não irá computar como paciente de risco, caso tenho alguma deve-se digitar qual, e o mesmo será adicionado ao arquivo risco.txt para ser enviado mais tarde. Telas do programa: Figura 1: Ao iniciar a primeira tela é a de login. Na tela: login e senha padrão. 9 Figura 2: Tela de Menu com 4 opções. Menu simples com 4 opção de interação, Cadastro, Remoção, Listagem e para saída do programa. Figura 3: Opção 1 tela de cadastro. Na tela: exemplode cadastro 10 Ao cadastrar um paciente, o programa testará automaticamente se o mesmo é maior de 65 anos ou se possui comorbidade e salvará o CEP, idade e qual a comorbidade em um arquivo separado (risco.txt) para ser enviado à secretaria de saúde. Todos os pacientes cadastrados, com todos os dados são salvos em pacientes.txt e são carregados para a memória automaticamente ao abrir o programa. Figura 4: Opção 3, Mostrar a lista de pacientes. Na tela: Paciente cadastrado de exemplo, para conferência se o paciente já está cadastrado. Figura 5: Opção 2, tela para descadastrar, apaga o paciente selecionado, caso contenha erros no cadastro ou outro motivo pertinente, o mesmo também é removido do arquivo “pacientes.txt” 11 Figura 6: Opção 0, Sair do Programa. 3. COMPILAR O PROGRAMA O código fonte em C (covid19.cpp) deve ser aberto no CodeBlocks (usando o menu File -> Open e navegando até onde está salvo o arquivo covid19.cpp para abertura). 12 Primeiramente deverá ser alterada a senha padrão (user, 1234) no local apropriado com o comentário indicando. Para compilar o programa basta ir ao menu ”Build” e clicar na engrenagem amarela Build, não retornando nenhum erro é só rodar o programa em “Build-> Run”. 13 Depois de compilado não é necessário usar o CodeBlocks e o programa pode ser rodado na pasta em que o código fonte se encontra pelo arquivo executável “covid19.exe” 14 4. CÓDIGO FONTE #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #define MAX_PACIENTES 1000 //numero máximo de pacientes typedef enum { TELA_SAIR=-1, TELA_PRINCIPAL, //0 TELA_CADASTRAR, //1 TELA_DESCADASTRAR,//2 TELA_LISTAR_TODOS,//3 } Telas; typedef struct { char separador1[8], nome[32];//nome completo char telefone[14], endereco[50], cidade[30], estado[20], cpf[14]; char cep[12], email[32], comorbidade[30], separador[8]; int idade,dia,mes,ano,diaD,mesD,anoD; } Covid; typedef struct { Telas menu; int totalCovids; Covid pacientes[MAX_PACIENTES]; } CovidPacientes; int main (void) { int aA, mA, dA; 15 char usr[]="user",usuario[20]; //alterar o user para o usuário desejado int senhaL, senha=1234; //alterar o número 1234 para a senha escolhida //senha --------------------------------------- //verificar senha, "hard coded" while ( (strcmp(usr,usuario)!=0) || (senha!=senhaL)) { printf("\tDigite o usuario: \n"); fflush(stdin); gets(usuario); printf("\tDigite a senha: \n"); fflush(stdin); scanf("%d", &senhaL); system("cls"); //limpa a tela para WINDOWS ou DOS - Talvez não funcione em LINUX! } //--------------------------------------------- CovidPacientes cadastro; //zera todos os bytes de cadastro memset(&cadastro, 0x0, sizeof(cadastro)); //menu do cadastro cadastro.menu = TELA_PRINCIPAL; //abre o pacientes.txt para leitura, pacientes.txt deve ser criado caso não exista antes de abrir o cadastro FILE * memoria = fopen("pacientes.txt", "r"); FILE * risco; if (memoria == NULL) { printf("Erro ao abrir arquivo de memoria de pacientes. \nVoce deve criar o arquivo 'pacientes.txt' vazio antes da primeira execucao\n"); return 1; } 16 //lê todos os pacientes size_t lidos = fread(cadastro.pacientes, sizeof(Covid), MAX_PACIENTES, memoria); printf("Lidos %zd pacientes\n", lidos); //faz totalCovids conter a quantidade de pacientes lidos cadastro.totalCovids = (int)lidos; fclose(memoria); //pegar data atual----------------------------- time_t mytime; mytime = time(NULL); struct tm tm = *localtime(&mytime); aA=tm.tm_year+1900; //funções "tm" referentes ao time.h mA=tm.tm_mon+1; //ano, mes e dia ATUAL dA=tm.tm_mday; printf("Data: %d/%d/%d\n", dA, mA, aA); //--------------------------------------------- //início while (cadastro.menu != TELA_SAIR) { switch (cadastro.menu) { case TELA_PRINCIPAL: { printf("-------------------------------------\n"); printf("\tCADASTRO COVID 19:\n"); printf("-------------------------------------\n"); int opcao = -1; do { printf("Escolha uma opcao:\n"); printf("\tDigite 1 para cadastrar paciente\n"); printf("\tDigite 2 para remover paciente\n"); printf("\tDigite 3 para listar todos os pacientes\n"); printf("\tDigite 0 para sair do programa\n"); 17 scanf("%d", &opcao); //NOTA: sei que este código não é adequado mas é que é dificil encontrar //uma boa solução para o problema de lixo no buffer em C //Limpa o buffer para evitar problemas int c = 0; while ((c = getchar()) != '\n' && c != EOF) { } } while (opcao < 0 || opcao > 3);//se for menor que zero é invalido e maior que 3 está fora do intervalo if (opcao == 0) cadastro.menu = TELA_SAIR; if (opcao == 1) { //vai para tela de cadastrar paciente cadastro.menu = TELA_CADASTRAR; //verifica se tem muitos pacientes if (cadastro.totalCovids >= MAX_PACIENTES) { printf("\tCadastro esta lotado, nao e possivel adicionar novos pacientes\n"); //volta para tela principal cadastro.menu = TELA_PRINCIPAL; } } if (opcao == 2) { cadastro.menu = TELA_DESCADASTRAR; //se NÃO tem nenhum paciente listado if (cadastro.totalCovids == 0) { printf("\tNao ha nenhum paciente cadastrado para remover\n"); cadastro.menu = TELA_PRINCIPAL; } } if (opcao == 3) 18 { cadastro.menu = TELA_LISTAR_TODOS; if (cadastro.totalCovids == 0) { printf("\tCadastro nao tem nenhum paciente para listar\n"); //volta para tela principal cadastro.menu = TELA_PRINCIPAL; } } } break; //---------------------------------------------------------------------------------------------------------------------- ---- ------ case TELA_CADASTRAR: { printf("-------------------------------------\n"); printf("\tTELA DE CADASTRO:\n"); printf("-------------------------------------\n"); Covid novo; char opcao = 's'; do { //zera os bytes de novo memset(&novo, 0x0, sizeof(novo)); strcpy(novo.separador1, "---\n"); //separador prar o arquivo de texto ficar mais apresentável printf("Digite um novo nome para o paciente: \n"); //lê uma string da entrada padrão fflush(stdin); //função que limpa o teclado pra não ter algum erro na hora de digitar fgets(novo.nome, 32, stdin); //removendo o \n do final int id = 0; while (novo.nome[id] != '\0' && novo.nome[id] != '\n') id++; 19 novo.nome[id] = '\0'; novo.nome[31] = '\n'; //pra dar nova linha apenas no fim da string e ficar melhor no arquivo de texto printf("Digite um novo telefone para o paciente:\n"); fflush(stdin); fgets(novo.telefone, 14, stdin); id = 0; while (novo.telefone[id] != '\0' && novo.telefone[id] != '\n') id++; novo.telefone[id] = '\0'; novo.telefone[13] = '\n'; printf("Digite um novo endereco para o paciente: \n"); fflush(stdin); fgets(novo.endereco, 50, stdin); id = 0; while (novo.endereco[id] != '\0' && novo.endereco[id] != '\n') id++; novo.endereco[id] = '\0'; novo.endereco[49] = '\n'; printf("Digite um novo cidade para o paciente: \n"); fflush(stdin); fgets(novo.cidade, 30, stdin); id = 0; while (novo.cidade[id] != '\0' && novo.cidade[id] != '\n') id++; novo.cidade[id] = '\0'; novo.cidade[29] = '\n'; printf("Digite um novo estado para o paciente (sigla): \n"); fflush(stdin); fgets(novo.estado, 20, stdin); id = 0; while (novo.estado[id] != '\0' && novo.estado[id] != '\n') id++; novo.estado[id] = '\0'; novo.estado[19] = '\n'; 20 printf("Digite um novo cpf para o paciente: \n"); fflush(stdin); fgets(novo.cpf, 14, stdin); id = 0; while (novo.cpf[id] != '\0' && novo.cpf[id] != '\n') id++; novo.cpf[id] = '\0';novo.cpf[13] = '\n'; printf("Digite um novo cep para o paciente: \n"); fflush(stdin); fgets(novo.cep, 12, stdin); id = 0; while (novo.cep[id] != '\0' && novo.cep[id] != '\n') id++; novo.cep[id] = '\0'; novo.cep[11] = '\n'; printf("Digite um novo email para o paciente: \n"); fflush(stdin); fgets(novo.email, 32, stdin); id = 0; while (novo.email[id] != '\0' && novo.email[id] != '\n') id++; novo.email[id] = '\0'; novo.email[31] = '\n'; printf("Digite um novo comorbidade para o paciente (deixe vazio se não tiver): \n"); fflush(stdin); fgets(novo.comorbidade, 30, stdin); id = 0; while (novo.comorbidade[id] != '\0' && novo.comorbidade[id] != '\n') id++; novo.comorbidade[id] = '\0'; //--------------------------------------------- printf("Digite dia nascimento: \n"); //lê um valor da entrada fflush(stdin); 21 scanf("%d", &novo.dia); printf("Digite mes nascimento: \n"); fflush(stdin); scanf("%d", &novo.mes); printf("Digite ano nascimento: \n"); fflush(stdin); scanf("%d", &novo.ano); printf("Digite dia do diagnostico: \n"); fflush(stdin); scanf("%d", &novo.diaD); printf("Digite mes do diagnostico: \n"); fflush(stdin); scanf("%d", &novo.mesD); printf("Digite mes do diagnostico: \n"); fflush(stdin); scanf("%d", &novo.anoD); strcpy(novo.separador, "\n--"); //para melhorar formatação no arquivo de texto //------------------------------------------ //calcular idade em anos simples if (novo.mes<=mA && novo.dia <= dA) //testa pra ver se o mês de nascimento é igual ou menor que o mes atual, e o dia... se for menor já fez aniversário {novo.idade=aA-novo.ano; } //cada senão abaixo contempla as outras possibilidades como mes maior ou dia maior que o atual onde não fez aniversário else if (novo.mes>=mA && novo.dia > dA) {novo.idade=aA-novo.ano-1; } else if (novo.mes>=mA && novo.dia <= dA) {novo.idade=aA-novo.ano-1; } else if (novo.mes<=mA && novo.dia > dA) {novo.idade=aA-novo.ano; } printf(" IDADE: %d ANOS\n", novo.idade); //------------------------------------------- printf("Tem certeza que quer adicionar este paciente? [s/n]\n"); opcao = getchar(); //Limpa o buffer para evitar problemas int c = 0; 22 while ((c = getchar()) != '\n' && c != EOF) { } } while (opcao == 'n' || opcao == 'N'); //agora adiciona no final o paciente cadastro.pacientes[cadastro.totalCovids] = novo; cadastro.totalCovids++; //abre pacientes.txt para escrita memoria = fopen("pacientes.txt", "w+"); if (memoria == NULL) { printf("erro ao abrir pacientes.txt\n"); return 0; } //salva os pacientes size_t salvos = fwrite(cadastro.pacientes, sizeof(Covid), cadastro.totalCovids, memoria); if (salvos != (size_t)cadastro.totalCovids) { printf("Erro ao salvar pacientes na memoria pacientes.txt\n"); return 1; } fclose(memoria); // teste se é maior de 65 e salva também no arquivo de risco e testa se tem qualquer comorbidade e salva no arquivo de risco mesmo se for menos de 65 risco=fopen("risco.txt","a"); if (novo.idade>=65 || novo.comorbidade[strlen(novo.comorbidade)-1] != '\0') { fprintf(risco,"%s ",novo.cep); fprintf(risco,"%d ",novo.idade); fprintf(risco,"%s\n\n",novo.comorbidade); printf("Adicionado ao arquivo risco.txt para enviar para secretaria de saude\n"); } fclose(risco); //volta para tela principal cadastro.menu = TELA_PRINCIPAL; } 23 break; //---------------------------------------------------------------------------------------------------------------------- ---- ------ case TELA_DESCADASTRAR: { printf("-------------------------------------\n"); printf("\tTELA PARA DESCADASTRAR:\n"); printf("-------------------------------------\n"); int i; for (i = 0; i < cadastro.totalCovids; i++) { printf("Covid %d\n", i); //mostra algumas infoormações para confirmar o descadastro printf("\tNome: %s\n", cadastro.pacientes[i].nome); printf("\tTelefone: %s\n", cadastro.pacientes[i].telefone); printf("\tEndereco: %s\n", cadastro.pacientes[i].endereco); printf("----------------------------------------------------\n"); } int indice = -1; do { printf("Digite um indice de paciente para descadastrar: de 0 ate %d\n", cadastro.totalCovids-1); fflush(stdin); scanf("%d", &indice); //Limpa o buffer para evitar problemas int c = 0; while ((c = getchar()) != '\n' && c != EOF) { } } while (indice < 0 || indice >= cadastro.totalCovids); //copia todos os pacientes da frente do paciente de indice e remove indice for (i = indice; i < cadastro.totalCovids - 1; i++) cadastro.pacientes[i] = cadastro.pacientes[i + 1]; //remove um paciente (o de indice foi removido acima) cadastro.totalCovids--; //para salvar os pacientes que foram modificados (mesmo código dali da outra tela) 24 memoria = fopen("pacientes.txt", "w+"); if (memoria == NULL) { printf("Erro ao abrir pacientes.txt\n"); return 0; } //salva os pacientes size_t salvos = fwrite(cadastro.pacientes, sizeof(Covid), cadastro.totalCovids, memoria); if (salvos != (size_t)cadastro.totalCovids) { printf("Erro ao salvar pacientes na memoria pacientes.txt\n"); return 1; } fclose(memoria); //volta para tela principal cadastro.menu = TELA_PRINCIPAL; } break; //--------------------------------------------------------------------------------------------------------- case TELA_LISTAR_TODOS: { printf("-------------------------------------\n"); printf("\tLISTANDO PACIENTES:\n"); printf("-------------------------------------\n"); int i; for (i = 0; i < cadastro.totalCovids; i++) { printf("Covid %d\n", i); printf("\tNome: %s\n", cadastro.pacientes[i].nome); printf("\tTelefone: %s\n", cadastro.pacientes[i].telefone); printf("\tEndereco: %s\n", cadastro.pacientes[i].endereco); printf("\tCidade: %s\n", cadastro.pacientes[i].cidade); printf("\tEstado: %s\n", cadastro.pacientes[i].estado); printf("\tCpf: %s\n", cadastro.pacientes[i].cpf); 25 printf("\tCep: %s\n", cadastro.pacientes[i].cep); printf("\tEmail: %s\n", cadastro.pacientes[i].email); printf("\tComorbidades: %s\n", cadastro.pacientes[i].comorbidade); printf("\tIdade: %d/%d/%d\n", cadastro.pacientes[i].dia, cadastro.pacientes[i].mes, cadastro.pacientes[i].ano); printf("\tData diagnostico: %d/%d/%d\n", cadastro.pacientes[i].diaD, cadastro.pacientes[i].mesD, cadastro.pacientes[i].anoD); printf("----------------------------------------------------\n"); } //volta para tela principal cadastro.menu = TELA_PRINCIPAL; } break; default: cadastro.menu = TELA_PRINCIPAL; break; } } return 0; } 26 5. CONCLUSÃO Com as tecnologias mais modernas e sistemas de programas modernos, o programa pode rodar em qualquer computador com DOS ou Windows em qualquer versão suportada o projeto dispõem de velocidade em sua aquisição de informação e sua montagem assim entregando no menor prazo possível uma vez que o coronavirus pode ser letal em pouco tempo. O projeto em si tem o aparato de segurança tanto na camada de software como em sua estrutura física tendo apenas pessoas habilitadas com acesso ao mesmo nos hospitais contemplando de segurança contra vazamento. O projeto base se faz satisfatório para o pedido inicial e se faz possível de atualização e expansão se necessário após alteração de código relevante quando necessário. 27 REFERÊNCIAS C++ FAQ < http://www.parashift.com/c++-faq-lite/> Acessado em 15/11/2020 DAMAS, Luís; Linguagem C. tradução João Araújo Ribeiro, Orlando Bernardo. Filho. - 10.ed. - Rio de Janeiro : LTC, 2007. JOYANES, LUIS AGUILAR; Programação em C++ - 2ª Ed. – Amgh, 2008. ECKEL, Bruce. C++, Guia do Usuário. Makron Books, 1991.
Compartilhar