import java.io.*; import java.net.*; import java.util.*; class RServer { //Data Files static final String ROOMDATAFILE = "room.dat"; static final String CUSTOMERDATAFILE = "customer.dat"; static final String TABLEDATAFILE = "table.dat"; static final String ROOMBOOKINGDATAFILE = "roombooking.dat"; static final String TABLEBOOKINGDATAFILE = "tablebooking.dat"; static final String BILLDATAFILE = "bill.dat"; //Data stores static Hashtable ht_room; static Hashtable ht_customer; static Hashtable ht_table; static Hashtable ht_roombooking; static Hashtable ht_tablebooking; static Hashtable ht_bill; //Number of each object - used for object numbers static int cnumber = 1; static int rnumber = 1; static int tnumber = 1; static int rbnumber = 1; static int tbnumber = 1; //Ports for input and output static final int INPORT = 5000; static final int OUTPORT = 5050; static ObjectInputStream ObIn; static ObjectOutputStream ObOut; static FileInputStream istream; static FileOutputStream ostream; static ObjectInputStream fin; static ObjectOutputStream fout; static TodaysDate td; public static void main (String[] args) throws IOException, ClassNotFoundException { String tempstring; Room room; Customer customer; Table table; RoomBooking roombooking; TableBooking tablebooking; Bill bill; ObjectType ot; System.out.println(""); System.out.println("**********************************************"); System.out.println("* *"); System.out.println("* ANB Networked Hotel Management System *"); System.out.println("* (Server Application) *"); System.out.println("* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *"); System.out.println("* �1999-2000 Adrian Banks *"); System.out.println("* *"); System.out.println("**********************************************"); System.out.println(""); System.out.println(" Server IP : " + InetAddress.getLocalHost().getHostAddress()); System.out.println(" Server Name : " + InetAddress.getLocalHost().getHostName()); //Get today's date td = new TodaysDate(); td.Print(); System.out.println(" Loading Data Files............"); //Create data stores in memory ht_room = new Hashtable(); ht_customer = new Hashtable(); ht_table = new Hashtable(); ht_roombooking = new Hashtable(); ht_tablebooking = new Hashtable(); ht_bill = new Hashtable(); //Load Room Data File try { istream = new FileInputStream(ROOMDATAFILE); fin = new ObjectInputStream(istream); try { Room tmp; while(true) { tmp = (Room) fin.readObject(); ht_room.put(tmp.getNumber() + "",tmp); rnumber++; } } catch (IOException ioea) { fin.close(); } } catch (FileNotFoundException fnfe) { System.out.println(" (Cannot Find Room Data File)"); } //Load Customer Data File try { istream = new FileInputStream(CUSTOMERDATAFILE); fin = new ObjectInputStream(istream); try { Customer tmp; while(true) { tmp = (Customer) fin.readObject(); ht_customer.put(tmp.getNumber() + "",tmp); cnumber++; } } catch (IOException ioea) { fin.close(); } } catch (FileNotFoundException fnfea) { System.out.println(" (Cannot Find Customer Data File)"); } //Load Table Data File try { istream = new FileInputStream(TABLEDATAFILE); fin = new ObjectInputStream(istream); try { Table tmp; while(true) { tmp = (Table) fin.readObject(); ht_table.put(tmp.getNumber() + "",tmp); tnumber++; } } catch (IOException ioea) { fin.close(); } } catch (FileNotFoundException fnfea) { System.out.println(" (Cannot Find Table Data File)"); } //Load Room Booking Data File try { istream = new FileInputStream(ROOMBOOKINGDATAFILE); fin = new ObjectInputStream(istream); try { RoomBooking tmp; while(true) { tmp = (RoomBooking) fin.readObject(); ht_roombooking.put(tmp.getNumber() + "",tmp); rbnumber++; } } catch (IOException ioea) { fin.close(); } } catch (FileNotFoundException fnfea) { System.out.println(" (Cannot Find Room Booking Data File)"); } //Load Table Booking Data File try { istream = new FileInputStream(TABLEBOOKINGDATAFILE); fin = new ObjectInputStream(istream); try { TableBooking tmp; while(true) { tmp = (TableBooking) fin.readObject(); ht_tablebooking.put(tmp.getNumber() + "",tmp); tbnumber++; } } catch (IOException ioea) { fin.close(); } } catch (FileNotFoundException fnfea) { System.out.println(" (Cannot Find Table Booking Data File)"); } //Load Bill Data File try { istream = new FileInputStream(BILLDATAFILE); fin = new ObjectInputStream(istream); try { Bill tmp; while(true) { tmp = (Bill) fin.readObject(); ht_bill.put(tmp.getNumber() + "",tmp); } } catch (IOException ioea) { fin.close(); } } catch (FileNotFoundException fnfea) { System.out.println(" (Cannot Find Bill Data File)"); } //Display number of objects in each file System.out.println(""); System.out.println(" Existing Records :"); System.out.println(" Customers : " + (cnumber - 1)); System.out.println(" Rooms : " + (rnumber - 1)); System.out.println(" Tables : " + (tnumber - 1)); System.out.println(" Room Bookings : " + (rbnumber - 1)); System.out.println(" Table Bookings : " + (tbnumber - 1)); System.out.println(""); System.out.println(" Waiting For Connection............"); ServerSocket listener = new ServerSocket(INPORT); Socket s = listener.accept(); System.out.println(" Connected To Client"); ObIn = new ObjectInputStream(s.getInputStream()); ObOut = new ObjectOutputStream(s.getOutputStream()); //Send numbers of each object to user interface Numbers n = new Numbers(cnumber,rnumber,tnumber,rbnumber,tbnumber); ObOut.writeObject(n); //Main event processing routine try { while (true) { ot = (ObjectType) ObIn.readObject(); //Room if ((ot.getObjectType().compareTo("room") == 0) && (ot.getObjectArgument().compareTo("find") == 0)) { tempstring = (String) ObIn.readObject(); Room r = new Room(); if (ht_room.containsKey(tempstring)) { r = (Room) ht_room.get(tempstring); } else { r.setNumber("Not Found"); r.setStandard(""); r.setNo_Beds(""); r.setBed_Type(""); r.setTariff(""); r.setStatus(""); } ObOut.writeObject(r); } else if ((ot.getObjectType().compareTo("room") == 0) && (ot.getObjectArgument().compareTo("update") == 0)) { room = (Room) ObIn.readObject(); ht_room.put(room.getNumber() + "",room); room.display(); } //Customer else if ((ot.getObjectType().compareTo("customer") == 0) && (ot.getObjectArgument().compareTo("find") == 0)) { tempstring = (String) ObIn.readObject(); Customer c = new Customer(); if (ht_customer.containsKey(tempstring)) { c = (Customer) ht_customer.get(tempstring); } else { c.setNumber("Not Found"); c.setSurname(""); c.setOther_Names(""); c.setAddress(""); c.setPostcode(""); c.setTel_Number(""); } ObOut.writeObject(c); } else if ((ot.getObjectType().compareTo("customer") == 0) && (ot.getObjectArgument().compareTo("update") == 0)) { customer = (Customer) ObIn.readObject(); ht_customer.put(customer.getNumber() + "",customer); customer.display(); } //Table else if ((ot.getObjectType().compareTo("table") == 0) && (ot.getObjectArgument().compareTo("find") == 0)) { tempstring = (String) ObIn.readObject(); Table t = new Table(); if (ht_table.containsKey(tempstring)) { t = (Table) ht_table.get(tempstring); } else { t.setNumber("Not Found"); t.setStatus(""); } ObOut.writeObject(t); } else if ((ot.getObjectType().compareTo("table") == 0) && (ot.getObjectArgument().compareTo("update") == 0)) { table = (Table) ObIn.readObject(); ht_table.put(table.getNumber() + "",table); table.display(); } //Room Booking else if ((ot.getObjectType().compareTo("roombooking") == 0) && (ot.getObjectArgument().compareTo("find") == 0)) { tempstring = (String) ObIn.readObject(); RoomBooking rb = new RoomBooking(); if (ht_roombooking.containsKey(tempstring)) { rb = (RoomBooking) ht_roombooking.get(tempstring); } else { rb.setNumber("Not Found"); rb.setArrivalDateDay(""); rb.setArrivalDateMonth(""); rb.setArrivalDateYear(""); rb.setDepartureDateDay(""); rb.setDepartureDateMonth(""); rb.setDepartureDateYear(""); rb.setCheckedIn(""); rb.setStandard(""); rb.setNoPeople(""); rb.setDiscount(""); rb.setNotes(""); } ObOut.writeObject(rb); } else if ((ot.getObjectType().compareTo("roombooking") == 0) && (ot.getObjectArgument().compareTo("update") == 0)) { roombooking = (RoomBooking) ObIn.readObject(); ht_roombooking.put(roombooking.getNumber() + "",roombooking); roombooking.display(); } else if ((ot.getObjectType().compareTo("roombooking") == 0) && (ot.getObjectArgument().compareTo("check") == 0)) { roombooking = (RoomBooking) ObIn.readObject(); String bookingOK = check_Booking(roombooking); ObOut.writeObject(bookingOK); } //Table Booking else if ((ot.getObjectType().compareTo("tablebooking") == 0) && (ot.getObjectArgument().compareTo("find") == 0)) { tempstring = (String) ObIn.readObject(); TableBooking tb = new TableBooking(); if (ht_tablebooking.containsKey(tempstring)) { tb = (TableBooking) ht_tablebooking.get(tempstring); } else { //alter values here } ObOut.writeObject(tb); } else if ((ot.getObjectType().compareTo("tablebooking") == 0) && (ot.getObjectArgument().compareTo("update") == 0)) { tablebooking = (TableBooking) ObIn.readObject(); ht_tablebooking.put(tablebooking.getNumber() + "",tablebooking); System.out.println(" Table Booking Updated :"); tablebooking.display(); } //Bill else if ((ot.getObjectType().compareTo("bill") == 0) && (ot.getObjectArgument().compareTo("find") == 0)) { tempstring = (String) ObIn.readObject(); Bill b = new Bill(); if (ht_bill.containsKey(tempstring)) { b = (Bill) ht_bill.get(tempstring); } else { //alter values here } ObOut.writeObject(b); } else if ((ot.getObjectType().compareTo("bill") == 0) && (ot.getObjectArgument().compareTo("update") == 0)) { bill = (Bill) ObIn.readObject(); ht_bill.put(bill.getNumber() + "",bill); bill.display(); } } } catch (EOFException eofe) { System.out.println(" Connection To Client Closed"); System.out.println(" Saving Data Files............"); //Customer ostream = new FileOutputStream(CUSTOMERDATAFILE); fout = new ObjectOutputStream(ostream); for (Enumeration e = ht_customer.keys(); e.hasMoreElements();) { Object name = (Object) e.nextElement(); fout.writeObject((Customer) ht_customer.get(name.toString())); } fout.close(); //Room ostream = new FileOutputStream(ROOMDATAFILE); fout = new ObjectOutputStream(ostream); for (Enumeration e = ht_room.keys(); e.hasMoreElements();) { Object name = (Object) e.nextElement(); fout.writeObject((Room) ht_room.get(name.toString())); } fout.close(); //Table ostream = new FileOutputStream(TABLEDATAFILE); fout = new ObjectOutputStream(ostream); for (Enumeration e = ht_table.keys(); e.hasMoreElements();) { Object name = (Object) e.nextElement(); fout.writeObject((Table) ht_table.get(name.toString())); } fout.close(); //Room Booking ostream = new FileOutputStream(ROOMBOOKINGDATAFILE); fout = new ObjectOutputStream(ostream); for (Enumeration e = ht_roombooking.keys(); e.hasMoreElements();) { Object name = (Object) e.nextElement(); fout.writeObject((RoomBooking) ht_roombooking.get(name.toString())); } fout.close(); //Table Booking ostream = new FileOutputStream(TABLEBOOKINGDATAFILE); fout = new ObjectOutputStream(ostream); for (Enumeration e = ht_tablebooking.keys(); e.hasMoreElements();) { Object name = (Object) e.nextElement(); fout.writeObject((TableBooking) ht_tablebooking.get(name.toString())); } fout.close(); //Bill ostream = new FileOutputStream(BILLDATAFILE); fout = new ObjectOutputStream(ostream); for (Enumeration e = ht_bill.keys(); e.hasMoreElements();) { Object name = (Object) e.nextElement(); fout.writeObject((Bill) ht_bill.get(name.toString())); } fout.close(); System.out.println(" Exiting System............"); } catch (SocketException se) { System.out.println(" Connection To Client Closed"); System.out.println(" Saving Data Files............"); //Customer ostream = new FileOutputStream(CUSTOMERDATAFILE); fout = new ObjectOutputStream(ostream); for (Enumeration e = ht_customer.keys(); e.hasMoreElements();) { Object name = (Object) e.nextElement(); fout.writeObject((Customer) ht_customer.get(name.toString())); } fout.close(); //Room ostream = new FileOutputStream(ROOMDATAFILE); fout = new ObjectOutputStream(ostream); for (Enumeration e = ht_room.keys(); e.hasMoreElements();) { Object name = (Object) e.nextElement(); fout.writeObject((Room) ht_room.get(name.toString())); } fout.close(); //Table ostream = new FileOutputStream(TABLEDATAFILE); fout = new ObjectOutputStream(ostream); for (Enumeration e = ht_table.keys(); e.hasMoreElements();) { Object name = (Object) e.nextElement(); fout.writeObject((Table) ht_table.get(name.toString())); } fout.close(); //Room Booking ostream = new FileOutputStream(ROOMBOOKINGDATAFILE); fout = new ObjectOutputStream(ostream); for (Enumeration e = ht_roombooking.keys(); e.hasMoreElements();) { Object name = (Object) e.nextElement(); fout.writeObject((RoomBooking) ht_roombooking.get(name.toString())); } fout.close(); //Table Booking ostream = new FileOutputStream(TABLEBOOKINGDATAFILE); fout = new ObjectOutputStream(ostream); for (Enumeration e = ht_tablebooking.keys(); e.hasMoreElements();) { Object name = (Object) e.nextElement(); fout.writeObject((TableBooking) ht_tablebooking.get(name.toString())); } fout.close(); //Bill ostream = new FileOutputStream(BILLDATAFILE); fout = new ObjectOutputStream(ostream); for (Enumeration e = ht_bill.keys(); e.hasMoreElements();) { Object name = (Object) e.nextElement(); fout.writeObject((Bill) ht_bill.get(name.toString())); } fout.close(); System.out.println(" Exiting System............"); } } public static String check_Booking(RoomBooking roombooking_to_check) { int checkcount = 0, c_count = 0; boolean booking_OK = false; String tempstring = ""; for (Enumeration e = ht_room.keys(); e.hasMoreElements();) { Object name = (Object) e.nextElement(); Room temproom = (Room) ht_room.get(name.toString()); if ((roombooking_to_check.getStandard().compareTo(temproom.getStandard()) == 0) && (roombooking_to_check.getNoPeople().compareTo(temproom.getNo_Beds()) == 0)) { for (Enumeration en = ht_roombooking.keys(); en.hasMoreElements();) { checkcount++; Object nameone = (Object) en.nextElement(); RoomBooking temproombook = (RoomBooking) ht_roombooking.get(nameone.toString()); if (temproom.getNumber().compareTo(temproombook.getRoomNumber()) == 0) { c_count++; //check dates of the two room bookings for conflicts if (Integer.parseInt(roombooking_to_check.getArrivalDateYear()) > Integer.parseInt(temproombook.getDepartureDateYear())) booking_OK = true; if ((Integer.parseInt(roombooking_to_check.getArrivalDateMonth()) > Integer.parseInt(temproombook.getDepartureDateMonth())) && (Integer.parseInt(roombooking_to_check.getArrivalDateYear()) == Integer.parseInt(temproombook.getDepartureDateYear()))) booking_OK = true; if ((Integer.parseInt(roombooking_to_check.getArrivalDateDay()) >= Integer.parseInt(temproombook.getDepartureDateDay())) && (Integer.parseInt(roombooking_to_check.getArrivalDateMonth()) == Integer.parseInt(temproombook.getDepartureDateMonth()))) booking_OK = true; if (booking_OK) tempstring = temproom.getNumber(); } } if (checkcount == 0) tempstring = temproom.getNumber(); if (c_count == 0) tempstring = temproom.getNumber(); } } if (tempstring.compareTo("") == 0) tempstring = "no"; return tempstring; } }