Filtro di ricerca Java

Discussione in 'Java' iniziata da myblacksloth, 11 Febbraio 2017.

  1. myblacksloth

    myblacksloth Nuovo Utente

    Registrato:
    11 Febbraio 2017
    Messaggi:
    1
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Salve a tutti,
    devo implementare un filtro di ricerca per questo programma
    https://github.com/myblacksloth/javaPrograms/blob/master/HotelManagement/README.md
    ma ho dei seri problemi a fare ciò...

    Per adesso ho implementato un interfaccia grafica che in base alle voci selezionate passa parametri diversi al filtro di ricerca ma non so se questo modo vada bene.
    Di seguito inserisco il codice:

    oggetto restituito dal filtro di ricerca
    Codice:
    package com_antomau_HotelManagement.Structure.Finder;
    
    
    import com_antomau_HotelManagement.MyObjects.MyRoom;
    import com_antomau_HotelManagement.MyObjects.MyHotel;
    
    
    /**
     * Created by Antonio Maulucci http://www.antomau.com on 09/02/17.
     */
    public class FinderObj {
    
    
        //variabili
        MyRoom r;
        MyHotel h;
    
    
        public FinderObj(MyHotel h, MyRoom r)
        {
    
    
    
    
    
    
            this.h = h;
    
    
            this.r = r;
    
    
        }
    
    
    
    
    
    
        public MyHotel getHotel()
        {
            return h;
        }
    
    
    
    
    
    
        public MyRoom getRoom()
        {
            return r;
        }
    
    
    
    
    
    
    
    
        public void print()
        {
            System.out.println(h.getSerial() + " " + r.getType());
        }
    
    
    
    
    
    
    
    
    }
    metodo main, sezione di codice che passa i parametri da cercare al filtro di ricerca
    Codice:
    class findbListenerClass implements ActionListener
            {
                @Override
                public void actionPerformed(ActionEvent e)
                {
                    contentPanel.removeAll();
    
                    JPanel searchPanel = new JPanel();
                    //
                    searchPanel.setLayout(new BorderLayout());
                    //
                    //
                    JPanel searchConsole = new JPanel();
                    //
                    searchConsole.setLayout(new GridLayout(1,2));
                    //
                    JPanel optionsConsole = new JPanel();
                    optionsConsole.setLayout(new GridLayout(3,2));
                    //
                    JCheckBox pricebox = new JCheckBox("Price<=");
                    JTextField pricef = new JTextField();
                    JCheckBox tvbox = new JCheckBox("TV");
                    JCheckBox airbox = new JCheckBox("Air Conditioner");
                    JCheckBox fridgebox = new JCheckBox("Fridge");
                    JCheckBox netbox = new JCheckBox("Internet connection");
                    //
                    optionsConsole.add(pricebox);
                    optionsConsole.add(pricef);
                    optionsConsole.add(tvbox);
                    optionsConsole.add(airbox);
                    optionsConsole.add(fridgebox);
                    optionsConsole.add(netbox);
                    //
                    //
                    //
                    JButton fb = new JButton("Find");
                    //
                    //
                    searchConsole.add(optionsConsole);
                    searchConsole.add(fb);
                    //
                    //
                    JPanel foundDataPanel = new JPanel();
                    //
                    //
                    searchPanel.add(searchConsole, BorderLayout.NORTH);
                    searchPanel.add(foundDataPanel, BorderLayout.CENTER);
    
    
    
                    contentPanel.add(searchPanel);
    
                    f.pack();
    
    
    
    
    
                    //listener per il pulsante di ricerca
                    class fbListenerClass implements ActionListener
                    {
                        @Override
                        public void actionPerformed(ActionEvent e)
                        {
    
                            foundDataPanel.removeAll();
    
                            JLabel foundData = new JLabel();
                            //label per i dati cercati
    
                            //check sugli elementi da cercare
                            //passare i dati da cercare al metodo di ricerca
    
                            //impostare il risultato della ricerca come argomento della JLabel
    
                            //variabili di ricerca
                            boolean findprice=false;
                            int price=0;
                            boolean findtv=false;
                            boolean findair=false;
                            boolean findfridge=false;
                            boolean findnet=false;
    
                            if (pricebox.isSelected())
                            {
                                findprice=true;
                                price = Integer.parseInt(pricef.getText());
                            }
    
                            if (tvbox.isSelected()) findtv = true;
    
                            if (airbox.isSelected()) findair = true;
    
                            if (fridgebox.isSelected()) findfridge = true;
    
                            if (netbox.isSelected()) findnet = true;
    
    
                            //myMap.finder(findprice, price, findtv, findair, findfridge, findnet);
    
                            foundData.setText(myMap.findPrintResults(findprice, price, findtv, findair, findfridge, findnet));
    
                            foundDataPanel.add(foundData);
    
                            f.pack();
    
                        }
                    }
                    ActionListener fbListener = new fbListenerClass();
                    fb.addActionListener(fbListener);
    
    
    
    
    
    
    
                }
            }
            ActionListener findbListener = new findbListenerClass();
            findb.addActionListener(findbListener);
    filtro di ricerca
    Codice:
    public ArrayList<FinderObj> finder(boolean findprice, int price, boolean findtv, boolean findair, boolean findfridge, boolean findnet)
        {
            ArrayList<FinderObj> results = new ArrayList<FinderObj>();
    
    
            //ottenere il keyset della mappa
            Set<MyHotel> mySet = getSet();
    
    
            //esplorare il set per ottenere la lista delle stanze per ogni hotel
            for (MyHotel hh : mySet)
            {
                //ottengo la lista delle stanze corrispondenti all'hotel hh
                RoomsList rr = theMap.get(hh);
    
    
                //scorrere la lista a caccia dei dati delle singole stanze
                //ottengo un iteratore per la lista
                RoomsListIterator myIterator = rr.listIterator();
    
    
                while (myIterator.hasNext()) //fintanto che l'iteratore rileva un'ulteriore nodo nella lista
                {
    
    
                    MyRoom currentRoom = myIterator.next();
    
    
                    int found = 1; //1 if found or 0 if not found
                    /*
                    si sfrutta la moltiplicazione di 0 e 1
                    la variabile trovato inizialmente e' 1
                    se la stanza corrente corrsiponde a quella cercata il moltiplicatore viene moltiplicato * 1 > ergo il risultato non cambia
                    se invece la stanza corrente non rispecchia i criteri di ricerca il moltiplicatore viene moltiplicato * 0 > ergo il risultato rimarra' per sempre 0 perche'
                    1*1=1 trovato
                    1*0=0 non trovato
                    0*1=0 trovato
                    in tale modo la vriabile sara' 1 solo se tutti gli elementi sono stati trovati
                     */
    
    
    
    
    
    
                    if (findprice)
                    {
                        if (currentRoom.getPrice() <= price) found*=1;
                        else found*=0;
                    }
    
    
                    if (findtv)
                    {
                        if (currentRoom.getTv()) found*=1;
                        else found*=0;
                    }
    
    
                    if (findair)
                    {
                        if (currentRoom.getAirConditioner()) found*=1;
                        else found*=0;
                    }
    
    
                    if (findfridge)
                    {
                        if (currentRoom.getFridge()) found*=1;
                        else found*=0;
                    }
    
    
                    if (findnet)
                    {
                        if (currentRoom.getInternet()) found*=1;
                        else found*=0;
                    }
    
    
    
    
                    if (found==1)
                    {
                        FinderObj foundElement = new FinderObj(hh, currentRoom);
    
    
                        results.add(foundElement); //se il risultato della ricerca e' 1 aggiungo la stanza corrente all'arraylist
                    }
    
    
    
    
                }
    
    
    
    
            }
    
    
            System.out.println(results.toString()); //debug
    
    
            return results;
        }

    metodo che inserisce in una stringa i risultati della ricerca, tale stringa genera una tabella in HTML

    Codice:
    public String findPrintResults(boolean findprice, int price, boolean findtv, boolean findair, boolean findfridge, boolean findnet)
        {
    
    
            ArrayList<FinderObj> results = finder(findprice, price, findtv, findair, findfridge, findnet);
    
    
            String stringResults = "";
    
    
            stringResults += "<html><table border\1\">";
    
    
            stringResults += "<tr><th>Room type</th><th>Available rooms</th><th>Price</th><th>TV</th><th>airCond</th><th>Fridge</th><th>Internet</th></tr>";
    
    
    
    
    
    
            //inserisco i risultati della ricerca in una stringa che formatta una tabella in html da impostare come argomento di una jlabel
            for (FinderObj fo : results)
            {
                MyRoom mr = fo.getRoom();
    
    
                stringResults += "<tr><td><b>Hotel:</b></td><td colspan=\"6\">" + fo.getHotel().getSerial() + " -- " + fo.getHotel().getName() + " -- " + fo.getHotel().getAddress() + " -- " + fo.getHotel().getCity() + " -- " + fo.getHotel().getCountry() + " -- " + fo.getHotel().getPhone() + " -- " + fo.getHotel().getFax() + "</td></tr>";
    
    
                stringResults += "<tr><td>" + mr.getType() + "</td><td>" + mr.getNum() + "</td><td>" + mr.getPrice() + "</td><td>" + mr.getTv() + "</td><td>" + mr.getAirConditioner() + "</td><td>" + mr.getFridge() + "</td><td>" + mr.getInternet() + "</td></tr>";
    
    
            }
    
    
    
    
            stringResults += "</table></html>";
    
    
            return stringResults;
        }
    Il risultato è:
    [​IMG]

    È corretto un filtro di ricerca implementato in questo modo?
     
Sto caricando...

Condividi questa Pagina