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.
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 ++;
}
}
}
Comments
Leave a comment