evgeniyosipov

Knigi.cpp

Dec 27th, 2014
208
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.52 KB | None | 0 0
  1. #pragma once
  2.  
  3. class Knigi {
  4. public:
  5. // Конструктор cтандартный с инициализацией, обьект name инициализируется пустой строкой по умолчанию
  6.     Knigi(): sell_kolvo(0), summ_cena(0.0) { }
  7. // Конструкторы для инициализации с помощью обьекта типа istream
  8.     Knigi(std::istream &is) { is >> *this; }
  9. // Перегрузка операторов "<<" и ">>" istream,ostream и ofstream классов
  10.     friend std::istream& operator>>(std::istream&, Knigi&);
  11.     friend std::ostream& operator<<(std::ostream&, const Knigi&);
  12.     friend std::ofstream& operator<<(std::ofstream&, const Knigi&);
  13.  
  14.     ~Knigi(){};
  15. private:
  16.     std::string name;
  17.     unsigned sell_kolvo;
  18.     double summ_cena;
  19. };
  20.  
  21. std::string getCurrentTime();
  22.  
  23. Реализация класса Knigi
  24.  
  25. #include "stdafx.h"
  26.  
  27. //istream
  28.  
  29. std::istream&
  30. operator>>(std::istream& in, Knigi& s)
  31. {  
  32.     double cena;
  33.  
  34.     std::cout << "Введите название (можно и автора) книги: " << std::flush;
  35.     SetConsoleCP (1251); // Смена кодировки для корректного вывода в txt файл
  36.    
  37.     std::getline(in, s.name);
  38.     SetConsoleCP (866); //Смена кодировки для корректного ввода и вывода в консоли
  39.  
  40.     std::cout << "Введите кол-во книг (целые числа): " << std::flush;
  41.     while(in >> s.sell_kolvo, !std::cin.eof()){
  42.        
  43.         if (in.fail()){
  44.         std::cerr << "Ошибка! Введите целое число: " << std::flush;
  45.         in.clear();
  46.         fflush(stdin);
  47.         continue;
  48.         }
  49.         fflush(stdin);
  50.         break;
  51.         }
  52.  
  53.     std::cout << "Введите цену за одну книгу (например, 3.50): " << std::flush;
  54.     while(in >> cena, !std::cin.eof()){
  55.         if (in.fail()){
  56.         std::cerr << "Ошибка! Введите корректное число (например, 2.20): " << std::flush;
  57.         in.clear();
  58.         fflush(stdin);
  59.         continue;
  60.         }
  61.         fflush(stdin);
  62.         break;
  63.         }
  64.    
  65.     s.summ_cena = s.sell_kolvo * cena;
  66.    
  67.     return in;
  68. }
  69.  
  70. //ostream
  71.  
  72. std::ostream& operator<<(std::ostream& out, const Knigi& s)
  73. {
  74.     SYSTEMTIME lst; //Обьект SYSTEMTIME, Windows.h
  75.      
  76.     out << "\nНазвание книги: " << s.name << "  " << "Кол-во книг: " <<s.sell_kolvo << "  "
  77.         << "Итоговая цена: " <<s.summ_cena << std::endl;
  78.     GetLocalTime(&lst); // Присвоить lst значение локального времени
  79.     printf("Дата и время: %d.%d.%d   %d:%d:%d\n" ,lst.wDay,lst.wMonth,lst.wYear,lst.wHour,lst.wMinute,lst.wSecond);
  80.     return out;
  81. }
  82.  
  83.  
  84.  
  85. // Локальное время для вывода в txt файл
  86. std::string getCurrentTime()
  87. {
  88.   time_t curTime;
  89.   struct tm *timeInfo;
  90.  
  91.   time(&curTime);
  92.   timeInfo = localtime(&curTime);
  93.  
  94.   char buffer[1024];
  95.   strftime(buffer, 1024, "%d.%m.%Y %X", timeInfo);
  96.   std::string curFormatDate = std::string(buffer);
  97.  
  98.   return curFormatDate;
  99. }
  100.  
  101. //ofstream
  102.  
  103. std::ofstream& operator<<(std::ofstream& fout, const Knigi& s)
  104. {
  105.  
  106.     fout << "\nНазвание книги: " << s.name << "\n"
  107.     << "Кол-во книг: " << s.sell_kolvo << "\n"
  108.     << "Итоговая цена: " << s.summ_cena << "\n"
  109.     << getCurrentTime() << "\n\n";
  110.  
  111.     return fout;
  112. }
  113.  
  114. Основной код
  115.  
  116. #include "stdafx.h"
  117.  
  118. int _tmain(int argc, _TCHAR* argv[])
  119. {
  120.     setlocale(LC_ALL, "Russian");
  121.  
  122.     std::string answ;
  123.     std::cout << "Здравствуйте, программа \"Книги\" реалезует возможность кассовой операции \nс выводом чека. Попробуйте, вам понравиться!\n\n"<< std::flush;
  124.  
  125.  
  126.     while (1) {
  127.     Knigi bookstr(std::cin);
  128.     std::cout << bookstr << std::endl;
  129.  
  130.  
  131.     std::ofstream btxt("Чек.txt", std::ios::app);
  132.     btxt<<bookstr;
  133.    
  134.     if(!btxt)
  135.     {
  136.         std::cerr << "!!! Ошибка !!! Недостаточно места/прав для записи Чек.txt\n" << std::endl;
  137.  
  138.         system("pause");
  139.         return 1;
  140.     }
  141.    
  142.     std::cout << "============================================================" << std::endl;
  143.     std::cout << "Хотите ввести данные ещё одной книги? Y(да) или N(нет):  " << std::flush;
  144.  
  145.  
  146.    
  147.     while (std::getline(std::cin, answ))
  148.     {
  149.             switch (answ[0])
  150.             {
  151.             case 'n':
  152.             case 'N':
  153.                 std::cout << "============================================================" << std::endl;
  154.                     std::cout << "\nВот и всё, просмотрите текстовой файл Чек.txt и узнайте, что же там!\n"
  155.                               << "PS: Файл Чек.txt располагается в той же директории, что и сама программа\n"
  156.                               << "\nЕвгений Осипов (www.fastandclever.ru), 2011\n" << std::endl;
  157.                     btxt << "\n======================================\n" << "Дата/время последних операций: "<< getCurrentTime() << "\nЕвгений Осипов (www.fastandclever.ru), 2011\n"
  158.                          << "======================================" <<std::endl;
  159.                     btxt.close();
  160.                                 system("pause");
  161.                                 return 0;
  162.             case 'y':
  163.             case 'Y':
  164.                 std::cout << "============================================================" << std::endl;
  165.                     std::cout << std::endl;
  166.                     break;
  167.             default:
  168.             std::cerr << "Ошибка! Введите Y(да) или N(нет): " << std::flush;
  169.             continue;
  170.             }
  171.             break;
  172.             }
  173.     }
  174.  
  175.     system("pause");
  176.     return 0;
  177. }
Advertisement
Add Comment
Please, Sign In to add comment