Great Deal! Get Instant $10 FREE in Account on First Order + 10% Cashback on Every Order Order Now

1 – Project 3 Changelog • Typos fixed: o QueueSystem instead of QueueingSystem. o Default values of some attributes. o Parameter types for Client and VIPClient. o Some other...

1 answer below »
1

– Project 3


Changelog
• Typos fixed:
o QueueSystem instead of QueueingSystem.
o Default values of some attributes.
o Parameter types for Client and VIPClient.
o Some other typos fixed / Additional clarification added.
o clientsInQueue attribute in class Queue was missing.

Description

Let's assume we're developing a queueing policy evaluation tool for a company facing high
demand. You will implement a program that can simulate and evaluate the performance of
a given queueing policy.

There is no template provided for this exercise, so make sure that you read the instructions
carefully to determine how your code should be structured. You will be making ten classes
in their respective .java files. Make sure to include all the fields and methods asked for,
paying particular attention to the access modifiers, return types, capitalization, and
parameter order and type.

Overview
1. Create the Java classes Prioritizable, Client, VIPClient, Request, InformationRequest,
ReturningItems, BuyingProducts, QueueSystem, Queue, VIPQueue. You will also
need to write the Enums Gender and Status.
2. Include all the fields and methods described below.
3. Test your code for co
ectness.
4. Prepare the assignment for submission and submit the java files through
Gradescope.


Rules
1. You may not import any extra functionality besides the default. For example, System
and Math are imported by default and thus may be used, whereas something like
A
ayList must be explicitly imported so it is disallowed.
2. The main method will not be tested; you may use it any way you want.
3. Comment your code, especially the parts where it is not obvious what you're doing.



2


Instructions

1. Implement the java classes described below in distinct, appropriately named, .java
files.
2. You must do your own testing. Feel free to edit the main method in the driver class
to test your code.
3. Submit the files on Gradescope. Make sure that you submit the co
ect files.
4. For all the private fields define getters and setters following this signature:
a. The getter for a field declared as private String someField will be:
public String getSomeField()
. The setter for a field declared as private String someField will be:
public void setSomeField(String someField)
5. Feel free to add additional methods or attributes to the classes. The additional
fields must be private.

The Prioritizable interface:

This interface will be implemented by classes that represent objects to which we can assign
a priority value. In this assignment, the Request and VIPClient classes will implement this
interface.

Any classes implementing Prioritizable will have the implementation of these methods:
- public void setPriority(int a);
- public int getPriority();

The Client class:

This class represents a client who a
ives at a specific time in the system.

If no server is available, the client joins the waitingLine before joining the first available
queue. If the waitingLine is full, the client leaves without being served. See more detailed
information about this flow on page 10.

You need to implement constructors and methods to instantiate the fields of a Client.
➔ Fields:
◆ id: an int that uniquely identifies the client.
◆ firstName: a String that represents the first name of the client.
◆ lastName: a String that represents the last name of the client.
◆ yearOfBirth: an int that represents the year of birth of the client.
◆ gender: an Enum type, Gender, that represents the gender of the client:
MALE or FEMALE.
3

◆ requests: an a
ay of Requests that the client wants to assign to a server.
◆ a
ivalTime: an int indicating the a
ival time of the client in the system.
◆ waitingTime: an int indicating for how long the client has been in the
waiting line before joining a server queue / or before leaving without being
served.
◆ timeInQueue: an int indicating how long the client is in a server queue.
◆ serviceTime: an int indicating how long the server takes to process the jobs.
◆ departureTime: an int indicating at what time the client leaved the system
(after being served or left without being served)
◆ patience: an int indicating how long the client can stay before leaving the
system if not being served.

All fields are private. Feel free to add your own attributes, they must be private.

➔ Getters and Setters.

➔ Constructors: Create three constructors for this class. See the signature of the
constructors below:

public Client (String firstName, String lastName, int yearOfBirth, String gender,
int a
ivalTime, int patience, Request[] requests)

This constructor will initialize all the fields of the object Client. For the fields not
provided, they will be initialized as follow:
- id: autoincrement from the last id used. The first client will have id=1, the
second will have id=2, etc.
- waitingTime: 0
- timeInQueue: 0
- serviceTime: 0
- departureTime: 0 (default value)

NB- a
ivalTime: If a negative value or zero is provided, use the time indicated by
the clock of the QueueSystem.

public Client (String firstName, String lastName, int yearOfBirth, String gender,
int patience, Request[] requests)

This constructor will initialize all the fields of the object Client. For the fields that are
not present in the list of parameters, they will be initialized as follow:
- id: autoincrement from the last id used. The first client will have id=1, the
second will have id=2, etc.
- a
ivalTime: The time indicated by the clock of the QueueSystem.
4

- waitingTime: 0
- timeInQueue: 0
- serviceTime: 0
- departureTime: 0

public Client (String firstName, String lastName, int yearOfBirth, String gender,
int patience)

This constructor will initialize all the fields of the object Client. For the fields that are
not present in the list of parameters, they will be initialized as follow:
- id: autoincrement from the last id used. The first client will have id=1, the
second will have id=2, etc.
- a
ivalTime: an int indicating the a
ival time of the client. If not provided, use
the time indicated by the clock of the QueueSystem.
- waitingTime: 0
- timeInQueue: 0
- serviceTime: 0
- departureTime: -1 (default value)


Business rules:
Regardless of the method used, the object state needs to be consistent and have
valid values at all times. The validation and business rules are the following:
- a
ivalTime cannot be negative number and must be greater or equal to 1.
- departureTime is either 0 (default value) or needs to be greater than or equal
to a
ivalTime + waitingTime + timeInQueue. We would observe
departureTime = a
ivalTime + waitingTime + timeInQueue only if the client
left without being served.
- The patience value of a client might increase based on the availability of a tv
and/or coffee maker in the QueueSystem;
- The client will exit the system if his time in the waitingLine and a server
queue exceeds his patience value.
- waitingTime cannot be a negative number.
- timeInQueue cannot be a negative number.

➔ Other methods: You need to define the following methods:

- public int serviceTime(): returns the time a server takes to process the
equests of the client.

5

- public int estimateServiceLevel(): estimates the level of service: a number
from 0 to 10. If the client is still in the system, return -1. Otherwise, deduce 1
point from the maximum value for each of these situations:

- Waiting time > 4
- Waiting time > 6
- Waiting time > 8
- Waiting time > 10
- Waiting time > 12
- Time In Queue > 4
- Time In Queue > 6
- Time In Queue > 8
- Time in Queue > 10
- Time in Queue > 12

For instance: If the client had to wait 7s in the waitingLine and stayed 10s in
the Queue before being served, the service level is 5.

- public String toString(): This method can be called to return the object in a
human-friendly manner. It returns the following information:
Client: ,
** A
ival Time : 0
** Waiting Time : 5
** Time In Queue : 2
** Service Time : 2
** Departure Time : 9
** Served By Server: B
** Service Level : 9

The VIPClient class:

This class represents a Client who is a VIPClient. This class implements Prioritizable. If
there is no VIPQueue, this client behaves like any other client. Otherwise, the VIPClient may
decide to join the VIP queue if necessary (while the other clients cannot except in some
exceptionnal situation described later in this document).

You need to implement constructors and methods to instantiate the fields of a VIPClient.
➔ Fields:
◆ memberSince: an int indicating the year since this client is a VIPClient;
◆ priority: an int indicating the level of priority of this client.

➔ Getters and Setters.
6


➔ Constructors: Create a constructor for this class. See the signature of the
constructors below:

public VIPClient (String firstName, String lastName, int birthYear, String gender,
int a
ivalTime, int patience, Request[] requests, int memberSince, int priority)

➔ Other methods: You need to define the following methods:

- public String toString(): This method can be called to return the object in a
human-friendly manner. It returns the following information:
Client: ,
** A
ival Time : 0
** Waiting Time : 5
** Time In Queue : 2
** Service Time : 2
** Departure Time : 9
** Served By Server: B
** Service Level : 9
** VIP since : 2002
** priority : 3


The Request abstract class:

This is an abstract class representing the attributes and the behaviors that any specific
equests should implement. It must implement the interface Prioritizable.

➔ Fields:
◆ description: a String describing the request;
◆ priority: an int indicating the priority of a request;
◆ difficulty: an int indicating the difficulty of the request;
◆ factor: an int indicating the factor by which the difficulty is related to the
processing time of the request.
◆ startTime: an int indicating the processing start time of the request.
◆ endTime: an int indicating the processing end time of the request.
◆ completionLevel: an int indicating the completion level of the request;
◆ status: an Enum Status indicating if the state of the request: NEW,
IN_PROGRESS, PROCESSED

All fields are private.

7

➔ Getters and Setters.

➔ Abstract methods:
public int calculateProcessingTime ()

NB
The time required to process a request depends on the difficulty level of this
equest and on the type of request. Compute this time using the following
formula:
- Information request:
Processing time = Request difficulty x factor x numberOfQuestions
- Returning item:
Processing time = Request difficulty x factor x numberOfItems
- Buying product:
Processing time = Request difficulty x factor x numberOfItems

The InformationRequest class:

This class extends Request and represents a request for information.

➔ Fields:
◆ questions: an a
ay of String representing the list of questions.

➔ Getters and Setters.

➔ Constructors: Create a constructor for this class. See the signature of the
constructors below:

- public InformationRequest (String description, int priority, int difficulty,
String[] questions)
Use those values for the attributes not mentioned in the parameter list:
- factor: 1
- status: NEW
- all other fields has the default value;

The ReturningItems class:

This class extends Request and represents a request about returning some items.

➔ Fields:
◆ itemsToReturn: an a
ay of String representing the list of items to return
Answered 6 days After Mar 25, 2023

Solution

Aditi answered on Mar 31 2023
24 Votes
SOLUTION.PDF

Answer To This Question Is Available To Download

Related Questions & Answers

More Questions »

Submit New Assignment

Copy and Paste Your Assignment Here