temp20.cpp 2.2 KB

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