Quote.cpp 2.57 KB
Newer Older
Imanol Pérez's avatar
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;
}