Answer to Question #159795 in Java | JSP | JSF for Muhammad Suffyan

Question #159795

Suppose a business person launches new cinema at Islamabad and ask his team to develop a ticket system for box office. He assigns some requirements about system that how should it work. The requirements are such a way that there are only '5' number of box office windows in the theatre. Each window can have at max '20' number of people waiting in line. To start with, only one window is opened. If the number of people waiting in line in that window exceeds 20, then the next window is opened and people can join the line in that window. Likewise, if both the first and second windows have n number of people waiting in each queue, then a third window is opened. This can go on until the maximum number of windows w is reached. Let us assume that once a window is opened it never closes. A new window is only opened if all open windows are full. Each person can buy only one ticket. So, the system should not allot more than one ticket per person. Let us assume that the system issues one ticket each across all open windows. When a ticket is issued, the count of the number of people in each open queue is reduced by 1.

When a new person has to join the queue, the system has to prompt him to join a queue such that they are issued a ticket as fast as possible. The system prompts the person based on these factors: o First it looks for an open window with the least number of people and prompts that window number. If more than one window has the least number of people, then the system can prompt the person to join the first window (smaller window ld) it encounters with the least number of people. If the queues of all open windows are full and a new window can be opened, then the new person is prompted to join the new queue for the new box office window. O If all queues for all windows are full, a corresponding message is displayed. That person need not be considered in the next iteration .After a queue is prompted to a person, the person or system cannot change the queue.

Implement the system based on above scenario in java using suitable data structure.



1
Expert's answer
2021-01-30T06:37:48-0500
package cinema;
import java.util.ArrayList;
class NewCustomer{
	NewCustomer(){ // Constructor
		
	}
}
class TicketingSystem{
	ArrayList<ArrayList<NewCustomer>> cinemawindows = new ArrayList<ArrayList<NewCustomer>>();
	int open = 1; // Number of open windows
	boolean full = false; // T
	
	void createCinemaWindows() {
		/* Creates all five windows */
		for (int i = 0; i < 5; i++) {
			cinemawindows.add(new ArrayList<NewCustomer>());
		}
	}
	
	void printQueueLengths() {
		/* Prints length of each queue */
		System.out.print("Current queue lengths -> ");
		for (int windownum = 0; windownum < open; windownum++) {
			System.out.print("window " + (windownum + 1) + ":" + cinemawindows.get(windownum).size() + " ");
		}
		System.out.print("\n");
	}
	void joinQueue() {
		/* Customer joins queue */
		int shortestQueue = 0;
		int shortestQueueLength = cinemawindows.get(0).size();
		
		for (int windowIndex = 0; windowIndex < open; windowIndex++) { // Get shortest queue
			int queueLength = cinemawindows.get(windowIndex).size();
			if (queueLength < shortestQueueLength) {
				shortestQueue = windowIndex;
				shortestQueueLength = queueLength;
			}
		}
		
		if (cinemawindows.get(shortestQueue).size() == 20 & open < 5) { // Open a window
			open += 1;
			cinemawindows.get(open - 1).add(new NewCustomer());
			System.out.println("Join queue in window " + open);
		}
		else if (cinemawindows.get(shortestQueue).size() < 20){ 
			cinemawindows.get(shortestQueue).add(new NewCustomer());
			System.out.println("Join queue in window " + (shortestQueue + 1));
		}
		else {
			System.out.println("Failed, all queues at maximum capacity!");
			full = true;
		}
		
	}
	
	void sellTickets() { 
		/* Sell tickets */
		for (int windowIndex = 0; windowIndex < open; windowIndex++) {
			if (cinemawindows.get(windowIndex).size() > 0) {
				
				cinemawindows.get(windowIndex).remove(0);
			}
		}
	}
}


public class Q {
	
	public static void main(String[] args) {
		TicketingSystem ts = new TicketingSystem();
		ts.createCinemaWindows();
		
		int counter = 0;
		while (true) {
			if (ts.full == true) {
				break; // No space for more customers
			}
			
			// Assuming tickets are sold each time 7 customers join the queue 
			if (counter % 7 == 0) {
				ts.sellTickets();
				System.out.println("Tickets sold!");
				ts.printQueueLengths();
			}
			
			ts.joinQueue();
			ts.printQueueLengths();
			counter ++;
		}
		
	}


}

Need a fast expert's response?

Submit order

and get a quick answer at the best price

for any assignment or question with DETAILED EXPLANATIONS!

Comments

No comments. Be the first!

Leave a comment

LATEST TUTORIALS
New on Blog