Question
Using queues, write two implementations to compute the Capital Gain in a sale of stock. Suppose that you buy n shares of a stock for
Using queues, write two implementations to compute the Capital Gain in a sale of stock. Suppose that you buy n shares of a stock for d dollars each. Later when you sell some of these shares, if the sales price exceeds the purchase price, you have made a profit which is called a capital gain. If the sale price is lower than the purchase price, you have a loss which is called a negative capital gain.
Investors buy shares in a particular company over a period of time. For example, last year you bought 20 shares of Amazon at $45 per share. Last month, you bought 20 additional shares at $75 per share and today, you sold 30 shares at $65 per share. What is your capital gain? Well, which of your 40 shares did you actually sell? Unfortunately, you cannot pick and choose. When computing capital gains, you must assume that you sell shares in the order in which you purchased them. Stock sales are a first-in-first-out application. In our example, you sold 20 shares that you bought at $45 each and 10 of the shares that you bought at $75 each. Your cost for the $30 shares is $1650. You sold them for $1950, a capital gain of $300. You will design a way to record your investment transactions chronologically and to compute the capital gain of any stock.
Requirements for iteration 1: (50 points)
- For the first iteration use a standard queue implementation from chapter 4. Assume that all transactions are for stocks of a single company and there is no commission charge for the transactions. Write a class called StockPurchase that records the cost of a single share of stock. (see below)
- Write a class called StockLedger that enables us to record stock purchases in chronological order. (see below)
- At the time of sale, the StockLedger class computes the capital gain and updates the record of stocks owned. It contains a queue that stores each share individually. (20 shares equal 20 enqueues into the queue.)
- Write an application program that allows the user to buy and sell stocks for a company. It has to use the StockLedger and StockPurchase classes. For every sale compute the capital gain and display the result. If the capital gain is positive it is a profit, if the capital gain is negative it is a loss.
- The following statements demonstrate how we could use StockLedger in our application program to record the transactions given in the problem set:
StockLedger myStocks = new StockLedger();
myStocks.buy(20, 45);
myStocks.buy(20, 75);
double capGain = myStocks.sell(30, 65);
- StockLedger records instances of StockPurchase which represents the shares we own in a queue. The queue orders the shares so we can sell them in the order in which we purchased them. The method buy enqueues each share that is bought. The method sell removes from the queue as many shares as are sold. As it does this, it computes the total capital gain from the sale and returns it.
Requirements for iteration 2: (50 points)
- Redesign and rewrite the first iteration using a deque instead of a standard queue.
- A typical stock transaction involves multiple shares and the two methods buy and sell reflect this in their parameters. However, when using a standard queue the implementation of myStocks.buy(30, 45) adds each of the 30 shares to a queue. The advantage of this approach is that sell can remove as many or as few shares as necessary. The disadvantage is that the queue storage can become quite large.
- Encapsulate the purchase of 30 shares into one object and add it to the queue. If we sell 20 of those shares, we would remove the object from the queue and compute the capital gain. We would have 10 shares that must remain in the queue.
- The 10 shares are the oldest shares and we cannot simply add them to the back of the queue; they must remain at the front. The standard queue has no operation that allows you to add an object to its front. A Deque does have this ability.
- Revise the class StockPurchase so that it represents the purchase of n shares of stock at d dollars per share. The revised class has the data fields share and cost, a constructor to initially set both data fields, and the accessor methods getNumberOfShares and getCostPerShare.
- Revise the class StockLedger with the ledger now an instance of a deque instead of a queue. YOU NEED TO WRITE THE DEQUE IMPLEMENTATION BASED ON THE INTERFACE AND DLLNODE CLASS GIVEN.
- The method buy creates an instance of StockPurchase and places it at the back of the deque.
- The method sell is now more involved. It must remove a StockPurchase object from the front of the deque and decide whether that object represents more shares than the number sold. If it does, the method creates a new instance of StockPurchase to represent the shares that remain in the portfolio. It then adds that instance to the front of the deque, since these shares would be sold next. The rest of the method performs the same tasks as in the previous iteration.
- Write an application program that allows the user to buy and sell stocks for a company. It has to use the StockPurchase and StockLedger classes. For every sale compute the capital gain and display the result. If the capital gain is positive it is a profit, if the capital gain is negative it is a loss. You can reuse the previous application and it should display the same results.
//------------------------------------------------------------------------
----
// DLLNode.java by Dale/Joyce/Weems
Chapter 4
//
// Implements nodes holding info of class
//------------------------------------------------------------------------
----
package support;
public class DLLNode
{
private T info;
private DLLNode
public DLLNode(T info)
{
this.info = info; forward = null; back = null;
}
public void setInfo(T info){this.info = info;}
public T getInfo(){return info;}
public void setForward(DLLNode
public void setBack(DLLNode
public DLLNode getForward(){return forward;}
public DLLNode getBack(){return back;}
}
//------------------------------------------------------------------------
----
// DequeInterface.java by Dale/Joyce/Weems
Chapter 4
//
// Interface for a class that implements a deque of T.
// A deque is a linear structure allowing insertion/removal at both ends.
//------------------------------------------------------------------------
----
//package ch04.queues;
public interface DequeInterface
{
void enqueueFront(T element) throws QueueOverflowException;
// Throws QueueOverflowException if this queue is full;
// otherwise, adds element to the front of this queue.
void enqueueRear(T element) throws QueueOverflowException;
// Throws QueueOverflowException if this queue is full;
// otherwise, adds element to the rear of this queue.
T dequeueFront() throws QueueUnderflowException;
// Throws QueueUnderflowException if this queue is empty;
// otherwise, removes front element from this queue and returns it.
T dequeueRear() throws QueueUnderflowException;
// Throws QueueUnderflowException if this queue is empty;
// otherwise, removes rear element from this queue and returns it.
boolean isFull();
// Returns true if this queue is full; otherwise, returns false.
boolean isEmpty();
// Returns true if this queue is empty; otherwise, returns false.
int size();
// Returns the number of elements in this queue.
}
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started