Jump to content
juliovieira

Dúvida: Array ou ArrayList

Recommended Posts

juliovieira

Boa tarde, no desenvolvimento de um projecto de gestão de uma escola, num dos pontos é-me pedido para que na listagem de alunos seja feita a impressão do seu nome, BI, numero de aluno e as disciplinas em que está inscrito.

A minha questão é: da forma que tenho o código, a classe Aluno deriva de Pessoa, só com os parametros nome, BI e numero)

public class Aluno extends Pessoa {
private int numero;
public Aluno(String nome, int BI, int numero) {
super(nome, BI);
this.numero = numero;
}

e a classe Disciplina:

public Disciplina(String nomeDisciplina, String nomeCurso, int semestre, String profResp) {
this.nomeCurso = nomeCurso;
this.semestre = semestre;
this.nomeDisciplina = nomeDisciplina;
this.setProfResp(profResp);
}

pretendia adicionar um parâmetro alunosInscritos, para poder adicionar o BI dos mesmos no arraylist e a partir de uma 3ª classe (Escola), fazer uma verificação caso o alunosInscritos tivesse o numero do BI do aluno, fizesse o print dos dados mesmo aluno com as disciplinas em que está inscrito.

Nesta situação é melhor usar um array normal, e depois fazer getters e setters para obter os BI's ou usar um arraylist que são mais fáceis de manipular? (adicionar, remover.. etc). Caso seja vantajoso usar o arraylist tenho de fazer métodos gettters e setters na classe disciplina, ou posso usar o contains(), add(), remove() livremente a partir da classe Escola?

Espero ter-me expressado de forma esclarecedora,

Cumprimentos,

Júlio Vieira

Share this post


Link to post
Share on other sites
Ernest

Bom dia,

Prólogo :

1- String profResp é melhore utilizar uma classe Professor ...

2- int BI, int numero qual é u ID unico e a difereça ?

3- Com HashMap é mais facil de pesquisar um objecto qualquer com a sua chave (Key ou seja o seu ID )

4- Eu utilizo JDK 1.7_21

5- ler Bertrand Meyer Object-Oriented Software Construction : http://en.wikipedia.org/wiki/Object-Oriented_Software_Construction

6- em JAVA pode colocar acentos nos nomes de classes, métodos e variáveis.

7- Atenção a classe GestãoEscola não esta finalizada !!

Para modelar um sistema de objetos é simplesmente descrever os objectos um de cada vez, e em seguida, fazê-los interagir.

I- Em primeiro é ler e traduzir as especificações das necessidades em objectos : "gestão de uma ESCOLA" ... " listagem de ALUNOS seja feita a impressão do seu nome, BI, numero de aluno e as DISCIPLINAS em que está inscrito." ... Uma disciplina é gerida por um PROFESSOR responsável... um aluno é (extends) uma PESSOA ...

Aqui estão as elementos ou entidades (Entity) do sistema :

PESSOA, ALUNO , PROFESSOR , DISCIPLINA , ESCOLA

basicamente você tem que fazer a pergunta o que é um aluno, pessoa, professor, disciplina e que quer dizer gestão de uma Escola ?

II- Descrever as entidades do sistema :

classe Pessoa :

package pt.escola;
/**
* representa uma Pessoa
*
* @author Ernest Duarte
*/
public abstract class Pessoa {

 protected int id;
 protected String nome;

 public Pessoa(int id, String nome)
 {
			 this.id=id;
		 this.nome=nome;
 }
}

Classe Aluno :

package pt.escola;
/**
* representa um Aluno
* @author Ernest Duarte
*/
public class Aluno extends Pessoa {

 private int numero;

 public Aluno(int id, String nome, int numero)
 {
	 super(id,nome);
	 this.numero = numero;
 }

 @Override
 public String toString() {
			 return "Aluno [nome=" + nome + ", ID=" + id + ", numero=" + numero + "]";
 }
}

Classe Professor :

package pt.escola;
/**
* Representa um Professor
* @author Ernest Duarte
*/
public class Professor {

 private int id;
 private String nome;
 private String curriculumVitae;

 public Professor(int id, String nome, String curriculumVitae)
 {
	 super();
	 this.nome = nome;
	 this.curriculumVitae=curriculumVitae;
	 this.id = id;
	 }

 @Override
 public String toString() {
		 return " \n \t Professor [nome=" + nome + "]";
 }

 public int getId() {
		 return id;
 }
}

Classe Disciplina :

package pt.escola;
/**
* representa uma Disciplina
* @author Ernest Duarte
*/
public class Disciplina {

	 private String nomeDisciplina;
	 private String nomeCurso;
	 private int semestre;
	 private Professor profResp;

	 public Disciplina(String nomeDisciplina, String nomeCurso, int semestre, Professor profResp)
	 {
			 this.nomeDisciplina = nomeDisciplina;
			 this.nomeCurso = nomeCurso;
			 this.semestre = semestre;
			 this.profResp = profResp;
	 }

	 @Override
	 public String toString() {
			 return " \n \t Disciplina [nomeDisciplina=" + nomeDisciplina + ", nomeCurso="
																			 + nomeCurso + ", semestre=" + semestre + ", profResp="
																																										 + profResp.toString() + "]";
	 }
}

Classe GestãoEscola :

package pt.escola;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Scanner;
/**
* Esta classe permite a gestão de uma escola
* Uma escola é composta basicamente por alunos, disciplinas e professores
* @author Ernest Duarte
*/
public class GestãoEscola {

 private HashMap<String, Disciplina> disciplinas = new HashMap<>();
 private HashMap<Integer, Professor> professores = new HashMap<>();
 private HashMap<Aluno,ArrayList<Disciplina>> alunos = new HashMap<>();

 /**
 * construtor com algumas gravações padrão
*/
 public GestãoEscola()
 {
			 Professor profAlberto = new Professor(1, "Alberto", "curriculumVitae Alberto");
			 Professor profFrancisco = new Professor(2, "Francisco", "curriculumVitae Francisco");
			 Professor profAlfonso = new Professor(3, "Alfonso", "curriculumVitae Alfonso");

			 professores.put(1, profAlberto);
			 professores.put(2, profFrancisco);
			 professores.put(3, profAlfonso);

			 Disciplina matemática = new Disciplina("Matemática", "curso escolar", 2, profAlberto);
			 Disciplina francês = new Disciplina("Francês", "curso escolar", 2, profFrancisco);
			 Disciplina fisica = new Disciplina("fisica", "curso escolar", 2, profAlfonso);
			 Disciplina química = new Disciplina("química", "curso escolar", 2, profAlberto);

	 disciplinas.put("Matemática", matemática);
			 disciplinas.put("Francês", francês);
			 disciplinas.put("fisica", fisica);
			 disciplinas.put("química", química);

	 }

	 public void exibirMenu()
	 {
		 System.out.println("1- Registre um aluno");
		 System.out.println("2- Registre um professor");
		 System.out.println("3- Registre uma disciplina");
		 System.out.println("4- Listagem de alunos");
		 System.out.println("5- Listagem de professores");
		 System.out.println("6- Listagem de disciplinas");
		 System.out.println("7- Exit");
		 System.out.println(" \n \t Por favor insira sua escolha :");
	 }


	 public void menu()
	 {
		 Scanner sc = new Scanner(System.in);

			 while (true) {

					 exibirMenu();	
					 int choix = sc.nextInt();
					 switch(choix)
					 {
							 case 1: { registreAluno(sc);	 } break;
							 case 2: { registreProfessor(sc); } break;
							 case 3: { criarDisciplina(sc);	 } break;
							 case 4: { listagemDeAlunos(sc); } break;
							 case 5: { listagemProfs();		 } break;
							 case 6: { listagemDisciplinas(); } break;
							 case 7: { sc.close(); System.exit(0); } break;
							 default: { System.out.println("Por favor insira uma eleição válida "); }
					 }
			 }
		 }

		 private void registreAluno(Scanner sc)
 {
				 System.out.println("Nome Aluno ?");
				 String nome = sc.next();
				 System.out.println("int ID Aluno ?");
				 int id = sc.nextInt();
				 System.out.println("int Numero Aluno ?");
			 int numero = sc.nextInt();

			 Aluno aluno = new Aluno(id, nome, numero);

			 ArrayList<Disciplina> disciplinas = listaDisciplinas(sc);

			 alunos.put(aluno, disciplinas);

		 }


	 private ArrayList<Disciplina> listaDisciplinas(Scanner sc)
	 {
			 listagemDisciplinas();

			 ArrayList<Disciplina> lista = new ArrayList<>();

			 while(true) {
					 System.out.println(" \n \t Nome disciplina ou quit ?");
					 String nomeDisciplina = sc.next();
			 Disciplina disciplina = (Disciplina)disciplinas.get(nomeDisciplina);
			 lista.add(disciplina);
					 if(nomeDisciplina.equals("quit")) { break; }
			 }

			 return lista;
		 }

		 private void registreProfessor(Scanner sc)
		 {
				 System.out.println("Nome Professor ?");
				 String nome = sc.next();

				 System.out.println("curriculum Vitae Professor ? ");
				 String curriculumVitae = sc.next();

				 System.out.println("int ID Professor ?");
				 listagemProfs();
				 int id = sc.nextInt();

				 Professor prof = new Professor(id, nome, curriculumVitae);

				 professores.put(id, prof);
		 }

		 private void criarDisciplina(Scanner sc)
		 {
				 System.out.println("Nome Disciplina ?");
				 String nomeDisciplina = sc.next();

				 System.out.println("Nome Curso ?");
				 String nomeCurso = sc.next();

				 System.out.println("int Semestre ?");
		 int semestre = sc.nextInt();

				 System.out.println("int ID professor responsavel ?");
				 listagemProfs();
				 int id = sc.nextInt();

			 Disciplina disciplina = new Disciplina(nomeDisciplina, nomeCurso, semestre, professores.get(id));
			 disciplinas.put(nomeDisciplina, disciplina);
	 }

	 private void listagemDeAlunos(Scanner sc)
	 {
			 Iterator iterator = alunos.keySet().iterator();

			 while (iterator.hasNext())
			 {
					 Aluno aluno = (Aluno)iterator.next();
					 System.out.println(aluno);

					 ArrayList disciplinas = alunos.get(aluno);
					 Iterator itr2 = disciplinas.iterator();

				 while(itr2.hasNext())
				 {
							 Disciplina disciplina = (Disciplina)itr2.next();
							 if(disciplina!=null) System.out.println(disciplina);
				 }
	 }
	 }

	 private void listagemProfs()
	 {
				 System.out.println(professores.toString());
	 }

	 private void listagemDisciplinas()
	 {
				 System.out.println(disciplinas.toString());
	 }



	 public static void main(String[] args)
	 {
				 new GestãoEscola().menu();
	 }
}

Edited by Baderous
geshi

Share this post


Link to post
Share on other sites
juliovieira

Obrigado Ernest, vou analisar o seu código e ver o que posso aproveitar, até porque já tenho praticamente tudo implementado falando só este pormenor.

Cumprimentos

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.