Garey

Example_Work

Jan 10th, 2020
466
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 12.83 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4. #include <list>
  5.  
  6. using namespace std;
  7.  
  8. class HeartRate {
  9. private:
  10.     int iSerialMoment;
  11.     int iCurrentRate;
  12.  
  13. public:
  14.     /*!****************************************************
  15.      *                                                    *
  16.      *                   Constructors                     *
  17.      *                                                    *
  18.      ******************************************************/
  19.  
  20.      /*!
  21.       * This constructor is setting default values when the objecti s created
  22.       *
  23.       * @return object       - Object of HeartRate class
  24.       *
  25.       */
  26.     HeartRate() :
  27.         iSerialMoment(0),
  28.         iCurrentRate(0)
  29.     {};
  30.  
  31.     /*!
  32.      * This constructor is explicit and sets the properties of the class
  33.      *
  34.      * @param iSerialMoment     - integer, that represents the serial moment
  35.      * @param iCurrentRate      - integer, that respresents the current rate
  36.      *
  37.      * @return object       - Object of HeartRate class
  38.      *
  39.      */
  40.     explicit HeartRate(int iSerialMoment, int iCurrentRate) :
  41.         iSerialMoment(iSerialMoment > 1 && iSerialMoment < (24 * 60 * 60) ? iSerialMoment : 0),
  42.         iCurrentRate(iCurrentRate > 30 && iCurrentRate < 300 ? iCurrentRate : 0)
  43.     {};
  44.  
  45.     /*!
  46.      * This constructor is used when copying objects
  47.      *
  48.      * @param obj           - Constant instance of HeartRate class to copy data from
  49.      *
  50.      * @return object       - Object of HeartRate class
  51.      *
  52.      */
  53.     HeartRate(const HeartRate& obj) :
  54.         iSerialMoment(obj.iSerialMoment),
  55.         iCurrentRate(obj.iCurrentRate)
  56.     {};
  57.  
  58.     /*!****************************************************
  59.      *                                                    *
  60.      *                   Get Methods                      *
  61.      *                                                    *
  62.      ******************************************************/
  63.  
  64.      /*!
  65.       * Returns this instance's current rate
  66.       *
  67.       * @return integer       - current rate
  68.       *
  69.       */
  70.     inline auto getCurrentRate() -> int {
  71.         return this->iCurrentRate;
  72.     }
  73.  
  74.     /*!
  75.      * Returns this instance's serial moment
  76.      *
  77.      * @return integer       - serial moment
  78.      *
  79.      */
  80.     inline auto getSerialMoment() -> int {
  81.         return this->iSerialMoment;
  82.     }
  83.  
  84.     /*!****************************************************
  85.      *                                                    *
  86.      *                   Set Methods                      *
  87.      *                                                    *
  88.      ******************************************************/
  89.  
  90.      /*!
  91.       * Sets the new value of the property iCurrentRate
  92.       *
  93.       * @param iCurrentRate       - integer, used to set new current rate value
  94.       *
  95.       */
  96.     inline auto setCurrentRate(int iCurrentRate) -> void {
  97.         if (iCurrentRate > 30 && iCurrentRate < 300)
  98.             this->iCurrentRate = iCurrentRate;
  99.     }
  100.    
  101.     /*!
  102.      * Sets the new value of the property iSerialMoment
  103.      *
  104.      * @param iSerialMoment       - integer, used to set new serial moment value
  105.      *
  106.      */
  107.     inline auto setSerialMoment(int iSerialMoment) -> void {
  108.         if (iSerialMoment > 1 && iSerialMoment < (24 * 60 * 60))
  109.             this->iSerialMoment = iSerialMoment;
  110.     }
  111.  
  112.     /*!****************************************************
  113.      *                                                    *
  114.      *                     Operators                      *
  115.      *                                                    *
  116.      ******************************************************/
  117.  
  118.     /*!
  119.      * Operator less than overloading for our class
  120.      *
  121.      * @param object - Constant instance of HeartRate to compare current properties with
  122.      *
  123.      * @return bool       - true if the current rate is lower than the object's current rate
  124.      *
  125.      */
  126.     inline auto operator<(const HeartRate& obj) -> bool {
  127.         return (this->iCurrentRate < obj.iCurrentRate ? true : false);
  128.     }
  129.  
  130.     /*!
  131.      * Operator greater than overloading for our class
  132.      *
  133.      * @param object - Constant instance of HeartRate to compare current properties with
  134.      *
  135.      * @return bool       - true if the current rate is higher than the object's current rate
  136.      *
  137.      */
  138.     inline auto operator>(const HeartRate& obj) -> bool {
  139.         return (this->iCurrentRate > obj.iCurrentRate ? true : false);
  140.     }
  141.  
  142.      /*!
  143.       * The method allows writing to the object through the output operator
  144.       *
  145.       * @param output        - Output stream data by reference
  146.       * @param obj           - Object of this(HeartRate) class
  147.       *
  148.       * @return ostream      - Output stream data
  149.       *
  150.       */
  151.     friend auto operator<<(ostream& output, const HeartRate& obj) -> ostream& {
  152.         output << obj.iSerialMoment << " " << obj.iCurrentRate << "\n\n";
  153.  
  154.         return output;
  155.     }
  156.  
  157.     /*!
  158.       * The method allows writing to the object through the input operator
  159.       *
  160.       * @param input         - Input stream data by reference
  161.       * @param obj           - Object of this(HeartRate) class
  162.       *
  163.       * @return istream      - Input stream data
  164.       *
  165.       */
  166.     friend auto operator>>(istream& input, HeartRate& obj) -> istream& {
  167.         input >> obj.iSerialMoment >> obj.iCurrentRate;
  168.  
  169.         return input;
  170.     }
  171.  
  172.     /*!****************************************************
  173.      *                                                    *
  174.      *                      Static                        *
  175.      *                                                    *
  176.      ******************************************************/
  177.  
  178.     /*!
  179.      * The function compares the current Serial moment of the patient and returns integer, based on the result
  180.      *
  181.      * @param left - Constant HeartRate object to readonly from
  182.      * @param right - Constant HeartRate object to readonly from
  183.      *
  184.      * @return
  185.      *      0 - Left object is greater than right object
  186.      *      1 - Left object is less than right object
  187.      *     -1 - Left object is equal to right object
  188.      *
  189.      */
  190.     static auto comparison(const HeartRate& left, const HeartRate& right) -> int {
  191.         return (left.iSerialMoment < right.iSerialMoment ? 0 : left.iSerialMoment > right.iSerialMoment ? 1 : -1);
  192.     }
  193. };
  194.  
  195. class HeartData {
  196. private:
  197.     string iPatientName;
  198.     list<HeartRate> iData;
  199.  
  200. public:
  201.     /*!****************************************************
  202.      *                                                    *
  203.      *                   Constructors                     *
  204.      *                                                    *
  205.      ******************************************************/
  206.  
  207.     /*!
  208.      * This constructor reads from a file and inputs data into its' properties
  209.      *
  210.      * @param iFileName     - string, that represents the name of the file
  211.      *
  212.      * @return object       - Object of HeartRate class
  213.      *
  214.      */
  215.     explicit HeartData(const string iFileName) {
  216.         try {
  217.             fstream iFile(iFileName, ios::in);
  218.            
  219.             iFile >> this->iPatientName;
  220.  
  221.             while (!iFile.eof() && iFile.is_open()) {
  222.                 pair<int, int> iHeartRates;
  223.                 iFile >> iHeartRates.first >> iHeartRates.second;
  224.  
  225.                 this->iData.push_back(HeartRate(iHeartRates.first, iHeartRates.second));
  226.             }
  227.         }
  228.         catch (exception err) {
  229.             cout << "\n\n" << err.what() << "\n\n";
  230.         }
  231.     }
  232.  
  233.     /*!****************************************************
  234.      *                                                    *
  235.      *                   Set Methods                      *
  236.      *                                                    *
  237.      ******************************************************/
  238.  
  239.     /*!
  240.      * The method sets the patient's name in the class
  241.      *
  242.      * @param iPatientName - string, that represents the new name of the patient
  243.      *
  244.      */
  245.     inline auto setPatientName(string iPatientName) -> void {
  246.         this->iPatientName = iPatientName;
  247.     }
  248.  
  249.     /*!****************************************************
  250.      *                                                    *
  251.      *                   Get Methods                      *
  252.      *                                                    *
  253.      ******************************************************/
  254.  
  255.     /*!
  256.      * The method returns the patient's name from the class
  257.      *
  258.      * @return string
  259.      *
  260.      */
  261.     inline auto getPatientName() -> string {
  262.         return this->iPatientName;
  263.     }
  264.  
  265.     /*!****************************************************
  266.      *                                                    *
  267.      *                      Static                        *
  268.      *                                                    *
  269.      ******************************************************/
  270.  
  271.     /*!
  272.      * The method gathers list of rates below or greater than specified rate
  273.      *
  274.      * @param obj           - HeartRate object by reference
  275.      * @param value         - Value to be compared with
  276.      * @param comparison    - Diversity between comparisons - greater than or less than
  277.      *
  278.      */
  279.     static auto calculateRates(const HeartData& obj, const int value, char comparison = '>') -> list<HeartRate> {
  280.         auto iResult = new list<HeartRate>();
  281.  
  282.         for (auto element : obj.iData) {
  283.             if (comparison == '<') {
  284.                 if (element.getCurrentRate() < value)
  285.                     iResult->push_back(element);
  286.             }
  287.             else {
  288.                 if (element.getCurrentRate() > value)
  289.                     iResult->push_back(element);
  290.             }
  291.         }
  292.  
  293.         return (*iResult);
  294.     }
  295.  
  296.     /*!
  297.      * The method gathers list of rates within left value and right value specified range
  298.      *
  299.      * @param obj           - HeartRate object by reference
  300.      * @param lvalue        - Left value to be compared with
  301.      * @param rvalue        - Right value to be compared with
  302.      *
  303.      * @return list         - Returns list of HeartRate class
  304.      *
  305.      */
  306.     static auto calculateRatesByTwoNumbers(const HeartData& obj, const int lvalue, const int rvalue) -> list<HeartRate> {
  307.         auto iResult = new list<HeartRate>();
  308.  
  309.         for (auto element : obj.iData) {
  310.            
  311.                 if (element.getCurrentRate() > lvalue && element.getCurrentRate() < rvalue)
  312.                     iResult->push_back(element);
  313.         }
  314.  
  315.         return (*iResult);
  316.     }
  317.  
  318.     /*!****************************************************
  319.      *                                                    *
  320.      *                      Streams                       *
  321.      *                                                    *
  322.      ******************************************************/
  323.    
  324.  
  325.     /*!
  326.      * The method allows writing to the object through the input operator
  327.      *
  328.      * @param input         - Input stream data by reference
  329.      * @param obj           - Object of this(HeartData) class
  330.      *
  331.      * @return istream      - Input stream data
  332.      *
  333.      */
  334.     friend auto operator>>(istream& input, HeartData& obj) -> istream& {
  335.         auto iHeartRate = new HeartRate();
  336.  
  337.         input >> obj.iPatientName >> (*iHeartRate);
  338.         obj.iData.push_back(*iHeartRate);
  339.  
  340.         return input;
  341.     }
  342.  
  343.     /*!
  344.      * The method allows reading from the object through the output operator
  345.      *
  346.      * @param output        - Output stream data by reference
  347.      * @param obj           - Object of this(HeartData) class
  348.      *
  349.      * @return ostream      - Output stream data
  350.      *
  351.      */
  352.     friend auto operator<<(ostream& output, const HeartData& obj) -> ostream& {
  353.        
  354.         output << "Patient Name: " << obj.iPatientName << "\n\nRates:\n\n";
  355.  
  356.         for (auto iRate : obj.iData) {
  357.             output << iRate;
  358.         }
  359.  
  360.         return output;
  361.     }
  362. };
  363.  
  364. /*!****************************************************
  365.  *                                                    *
  366.  *                   Main Program                     *
  367.  *                                                    *
  368.  ******************************************************/
  369.  
  370. int main()
  371. {
  372.     try {
  373.         auto iObject = new HeartData("C:\\Users\\Stefan.Kolev\\source\\repos\\ConsoleApplication31\\Debug\\test.txt");
  374.         cout << *iObject;
  375.  
  376.         auto iCalculatedRates = iObject->calculateRatesByTwoNumbers(*iObject, 60, 80);
  377.  
  378.         cout << "\n\nAfter calculation and between 60 and 80 rate:\n\n";
  379.  
  380.         for (auto iRate : iCalculatedRates) {
  381.             cout << iRate;
  382.         }
  383.     }
  384.     catch (exception & err) {
  385.         cout << err.what();
  386.     }
  387.  
  388.     return 0;
  389. };
Add Comment
Please, Sign In to add comment