A vacinação contra a COVID-19 se mostrou eficaz pa...

Criado em: 25 de novembro de 2025

Respondido usando GPT-5.1 Thinking por Chat01

Pergunta

A vacinação contra a COVID-19 se mostrou eficaz para diminuir o número de infectados e casos de internações, porém é importante que a população continue vacinando com as doses de reforço. Segundo G1 (2022) a dose de reforço foi aplicada em 56,25% da população com 12 anos de idade ou mais, faixa de idade que atualmente pode receber o reforço da vacinação. (Vacinação contra a Covid: mais de 101 milhões de brasileiros tomaram a dose de reforço.

Disponível em: https://g1.globo.com/saude/coronavirus/vacinas/noticia/2022/08/02/vacinacao-contra-a-covid-mais-de-101-milhoes-de-brasileiros-tomaram-a-dose-de-reforco.ghtml Acesso em: 04/11/2025)

Pensando nisso desenvolva um sistema de controle de vacinação utilizando a linguagem JAVA seguindo os seguintes requisitos:

1 - Ao entrar no sistema o usuário deve informar o CPF e o nome da enfermeira que está aplicando a vacina.
2 - Após informado os dados da enfermeira o sistema deve apresentar a opção de vacinar cidadão, listar cidadãos vacinados e sair.
3 - Ao escolher a opção vacinar cidadão o sistema deve solicitar o CPF do cidadão, o nome do cidadão, a data de vacinação da primeira dose, a data de vacinação da segunda dose, a data de vacinação da terceira dose e a data de vacinação da quarta dose.
4 - Caso a data de vacinação das doses 2, 3 ou 4 forem inferiores a 4 meses da data de vacinação da dose anterior o sistema deve informar que o cidadão ainda não tem direito a uma nova data e retornar para as opções do requisito número 2. (não é necessário salvar esse registro na lista de cidadãos vacinados)
5 - Ao escolher a opção listar cidadãos vacinados o sistema deve mostrar uma lista dos cidadãos cadastrados no requisito número 3 e as datas de vacinação das doses.
6 - Ao escolher a opção sair o sistema deve sinalizar se o usuário deseja finalizar.
7 - Utilize os conceitos aprendidos na disciplina.
8 - Não é necessário salvar os dados em banco de dados ou arquivo, guarde todos os objetos em memória.

faça usando diferentes classes e arquivos para usar o POO da melhor maneira possivel

Pensamento

Designing Java console system for vaccination control

The user wants a Java system to manage vaccination control. Since it's in Portuguese and involves multiple classes, I’ll design it with a main class (ProgramaVacinas or SistemaVacinacao) and a Nurse class (Enfermeira) with fields for CPF and name. I’ll ensure to include date handling that checks for specified dose intervals and prompts appropriately.

Defining classes and handling vaccination details

I’m defining the Nurse class with attributes cpfEnfermeira and nomeEnfermeira. The VaccinatedCitizen class will include their cpf, name, and doses. The VaccinationRegistry class will handle the list and operations, making sure to parse dates in Brazilian format. I'll also handle validation: ensuring there's a minimum gap of 4 months between doses.

Building system flow and handling menu

The spec seems to imply they're scheduling new vaccinations, so they'll only input the date for the dose being applied now. However, they'd still need the earlier dose dates for validation. For the menu, I'll include options to vaccinate a citizen, list vaccinated citizens, or quit. I'll ensure invalid input is handled correctly and keep classes in separate files.

Defining classes and handling dose validation

I’ll create separate .java files for each class: Enfermeira.java, Cidadao.java, RegistroVacinacao.java, and SistemaVacinacao.java. The SistemaVacinacao class will handle the main logic with methods for registering citizens and validating dose intervals. When receiving dates, I'll safely parse them, handling errors gracefully if needed, and use the service class for validation.

Designing simplified vaccination input and validation

For simplicity, I'll require all four doses but allow for future dates. If any dose is less than 4 months after the previous one, I’ll print a message and won’t save the data. For the nurse prompts, I'll use a Scanner to gather CPF and name, confirm exit requests, and handle inputs in Portuguese with proper comments.

Designing vaccination tracking classes in Java

I’ll break the solution into separate classes: Enfermeira, Cidadao, and RegistroVacinacao. Each will handle specific roles like storing data and validating intervals. To follow Object-Oriented principles (POO), I’ll delegate the vaccination logic to RegistroVacinacao, with the main class focusing on UI and delegating actions.

Handling vaccination system logic in Java

In the SistemaVacinacao class, I'll structure the main menu for various options: vaccinating, listing vaccinated citizens, and confirming exit. In RegistroVacinacao, I'll implement the logic to handle citizen data, date formatting, and interval validation with error handling. I’ll also ensure proper parsing and avoid null pointer exceptions by treating all doses as required.

Thought for 58s

Resposta

Vou montar um sisteminha de console em Java, orientado a objetos, com várias classes/arquivos:

  • Enfermeira – guarda os dados da enfermeira.
  • Cidadao – guarda os dados do cidadão e datas de doses.
  • RegistroVacinacao – faz o controle da lista e valida os intervalos das doses.
  • SistemaVacinacao – contém o main e o menu.

As datas serão lidas no formato dd/MM/yyyy e verificadas com LocalDate (Java 8+).
Se qualquer dose 2, 3 ou 4 for antes de 4 meses em relação à dose anterior, o sistema avisa e não salva o cidadão.


Arquivo: Enfermeira.java

java
public class Enfermeira { private String cpf; private String nome; public Enfermeira(String cpf, String nome) { this.cpf = cpf; this.nome = nome; } public String getCpf() { return cpf; } public String getNome() { return nome; } @Override public String toString() { return nome + " (CPF: " + cpf + ")"; } }

Arquivo: Cidadao.java

java
import java.time.LocalDate; public class Cidadao { private String cpf; private String nome; private LocalDate dataDose1; private LocalDate dataDose2; private LocalDate dataDose3; private LocalDate dataDose4; public Cidadao(String cpf, String nome, LocalDate dataDose1, LocalDate dataDose2, LocalDate dataDose3, LocalDate dataDose4) { this.cpf = cpf; this.nome = nome; this.dataDose1 = dataDose1; this.dataDose2 = dataDose2; this.dataDose3 = dataDose3; this.dataDose4 = dataDose4; } public String getCpf() { return cpf; } public String getNome() { return nome; } public LocalDate getDataDose1() { return dataDose1; } public LocalDate getDataDose2() { return dataDose2; } public LocalDate getDataDose3() { return dataDose3; } public LocalDate getDataDose4() { return dataDose4; } }

Arquivo: RegistroVacinacao.java

java
import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeParseException; import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class RegistroVacinacao { private Enfermeira enfermeira; private List<Cidadao> cidadaos; private DateTimeFormatter formatter; public RegistroVacinacao(Enfermeira enfermeira) { this.enfermeira = enfermeira; this.cidadaos = new ArrayList<>(); this.formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy"); } /** * Fluxo completo para vacinar um cidadão: * - Ler dados * - Validar intervalos entre doses * - Se ok, salvar na lista */ public void vacinarCidadao(Scanner scanner) { System.out.println("\n=== Vacinar cidadão ==="); System.out.print("Informe o CPF do cidadão: "); String cpf = scanner.nextLine().trim(); System.out.print("Informe o nome do cidadão: "); String nome = scanner.nextLine().trim(); LocalDate dose1 = lerData(scanner, "Informe a data da 1ª dose (dd/MM/yyyy): "); if (dose1 == null) return; LocalDate dose2 = lerData(scanner, "Informe a data da 2ª dose (dd/MM/yyyy): "); if (dose2 == null) return; LocalDate dose3 = lerData(scanner, "Informe a data da 3ª dose (dd/MM/yyyy): "); if (dose3 == null) return; LocalDate dose4 = lerData(scanner, "Informe a data da 4ª dose (dd/MM/yyyy): "); if (dose4 == null) return; if (!validarIntervalos(dose1, dose2, dose3, dose4)) { System.out.println("O cidadão ainda não tem direito à nova dose."); System.out.println("Registro NÃO foi salvo.\n"); return; } Cidadao cidadao = new Cidadao(cpf, nome, dose1, dose2, dose3, dose4); cidadaos.add(cidadao); System.out.println("Cidadão vacinado e cadastrado com sucesso!\n"); } /** * Lista todos os cidadãos já cadastrados com as datas das doses. */ public void listarCidadaosVacinados() { System.out.println("\n=== Lista de cidadãos vacinados ==="); if (cidadaos.isEmpty()) { System.out.println("Nenhum cidadão vacinado cadastrado.\n"); return; } System.out.println("Enfermeira responsável: " + enfermeira); System.out.println("----------------------------------------"); for (Cidadao c : cidadaos) { System.out.println("Nome: " + c.getNome()); System.out.println("CPF : " + c.getCpf()); System.out.println("1ª dose: " + c.getDataDose1().format(formatter)); System.out.println("2ª dose: " + c.getDataDose2().format(formatter)); System.out.println("3ª dose: " + c.getDataDose3().format(formatter)); System.out.println("4ª dose: " + c.getDataDose4().format(formatter)); System.out.println("----------------------------------------"); } System.out.println(); } /** * Lê uma data do teclado no formato dd/MM/yyyy. * Se for inválida, volta ao menu principal (retorna null). */ private LocalDate lerData(Scanner scanner, String mensagem) { System.out.print(mensagem); String textoData = scanner.nextLine().trim(); try { return LocalDate.parse(textoData, formatter); } catch (DateTimeParseException e) { System.out.println("Data inválida! Operação cancelada, voltando ao menu.\n"); return null; } } /** * Valida se as doses 2, 3 e 4 respeitam o intervalo mínimo de 4 meses * em relação à dose anterior. * * Inferior a 4 meses => inválido. * Igual ou superior a 4 meses => válido. */ private boolean validarIntervalos(LocalDate d1, LocalDate d2, LocalDate d3, LocalDate d4) { if (d2.isBefore(d1.plusMonths(4))) { System.out.println("A 2ª dose está com menos de 4 meses de intervalo em relação à 1ª dose."); return false; } if (d3.isBefore(d2.plusMonths(4))) { System.out.println("A 3ª dose está com menos de 4 meses de intervalo em relação à 2ª dose."); return false; } if (d4.isBefore(d3.plusMonths(4))) { System.out.println("A 4ª dose está com menos de 4 meses de intervalo em relação à 3ª dose."); return false; } return true; } }

Arquivo: SistemaVacinacao.java (contém o main)

java
import java.util.Scanner; public class SistemaVacinacao { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("=========================================="); System.out.println(" Sistema de Controle de Vacinação COVID "); System.out.println("==========================================\n"); // 1 - Dados da enfermeira System.out.print("Informe o CPF da enfermeira: "); String cpfEnfermeira = scanner.nextLine().trim(); System.out.print("Informe o nome da enfermeira: "); String nomeEnfermeira = scanner.nextLine().trim(); Enfermeira enfermeira = new Enfermeira(cpfEnfermeira, nomeEnfermeira); RegistroVacinacao registro = new RegistroVacinacao(enfermeira); boolean sair = false; while (!sair) { // 2 - Menu de opções System.out.println("\n===== MENU PRINCIPAL ====="); System.out.println("Enfermeira logada: " + enfermeira); System.out.println("1 - Vacinar cidadão"); System.out.println("2 - Listar cidadãos vacinados"); System.out.println("3 - Sair"); System.out.print("Escolha uma opção: "); String opcaoTexto = scanner.nextLine(); int opcao; try { opcao = Integer.parseInt(opcaoTexto); } catch (NumberFormatException e) { opcao = -1; } switch (opcao) { case 1: // 3 e 4 - Vacinar cidadão e validar datas registro.vacinarCidadao(scanner); break; case 2: // 5 - Listar cidadãos registro.listarCidadaosVacinados(); break; case 3: // 6 - Confirmar saída System.out.print("Deseja realmente sair? (S/N): "); String resposta = scanner.nextLine().trim(); if (resposta.equalsIgnoreCase("S")) { sair = true; System.out.println("Finalizando o sistema. Até logo!"); } else { System.out.println("Operação cancelada. Retornando ao menu."); } break; default: System.out.println("Opção inválida! Tente novamente."); } } scanner.close(); } }

Se quiser, posso adaptar o sistema para:

  • Permitir cidadãos com menos que 4 doses (por exemplo, ainda só com 2 ou 3).
  • Separar ainda mais a lógica (por exemplo, criar uma classe ValidadorDeDose).

Mas do jeito que está, já atende exatamente os requisitos que você listou e usa POO com várias classes.

Compartilhar esta Q&A