Gravar no vector

12 respostas
jefo_

e ai beleza … sou novo em programação … então não exijam muito de mim ok?

to com um probleminha to fazendo um trablho para a facul ,
o problema é o seguinte :
o vector da minha classe esta gravando sempre o ultimo argumento em todas as posiçoes anteriores e na que elea deveria estar tbm ???
Aqui esta o metodo de cadastro… (Soh para explicar o b é outra classe e dentro dele tem um vector que se chama periodic)

public void Cadastro(){
        	Periodico p=new Periodico();
        	Usuario u=new Usuario();
        	int op = 0; 
        	boolean valida=true;	
         while (op!=3 || valida){
        	try{
        	 op=Integer.parseInt(JOptionPane.showInputDialog("Escolha a opção para cadastrar:  \n 1- Periódico \n 2-Usuário " 
                                                              +"\n 3-Voltar ao menu anterior"));
        	 switch (op){
        	   case 1:
        	         p.Solicitar();
        	         for (int i=0;i<b.getPeriodic().size();i++){
          	           if (p.getCod()==b.getPeriodic().elementAt(i).getCod())
          	        	 p.setCod((int) (1000+Math.random()*99999));
          	         }
        	         getB().getPeriodic().add(b.getPeriodic().size(), p);
        		   break;
        	   case 2:
                	  u.Solicitar();
                	  for (int i=0;i<b.getUsers().size();i++){
             	         if (u.getMatricula()==b.getUsers().elementAt(i).getMatricula())
             	        	 u.setMatricula((int) (1000+Math.random()*9999));
             	         }
                	  getB().getUsers().add(u);
                   break;
        	   case 3:return; 
        	   default: JOptionPane.showMessageDialog(null,"Opção Inválida !!!");
        	 }        
            }catch (Exception ex){
        	  JOptionPane.showMessageDialog(null,"Opção Inválida !!! ");
              valida =false;
           }
          }
		 }

EDIT (Moderador) - Por favor, ponha as tags [ code ]

12 Respostas

marcosharbs

bem vindo
para começar uma dica coloque seus codigos entre as tags ‘ ’ para que fique formatado e mais facil de se ler, e nao entendi direito suas duvida, ele esta gravando em todas as posicoes do vetor o mesmo valor?

M

manda as outras classe!

nao tem como imaginar o que vc esta querendo fazer!

jefo_

ok … ai estão elas :
periodico:

import java.util.Vector;
import javax.swing.JOptionPane;


public class Periodico extends Historico{
  private int cod;
  private String titulo;
  private String autor;
  private boolean emprestado;
  private Vector<Historico> movimentacao;
     
      public Periodico(){
    	  super();
    	  setCod(0);
    	  setAutor(null);
    	  setTitulo(null);
    	  setEmprestado(false);
          setMovimentacao(new Vector<Historico>());
      }
      
      public boolean getEmprestado() {return emprestado;}
      public void setEmprestado(boolean emprestado) {this.emprestado = emprestado;}
      public int getCod() {return cod;}
      public void setCod(int cod) {this.cod = cod;}
      public String getTitulo() {return titulo;}
      public void setTitulo(String titulo) {this.titulo = titulo;}
      public String getAutor() {return autor;}
      public void setAutor(String autor) {this.autor = autor;}
  	  public void setMovimentacao(Vector<Historico> movimentacao) {this.movimentacao = movimentacao;}
	  public Vector<Historico> getMovimentacao() {return movimentacao;}
      
	  public String toString(){
    	  return "Código: "+getCod()+
    	         "\n Título: "+getTitulo()+
    	         "\n Autor: "+getAutor();
    
      }
      public String listarMovimentação(){
    	 String  saida=null;
    	  for (int i=0; i<movimentacao.size();i++){
    		  saida+= movimentacao.elementAt(i).toString();
    	  }
    	  return saida;
    	 }
      public void Solicitar() {
    	  setTitulo(JOptionPane.showInputDialog("Título:"));
    	  setAutor(JOptionPane.showInputDialog("Autor: "));
    	  setCod((int) (1000+Math.random()*9999));    
      }

}

classe usuario

import javax.swing.JOptionPane;
public class Usuario {
   private int Matricula;
   private String Nome;
   private boolean pendente;
   
     public Usuario(){
	    setMatricula(0);
	    setNome(null);
	    setPendente(false);
       }
     
     public boolean getPendente() {return pendente;}
     public void setPendente(boolean pendente) {this.pendente = pendente;}
     public int getMatricula() {return Matricula;}
     public void setMatricula(int matricula) {Matricula = matricula;}
     public String getNome() {return Nome;}
     public void setNome(String nome) {Nome = nome;}
     
     public void Solicitar(){
	   setNome(JOptionPane.showInputDialog("Nome:"));
  	   setMatricula((int) (1000+Math.random()*9999));
     }
     public String toString(){
	  return "Nome: "+getNome()+
	         "\n Matrícula: "+getMatricula();
     }

}

E A BIBLIOTECa

import java.util.Vector;
import javax.swing.JOptionPane;



public class Biblioteca {
    private Vector <Usuario> users;
    private Vector<Periodico> periodic;
	    public Biblioteca(){
        	setPeriodic(new Vector<Periodico>());
        	setUsers(new Vector<Usuario>());
        }
	    
        public Vector<Usuario> getUsers() {return users;}
	    public void setUsers(Vector<Usuario> users) {this.users = users;}
	    public Vector<Periodico> getPeriodic() {return periodic;}
	    public void setPeriodic(Vector<Periodico> periodic) {this.periodic = periodic;}
		
		public void Emprestimo(){
		  Historico h=new Historico();
		  try{ 
		   int aux=periodic.indexOf(Integer.parseInt(JOptionPane.showInputDialog("Insira o código do aluno: ")));
		   int aux2=users.indexOf(Integer.parseInt(JOptionPane.showInputDialog("Insira o código do livro para ser emprestado: ")));
		     if (aux2>=0 && periodic.elementAt(aux2).getEmprestado()!= true){
			    if (aux>=0 && users.elementAt(aux).getPendente()!=true){
				   int pos=(periodic.elementAt(aux).getMovimentacao().size())-1;
				   h.Solicitar(users.elementAt(aux).getNome());
				   periodic.elementAt(aux).getMovimentacao().add(h); 
				   periodic.elementAt(aux).setEmprestado(true);
				   users.elementAt(aux2).setPendente(true);
				   periodic.elementAt(aux).getMovimentacao().elementAt(pos).toString();
			    }else 
				   JOptionPane.showMessageDialog(null,"Livro alugado ou não registrado!");return;
	   	   }else
		     	   JOptionPane.showMessageDialog(null,"Aluno não registrado, ou já possui livro alugado");return;
	      }catch (Exception ex) {
       	           JOptionPane.showMessageDialog(null,"Livro não estava alugado ou não registrado!");
	      } 
        }
	    public void Devolução(){
	      try{
		     int aux=periodic.indexOf(Integer.parseInt(JOptionPane.showInputDialog("Insira o código do livro: ")));
		     int aux2=users.indexOf(Integer.parseInt(JOptionPane.showInputDialog("Insira o código do aluno: ")));
		       if (aux>=0 && periodic.elementAt(aux).getEmprestado()!= false){
			     if (aux2>=0 && users.elementAt(aux2).getPendente()!=false){	   
				   periodic.elementAt(aux).setEmprestado(false);
				   users.elementAt(aux2).setPendente(false);
				   JOptionPane.showMessageDialog(null, " Devolução feita !!!");
			      }else 
				  JOptionPane.showMessageDialog(null,"Aluno não registrado, ou não possui livro alugado");return;
		       }else
			      JOptionPane.showMessageDialog(null,"Livro não estava alugado ou não registrado!");return;
	         }catch (Exception ex) {
	        	  JOptionPane.showMessageDialog(null,"Livro não estava alugado ou não registrado!");
			}
	    }
        public void removerCliente(){
          try{	
        	int aux=users.indexOf(Integer.parseInt(JOptionPane.showInputDialog("Insira o Código do cliente a ser deletado:")));
             if (aux>=0 && getUsers().size()>0){
              users.removeElementAt(aux);
              JOptionPane.showMessageDialog(null, " Cliente removido com sucesso !");
              }  
           }catch (Exception ex) {
        	    JOptionPane.showMessageDialog(null,"Opção Inválida");
		   }
        }
        public void removerPeriodico(){
          try{	
        	int aux=periodic.indexOf(Integer.parseInt(JOptionPane.showInputDialog("Insira o Código do Periódico a ser deletado: ")));
            if (aux>=0 && getPeriodic().size()>0){
              periodic.removeElementAt(aux);
              JOptionPane.showMessageDialog(null, " Periódico removido com sucesso !");
            }  
          }catch (Exception ex){
      	      JOptionPane.showMessageDialog(null,"Opção Inválida");
	        }
        }
}
M

usa esse cara “code” minisculo:

faltou o valor de b

faltou a classe historico!

jefo_
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.JOptionPane;

public class Historico {
    private  Date emprestimo= new Date();
    private  Date devolucao= new Date();
    private String Usuario; 
		 public Date getEmprestimo() {return emprestimo;}
	     public void setEmprestimo(Date emprestimo) {this.emprestimo = emprestimo;}
	     public Date getDevolucao() {return devolucao;}
	     public void setDevolucao(Date devolucao) {this.devolucao = devolucao;}
         public String getUsuario() {return Usuario;}
		 public void setUsuario(String usuario) {Usuario = usuario;}
		 
		 public Historico(){
        	 setDevolucao(null);
        	 setEmprestimo(null);	
        	 setUsuario(null);
         }

		public void Solicitar(String nome) {
        	setEmprestimo(new Date());
		    try {
				setDevolucao(new SimpleDateFormat("dd/MM/yyyy").parse(JOptionPane.showInputDialog("Insira a data de devolução: ")));
			}  catch (Exception ex) {
				JOptionPane.showMessageDialog(null, "Digite uma Data Válida");
			}
            setUsuario(nome);
		}
        public  String toString(){
             return "Nome do Usuário: "+getUsuario()+
                    "\n Data de Empréstimo: "+getEmprestimo()+
        	        "\n Data de Devolução: "+(new SimpleDateFormat("dd/MM/yyyy").format(getDevolucao()));
         }


}

valor de b???

M
for (int i = 0; i < b.getPeriodic().size(); i++) {   // b = ???
   if (p.getCod() == b.getPeriodic().elementAt(i).getCod())
      p.setCod((int) (1000 + Math.random() * 99999));
   }
   getB().getPeriodic().add(b.getPeriodic().size(), p); //getB() = ???
jefo_

vlw pela ajuda ja consegui fazer… um colega mostrou como fazer …
sih que agora tenho mais uma duvida … o professor disse que tem que grvar esses vectors
o periodic e o user num arquivo texto ou num arquivo binário;
ele falow que era soh dar um
write object (do vector no caso ), queria saber como faezr isso …

M

bixo manda o projeto zipado

fica mais facil de dar uma olhada

para gravar em um arquivo vc pode ler:

http://www.guj.com.br/java.tutorial.artigo.13.1.guj

que eh batata

[]s

jefo_

assim esse artigo mostra manipular txt sim, mais tbm mostra que não vou conseguir grvar um abjto inteiro em txt e que vou precisar de um binario, e tbm nao sei manipular binario, se puder dar uma ajuda ou mostrar onde psso encontrar um artigo que ensine isso agradeço

M

Se tratar seu vetor como um objeto, existe maneiras de gravar o objeto inteiro e de umas vez so no txt e depois recuperar se preciso, para isso vc vai utilizar serializacao de obejtos.

http://www.devmedia.com.br/articles/viewcomp.asp?comp=3050
Nesse exemplo o objeto eh um cliente!

Sera que eh isso mesmo que tu quer?

[]s

jefo_

pow é isso mesmo :slight_smile: … pelo menos eu acho… vlw cara por enquanto acho que consigo me virar kkkk

jefo_
soh mais uma duvida ... quando eu ler esse arquivo ..... eu boto tipo assim...
public void lerClientesDeUmArquivo(){
    	   try{
    		   FileInputStream arquivoLeitura = new FileInputStream("/Users/Jefferson/Desktop/cliente.dat");//Carrega o arquivo
               ObjectInputStream objLeitura =new ObjectInputStream(arquivoLeitura);//Classe responsavel por recuperar os objetos do arquivo
               setUsers((Vector<Usuario>)  objLeitura.readObject());
               objLeitura.close();
               arquivoLeitura.close();
                   }catch( Exception ex ){
               
           }

       }
isso???
Criado 12 de novembro de 2008
Ultima resposta 14 de nov. de 2008
Respostas 12
Participantes 3