Ir ao conteúdo

Posts recomendados

Postado

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;
}



}

 

Postado

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

Postado

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?

 

 

Postado

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

Postado

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");

 

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...