Use the LinkedList class to simulate a queue, and use the add method to simulate the enqueue, and the remove method to simulate the dequeue method for a Queue.  Remember to use  FIFO.

Use the LinkedList class to simulate a queue, and use the add method to simulate the enqueue, and the remove method to simulate the dequeue method for a Queue.  Remember to use  FIFO.

Create 3 queues, one called Animal Shelter, another called Cats, and another called Dogs.  Use the following menu-driven application:

1.  Adopt a Cat

2.  Adopt a Dog

3.  Adopt Oldest Pet

4.  Donate a Cat

5.  Donate a Dog

6. Add New Microchips

7. Exit

Create a Pet class that will be instantiated with the values in the following attributes:  String name, int dateOfBirth //yyyymmdd format, String species, Long microchipNumber.

Note:  The Dog queue and Cat queue are “regular” queues, and the Animal Shelter queue is a Priority Queue, where the priority is based upon the dateOfBirth of the pet.  The older the pet, the higher its priority.  See the attached .zip file for examples of a PriorityQueue.

Each week,  on Monday before  the Animal Shelter opens, an administrator of the Animal Shelter adds more microchips to the stack of microchips, so that there will be enough microchips to put in any animal that is donated into the shelter that week.  To simulate this, you will create a menu option, which will generate 100 microchip long objects, and place them into a  stack of microchips.  Those microchip objects will be generated by using the System.nanotime() method. 

Each time a person donates a cat or dog, ask for the name of the pet, the species, and the date of birth, and pop the microchip stack to  get a chip to put in the pet.  Create a new Pet object.  Then, add the Pet object to both its specific species queue, and the general Animal Shelter queue.  If the stack of microchips is empty, give an error message to the user,  stating  the pet cannot be donated because there are no microchips left.  Ask the user to press option 6 to get more microchips. 

When a person selects to adopt a specific species pet, remove the first pet object from the appropriate species queue, and also from the Animal Shelter queue.  Take care to find the pet in the Animal Shelter queue, and remove it. (hint:  To find the dog or cat in the Animal Shelter that matches the one you just adopted from the dog or cat queue, you may need to EITHER establish an iterator on the Animal Shelter queue to search for the Pet, or without an iterator remove all animals and put them in a new queue except for the dog or cat that matches. Once the new queue is created, point the old queue to the new queue.)

When a person comes in to adopt the oldest pet in the shelter, then process the Animal Shelter as a PriorityQueue, where the pet’s date of birth is the attribute used to retrieve the oldest pet (hint:  Pet class should implement Comparable, and should define a compareTo method that would sort in ascending date-of-birth order. )  So, when you dequeue the Animal Shelter as a Priority Queue, you will automatically get the Pet with the earliest/oldest date of birth first .  Then, after  removing the oldest pet object from the animal shelter, then dequeue it from the appropriate species queue (will have to do a sequential search in the the appropriate queue, according to the Pet object’s species attribute. See hint above for keeping the exact order in the queue).

Create 4 global variables that represent the 3 queues for dogs, cats, and animal shelter (Priority Queue based on date-of-birth of pet), and the stack for the microchips.  Create methods that can be called multiple times to accomplish all of the menu options.  The  names of the methods should be:

donateCat(),  donateDog(),  adoptCat(),  adoptDog(),  adoptAnimal(), pushMicroChip(), popMicroChip()

Order your essay today and save 30% with the discount code ESSAYSHELP