Você está na página 1de 6

Exercicio sobre Interface Gráfica implementando array de Objectos LTP1-Regular

EXERCÍCIOS DE APLICAÇÃO

1. Clinica SAUDE PARA TODOS pretende informatizar a sua gestão. Depois de todo trabalho de análise e modelação culminou-se com um modelo físico de
dados, composto por várias classess. Caro estudante é convidado a fazer equipe e a sua tarefa é exclusivamente de trabalhar com classe designada MEDICO,
esta é caracterizado pelo nuit, nome, sexo, documento de identificação(tipo e numero), naturalidade e especialização onde um medido pode ter se
especializado em varias areas.
a) Criar o objecto Medico, tento em conta:
✓ Variaveis são privadas e areas de especializações do medico são armazenados num Vector;
✓ Dois construtores (um vazio e outro com todos elementos);
✓ Métodos getters e setters;
✓ public String especializacoes(), que retorna as areas de especializações no Vector do medico em forma de uma String;
✓ toString() a retornar todas características do objecto em forma de uma String.

b) Codificar o formulário abaixo e implementa o Vector de Medicos de objecto acima criada nas acções evidentes nos botões.:

a) OBJECTO MEDICO

import java.util.Vector;
import java.io.Serializable;
/**
* @author AILanga
*/
public class Medico implements Serializable {
private int nuit;
private String nome, sexo, tipoDoc, nrDoc, natural;
private Vector especializacao;

public Medico() {
}
public Medico(int nuit, String nome, String sexo, String tipoDoc, String nrDoc, String natural, Vector especializacao){
this.nuit = nuit;
this.nome = nome;
this.sexo = sexo;
this.tipoDoc = tipoDoc;
this.nrDoc = nrDoc;
this.natural = natural;
this.especializacao = especializacao;
}

public int getNuit() {

Américo Langa Semestre2 2017


Exercicio sobre Interface Gráfica implementando array de Objectos LTP1-Regular

return nuit;
}
public String getNome() {
return nome;
}
public String getSexo() {
return sexo;
}
public String getTipoDoc() {
return tipoDoc;
}
public String getNrDoc() {
return nrDoc;
}
public String getNatural() {
return natural;
}
public Vector getEspecializacao() {
return especializacao;
}

public void setNuit(int nuit) {


this.nuit = nuit;
}
public void setNome(String nome) {
this.nome = nome;
}
public void setSexo(String sexo) {
this.sexo = sexo;
}
public void setTipoDoc(String tipoDoc) {
this.tipoDoc = tipoDoc;
}
public void setNrDoc(String nrDoc) {
this.nrDoc = nrDoc;
}
public void setNatural(String natural) {
this.natural = natural;
}
public void setEspecializacao(Vector especializacao) {
this.especializacao = especializacao;
}

public String especializacoes(){


String especials="";
for(int i=0; i< especializacao.size(); i++){
especials =especials +(String)especializacao.elementAt(i)+"; " ;
}
return especials;
}
public String toString(){
return nuit +"\t" +nome +"\t" +sexo +"\t" +tipoDoc +"\t" +nrDoc +"\t" +natural +"\t" +especializacoes();
}

b) PROGRAMA QUE CRIA FORMULÁRIO E IMPLEMENTA ARRAY DE OBJECTO VENDA

/**
* @author AILanga
*/
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.Container;
import java.awt.event.*;
import java.io.*;
import java.util.Vector;
public class FrmMedico extends JFrame{
private Container tela=getContentPane();
private JPanel pnCad, pnOpera, pnNatural, pnEspecials;
private JLabel lbNuit, lbNome, lbSexo, lbTipoDoc, lbNrDoc, lbProv, lbDist, lbNewProv, lbNewDist;
private JTextField txtNuit, txtNome, txtNrDoc;
private JComboBox cbTipoDoc, cbProv, cbDist;
private JRadioButton rbMas, rbFem;
private ButtonGroup bgSexo;
private JCheckBox ckCard, ckMedGeral, ckOrto, ckGeneco, ckPediatra, ckUrlogia,ckDermato, ckOnco;
private JButton btSave, btSearch, btremove, btRemove, btSaveObjectFile, btSaveTextFile;
private DefaultTableModel modelo;

Américo Langa Semestre2 2017


Exercicio sobre Interface Gráfica implementando array de Objectos LTP1-Regular

private JTable tabela;


private JScrollPane scroll;

private Vector medicos = new Vector();

public FrmMedico(){
super("Sistema de Gestão Hospitalar - Cadastro do Medico");
setSize(1024,600);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(null);

pnCad = new JPanel(); pnCad.setBounds(100,30,550,300); tela.add(pnCad);


pnCad.setBorder(BorderFactory.createTitledBorder("Cadastro do Medico"));
pnCad.setLayout(null);

lbNuit = new JLabel("NUIT"); lbNuit.setBounds(70,40,100,20); pnCad.add(lbNuit);


txtNuit = new JTextField(); txtNuit.setBounds(120,40,200,20); pnCad.add(txtNuit);

lbNome = new JLabel("NOME"); lbNome.setBounds(70,70,100,20); pnCad.add(lbNome);


txtNome = new JTextField(); txtNome.setBounds(120,70,200,20); pnCad.add(txtNome);

lbSexo = new JLabel("SEXO"); lbSexo.setBounds(80,100,100,25); pnCad.add(lbSexo);


rbMas = new JRadioButton("Masculino"); rbMas.setBounds(120,100,90,20); pnCad.add(rbMas);
rbFem = new JRadioButton("Femenino"); rbFem.setBounds(210,100,90,20); pnCad.add(rbFem);
bgSexo = new ButtonGroup();bgSexo.add(rbMas); bgSexo.add(rbFem);

lbTipoDoc = new JLabel("TIPO DOCUMENT"); lbTipoDoc.setBounds(20,130,100,20); pnCad.add(lbTipoDoc);


String listDoc[]={"B.I.", "Pasaporte","Carta de Conducao"};
cbTipoDoc = new JComboBox(listDoc); cbTipoDoc.setBounds(120,130,200,20); pnCad.add(cbTipoDoc);

lbNrDoc = new JLabel("NR. DOCUMENT"); lbNrDoc.setBounds(20,160,100,20); pnCad.add(lbNrDoc);


txtNrDoc = new JTextField(); txtNrDoc.setBounds(120,160,200,20); pnCad.add(txtNrDoc);

pnNatural = new JPanel(); pnNatural.setBounds(15,190,320,90); pnCad.add(pnNatural);


pnNatural.setBorder(BorderFactory.createTitledBorder("Naturalidade"));
pnNatural.setLayout(null);

lbProv = new JLabel("PROVINCIA"); lbProv.setBounds(10,25,70,20); pnNatural.add(lbProv);


String provs[]={"Maputo Provincia", "Maputo Cidade"};
cbProv = new JComboBox(provs); cbProv.setBounds(80,25,200,20); pnNatural.add(cbProv);

lbDist = new JLabel("DISTRITO"); lbDist.setBounds(10,55,70,20); pnNatural.add(lbDist);


String dists[]={"Cidade de Matola", "Boane", "Manhiça", "Ka Pfumo", "Ka Maxakene"};
cbDist = new JComboBox(dists); cbDist.setBounds(80,55,200,20); pnNatural.add(cbDist);

pnEspecials = new JPanel(); pnEspecials.setBounds(350,20,180,260); pnCad.add(pnEspecials);


pnEspecials.setBorder(BorderFactory.createTitledBorder("Especializacoes"));
pnEspecials.setLayout(null);

ckCard =new JCheckBox("Cardialogista"); ckCard.setBounds(20,20,140,20); pnEspecials.add(ckCard);


ckMedGeral =new JCheckBox("Medico Generalista"); ckMedGeral.setBounds(20,50,140,20); pnEspecials.add(ckMedGeral);
ckOrto =new JCheckBox("Ortopediagista"); ckOrto.setBounds(20,80,140,20); pnEspecials.add(ckOrto);
ckGeneco =new JCheckBox("Genecogista"); ckGeneco.setBounds(20,110,140,20); pnEspecials.add(ckGeneco);
ckPediatra =new JCheckBox("Pediatra"); ckPediatra.setBounds(20,140,140,20); pnEspecials.add(ckPediatra);
ckUrlogia =new JCheckBox("Urlogista"); ckUrlogia.setBounds(20,170,140,20); pnEspecials.add(ckUrlogia);
ckDermato =new JCheckBox("Dematologista"); ckDermato.setBounds(20,200,140,20); pnEspecials.add(ckDermato);
ckOnco =new JCheckBox("Oncologista"); ckOnco.setBounds(20,230,140,20); pnEspecials.add(ckOnco);

pnOpera = new JPanel(); pnOpera.setBounds(700,30,240,300); tela.add(pnOpera);


pnOpera.setBorder(BorderFactory.createTitledBorder("Operacoes"));
pnOpera.setLayout(null);

btSave = new JButton("GRAVAR"); btSave.setBounds(25,30,170,45); pnOpera.add(btSave);


btSearch = new JButton("PROCURAR"); btSearch.setBounds(25,80,170,45); pnOpera.add(btSearch);
btRemove = new JButton("REMOVER"); btRemove.setBounds(25,130,170,45); pnOpera.add(btRemove);
btSaveObjectFile = new JButton("GRAVAR-OBJECTFILE"); btSaveObjectFile.setBounds(25,190,170,45);
pnOpera.add(btSaveObjectFile);
btSaveTextFile = new JButton("GRAVAR-TEXTFILE"); btSaveTextFile.setBounds(25,240,170,45);
pnOpera.add(btSaveTextFile);

String tituloColunas[]={"NUIT", "NOME COMPLETO", "SEXO", "TIPO-DOC", "NR-DOC", "NATURAL","ESPECIALIZACAO"};


modelo = new DefaultTableModel(new Object[][]{}, tituloColunas);
tabela = new JTable(modelo);
scroll = new JScrollPane(tabela); scroll.setBounds(15,350,980,200); tela.add(scroll);

btSave.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent evento){

Américo Langa Semestre2 2017


Exercicio sobre Interface Gráfica implementando array de Objectos LTP1-Regular

Vector listaEspecificacoes = new Vector();


int nuit = Integer.parseInt(txtNuit.getText());
String nome = txtNome.getText();
String sexo;
if(rbMas.isSelected()){
sexo=rbMas.getText();
}else{
sexo = rbFem.getText();
}
String tipoDoc = cbTipoDoc.getSelectedItem().toString();
String nrDoc = txtNrDoc.getText();
String prov = cbProv.getSelectedItem().toString();
String natural = cbDist.getSelectedItem().toString();
if(ckCard.isSelected()){
listaEspecificacoes.addElement(ckCard.getText());
}
if(ckMedGeral.isSelected()){
listaEspecificacoes.addElement(ckMedGeral.getText());
}
if(ckOrto.isSelected()){
listaEspecificacoes.addElement(ckOrto.getText());
}
if(ckGeneco.isSelected()){
listaEspecificacoes.addElement(ckGeneco.getText());
}
if(ckPediatra.isSelected()){
listaEspecificacoes.addElement(ckPediatra.getText());
}
if(ckUrlogia.isSelected()){
listaEspecificacoes.addElement(ckUrlogia.getText());
}
if(ckDermato.isSelected()){
listaEspecificacoes.addElement(ckDermato.getText());
}
if(ckOnco.isSelected()){
listaEspecificacoes.addElement(ckOnco.getText());
}

Medico novoMedico = new Medico(nuit, nome, sexo, tipoDoc, nrDoc, natural, listaEspecificacoes);
insereMedico(novoMedico);
}
});

btSearch.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent evento){
int nuit = Integer.parseInt(JOptionPane.showInputDialog("NUIT DO MEDICO"));
buscaMedico(nuit);
}
});

btRemove.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent evento){
int nuit = Integer.parseInt(JOptionPane.showInputDialog("NUIT DO MEDICO"));
removeMedico(nuit);
}
});

btSaveObjectFile.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent evento){
saveToObjectFile();
}
});

btSaveTextFile.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent evento){
saveToTextFile();
}
});

carregaDados();
}

private int procuraMedico(int nuit){


int indice=-1;
for(int i=0; i < medicos.size(); i++){
Medico estMed = (Medico) medicos.elementAt(i);
if(nuit == estMed.getNuit()){
indice=i;
break;

Américo Langa Semestre2 2017


Exercicio sobre Interface Gráfica implementando array de Objectos LTP1-Regular

}
}
return indice;
}

private void insereMedico(Medico novoMed){


int indice = procuraMedico(novoMed.getNuit());
if(indice == -1){
medicos.addElement(novoMed);
modelo.addRow(new Object[]{novoMed.getNuit(), novoMed.getNome(), novoMed.getSexo(), novoMed.getTipoDoc(),
novoMed.getNrDoc(), novoMed.getNatural(), novoMed.especializacoes()});
JOptionPane.showMessageDialog(null, "Inserido com sucesso");
}else{
JOptionPane.showMessageDialog(null, "Falha na Inserção: Não pode repetir NUIT", "Inserção",
JOptionPane.ERROR_MESSAGE);
}
}

private void buscaMedico(int nuit){


int indice = procuraMedico(nuit);
if(indice != -1){
Medico med = (Medico) medicos.elementAt(indice);
txtNuit.setText(String.valueOf(med.getNuit()));
txtNome.setText(med.getNome());
if(med.getSexo().equalsIgnoreCase(rbMas.getText())){
rbMas.setSelected(true);
}else{
rbFem.setSelected(true);
}
cbTipoDoc.setSelectedItem(med.getTipoDoc());
txtNrDoc.setText(med.getNrDoc());
cbDist.setSelectedItem(med.getNatural());
ckMedGeral.setSelected(false);
ckCard.setSelected(false);
ckMedGeral.setSelected(true);
ckOrto.setSelected(false);
ckGeneco.setSelected(false);
ckPediatra.setSelected(false);
ckUrlogia.setSelected(false);
ckDermato.setSelected(false);
ckOnco.setSelected(false);
for(int i=0; i < med.getEspecializacao().size(); i++){
String especi = (String)med.getEspecializacao().elementAt(i);
if(especi.equalsIgnoreCase(ckCard.getText())){
ckCard.setSelected(true);
}
if(especi.equalsIgnoreCase(ckMedGeral.getText())){
ckMedGeral.setSelected(true);
}
if(especi.equalsIgnoreCase(ckOrto.getText())){
ckOrto.setSelected(true);
}
if(especi.equalsIgnoreCase(ckGeneco.getText())){
ckGeneco.setSelected(true);
}
if(especi.equalsIgnoreCase(ckPediatra.getText())){
ckPediatra.setSelected(true);
}
if(especi.equalsIgnoreCase(ckUrlogia.getText())){
ckUrlogia.setSelected(true);
}
if(especi.equalsIgnoreCase(ckDermato.getText())){
ckDermato.setSelected(true);
}
if(especi.equalsIgnoreCase(ckOnco.getText())){
ckOnco.setSelected(true);
}
}

tabela.setRowSelectionInterval(indice, indice);
}
}

private void removeMedico(int nuit){


int indice = procuraMedico(nuit);

if(indice != -1){
Medico med = (Medico) medicos.elementAt(indice);

Américo Langa Semestre2 2017


Exercicio sobre Interface Gráfica implementando array de Objectos LTP1-Regular

int confirma = JOptionPane.showConfirmDialog(null, "Deseja mesmo remover o medico: "+med.getNuit() +":


"+med.getNome(),"Remoção",JOptionPane.YES_NO_OPTION);
if(confirma == JOptionPane.YES_OPTION){
medicos.removeElementAt(indice);
modelo.removeRow(indice);
JOptionPane.showMessageDialog(null, "Removido com Sucesso");
}else{
JOptionPane.showMessageDialog(null, "Remocao cancelada");
}
}else{
JOptionPane.showMessageDialog(null, "o medico com NUI:"+nuit +" nao registado", "Remoção",
JOptionPane.WARNING_MESSAGE);
}
}

private void saveToTextFile(){


try{
FileWriter file = new FileWriter("D:/Meus Clientes/medicos.txt");
BufferedWriter save = new BufferedWriter(file);
for(int i=0; i<medicos.size(); i++){
Medico novoMedico=(Medico)medicos.elementAt(i);
save.write(novoMedico.toString());
save.newLine();
}
save.close();
JOptionPane.showMessageDialog(null, "Gravado com sucesso");
}catch(Exception ex){
ex.printStackTrace();
JOptionPane.showMessageDialog(null, "ERRO NO ACESSO/MANUSEAMENTO DO FICHEIRO DE TEXTO:\n"+ex.getMessage(),
"Ficheiro de Texto", JOptionPane.ERROR_MESSAGE);
}
}

private void saveToObjectFile(){


try{
FileOutputStream file = new FileOutputStream("D:/Meus Clientes/medicos.dat");
ObjectOutputStream save = new ObjectOutputStream(file);
save.writeObject(medicos);
file.close();
save.close();
JOptionPane.showMessageDialog(null, "Gravado com sucesso");
}catch(Exception ex){
ex.printStackTrace();
JOptionPane.showMessageDialog(null,"ERRO AO GRAVAR NO FICHEIRO DE OBJECTOS:\n"+ex.getMessage(), "Fivheiro de
Objectos", JOptionPane.ERROR_MESSAGE);
}
}
private void carregaDados(){
try{
FileInputStream file = new FileInputStream("D:/Meus Clientes/medicos.dat");
ObjectInputStream read = new ObjectInputStream(file);
medicos = (Vector)read.readObject();
file.close();
read.close();
for(int i=0; i< medicos.size(); i++){
Medico novoMed=(Medico)medicos.elementAt(i);
modelo.addRow(new Object[]{novoMed.getNuit(), novoMed.getNome(), novoMed.getSexo(), novoMed.getTipoDoc(),
novoMed.getNrDoc(), novoMed.getNatural(), novoMed.especializacoes()});
}
} catch (Exception ex) {
JOptionPane.showMessageDialog(null, "ERRO NO ACESSO/MANUSEAMENTO DO FICHEIRO DE OBJECTO:\n" +ex.getMessage());
System.exit(0);
}
}

public static void main(String[] args) {


FrmMedico run=new FrmMedico();
run.setVisible(true);
}

Américo Langa Semestre2 2017