diff --git a/Main.java b/Main.java index 2255c0a..00e69fa 100755 --- a/Main.java +++ b/Main.java @@ -1,588 +1,287 @@ -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; -import java.io.Serializable; +import java.io.*; import java.util.ArrayList; import java.util.Scanner; -class Food implements Serializable -{ - int itemno; +class Food implements Serializable { + int itemNo; int quantity; float price; - Food(int itemno,int quantity) - { - this.itemno=itemno; - this.quantity=quantity; - switch(itemno) - { - case 1:price=quantity*50; - break; - case 2:price=quantity*60; - break; - case 3:price=quantity*70; - break; - case 4:price=quantity*30; - break; + Food(int itemNo, int quantity) { + this.itemNo = itemNo; + this.quantity = quantity; + this.price = calculatePrice(itemNo, quantity); + } + + private float calculatePrice(int itemNo, int quantity) { + switch (itemNo) { + case 1: return quantity * 50; + case 2: return quantity * 60; + case 3: return quantity * 70; + case 4: return quantity * 30; + default: return 0; } } } -class Singleroom implements Serializable -{ + +class SingleRoom implements Serializable { String name; String contact; String gender; - ArrayList food =new ArrayList<>(); + ArrayList foodOrders = new ArrayList<>(); - - Singleroom() - { - this.name=""; - } - Singleroom(String name,String contact,String gender) - { - this.name=name; - this.contact=contact; - this.gender=gender; + SingleRoom(String name, String contact, String gender) { + this.name = name; + this.contact = contact; + this.gender = gender; } } -class Doubleroom extends Singleroom implements Serializable -{ + +class DoubleRoom extends SingleRoom { String name2; String contact2; String gender2; - - Doubleroom() - { - this.name=""; - this.name2=""; - } - Doubleroom(String name,String contact,String gender,String name2,String contact2,String gender2) - { - this.name=name; - this.contact=contact; - this.gender=gender; - this.name2=name2; - this.contact2=contact2; - this.gender2=gender2; + + DoubleRoom(String name, String contact, String gender, String name2, String contact2, String gender2) { + super(name, contact, gender); + this.name2 = name2; + this.contact2 = contact2; + this.gender2 = gender2; } } -class NotAvailable extends Exception -{ + +class NotAvailable extends Exception { @Override - public String toString() - { - return "Not Available !"; + public String toString() { + return "Not Available!"; } } -class holder implements Serializable -{ - Doubleroom luxury_doublerrom[]=new Doubleroom[10]; //Luxury - Doubleroom deluxe_doublerrom[]=new Doubleroom[20]; //Deluxe - Singleroom luxury_singleerrom[]=new Singleroom[10]; //Luxury - Singleroom deluxe_singleerrom[]=new Singleroom[20]; //Deluxe +class HotelRooms implements Serializable { + DoubleRoom[] luxuryDoubleRooms = new DoubleRoom[10]; + DoubleRoom[] deluxeDoubleRooms = new DoubleRoom[20]; + SingleRoom[] luxurySingleRooms = new SingleRoom[10]; + SingleRoom[] deluxeSingleRooms = new SingleRoom[20]; } -class Hotel -{ - static holder hotel_ob=new holder(); - static Scanner sc = new Scanner(System.in); - static void CustDetails(int i,int rn) - { +class Hotel { + static HotelRooms hotelData = new HotelRooms(); + static Scanner scanner = new Scanner(System.in); + + static void enterCustomerDetails(int roomType, int roomIndex) { String name, contact, gender; String name2 = null, contact2 = null; - String gender2=""; - System.out.print("\nEnter customer name: "); - name = sc.next(); - System.out.print("Enter contact number: "); - contact=sc.next(); - System.out.print("Enter gender: "); - gender = sc.next(); - if(i<3) - { - System.out.print("Enter second customer name: "); - name2 = sc.next(); + String gender2 = ""; + + System.out.print("Enter customer name: "); + name = scanner.next(); System.out.print("Enter contact number: "); - contact2=sc.next(); + contact = scanner.next(); System.out.print("Enter gender: "); - gender2 = sc.next(); - } - - switch (i) { - case 1:hotel_ob.luxury_doublerrom[rn]=new Doubleroom(name,contact,gender,name2,contact2,gender2); - break; - case 2:hotel_ob.deluxe_doublerrom[rn]=new Doubleroom(name,contact,gender,name2,contact2,gender2); - break; - case 3:hotel_ob.luxury_singleerrom[rn]=new Singleroom(name,contact,gender); - break; - case 4:hotel_ob.deluxe_singleerrom[rn]=new Singleroom(name,contact,gender); - break; - default:System.out.println("Wrong option"); - break; + gender = scanner.next(); + + if (roomType < 3) { // If it's a double room + System.out.print("Enter second customer name: "); + name2 = scanner.next(); + System.out.print("Enter second contact number: "); + contact2 = scanner.next(); + System.out.print("Enter second gender: "); + gender2 = scanner.next(); + } + + switch (roomType) { + case 1: hotelData.luxuryDoubleRooms[roomIndex] = new DoubleRoom(name, contact, gender, name2, contact2, gender2); break; + case 2: hotelData.deluxeDoubleRooms[roomIndex] = new DoubleRoom(name, contact, gender, name2, contact2, gender2); break; + case 3: hotelData.luxurySingleRooms[roomIndex] = new SingleRoom(name, contact, gender); break; + case 4: hotelData.deluxeSingleRooms[roomIndex] = new SingleRoom(name, contact, gender); break; + default: System.out.println("Wrong option"); break; } } - - static void bookroom(int i) - { - int j; - int rn; - System.out.println("\nChoose room number from : "); - switch (i) { - case 1: - for(j=0;j foodOrders = (roomType <= 2) ? hotelData.luxuryDoubleRooms[roomIndex].foodOrders : hotelData.luxurySingleRooms[roomIndex].foodOrders; + + for (Food food : foodOrders) { + amount += food.price; + System.out.printf("%-10s%-10s%-10s%n", foodItems[food.itemNo - 1], food.quantity, food.price); } - System.out.println("\nTotal Amount- "+amount); + + System.out.println("\nTotal Amount: " + amount); } - - static void deallocate(int rn,int rtype) - { - int j; - char w; - switch (rtype) { - case 1: - if(hotel_ob.luxury_doublerrom[rn]!=null) - System.out.println("Room used by "+hotel_ob.luxury_doublerrom[rn].name); - else - { - System.out.println("Empty Already"); - return; - } - System.out.println("Do you want to checkout ?(y/n)"); - w=sc.next().charAt(0); - if(w=='y'||w=='Y') - { - bill(rn,rtype); - hotel_ob.luxury_doublerrom[rn]=null; - System.out.println("Deallocated succesfully"); + + static void deallocateRoom(int roomIndex, int roomType) { + char confirm; + switch (roomType) { + case 1: + if (hotelData.luxuryDoubleRooms[roomIndex] != null) { + System.out.println("Room used by " + hotelData.luxuryDoubleRooms[roomIndex].name); + } else { + System.out.println("Room is already empty"); + return; } - break; case 2: - if(hotel_ob.deluxe_doublerrom[rn]!=null) - System.out.println("Room used by "+hotel_ob.deluxe_doublerrom[rn].name); - else - { - System.out.println("Empty Already"); - return; - } - System.out.println(" Do you want to checkout ?(y/n)"); - w=sc.next().charAt(0); - if(w=='y'||w=='Y') - { - bill(rn,rtype); - hotel_ob.deluxe_doublerrom[rn]=null; - System.out.println("Deallocated succesfully"); + if (hotelData.deluxeDoubleRooms[roomIndex] != null) { + System.out.println("Room used by " + hotelData.deluxeDoubleRooms[roomIndex].name); + } else { + System.out.println("Room is already empty"); + return; } - break; case 3: - if(hotel_ob.luxury_singleerrom[rn]!=null) - System.out.println("Room used by "+hotel_ob.luxury_singleerrom[rn].name); - else - { - System.out.println("Empty Already"); - return; - } - System.out.println(" Do you want to checkout ? (y/n)"); - w=sc.next().charAt(0); - if(w=='y'||w=='Y') - { - bill(rn,rtype); - hotel_ob.luxury_singleerrom[rn]=null; - System.out.println("Deallocated succesfully"); + if (hotelData.luxurySingleRooms[roomIndex] != null) { + System.out.println("Room used by " + hotelData.luxurySingleRooms[roomIndex].name); + } else { + System.out.println("Room is already empty"); + return; } - break; case 4: - if(hotel_ob.deluxe_singleerrom[rn]!=null) - System.out.println("Room used by "+hotel_ob.deluxe_singleerrom[rn].name); - else - { - System.out.println("Empty Already"); - return; - } - System.out.println(" Do you want to checkout ? (y/n)"); - w=sc.next().charAt(0); - if(w=='y'||w=='Y') - { - bill(rn,rtype); - hotel_ob.deluxe_singleerrom[rn]=null; - System.out.println("Deallocated succesfully"); + if (hotelData.deluxeSingleRooms[roomIndex] != null) { + System.out.println("Room used by " + hotelData.deluxeSingleRooms[roomIndex].name); + } else { + System.out.println("Room is already empty"); + return; } break; - default: - System.out.println("\nEnter valid option : "); - break; + default: System.out.println("Invalid room type"); return; } - } - - static void order(int rn,int rtype) - { - int i,q; - char wish; - try{ - System.out.println("\n==========\n Menu: \n==========\n\n1.Sandwich\tRs.50\n2.Pasta\t\tRs.60\n3.Noodles\tRs.70\n4.Coke\t\tRs.30\n"); - do - { - i = sc.nextInt(); - System.out.print("Quantity- "); - q=sc.nextInt(); - - switch(rtype){ - case 1: hotel_ob.luxury_doublerrom[rn].food.add(new Food(i,q)); - break; - case 2: hotel_ob.deluxe_doublerrom[rn].food.add(new Food(i,q)); - break; - case 3: hotel_ob.luxury_singleerrom[rn].food.add(new Food(i,q)); - break; - case 4: hotel_ob.deluxe_singleerrom[rn].food.add(new Food(i,q)); - break; - } - System.out.println("Do you want to order anything else ? (y/n)"); - wish=sc.next().charAt(0); - }while(wish=='y'||wish=='Y'); - } - catch(NullPointerException e) - { - System.out.println("\nRoom not booked"); - } - catch(Exception e) - { - System.out.println("Cannot be done"); - } - } -} - -class write implements Runnable -{ - holder hotel_ob; - write(holder hotel_ob) - { - this.hotel_ob=hotel_ob; - } - @Override - public void run() { - try{ - FileOutputStream fout=new FileOutputStream("backup"); - ObjectOutputStream oos=new ObjectOutputStream(fout); - oos.writeObject(hotel_ob); + System.out.println("Do you want to free this room? (y/n): "); + confirm = scanner.next().charAt(0); + if (confirm == 'y') { + switch (roomType) { + case 1: hotelData.luxuryDoubleRooms[roomIndex] = null; break; + case 2: hotelData.deluxeDoubleRooms[roomIndex] = null; break; + case 3: hotelData.luxurySingleRooms[roomIndex] = null; break; + case 4: hotelData.deluxeSingleRooms[roomIndex] = null; break; + } + System.out.println("Room deallocated successfully!"); + } else { + System.out.println("Operation cancelled."); } - catch(Exception e) - { - System.out.println("Error in writing "+e); - } - } - -} -public class Main { - public static void main(String[] args){ - - try - { - File f = new File("backup"); - if(f.exists()) - { - FileInputStream fin=new FileInputStream(f); - ObjectInputStream ois=new ObjectInputStream(fin); - Hotel.hotel_ob=(holder)ois.readObject(); - } - Scanner sc = new Scanner(System.in); - int ch,ch2; - char wish; - x: - do{ + public static void main(String[] args) { + int choice; + while (true) { + System.out.println("1. Book Room"); + System.out.println("2. Check Availability"); + System.out.println("3. Generate Bill"); + System.out.println("4. Deallocate Room"); + System.out.println("5. Exit"); + System.out.print("Enter your choice: "); + choice = scanner.nextInt(); - System.out.println("\nEnter your choice :\n1.Display room details\n2.Display room availability \n3.Book\n4.Order food\n5.Checkout\n6.Exit\n"); - ch = sc.nextInt(); - switch(ch){ - case 1: System.out.println("\nChoose room type :\n1.Luxury Double Room \n2.Deluxe Double Room \n3.Luxury Single Room \n4.Deluxe Single Room\n"); - ch2 = sc.nextInt(); - Hotel.features(ch2); - break; - case 2:System.out.println("\nChoose room type :\n1.Luxury Double Room \n2.Deluxe Double Room \n3.Luxury Single Room\n4.Deluxe Single Room\n"); - ch2 = sc.nextInt(); - Hotel.availability(ch2); - break; - case 3:System.out.println("\nChoose room type :\n1.Luxury Double Room \n2.Deluxe Double Room \n3.Luxury Single Room\n4.Deluxe Single Room\n"); - ch2 = sc.nextInt(); - Hotel.bookroom(ch2); - break; - case 4: - System.out.print("Room Number -"); - ch2 = sc.nextInt(); - if(ch2>60) - System.out.println("Room doesn't exist"); - else if(ch2>40) - Hotel.order(ch2-41,4); - else if(ch2>30) - Hotel.order(ch2-31,3); - else if(ch2>10) - Hotel.order(ch2-11,2); - else if(ch2>0) - Hotel.order(ch2-1,1); - else - System.out.println("Room doesn't exist"); - break; - case 5: - System.out.print("Room Number -"); - ch2 = sc.nextInt(); - if(ch2>60) - System.out.println("Room doesn't exist"); - else if(ch2>40) - Hotel.deallocate(ch2-41,4); - else if(ch2>30) - Hotel.deallocate(ch2-31,3); - else if(ch2>10) - Hotel.deallocate(ch2-11,2); - else if(ch2>0) - Hotel.deallocate(ch2-1,1); - else - System.out.println("Room doesn't exist"); - break; - case 6:break x; - - } - - System.out.println("\nContinue : (y/n)"); - wish=sc.next().charAt(0); - if(!(wish=='y'||wish=='Y'||wish=='n'||wish=='N')) - { - System.out.println("Invalid Option"); - System.out.println("\nContinue : (y/n)"); - wish=sc.next().charAt(0); - } - - }while(wish=='y'||wish=='Y'); - - Thread t=new Thread(new write(Hotel.hotel_ob)); - t.start(); - } - catch(Exception e) - { - System.out.println("Not a valid input"); + switch (choice) { + case 1: + System.out.println("Select room type: \n1. Luxury Double Room\n2. Deluxe Double Room\n3. Luxury Single Room\n4. Deluxe Single Room"); + int roomType = scanner.nextInt(); + displayFeatures(roomType); + bookRoom(roomType); + break; + case 2: + System.out.println("Select room type: \n1. Luxury Double Room\n2. Deluxe Double Room\n3. Luxury Single Room\n4. Deluxe Single Room"); + roomType = scanner.nextInt(); + checkAvailability(roomType); + break; + case 3: + System.out.println("Select room type: \n1. Luxury Double Room\n2. Deluxe Double Room\n3. Luxury Single Room\n4. Deluxe Single Room"); + roomType = scanner.nextInt(); + System.out.print("Enter room number: "); + int roomIndex = scanner.nextInt(); + generateBill(roomIndex, roomType); + break; + case 4: + System.out.println("Select room type: \n1. Luxury Double Room\n2. Deluxe Double Room\n3. Luxury Single Room\n4. Deluxe Single Room"); + roomType = scanner.nextInt(); + System.out.print("Enter room number: "); + roomIndex = scanner.nextInt(); + deallocateRoom(roomIndex, roomType); + break; + case 5: + System.out.println("Exiting the application."); + scanner.close(); + return; + default: + System.out.println("Invalid choice, please try again."); + break; } + } } }