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
metodo main, sezione di codice che passa i parametri da cercare al filtro di ricerca
filtro di ricerca
metodo che inserisce in una stringa i risultati della ricerca, tale stringa genera una tabella in HTML
Il risultato è:
È corretto un filtro di ricerca implementato in questo modo?
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 è:

È corretto un filtro di ricerca implementato in questo modo?