Ir ao conteúdo
  • Cadastre-se

Java CRUD em JAVA POO | Verificando os conceitos de POO


Posts recomendados

Olá gente, o código funciona perfeitamente, mas eu quero deixá-lo mais legível em relação a organização. Então, eu estou tentando mover o método cadastrar() e listarCadastros() para a classe Aluno e assim chamar na função main somente. Nesse sentido, como poderia proceder? (já fiz algumas tentativas mas nada)
 

package projeto;

import java.util.List;
import java.util.Scanner;
import java.util.ArrayList;
import javax.swing.JOptionPane;

public class Principal {

private Scanner l;
private boolean execute;
private List<Aluno> alunos;

public static void main(String[] args) {
new Principal();
}

private Principal() {
l = new Scanner(System.in);
execute = true;
alunos = new ArrayList<Aluno>();

System.out.println("=============================\\nBEM VINDO AO CADASTRO DE USUÁRIOS\\n=============================");

while (execute) {
String opcao = menu();

if (opcao.equalsIgnoreCase("n")) {
cadastrar();
} else if (opcao.equalsIgnoreCase("l")) {
listarCadastros();
} else if (opcao.equalsIgnoreCase("x")) {
execute = false;
} else {
System.out.println("\\nOpção Inválida seu iniciante !!! \\n");
}
}
}

private String menu() {
System.out.println("Selecione a opção:\\n");
System.out.println("N - Novo cadastro");
System.out.println("L - Listar cadastros");
System.out.println("X - Sair\\n");
return l.nextLine();
}


private void cadastrar() {
boolean cadastrando = true;

while (cadastrando) {
System.out.println("=============================\\nCadastro de Usuários\\n");
Aluno aluno = new Aluno();
aluno.setNome(textInput(" --> Nome:"));
aluno.setCpf(textInput(" --> CPF: "));
aluno.setNascimento(textInput(" --> Data de Nascimento: "));
System.out.println("=============================\\n");

String cadastrar = textInput("==================\\nCONFIRMAR CADASTRO (S/N)?\\n==================");
if (cadastrar.equalsIgnoreCase("s")) {
System.out.println("==================\\n STATUS: Adicionado com sucesso \\n==================\\n");
alunos.add(aluno);
} else if (cadastrar.equalsIgnoreCase("n")){
System.out.println("==================\\n STATUS: Cadastro Ignorado\\n==================\\n");
} else {
System.out.println("\\nOpção inválida seu iniciante, vou ignorar o cadastro só pra você ter que digitar de novo !!! \\n");
}

String continua = textInput("Continuar cadastrando (S/N) ?");
if (continua.equalsIgnoreCase("N")) {
cadastrando = false;
} else if (continua.equalsIgnoreCase("s")){

} else {
System.out.println("\\nOpção inválida seu iniciante, eu vou sair só porque você não colabora !!! \\n");
cadastrando = false;
}
}
}

private void listarCadastros() {
if (alunos.size() == 0) {
System.out.println("\\nNão existem cadastros !!!\\n");
} else {
System.out.println("==================================\\nLista de Cadastros\\n");
for (int i = 0; i < alunos.size(); i++) {
Aluno d = alunos.get(i);
System.out.println("Cadastro número: " + i);
System.out.println("\\tNome: " + d.getNome());
System.out.println("\\tCPF: " + d.getCpf());
System.out.println("\\tData de Nascimento: " + d.getNascimento() + "\\n");
}
System.out.println("\\nLista Finalizada\\n==================================\\n");
}
}

private String textInput(String label) {
System.out.println(label);
return l.nextLine();
}
}


_________________________

 

package projeto;

public class Aluno {

private String nome;
private String cpf;
private String nascimento;


public Aluno(){


}

public String getNome(){
return nome;
}

public void setNome(String name){
this.nome = name;
}

public String getCpf(){
return cpf;
}

public void setCpf(String cpf){
this.cpf = cpf;
}

public String getNascimento(){
return nascimento;
}

public void setNascimento(String nascimento){
this.nascimento = nascimento;
}



}

 

Link para o comentário
Compartilhar em outros sites

Olá gente, meus cumprimentos. Feito o código e estando executável, queria uma ajuda para a melhoria desse código em quesito de legebilidade  e praticidade. Dicas/melhorias/sugestões/opiniões referente a: (I) nomes de classes, objetos, métodos que coloquei no código; (II) conceitos de poo como herança, encapsulamento e polimorfismo se estão bem empregados; (III) a classe principal e as outras classes se estão bem empregadas; (IV) se os comentários (obs:. alguns comentários no código foi feito por um amigo que estava me ajudando) estão bem empregados e onde poderia comentar mais pra deixar mais explicativo. Se você achar melhor mudar algo é só dizer, quero melhorar esse projeto para deixar com a cara de Java POO. Obrigado!

 

--> CLASSE PRINCIPAL

package execucao;

import java.util.Scanner;

import controle.ControladorAluno;
import controle.ControladorInstrutor;
import modelo.Aluno;
import modelo.Endereco;
import modelo.Instrutor;

public class Principal {
	
	
	public static void main(String[] args) {
		
		Scanner ler = new Scanner(System.in); //ler objeto tipo scanner serve para ler dados do teclado

		
		int opcao;	// VARIÁVEIS LOCAIS

		Aluno aluno;
		Endereco endereco;
		Instrutor instrutor;

		String antigoNome;
		String nome;
		String cpf;
		String data_nascimento;
		String bairro;
		String cep;
		String cargo;
		int escolha;

		//Pessoa p = new Instrutor("a", "a"); // polimofismo de tipo uma super classe pode  instanciar uma sub class
		//Instrutor i = new Pessoa("a", "b");  // uma sub class não pode instanciar super class
		//objetos
		ControladorAluno controladorAluno = new ControladorAluno();
		ControladorInstrutor controladorInstrutor = new ControladorInstrutor();
		
		do {
			
			System.out.println("===================================================================");
			System.out.println("\t\tSEJA BEM-VINDO(A) AO SISTEMA DE CADASTRO:\n\n\t\t1 - Aluno? Cadastre-se logo!\n\t\t2 - Instrutor? Cadastre-se de imediato!\n\t\t3 - Pesquisar cadastro por CPF.\n\t\t4 - Listar cadastro(s).\n\t\t5 - Atualizar cadastro(s).\n\t\t6 - Deletar cadastro(s). \n\t\t7 - Sair do sistema.");
			System.out.print("===================================================================\n");
			opcao = ler.nextInt();
			ler.nextLine();

			switch (opcao) {
			case 1:
				
				System.out.print("==================================================================\n");
				System.out.println("--> Informe o nome do aluno: ");
				nome = ler.nextLine();
				System.out.println("\n--> Informe o cpf: ");
				cpf = ler.nextLine();
				System.out.println("\n--> Informe a data de nascimento: ");
				data_nascimento = ler.nextLine();
				System.out.println("\n--> Informe o bairro que reside: ");
				bairro = ler.nextLine();
				System.out.println("\n--> Informe o CEP: ");
				cep = ler.nextLine();
				System.out.print("==================================================================\n");


				endereco = new Endereco(bairro,cep);
				aluno = new Aluno(nome, cpf); //excluido as outras variaveis
				controladorAluno.cadastrarAluno(aluno);
				System.out.println("\n");

				break;
			case 2:

				System.out.print("==================================================================\n");
				System.out.println("--> Informe o nome do instrutor: ");
				nome = ler.nextLine();
				System.out.println("\n--> Informe o cpf: ");
				cpf = ler.nextLine();
				System.out.println("\n--> Informe a data de nascimento: ");
				data_nascimento = ler.nextLine();
				System.out.println("\n--> Informe o bairro que reside: ");
				bairro = ler.nextLine();
				System.out.println("\n--> Informe o CEP: ");
				cep = ler.nextLine();
				System.out.println("\n--> Informe o cargo:");
				cargo = ler.nextLine();
				System.out.print("==================================================================\n");

				endereco = new Endereco(bairro,cep);
				instrutor = new Instrutor(nome, cpf, data_nascimento, cargo, endereco, cargo);
				controladorInstrutor.cadastrarInstrutor(instrutor);

				System.out.println("\n");

				break;
				
			case 3:
				System.out.println("\n\tQual cadastro você deseja buscar? \n");
				System.out.println("\t\t1.Buscar Cadastro do Aluno");
				System.out.println("\t\t2.Buscar Cadastro do Instrutor");

				escolha = ler.nextInt();
				ler.nextLine();

				if(escolha == 2) {
					System.out.println("--> Digite o CPF do Instrutor desejado! \n" );
					cpf = ler.nextLine();
					controladorInstrutor.pesquisarInstrutor(cpf);

				}if(escolha == 1) {
					System.out.println("--> Digite o CPF do Aluno desejado! \n" );
					cpf = ler.nextLine();
					controladorAluno.pesquisarAluno(cpf);
				}
				break;


			case 6:
				System.out.println("\n\tQual Cadastro você deseja deletar? \n");
				System.out.println("\t\t1.Deletar Cadastro Aluno");
				System.out.println("\t\t2.Deletar Cadastro Instrutor");

				escolha = ler.nextInt();
				ler.nextLine();

				if(escolha == 1) {
					System.out.println("--> Digite o CPF do Aluno que você deseja deletar!" );
					cpf = ler.nextLine();
					controladorAluno.deletarAluno(cpf);

				}if(escolha == 2) {
					System.out.println("--> Digite o CPF do Instrutor que você deseja deletar!" );
					cpf = ler.nextLine();

					controladorInstrutor.deletarInstrutor(cpf);
				} 	
				break;

			case 5:
				System.out.println("\n\tQual Cadastro você deseja atualizar? \n");
				System.out.println("\t\t1.Atualizar Cadastro Aluno");
				System.out.println("\t\t2.Atualizar Cadastro Instrutor");

				escolha = ler.nextInt();

				if(escolha == 1) {
					System.out.println("--> Digite o nome do Aluno que você deseja atualizar!" );
					antigoNome = ler.nextLine();
					ler.nextLine();
					System.out.println("--> Digite um novo novo Nome!");
					nome = ler.nextLine();
					System.out.println("--> Digite um novo nova Data de Nascimento!");
					data_nascimento = ler.nextLine();
					System.out.println("--> Digite um novo bairro:");
					bairro = ler.nextLine();
					System.out.println("--> Digite um novo cep:");
					cep = ler.nextLine();

					endereco = new Endereco(bairro,cep);
					controladorAluno.atualizarAluno(antigoNome, nome, data_nascimento, endereco);

				}
				
				if(escolha == 2) {
					System.out.println("--> Digite o nome do Instrutor que você deseja atualizar: " );
					antigoNome = ler.nextLine();
					ler.nextLine();
					System.out.println("--> Digite um novo novo nome: ");
					nome = ler.nextLine();
					System.out.println("--> Digite um novo novo email: ");
					data_nascimento = ler.nextLine();
					System.out.println("--> Digite um novo bairro: ");
					bairro = ler.nextLine();
					System.out.println("--> Digite um novo cep: ");
					cep = ler.nextLine();
					System.out.println("--> Digite um novo novo cargo: ");
					cargo = ler.nextLine();

					endereco = new Endereco(bairro,cep);
					controladorInstrutor.atualizarInstrutor(antigoNome, nome, data_nascimento, endereco, cargo);
					System.out.println("\n");
				}
				break;
			case 4:
				System.out.println("\n\tQual Cadastro você deseja listar? \n");
				System.out.println("\t\t1.Listar Cadastro Aluno");
				System.out.println("\t\t2.Listar Cadastro Instrutor");
				
				escolha = ler.nextInt();
				
				if(escolha == 2) {
				
					controladorInstrutor.listarInstrutor();
				}if(escolha == 1) {
				
					controladorAluno.listarAluno();
				}
				break;
			
			}


		}	
		while(opcao !=7);	


	}

		
		
	}
	
		



 

--> CLASSE PESSOA (serviu como classe abstrata  e para que seja herdada para a classe Aluno e Instrutor

 

package modelo;

public abstract class Pessoa { //CLASSE ABSTRATA

	private String nome;
	private String cpf;
	private String data_nascimento;
	private String sexo;
	private Endereco endereco;

	public Pessoa(String nome,String cpf) { //CONSTRUTOR SERVIRÁ PARA O INSTRUTOR
		this.nome = nome;
		this.cpf = cpf;
	}
	

	public Pessoa(String nome,String cpf,String data_nascimento,String sexo,String celular,Endereco endereco) {
		this.nome = nome;
		this.cpf = cpf;
		this.data_nascimento = data_nascimento;
		this.sexo = sexo;
		this.endereco = endereco;  // agregação
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getCpf() {
		return cpf;
	}


	public String getData_nascimento() {
		return data_nascimento;
	}

	public void setData_nascimento(String data_nascimento) {
		this.data_nascimento = data_nascimento;
	}

	public Endereco getEndereco() {
		return endereco;
	}

	public void setEndereco(Endereco endereco) {
		this.endereco = endereco;
	}

	public String getSexo() {
		return sexo;
	}


}

 

 

--> CLASSE ALUNO

package modelo;

import java.util.Random;
import modelo.Aluno;
import modelo.Endereco;

public class Aluno extends Pessoa { //A CLASSE ALUNO HERDA OS ATRIBUTOS DA CLASSE PESSOA

	
	private int numMatricula;
	Random random = new Random(); //GERAR O NÚMERO DA MATRÍCULA DE FORMA ALEATÓRIA


	public Aluno(String nome,String cpf) { //CONSTRUTOR 1
		super(nome,cpf);
		this.numMatricula = random.nextInt(1000000);
		
	}

	public Aluno(String nome,String cpf,String email,String sexo,String celular,Endereco endereco) { //CONSTRUTOR 2
		super(nome,cpf,email,sexo,celular,endereco);
		this.numMatricula = random.nextInt(10000);
		
	}
	
	
	//MÉTODOS ACESSORES PARA TER ACESSO O ATRIBUTO MATRÍCULA

	public int getNumMatricula() {
		return numMatricula;
	}

	public String getNome() {
		return "Aluno: " + super.getNome();
	}
	
	
}

 

 

--> CLASSE INSTRUTOR

package modelo;


public class Instrutor extends Pessoa {	//A CLASSE INSTRUTOR HERDA OS ATRIBUTOS DA CLASSE PESSOA

	private String cargo;

	
	public Instrutor(String nome,String cpf) {		//sobrecarga
		super(nome,cpf);
	}


	public Instrutor(String nome,String cpf,String email,String celular,Endereco endereco,String cargo) {
		super(nome,cpf,email,celular, cargo, endereco);		// CHAMANDO O CONSTRUTOR DA CLASSE PAI
		this.cargo = cargo;
		
	}

	public String getCargo() {
		return cargo;
	}

	public void setCargo(String cargo) {
		this.cargo = cargo;
	}

	public String getNome() {
		return "Instrutor: " + super.getNome();
	}
}

 

 

--> CLASSE ENDERECO

package modelo;

public class Endereco {

	private String bairro;
	private String cep;
	
	//MÉTODOS ESPECIAIS
	
	public Endereco(String bairro,String cep) { //CONSTRUTOR
		this.bairro = bairro;
		this.cep = cep;
	
	}

	
	//MÉTODOS ACESSORES
	public String getBairro() {
		return bairro;
	}
	public void setBairro(String bairro) {
		this.bairro = bairro;
	}
	public String getCep() {
		return cep;
	}
	public void setCep(String cep) {
		this.cep = cep;
	}


}

 

 

--> CLASSE CONTROLADORALUNO

package controle;

import java.util.ArrayList;
import modelo.Aluno;
import modelo.Endereco;


public class ControladorAluno {
	//tipo de dados para listas
	private ArrayList<Aluno> alunos;

	public ControladorAluno() {
		alunos = new ArrayList<>();
	}

	public void cadastrarAluno(Aluno aluno){
		alunos.add(aluno);
		System.out.println("\n\t\t" + aluno.getNome() + "\n\t\tCadastrado(a) com sucesso!");

	}

	public void pesquisarAluno(String cpf) {

		for(int i = 0; i < alunos.size(); i++ ) {
			if(alunos.get(i).getCpf().equals(cpf)) {
				System.out.println(alunos.get(i).getNome() + " numero da matrícula: " + alunos.get(i).getNumMatricula());
			}
		}

	}

	public void listarAluno(){
		System.out.println("\tLista de Alunos cadastrados: ");
		if(alunos.size() == 0) {
			System.out.println("\t<<<<Nenhum aluno foi cadastrado.>>>>");
		}else {
		for (Aluno aluno : alunos) {
			System.out.println("\t" + aluno.getNome());
		} 
			
	}
}

	
	public void atualizarAluno(String antigoNome,String novoNome, String data_nascimento,Endereco endereco) {
		for(int i = 0; i < alunos.size(); i++) {
			if(alunos.get(i).getNome().equals(antigoNome)) {
				alunos.get(i).setNome(novoNome);
				alunos.get(i).setData_nascimento(data_nascimento);
				alunos.get(i).setEndereco(endereco);
			}
			
		}

	}

	public void deletarAluno(String cpf) {
		for(int i = 0; i < alunos.size(); i++ ) {
			if(alunos.get(i).getCpf().equals(cpf)) {
				alunos.remove(i);
				System.out.println("\tO Aluno foi removido");
			}else {
				System.out.println("\tAluno não encontrado");
			}
		}

	}


}

 

 

--> CLASSE CONTROLADORINSTRUTOR

package controle;

import java.util.ArrayList;

import modelo.Endereco;
import modelo.Instrutor;

public class ControladorInstrutor {


	private ArrayList<Instrutor> instrutores;

	public ControladorInstrutor() { //CONSTRUTOR
		instrutores = new ArrayList<>();
	}
	
	
		//MÉTODOS 
	public void cadastrarInstrutor(Instrutor instrutor){
		instrutores.add(instrutor);
		System.out.println("\n\t\t" + instrutor.getNome() + "\n\t\tCadastrado(a) com sucesso!");
	}

	public void pesquisarInstrutor(String cpf) {
		
		for(int i = 0; i < instrutores.size(); i++ ) {
			if(instrutores.get(i).getCpf().equals(cpf)) {
				System.out.println("\t" + instrutores.get(i).getNome());
			}
		}
	}
	public void listarInstrutor(){
		System.out.println("\tLista de Instrutores cadastrados: ");
		if(instrutores.size() == 0) {
			System.out.println("\t<<<<Nenhum instrutor foi cadastrado>>>>");
		}else {
		for (Instrutor instrutor : instrutores) {
			System.out.println("\t" + instrutor.getNome());
		}
		}
	}

	public void atualizarInstrutor(String antigoNome,String novoNome, String data_nascimento,Endereco endereco,String cargo) {
		for(int i = 0; i < instrutores.size(); i++) {
			if(instrutores.get(i).getNome().equals(antigoNome)) {
				instrutores.get(i).setNome(novoNome);
				instrutores.get(i).setData_nascimento(data_nascimento);
				instrutores.get(i).setEndereco(endereco);
				instrutores.get(i).setCargo(cargo);
				}
				
		}
		
		
	}

	public void deletarInstrutor(String cpf) {
		for(int i = 0; i < instrutores.size(); i++ ) {
			if(instrutores.get(i).getCpf().equals(cpf)) {
				instrutores.remove(i);
				System.out.println("\tO instrutor foi removido");
			}else {
				System.out.println("\tInstrutor não encontrado");

			}
		}
	}

}

 

crudjavapoo.zip

Link para o comentário
Compartilhar em outros sites

Olá gente, meus cumprimentos. Postei o código completo do código aqui: https://www.clubedohardware.com.br/forums/topic/1397647-crud-em-java-poo-apenas-sugest%C3%B5es-de-melhorias/ e queria explorar o item III: (II) conceitos de poo como herança, encapsulamento e polimorfismo se estão bem empregados;

 

Irei fazer alguns comentários e me digam se eu estou errado ou não.

 

1 - O conceito de herança no meu código está relacionado a classe Pessoa, Aluno e Instrutor. A classe Pessoa é uma classe abstrata, isto é, é uma classe que serve de modelo (nesse caso para Aluno e Instrutor). Ela sempre será uma superclasse genérica, e suas subclasses serão mais específicas. E está representado por extends:

public class Aluno extends Pessoa { //A CLASSE ALUNO HERDA OS ATRIBUTOS DA CLASSE PESSOA
public class Instrutor extends Pessoa {	//A CLASSE INSTRUTOR HERDA OS ATRIBUTOS DA CLASSE PESSOA

 

 

2 - Ao meu entender, o conceito de encapsulamento (e não inseri o conceito de interface ainda) está embutido no fato dos atributos serem privados, já que o encapsulamento serve para controlar o acesso aos atributos e métodos de uma classe.

 

3 - Em relação ao Polimorfismo (sobrescrita, sobrecarga e tipo) não sei ao certo explicar onde de fato empreguei. Eu fiz esse código com a ajuda de um amigo, ele me deu umas dicas comentando algumas coisas, mas ainda assim não entendi direito o assunto de polimorfismo empregado no código, se alguém puder me ajudar e explicar no código.

 

O que acham?

 

 

Link para o comentário
Compartilhar em outros sites

Olá gente, meus cumprimentos. O código em questão está aqui:

Ou você pode baixá-lo aqui embaixo.

 

Pois bem, me dei conta de uma coisa simples. O que tá na classe Principal poderia estar em uma classe Menu. E na classe Principal estaria somente o chamamento da classe Menu para ser executada os comandos da classe Menu.

 

--> Vejam só nas imagens

 

Porém, não consigo consertar o erro do código. O erro diz algo referente ao uso do

Citação

;

mas não posso tirar por ser fim de uma instrução, mas quando tiro ele dá erro no uso do colchetes.

 

 

Os erros em programação é uma coisa maravilhosa, a gente não programa pra fazer o programa, mas pra solucionar os erros ahahah.

 

Mas enfim, alguém pode me dar umas dicas de como posso fazer nesse caso?

 

 

 

imagem1.png

imagem2.png

erro.png

crudjavapoo.zip

Link para o comentário
Compartilhar em outros sites

Quando criar o objeto aluno, você pode inserir os parâmetros:

 

na classe ALUNO adicione:


public Aluno(String _nome, String _cpf, String _nascimento ){

this.nome = _nome;

this.cpf = _cpf;

this.nascimento = _nascimento;

}

public Aluno(){

}

 

quando for criar o objeto:


Aluno aluno = new Aluno("nome","cpf","nascimento");

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...