Escopo original do trabalho (apenas para referência) Trabalho de POO2 1) O trabalho a seguir deverá ter o código impresso e ainda uma versão em mídia (CD ou DVD) para ser testado seu funcionamento. 2) A fonte de impressão deve ser tamanho 12 e Times New Roman. 3) O diagrama e TODAS as telas do seu sistema deverão ser impressos. 4) No título das janelas deverá, OBRIGATORIAMENTE, ser apresentado o nome do autor do trabalho. 5) Deverá ser permitido ao usuário escolher o tipo de objeto que deseja criar (Professor ou Aluno), permitir o cadastro de tantos objetos quando ele desejar e, ao final, imprimir os dados dos objetos, como foram inseridos e após isto de forma ordenada com base no Nome e em ocorrendo nomes iguais com base no RA ou RGF, para isto use as funcionalidades da Interface Comparable e a implementação do método equals. 6) Insira nas classes Professor e Aluno o método toString() que deverá imprimir os dados do Professor ou Aluno de acordo com o objeto instanciado. 7) Na capa deverá constar: a) No topo: o Nome da Instituição, RA e Nome do aluno; b) No centro da página: O Título do trabalho; c) Na parte inferior da página: A cidade e o ano de entrega. Diagrama de Classe
Organização do projeto criador_listas > scripts de criação e impressão das listas de entidades; entidades_principais > entidades Pessoa, Aluno e Professor pedidas no exercício; telas > telas da aplicação e scripts de funcionamento das telas telas.componentes > alguns componentes comuns entre as telas trabalho_java_artur_guitelar > Main do projeto
Implementação do Diagrama de Classes Pessoa /* @Author: Artur Guitelar */ package entidades_principais; public class Pessoa { private String nome; private String cpf; private int idade; public Pessoa(String nome, String cpf, int idade) { this.nome = nome; this.cpf = cpf; this.idade = idade; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public String getCpf() { return cpf; } public void setCpf(String cpf) { this.cpf = cpf; } public int getIdade() { return idade; } public void setIdade(int idade) { this.idade = idade; } }
Professor package entidades_principais; public class Professor extends Pessoa implements Comparable { private long rgf;
public Professor(String nome, String cpf, int idade, long rgf) { super(nome, cpf, idade); this.rgf = rgf; } public long getRgf() { return rgf; } public void setRgf(long rgf) { this.rgf = rgf; } @Override public String toString() { return "nome: " + getNome() + ", cpf: " + getCpf() + ", idade: " + getIdade() + ", RGF: " + rgf + "."; } @Override public int compareTo(Object obj) { Professor professor = (Professor) obj; int resp = this.getNome().compareTo(professor.getNome()); if (resp != 0) { return resp; } else if (this.getRgf() < professor.getRgf()) { return -1; } else if (this.getRgf() > professor.getRgf()) { return 1; } else { return 0; } } @Override public boolean equals(Object obj) { return super.equals(obj); } }
Aluno package entidades_principais; public class Aluno extends Pessoa implements Comparable { private long ra; public Aluno(String nome, String cpf, int idade, long ra) { super(nome, cpf, idade);
this.ra = ra; } public long getRa() { return ra; } public void setRa(long ra) { this.ra = ra; } @Override public String toString() { return "nome: " + getNome() + ", cpf: " + getCpf() + ", idade: " + getIdade() + ", RA: " + ra + "."; } @Override public int compareTo(Object obj) { Aluno aluno = (Aluno) obj; int resp = this.getNome().compareTo(aluno.getNome()); if (resp != 0) { return resp; } else if (this.getRa() < aluno.getRa()) { return -1; } else if (this.getRa() > aluno.getRa()) { return 1; } else { return 0; } } @Override public boolean equals(Object obj) { return super.equals(obj); } }
Tela Inicial do sistema
TelaInicial package telas; import java.awt.*; import java.awt.event.*; import javax.swing.*; import telas.componentes.*; public class TelaInicial extends JFrame implements ActionListener, TelaPadrao { private final CriarTela telaIncial; private final int larguraJanela, alturaJanela; private int larguraComponente; private JButton btnProfessor; private JButton btnAluno; private JButton btnSair; public TelaInicial(){ larguraJanela = 300; alturaJanela = 200; telaIncial = new CriarTela(TituloJanela.TITULO_JANELA, larguraJanela, alturaJanela); telaIncial.criar(); telaIncial.setLayout(null); adicionarComponentes(); telaIncial.centralizar(); telaIncial.setResizable(false);
telaIncial.mostrar(); } @Override public final void adicionarComponentes(){ larguraComponente = larguraJanela - 20; JPanel header = header(); header.setSize(larguraComponente, 30); header.setLocation(6, 10); JPanel body = body(); body.setLocation(6, 50); JPanel footer = footer(); footer.setLocation(2, 130); telaIncial.add(header); telaIncial.add(body); telaIncial.add(footer); } @Override public final JPanel header() { return new Header("Sistema de Cadastro").criar(); } @Override public final JPanel body(){ JPanel body = new JPanel(); btnProfessor = new JButton(); btnAluno = new JButton(); body.setLayout(new GridLayout(2,1)); body.setSize(larguraComponente, 80); body.setBackground(Color.CYAN); btnProfessor.setText("Professor"); btnProfessor.addActionListener(this); btnAluno.setText("Aluno"); btnAluno.addActionListener(this); body.add(btnProfessor); body.add(btnAluno); return body;
} @Override public final JPanel footer(){ JPanel footer = new JPanel(); btnSair = new JButton(); footer.setLayout(new FlowLayout()); footer.setBackground(null); footer.setSize(larguraComponente, 100); btnSair.setText("sair"); btnSair.addActionListener(this); footer.add(btnSair); return footer; } @Override public void actionPerformed(ActionEvent evt){ if (evt.getSource() == btnProfessor){ new TelaCadastroProfessor(); telaIncial.dispose(); } if (evt.getSource() == btnAluno){ new TelaCadastroAluno(); telaIncial.dispose(); } if (evt.getSource() == btnSair) System.exit(0); } }
Tela de Cadastro do Professor
TelaCadastroProfessor package telas; import java.awt.*; import java.awt.event.*; import javax.swing.*; import entidades_principais.*; import criador_listas.*; import telas.componentes.*; public class TelaCadastroProfessor extends JFrame implements ActionListener, TelaPadrao { private final CriarTela tela; private final int larguraJanela, alturaJanela; private int larguraComponente; private JTextField txtNome; private JTextField txtCpf; private JTextField txtIdade; private JTextField txtRGF; private JButton btnCadastrar; private final ListaProfessores lista; public TelaCadastroProfessor(){ larguraJanela = 300; alturaJanela = 300; tela = new CriarTela(TituloJanela.TITULO_JANELA, larguraJanela, alturaJanela); tela.criar(); tela.setLayout(null); adicionarComponentes(); tela.centralizar(); tela.setResizable(false); lista = new ListaProfessores();
tela.mostrar(); } @Override public final void adicionarComponentes() { larguraComponente = larguraJanela - 20; JPanel header = header(); header.setSize(larguraComponente, 30); header.setLocation(6, 10); JPanel body = body(); body.setLocation(6, 50); JPanel footer = footer(); footer.setLocation(2, 220); tela.add(header); tela.add(body); tela.add(footer); } @Override public final JPanel header() { return new Header("Cadastro Professor").criar(); } @Override public final JPanel body(){ JPanel body = new JPanel(); JLabel lblNome = new JLabel(); JLabel lblCpf = new JLabel(); JLabel lblIdade = new JLabel(); JLabel lblRGF = new JLabel(); txtNome = new JTextField(); txtCpf = new JTextField(); txtIdade = new JTextField(); txtRGF = new JTextField(); body.setLayout(new GridLayout(4, 2, 4, 4)); body.setSize(larguraComponente, 150); body.setBackground(null); // setando as labels lblNome.setText("Nome:"); lblCpf.setText("CPF:"); lblIdade.setText("Idade:"); lblRGF.setText("RGF:");
// adicionando os campos body.add(lblNome); body.add(txtNome); body.add(lblCpf); body.add(txtCpf); body.add(lblIdade); body.add(txtIdade); body.add(lblRGF); body.add(txtRGF); return body; } @Override public final JPanel footer(){ JPanel footer = new JPanel(); btnCadastrar = new JButton(); footer.setLayout(new FlowLayout()); footer.setSize(larguraComponente, 100); footer.setBackground(null); btnCadastrar.setText("cadastrar"); btnCadastrar.addActionListener(this); footer.add(btnCadastrar); return footer; } @Override public void actionPerformed(ActionEvent evt){ if (evt.getSource() == btnCadastrar) { String nome, cpf; int idade; long rgf; VerificaCampoComNumero verificarIdade = new VerificaCampoComNumero(txtIdade); VerificaCampoComNumero verificarRGF = new VerificaCampoComNumero(txtRGF); if(verificaCamposVazios()) { JOptionPane.showMessageDialog(null, "Favor preencher todos os campos!"); return; } if(!verificarIdade.verificar()){
JOptionPane.showMessageDialog(null, "O campo idade aceita apenas números."); return; } if(!verificarRGF.verificar()){ JOptionPane.showMessageDialog(null, "O campo RGF aceita apenas números."); return; } nome = txtNome.getText(); cpf = txtCpf.getText(); idade = Integer.parseInt(txtIdade.getText()); rgf = Long.parseLong(txtRGF.getText()); lista.adidionarProfessor(new Professor(nome, cpf, idade, rgf)); int resp = JOptionPane.showConfirmDialog(null, "Deseja continuar cadastrando?", TituloJanela.TITULO_JANELA, JOptionPane.YES_NO_OPTION); if(resp == 0){ limpaCampos(); } if(resp == 1){ lista.imprimir(); tela.dispose(); } } } private void limpaCampos(){ txtNome.setText(""); txtCpf.setText(""); txtIdade.setText(""); txtRGF.setText(""); } private boolean verificaCamposVazios(){ return txtNome.getText().isEmpty() || txtCpf.getText().isEmpty() || txtIdade.getText().isEmpty() || txtRGF.getText().isEmpty(); } }
Tela de Cadastro do Aluno* *As mensagens de verificação (campos vazios, campos com número e etc) são as mesmas para os dois cadastros.
TelaCadastroAluno package telas; import java.awt.*; import java.awt.event.*; import javax.swing.*; import entidades_principais.*; import criador_listas.*; import telas.componentes.*; public class TelaCadastroAluno extends JFrame implements ActionListener, TelaPadrao { private final CriarTela tela; private final int larguraJanela, alturaJanela; private int larguraComponente; private JTextField txtNome; private JTextField txtCpf; private JTextField txtIdade; private JTextField txtRA; private JButton btnCadastrar; private final ListaAlunos lista; public TelaCadastroAluno(){
larguraJanela = 300; alturaJanela = 300; tela = new CriarTela(TituloJanela.TITULO_JANELA, larguraJanela, alturaJanela); tela.criar(); tela.setLayout(null); adicionarComponentes(); tela.centralizar(); tela.setResizable(false); lista = new ListaAlunos(); tela.mostrar(); } @Override public final void adicionarComponentes() { larguraComponente = larguraJanela - 20; JPanel header = header(); header.setSize(larguraComponente, 30); header.setLocation(6, 10); JPanel body = body(); body.setLocation(6, 50); JPanel footer = footer(); footer.setLocation(2, 220); tela.add(header); tela.add(body); tela.add(footer); } @Override public final JPanel header() { return new Header("Cadastro Aluno").criar(); } @Override public final JPanel body(){ JPanel body = new JPanel(); JLabel lblNome = new JLabel(); JLabel lblCpf = new JLabel();
JLabel lblIdade = new JLabel(); JLabel lblRA = new JLabel(); txtNome = new JTextField(); txtCpf = new JTextField(); txtIdade = new JTextField(); txtRA = new JTextField(); body.setLayout(new GridLayout(4, 2, 4, 4)); body.setSize(larguraComponente, 150); body.setBackground(null); // setando as labels lblNome.setText("Nome:"); lblCpf.setText("CPF:"); lblIdade.setText("Idade:"); lblRA.setText("RA:"); // adicionando os campos body.add(lblNome); body.add(txtNome); body.add(lblCpf); body.add(txtCpf); body.add(lblIdade); body.add(txtIdade); body.add(lblRA); body.add(txtRA); return body; } @Override public final JPanel footer(){ JPanel footer = new JPanel(); btnCadastrar = new JButton(); footer.setLayout(new FlowLayout()); footer.setSize(larguraComponente, 100); footer.setBackground(null); btnCadastrar.setText("cadastrar"); btnCadastrar.addActionListener(this); footer.add(btnCadastrar); return footer; }
@Override public void actionPerformed(ActionEvent evt){ if (evt.getSource() == btnCadastrar) { String nome, cpf; int idade; long ra; VerificaCampoComNumero verificarIdade = new VerificaCampoComNumero(txtIdade); VerificaCampoComNumero verificarRA = new VerificaCampoComNumero(txtRA); if(verificaCamposVazios()) { JOptionPane.showMessageDialog(null, "Favor preencher todos os campos!"); return; } if(!verificarIdade.verificar()){ JOptionPane.showMessageDialog(null, "O campo idade aceita apenas números."); return; } if(!verificarRA.verificar()){ JOptionPane.showMessageDialog(null, "O campo RA aceita apenas números."); return; } nome = txtNome.getText(); cpf = txtCpf.getText(); idade = Integer.parseInt(txtIdade.getText()); ra = Long.parseLong(txtRA.getText()); lista.adidionarAluno(new Aluno(nome, cpf, idade, ra)); int resp = JOptionPane.showConfirmDialog(null, "Deseja continuar cadastrando?", TituloJanela.TITULO_JANELA, JOptionPane.YES_NO_OPTION); if(resp == 0){ limpaCampos(); } if(resp == 1){ lista.imprimir(); tela.dispose(); } } } private void limpaCampos(){ txtNome.setText(""); txtCpf.setText("");
txtIdade.setText(""); txtRA.setText(""); } private boolean verificaCamposVazios(){ return txtNome.getText().isEmpty() || txtCpf.getText().isEmpty() || txtIdade.getText().isEmpty() || txtRA.getText().isEmpty(); } }
Tela de Relatório** **Essa é a tela que mostra os dados logo após o cadastro. É a mesma pros dois casos (professor e aluno).
TelaRelatorio package telas; import java.awt.*; import java.awt.event.*; import javax.swing.*; import telas.componentes.*;
public class TelaRelatorio extends JFrame implements ActionListener, TelaPadrao { private final CriarTela tela; private final int larguraJanela, alturaJanela; private int larguraComponente; private final String texto; private JButton btnTerminar; public TelaRelatorio(String texto) { this.texto = texto; larguraJanela = 600; alturaJanela = 470; tela = new CriarTela(TituloJanela.TITULO_JANELA, larguraJanela, alturaJanela); tela.criar(); tela.setLayout(null); adicionarComponentes(); tela.centralizar(); tela.setResizable(false); tela.mostrar(); } @Override public final void adicionarComponentes() { larguraComponente = larguraJanela - 20; JPanel header = header(); header.setSize(larguraComponente, 30); header.setLocation(6, 10); JPanel body = body(); body.setLocation(6, 50); JPanel footer = footer(); footer.setLocation(2, 390); tela.add(header); tela.add(body);
tela.add(footer); } @Override public JPanel header() { return new Header("Relatรณrio de Cadastro").criar(); } @Override public JPanel body() { JPanel body = new JPanel(); JTextArea textArea = new JTextArea(18, 50); JScrollPane scrollPane = new JScrollPane(textArea); body.setLayout(new FlowLayout()); body.setBackground(null); body.setSize(larguraComponente, 330); textArea.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); textArea.setText(texto); textArea.setEditable(false); body.add(scrollPane); return body; } @Override public JPanel footer() { JPanel footer = new JPanel(); btnTerminar = new JButton(); footer.setLayout(new FlowLayout()); footer.setBackground(null); footer.setSize(larguraComponente, 100); btnTerminar.setText("terminar"); btnTerminar.addActionListener(this); footer.add(btnTerminar); return footer; } @Override public void actionPerformed(ActionEvent evt) { if (evt.getSource() == btnTerminar){ new TelaInicial(); tela.dispose(); } }
}
Demais scripts Abaixo os demais scripts que, de alguma forma, auxiliam no fluxo de funcionamento das telas acima. ListaAlunos â&#x20AC;&#x201C; cria listas de alunos e os imprime package criador_listas; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import entidades_principais.*; import telas.TelaRelatorio; public class ListaAlunos { ArrayList alunos; public ListaAlunos() { alunos = new ArrayList(); } public void adidionarAluno(Aluno aluno){ alunos.add(aluno); } public void imprimir(){ String str = "--- Imprimindo lista de alunos ---\n"; Collections.sort(alunos); Iterator iter = alunos.iterator(); while (iter.hasNext()){ str += "\n" + iter.next(); } new TelaRelatorio(str); } } ListaProfessores â&#x20AC;&#x201C; cria listas de professores e os imprime package criador_listas;
import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import entidades_principais.*; import telas.TelaRelatorio; public class ListaProfessores { ArrayList professores; public ListaProfessores() { professores = new ArrayList(); } public void adidionarProfessor(Professor professor){ professores.add(professor); } public void imprimir(){ Collections.sort(professores); String str = "--- Imprimindo lista de professores ---\n"; Iterator iter = professores.iterator(); while (iter.hasNext()){ str += "\n" + iter.next(); } new TelaRelatorio(str); } } CriarTela â&#x20AC;&#x201C; cria e centraliza janelas de forma padrĂŁo para todas as telas package telas; import java.awt.*; import javax.swing.*; public class CriarTela extends JFrame{ String tituloJanela; int largura, altura; public CriarTela(String tituloJanela, int largura, int altura){ this.tituloJanela = tituloJanela; this.largura = largura; this.altura = altura; }
public void criar(){ setTitle(tituloJanela); setSize(largura, altura); getContentPane().setBackground(Color.white); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public void centralizar(){ Dimension screen = Toolkit.getDefaultToolkit().getScreenSize(); Dimension janela = getSize(); if (janela.height > screen.height) setSize(janela.width, screen.height); if (janela.width > screen.width) setSize(screen.width, janela.width); setLocation((screen.width - janela.width)/2, (screen.height - janela.height)/2); } public void mostrar(){ setVisible(true); } } TelaPadrao (interface) – define regras padrão para criação de janelas na aplicação package telas; import javax.swing.*; public interface TelaPadrao { void adicionarComponentes(); JPanel header(); JPanel body(); JPanel footer(); } VerificaCampoComNumero – define a regra de verificação de campos numéricos no preenchimento do formulário package telas; import javax.swing.JTextField; public class VerificaCampoComNumero {
private final JTextField campo; public VerificaCampoComNumero(JTextField campo) { this.campo = campo; } public boolean verificar(){ String str = campo.getText(); char[] chars = str.toCharArray(); boolean ok = true; for(int i = 0; i < chars.length; i++){ try { Integer.parseInt( String.valueOf( chars[i] )); } catch (NumberFormatException exc) { ok = false; break; } } return ok; } } Header – auxilia na criação de cabeçalhos padrão package telas.componentes; import java.awt.Component; import java.awt.FlowLayout; import javax.swing.JLabel; import javax.swing.JPanel; public class Header { private final String txtHeader; public Header(String txtHeader) { this.txtHeader = txtHeader; } public JPanel criar(){ JPanel header = new JPanel(); JLabel titulo = new JLabel(); header.setLayout(new FlowLayout()); header.setBackground(null); header.setAlignmentX(Component.CENTER_ALIGNMENT); header.setAlignmentY(Component.CENTER_ALIGNMENT); titulo.setText(txtHeader);
header.add(titulo); return header; } } TituloJanela â&#x20AC;&#x201C; titulo padrĂŁo para todas as janelas package telas.componentes; public abstract class TituloJanela { public static final String TITULO_JANELA = "Artur Guitelar"; } Main /* @author: Artur Guitelar */ package trabalho_java_artur_guitelar; import telas.*; public class Main { public static void main(String[] args) { new TelaInicial(); } }