Quote.cpp 2.57 KB
Newer Older
Imanol Pérez committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
#include <iostream>
#include "Quote.hpp"
#include <ctime>

//////////////////////////////////////////////////////
//                                                  //
//          Class that handles the quotes           //
//       of a certain stock in a certain date       //
//                                                  //
//                  Imanol Perez                    //
//                  January 2017                   //
//                                                  //
//////////////////////////////////////////////////////

Quote::Quote() {

}

Quote::Quote(std::string name, double price, std::string date)
{
  // The price of the stock cannot be negative.
  if (price<0) {
      throw Exception("Negative price",
      "The sprice of the stock must non negative");

  }

  // date must have the format YYYY/MM/DD
  struct tm tm;
  if (date!="0000/00/00" && !strptime(date.c_str(), "%Y/%m/%d", &tm)) {
    throw Exception("Invalid date format", "Date format must be YYYY/MM/DD");
  }

  mPrice=price;
  mName=name;
  mDate=date;
  

}


std::string Quote::getName(void) {
  return mName;
}

double Quote::getPrice(void) {
  return mPrice;
}

void Quote::setPrice(double price) {
  // The price of the stock cannot be negative.
  if (price<0) {
      throw Exception("Negative price",
      "The sprice of the stock must non negative");

  }

  
  mPrice=price;
}


std::string Quote::getDate(void) {
  /*

  Returns the date of the quote

  */

  return mDate;
}

void Quote::setDate(std::string date) {
  /*

  Updates the date of the stock

  */

  // date must have format YYYY/MM/DD
  struct tm tm;
  if (date!="0000/00/00" && !strptime(date.c_str(), "%Y/%m/%d", &tm)) {
    throw Exception("Invalid date format", "Date format must be YYYY/MM/DD");
  }
  
  mDate=date;
}
void Quote::increasePrice(double change) {
  /*

  Increases/decreases the price of the stock

  */

  mPrice+=change;
}

void Quote::addReturn(double percentage) {
  /*

  We increase or decrease the price of the stock, by a determined percentage

  */

  mPrice*=1+percentage;
}


bool Quote::isNull(void) {
  /*

  Checks if the quote is null

  */

  return mDate=="0000/00/00";
}

std::ostream& operator<<(std::ostream& output, Quote& q) {
  /*

  Used to display a nice output of the class

  */

  std::string name = q.getName();
  double price = q.getPrice();
  std::string date=q.getDate();
  output<<"Name: "<<name<<"\nPrice: "<<price<<"\nDate: "<<date<<"\n";

  return output;
}