This problem involved building part of a software prototype that can be used as a component of an automated manufacturing assembly process control system.
A manufacturing assembly process consists of a number of steps that are required to completely assemble some product. At each step in the process a machine is used to assemble a portion of the product. When all steps in the process have completed, the product is said to be fully assembled. A single machine is used at each step in the process, and a machine can only work on one product at a time. If a machine is working on a product the machine is said to be "busy". If a machine is not working on a product it is said to be "idle". Products being assembled arrive at a machine and are immediately put into a first-come-first-serve queue. A product then waits in the queue until a machine is ready to work on it.
A "monitor" will have responsibility for monitoring a machine and its associated queue, and making sure that a machine processes as many jobs as it can as efficiently as possible. When a product (called a job) arrives at a machine it will immediately be added to the queue. When a job leaves the queue it will be immediately processed by the machine. When a mchine completes work on a job, the job immediately leaves the machine and goes on to the next step in the assembly process. For our purposes, we don't care what happens to a job once a machine completes working on it.
Design software classes that represent a job, a machine, a machine queue, a monitor, and a reporter. A job should be given a sequential integer job numer based upon its arrival order, and this number should be able to be displayed. The queue should manage the jobs using a FIFO algorithm. The monitor should do whatever necessary to keep jobs flowing through the machine and notify the reporter about the status of jobs. The reporter will display messages like those illustrated below that indicate the status of various jobs. Jobs are essentially dumb and don't know anything about their state except for their job number. Your design should make it easy to add future classes that do things that depend on the status of jobs.
To test the software, make sure the following events happen:
Create three jobs.
Cause a job to complete.
Create a job.
Cause a job to complete.
Cause a job to complete.
Create a job.
Cause a job to complete.
The reporter should display the following messages for each job:
Job x arriving at queue
Job x leaving queue
Job x entering machine
Job x leaving machine
Submit a screen capture of your program output in addition to the program source code and a class diagram.