C++ Programming Assignment 7 Portfolio Classes are getting to be more realistic with each programming assignment. This assignment includes the
Question Get Answer

C++ Programming Assignment 7<br/>Portfolio<br/> <br/>Classes are getting

to be more realistic with each programming assignment. This assignment includes the valuable aspect of inheritance to facilitate reuse of code and operator overloading to allow the usage of familiar operators tailored specifically to the Stocks, Bonds, and Securities classes.

The objective of this assignment is to demonstrate an ability to implement inheritance and overload operators in a program.

You are working for a financial advisor who creates portfolios of financial securities for his clients. A portfolio is a conglomeration of various financial assets, such as stocks and bonds, that together create balanced collection of investments.

When the financial advisor makes a purchase of securities on behalf of a client, a single transaction can include multiple shares of stock or multiple bonds.

For example:
Client-A purchases 100 shares of IBM $1 par value common stock on Jan. 20, 2020, for a total purchase price of $10,000 USD. Dividends for the year have been declared at $5 per share of common.

Client-A purchases 5 bonds is1sued by Intel Corporation with a face value of $1000 per bond and a stated interest rate of 7.5% on Jan 3, 2020, for a total purchase price of $5,000 USD. The bonds mature on Dec. 31, 2025.

It is your job to create object-oriented application that will allow the financial advisor to maintain the portfolios for his/her clients. You will need to create several classes to maintain this information: Security, Stock, Bond, Portfolio, and Date.
The characteristics of stocks and bonds in a portfolio are shown below:
Stocks:                                                                       Bonds:
Purchase date (Date)                                                  Purchase date (Date)
Purchase price (double)                                            Purchase price (double)
Quantity purchased (int)                                           Quantity purchased (int)
Ticker symbol (string)                                                          Issuer (string)
Par value (int)                                                           Face value (int)
Stock type (i.e. Common or Preferred) (enum)         Stated interest rate (double)
Dividends per share (double)                                     Maturity date (Date)
Several of the data members above require the use of dates.  Strings will not be acceptable substitutes for date fields.
C++ does not have a built in data type for Date. Therefore, you may use this Date class in your program:
#pragma once
#include &lt;iostream&gt;
#include &lt;cstdlib&gt;
#include &lt;cctype&gt;
class Date{
friend std::ostream&amp; operator&lt;&lt;(std::ostream&amp;, Date);
      Date(int d=0, int m=0, int yyyy=0) {
             setDate(d, m, yyyy);
      ~Date() {}
      void setDate(int d, int m, int yyyy){
             day = d;
             month = m;
             year = yyyy;
      int day;
      int month;
      int year;
std::ostream&amp; operator&lt;&lt;(std::ostream&amp; output, Date d){
      output &lt;&lt; d.month &lt;&lt; "/" &lt;&lt; d.day &lt;&lt; "/" &lt;&lt; d.year;
      return output;
Security class (base class)
The class should contain data members that are common to both Stocks and Bonds.

Write appropriate member functions to store and retrieve information in the member variables above. Be sure to include a constructor and destructor.

Stock class and Bond class. (derived classes)
Each class should be derived from the Security class. Each should have the member variables shown above that are unique to each class.

Each class should contain a function called calcIncome that calculates the amount a client receives as dividend or interest income for each security purchase. Note that the calcIncome algorithm has been simplified for this assignment. In real life, interest is paid on most bonds semi-annually, and dividends are declared by a company once per year. In our example, we are assuming that dividends are known at the time of the stock purchase and are not subject to change. We are also assuming an annual (as opposed to semi-annual) payment of interest on bonds. 

To calculate a stock puchase's dividend income, use the following formula: income  = dividends per share * number of shares. To calculate a bond purchase's annual income, use this formula: income = number of bonds in purchase *  the face value of the bonds * the stated interest rate. 

In each derived class, the &lt;&lt; operator should be overloaded to output, neatly formatted, all of the information associated with a stock or bond, including the calculated income.

The &lt; operator should also be overloaded in each derived class to enable sorting of the vectors using the sort function. This function is part of the &lt;algorithm&gt; library.

Write member functions to store and retrieve information in the appropriate member variables. Be sure to include a constructor and destructor in each derived class.

Design a Portfolio class
The portfolio has a name data member.
The class contains a vector of Stock objects and a vector of Bond objects.
There is no limit to the number of Stock and Bond puchases that can be added to a portfolio.

The Portfolio class should support operations to purchase stocks for the portfolio, purchase bonds for the portfolio, or list all of the items in the portfolio (both stocks and bonds).

You should write main() program that creates a portfolio and presents a menu to the user that looks like this:

"S" should allow the user to record the purchase of some stocks and add the purchase to the Stocks list.  Likewise, "B" should allow the user to record the purchase of some bonds and add the purchase to the Bonds list. "L" should list all of the securities in the portfolio, first displaying all of the Stocks, sorted by ticker symbol, followed by all of the bonds, sorted by issuer. The user should be able to add stocks, add bonds, and list repeatedly until he or she selects "Q" to quit.

Below are some examples of the information that needs to be entered by the user:

Prompts for the issuance of stock:

Prompts for the purchase of bonds:

Your Listing of Securities should look like the screenshot below. There are a couple several things to point out about the output: 

-The Interest Rate for Bonds is displayed as a percentage (that is, the interest rate entered by the user must be multiplied by 100 in the output).
-The Price Per Share of Stocks is calculated based on the total purchase price of the sale divided by the number of shares purchased.
-Note that within the Stocks section, the Stocks are sorted by ticker symbol. Within the Bonds section, the bonds are sorted by issuer.These calculations can be performed in the output statements, or separate member functions can be created for them in their respective classes.

Report Listing all Securities in the Portfolio:

Use good coding style and principles for all code and input/output formatting. All data in a class must be private (not public nor protected).

You may find the tokenizeDate function below to be useful in reading in and manipulating dates. Using the strtok_s function that you learned in a previous assignment, you can read in date values as a character array, and then tokenize each part into a meaningful day, month, and year that can be used to initialize a Date variable:

void someFunction() //function that uses tokenizeDate
      int m, d, y;
char charDate[20]; //holds the date the user entered in char array
Date realDate; //date object; holds date after tokenization 
      std::cout &lt;&lt; "\nEnter a date (mm/dd/yyyy): ";
      std::cin &gt;&gt; charDate;
      tokenizeDate(charDate, m, d, y); //separates char array into month, day, and year
      realDate.setDate(d, m, y); //sets the date of the object using the parsed values

void tokenizeDate(char* cDate, int&amp; month, int&amp; day, int&amp; year)
      char seps[] = "/";
      char* token = NULL;
      char* next_token = NULL;
      token = NULL;
      next_token = NULL;
      // Establish string and get the tokens: 
      token = strtok_s(cDate, seps, &amp;next_token);
      month = atoi(token);
      token = strtok_s(NULL, seps, &amp;next_token);
      day = atoi(token);
      token = strtok_s(NULL, seps, &amp;next_token);
      year = atoi(token);

To give you an idea of the general criteria; here is a checklist that may be helpful:

Executes without crashing
Appropriate Internal Documentation
Security class
    Correct Data Members
    Correct functions created
    Appropriate constructor(s)/destructor(s)
Stock and Bond classes
    Derived from Security
    Correct Data Members
    Correct functions created
    Appropriate constructor(s)/destructor(s)
Overloaded &lt; operator. Implemented in the Stock class to compare two ticker symbols for stock objects. Implemented in the Bond class to compare two issuers.
Overloaded &lt;&lt; in each derived class to output a stock or bond
Portfolio class
       Correct Data Members
      Add new stock functionality
      Add new bond functionality
      Functions to Sort each vector
      Function to display all securities data
Date class
Class is included and used appropriately
Separation of header and implementation files; Appropriate use of inheritance and composition; modular code, no globals

Why Join Course Hero?

Course Hero has all the homework and study help you need to succeed! We’ve got course-specific notes, study guides, and practice tests along with expert tutors.

  • -

    Study Documents

    Find the best study resources around, tagged to your specific courses. Share your own to gain free Course Hero access.

    Browse Documents
  • -

    Question & Answers

    Get one-on-one homework help from our expert tutors—available online 24/7. Ask your own questions or browse existing Q&A threads. Satisfaction guaranteed!

    Ask a Question
Let our 24/7 C++ Programming tutors help you get unstuck! Ask your first question.
A+ icon
Ask Expert Tutors You can ask You can ask You can ask (will expire )
Answers in as fast as 15 minutes