Advertisement
Guest User

Untitled

a guest
Aug 23rd, 2017
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.03 KB | None | 0 0
  1. #include<iostream>
  2. #include<fstream>
  3. #include<string>
  4. /*
  5. Получите несколько значений от пользователя и запишите их в файл.
  6. Добавьте их к уже записанным там данным (при их наличии). При окончании пользователем ввода прочитайте файл и выведите на эк- ран все значения.
  7. */
  8.  
  9. std::fstream file;
  10. class Distance
  11. {
  12. private:
  13.     int feet;
  14.     float inches;
  15. public:
  16.     Distance() : feet(0), inches(0.0F) {}
  17.     Distance(float fitfeet)
  18.     {
  19.         feet = static_cast<int>(fitfeet);
  20.         inches = 12 * (fitfeet - feet);
  21.     }
  22.     Distance(int feetTemp, float inchesTemp)
  23.     {
  24.         feet = feetTemp;
  25.         inches = inchesTemp;
  26.     }
  27.     Distance(Distance& tmp)
  28.     {
  29.         *this = tmp;
  30.     }
  31.     friend Distance operator + (const Distance&, const Distance&);
  32.     friend std::ostream& operator << (std::ostream&, Distance&);
  33.     int CheckFeet(std::string tmp);
  34.     void setDistance();
  35.    
  36. };
  37.  
  38. int Distance::CheckFeet(std::string tmp)
  39. {
  40.     int strlen = tmp.size();
  41.     if (strlen == 0 || strlen > 5)
  42.     {
  43.         return 0;
  44.     }
  45.     for (int i(0); i < strlen; i++)
  46.     {
  47.         if ((tmp[i] <= '0' || tmp[i] >= '9') && tmp[i] != '-')
  48.         {
  49.             return 0;
  50.         }
  51.     }
  52.     double n = atof(tmp.c_str());
  53.     if (n <-999.0 || n > 999.0)
  54.     {
  55.         return 0;
  56.     }
  57.     return 1;
  58. }
  59.  
  60.  
  61.  
  62. void Distance::setDistance()
  63. {
  64.     std::string tmp;
  65.     std::cin.unsetf(std::ios::failbit);
  66.     while (true)
  67.     {
  68.         std::cout << "Enter feet of distance : ";
  69.         std::cin >> tmp;
  70.         if (CheckFeet(tmp)==0)
  71.         {
  72.             std::cout << "Uncorrect feets, pls enter new!" << std::endl;
  73.             std::cin.clear(std::ios::failbit);
  74.         }
  75.         else
  76.         {
  77.             std::cin.ignore(10, '\n');
  78.             feet = std::atoi(tmp.c_str());
  79.             break;
  80.         }
  81.         std::cin.clear();
  82.         std::cin.ignore(10, '\n');
  83.  
  84.     }
  85.     while (true)
  86.     {
  87.         std::cout << "Enter inches of distance : ";
  88.         std::cin >> inches;
  89.         if (inches<0 || inches>11.99)
  90.         {
  91.             std::cout << "Uncorrect inches, pls enter new!" << std::endl;
  92.             std::cin.clear(std::ios::failbit);
  93.         }
  94.         else if (std::cin.good())
  95.         {
  96.             std::cin.ignore(10, '\n');
  97.             break;
  98.         }
  99.         std::cin.clear();
  100.         std::cin.ignore(10, '\n');
  101.  
  102.     }
  103. }
  104.  
  105. Distance operator + (const Distance& dd1, const Distance& dd2)
  106. {
  107.     int f = dd1.feet + dd2.feet;
  108.     float i = dd1.inches + dd2.inches;
  109.     if (i >= 12.0)
  110.     {
  111.         i -= 12.0;
  112.         f++;
  113.  
  114.     }
  115.     return Distance(f, i);
  116. }
  117.  
  118. std::ostream& operator << (std::ostream& s, Distance& tmp)
  119. {
  120.     s << "\'" << tmp.feet << "\-'" << tmp.inches;
  121.     return s;
  122. }
  123.  
  124.  
  125.  
  126. int main()
  127. {
  128.     Distance tmp;
  129.     char ch('y');
  130.     file.open("dist.txt", std::fstream::app | std::fstream::out |
  131.                           std::fstream::in );
  132.     do
  133.     {
  134.     tmp.setDistance();
  135.     file.write(reinterpret_cast<char*>(&tmp), sizeof(tmp));
  136.     std::cout << "Retry? y\\n : ";
  137.         std::cin >> ch;
  138.     } while (ch != 'n');
  139.     file.seekg(0);
  140.     file.read(reinterpret_cast<char*>(&tmp), sizeof(tmp));
  141.  
  142.     while (!file.eof())
  143.     {
  144.         std::cout << tmp << std::endl;
  145.         file.read(reinterpret_cast<char*>(&tmp), sizeof(tmp));
  146.     }
  147.     system("PAUSE");
  148.     return 0;
  149. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement