Programa para gerir livros

7 respostas
D

Bom dia.

Estou a tentar desenvolver um programa simples para gerir livros usando listas. Tenho alguns problemas com a lógica a aplicar para resolver as questões que preciso de fazer. Gostaria que alguém me pudesse ajudar dando uma olhadela no código e dizendo se o que estou a fazer está no caminho certo ou se há sugestões para melhorar. Neste momento, a parte de inserir livros não está a funcionar correctamente. Há mais métodos que fiz para ver se funcionavam mas não fazem o que é pretendido no menu.

Agradeço desde já a ajuda.

Classe Menu
package pacote;
import javax.swing.*;

public class Menu {       
    public static int Escolhas(){
        int op;
           do {
               String a="Menu"+ 
                           "\n1 - Inserir Livro"+
                           "\n2 - Listar Livros por ordem alfabética de título"+ 
                           "\n3 - Listar Livros de um autor por ordem alfabética de título"+
                           "\n4 - Listar Livros de uma Área por ordem alfabética de título" +
                           "\n5 - Listar Um Livro por ISBN"+  
                           "\n6 - Eliminar Livro Por Título"+
                           "\n7 - Listar Autores com Livros"+
                           "\n0 - Sair";
               op=Integer.parseInt(JOptionPane.showInputDialog(a+"\nOpção? (0 a 7)"));
           }
           while ((op<0) || (op>7));
           return op;    
    }
             
        public static void main(String[]args){
            ListaAutores la = new ListaAutores();
            ListaLivros ll = new ListaLivros();
            
            
            int opcao=Escolhas();
                 while (opcao!=0){
                     switch(opcao){   
                     
                     // Inserir Livros
                     case 1:{
                         String titulo=JOptionPane.showInputDialog("Inserir título do Livro: ");
                         int ano = Integer.parseInt(JOptionPane.showInputDialog("Inserir ano do Livro: "));
                         String isbn=JOptionPane.showInputDialog("Inserir ISBN do Livro: ");
                         double preco= Double.parseDouble(JOptionPane.showInputDialog("Inserir preço do Livro: "));
                         String area=JOptionPane.showInputDialog("Inserir Área Científica do Livro: ");
                         String nome=JOptionPane.showInputDialog("Inserir Autor do Livro: ");
                         Livro novo = new Livro(titulo, ano, isbn, preco, area);
                         ll.insere(novo);
                         la.insere(nome);
                         break;
                     }  
                     
                     // Listar Livros por ordem alfabética de título
                     case 2:{
                         ll.lista();
                         break;
                     }  
                     
                      // Listar Livros de um autor por ordem alfabética de título
                     case 3:{  
                         la.listaAutores();                                        
                         break;
                     }    
             
                     //Listar Livros de uma Área por ordem alfabética de título
                     case 4:{
                         
                         break;
                     } 
                     
                     //Listar Um Livro por ISBN
                     case 5:{
                        
                         break;
                     }  
                        
                     //Eliminar Livro Por Título
                     case 6:{
                         
                         break;
                     }  
                     
                   //Listar Autores com Livros
                     case 7:{
                         
                         break;
                     }  
                     
                     default: System.out.println("Opção não disponível. Escolha uma das opções!");
                     }               
                     opcao=Escolhas();             
                 }       
        }
}
Classe Livro
package pacote;

public class Livro {

	private	String titulo;
	private int ano;
	private String isbn;
	private double preco;
	private String area;
	private Autor primAutor;
	private Livro proxLivro;
	
	public Livro (String tituloT, int anoT, String isbnT, double precoT, String areaT){
		titulo = tituloT;
		ano = anoT;
		isbn = isbnT;
		preco = precoT;
		area = areaT;
	}

	public String getTitulo() {
		return titulo;
	}

	public void setTitulo(String titulo) {
		this.titulo = titulo;
	}

	public int getAno() {
		return ano;
	}

	public void setAno(int ano) {
		this.ano = ano;
	}

	public String getIsbn() {
		return isbn;
	}

	public void setIsbn(String isbn) {
		this.isbn = isbn;
	}

	public double getPreco() {
		return preco;
	}

	public void setPreco(double preco) {
		this.preco = preco;
	}

	public String getArea() {
		return area;
	}

	public void setArea(String area) {
		this.area = area;
	}

	public Livro getProxLivro() {
		return proxLivro;
	}

	public void setProxLivro(Livro proxLivro) {
		this.proxLivro = proxLivro;
	}
		
}
Classe Autor
package pacote;

public class Autor {
	
	private String nome;
	private Autor proxAutor;
	
	public Autor getProxAutor() {
		return proxAutor;
	}

	public void setProxAutor(Autor proxAutor) {
		this.proxAutor = proxAutor;
	}

	private Livro primLivro;

	public Autor (String nomeT){
		
		nome = nomeT;
		
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}
	
}
Classe ListaLivros
package pacote;
import javax.swing.*;

public class ListaLivros {
    private Livro primLivro;
    
    public ListaLivros(){
        primLivro = null;
    }
    
    public void insere(Livro novo){
        
        if (primLivro == null){
            primLivro=novo;
        }
        else {
            if (primLivro.getTitulo().compareTo(novo.getTitulo()) < 0){
                novo.setProxLivro(primLivro);
                primLivro = novo;
            }
            else {
                Livro temp = primLivro.getProxLivro();
                Livro anteriorTemp = null;        
                while (temp != null && temp.getTitulo().compareTo(novo.getTitulo()) < 0){
                    anteriorTemp = temp;
                    temp = temp.getProxLivro();
                }
                
                novo.setProxLivro(temp);
                anteriorTemp.setProxLivro(novo);
            }
        }
    }
    
    public Livro pesquisa(String titulo){
        Livro temp = primLivro;
        Livro posL = temp;
        if (temp!=null) {
            JOptionPane.showMessageDialog(null,temp.getTitulo().compareTo(titulo));
            while (temp.getTitulo().compareTo(titulo)!=0 && temp.getProxLivro()!= null)
            temp = temp.getProxLivro();
            
            if(temp.getTitulo().compareTo(titulo)==0){    
                JOptionPane.showMessageDialog(null,temp.getTitulo());
                JOptionPane.showMessageDialog(null,"O nome " + titulo + " existe");
                return posL;
            }
        else
            JOptionPane.showMessageDialog(null,"O nome " + titulo + " Não existe");
            return posL;
        }
        else
            JOptionPane.showMessageDialog(null,"Vazia!");
        return posL;
    }
    
    public void lista(){
        Livro temp = primLivro;
        String x="";
        while (temp != null){
            x=x+"Título: "+temp.getTitulo()+"\n Ano: "+temp.getAno()+"\n ISBN: "+temp.getIsbn()+"\n Preço: "+temp.getPreco()+"\n Área Científica: "+temp.getArea()+"\n";
            temp= temp.getProxLivro();
        }
        JOptionPane.showMessageDialog(null, x);    
    }
    
}
Classe ListaAutores
package pacote;
import javax.swing.*;

public class ListaAutores {
    private Autor primAutor;
    
    public ListaAutores(){
        primAutor=null;
    }

    public void insere(String nome){
            Autor novo = new Autor(nome);
            if (primAutor == null){
                novo.setNome(nome);
                primAutor=novo;
            }
            else {
                if (primAutor.getNome().compareTo(nome) > 0){
                    novo.setProxAutor(primAutor);
                    primAutor = novo;
                }
                else {
                    Autor temp = primAutor;
                    Autor anteriorTemp = null;        
                    while (temp != null && temp.getNome().compareTo(nome) < 0){
                        anteriorTemp = temp;
                        temp = temp.getProxAutor();
                    }
                    novo.setProxAutor(temp);
                    anteriorTemp.setProxAutor(novo);
                }
            }
        }
    
    public Autor pesquisa(String nome){
        Autor temp = primAutor;
        Autor posA = temp;
        if (temp!=null) {
            // JOptionPane.showMessageDialog(null,temp.getNome().compareTo(nome));
            while (temp.getNome().compareTo(nome)!=0 && temp.getProxAutor()!= null)
            temp = temp.getProxAutor();
            
            if(temp.getNome().compareTo(nome)==0){    
                //JOptionPane.showMessageDialog(null,temp.getNome());
                JOptionPane.showMessageDialog(null,"O nome " + nome + " existe");
                return posA;
            }
        else
            JOptionPane.showMessageDialog(null,"O nome " + nome + " Não existe");
            return posA;
        }
        else
            JOptionPane.showMessageDialog(null,"Vazia!");
            return posA;
    }
    
    public void listaAutores(){
        Autor temp = primAutor;
        String x="";
        while (temp != null){
            x=x+temp.getNome()+"\n";
            temp= temp.getProxAutor();
        }
        JOptionPane.showMessageDialog(null, x);        
    }
    

}

7 Respostas

rockstorm

Qual o erro que esta dando no inserir livro?

D

Obrigado pela resposta, rockstorm.

Neste momento, insere o 1º livro mas depois não insere o 2º. Ou, pelo menos, não aparece quando tento listar…

rockstorm

Ele gera alguma excessão quando voce tenta inserir o segundo livro? Quando você diz inserir, esta sendo inserido onde os livros?

D

O problema é que, não sei porquê, umas vezes que tento inserir um livro (juntá-lo à ListaLivros), o programa funciona. Outras vezes, dá o erro

Exception in thread "main" java.lang.NullPointerException at pacote.ListaLivros.insere(ListaLivros.java:30) at pacote.Menu.main(Menu.java:41)

Outra coisa: quando funciona e tento listar, não está por ordem alfabética de título. Já listar autores, onde o código é o mesmo (eu sei que não está pedido no menu mas foi um teste que quis fazer) funciona perfeitamente. E não percebo porquê…

D

Ninguém?

Hebert_Coelho

Não li todo seu código pq está grande… =P

Olha a mensagem de erro. Você está chamando um método e passando um valor null. “ListaLivros.java:30”

Esse tem que ser seu ponto de partida. Ou trate seu método para aceitar valor null.

D

Obrigado pela resposta.

Isto anda a dar-me uma dor de cabeça... Bem, a verdade é que desisti da abordagem que estava a ter e tentei uma nova. Assim, já consigo fazer as 4 primeiras funcionalidades. No resto é que precisava de alguma ajuda.

Sendo assim, aqui vai o código que tenho neste momento.

Classe Menu:

package pacote;

import javax.swing.JOptionPane;

public class Menu {

    /**
     * @param args
     */
    public static void main(String[] args)
    {
        String menu="Menu"+ 
		   "\n1 - Inserir Autor"+
           "\n2 - Inserir Livro"+
           "\n3 - Listar Livros por ordem alfabética de título"+ 
           "\n4 - Listar Livros de um autor por ordem alfabética de título"+
           "\n5 - Listar Livros de uma Área por ordem alfabética de título" +
           "\n6 - Listar Um Livro por ISBN"+  
           "\n7 - Eliminar Livro Por Título"+
           "\n8 - Listar Autores com Livros"+
           "\n0 - Sair";
        int op;
        ListaUni lista= new ListaUni();
        do
        {
            op=Integer.parseInt(JOptionPane.showInputDialog(menu));
        }
        while(op<0 || op>8);
       
        while(op!=0)
        {
            switch(op)
            {
                case 1:
                {
                    String nome=JOptionPane.showInputDialog("Introduza o nome do Autor:");
                    lista.insere(nome);
                    break;
                    }
                
                case 2:
                {
                    String nome=JOptionPane.showInputDialog("Introduza o nome do Autor:");
                    Autor resPesq=lista.pesquisa(nome);
                   
                    if(resPesq!=null)
                    {
                        String titulo=JOptionPane.showInputDialog("Introduza o título:");
                        String isbn=JOptionPane.showInputDialog("Introduza o ISBN:");
                        String area=JOptionPane.showInputDialog("Introduza a área científica:");
                        int ano = Integer.parseInt(JOptionPane.showInputDialog("Inserir ano do Livro:"));
                        double preco= Double.parseDouble(JOptionPane.showInputDialog("Inserir preço do Livro:"));
                        resPesq.insereL(titulo,isbn,area,ano,preco);
                    }
                    break;
                }
                
                case 3:
                {
                    JOptionPane.showMessageDialog(null,lista.listarTudo());
                    break;
                }
                
                case 4:
                {
                    String nome=JOptionPane.showInputDialog("Introduza o nome do Autor");
                    Autor resPesq=lista.pesquisa(nome);
                    if(resPesq!=null)
                    {
                        JOptionPane.showMessageDialog(null,resPesq.listar());
                    }
                    break;
                }
                
                case 5:
                {
               
                    }
                    break;
                }
                
            }
            do
            {
                op=Integer.parseInt(JOptionPane.showInputDialog(menu));
            }
            while(op<0 || op>8);
        }

    }
Classe Livro:
package pacote;

public class Livro
{
	private String titulo;
	private String isbn;
	private String area;
	private int ano;
	private double preco;
	
	private Autor primAutor;
	private Livro prox;
	private Livro ant;

	public Livro(String titulo,String isbn,String area,int ano,double preco)
	{
		this.titulo=titulo;
		this.isbn=isbn;
		this.area=area;
		this.ano=ano;
		this.preco=preco;      
	}

	public String getTitulo() {
		return titulo;
	}

	public void setTitulo(String titulo) {
		this.titulo = titulo;
	}

	public String getIsbn() {
		return isbn;
	}

	public void setIsbn(String isbn) {
		this.isbn = isbn;
	}

	public String getArea() {
		return area;
	}

	public void setArea(String area) {
		this.area = area;
	}

	public int getAno() {
		return ano;
	}

	public void setAno(int ano) {
		this.ano = ano;
	}

	public double getPreco() {
		return preco;
	}

	public void setPreco(double preco) {
		this.preco = preco;
	}

	public Livro getProx()
	{
		return prox;
	}

	public void setProx(Livro prox)
	{
		this.prox = prox;
	}

	public Livro getAnt()
	{
		return ant;
	}

	public void setAnt(Livro ant)
	{
		this.ant = ant;
	}
	
	public Autor getPrimAutor() {
		return primAutor;
	}

	public void setPrimAutor(Autor primAutor) {
		this.primAutor = primAutor;
	}

   
   
}
Classe Autor:
package pacote;

public class Autor
{
    private String nome;
    private Autor prox;
    private Livro cab;
	private Livro primLivro;
   
   
    public Autor(String nome)
    {
        this.nome=nome;
        cab= new Livro(null,null, null, 0, 0);
        cab.setProx(cab);
        cab.setAnt(cab);
    }

    public Autor getProx()
    {
        return prox;
    }

    public void setProx(Autor prox)
    {
        this.prox = prox;
    }

    public String getNome()
    {
        return nome;
    }

    public void setNome(String nome) {
		this.nome = nome;
	}

    public Livro getCab() {
		return cab;
	}

	public void setCab(Livro cab) {
		this.cab = cab;
	}

	public Livro getPrimLivro() {
		return primLivro;
	}

	public void setPrimLivro(Livro primLivro) {
		this.primLivro = primLivro;
	}

	public void insereL(String titulo,String isbn,String area,int ano,double preco)
    {
        Livro novoP= new Livro(titulo,isbn,area,ano,preco);
        Livro temp= cab.getProx();
       
        while(temp!=cab && titulo.compareTo(temp.getTitulo())>0)
        {
            temp=temp.getProx();
           
        }
        novoP.setProx(temp);
        novoP.setAnt(temp.getAnt());
        temp.getAnt().setProx(novoP);
        temp.setAnt(novoP);
    }
   
    public String listar()
    {
        String listagem="";
        Livro temp=cab.getProx();
       
        while(temp!=cab)
        {
            listagem+="Título: "+temp.getTitulo()+"\n"+"ISBN: "+temp.getIsbn()+"\n"+"Área Científica: "+temp.getArea()+"\n"+"Ano: "+temp.getAno()+"\n"+"Preço: "+temp.getPreco()+"\n\n";
            temp=temp.getProx();
        }
        return listagem;
    }
   
}
Classe ListaUni:
package pacote;

import javax.swing.JOptionPane;

public class ListaUni
{
    private Autor prim;
    private Livro primL;
   
    public void insere(String nome)
    {
        Autor novoT= new Autor(nome);
       
        if(prim==null)
        {
            prim = novoT;
        }
        else
        {
            novoT.setProx(prim);
            prim=novoT;
        }
    }
   
    public String listarTudo()
    {
        Autor temp=prim;
        String listagem="";
       
        while(temp!=null)
        {
            listagem+="Livros de: "+temp.getNome()+"\n\n"+temp.listar()+"\n\n";
            temp=temp.getProx();
        }
        return listagem;
    }
   
    public Autor pesquisa(String nome)
    {
        Autor temp=prim;
       
        while(temp!=null && nome.compareTo(temp.getNome())!=0)
        {
            temp=temp.getProx();
        }
        return temp;
       
    }
    
    public Livro pesquisaArea(String area){
        Livro temp = primL;
        Livro posL = temp;
        if (temp!=null) {
            JOptionPane.showMessageDialog(null,temp.getArea().compareTo(area));
            while (temp.getArea().compareTo(area)!=0 && temp.getProx()!= null)
            temp = temp.getProx();
            
            if(temp.getArea().compareTo(area)==0){    
                JOptionPane.showMessageDialog(null,temp.getArea());
                JOptionPane.showMessageDialog(null,"A área " + area + " existe");
                return posL;
            }
        else
            JOptionPane.showMessageDialog(null,"A área " + area + " não existe");
            return posL;
        }
        else
            JOptionPane.showMessageDialog(null,"Vazia!");
        return posL;
    }
}

Penso que se me puderem ajudar com esta pesquisa por àrea, consigo tratar do resto.

Desde já, obrigado.

Criado 15 de dezembro de 2010
Ultima resposta 16 de dez. de 2010
Respostas 7
Participantes 3