stock20.cpp 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. // stock20.cpp -- augmented version
  2. #include <iostream>
  3. #include "stock20.h"
  4. using namespace std;
  5. // constructors
  6. Stock::Stock() // default constructor
  7. {
  8. shares = 0;
  9. share_val = 0.0;
  10. total_val = 0.0;
  11. }
  12. Stock::Stock(const std::string & co, long n, double pr)
  13. {
  14. company = co;
  15. if (n < 0)
  16. {
  17. std::cout << "Number of shares can't be negative; "
  18. << company << " shares set to 0.\n";
  19. shares = 0;
  20. }
  21. else
  22. shares = n;
  23. share_val = pr;
  24. set_tot();
  25. }
  26. // class destructor
  27. Stock::~Stock() // quiet class destructor
  28. {
  29. }
  30. // other methods
  31. void Stock::buy(long num, double price)
  32. {
  33. if (num < 0)
  34. {
  35. std::cout << "Number of shares purchased can't be negative. "
  36. << "Transaction is aborted.\n";
  37. }
  38. else
  39. {
  40. shares += num;
  41. share_val = price;
  42. set_tot();
  43. }
  44. }
  45. void Stock::sell(long num, double price)
  46. {
  47. using std::cout;
  48. if (num < 0)
  49. {
  50. cout << "Number of shares sold can't be negative. "
  51. << "Transaction is aborted.\n";
  52. }
  53. else if (num > shares)
  54. {
  55. cout << "You can't sell more than you have! "
  56. << "Transaction is aborted.\n";
  57. }
  58. else
  59. {
  60. shares -= num;
  61. share_val = price;
  62. set_tot();
  63. }
  64. }
  65. void Stock::update(double price)
  66. {
  67. share_val = price;
  68. set_tot();
  69. }
  70. void Stock::show() const
  71. {
  72. using std::cout;
  73. using std::ios_base;
  74. // set format to #.###
  75. ios_base::fmtflags orig =
  76. cout.setf(ios_base::fixed, ios_base::floatfield);
  77. std::streamsize prec = cout.precision(3);
  78. cout << "Company: " << company
  79. << " Shares: " << shares << '\n';
  80. cout << " Share Price: $" << share_val;
  81. // set format to #.##
  82. cout.precision(2);
  83. cout << " Total Worth: $" << total_val << '\n';
  84. // restore original format
  85. cout.setf(orig, ios_base::floatfield);
  86. cout.precision(prec);
  87. }
  88. const Stock & Stock::topval(const Stock & s) const
  89. {
  90. if (s.total_val > total_val)
  91. return s;
  92. else
  93. return *this;
  94. }